1. 15 7月, 2008 4 次提交
    • M
      IB/sa: Fail requests made while creating new SM AH · 164ba089
      Moni Shoua 提交于
      This patch solves a race that occurs after an event occurs that causes
      the SA query module to flush its SM address handle (AH).  When SM AH
      becomes invalid and needs an update it is handled by the global
      workqueue.  On the other hand this event is also handled in the IPoIB
      driver by queuing work in the ipoib_workqueue that does multicast
      joins.  Although queuing is in the right order, it is done to 2
      different workqueues and so there is no guarantee that the first to be
      queued is the first to be executed.
      
      This causes a problem because IPoIB may end up sending an request to
      the old SM, which will take a long time to time out (since the old SM
      is gone); this leads to a much longer than necessary interruption in
      multicast traffer.
      
      The patch sets the SA query module's SM AH to NULL when the event
      occurs, and until update_sm_ah() is done, any request that needs sm_ah
      fails with -EAGAIN return status.
      
      For consumers, the patch doesn't make things worse.  Before the patch,
      MADs are sent to the wrong SM so the request gets lost.  Consumers can
      be improved if they examine the return code and respond to EAGAIN
      properly but even without an improvement the situation is not getting
      worse.
      Signed-off-by: NMoni Levy <monil@voltaire.com>
      Signed-off-by: NMoni Shoua <monis@voltaire.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      164ba089
    • S
      RDMA: Fix license text · a9474917
      Sean Hefty 提交于
      The license text for several files references a third software license
      that was inadvertently copied in.  Update the license to what was
      intended.  This update was based on a request from HP.
      Signed-off-by: NSean Hefty <sean.hefty@intel.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      a9474917
    • C
      RDMA/nes: Remove unnecessary memset() · 929555a2
      Christophe Jaillet 提交于
      Remove an explicit memset(..., 0, ...) of a 'listener' structure
      allocated with kzalloc().
      Signed-off-by: NChristophe Jaillet <christophe.jaillet@wanadoo.fr>
      Acked-by: NFaisal Latif <faisal@neteffect.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      929555a2
    • R
      IB/srp: Remove use of cached P_Key/GID queries · 969a60f9
      Roland Dreier 提交于
      The SRP initiator is currently using ib_find_cached_pkey() and
      ib_get_cached_gid() in situations where the uncached ib_find_pkey()
      and ib_query_gid() functions serve just as well: sleeping is allowed
      and performance is not an issue.  Since we want to eliminate the
      cached operations in the long term, convert SRP to use the uncached
      variants.
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      969a60f9
  2. 12 7月, 2008 1 次提交
  3. 09 7月, 2008 1 次提交
  4. 05 7月, 2008 1 次提交
  5. 24 6月, 2008 1 次提交
  6. 21 6月, 2008 4 次提交
  7. 19 6月, 2008 1 次提交
  8. 11 6月, 2008 1 次提交
    • R
      RDMA/nes: Fix off-by-one in nes_reg_user_mr() error path · 24797a34
      Roland Dreier 提交于
      nes_reg_user_mr() should fail if page_count becomes >= 1024 * 512
      rather than just testing for strict >, because page_count is
      essentially used as an index into an array with 1024 * 512 entries, so
      allowing the loop to continue with page_count == 1024 * 512 means that
      memory after the end of the array is corrupted.  This leads to a crash
      triggerable by a userspace application that requests registration of a
      too-big region.
      
      Also get rid of the call to pci_free_consistent() here to avoid
      corrupting state with a double free, since the same memory will be
      freed in the code jumped to at reg_user_mr_err.
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      24797a34
  9. 10 6月, 2008 1 次提交
    • R
      IB/core: Remove IB_DEVICE_SEND_W_INV capability flag · 4c0283fc
      Roland Dreier 提交于
      In 2.6.26, we added some support for send with invalidate work
      requests, including a device capability flag to indicate whether a
      device supports such requests.  However, the support was incomplete:
      the completion structure was not extended with a field for the key
      contained in incoming send with invalidate requests.
      
      Full support for memory management extensions (send with invalidate,
      local invalidate, fast register through a send queue, etc) is planned
      for 2.6.27.  Since send with invalidate is not very useful by itself,
      just remove the IB_DEVICE_SEND_W_INV bit before the 2.6.26 final
      release; we will add an IB_DEVICE_MEM_MGT_EXTENSIONS bit in 2.6.27,
      which makes things simpler for applications, since they will not have
      quite as confusing an array of fine-grained bits to check.
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      4c0283fc
  10. 07 6月, 2008 3 次提交
    • R
      IB/umem: Avoid sign problems when demoting npages to integer · 8079ffa0
      Roland Dreier 提交于
      On a 64-bit architecture, if ib_umem_get() is called with a size value
      that is so big that npages is negative when cast to int, then the
      length of the page list passed to get_user_pages(), namely
      
      	min_t(int, npages, PAGE_SIZE / sizeof (struct page *))
      
      will be negative, and get_user_pages() will immediately return 0 (at
      least since 900cf086, "Be more robust about bad arguments in
      get_user_pages()").  This leads to an infinite loop in ib_umem_get(),
      since the code boils down to:
      
      	while (npages) {
      		ret = get_user_pages(...);
      		npages -= ret;
      	}
      
      Fix this by taking the minimum as unsigned longs, so that the value of
      npages is never truncated.
      
      The impact of this bug isn't too severe, since the value of npages is
      checked against RLIMIT_MEMLOCK, so a process would need to have an
      astronomical limit or have CAP_IPC_LOCK to be able to trigger this,
      and such a process could already cause lots of mischief.  But it does
      let buggy userspace code cause a kernel lock-up; for example I hit
      this with code that passes a negative value into a memory registartion
      function where it is promoted to a huge u64 value.
      
      Cc: <stable@kernel.org>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      8079ffa0
    • R
      IB/ipath: Fix SM trap forwarding · 27676a3e
      Ralph Campbell 提交于
      SM/SMA traps received by the ipath driver should be forwarded to the
      SM if it is running on the host.  The ib_ipath driver was incorrectly
      replying with "bad method."
      Signed-off-by: NRalph Campbell <ralph.campbell@qlogic.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      27676a3e
    • J
  11. 27 5月, 2008 2 次提交
    • R
      IB/ipath: Fix device capability flags · 03031f71
      Ralph Campbell 提交于
      The driver supports a few features (RNR NAK, port active event, SRQ
      resize) that were not reported in the device capability flags.  This
      patch fixes that.
      Signed-off-by: NRalph Campbell <ralph.campbell@qlogic.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      03031f71
    • R
      IB/ipath: Avoid test_bit() on u64 SDMA status value · e8ffef73
      Roland Dreier 提交于
      Gabriel C <nix.or.die@googlemail.com> pointed out that when the x86
      bitops are updated to operate on unsigned long, the code in
      sdma_abort_task() will produce warnings:
      
          drivers/infiniband/hw/ipath/ipath_sdma.c: In function 'sdma_abort_task':
          drivers/infiniband/hw/ipath/ipath_sdma.c:267: warning: passing argument 2 of 'constant_test_bit' from incompatible pointer type
      
      and so on, because it uses test_bit() to operation on a u64 value
      (returned by ipath_read_kref64() for a hardware register).
      
      Fix up these warnings by converting the test_bit() operations to &ing
      with appropriate symbolic defines of the bits within the hardware
      register.  This has the benign side-effect of making the code more
      self-documenting as well.
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      e8ffef73
  12. 24 5月, 2008 1 次提交
  13. 21 5月, 2008 3 次提交
    • J
      IPoIB: Test for NULL broadcast object in ipiob_mcast_join_finish() · e1d50dce
      Jack Morgenstein 提交于
      We saw a kernel oops in our regression testing when a multicast "join
      finish" occurred just after the interface was -- this is
      <https://bugs.openfabrics.org/show_bug.cgi?id=1040>.  The test
      randomly causes the HCA physical port to go down then up.
      
      The cause of this is that ipoib_mcast_join_finish() processing happen
      just after ipoib_mcast_dev_flush() was invoked (in which case the
      broadcast pointer is NULL).  This patch tests for and handles the case
      where priv->broadcast is NULL.
      
      Cc: <stable@kernel.org>
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      e1d50dce
    • R
      IB/mlx4: Fix creation of kernel QP with max number of send s/g entries · cd155c1c
      Roland Dreier 提交于
      When creating a kernel QP where the consumer asked for a send queue
      with lots of scatter/gater entries, set_kernel_sq_size() incorrectly
      returned an error if the send queue stride is larger than the
      hardware's maximum send work request descriptor size.  This is not a
      problem; the only issue is to make sure that the actual descriptors
      used do not overflow the maximum descriptor size, so check this instead.
      
      Clamp the returned max_send_sge value to be no bigger than what
      query_device returns for the max_sge to avoid confusing hapless users,
      even if the hardware is capable of handling a few more s/g entries.
      
      This bug caused NFS/RDMA mounts to fail when the server adapter used
      the mlx4 driver.
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      cd155c1c
    • G
      IB: fix race in device_create · 6c06aec2
      Greg Kroah-Hartman 提交于
      There is a race from when a device is created with device_create() and
      then the drvdata is set with a call to dev_set_drvdata() in which a
      sysfs file could be open, yet the drvdata will be NULL, causing all
      sorts of bad things to happen.
      
      This patch fixes the problem by using the new function,
      device_create_drvdata().
      
      Cc: Kay Sievers <kay.sievers@vrfy.org>
      Reviewed-by: NRoland Dreier <rolandd@cisco.com>
      Cc: Sean Hefty <sean.hefty@intel.com>
      Cc: Hal Rosenstock <hal.rosenstock@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      6c06aec2
  14. 17 5月, 2008 3 次提交
  15. 16 5月, 2008 2 次提交
    • R
      IB/ipath: Fix UC receive completion opcode for RDMA WRITE with immediate · df3f0da8
      Ralph Campbell 提交于
      When I fixed the RC receive completion opcode in 2bfc8e9e ("IB/ipath:
      Return the correct opcode for RDMA WRITE with immediate"), I forgot to
      fix UC, which had the same problem for RDMA write with immediate
      returning the wrong opcode.
      Signed-off-by: NRalph Campbell <ralph.campbell@qlogic.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      df3f0da8
    • R
      IB/ipath: Fix printk format for ipath_sdma_status · cd80ec6f
      Roland Dreier 提交于
      Commit f018c7e1 ("IB/ipath: Change ipath_devdata.ipath_sdma_status to be
      unsigned long") changed ipath_sdma_status to be unsigned long, but left
      a few debug messages that printed it out with a %016llx format, which
      generates the warnings
      
          drivers/infiniband/hw/ipath/ipath_sdma.c:348: warning: format '%016llx' expects type 'long long unsigned int', but argument  3 has type 'long unsigned int'
          drivers/infiniband/hw/ipath/ipath_sdma.c:618: warning: format '%016llx' expects type 'long long unsigned int', but argument  3 has type 'long unsigned int'
      
      Fix this by changing the format used to print out the value to %08lx
      (8 hex digits are now sufficient, because the highest bit used is 31).
      
      Warnings reported by Randy Dunlap <randy.dunlap@oracle.com>.
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      cd80ec6f
  16. 14 5月, 2008 7 次提交
  17. 08 5月, 2008 4 次提交
    • S
      IB/ehca: Wait for async events to finish before destroying QP · 12137c59
      Stefan Roscher 提交于
      This is necessary because, in a multicore environment, a race between
      uverbs async handler and destroy QP could occur.
      
      Signed-off-by: Stefan Roscher <stefan.roscher at de.ibm.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      12137c59
    • J
      IB/ipath: Fix SDMA error recovery in absence of link status change · ab69b3cf
      John Gregor 提交于
      What's fixed:
      
          in ipath_cancel_sends()
      
              We need to unconditionally set ABORTING.  So, swap the tests
              so the set_bit() isn't shadowed by the &&.
      
              If we've disarmed the piobufs, then we need to unconditionally
              set DISARMED.  So, move it out from the overly protective if
              at the bottom.
      
          in sdma_abort_task()
      
              Abort_task was written knowing that the SDMA engine would always
              be reset (and restarted) on error.  A recent change broke that
              fundamental assumption by taking the restart portion and making
              it conditional on a link status change.  But, SDMA can go boom
              without a link status change in some conditions.
      Signed-off-by: NJohn Gregor <john.gregor@qlogic.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      ab69b3cf
    • D
      IB/ipath: Need to always request and handle PIO avail interrupts · e2ab41ca
      Dave Olson 提交于
      Now that we always use PIO for vl15 on 7220, we could get stuck forever
      if we happened to run out of PIO buffers from the verbs code, because
      the setup code wouldn't run; the interrupt was also ignored if SDMA was
      supported.  We also have to reduce the pio update threshold if we have
      fewer kernel buffers than the existing threshold.
      
      Clean up the initialization a bit to get ordering safer and more
      sensible, and use the existing ipath_chg_kernavail call to do init,
      rather than doing it separately.
      
      Drop unnecessary clearing of pio buffer on pio parity error.
      
      Drop incorrect updating of pioavailshadow when exitting freeze mode
      (software state may not match chip state if buffer has been allocated
      and not yet written).
      
      If we couldn't get a kernel buffer for a while, make sure we are
      in sync with hardware, mainly to handle the exitting freeze case.
      Signed-off-by: NDave Olson <dave.olson@qlogic.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      e2ab41ca
    • M
      IB/ipath: Fix count of packets received by kernel · 2889d1ef
      Michael Albaugh 提交于
      The loop in ipath_kreceive() that processes packets increments the
      loop-index 'i' once too often, because the exit condition does not
      depend on it, and is checked after the increment. By adding a check for
      !last to the iterator in the for loop, we correct that in a way that is
      not so likely to be re-broken by changes in the loop body.
      Signed-off-by: NMichael Albaugh <micheal.albaugh@qlogic.com>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      2889d1ef