* [GIT PULL] please pull infiniband.git
@ 2013-03-25 16:42 Roland Dreier
2013-04-05 15:56 ` David Woodhouse
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2013-03-25 16:42 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Small batch of InfiniBand/RDMA fixes for 3.9:
- Fix for TX lockup in IPoIB
- QLogic -> Intel update for qib driver
- Small static checker fix for qib
- Fix error path return value in cxgb4
----------------------------------------------------------------
Dan Carpenter (1):
IB/ipath: Silence a static checker warning
Mike Marciniszyn (1):
IPoIB: Fix send lockup due to missed TX completion
Roland Dreier (1):
Merge branches 'cxgb4', 'ipoib' and 'qib' into for-next
Vinit Agnihotri (1):
IB/qib: change QLogic to Intel
Wei Yongjun (1):
RDMA/cxgb4: Fix error return code in create_qp()
drivers/infiniband/hw/cxgb4/qp.c | 4 +++-
drivers/infiniband/hw/ipath/ipath_verbs.c | 2 +-
drivers/infiniband/hw/qib/Kconfig | 6 +++---
drivers/infiniband/hw/qib/qib_driver.c | 5 +++--
drivers/infiniband/hw/qib/qib_iba6120.c | 3 ++-
drivers/infiniband/hw/qib/qib_init.c | 8 ++++----
drivers/infiniband/hw/qib/qib_sd7220.c | 4 ++--
drivers/infiniband/hw/qib/qib_verbs.c | 4 ++--
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 8 ++++++--
firmware/Makefile | 2 +-
firmware/{qlogic => intel}/sd7220.fw.ihex | 0
11 files changed, 27 insertions(+), 19 deletions(-)
rename firmware/{qlogic => intel}/sd7220.fw.ihex (100%)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-03-25 16:42 [GIT PULL] please pull infiniband.git Roland Dreier
@ 2013-04-05 15:56 ` David Woodhouse
0 siblings, 0 replies; 223+ messages in thread
From: David Woodhouse @ 2013-04-05 15:56 UTC (permalink / raw)
To: Roland Dreier, Vinit Agnihotri, Dean Luick, Mike Marciniszyn
Cc: Linus Torvalds, linux-kernel, linux-rdma
[-- Attachment #1: Type: text/plain, Size: 1351 bytes --]
On Mon, 2013-03-25 at 09:42 -0700, Roland Dreier wrote:
> Hi Linus,
>
> Please pull from
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
> Vinit Agnihotri (1):
> IB/qib: change QLogic to Intel
> firmware/Makefile | 2 +-
> firmware/{qlogic => intel}/sd7220.fw.ihex | 0
This is an ABI change, and it's wrong. Moving the firmware from one
location to another breaks drivers which look for it in one place when
it is actually in the other.
Besides, the firmware/ directory of the kernel is deprecated and very
few people actually use it. I don't think *any* distributions do
anything other than ignore its contents, or have done for some years.
Any changes need to be made in the separate linux-firmware repository.
I don't recall seeing this change being submitted there, and if it *was*
it would have been rejected on the basis that it breaks old kernels.
Unless we *duplicate* the file in both qlogic/ and intel/ directories,
but that's just silly.
We already have a *bunch* of other firmwares in the qlogic/ directory
which nobody seems interested in moving. There is no point in this
marketing-driven revisionism; please leave this one where it is too.
Please revert this part of commit e2eed58b4 before 3.9. Thanks.
--
dwmw2
[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 6171 bytes --]
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2015-04-22 17:08 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2015-04-22 17:08 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA updates for 4.1:
- IPoIB fixes from Doug Ledford and Erez Shitrit
- iSER updates from Sagi Grimberg
- mlx4 GUID handling changes from Yishai Hadas
- other misc fixes
----------------------------------------------------------------
Bart Van Assche (1):
IB/srp: Use P_Key cache for P_Key lookups
Doug Ledford (11):
IB/ipoib: factor out ah flushing
IB/ipoib: change init sequence ordering
IB/ipoib: Consolidate rtnl_lock tasks in workqueue
IB/ipoib: Make the carrier_on_task race aware
IB/ipoib: Use dedicated workqueues per interface
IB/ipoib: No longer use flush as a parameter
IB/ipoib: fix MCAST_FLAG_BUSY usage
IB/ipoib: deserialize multicast joins
IB/ipoib: drop mcast_mutex usage
ib_srpt: convert printk's to pr_* functions
Merge branches 'cve-fixup', 'ipoib', 'iser', 'misc-4.1', 'or-mlx4' and 'srp' into for-4.1
Erez Shitrit (6):
IB/ipoib: Use one linear skb in RX flow
IB/ipoib: Update broadcast record values after each successful join request
IB/ipoib: Handle QP in SQE state
IB/ipoib: Save only IPOIB_MAX_PATH_REC_QUEUE skb's
IB/ipoib: Remove IPOIB_MCAST_RUN bit
IB/mlx4: Fix WQE LSO segment calculation
Honggang LI (1):
mlx5: wrong page mask if CONFIG_ARCH_DMA_ADDR_T_64BIT enabled for 32Bit architectures
Sagi Grimberg (18):
IB/iser: Fix unload during ep_poll wrong dereference
IB/iser: Handle fastreg/local_inv completion errors
IB/iser: Fix wrong calculation of protection buffer length
IB/iser: Remove redundant cmd_data_len calculation
IB/iser: Remove a redundant struct iser_data_buf
IB/iser: Don't pass ib_device to fall_to_bounce_buff routine
IB/iser: Move memory reg/dereg routines to iser_memory.c
IB/iser: Remove redundant assignments in iser_reg_page_vec
IB/iser: Get rid of struct iser_rdma_regd
IB/iser: Merge build page-vec into register page-vec
IB/iser: Move fastreg descriptor pool get/put to helper functions
IB/iser: Move PI context alloc/free to routines
IB/iser: Make fastreg pool cache friendly
IB/iser: Modify struct iser_mem_reg members
IB/iser: Pass struct iser_mem_reg to iser_fast_reg_mr and iser_reg_sig_mr
IB/iser: Remove code duplication for a single DMA entry
IB/iser: Bump version to 1.6
IB/iser: Rewrite bounce buffer code path
Sebastian Ott (1):
infiniband/mlx4: check for mapping error
Selvin Xavier (1):
MAINTAINERS: Adding list of maintainers for ocrdma
Stephen Hemminger (1):
rdma: replace deprecated ifconfig in doc
Sébastien Dugué (1):
ib_uverbs: Fix pages leak when using XRC SRQs
Yann Droneaud (2):
IB/core: disallow registering 0-sized memory region
IB/core: don't disallow registering region starting at 0x0
Yishai Hadas (9):
IB/mlx4: Alias GUID adding persistency support
net/mlx4_core: Manage alias GUID per VF
net/mlx4_core: Set initial admin GUIDs for VFs
IB/mlx4: Manage admin alias GUID upon admin request
IB/mlx4: Change init flow to request alias GUIDs for active VFs
IB/mlx4: Request alias GUID on demand
net/mlx4_core: Raise slave shutdown event upon FLR
net/mlx4_core: Return the admin alias GUID upon host view request
IB/mlx4: Change alias guids default to be host assigned
Documentation/filesystems/nfs/nfs-rdma.txt | 9 +-
MAINTAINERS | 9 +
drivers/infiniband/core/umem.c | 7 +-
drivers/infiniband/core/uverbs_main.c | 22 +-
drivers/infiniband/hw/mlx4/alias_GUID.c | 457 +++++++++++++-----
drivers/infiniband/hw/mlx4/mad.c | 9 +
drivers/infiniband/hw/mlx4/main.c | 26 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 14 +-
drivers/infiniband/hw/mlx4/qp.c | 7 +-
drivers/infiniband/hw/mlx4/sysfs.c | 44 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 31 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 18 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 195 ++++----
drivers/infiniband/ulp/ipoib/ipoib_main.c | 73 ++-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 520 ++++++++++----------
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 44 +-
drivers/infiniband/ulp/iser/iscsi_iser.h | 66 +--
drivers/infiniband/ulp/iser/iser_initiator.c | 66 ++-
drivers/infiniband/ulp/iser/iser_memory.c | 523 ++++++++++++---------
drivers/infiniband/ulp/iser/iser_verbs.c | 220 +++------
drivers/infiniband/ulp/srp/ib_srp.c | 9 +-
drivers/infiniband/ulp/srpt/ib_srpt.c | 188 ++++----
drivers/net/ethernet/mellanox/mlx4/cmd.c | 42 +-
drivers/net/ethernet/mellanox/mlx4/eq.c | 2 +
drivers/net/ethernet/mellanox/mlx4/main.c | 31 ++
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 1 +
.../net/ethernet/mellanox/mlx5/core/pagealloc.c | 10 +-
include/linux/mlx4/device.h | 4 +
28 files changed, 1513 insertions(+), 1134 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2015-04-02 17:27 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2015-04-02 17:27 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
One 4.0 RDMA change:
- Fix for exploitable integer overflow in uverbs interface.
----------------------------------------------------------------
Shachar Raindel (1):
IB/uverbs: Prevent integer overflow in ib_umem_get address arithmetic
drivers/infiniband/core/umem.c | 8 ++++++++
1 file changed, 8 insertions(+)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2015-02-20 17:08 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2015-02-20 17:08 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA changes for 3.20 merge window:
- Re-enable on-demand paging changes with stable ABI
- Fairly large set of ocrdma HW driver fixes
- Some qib HW driver fixes
- Other miscellaneous changes
----------------------------------------------------------------
Andreea-Cristina Bernat (2):
IB/qib: Replace rcu_assign_pointer() with RCU_INIT_POINTER() in qib_qp.c
IB/qib: Replace rcu_assign_pointer() with RCU_INIT_POINTER() in qib_keys.c
Ariel Nahum (1):
IB/iser: Release the iscsi endpoint if ep_disconnect wasn't called
Bart Van Assche (1):
MAINTAINERS: Update SRP initiator entry
Dan Carpenter (2):
IB/mlx5: Fix error code in get_port_caps()
RDMA/ocrdma: Fix off by one in ocrdma_query_gid()
Devesh Sharma (4):
RDMA/ocrdma: Report correct count of interrupt vectors while registering ocrdma device
RDMA/ocrdma: Discontinue support of RDMA-READ-WITH-INVALIDATE
RDMA/ocrdma: Honor return value of ocrdma_resolve_dmac
RDMA/ocrdma: set vlan present bit for user AH
Eli Cohen (1):
IB/core: Add support for extended query device caps
Haggai Eran (3):
IB/core: Properly handle registration of on-demand paging MRs after dereg
IB/core: Add on demand paging caps to ib_uverbs_ex_query_device
IB/mlx5: Enable the ODP capability query verb
Hariprasad S (2):
RDMA/cxgb4: Serialize CQ event upcalls with CQ destruction
RDMA/cxgb4: Don't hang threads forever waiting on WR replies
Ilya Nelkenbaum (1):
IB/core: When marshaling ucma path from user-space, clear unused fields
Jack Morgenstein (1):
IB/mlx4: In mlx4_ib_demux_cm, print out GUID in host-endian order
Majd Dibbiny (3):
IB/mlx4: Fix memory leak in __mlx4_ib_modify_qp
IB/mlx4: Bug fixes in mlx4_ib_resize_cq
IB/mlx5: Update the dev in reg_create
Mike Marciniszyn (3):
IB/qib: Fix sizeof checkpatch warnings
IB/qib: Fix checkpatch warnings
IB/qib: Add blank line after declaration
Mitesh Ahuja (7):
RDMA/ocrdma: Add support for IB stack compliant stats in sysfs.
RDMA/ocrdma: Increase the GID table size.
RDMA/ocrdma: Move PD resource management to driver.
RDMA/ocrdma: Host crash on destroying device resources
RDMA/ocrdma: Add support for interrupt moderation
RDMA/ocrdma: remove reference of ocrdma_dev out of ocrdma_qp structure
RDMA/ocrdma: Update the ocrdma module version string
Mitko Haralanov (1):
IB/qib: Do not write EEPROM
Moshe Lazer (1):
IB/core: Fix deadlock on uverbs modify_qp error flow
Or Gerlitz (1):
IB/mlx4: Fix wrong usage of IPv4 protocol for multicast attach/detach
Padmanabh Ratnakar (1):
RDMA/ocrdma: Report correct state in ibv_query_qp
Rasmus Villemoes (2):
RDMA/ocrdma: Help gcc generate better code for ocrdma_srq_toggle_bit
RDMA/ocrdma: Use unsigned for bit index
Rickard Strandqvist (1):
IB/ipath: Remove unused function in ipath_wc_ppc64
Roi Dayan (1):
IB/iser: Use correct dma direction when unmapping SGs
Roland Dreier (1):
Merge branches 'core', 'cxgb4', 'iser', 'mlx4', 'mlx5', 'ocrdma', 'odp', 'qib' and 'srp' into for-next
Sagi Grimberg (1):
IB/iser: Fix memory regions possible leak
Selvin Xavier (2):
RDMA/ocrdma: Debugfs enhancments for ocrdma driver
RDMA/ocrdma: Allow expansion of the SQ CQEs via buddy CQ expansion of the QP
Vinit Agnihotri (1):
IB/qib: Add support for the new QMH7360 card
MAINTAINERS | 2 +-
drivers/infiniband/core/ucma.c | 3 +
drivers/infiniband/core/umem_odp.c | 3 +-
drivers/infiniband/core/uverbs.h | 1 +
drivers/infiniband/core/uverbs_cmd.c | 158 +++++++++----
drivers/infiniband/core/uverbs_main.c | 1 +
drivers/infiniband/hw/cxgb4/ev.c | 9 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 29 ++-
drivers/infiniband/hw/ipath/ipath_kernel.h | 3 -
drivers/infiniband/hw/ipath/ipath_wc_ppc64.c | 13 --
drivers/infiniband/hw/ipath/ipath_wc_x86_64.c | 15 --
drivers/infiniband/hw/mlx4/cm.c | 2 +-
drivers/infiniband/hw/mlx4/cq.c | 7 +-
drivers/infiniband/hw/mlx4/main.c | 10 +-
drivers/infiniband/hw/mlx4/qp.c | 6 +-
drivers/infiniband/hw/mlx5/main.c | 4 +-
drivers/infiniband/hw/mlx5/mr.c | 1 +
drivers/infiniband/hw/ocrdma/ocrdma.h | 38 +++-
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 38 +++-
drivers/infiniband/hw/ocrdma/ocrdma_ah.h | 6 +
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 312 ++++++++++++++++++++++----
drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 2 +
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 12 +-
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 68 +++++-
drivers/infiniband/hw/ocrdma/ocrdma_stats.c | 241 ++++++++++++++++++++
drivers/infiniband/hw/ocrdma/ocrdma_stats.h | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 183 ++++++++++++---
drivers/infiniband/hw/qib/qib.h | 16 +-
drivers/infiniband/hw/qib/qib_common.h | 4 +-
drivers/infiniband/hw/qib/qib_debugfs.c | 1 -
drivers/infiniband/hw/qib/qib_diag.c | 9 +-
drivers/infiniband/hw/qib/qib_driver.c | 5 +-
drivers/infiniband/hw/qib/qib_eeprom.c | 198 +---------------
drivers/infiniband/hw/qib/qib_file_ops.c | 26 ++-
drivers/infiniband/hw/qib/qib_fs.c | 9 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 15 +-
drivers/infiniband/hw/qib/qib_iba7220.c | 14 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 52 +++--
drivers/infiniband/hw/qib/qib_init.c | 12 +-
drivers/infiniband/hw/qib/qib_intr.c | 1 -
drivers/infiniband/hw/qib/qib_keys.c | 4 +-
drivers/infiniband/hw/qib/qib_mad.c | 20 +-
drivers/infiniband/hw/qib/qib_mmap.c | 2 +-
drivers/infiniband/hw/qib/qib_mr.c | 10 +-
drivers/infiniband/hw/qib/qib_pcie.c | 10 +-
drivers/infiniband/hw/qib/qib_qp.c | 8 +-
drivers/infiniband/hw/qib/qib_qsfp.c | 13 +-
drivers/infiniband/hw/qib/qib_rc.c | 4 +-
drivers/infiniband/hw/qib/qib_ruc.c | 8 +-
drivers/infiniband/hw/qib/qib_sd7220.c | 9 +-
drivers/infiniband/hw/qib/qib_sysfs.c | 28 +--
drivers/infiniband/hw/qib/qib_twsi.c | 5 +-
drivers/infiniband/hw/qib/qib_tx.c | 1 +
drivers/infiniband/hw/qib/qib_ud.c | 2 +-
drivers/infiniband/hw/qib/qib_user_sdma.c | 8 +-
drivers/infiniband/hw/qib/qib_verbs.c | 15 +-
drivers/infiniband/hw/qib/qib_verbs_mcast.c | 4 +-
drivers/infiniband/hw/qib/qib_wc_x86_64.c | 7 +-
drivers/infiniband/ulp/iser/iscsi_iser.h | 4 +-
drivers/infiniband/ulp/iser/iser_initiator.c | 16 +-
drivers/infiniband/ulp/iser/iser_memory.c | 9 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 27 ++-
include/uapi/rdma/ib_user_verbs.h | 23 ++
63 files changed, 1212 insertions(+), 560 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2015-02-06 21:19 Roland Dreier
@ 2015-02-07 15:58 ` Yann Droneaud
0 siblings, 0 replies; 223+ messages in thread
From: Yann Droneaud @ 2015-02-07 15:58 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Roland Dreier, linux-rdma, linux-kernel
Hi,
Le vendredi 06 février 2015 à 13:19 -0800, Roland Dreier a écrit :
>
> Please pull from
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
>
> ----------------------------------------------------------------
> One more last-second RDMA change for 3.19:
> - Yann realized that the previous revert of new userspace ABI did not
> go far enough, and we're still exposing a change that we don't want.
> Revert even closer to 3.18 interface to make sure we get things right
> in the long run.
>
> Sorry for sending this at the very end of the release cycle, but we
> didn't realize the scope of the required fix until just now.
>
I hope this could go in v3.19 as, at this stage, we don't want to expose
any bits of this ABI in a released kernel.
Regards.
--
Yann Droneaud
OPTEYA
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2015-02-06 21:19 Roland Dreier
2015-02-07 15:58 ` Yann Droneaud
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2015-02-06 21:19 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
One more last-second RDMA change for 3.19:
- Yann realized that the previous revert of new userspace ABI did not
go far enough, and we're still exposing a change that we don't want.
Revert even closer to 3.18 interface to make sure we get things right
in the long run.
Sorry for sending this at the very end of the release cycle, but we
didn't realize the scope of the required fix until just now.
----------------------------------------------------------------
Yann Droneaud (1):
Revert "IB/core: Add support for extended query device caps"
drivers/infiniband/core/uverbs.h | 1 -
drivers/infiniband/core/uverbs_cmd.c | 137 +++++++++++------------------------
drivers/infiniband/hw/mlx5/main.c | 2 -
include/rdma/ib_verbs.h | 5 +-
include/uapi/rdma/ib_user_verbs.h | 27 -------
5 files changed, 42 insertions(+), 130 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2015-02-03 21:42 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2015-02-03 21:42 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Last minute InfiniBand/RDMA changes for 3.19:
- Revert IPoIB driver back to 3.18 state. We had a number of fixes go
into 3.19, but they introduced regressions. We tried to get everything
fixed up but ran out of time, so we'll try again for 3.20.
- Similarly, turn off the new "extended query port" verb. Late in the
cycle we realized the ABI is not quite right, and rather than freeze
something in a rush and make a mistake, we'll take a bit more time
and get it right in 3.20.
----------------------------------------------------------------
Haggai Eran (1):
IB/core: Temporarily disable ex_query_device uverb
Roland Dreier (9):
Revert "IPoIB: No longer use flush as a parameter"
Revert "IPoIB: Make ipoib_mcast_stop_thread flush the workqueue"
Revert "IPoIB: Use dedicated workqueues per interface"
Revert "IPoIB: change init sequence ordering"
Revert "IPoIB: fix mcast_dev_flush/mcast_restart_task race"
Revert "IPoIB: fix MCAST_FLAG_BUSY usage"
Revert "IPoIB: Make the carrier_on_task race aware"
Revert "IPoIB: Consolidate rtnl_lock tasks in workqueue"
Merge branches 'ipoib' and 'odp' into for-next
drivers/infiniband/core/uverbs_main.c | 1 -
drivers/infiniband/ulp/ipoib/ipoib.h | 19 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 18 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 27 +--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 49 ++---
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 239 +++++++++----------------
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 22 +--
7 files changed, 134 insertions(+), 241 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-12-19 0:03 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-12-19 0:03 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main batch of InfiniBand/RDMA changes for 3.19:
- On-demand paging support in core midlayer and mlx5 driver. This lets
userspace create non-pinned memory regions and have the adapter HW
trigger page faults.
- iSER and IPoIB updates and fixes.
- Low-level HW driver updates for cxgb4, mlx4 and ocrdma.
- Other miscellaneous fixes.
----------------------------------------------------------------
Ariel Nahum (2):
IB/iser: Collapse cleanup and disconnect handlers
IB/iser: Fix possible NULL derefernce ib_conn->device in session_create
Devesh Sharma (1):
RDMA/ocrdma: Always resolve destination mac from GRH for UD QPs
Doug Ledford (8):
IPoIB: Consolidate rtnl_lock tasks in workqueue
IPoIB: Make the carrier_on_task race aware
IPoIB: fix MCAST_FLAG_BUSY usage
IPoIB: fix mcast_dev_flush/mcast_restart_task race
IPoIB: change init sequence ordering
IPoIB: Use dedicated workqueues per interface
IPoIB: Make ipoib_mcast_stop_thread flush the workqueue
IPoIB: No longer use flush as a parameter
Eli Cohen (1):
IB/core: Add support for extended query device caps
Haggai Eran (14):
IB/mlx5: Remove per-MR pas and dma pointers
IB/mlx5: Enhance UMR support to allow partial page table update
IB/core: Replace ib_umem's offset field with a full address
IB/core: Add umem function to read data from user-space
IB/mlx5: Add function to read WQE from user-space
IB/core: Implement support for MMU notifiers regarding on demand paging regions
mlx5_core: Add support for page faults events and low level handling
IB/mlx5: Implement the ODP capability query verb
IB/mlx5: Changes in memory region creation to support on-demand paging
IB/mlx5: Add mlx5_ib_update_mtt to update page tables after creation
IB/mlx5: Page faults handling infrastructure
IB/mlx5: Handle page faults
IB/mlx5: Add support for RDMA read/write responder page faults
IB/mlx5: Implement on demand paging by adding support for MMU notifiers
Hariprasad S (1):
RDMA/cxgb4: Handle NET_XMIT return codes
Hariprasad Shenai (2):
RDMA/cxgb4: Fix locking issue in process_mpa_request
RDMA/cxgb4: Limit MRs to < 8GB for T4/T5 devices
Jack Morgenstein (2):
IB/core: Fix mgid key handling in SA agent multicast data-base
IB/mlx4: Fix an incorrectly shadowed variable in mlx4_ib_rereg_user_mr
Max Gurtovoy (1):
IB/iser: Fix possible SQ overflow
Minh Tran (1):
IB/iser: Re-adjust CQ and QP send ring sizes to HW limits
Mitesh Ahuja (1):
RDMA/ocrdma: Fix ocrdma_query_qp() to report q_key value for UD QPs
Moni Shoua (1):
IB/core: Do not resolve VLAN if already resolved
Or Gerlitz (1):
IB/iser: Bump version to 1.5
Or Kehati (1):
IB/addr: Improve address resolution callback scheduling
Pramod Kumar (2):
RDMA/cxgb4: Increase epd buff size for debug interface
RDMA/cxgb4: Configure 0B MRs to match HW implementation
Roland Dreier (2):
mlx5_core: Re-add MLX5_DEV_CAP_FLAG_ON_DMND_PG flag
Merge branches 'core', 'cxgb4', 'ipoib', 'iser', 'mlx4', 'ocrdma', 'odp' and 'srp' into for-next
Sagi Grimberg (13):
IB/iser: Fix catastrophic error flow hang
IB/iser: Decrement CQ's active QPs accounting when QP creation fails
IB/iser: Fix sparse warnings
IB/iser: Fix race between iser connection teardown and scsi TMFs
IB/iser: Terminate connection before cleaning inflight tasks
IB/iser: Centralize memory region invalidation to a function
IB/iser: Remove redundant is_mr indicator
IB/iser: Use more completion queues
IB/iser: Micro-optimize iser logging
IB/iser: Micro-optimize iser_handle_wc
IB/iser: DIX update
IB/core: Add flags for on demand paging support
IB/srp: Allow newline separator for connection string
Shachar Raindel (1):
IB/core: Add support for on demand paging regions
Steve Wise (1):
RDMA/cxgb4: Wake up waiters after flushing the qp
Yuval Shaia (1):
mlx4_core: Check for DPDP violation only when DPDP is not supported
drivers/infiniband/Kconfig | 11 +
drivers/infiniband/core/Makefile | 1 +
drivers/infiniband/core/addr.c | 4 +-
drivers/infiniband/core/multicast.c | 11 +-
drivers/infiniband/core/umem.c | 72 ++-
drivers/infiniband/core/umem_odp.c | 668 +++++++++++++++++++++
drivers/infiniband/core/umem_rbtree.c | 94 +++
drivers/infiniband/core/uverbs.h | 1 +
drivers/infiniband/core/uverbs_cmd.c | 171 ++++--
drivers/infiniband/core/uverbs_main.c | 5 +-
drivers/infiniband/core/verbs.c | 3 +-
drivers/infiniband/hw/amso1100/c2_provider.c | 2 +-
drivers/infiniband/hw/cxgb4/cm.c | 7 +-
drivers/infiniband/hw/cxgb4/device.c | 2 +-
drivers/infiniband/hw/cxgb4/mem.c | 28 +-
drivers/infiniband/hw/cxgb4/qp.c | 2 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 2 +-
drivers/infiniband/hw/ipath/ipath_mr.c | 2 +-
drivers/infiniband/hw/mlx4/mr.c | 1 -
drivers/infiniband/hw/mlx5/Makefile | 1 +
drivers/infiniband/hw/mlx5/main.c | 45 +-
drivers/infiniband/hw/mlx5/mem.c | 69 ++-
drivers/infiniband/hw/mlx5/mlx5_ib.h | 116 +++-
drivers/infiniband/hw/mlx5/mr.c | 323 ++++++++--
drivers/infiniband/hw/mlx5/odp.c | 798 +++++++++++++++++++++++++
drivers/infiniband/hw/mlx5/qp.c | 197 ++++--
drivers/infiniband/hw/nes/nes_verbs.c | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 5 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 4 +-
drivers/infiniband/hw/qib/qib_mr.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 19 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 18 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 27 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 49 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 239 +++++---
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 22 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 104 +++-
drivers/infiniband/ulp/iser/iscsi_iser.h | 30 +-
drivers/infiniband/ulp/iser/iser_initiator.c | 6 +-
drivers/infiniband/ulp/iser/iser_memory.c | 102 +---
drivers/infiniband/ulp/iser/iser_verbs.c | 91 ++-
drivers/infiniband/ulp/srp/ib_srp.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/main.c | 6 +-
drivers/net/ethernet/mellanox/mlx5/core/eq.c | 13 +-
drivers/net/ethernet/mellanox/mlx5/core/fw.c | 40 ++
drivers/net/ethernet/mellanox/mlx5/core/qp.c | 119 ++++
include/linux/mlx5/device.h | 72 ++-
include/linux/mlx5/driver.h | 14 +-
include/linux/mlx5/qp.h | 65 ++
include/rdma/ib_umem.h | 34 +-
include/rdma/ib_umem_odp.h | 160 +++++
include/rdma/ib_verbs.h | 54 +-
include/uapi/rdma/ib_user_verbs.h | 29 +-
53 files changed, 3511 insertions(+), 457 deletions(-)
create mode 100644 drivers/infiniband/core/umem_odp.c
create mode 100644 drivers/infiniband/core/umem_rbtree.c
create mode 100644 drivers/infiniband/hw/mlx5/odp.c
create mode 100644 include/rdma/ib_umem_odp.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2014-11-02 20:06 ` Dave Airlie
2014-11-03 7:15 ` Eli Cohen
@ 2014-11-03 7:58 ` Sagi Grimberg
1 sibling, 0 replies; 223+ messages in thread
From: Sagi Grimberg @ 2014-11-03 7:58 UTC (permalink / raw)
To: Dave Airlie, Roland Dreier; +Cc: Linus Torvalds, linux-rdma, LKML
On 11/2/2014 10:06 PM, Dave Airlie wrote:
> On 17 October 2014 08:52, Roland Dreier <roland@kernel.org> wrote:
>> Hi Linus,
>>
>> Please pull from
>>
>> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
>>
>> ----------------------------------------------------------------
>> Main set of InfiniBand/RDMA updates for 3.18 merge window:
>>
>> - Large set of iSER initiator improvements
>> - Hardware driver fixes for cxgb4, mlx5 and ocrdma
>> - Small fixes to core midlayer
>>
>
> building on 32-bit x86.
>
> CC [M] drivers/infiniband/ulp/iser/iser_verbs.o
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:
> In function ‘iser_handle_comp_error’:
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1171:33:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> if (is_iser_tx_desc(iser_conn, (void *)wc->wr_id)) {
> ^
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1172:31:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> struct iser_tx_desc *desc = (struct iser_tx_desc *)wc->wr_id;
> ^
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:
> In function ‘iser_handle_wc’:
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1198:14:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> rx_desc = (struct iser_rx_desc *)wc->wr_id;
> ^
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1203:14:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> tx_desc = (struct iser_tx_desc *)wc->wr_id;
> ^
>
> Not sure anyone would ever want to run this code on 32-bit boxes, but
> I'm a bit worried if wr_id is a 64-bit value, and we encode it into a
> 32-bit pointer, you'd always lose the top 32-bits.
>
Hey Dave,
This was addressed in:
http://marc.info/?l=linux-rdma&m=141448978030924&w=2 (part of iser fixes
for 3.18-rc).
Thanks!
Sagi.
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2014-11-02 20:06 ` Dave Airlie
@ 2014-11-03 7:15 ` Eli Cohen
2014-11-03 7:58 ` Sagi Grimberg
1 sibling, 0 replies; 223+ messages in thread
From: Eli Cohen @ 2014-11-03 7:15 UTC (permalink / raw)
To: Dave Airlie; +Cc: Roland Dreier, Linus Torvalds, linux-rdma, LKML
On Mon, Nov 03, 2014 at 06:06:45AM +1000, Dave Airlie wrote:
> On 17 October 2014 08:52, Roland Dreier <roland@kernel.org> wrote:
> > Hi Linus,
> >
> > Please pull from
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
> >
> > ----------------------------------------------------------------
> > Main set of InfiniBand/RDMA updates for 3.18 merge window:
> >
> > - Large set of iSER initiator improvements
> > - Hardware driver fixes for cxgb4, mlx5 and ocrdma
> > - Small fixes to core midlayer
> >
>
> building on 32-bit x86.
>
> CC [M] drivers/infiniband/ulp/iser/iser_verbs.o
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:
> In function ‘iser_handle_comp_error’:
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1171:33:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> if (is_iser_tx_desc(iser_conn, (void *)wc->wr_id)) {
> ^
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1172:31:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> struct iser_tx_desc *desc = (struct iser_tx_desc *)wc->wr_id;
> ^
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:
> In function ‘iser_handle_wc’:
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1198:14:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> rx_desc = (struct iser_rx_desc *)wc->wr_id;
> ^
> /home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1203:14:
> warning: cast to pointer from integer of different size
> [-Wint-to-pointer-cast]
> tx_desc = (struct iser_tx_desc *)wc->wr_id;
> ^
>
> Not sure anyone would ever want to run this code on 32-bit boxes, but
> I'm a bit worried if wr_id is a 64-bit value, and we encode it into a
> 32-bit pointer, you'd always lose the top 32-bits.
>
On 32 bit systems your pointer is 32 bits as well so assigning to u64
and casting back to a pointer you don't loose anything. Maybe casting
from u64 to a pointer should go through casting to uintptr_t to avoid
warnings.
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2014-10-16 22:52 Roland Dreier
2014-10-20 23:28 ` Doug Ledford
@ 2014-11-02 20:06 ` Dave Airlie
2014-11-03 7:15 ` Eli Cohen
2014-11-03 7:58 ` Sagi Grimberg
1 sibling, 2 replies; 223+ messages in thread
From: Dave Airlie @ 2014-11-02 20:06 UTC (permalink / raw)
To: Roland Dreier; +Cc: Linus Torvalds, linux-rdma, LKML
On 17 October 2014 08:52, Roland Dreier <roland@kernel.org> wrote:
> Hi Linus,
>
> Please pull from
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
>
> ----------------------------------------------------------------
> Main set of InfiniBand/RDMA updates for 3.18 merge window:
>
> - Large set of iSER initiator improvements
> - Hardware driver fixes for cxgb4, mlx5 and ocrdma
> - Small fixes to core midlayer
>
building on 32-bit x86.
CC [M] drivers/infiniband/ulp/iser/iser_verbs.o
/home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:
In function ‘iser_handle_comp_error’:
/home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1171:33:
warning: cast to pointer from integer of different size
[-Wint-to-pointer-cast]
if (is_iser_tx_desc(iser_conn, (void *)wc->wr_id)) {
^
/home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1172:31:
warning: cast to pointer from integer of different size
[-Wint-to-pointer-cast]
struct iser_tx_desc *desc = (struct iser_tx_desc *)wc->wr_id;
^
/home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:
In function ‘iser_handle_wc’:
/home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1198:14:
warning: cast to pointer from integer of different size
[-Wint-to-pointer-cast]
rx_desc = (struct iser_rx_desc *)wc->wr_id;
^
/home/airlied/devel/kernel/linux-2.6/drivers/infiniband/ulp/iser/iser_verbs.c:1203:14:
warning: cast to pointer from integer of different size
[-Wint-to-pointer-cast]
tx_desc = (struct iser_tx_desc *)wc->wr_id;
^
Not sure anyone would ever want to run this code on 32-bit boxes, but
I'm a bit worried if wr_id is a 64-bit value, and we encode it into a
32-bit pointer, you'd always lose the top 32-bits.
Dave.
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2014-10-16 22:52 Roland Dreier
@ 2014-10-20 23:28 ` Doug Ledford
2014-11-02 20:06 ` Dave Airlie
1 sibling, 0 replies; 223+ messages in thread
From: Doug Ledford @ 2014-10-20 23:28 UTC (permalink / raw)
To: Roland Dreier; +Cc: Linus Torvalds, linux-rdma, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 792 bytes --]
On Thu, 2014-10-16 at 15:52 -0700, Roland Dreier wrote:
> Hi Linus,
>
> Please pull from
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
>
> ----------------------------------------------------------------
> Main set of InfiniBand/RDMA updates for 3.18 merge window:
>
> - Large set of iSER initiator improvements
> - Hardware driver fixes for cxgb4, mlx5 and ocrdma
> - Small fixes to core midlayer
The IPoIB multicast locking fixes I submitted for 3.17 that you put off
until 3.18 are missing from this list. The set can be found here in
case you've lost them:
https://patchwork.kernel.org/bundle/dledford/IPoIB%20Locking%20Fixes/
--
Doug Ledford <dledford@redhat.com>
GPG KeyID: 0E572FDD
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-10-16 22:52 Roland Dreier
2014-10-20 23:28 ` Doug Ledford
2014-11-02 20:06 ` Dave Airlie
0 siblings, 2 replies; 223+ messages in thread
From: Roland Dreier @ 2014-10-16 22:52 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main set of InfiniBand/RDMA updates for 3.18 merge window:
- Large set of iSER initiator improvements
- Hardware driver fixes for cxgb4, mlx5 and ocrdma
- Small fixes to core midlayer
----------------------------------------------------------------
Ariel Nahum (3):
IB/iser: Unbind at conn_stop stage
IB/iser: Use iser_warn instead of BUG_ON in iser_conn_release
IB/iser: Change iscsi_conn_stop log level to info
Devesh Sharma (3):
RDMA/ocrdma: Add default GID at index 0
RDMA/ocrdma: Convert kernel VA to PA for mmap in user
IB/core: Clear AH attr variable to prevent garbage data
Eli Cohen (5):
IB/mlx5: Clear umr resources after ib_unregister_device
IB/mlx5: Improve debug prints in mlx5_ib_reg_user_mr
IB/core: Avoid leakage from kernel to user space
IB/mlx5: Fix possible array overflow
IB/mlx5: Remove duplicate code from mlx5_set_path
Hariprasad S (3):
RDMA/cxgb4: Take IPv6 into account for best_mtu and set_emss
RDMA/cxgb4: Add missing neigh_release in find_route
RDMA/cxgb4: Fix ntuple calculation for ipv6 and remove duplicate line
Jack Morgenstein (1):
IB/core: Fix XRC race condition in ib_uverbs_open_qp
Jes Sorensen (3):
RDMA/ocrdma: Don't memset() buffers we just allocated with kzalloc()
RDMA/ocrdma: The kernel has a perfectly good BIT() macro - use it
RDMA/ocrdma: Save the bit environment, spare unncessary parenthesis
Li RongQing (1):
RDMA/ocrdma: Remove a unused-label warning
Or Gerlitz (1):
IB/iser: Bump version, add maintainer
Roi Dayan (1):
IB/iser: Remove unused variables and dead code
Roland Dreier (1):
Merge branches 'core', 'cxgb4', 'iser', 'mlx5' and 'ocrdma' into for-next
Sagi Grimberg (23):
IB/iser: Rename ib_conn -> iser_conn
IB/iser: Re-introduce ib_conn
IB/iser: Extend iser_free_ib_conn_res()
IB/iser: Fix DEVICE REMOVAL handling in the absence of iscsi daemon
IB/iser: Don't bound release_work completions timeouts
IB/iser: Protect tasks cleanup in case IB device was already released
IB/iser: Signal iSCSI layer that transport is broken in error completions
IB/iser: Centralize iser completion contexts
IB/iser: Use internal polling budget to avoid possible live-lock
IB/iser: Use single CQ for RX and TX
IB/iser: Use beacon to indicate all completions were consumed
IB/iser: Optimize completion polling
IB/iser: Suppress scsi command send completions
IB/iser: Nit - add space after __func__ in iser logging
IB/iser: Add/Fix kernel doc style descriptions in iscsi_iser.h
IB/iser: Fix/add kernel-doc style description in iscsi_iser.c
IB/mlx5: Use enumerations for PI copy mask
IB/iser: Remove redundant assignment
IB/iser: Set IP_CSUM as default guard type
IB/mlx5: Use extended internal signature layout
IB/iser: Centralize ib_sig_domain settings
Target/iser: Centralize ib_sig_domain setting
IB/mlx5, iser, isert: Add Signature API additions
Selvin Xavier (1):
RDMA/ocrdma: Get vlan tag from ib_qp_attrs
Steve Wise (1):
RDMA/cxgb4: Make c4iw_wr_log_size_order static
Yishai Hadas (1):
IB/mlx5: Modify to work with arbitrary page size
MAINTAINERS | 1 +
drivers/infiniband/core/uverbs_cmd.c | 2 +
drivers/infiniband/core/uverbs_main.c | 5 +
drivers/infiniband/hw/cxgb4/cm.c | 32 +-
drivers/infiniband/hw/cxgb4/device.c | 2 +-
drivers/infiniband/hw/mlx5/main.c | 8 +-
drivers/infiniband/hw/mlx5/mem.c | 18 +-
drivers/infiniband/hw/mlx5/mr.c | 6 +-
drivers/infiniband/hw/mlx5/qp.c | 149 +++---
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 25 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 12 +
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 238 +++++-----
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 10 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 313 ++++++++++---
drivers/infiniband/ulp/iser/iscsi_iser.h | 408 +++++++++++-----
drivers/infiniband/ulp/iser/iser_initiator.c | 198 ++++----
drivers/infiniband/ulp/iser/iser_memory.c | 99 ++--
drivers/infiniband/ulp/iser/iser_verbs.c | 667 +++++++++++++++------------
drivers/infiniband/ulp/isert/ib_isert.c | 65 ++-
include/linux/mlx5/qp.h | 35 +-
include/rdma/ib_verbs.h | 32 +-
21 files changed, 1372 insertions(+), 953 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2014-09-23 21:58 Roland Dreier
@ 2014-09-27 21:19 ` Or Gerlitz
0 siblings, 0 replies; 223+ messages in thread
From: Or Gerlitz @ 2014-09-27 21:19 UTC (permalink / raw)
To: Roland Dreier
Cc: Linus Torvalds, Linux Kernel, linux-rdma, Greg Kroah-Hartman
On Wed, Sep 24, 2014 at 12:58 AM, Roland Dreier <roland@kernel.org> wrote:
> Hi Linus,
[..]
> This is later and bigger than I would like, and the blame is all on
> me: I got very busy with other stuff for a few weeks during the 3.17
> cycle, and didn't prepare this tree as soon as I should have. However
> I don't think there's anything risky here, and no one really cares if
> we break InfiniBand in 3.17 anyway...
Roland, sorry, but I don't understand the joke @ the last sentence,
can you elaborate?
Or.
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-09-23 21:58 Roland Dreier
2014-09-27 21:19 ` Or Gerlitz
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2014-09-23 21:58 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
This is later and bigger than I would like, and the blame is all on
me: I got very busy with other stuff for a few weeks during the 3.17
cycle, and didn't prepare this tree as soon as I should have. However
I don't think there's anything risky here, and no one really cares if
we break InfiniBand in 3.17 anyway...
----------------------------------------------------------------
Last late set of InfiniBand/RDMA fixes for 3.17:
- Fixes for the new memory region re-registration support
- iSER initiator error path fixes
- Grab bag of small fixes for the qib and ocrdma hardware drivers
- Larger set of fixes for mlx4, especially in RoCE mode
----------------------------------------------------------------
Alex Estrin (1):
IPoIB: Remove unnecessary port query
Devesh Sharma (2):
RDMA/ocrdma: Report correct value of max_fast_reg_page_list_len
RDMA/ocrdma: Do not skip setting deferred_arm
Jack Morgenstein (6):
IB/mlx4: Fix lockdep splat for the iboe lock
mlx4: Fix mlx4 reg/unreg mac to work properly with 0-mac addresses
IB/mlx4: Avoid accessing netdevice when building RoCE qp1 header
IB/mlx4: Don't update QP1 in native mode
IB/mlx4: Do not allow APM under RoCE
IB/mlx4: Fix VF mac handling in RoCE
Markus Stockhausen (1):
IB/mlx4: Disable TSO for Connect-X rev. A0 HCAs
Matan Barak (2):
mlx4: Correct error flows in rereg_mr
IB/core: When marshaling uverbs path, clear unused fields
Mike Marciniszyn (3):
IB/ipath: Change get_user_pages() usage to always NULL vmas
IB/qib: Change get_user_pages() usage to always NULL vmas
IB/qib: Correct reference counting in debugfs qp_stats
Moni Shoua (5):
IB/mlx4: Avoid null pointer dereference in mlx4_ib_scan_netdevs()
IB/mlx4: Don't duplicate the default RoCE GID
IB/mlx4: Reorder steps in RoCE GID table initialization
IB/mlx4: Get upper dev addresses as RoCE GIDs when port comes up
IB/mlx4: Avoid executing gid task when device is being removed
Or Gerlitz (1):
IB/iser: Bump version to 1.4.1
Roi Dayan (1):
IB/iser: Fix RX/TX CQ resource leak on error flow
Roland Dreier (1):
Merge branches 'core', 'ipoib', 'iser', 'mlx4', 'ocrdma' and 'qib' into for-next
Sagi Grimberg (1):
IB/iser: Allow bind only when connection state is UP
Shawn Bohrer (1):
IB: ib_umem_release() should decrement mm->pinned_vm from ib_umem_get
devesh.sharma@emulex.com (2):
RDMA/ocrdma: Resolve L2 address when creating user AH
RDMA/ocrdma: Use right macro in query AH
drivers/infiniband/core/umem.c | 19 ++-
drivers/infiniband/core/uverbs_marshall.c | 4 +
drivers/infiniband/hw/ipath/ipath_user_pages.c | 6 +-
drivers/infiniband/hw/mlx4/main.c | 169 +++++++++++++++++--------
drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
drivers/infiniband/hw/mlx4/mr.c | 7 +-
drivers/infiniband/hw/mlx4/qp.c | 60 +++++----
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 43 +++++--
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 6 +-
drivers/infiniband/hw/qib/qib_debugfs.c | 3 +-
drivers/infiniband/hw/qib/qib_qp.c | 8 --
drivers/infiniband/hw/qib/qib_user_pages.c | 6 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 10 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 19 ++-
drivers/infiniband/ulp/iser/iscsi_iser.h | 2 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 24 ++--
drivers/net/ethernet/mellanox/mlx4/mr.c | 33 +++--
drivers/net/ethernet/mellanox/mlx4/port.c | 11 +-
include/rdma/ib_umem.h | 1 +
19 files changed, 277 insertions(+), 155 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-08-14 16:05 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-08-14 16:05 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main set of InfiniBand/RDMA updates for 3.17 merge window:
- MR reregistration support
- MAD support for RMPP in userspace
- iSER and SRP initiator updates
- ocrdma hardware driver updates
- other fixes...
----------------------------------------------------------------
Alex Estrin (1):
IB/ipoib: Avoid multicast join attempts with invalid P_key
Ariel Nahum (3):
IB/iser: Seperate iser_conn and iscsi_endpoint storage space
IB/iser: Protect iser state machine with a mutex
IB/iser: Replace connection waitqueue with completion object
Bart Van Assche (3):
scsi_transport_srp: Fix fast_io_fail_tmo=dev_loss_tmo=off behavior
IB/srp: Fix deadlock between host removal and multipathd
IB/srp: Fix residual handling
Dan Carpenter (1):
RDMA/amso1100: Check for integer overflow in c2_alloc_cq_buf()
Devesh Sharma (7):
RDMA/ocrdma: Avoid posting DPP requests for RDMA READ
be2net: Issue shutdown event to ocrdma driver
RDMA/ocrdma: Handle shutdown event from be2net driver
RDMA/ocrdma: Remove hardcoding of the max DPP QPs supported
RDMA/ocrdma: Delete AH table if ocrdma_init_hw fails after AH table creation
RDMA/ocrdma: Obtain SL from device structure
RDMA/ocrdma: Update sli data structure for endianness
Doug Ledford (2):
IB/srpt: Handle GID change events
RDMA/uapi: Include socket.h in rdma_user_cm.h
Erez Shitrit (2):
IB/ipoib: Use P_Key change event instead of P_Key polling mechanism
IB/ipoib: Avoid flushing the workqueue from worker context
Fabian Frederick (3):
IPoIB: Remove unnecessary test for NULL before debugfs_remove()
IB/mlx4: Use ARRAY_SIZE instead of sizeof/sizeof[0]
IB/mlx5: Use ARRAY_SIZE instead of sizeof/sizeof[0]
Ira Weiny (5):
IB/umad: Update module to [pr|dev]_* style print messages
IB/mad: Update module to [pr|dev]_* style print messages
IB/mad: Add dev_notice messages for various umad/mad registration failures
IB/mad: add new ioctl to ABI to support new registration options
IB/mad: Add user space RMPP support
Jack Morgenstein (1):
mlx4_core: Add support for secure-host and SMP firewall
Matan Barak (3):
IB/core: Add user MR re-registration support
mlx4_core: Add helper functions to support MR re-registration
IB/mlx4_ib: Add support for user MR re-registration
Mitesh Ahuja (4):
RDMA/ocrdma: Allow only SEND opcode in case of UD QPs
RDMA/ocrdma: Do proper cleanup even if FW is in error state
RDMA/ocrdma: Return proper value for max_mr_size
RDMA/ocrdma: report asic-id in query device
Or Gerlitz (1):
IB/ipath: Add P_Key change event support
Roi Dayan (3):
IB/iser: Support IPv6 address family
IB/iser: Add TIMEWAIT_EXIT event handling
IB/iser: Clarify a duplicate counters check
Roland Dreier (1):
Merge branches 'core', 'cxgb4', 'ipoib', 'iser', 'iwcm', 'mad', 'misc', 'mlx4', 'mlx5', 'ocrdma' and 'srp' into for-next
Sagi Grimberg (2):
IB/iser: Fix responder resources advertisement
IB/iser: Remove redundant return code in iser_free_ib_conn_res()
Selvin Xavier (8):
RDMA/ocrdma: Query and initalize the PFC SL
RDMA/ocrdma: Add hca_type and fixing fw_version string in device atrributes
RDMA/ocrdma: Avoid reporting wrong completions in case of error CQEs
RDMA/ocrdma: Add missing adapter mailbox opcodes
RDMA/ocrdma: Increase the size of STAG array in dev structure to 16K
RDMA/ocrdma: Initialize the GID table while registering the device
RDMA/ocrdma: Fix a sparse warning
RDMA/ocrdma: Update the ocrdma module version string
Steve Wise (2):
RDMA/cxgb4: Only call CQ completion handler if it is armed
RDMA/iwcm: Use a default listen backlog if needed
Wei Yongjun (1):
IB/srp: Fix return value check in srp_init_module()
Documentation/infiniband/user_mad.txt | 13 +-
drivers/infiniband/core/agent.c | 16 +-
drivers/infiniband/core/cm.c | 5 +-
drivers/infiniband/core/iwcm.c | 27 ++
drivers/infiniband/core/mad.c | 283 +++++++++++++-------
drivers/infiniband/core/mad_priv.h | 3 -
drivers/infiniband/core/sa_query.c | 2 +-
drivers/infiniband/core/user_mad.c | 188 +++++++++++--
drivers/infiniband/core/uverbs.h | 1 +
drivers/infiniband/core/uverbs_cmd.c | 93 +++++++
drivers/infiniband/core/uverbs_main.c | 1 +
drivers/infiniband/hw/amso1100/c2_cq.c | 7 +-
drivers/infiniband/hw/cxgb4/ev.c | 1 +
drivers/infiniband/hw/cxgb4/qp.c | 37 ++-
drivers/infiniband/hw/cxgb4/t4.h | 11 +
drivers/infiniband/hw/ipath/ipath_mad.c | 14 +-
drivers/infiniband/hw/mlx4/mad.c | 2 +-
drivers/infiniband/hw/mlx4/main.c | 8 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 4 +
drivers/infiniband/hw/mlx4/mr.c | 88 +++++-
drivers/infiniband/hw/mlx5/qp.c | 2 +-
drivers/infiniband/hw/mthca/mthca_mad.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma.h | 26 +-
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 227 ++++++++++++++--
drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 2 +
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 83 +++++-
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 295 ++++++++++++++++-----
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 36 ++-
drivers/infiniband/hw/qib/qib_mad.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 8 +-
drivers/infiniband/ulp/ipoib/ipoib_fs.c | 6 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 133 ++++------
drivers/infiniband/ulp/ipoib/ipoib_main.c | 9 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 47 ++--
drivers/infiniband/ulp/iser/iscsi_iser.h | 8 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 128 ++++++---
drivers/infiniband/ulp/srp/ib_srp.c | 48 +++-
drivers/infiniband/ulp/srpt/ib_srpt.c | 3 +-
drivers/net/ethernet/emulex/benet/be.h | 1 +
drivers/net/ethernet/emulex/benet/be_main.c | 1 +
drivers/net/ethernet/emulex/benet/be_roce.c | 18 +-
drivers/net/ethernet/emulex/benet/be_roce.h | 3 +-
drivers/net/ethernet/mellanox/mlx4/cmd.c | 9 +
drivers/net/ethernet/mellanox/mlx4/fw.c | 91 ++++++-
drivers/net/ethernet/mellanox/mlx4/main.c | 5 +
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 3 +
drivers/net/ethernet/mellanox/mlx4/mr.c | 160 +++++++++++
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 26 +-
drivers/scsi/scsi_transport_srp.c | 3 +-
include/linux/mlx4/cmd.h | 7 +
include/linux/mlx4/device.h | 17 ++
include/rdma/ib_mad.h | 18 +-
include/rdma/ib_verbs.h | 10 +-
include/uapi/rdma/ib_user_mad.h | 42 +++
include/uapi/rdma/ib_user_verbs.h | 16 ++
include/uapi/rdma/rdma_user_cm.h | 1 +
57 files changed, 1851 insertions(+), 455 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-07-18 20:40 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-07-18 20:40 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA fixes for 3.16
- cxgb4 hardware driver regression fixes
- mlx5 hardware driver regression fixes
----------------------------------------------------------------
Hariprasad S (2):
RDMA/cxgb4: Fix skb_leak in reject_cr()
RDMA/cxgb4: Clean up connection on ARP error
Or Gerlitz (1):
IB/mlx5: Enable "block multicast loopback" for kernel consumers
Roland Dreier (1):
Merge branches 'cxgb4' and 'mlx5' into for-next
Sagi Grimberg (1):
mlx5_core: Fix possible race between mr tree insert/delete
Steve Wise (2):
RDMA/cxgb4: Initialize the device status page
RDMA/cxgb4: Call iwpm_init() only once
drivers/infiniband/hw/cxgb4/cm.c | 14 +++++++++++---
drivers/infiniband/hw/cxgb4/device.c | 18 +++++++++++-------
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 2 +-
drivers/infiniband/hw/mlx5/qp.c | 2 +-
drivers/net/ethernet/mellanox/mlx5/core/mr.c | 19 +++++++++++++++----
5 files changed, 39 insertions(+), 16 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-06-10 17:14 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-06-10 17:14 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main batch of InfiniBand/RDMA changes for 3.16:
- Add iWARP port mapper to avoid conflicts between RDMA and normal
stack TCP connections.
- Fixes for i386 / x86-64 structure padding differences (ABI
compatibility for 32-on-64) from Yann Droneaud.
- A pile of SRP initiator fixes from Bart Van Assche.
- Fixes for a writeback / memory allocation deadlock with NFS over
IPoIB connected mode from Jiri Kosina.
- The usual fixes and cleanups to mlx4, mlx5, cxgb4 and other
low-level drivers.
----------------------------------------------------------------
Ariel Nahum (2):
IB/iser: Simplify connection management
IB/iser: Fix a possible race in iser connection states transition
Bart Van Assche (11):
IB/srp: Fix a sporadic crash triggered by cable pulling
IB/srp: Fix kernel-doc warnings
IB/srp: Introduce an additional local variable
IB/srp: Introduce srp_map_fmr()
IB/srp: Introduce srp_finish_mapping()
IB/srp: Introduce the 'register_always' kernel module parameter
IB/srp: One FMR pool per SRP connection
IB/srp: Rename FMR-related variables
IB/srp: Add fast registration support
IB/umad: Fix error handling
IB/umad: Fix use-after-free on close
Christoph Jaeger (1):
RDMA/cxgb4: Fix memory leaks in c4iw_alloc() error paths
Colin Ian King (1):
IB/mlx4: fix unitialised variable is_mcast
Dan Carpenter (2):
RDMA/cxgb3: Fix information leak in send_abort()
RDMA/cxgb3: Remove a couple unneeded conditions
Dennis Dalessandro (1):
IB/ipath: Translate legacy diagpkt into newer extended diagpkt
Dotan Barak (1):
mlx4_core: Fix memory leaks in SR-IOV error paths
Duan Jiong (1):
RDMA/ocrdma: Convert to use simple_open()
Haggai Eran (7):
IB/mlx5: Fix error handling in reg_umr
IB/mlx5: Add MR to radix tree in reg_mr_callback
mlx5_core: Store MR attributes in mlx5_mr_core during creation and after UMR
IB/mlx5: Set QP offsets and parameters for user QPs and not just for kernel QPs
IB/core: Remove unneeded kobject_get/put calls
IB/core: Fix port kobject deletion during error flow
IB/core: Fix kobject leak on device register error flow
Jack Morgenstein (5):
mlx4_core: Fix incorrect FLAGS1 bitmap test in mlx4_QUERY_FUNC_CAP
IB/mlx4: SET_PORT called by mlx4_ib_modify_port should be wrapped
IB/mlx4: Preparation for VFs to issue/receive SMI (QP0) requests/responses
mlx4: Add infrastructure for selecting VFs to enable QP0 via MLX proxy QPs
IB/mlx4: Add interface for selecting VFs to enable QP0 via MLX proxy QPs
Jiri Kosina (2):
IB/mlx4: Implement IB_QP_CREATE_USE_GFP_NOIO
IB/mlx4: Fix gfp passing in create_qp_common()
Joe Perches (1):
IB/srp: Avoid problems if a header uses pr_fmt
Manuel Schölling (1):
IB/ipath: Use time_before()/_after()
Mike Marciniszyn (1):
IB/qib: Fix port in pkey change event
Or Gerlitz (3):
IB/iser: Bump version to 1.4
IB: Return error for unsupported QP creation flags
IB: Add a QP creation flag to use GFP_NOIO allocations
Roi Dayan (1):
IB/iser: Add missing newlines to logging messages
Roland Dreier (6):
IB/mlx5: Fix warning about cast of wr_id back to pointer on 32 bits
mlx4_core: Move handling of MLX4_QP_ST_MLX to proper switch statement
IB/mad: Fix sparse warning about gfp_t use
IB/core: Fix sparse warnings about redeclared functions
mlx4_core: Fix GFP flags parameters to be gfp_t
Merge branches 'core', 'cxgb3', 'cxgb4', 'iser', 'iwpm', 'misc', 'mlx4', 'mlx5', 'noio', 'ocrdma', 'qib', 'srp' and 'usnic' into for-next
Sagi Grimberg (3):
mlx5_core: Fix signature handover operation for interleaved buffers
mlx5_core: Simplify signature handover wqe for interleaved buffers
mlx5_core: Copy DIF fields only when input and output space values match
Shachar Raindel (1):
IB/mlx5: Refactor UMR to have its own context struct
Steve Wise (2):
RDMA/cxgb4: Fix vlan support
RDMA/cxgb4: Add support for iWARP Port Mapper user space service
Tatyana Nikolova (2):
RDMA/core: Add support for iWARP Port Mapper user space service
RDMA/nes: Add support for iWARP Port Mapper user space service
Upinder Malhi (1):
IB/usnic: Fix source file missing copyright and license
Vinit Agnihotri (1):
IB/qib: Additional Intel branding changes
Yann Droneaud (5):
IB/mlx5: add missing padding at end of struct mlx5_ib_create_cq
IB/mlx5: add missing padding at end of struct mlx5_ib_create_srq
RDMA/cxgb4: Add missing padding at end of struct c4iw_create_cq_resp
IB: Allow build of hw/ and ulp/ subdirectories independently
RDMA/cxgb4: add missing padding at end of struct c4iw_alloc_ucontext_resp
drivers/infiniband/Makefile | 19 +-
drivers/infiniband/core/Makefile | 2 +-
drivers/infiniband/core/cma.c | 3 +-
drivers/infiniband/core/iwpm_msg.c | 685 +++++++++++++++++++++
drivers/infiniband/core/iwpm_util.c | 607 ++++++++++++++++++
drivers/infiniband/core/iwpm_util.h | 238 +++++++
drivers/infiniband/core/netlink.c | 18 +-
drivers/infiniband/core/sa_query.c | 2 +-
drivers/infiniband/core/sysfs.c | 85 +--
drivers/infiniband/core/user_mad.c | 75 ++-
drivers/infiniband/core/verbs.c | 8 +-
drivers/infiniband/hw/Makefile | 12 +
drivers/infiniband/hw/cxgb3/cxio_hal.c | 6 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 1 +
drivers/infiniband/hw/cxgb4/cm.c | 197 ++++--
drivers/infiniband/hw/cxgb4/cq.c | 4 +-
drivers/infiniband/hw/cxgb4/device.c | 83 ++-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 44 ++
drivers/infiniband/hw/cxgb4/provider.c | 5 +-
drivers/infiniband/hw/cxgb4/user.h | 2 +
drivers/infiniband/hw/ipath/ipath_diag.c | 4 +
drivers/infiniband/hw/ipath/ipath_intr.c | 4 +-
drivers/infiniband/hw/ipath/ipath_sdma.c | 4 +-
drivers/infiniband/hw/mlx4/ah.c | 2 +-
drivers/infiniband/hw/mlx4/cq.c | 6 +-
drivers/infiniband/hw/mlx4/mad.c | 40 +-
drivers/infiniband/hw/mlx4/main.c | 26 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
drivers/infiniband/hw/mlx4/qp.c | 102 +--
drivers/infiniband/hw/mlx4/srq.c | 7 +-
drivers/infiniband/hw/mlx4/sysfs.c | 105 +++-
drivers/infiniband/hw/mlx5/cq.c | 13 +-
drivers/infiniband/hw/mlx5/mlx5_ib.h | 13 +-
drivers/infiniband/hw/mlx5/mr.c | 76 ++-
drivers/infiniband/hw/mlx5/qp.c | 42 +-
drivers/infiniband/hw/mlx5/srq.c | 14 +-
drivers/infiniband/hw/mlx5/user.h | 2 +
drivers/infiniband/hw/nes/nes.c | 25 +-
drivers/infiniband/hw/nes/nes.h | 3 +
drivers/infiniband/hw/nes/nes_cm.c | 320 ++++++++--
drivers/infiniband/hw/nes/nes_cm.h | 12 +-
drivers/infiniband/hw/ocrdma/ocrdma_stats.c | 9 +-
drivers/infiniband/hw/qib/qib_init.c | 8 +-
drivers/infiniband/hw/qib/qib_mad.c | 2 +-
drivers/infiniband/hw/qib/qib_qp.c | 3 +-
drivers/infiniband/hw/usnic/usnic_ib_verbs.c | 3 +
.../infiniband/hw/usnic/usnic_uiom_interval_tree.c | 18 +
drivers/infiniband/ulp/Makefile | 5 +
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 18 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 105 ++--
drivers/infiniband/ulp/iser/iscsi_iser.h | 10 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 89 ++-
drivers/infiniband/ulp/srp/ib_srp.c | 672 +++++++++++++++-----
drivers/infiniband/ulp/srp/ib_srp.h | 94 ++-
drivers/net/ethernet/mellanox/mlx4/alloc.c | 27 +-
drivers/net/ethernet/mellanox/mlx4/cmd.c | 92 ++-
drivers/net/ethernet/mellanox/mlx4/cq.c | 4 +-
drivers/net/ethernet/mellanox/mlx4/en_rx.c | 6 +-
drivers/net/ethernet/mellanox/mlx4/en_tx.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/fw.c | 46 +-
drivers/net/ethernet/mellanox/mlx4/fw.h | 1 +
drivers/net/ethernet/mellanox/mlx4/icm.c | 7 +-
drivers/net/ethernet/mellanox/mlx4/icm.h | 3 +-
drivers/net/ethernet/mellanox/mlx4/main.c | 30 +-
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 12 +-
drivers/net/ethernet/mellanox/mlx4/mr.c | 17 +-
drivers/net/ethernet/mellanox/mlx4/qp.c | 20 +-
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 30 +-
drivers/net/ethernet/mellanox/mlx4/srq.c | 4 +-
drivers/net/ethernet/mellanox/mlx5/core/mr.c | 4 +
include/linux/mlx4/device.h | 15 +-
include/linux/mlx5/driver.h | 1 -
include/rdma/ib_verbs.h | 11 +-
include/rdma/iw_portmap.h | 199 ++++++
include/rdma/rdma_netlink.h | 23 +-
include/uapi/rdma/rdma_netlink.h | 96 ++-
76 files changed, 3870 insertions(+), 733 deletions(-)
create mode 100644 drivers/infiniband/core/iwpm_msg.c
create mode 100644 drivers/infiniband/core/iwpm_util.c
create mode 100644 drivers/infiniband/core/iwpm_util.h
create mode 100644 drivers/infiniband/hw/Makefile
create mode 100644 drivers/infiniband/ulp/Makefile
create mode 100644 include/rdma/iw_portmap.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-05-02 0:09 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-05-02 0:09 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA updates for 3.15-rc4:
- cxgb4 hardware driver fixes
----------------------------------------------------------------
Hariprasad S (1):
RDMA/cxgb4: Update Kconfig to include Chelsio T5 adapter
Steve Wise (3):
RDMA/cxgb4: Fix endpoint mutex deadlocks
RDMA/cxgb4: Force T5 connections to use TAHOE congestion control
RDMA/cxgb4: Only allow kernel db ringing for T4 devs
drivers/infiniband/hw/cxgb4/Kconfig | 6 ++---
drivers/infiniband/hw/cxgb4/cm.c | 39 ++++++++++++++++++++++---------
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 1 +
drivers/infiniband/hw/cxgb4/qp.c | 13 +++++++----
drivers/infiniband/hw/cxgb4/t4fw_ri_api.h | 14 +++++++++++
5 files changed, 55 insertions(+), 18 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-04-18 18:40 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-04-18 18:40 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA updates for 3.15-rc2:
- Mostly cxgb4 fixes unblocked by the merge of some prerequisites via
the net tree.
- Drop deprecated MSI-X API use.
- A couple other miscellaneous things.
----------------------------------------------------------------
Alexander Gordeev (2):
IB/qib: Use pci_enable_msix_range() instead of pci_enable_msix()
IB/mthca: Use pci_enable_msix_exact() instead of pci_enable_msix()
Eli Cohen (1):
IB/mlx5: Add block multicast loopback support
Hariprasad Shenai (1):
RDMA/cxgb4: Use pr_warn_ratelimited
Roland Dreier (1):
Merge branches 'cxgb4', 'misc', 'mlx5' and 'qib' into for-next
Steve Wise (9):
RDMA/cxgb4: Use the BAR2/WC path for kernel QPs and T5 devices
RDMA/cxgb4: Endpoint timeout fixes
RDMA/cxgb4: rmb() after reading valid gen bit
RDMA/cxgb4: SQ flush fix
RDMA/cxgb4: Max fastreg depth depends on DSGL support
RDMA/cxgb4: Initialize reserved fields in a FW work request
RDMA/cxgb4: Add missing debug stats
RDMA/cxgb4: Use uninitialized_var()
RDMA/cxgb4: Fix over-dereference when terminating
drivers/infiniband/hw/cxgb4/cm.c | 89 ++++++++++++++++++++------------
drivers/infiniband/hw/cxgb4/cq.c | 24 ++++-----
drivers/infiniband/hw/cxgb4/device.c | 41 ++++++++++++---
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 2 +
drivers/infiniband/hw/cxgb4/mem.c | 6 ++-
drivers/infiniband/hw/cxgb4/provider.c | 2 +-
drivers/infiniband/hw/cxgb4/qp.c | 70 +++++++++++++++----------
drivers/infiniband/hw/cxgb4/resource.c | 10 ++--
drivers/infiniband/hw/cxgb4/t4.h | 72 ++++++++++++++++++++++++--
drivers/infiniband/hw/mlx5/main.c | 2 +
drivers/infiniband/hw/mlx5/qp.c | 12 +++++
drivers/infiniband/hw/mthca/mthca_main.c | 8 +--
drivers/infiniband/hw/qib/qib_pcie.c | 55 ++++++++++----------
include/linux/mlx5/device.h | 1 +
include/linux/mlx5/qp.h | 1 +
15 files changed, 270 insertions(+), 125 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-04-03 15:54 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-04-03 15:54 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main batch of InfiniBand/RDMA changes for 3.15:
- The biggest change is core API extensions and mlx5 low-level driver
support for handling DIF/DIX-style protection information, and the
addition of PI support to the iSER initiator. Target support will be
arriving shortly through the SCSI target tree.
- A nice simplification to the "umem" memory pinning library now that
we have chained sg lists. Kudos to Yishai Hadas for realizing our
code didn't have to be so crazy.
- Another nice simplification to the sg wrappers used by qib, ipath and
ehca to handle their mapping of memory to adapter.
- The usual batch of fixes to bugs found by static checkers etc. from
intrepid people like Dan Carpenter and Yann Droneaud.
- A large batch of cxgb4, ocrdma, qib driver updates.
----------------------------------------------------------------
Alex Tabachnik (2):
IB/iser: Introduce pi_enable, pi_guard module parameters
IB/iser: Initialize T10-PI resources
Ariel Nahum (1):
IB/iser: Remove struct iscsi_iser_conn
Bart Van Assche (7):
IB/mlx4: Fix a sparse endianness warning
scsi_transport_srp: Fix two kernel-doc warnings
IB/srp: Add more logging
IB/srp: Avoid duplicate connections
IB/srp: Make writing into the "add_target" sysfs attribute interruptible
IB/srp: Avoid that writing into "add_target" hangs due to a cable pull
IB/srp: Fix a race condition between failing I/O and I/O completion
CQ Tang (1):
IB/qib: Change SDMA progression mode depending on single- or multi-rail
Dan Carpenter (7):
IB/qib: Remove duplicate check in get_a_ctxt()
RDMA/nes: Clean up a condition
RDMA/cxgb4: Fix underflows in c4iw_create_qp()
RDMA/cxgb4: Fix four byte info leak in c4iw_create_cq()
IB/qib: Cleanup qib_register_observer()
mlx4_core: Fix some indenting in mlx4_ib_add()
mlx4_core: Make buffer larger to avoid overflow warning
Dennis Dalessandro (3):
IB/qib: Fix potential buffer overrun in sending diag packet routine
IB/ipath: Fix potential buffer overrun in sending diag packet routine
IB/qib: Fix memory leak of recv context when driver fails to initialize.
Devesh Sharma (9):
RDMA/ocrdma: EQ full catastrophe avoidance
RDMA/ocrdma: SQ and RQ doorbell offset clean up
RDMA/ocrdma: Read ASIC_ID register to select asic_gen
RDMA/ocrdma: Allow DPP QP creation
RDMA/ocrdma: ABI versioning between ocrdma and be2net
be2net: Add abi version between be2net and ocrdma
RDMA/ocrdma: Update version string
RDMA/ocrdma: Increment abi version count
RDMA/ocrdma: Code clean-up
Fabio Estevam (1):
IB/usnic: Remove '0x' when using %pa format
Mike Marciniszyn (7):
IB/qib: Fix debugfs ordering issue with multiple HCAs
IB/qib: Add percpu counter replacing qib_devdata int_counter
IB/qib: Modify software pma counters to use percpu variables
IB/qib: Remove ib_sg_dma_address() and ib_sg_dma_len() overloads
IB/ipath: Remove ib_sg_dma_address() and ib_sg_dma_len() overloads
IB/ehca: Remove ib_sg_dma_address() and ib_sg_dma_len() overloads
IB/core: Remove overload in ib_sg_dma*
Moni Shoua (1):
IB/core: Don't resolve passive side RoCE L2 address in CMA REQ handler
Or Gerlitz (3):
IB/iser: Print QP information once connection is established
IB/iser: Update Mellanox copyright note
IB/iser: Bump driver version to 1.3
Prarit Bhargava (1):
RDMA/ocrdma: Fix compiler warning
Randy Dunlap (1):
IB/iser: Fix sector_t format warning
Roi Dayan (1):
IB/iser: Drain the tx cq once before looping on the rx cq
Roland Dreier (2):
RDMA/ocrdma: Fix warnings about pointer <-> integer casts
Merge branches 'core', 'cxgb4', 'ip-roce', 'iser', 'misc', 'mlx4', 'nes', 'ocrdma', 'qib', 'sgwrapper', 'srp' and 'usnic' into for-next
Sagi Grimberg (23):
IB/core: Introduce protected memory regions
IB/core: Introduce signature verbs API
mlx5: Implement create_mr and destroy_mr
IB/mlx5: Initialize mlx5_ib_qp signature-related members
IB/mlx5: Break up wqe handling into begin & finish routines
IB/mlx5: Remove MTT access mode from umr flags helper function
IB/mlx5: Keep mlx5 MRs in a radix tree under device
IB/mlx5: Support IB_WR_REG_SIG_MR
IB/mlx5: Collect signature error completion
IB/mlx5: Expose support for signature MR feature
IB/iser: Suppress completions for fast registration work requests
IB/iser: Avoid FRWR notation, use fastreg instead
IB/iser: Push the decision what memory key to use into fast_reg_mr routine
IB/iser: Move fast_reg_descriptor initialization to a function
IB/iser: Keep IB device attributes under iser_device
IB/iser: Replace fastreg descriptor valid bool with indicators container
IB/iser: Generalize iser_unmap_task_data and finalize_rdma_unaligned_sg
IB/iser: Generalize fall_to_bounce_buf routine
IB/iser: Support T10-PI operations
SCSI/libiscsi: Add check_protection callback for transports
IB/iser: Implement check_protection
IB/iser: Publish T10-PI support to SCSI midlayer
IB/srp: Check ib_query_gid return value
Selvin Xavier (8):
RDMA/ocrdma: Memory leak fix in ocrdma_dereg_mr()
RDMA/ocrdma: Use non-zero tag in SRQ posting
RDMA/ocrdma: Display proper value for max_mw
RDMA/ocrdma: Handle CQ overrun error
RDMA/ocrdma: Support non-embedded mailbox commands
RDMA/ocrdma: Query controller information
RDMA/ocrdma: Display FW version
RDMA/ocrdma: Unregister inet notifier when unloading ocrdma
Steve Wise (16):
RDMA/cxgb4: Cap CQ size at T4_MAX_IQ_SIZE
RDMA/cxgb4: Allow loopback connections
RDMA/cxgb4: Always release neigh entry
RDMA/cxgb4: Fix incorrect BUG_ON conditions
RDMA/cxgb4: Mind the sq_sig_all/sq_sig_type QP attributes
RDMA/cxgb4: Default peer2peer mode to 1
RDMA/cxgb4: Save the correct map length for fast_reg_page_lists
RDMA/cxgb4: Don't leak skb in c4iw_uld_rx_handler()
RDMA/cxgb4: Fix possible memory leak in RX_PKT processing
RDMA/cxgb4: Ignore read reponse type 1 CQEs
RDMA/cxgb4: Connect_request_upcall fixes
RDMA/cxgb4: Update snd_seq when sending MPA messages
RDMA/cxgb4: Lock around accept/reject downcalls
RDMA/cxgb4: Drop RX_DATA packets if the endpoint is gone
RDMA/cxgb4: rx_data() needs to hold the ep mutex
RDMA/cxgb4: Disable DSGL use by default
Tatyana Nikolova (2):
RDMA/nes: Fixes for IRD/ORD negotiation with MPA v2
RDMA/nes: Fix for passing a valid QP pointer to the user space library
Yan Burman (1):
IB/mad: Check and handle potential DMA mapping errors
Yann Droneaud (5):
IB/qib: add missing braces in do_qib_user_sdma_queue_create()
IB/qib: fixup indentation in qib_ib_rcv()
IB/nes: Return an error on ib_copy_from_udata() failure instead of NULL
IB/mthca: Return an error on ib_copy_to_udata() failure
IB/ehca: Returns an error on ib_copy_to_udata() failure
Yishai Hadas (1):
IB: Refactor umem to use linear SG table
drivers/infiniband/core/cm.c | 17 -
drivers/infiniband/core/cma.c | 26 --
drivers/infiniband/core/mad.c | 14 +
drivers/infiniband/core/umem.c | 120 +++--
drivers/infiniband/core/verbs.c | 47 ++
drivers/infiniband/hw/amso1100/c2_provider.c | 23 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 19 +-
drivers/infiniband/hw/cxgb4/cm.c | 110 +++--
drivers/infiniband/hw/cxgb4/cq.c | 31 +-
drivers/infiniband/hw/cxgb4/device.c | 6 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 2 +
drivers/infiniband/hw/cxgb4/mem.c | 55 +--
drivers/infiniband/hw/cxgb4/qp.c | 8 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 2 +-
drivers/infiniband/hw/ehca/ehca_cq.c | 1 +
drivers/infiniband/hw/ehca/ehca_mrmw.c | 257 ++++------
drivers/infiniband/hw/ipath/ipath_diag.c | 66 +--
drivers/infiniband/hw/ipath/ipath_dma.c | 43 +-
drivers/infiniband/hw/ipath/ipath_mr.c | 39 +-
drivers/infiniband/hw/mlx4/doorbell.c | 4 +-
drivers/infiniband/hw/mlx4/main.c | 11 +-
drivers/infiniband/hw/mlx4/mr.c | 39 +-
drivers/infiniband/hw/mlx4/qp.c | 2 +-
drivers/infiniband/hw/mlx5/cq.c | 62 +++
drivers/infiniband/hw/mlx5/doorbell.c | 4 +-
drivers/infiniband/hw/mlx5/main.c | 12 +
drivers/infiniband/hw/mlx5/mem.c | 80 ++--
drivers/infiniband/hw/mlx5/mlx5_ib.h | 14 +
drivers/infiniband/hw/mlx5/mr.c | 157 +++++++
drivers/infiniband/hw/mlx5/qp.c | 540 +++++++++++++++++++--
drivers/infiniband/hw/mthca/mthca_provider.c | 43 +-
drivers/infiniband/hw/nes/nes_cm.c | 121 +++--
drivers/infiniband/hw/nes/nes_cm.h | 3 +
drivers/infiniband/hw/nes/nes_user.h | 5 +-
drivers/infiniband/hw/nes/nes_verbs.c | 261 +++++------
drivers/infiniband/hw/nes/nes_verbs.h | 1 +
drivers/infiniband/hw/ocrdma/Makefile | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma.h | 110 ++++-
drivers/infiniband/hw/ocrdma/ocrdma_abi.h | 7 +-
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 299 +++++++++---
drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 81 +++-
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 261 ++++++++++-
drivers/infiniband/hw/ocrdma/ocrdma_stats.c | 623 +++++++++++++++++++++++++
drivers/infiniband/hw/ocrdma/ocrdma_stats.h | 54 +++
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 233 ++++-----
drivers/infiniband/hw/qib/qib.h | 12 +-
drivers/infiniband/hw/qib/qib_diag.c | 52 +--
drivers/infiniband/hw/qib/qib_dma.c | 21 +-
drivers/infiniband/hw/qib/qib_file_ops.c | 5 +-
drivers/infiniband/hw/qib/qib_fs.c | 1 +
drivers/infiniband/hw/qib/qib_iba6120.c | 11 +-
drivers/infiniband/hw/qib/qib_iba7220.c | 12 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 37 +-
drivers/infiniband/hw/qib/qib_init.c | 96 ++--
drivers/infiniband/hw/qib/qib_mad.c | 44 +-
drivers/infiniband/hw/qib/qib_mr.c | 14 +-
drivers/infiniband/hw/qib/qib_rc.c | 2 +-
drivers/infiniband/hw/qib/qib_ruc.c | 1 +
drivers/infiniband/hw/qib/qib_ud.c | 6 +-
drivers/infiniband/hw/qib/qib_user_sdma.c | 136 +++++-
drivers/infiniband/hw/qib/qib_verbs.c | 8 +-
drivers/infiniband/hw/qib/qib_verbs.h | 16 +-
drivers/infiniband/hw/usnic/usnic_uiom.c | 2 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 93 ++--
drivers/infiniband/ulp/iser/iscsi_iser.h | 85 +++-
drivers/infiniband/ulp/iser/iser_initiator.c | 154 ++++--
drivers/infiniband/ulp/iser/iser_memory.c | 470 ++++++++++++++-----
drivers/infiniband/ulp/iser/iser_verbs.c | 325 +++++++++----
drivers/infiniband/ulp/srp/ib_srp.c | 83 ++--
drivers/infiniband/ulp/srp/ib_srp.h | 1 +
drivers/net/ethernet/emulex/benet/be_roce.c | 6 +
drivers/net/ethernet/emulex/benet/be_roce.h | 3 +
drivers/net/ethernet/mellanox/mlx5/core/main.c | 1 +
drivers/net/ethernet/mellanox/mlx5/core/mr.c | 85 ++++
drivers/scsi/libiscsi.c | 32 ++
drivers/scsi/scsi_transport_srp.c | 1 +
include/linux/mlx5/cq.h | 1 +
include/linux/mlx5/device.h | 43 ++
include/linux/mlx5/driver.h | 41 ++
include/linux/mlx5/qp.h | 67 +++
include/rdma/ib_cm.h | 1 -
include/rdma/ib_umem.h | 11 +-
include/rdma/ib_verbs.h | 201 +++++++-
include/scsi/libiscsi.h | 4 +
include/scsi/scsi_transport_iscsi.h | 1 +
include/scsi/scsi_transport_srp.h | 1 -
88 files changed, 4634 insertions(+), 1475 deletions(-)
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_stats.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_stats.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-02-14 17:51 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-02-14 17:51 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
RDMA/InfiniBand fixes for 3.14-rc3:
- Fix some rough edges from the "IP addressing for IBoE" merge
- Other misc fixes, mostly to hardware drivers
----------------------------------------------------------------
Dan Carpenter (1):
IB/iser: Fix use after free in iser_snd_completion()
Devesh Sharma (2):
RDMA/ocrdma: Fix traffic class shift
RDMA/ocrdma: Fix load time panic during GID table init
Eli Cohen (4):
IB/mlx5: Fix RC transport send queue overhead computation
IB/mlx5: Fix binary compatibility with libmlx5
IB/mlx5: Don't set "block multicast loopback" capability
IB/mlx5: Remove dependency on X86
Julia Lawall (2):
RDMA/nes: Fix error return code
RDMA/amso1100: Fix error return code
Kumar Sanghvi (1):
RDMA/cxgb4: Add missing neigh_release in LE-Workaround path
Matan Barak (1):
IB/mlx4: Don't allocate range of steerable UD QPs for Ethernet-only device
Mike Marciniszyn (1):
IB/qib: Add missing serdes init sequence
Moni Shoua (6):
IB/mlx4: Make sure GID index 0 is always occupied
IB/mlx4: Move rtnl locking to the right place
IB/mlx4: Do IBoE locking earlier when initializing the GID table
IB/mlx4: Do IBoE GID table resets per-port
IB/mlx4: Build the port IBoE GID table properly under bonding
IB: Report using RoCE IP based gids in port caps
Roi Dayan (1):
IB/iser: Avoid dereferencing iscsi_iser conn object when not bound to iser connection
Roland Dreier (2):
mlx5: Add include of <linux/slab.h> because of kzalloc()/kfree() use
Merge branches 'cma', 'cxgb4', 'iser', 'misc', 'mlx4', 'mlx5', 'nes', 'ocrdma', 'qib' and 'usnic' into for-next
Upinder Malhi (1):
IB/usnic: Fix smatch endianness error
drivers/infiniband/hw/amso1100/c2.c | 4 +-
drivers/infiniband/hw/amso1100/c2_rnic.c | 3 +-
drivers/infiniband/hw/cxgb4/cm.c | 1 +
drivers/infiniband/hw/mlx4/main.c | 185 +++++++++++++++++-------
drivers/infiniband/hw/mlx5/Kconfig | 2 +-
drivers/infiniband/hw/mlx5/main.c | 22 ++-
drivers/infiniband/hw/mlx5/qp.c | 18 ++-
drivers/infiniband/hw/mlx5/user.h | 7 +
drivers/infiniband/hw/nes/nes.c | 5 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 4 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 5 +
drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c | 9 +-
drivers/infiniband/ulp/iser/iser_initiator.c | 3 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 10 +-
drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 2 +-
include/linux/mlx5/driver.h | 3 +
include/rdma/ib_verbs.h | 3 +-
18 files changed, 214 insertions(+), 74 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2014-01-24 19:43 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2014-01-24 19:43 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main batch of InfiniBand/RDMA changes for 3.14:
- Flow steering for InfiniBand UD traffic
- IP-based addressing for IBoE aka RoCE
- Pass SRP submaintainership from Dave to Bart
- SRP transport fixes from Bart
- Add the new Cisco usNIC low-level device driver
- Various other fixes
----------------------------------------------------------------
Bart Van Assche (4):
scsi_transport_srp: Block rport upon TL error even with fast_io_fail_tmo = off
scsi_transport_srp: Fix a race condition
scsi_transport_srp: Add rport state diagram
scsi_transport_srp: Fix kernel-doc warnings
Dan Carpenter (2):
mlx5_core: Remove dead code
IB/usnic: Use GFP_ATOMIC under spinlock
David Dillow (1):
MAINTAINERS: Pass the torch of SRP submaintainership
Devesh Sharma (2):
RDMA/ocrdma: Fix AV_VALID bit position
RDMA/ocrdma: Fix OCRDMA_GEN2_FAMILY macro definition
Ding Tianhong (1):
RDMA/nes: Slight optimization of Ethernet address compare
Eli Cohen (13):
IB/mlx5: Remove unused code in mr.c
IB/mlx5: Fix micro UAR allocator
IB/mlx5: Clear out struct before create QP command
mlx5_core: Use mlx5 core style warning
IB/mlx5: Make sure doorbell record is visible before doorbell
IB/mlx5: Implement modify CQ
IB/mlx5: Add support for resize CQ
mlx5_core: Improve debugfs readability
mlx5_core: Fix PowerPC support
IB/mlx5: Allow creation of QPs with zero-length work queues
IB/mlx5: Abort driver cleanup if teardown hca fails
IB/mlx5: Remove old field for create mkey mailbox
IB/mlx5: Verify reserved fields are cleared
Haggai Eran (1):
mlx5_core: Fix out arg size in access_register command
Ira Weiny (1):
IB/qib: Fix QP check when looping back to/from QP1
Julia Lawall (1):
IB/mlx4: Fix error return code
Matan Barak (9):
IB/core: Add flow steering support for IPoIB UD traffic
IB/core: Add support for IB L2 device-managed steering
mlx4_core: Add support for steerable IB UD QPs
IB/mlx4: Enable device-managed steering support for IB ports too
IB/mlx4: Add mechanism to support flow steering over IB links
IB/mlx4: Add support for steerable IB UD QPs
IB/core: Ethernet L2 attributes in verbs/cm structures
IB/core: Make ib_addr a core IB module
IB/mlx4: Add dependency INET
Michal Schmidt (1):
IPoIB: Report operstate consistently when brought up without a link
Moni Shoua (5):
IB/cma: IBoE (RoCE) IP-based GID addressing
IB/mlx4: Use IBoE (RoCE) IP based GIDs in the port GID table
IB/mlx4: Handle Ethernet L2 parameters for IP based GID addressing
RDMA/ocrdma: Handle Ethernet L2 parameters for IP based GID addressing
RDMA/ocrdma: Populate GID table with IP based gids
Or Gerlitz (2):
IB/core: Resolve Ethernet L2 addresses when modifying QP
IB/core: Fix unused variable warning
Paul Bolle (1):
RDMA/cxgb4: Fix gcc warning on 32-bit arch
Roland Dreier (6):
IB/usnic: Fix typo "Ignorning" -> "Ignoring"
RDMA/ocrdma: Move ocrdma_inetaddr_event outside of "#if CONFIG_IPV6"
RDMA/ocrdma: Add dependency on INET
IB/mlx4: Use IS_ENABLED(CONFIG_IPV6)
Merge branches 'cma', 'cxgb4', 'flowsteer', 'ipoib', 'misc', 'mlx4', 'mlx5', 'ocrdma', 'qib', 'srp' and 'usnic' into for-next
Merge branch 'ip-roce' into for-next
Somnath Kotur (1):
RDMA/cma: Handle global/non-linklocal IPv6 addresses in cma_check_linklocal()
Svetlana Mavrina (1):
RDMA/amso1100: Add check if cache memory was allocated before freeing it
Upinder Malhi (22):
IB/usnic: Add Cisco VIC low-level hardware driver
IB/usnic: Change WARN_ON to lockdep_assert_held
IB/usnic: Add struct usnic_transport_spec
IB/usnic: Push all forwarding state to usnic_fwd.[hc]
IB/usnic: Port over main.c and verbs.c to the usnic_fwd.h
IB/usnic: Port over usnic_ib_qp_grp.[hc] to new usnic_fwd.h
IB/usnic: Port over sysfs to new usnic_fwd.h
IB/usnic: Update ABI and Version file for UDP support
IB/usnic: Add UDP support to usnic_fwd.[hc]
IB:usnic: Add UDP support to usnic_transport.[hc]
IB/usnic: Add UDP support in u*verbs.c, u*main.c and u*util.h
IB/usnic: Add UDP support in usnic_ib_qp_grp.[hc]
IB/core: Add RDMA_TRANSPORT_USNIC_UDP
IB/usnic: Remove superflous parentheses
IB/usnic: Use for_each_sg instead of a for-loop
IB/usnic: Expose flows via debugfs
IB/usnic: Append documentation to usnic_transport.h and cleanup
IB/usnic: Fix endianness-related warnings
IB/usnic: Add dependency on CONFIG_INET
IB/core: Add support for RDMA_NODE_USNIC_UDP
IB/usnic: Advertise usNIC devices as RDMA_NODE_USNIC_UDP
IB/usnic: Set userspace/kernel ABI ver to 4
Wei Yongjun (3):
IB/usnic: Remove unused variable in usnic_debugfs_exit()
IB/cm: Fix missing unlock on error in cm_init_qp_rtr_attr()
IB/usnic: Remove unused includes of <linux/version.h>
Documentation/scsi/scsi_transport_srp/Makefile | 7 +
.../scsi_transport_srp/rport_state_diagram.dot | 26 +
MAINTAINERS | 7 +-
drivers/infiniband/Kconfig | 6 +-
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/Makefile | 5 +-
drivers/infiniband/core/addr.c | 97 ++-
drivers/infiniband/core/cm.c | 52 ++
drivers/infiniband/core/cma.c | 81 ++-
drivers/infiniband/core/core_priv.h | 2 +
drivers/infiniband/core/iwcm.c | 3 +-
drivers/infiniband/core/sa_query.c | 12 +-
drivers/infiniband/core/sysfs.c | 1 +
drivers/infiniband/core/ucma.c | 18 +-
drivers/infiniband/core/uverbs_cmd.c | 4 +
drivers/infiniband/core/verbs.c | 101 ++-
drivers/infiniband/hw/amso1100/c2_intr.c | 3 +-
drivers/infiniband/hw/cxgb4/mem.c | 2 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 2 +-
drivers/infiniband/hw/ipath/ipath_qp.c | 2 +-
drivers/infiniband/hw/mlx4/Kconfig | 2 +-
drivers/infiniband/hw/mlx4/ah.c | 40 +-
drivers/infiniband/hw/mlx4/cq.c | 9 +
drivers/infiniband/hw/mlx4/main.c | 747 +++++++++++++++-----
drivers/infiniband/hw/mlx4/mlx4_ib.h | 18 +-
drivers/infiniband/hw/mlx4/qp.c | 157 ++++-
drivers/infiniband/hw/mlx4/sysfs.c | 8 +-
drivers/infiniband/hw/mlx5/cq.c | 310 ++++++++-
drivers/infiniband/hw/mlx5/main.c | 13 +-
drivers/infiniband/hw/mlx5/mlx5_ib.h | 4 +-
drivers/infiniband/hw/mlx5/mr.c | 1 -
drivers/infiniband/hw/mlx5/qp.c | 133 ++--
drivers/infiniband/hw/mlx5/user.h | 3 +
drivers/infiniband/hw/mthca/mthca_qp.c | 3 +-
drivers/infiniband/hw/nes/nes_cm.c | 3 +-
drivers/infiniband/hw/ocrdma/Kconfig | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma.h | 12 +
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 21 +-
drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 1 -
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 138 ++--
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 4 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 3 +-
drivers/infiniband/hw/qib/qib_qp.c | 2 +-
drivers/infiniband/hw/qib/qib_ud.c | 9 +-
drivers/infiniband/hw/usnic/Kconfig | 10 +
drivers/infiniband/hw/usnic/Makefile | 15 +
drivers/infiniband/hw/usnic/usnic.h | 29 +
drivers/infiniband/hw/usnic/usnic_abi.h | 73 ++
drivers/infiniband/hw/usnic/usnic_common_pkt_hdr.h | 27 +
drivers/infiniband/hw/usnic/usnic_common_util.h | 68 ++
drivers/infiniband/hw/usnic/usnic_debugfs.c | 154 +++++
drivers/infiniband/hw/usnic/usnic_debugfs.h | 29 +
drivers/infiniband/hw/usnic/usnic_fwd.c | 350 ++++++++++
drivers/infiniband/hw/usnic/usnic_fwd.h | 113 +++
drivers/infiniband/hw/usnic/usnic_ib.h | 118 ++++
drivers/infiniband/hw/usnic/usnic_ib_main.c | 682 ++++++++++++++++++
drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c | 754 ++++++++++++++++++++
drivers/infiniband/hw/usnic/usnic_ib_qp_grp.h | 117 ++++
drivers/infiniband/hw/usnic/usnic_ib_sysfs.c | 341 +++++++++
drivers/infiniband/hw/usnic/usnic_ib_sysfs.h | 29 +
drivers/infiniband/hw/usnic/usnic_ib_verbs.c | 765 +++++++++++++++++++++
drivers/infiniband/hw/usnic/usnic_ib_verbs.h | 72 ++
drivers/infiniband/hw/usnic/usnic_log.h | 58 ++
drivers/infiniband/hw/usnic/usnic_transport.c | 202 ++++++
drivers/infiniband/hw/usnic/usnic_transport.h | 51 ++
drivers/infiniband/hw/usnic/usnic_uiom.c | 604 ++++++++++++++++
drivers/infiniband/hw/usnic/usnic_uiom.h | 80 +++
.../infiniband/hw/usnic/usnic_uiom_interval_tree.c | 236 +++++++
.../infiniband/hw/usnic/usnic_uiom_interval_tree.h | 73 ++
drivers/infiniband/hw/usnic/usnic_vnic.c | 467 +++++++++++++
drivers/infiniband/hw/usnic/usnic_vnic.h | 103 +++
drivers/infiniband/ulp/ipoib/ipoib_main.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 3 +
drivers/infiniband/ulp/srp/ib_srp.c | 1 +
drivers/net/ethernet/mellanox/mlx4/cmd.c | 9 +
drivers/net/ethernet/mellanox/mlx4/fw.c | 10 +
drivers/net/ethernet/mellanox/mlx4/mcg.c | 17 +
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 5 +
drivers/net/ethernet/mellanox/mlx4/port.c | 20 +
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 10 +
drivers/net/ethernet/mellanox/mlx5/core/cq.c | 17 +-
drivers/net/ethernet/mellanox/mlx5/core/debugfs.c | 39 +-
drivers/net/ethernet/mellanox/mlx5/core/main.c | 10 +-
.../net/ethernet/mellanox/mlx5/core/pagealloc.c | 13 +-
drivers/net/ethernet/mellanox/mlx5/core/port.c | 2 +-
drivers/net/ethernet/mellanox/mlx5/core/qp.c | 5 +-
drivers/scsi/scsi_transport_srp.c | 95 ++-
include/linux/mlx4/cmd.h | 1 +
include/linux/mlx4/cq.h | 15 +-
include/linux/mlx4/device.h | 7 +-
include/linux/mlx5/cq.h | 18 +-
include/linux/mlx5/device.h | 31 +-
include/linux/mlx5/qp.h | 45 ++
include/rdma/ib_addr.h | 69 +-
include/rdma/ib_cm.h | 1 +
include/rdma/ib_pack.h | 1 +
include/rdma/ib_sa.h | 3 +
include/rdma/ib_verbs.h | 42 +-
include/scsi/scsi_transport_srp.h | 36 +-
100 files changed, 7663 insertions(+), 567 deletions(-)
create mode 100644 Documentation/scsi/scsi_transport_srp/Makefile
create mode 100644 Documentation/scsi/scsi_transport_srp/rport_state_diagram.dot
create mode 100644 drivers/infiniband/hw/usnic/Kconfig
create mode 100644 drivers/infiniband/hw/usnic/Makefile
create mode 100644 drivers/infiniband/hw/usnic/usnic.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_abi.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_common_pkt_hdr.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_common_util.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_debugfs.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_debugfs.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_fwd.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_fwd.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_ib.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_ib_main.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_ib_qp_grp.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_ib_sysfs.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_ib_sysfs.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_ib_verbs.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_ib_verbs.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_log.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_transport.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_transport.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_uiom.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_uiom.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.h
create mode 100644 drivers/infiniband/hw/usnic/usnic_vnic.c
create mode 100644 drivers/infiniband/hw/usnic/usnic_vnic.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-12-23 17:24 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-12-23 17:24 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
The following changes since commit 374b105797c3d4f29c685f3be535c35f5689b30e:
Linux 3.13-rc3 (2013-12-06 09:34:04 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
for you to fetch changes up to 22f12c60e12a4112fdca31582e66fe501600ee2b:
Merge branches 'cxgb4', 'flowsteer' and 'misc' into for-linus (2013-12-23 09:19:02 -0800)
----------------------------------------------------------------
Last batch of InfiniBand/RDMA changes for 3.13 / 2014:
- Additional checks for uverbs to ensure forward compatibility, handle
malformed input better.
- Fix potential use-after-free in iWARP connection manager.
- Make a function static.
----------------------------------------------------------------
Rashika (1):
RDMA/cxgb4: Make _c4iw_write_mem_dma() static
Roland Dreier (2):
IB/uverbs: New macro to set pointers to NULL if length is 0 in INIT_UDATA()
Merge branches 'cxgb4', 'flowsteer' and 'misc' into for-linus
Steve Wise (1):
RDMA/iwcm: Don't touch cm_id after deref in rem_ref
Yann Droneaud (7):
IB/core: const'ify inbuf in struct ib_udata
IB/uverbs: Check reserved field in extended command header
IB/uverbs: Check comp_mask in destroy_flow
IB/uverbs: Check reserved fields in create_flow
IB/uverbs: Set error code when fail to consume all flow_spec items
IB/uverbs: Check input length in flow steering uverbs
IB/uverbs: Check access to userspace response buffer in extended command
drivers/infiniband/core/iwcm.c | 11 +++++++++--
drivers/infiniband/core/uverbs.h | 10 +++++++++-
drivers/infiniband/core/uverbs_cmd.c | 17 +++++++++++++++++
drivers/infiniband/core/uverbs_main.c | 27 ++++++++++++++++-----------
drivers/infiniband/hw/cxgb4/mem.c | 2 +-
include/rdma/ib_verbs.h | 2 +-
6 files changed, 53 insertions(+), 16 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-11-18 18:40 Roland Dreier
@ 2013-11-19 17:25 ` Or Gerlitz
0 siblings, 0 replies; 223+ messages in thread
From: Or Gerlitz @ 2013-11-19 17:25 UTC (permalink / raw)
To: Roland Dreier; +Cc: linux-rdma, linux-kernel
On 18/11/2013 20:40, Roland Dreier wrote:
> Hi Linus,
>
> Please pull from
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
>
> ----------------------------------------------------------------
>
> Main batch of InfiniBand/RDMA changes for 3.13:
>
> - Re-enable flow steering verbs with new improved userspace ABI
> - Fixes for slow connection due to GID lookup scalability
> - IPoIB fixes
> - Many fixes to HW drivers including mlx4, mlx5, ocrdma and qib
> - Further improvements to SRP error handling
> - Add new transport type for Cisco usNIC
Hi Roland, can you spare few words on how you see the RoCE IP based Addressing V5 series? we have addressed the concerns you raised re compatibility and also simplified the series to avoid using uverbs extensions @ this point, anything else left there?
This series is pre-step for submitting SRIOV support to RoCE (the code is ready!) and hence no Cloud RoCE upstream solution for VMs before we nail that, it deserves your response. I have posted reply on Sep 17th, to your concerns http://marc.info/?l=linux-rdma&m=137945099714426&w=2 and didn't really hear from you. So went ahead and addressed the feedback as we captured it.
Or.
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-11-18 18:40 Roland Dreier
2013-11-19 17:25 ` Or Gerlitz
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2013-11-18 18:40 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main batch of InfiniBand/RDMA changes for 3.13:
- Re-enable flow steering verbs with new improved userspace ABI
- Fixes for slow connection due to GID lookup scalability
- IPoIB fixes
- Many fixes to HW drivers including mlx4, mlx5, ocrdma and qib
- Further improvements to SRP error handling
- Add new transport type for Cisco usNIC
----------------------------------------------------------------
Bart Van Assche (11):
IB/srp: Keep rport as long as the IB transport layer
scsi_transport_srp: Add transport layer error handling
IB/srp: Use SRP transport layer error recovery
IB/srp: Start timers if a transport layer error occurs
scsi_transport_srp: Add periodic reconnect support
IB/srp: Add periodic reconnect functionality
IB/srp: Export sgid to sysfs
IB/srp: Introduce srp_alloc_req_data()
IB/srp: Make queue size configurable
IB/srp: Avoid offlining operational SCSI devices
IB/srp: Report receive errors correctly
Ben Hutchings (1):
IB/cxgb4: Fix formatting of physical address
Dan Carpenter (1):
RDMA/ocrdma: Silence an integer underflow warning
Dave Jones (1):
RDMA/nes: Remove self-assignment from nes_query_qp()
Doug Ledford (2):
IB/cma: Use cached gids
IB/cma: Check for GID on listening device first
Eli Cohen (17):
IB/mlx5: Fix check of number of entries in create CQ
IB/mlx5: Multithreaded create MR
IB/mlx5: Fix overflow check in IB_WR_FAST_REG_MR
IB/mlx5: Simplify mlx5_ib_destroy_srq
mlx5: Fix cleanup flow when DMA mapping fails
mlx5: Support communicating arbitrary host page size to firmware
mlx5: Clear reserved area in set_hca_cap()
IB/mlx5: Remove dead code in mr.c
IB/mlx5: Remove "Always false" comparison
IB/mlx5: Update opt param mask for RTS2RTS
mlx5: Use enum to indicate adapter page size
IB/mlx4: Fix endless loop in resize CQ
IB/core: Encorce MR access rights rules on kernel consumers
IB/mlx5: Remove dead code
IB/mlx5: Fix list_del of empty list
IB/mlx4: Fix device max capabilities check
IB/mlx5: Fix page shift in create CQ for userspace
Erez Shitrit (6):
IPoIB: Fix crash in dev_open error flow
IPoIB: Fix deadlock between dev_change_flags() and __ipoib_dev_flush()
IPoIB: Avoid flushing the driver workqueue on dev_down
IPoIB: Fix usage of uninitialized multicast objects
IPoIB: Add path query flushing in ipoib_ib_dev_cleanup
IPoIB: Start multicast join process only on active ports
Jack Wang (1):
IB/srp: Add change_queue_depth and change_queue_type support
Jan Kara (2):
IB/ipath: Convert ipath_user_sdma_pin_pages() to use get_user_pages_fast()
IB/qib: Convert qib_user_sdma_pin_pages() to use get_user_pages_fast()
Joe Perches (1):
IB/ucma: Convert use of typedef ctl_table to struct ctl_table
Latchesar Ionkov (1):
IB/core: Pass imm_data from ib_uverbs_send_wr to ib_send_wr correctly
Matan Barak (2):
IB/core: clarify overflow/underflow checks on ib_create/destroy_flow
IB/core: Re-enable create_flow/destroy_flow uverbs
Mathias Krause (1):
IB/netlink: Remove superfluous RDMA_NL_GET_OP() masking
Michal Nazarewicz (1):
RDMA/cma: Remove unused argument and minor dead code
Michal Schmidt (1):
IPoIB: lower NAPI weight
Mike Marciniszyn (2):
IB/qib: Fix checkpatch __packed warnings
IB/qib: Fix txselect regression
Moshe Lazer (2):
IB/mlx5: Fix srq free in destroy qp
mlx5_core: Change optimal_reclaimed_pages for better performance
Naresh Gottumukkala (2):
RDMA/ocrdma: Fix a crash in rmmod
RDMA/ocrdma: Remove redundant check in ocrdma_build_fr()
Roland Dreier (1):
Merge branches 'cma', 'cxgb4', 'flowsteer', 'ipoib', 'misc', 'mlx4', 'mlx5', 'nes', 'ocrdma', 'qib' and 'srp' into for-next
Sean Hefty (1):
RDMA/ucma: Discard events for IDs not yet claimed by user space
Tal Alon (1):
IPoIB: Change CM skb memory allocation to be non-atomic during init
Upinder Malhi \(umalhi\) (1):
IB/core: Add Cisco usNIC rdma node and transport types
Vu Pham (2):
IB/srp: Make transport layer retry count configurable
IB/srp: Remove target from list before freeing Scsi_Host structure
Yann Droneaud (5):
IB/core: Rename 'flow' structs to match other uverbs structs
IB/core: Make uverbs flow structure use names like verbs ones
IB/core: Use a common header for uverbs flow_specs
IB/core: Remove ib_uverbs_flow_spec structure from userspace
IB/core: extended command: an improved infrastructure for uverbs commands
Zhao Hongjiang (1):
IB/cm: Convert to using idr_alloc_cyclic()
Documentation/ABI/stable/sysfs-driver-ib_srp | 13 +
Documentation/ABI/stable/sysfs-transport-srp | 39 ++
drivers/infiniband/Kconfig | 11 -
drivers/infiniband/core/cm.c | 5 +-
drivers/infiniband/core/cma.c | 68 ++-
drivers/infiniband/core/netlink.c | 2 +-
drivers/infiniband/core/sysfs.c | 1 +
drivers/infiniband/core/ucma.c | 4 +-
drivers/infiniband/core/uverbs.h | 36 +-
drivers/infiniband/core/uverbs_cmd.c | 109 ++---
drivers/infiniband/core/uverbs_main.c | 128 +++--
drivers/infiniband/core/verbs.c | 17 +
drivers/infiniband/hw/cxgb4/device.c | 4 +-
drivers/infiniband/hw/ipath/ipath_user_sdma.c | 7 +-
drivers/infiniband/hw/mlx4/cq.c | 9 +-
drivers/infiniband/hw/mlx4/main.c | 8 +-
drivers/infiniband/hw/mlx5/cq.c | 25 +-
drivers/infiniband/hw/mlx5/main.c | 3 +-
drivers/infiniband/hw/mlx5/mlx5_ib.h | 6 +
drivers/infiniband/hw/mlx5/mr.c | 167 +++++--
drivers/infiniband/hw/mlx5/qp.c | 21 +-
drivers/infiniband/hw/mlx5/srq.c | 8 +-
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma.h | 53 +-
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 7 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 6 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 11 +-
drivers/infiniband/hw/qib/qib_mad.h | 14 +-
drivers/infiniband/hw/qib/qib_user_sdma.c | 6 +-
drivers/infiniband/hw/qib/qib_verbs.h | 10 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 14 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 24 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 12 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 29 +-
drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 10 +-
drivers/infiniband/ulp/srp/ib_srp.c | 500 +++++++++++++++----
drivers/infiniband/ulp/srp/ib_srp.h | 21 +-
drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 106 ++--
drivers/net/ethernet/mellanox/mlx5/core/debugfs.c | 8 +-
drivers/net/ethernet/mellanox/mlx5/core/eq.c | 2 +-
drivers/net/ethernet/mellanox/mlx5/core/main.c | 35 +-
drivers/net/ethernet/mellanox/mlx5/core/mr.c | 32 +-
.../net/ethernet/mellanox/mlx5/core/pagealloc.c | 196 +++++---
drivers/scsi/scsi_transport_srp.c | 540 ++++++++++++++++++++-
include/linux/mlx5/device.h | 13 +-
include/linux/mlx5/driver.h | 18 +-
include/rdma/ib_verbs.h | 20 +-
include/scsi/scsi_transport_srp.h | 83 +++-
include/uapi/rdma/ib_user_verbs.h | 95 ++--
52 files changed, 1973 insertions(+), 595 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-10-22 17:22 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-10-22 17:22 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
This is the "disable ABI we don't want to freeze" pull I warned you about.
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Disable not-quite-ready userspace ABI for IB flow steering
----------------------------------------------------------------
Yann Droneaud (1):
IB/core: Temporarily disable create_flow/destroy_flow uverbs
drivers/infiniband/Kconfig | 11 +++++++++++
drivers/infiniband/core/uverbs.h | 2 ++
drivers/infiniband/core/uverbs_cmd.c | 4 ++++
drivers/infiniband/core/uverbs_main.c | 6 ++++++
drivers/infiniband/hw/mlx4/main.c | 2 ++
include/uapi/rdma/ib_user_verbs.h | 6 ++++++
6 files changed, 31 insertions(+)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-10-15 0:52 ` Linus Torvalds
@ 2013-10-15 17:48 ` Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-10-15 17:48 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Eli Cohen, linux-rdma, Linux Kernel Mailing List
On Mon, Oct 14, 2013 at 5:52 PM, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
> So get your act together, and push back on the people you are supposed
> to manage. Because this is *not* acceptable for post-rc5, and I'm
> giving this single warning. Next time, I'll just ignore the sh*t you
> send me.
>
> Comprende?
Fair enough. I've been AWOL for a month due to real life / non-kernel
stuff, and I didn't want the Mellanox guys to miss a kernel cycle just
because I couldn't get my act together. So this one is totally on me
-- I know it's late in the cycle and I tried to sneak it in.
I do expect to send one more patch turning off a not-fully-baked new
feature for 3.12, but other than that everything else will wait for
3.13.
- R.
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-10-14 18:16 Roland Dreier
@ 2013-10-15 0:52 ` Linus Torvalds
2013-10-15 17:48 ` Roland Dreier
0 siblings, 1 reply; 223+ messages in thread
From: Linus Torvalds @ 2013-10-15 0:52 UTC (permalink / raw)
To: Roland Dreier, Eli Cohen; +Cc: linux-rdma, Linux Kernel Mailing List
On Mon, Oct 14, 2013 at 11:16 AM, Roland Dreier <roland@kernel.org> wrote:
>
> Last batch of IB changes for 3.12: many mlx5 hardware driver fixes plus
> one trivial semicolon cleanup.
Quite frankly, these mlx5 updates don't look like regression fixes.
They look like "continued development" to me, and seem to be things
that never worked. At least some of them look like performance
enhancements, in fact, not even resembling bugfixes. Others look like
"not a bug, but let's improve random behavior".
I pulled this once, because hardly anybody really cares. But the other
side of that "nobody cares" is that I might as well not have pulled.
If this kind of "continued development" patches keep happening, I'll
just start ignoring pull requests after the merge window.
So get your act together, and push back on the people you are supposed
to manage. Because this is *not* acceptable for post-rc5, and I'm
giving this single warning. Next time, I'll just ignore the sh*t you
send me.
Comprende?
Linus
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-10-14 18:16 Roland Dreier
2013-10-15 0:52 ` Linus Torvalds
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2013-10-14 18:16 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Last batch of IB changes for 3.12: many mlx5 hardware driver fixes plus
one trivial semicolon cleanup.
----------------------------------------------------------------
Eli Cohen (12):
IB/mlx5: Fix send work queue size calculation
mlx5: Remove checksum on command interface commands
IB/mlx5: Decrease memory consumption of mr caches
IB/mlx5: Avoid async events on invalid port number
mlx5: Keep polling to reclaim pages while any returned
mlx5: Fix layout of struct mlx5_init_seg
IB/mlx5: Disable atomic operations
mlx5: Fix opt param mask for sq err to rts transition
IB/mlx5: Fix opt param mask according to firmware spec
mlx5: Fix error code translation from firmware to driver
IB/mlx5: Fix alignment of reg umr gather buffers
IB/mlx5: Ensure proper synchronization accessing memory
Joe Perches (1):
IB: Remove unnecessary semicolons
Moshe Lazer (2):
IB/mlx5: Flush cache workqueue before destroying it
IB/mlx5: Fix memory leak in mlx5_ib_create_srq
Roland Dreier (1):
Merge branch 'misc' into for-next
Sagi Grimberg (1):
IB/mlx5: Fix eq names to display nicely in /proc/interrupts
drivers/infiniband/hw/amso1100/c2_ae.c | 2 +-
drivers/infiniband/hw/mlx5/main.c | 16 +++--
drivers/infiniband/hw/mlx5/mr.c | 70 +++++++++----------
drivers/infiniband/hw/mlx5/qp.c | 80 ++++++++--------------
drivers/infiniband/hw/mlx5/srq.c | 4 +-
drivers/infiniband/hw/mthca/mthca_eq.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 6 +-
drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 28 ++++----
drivers/net/ethernet/mellanox/mlx5/core/eq.c | 4 +-
drivers/net/ethernet/mellanox/mlx5/core/main.c | 21 ++----
.../net/ethernet/mellanox/mlx5/core/pagealloc.c | 16 ++++-
include/linux/mlx5/device.h | 4 +-
include/linux/mlx5/driver.h | 6 +-
15 files changed, 126 insertions(+), 141 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-09-05 16:42 ` Linus Torvalds
@ 2013-09-05 16:43 ` David Miller
0 siblings, 0 replies; 223+ messages in thread
From: David Miller @ 2013-09-05 16:43 UTC (permalink / raw)
To: torvalds; +Cc: sfr, roland, linux-kernel, netdev
From: Linus Torvalds <torvalds@linux-foundation.org>
Date: Thu, 5 Sep 2013 09:42:05 -0700
> On Wed, Sep 4, 2013 at 5:31 PM, Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>>
>> I am carrying the following merge fix patch for a semantic conflict
>> between this tree and Dave's net-next tree:
>
> Ok. I haven't gotten David's pull request yet, and unless I get it
> later today I'll probably forget this.
>
> David, mind reminding me when you do send (or maybe cc'ing Stephen, so
> that he will)?
Sure, I was planning on send out the pull request by the end of today.
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-09-05 0:31 ` Stephen Rothwell
@ 2013-09-05 16:42 ` Linus Torvalds
2013-09-05 16:43 ` David Miller
0 siblings, 1 reply; 223+ messages in thread
From: Linus Torvalds @ 2013-09-05 16:42 UTC (permalink / raw)
To: Stephen Rothwell
Cc: Roland Dreier, Linux Kernel Mailing List, David Miller,
Network Development
On Wed, Sep 4, 2013 at 5:31 PM, Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>
> I am carrying the following merge fix patch for a semantic conflict
> between this tree and Dave's net-next tree:
Ok. I haven't gotten David's pull request yet, and unless I get it
later today I'll probably forget this.
David, mind reminding me when you do send (or maybe cc'ing Stephen, so
that he will)?
Linus
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-09-04 17:03 Roland Dreier
@ 2013-09-05 0:31 ` Stephen Rothwell
2013-09-05 16:42 ` Linus Torvalds
0 siblings, 1 reply; 223+ messages in thread
From: Stephen Rothwell @ 2013-09-05 0:31 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Roland Dreier, linux-kernel, David Miller, netdev
[-- Attachment #1: Type: text/plain, Size: 1671 bytes --]
Hi Linus,
On Wed, 4 Sep 2013 10:03:38 -0700 Roland Dreier <roland@kernel.org> wrote:
>
> Please pull from
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
I am carrying the following merge fix patch for a semantic conflict
between this tree and Dave's net-next tree:
From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Tue, 13 Aug 2013 13:01:49 +1000
Subject: [PATCH] cxgb4: fix up for bond_for_each_slave API change
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 038df4b..b6ad557 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -3982,7 +3982,6 @@ static int cxgb4_inet6addr_handler(struct notifier_block *this,
struct inet6_ifaddr *ifa = data;
struct net_device *event_dev;
int ret = NOTIFY_DONE;
- int cnt;
struct bonding *bond = netdev_priv(ifa->idev->dev);
struct slave *slave;
struct pci_dev *first_pdev = NULL;
@@ -3996,7 +3995,7 @@ static int cxgb4_inet6addr_handler(struct notifier_block *this,
* in all of them only once.
*/
read_lock(&bond->lock);
- bond_for_each_slave(bond, slave, cnt) {
+ bond_for_each_slave(bond, slave) {
if (!first_pdev) {
ret = clip_add(slave->dev, ifa, event);
/* If clip_add is success then only initialize
--
1.8.4.rc0
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-09-04 17:03 Roland Dreier
2013-09-05 0:31 ` Stephen Rothwell
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2013-09-04 17:03 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main batch of InfiniBand/RDMA changes for 3.12 merge window:
- Large ocrdma HW driver update: add "fast register" work requests,
fixes, cleanups
- Add receive flow steering support for raw QPs
- Fix IPoIB neighbour race that leads to crash
- iSER updates including support for using "fast register" memory
registration
- IPv6 support for iWARP
- XRC transport fixes
----------------------------------------------------------------
CQ Tang (1):
IB/qib: Improve SDMA performance
Hadar Hen Zion (3):
IB/core: Add receive flow steering support
IB/core: Export ib_create/destroy_flow through uverbs
IB/mlx4: Add receive flow steering support
Igor Ivanov (1):
IB/core: Infrastructure for extensible uverbs commands
Ira Weiny (1):
IB/qib: Move COUNTER_MASK definition within qib_mad.h header guards
Jim Foraker (1):
IPoIB: Fix race in deleting ipoib_neigh entries
Matan Barak (1):
IB/core: Better checking of userspace values for receive flow steering
Naresh Gottumukkala (19):
RDMA/ocrdma: Style and redundant code cleanup
RDMA/ocrdma: Remove redundant dev reference
RDMA/ocrdma: Don't allow zero/invalid sgid usage
RDMA/ocrdma: Remove driver QP state machine
RDMA/ocrdma: Remove __packed
RDMA/ocrdma: Cache recv DB until QP moved to RTR
RDMA/ocrdma: Create IRD queue fix
RDMA/ocrdma: Add support for fast register work requests (FRWR)
RDMA/ocrdma: Remove the MTU check based on Ethernet MTU
RDMA/ocrdma: Fix to work with even a single MSI-X vector
RDMA/ocrdma: For ERX2 irrespective of Qid, num_posted offset is 24
RDMA/ocrdma: FRMA code cleanup
RDMA/ocrdma: Dont use PD 0 for userpace CQ DB
RDMA/ocrdma: Increase STAG array size
RDMA/ocrdma: Fix for displaying proper link speed
RDMA/ocrdma: Consider multiple SGES in case of DPP
RDMA/ocrdma: Add ABI versioning support
RDMA/ocrdma: Fill PVID in UMC case
RDMA/ocrdma: Fix passing wrong opcode to modify_srq
Or Gerlitz (1):
IB/iser: Use proper debug level value for info prints
Paul Bolle (1):
IB/qib: Make qib_driver static
Roi Dayan (1):
IB/iser: Fix possible memory leak in iser_create_frwr_pool()
Roland Dreier (2):
RDMA/ocrdma: Fix compiler warning about int/pointer size mismatch
Merge branches 'cxgb4', 'flowsteer', 'ipoib', 'iser', 'mlx4', 'ocrdma' and 'qib' into for-next
Sagi Grimberg (5):
IB/iser: Generalize rdma memory registration
IB/iser: Handle unaligned SG in separate function
IB/iser: Place the fmr pool into a union in iser's IB conn struct
IB/iser: Introduce fast memory registration model (FRWR)
IB/iser: Fix redundant pointer check in dealloc flow
Shlomo Pongratz (2):
IB/iser: Restructure allocation/deallocation of connection resources
IB/iser: Accept session->cmds_max from user space
Steve Wise (9):
RDMA/cma: Add IPv6 support for iWARP
RDMA/cxgb4: Use correct bit shift macros for vlan filter tuples
RDMA/cxgb4: Handle newer firmware changes
RDMA/cxgb4: Fix QP flush logic
RDMA/cxgb4: Fix accounting for unsignaled SQ WRs to deal with wrap
RDMA/cxgb4: Set arp error handler for PASS_ACCEPT_RPL messages
RDMA/cxgb4: Always do GTS write if cidx_inc == CIDXINC_MASK
RDMA/cxgb4: Advertise ~0ULL as max MR size
RDMA/cxgb4: Issue RI.FINI before closing when entering TERM
Vipul Pandya (3):
cxgb4: Add routines to create and remove listening IPv6 servers
cxgb4: Add CLIP support to store compressed IPv6 address
RDMA/cxgb4: Add support for active and passive open connection with IPv6 address
Yijing Wang (1):
IB/qib: Clean up unnecessary MSI/MSI-X capability find
Yishai Hadas (3):
mlx4_core: Fix XRC QPs detection in the resource tracker
IB/core: Add locking around event dispatching on XRC target QPs
IB/core: Fixes to XRC reference counting in uverbs
drivers/infiniband/core/cma.c | 44 +-
drivers/infiniband/core/uverbs.h | 4 +
drivers/infiniband/core/uverbs_cmd.c | 250 +++++-
drivers/infiniband/core/uverbs_main.c | 42 +-
drivers/infiniband/core/verbs.c | 30 +
drivers/infiniband/hw/amso1100/c2_ae.c | 18 +-
drivers/infiniband/hw/amso1100/c2_cm.c | 16 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 46 +-
drivers/infiniband/hw/cxgb4/Kconfig | 2 +-
drivers/infiniband/hw/cxgb4/cm.c | 860 ++++++++++++-------
drivers/infiniband/hw/cxgb4/cq.c | 329 +++++---
drivers/infiniband/hw/cxgb4/device.c | 116 ++-
drivers/infiniband/hw/cxgb4/ev.c | 10 -
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 9 +-
drivers/infiniband/hw/cxgb4/qp.c | 41 +-
drivers/infiniband/hw/cxgb4/t4.h | 29 +-
drivers/infiniband/hw/mlx4/main.c | 235 ++++++
drivers/infiniband/hw/mlx4/mlx4_ib.h | 12 +
drivers/infiniband/hw/nes/nes_cm.c | 153 ++--
drivers/infiniband/hw/ocrdma/ocrdma.h | 22 +-
drivers/infiniband/hw/ocrdma/ocrdma_abi.h | 32 +-
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 14 +-
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 458 +++++------
drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 13 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 7 +
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 210 +++--
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 878 ++++++++++++++++----
drivers/infiniband/hw/ocrdma/ocrdma_verbs.h | 6 +
drivers/infiniband/hw/qib/qib.h | 5 +-
drivers/infiniband/hw/qib/qib_common.h | 32 +-
drivers/infiniband/hw/qib/qib_file_ops.c | 2 +-
drivers/infiniband/hw/qib/qib_init.c | 2 +-
drivers/infiniband/hw/qib/qib_mad.h | 3 +-
drivers/infiniband/hw/qib/qib_pcie.c | 10 +-
drivers/infiniband/hw/qib/qib_sdma.c | 8 +-
drivers/infiniband/hw/qib/qib_user_sdma.c | 909 ++++++++++++++++-----
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 3 -
drivers/infiniband/ulp/ipoib/ipoib_main.c | 9 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 19 +-
drivers/infiniband/ulp/iser/iscsi_iser.h | 73 +-
drivers/infiniband/ulp/iser/iser_initiator.c | 139 +++-
drivers/infiniband/ulp/iser/iser_memory.c | 231 +++++-
drivers/infiniband/ulp/iser/iser_verbs.c | 292 +++++--
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 1 +
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 288 ++++++-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 5 +
drivers/net/ethernet/chelsio/cxgb4/t4_msg.h | 17 +-
drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h | 23 +
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 3 +-
include/linux/mlx4/device.h | 5 -
include/rdma/ib_verbs.h | 128 ++-
include/rdma/iw_cm.h | 8 +-
include/uapi/rdma/ib_user_verbs.h | 99 ++-
53 files changed, 4643 insertions(+), 1557 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-08-02 16:12 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-08-02 16:12 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA fixes for 3.11-rc:
- Fixes for the newly merged mlx5 hardware driver
- Stack info leak fixes from Dan Carpenter
- Fixes for pkey table handling with SR-IOV
- A few other small things
----------------------------------------------------------------
Andi Shyti (1):
mlx5_core: Variable may be used uninitialized
Dan Carpenter (6):
RDMA/cxgb4: Fix stack info leak in c4iw_create_qp()
RDMA/ocrdma: Fix several stack info leaks
RDMA/nes: Fix info leaks in nes_create_qp() and nes_create_cq()
RDMA/cxgb3: Fix stack info leak in iwch_create_cq()
IB/mlx5: Fix stack info leak in mlx5_ib_alloc_ucontext()
mlx5_core: Fix use after free in mlx5_cmd_comp_handler()
Eli Cohen (1):
mlx5_core: Implement new initialization sequence
Erez Shitrit (1):
IPoIB: Fix pkey change flow for virtualization environments
Jack Morgenstein (2):
IB/mlx4: Use default pkey when creating tunnel QPs
IB/core: Create QP1 using the pkey index which contains the default pkey
Mike Marciniszyn (1):
IB/qib: Add err_decode() call for ring dump
Or Gerlitz (1):
IPoIB: Make sure child devices use valid/proper pkeys
Paul Bolle (1):
RDMA/cma: Fix gcc warning
Roland Dreier (3):
RDMA/ocrdma: Remove unused include
Revert "RDMA/nes: Fix compilation error when nes_debug is enabled"
Merge branches 'cma', 'cxgb3', 'cxgb4', 'ipoib', 'misc', 'mlx4', 'mlx5', 'nes', 'ocrdma' and 'qib' into for-next
Sean Hefty (2):
RDMA/cma: Fix accessing invalid private data for UD
RDMA/cma: Only call cma_save_ib_info() for CM REQs
Wei Yongjun (1):
IB/mlx5: Fix error return code in init_one()
drivers/infiniband/core/cma.c | 29 +++++----
drivers/infiniband/core/mad.c | 8 ++-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 1 +
drivers/infiniband/hw/cxgb4/qp.c | 2 +
drivers/infiniband/hw/mlx4/mad.c | 10 ++-
drivers/infiniband/hw/mlx5/main.c | 11 ++--
drivers/infiniband/hw/mlx5/qp.c | 2 +-
drivers/infiniband/hw/nes/nes_hw.c | 4 +-
drivers/infiniband/hw/nes/nes_verbs.c | 3 +-
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 1 -
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 5 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 2 +
drivers/infiniband/hw/qib/qib_sdma.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 76 ++++++++++++++++++----
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 9 +++
drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 19 ++++--
drivers/net/ethernet/mellanox/mlx5/core/main.c | 69 ++++++++++++++++++--
.../net/ethernet/mellanox/mlx5/core/pagealloc.c | 20 ++++--
include/linux/mlx5/device.h | 20 ++++++
include/linux/mlx5/driver.h | 4 +-
21 files changed, 239 insertions(+), 60 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-07-11 23:52 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-07-11 23:52 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main (updated) batch of InfiniBand/RDMA changes for 3.11 merge window:
- AF_IB (native IB addressing) for CMA from Sean Hefty
- New mlx5 driver for Mellanox Connect-IB adapters (including post merge request fixes)
- SRP fixes from Bart Van Assche (including fix to first merge request)
- qib HW driver updates
- Resurrection of ocrdma HW driver development
- uverbs conversion to create fds with O_CLOEXEC set
- Other small changes and fixes
----------------------------------------------------------------
Bart Van Assche (6):
IB/srp: Avoid skipping srp_reset_host() after a transport error
IB/srp: Skip host settle delay
IB/srp: Fail I/O fast if target offline
IB/srp: Maintain a single connection per I_T nexus
IB/srp: Make HCA completion vector configurable
IB/srp: Let srp_abort() return FAST_IO_FAIL if TL offline
Dan Carpenter (2):
RDMA/cxgb3: Timeout condition is never true
mlx5: Return -EFAULT instead of -EPERM
Dean Luick (1):
IB/qib: Log all SDMA errors unconditionally
Dotan Barak (1):
IB/srp: Fix remove_one crash due to resource exhaustion
Eli Cohen (1):
mlx5: Add driver for Mellanox Connect-IB adapters
Gottumukkala, Naresh (1):
RDMA/ocrdma: Remove use_cnt for queues
Jack Morgenstein (1):
IB/core: Add reserved values to enums for low-level driver use
Mike Marciniszyn (7):
IB/qib: Add DCA support
IB/qib: Remove atomic_inc_not_zero() from QP RCU
IB/qib: Optimize CQ callbacks
IB/qib: Convert opcode counters to per-context
IB/qib: Add per-context stats interface
IB/qib: Add qp_stats debug file
IB/qib: Fix module-level leak
Mitko Haralanov (1):
IB/qib: New transmitter tunning settings for Dell 1.1 backplane
Moshe Lazer (1):
mlx5_core: Adjust hca_cap.uar_page_sz to conform to Connect-IB spec
Naresh Gottumukkala (5):
RDMA/ocrdma: Use MCC_CREATE_EXT_V1 for MCC create
RDMA/ocrdma: Replace ocrdma_err with pr_err
RDMA/ocrdma: Set bad_wr in error case
RDMA/ocrdma: Change macros to inline funtions
RDMA/ocrdma: Reorg structures to avoid padding
Ramkrishna Vepa (2):
IB/qib: Add optional NUMA affinity
IB/qib: Add dual-rail NUMA awareness for PSM processes
Roland Dreier (6):
mlx5: Fix parameter type of health_handler_t
IB/mlx5: Make profile[] static in main.c
mlx5_core: Fixes for sparse warnings
IB/uverbs: Use get_unused_fd_flags(O_CLOEXEC) instead of get_unused_fd()
Merge branches 'af_ib', 'cxgb4', 'misc', 'mlx5', 'ocrdma', 'qib' and 'srp' into for-next
Merge branches 'mlx5', 'qib' and 'srp' into for-next
Sean Hefty (28):
RDMA/cma: Define native IB address
RDMA/cma: Allow enabling reuseaddr in any state
RDMA/cma: Include AF_IB in loopback and any address checks
IB/addr: Add AF_IB support to ip_addr_size
RDMA/cma: Update port reservation to support AF_IB
RDMA/cma: Allow user to specify AF_IB when binding
RDMA/cma: Do not modify sa_family when setting loopback address
RDMA/cma: Add helper functions to return id address information
RDMA/cma: Restrict AF_IB loopback to binding to IB devices only
RDMA/cma: Verify that source and dest sa_family are the same
RDMA/cma: Add support for AF_IB to rdma_resolve_addr()
RDMA/cma: Add support for AF_IB to rdma_resolve_route()
RDMA/cma: Add support for AF_IB to cma_get_service_id()
RDMA/cma: Remove unused SDP related code
RDMA/cma: Merge cma_get/save_net_info
RDMA/cma: Expose private data when using AF_IB
RDMA/cma: Set qkey for AF_IB
RDMA/cma: Only listen on IB devices when using AF_IB
RDMA/ucma: Support querying for AF_IB addresses
IB/sa: Export function to pack a path record into wire format
RDMA/ucma: Support querying when IB paths are not reversible
RDMA/cma: Export cma_get_service_id()
RDMA/ucma: Add ability to query GID addresses
RDMA/ucma: Name changes to indicate only IP addresses supported
RDMA/ucma: Allow user space to bind to AF_IB
RDMA/ucma: Allow user space to pass AF_IB into resolve
RDMA/ucma: Allow user space to specify AF_IB when joining multicast
RDMA/cma: Export AF_IB statistics
Vinit Agnihotri (1):
IB/qib: Update minor version number
Vu Pham (1):
IB/srp: Bump driver version and release date
Wei Yongjun (3):
IB/ehca: Fix error return code in ehca_create_slab_caches()
RDMA/ocrdma: Fix error return code in ocrdma_set_create_qp_rq_cmd()
IB/core: Fix error return code in add_port()
Documentation/ABI/stable/sysfs-driver-ib_srp | 7 +
MAINTAINERS | 22 +
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/addr.c | 20 +-
drivers/infiniband/core/cma.c | 906 ++++---
drivers/infiniband/core/sa_query.c | 6 +
drivers/infiniband/core/sysfs.c | 8 +-
drivers/infiniband/core/ucma.c | 321 ++-
drivers/infiniband/core/uverbs_cmd.c | 4 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 3 +-
drivers/infiniband/hw/ehca/ehca_main.c | 1 +
drivers/infiniband/hw/mlx5/Kconfig | 10 +
drivers/infiniband/hw/mlx5/Makefile | 3 +
drivers/infiniband/hw/mlx5/ah.c | 92 +
drivers/infiniband/hw/mlx5/cq.c | 843 +++++++
drivers/infiniband/hw/mlx5/doorbell.c | 100 +
drivers/infiniband/hw/mlx5/mad.c | 139 ++
drivers/infiniband/hw/mlx5/main.c | 1504 ++++++++++++
drivers/infiniband/hw/mlx5/mem.c | 162 ++
drivers/infiniband/hw/mlx5/mlx5_ib.h | 545 +++++
drivers/infiniband/hw/mlx5/mr.c | 1007 ++++++++
drivers/infiniband/hw/mlx5/qp.c | 2524 ++++++++++++++++++++
drivers/infiniband/hw/mlx5/srq.c | 473 ++++
drivers/infiniband/hw/mlx5/user.h | 121 +
drivers/infiniband/hw/ocrdma/ocrdma.h | 63 +-
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 86 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 35 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 135 +-
drivers/infiniband/hw/qib/Kconfig | 8 +
drivers/infiniband/hw/qib/Makefile | 1 +
drivers/infiniband/hw/qib/qib.h | 63 +-
drivers/infiniband/hw/qib/qib_common.h | 2 +-
drivers/infiniband/hw/qib/qib_cq.c | 67 +-
drivers/infiniband/hw/qib/qib_debugfs.c | 283 +++
drivers/infiniband/hw/qib/qib_debugfs.h | 45 +
drivers/infiniband/hw/qib/qib_driver.c | 1 -
drivers/infiniband/hw/qib/qib_file_ops.c | 176 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 10 +
drivers/infiniband/hw/qib/qib_iba7220.c | 10 +
drivers/infiniband/hw/qib/qib_iba7322.c | 507 +++-
drivers/infiniband/hw/qib/qib_init.c | 145 +-
drivers/infiniband/hw/qib/qib_qp.c | 123 +-
drivers/infiniband/hw/qib/qib_sdma.c | 56 +
drivers/infiniband/hw/qib/qib_verbs.c | 8 +-
drivers/infiniband/hw/qib/qib_verbs.h | 33 +-
drivers/infiniband/ulp/srp/ib_srp.c | 89 +-
drivers/infiniband/ulp/srp/ib_srp.h | 1 +
drivers/net/ethernet/mellanox/Kconfig | 1 +
drivers/net/ethernet/mellanox/Makefile | 1 +
drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 18 +
drivers/net/ethernet/mellanox/mlx5/core/Makefile | 5 +
drivers/net/ethernet/mellanox/mlx5/core/alloc.c | 238 ++
drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 1515 ++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/cq.c | 224 ++
drivers/net/ethernet/mellanox/mlx5/core/debugfs.c | 583 +++++
drivers/net/ethernet/mellanox/mlx5/core/eq.c | 521 ++++
drivers/net/ethernet/mellanox/mlx5/core/fw.c | 185 ++
drivers/net/ethernet/mellanox/mlx5/core/health.c | 227 ++
drivers/net/ethernet/mellanox/mlx5/core/mad.c | 78 +
drivers/net/ethernet/mellanox/mlx5/core/main.c | 475 ++++
drivers/net/ethernet/mellanox/mlx5/core/mcg.c | 106 +
.../net/ethernet/mellanox/mlx5/core/mlx5_core.h | 73 +
drivers/net/ethernet/mellanox/mlx5/core/mr.c | 136 ++
.../net/ethernet/mellanox/mlx5/core/pagealloc.c | 435 ++++
drivers/net/ethernet/mellanox/mlx5/core/pd.c | 101 +
drivers/net/ethernet/mellanox/mlx5/core/port.c | 104 +
drivers/net/ethernet/mellanox/mlx5/core/qp.c | 301 +++
drivers/net/ethernet/mellanox/mlx5/core/srq.c | 223 ++
drivers/net/ethernet/mellanox/mlx5/core/uar.c | 223 ++
include/linux/mlx5/cmd.h | 51 +
include/linux/mlx5/cq.h | 165 ++
include/linux/mlx5/device.h | 893 +++++++
include/linux/mlx5/doorbell.h | 79 +
include/linux/mlx5/driver.h | 769 ++++++
include/linux/mlx5/qp.h | 467 ++++
include/linux/mlx5/srq.h | 41 +
include/linux/socket.h | 2 +
include/rdma/ib.h | 89 +
include/rdma/ib_addr.h | 6 +-
include/rdma/ib_sa.h | 7 +
include/rdma/ib_verbs.h | 35 +-
include/rdma/rdma_cm.h | 13 +
include/uapi/rdma/rdma_user_cm.h | 73 +-
85 files changed, 18436 insertions(+), 803 deletions(-)
create mode 100644 drivers/infiniband/hw/mlx5/Kconfig
create mode 100644 drivers/infiniband/hw/mlx5/Makefile
create mode 100644 drivers/infiniband/hw/mlx5/ah.c
create mode 100644 drivers/infiniband/hw/mlx5/cq.c
create mode 100644 drivers/infiniband/hw/mlx5/doorbell.c
create mode 100644 drivers/infiniband/hw/mlx5/mad.c
create mode 100644 drivers/infiniband/hw/mlx5/main.c
create mode 100644 drivers/infiniband/hw/mlx5/mem.c
create mode 100644 drivers/infiniband/hw/mlx5/mlx5_ib.h
create mode 100644 drivers/infiniband/hw/mlx5/mr.c
create mode 100644 drivers/infiniband/hw/mlx5/qp.c
create mode 100644 drivers/infiniband/hw/mlx5/srq.c
create mode 100644 drivers/infiniband/hw/mlx5/user.h
create mode 100644 drivers/infiniband/hw/qib/qib_debugfs.c
create mode 100644 drivers/infiniband/hw/qib/qib_debugfs.h
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/Kconfig
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/Makefile
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/alloc.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/cmd.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/cq.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/eq.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/fw.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/health.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mad.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/main.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mcg.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mr.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/pd.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/port.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/qp.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/srq.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/uar.c
create mode 100644 include/linux/mlx5/cmd.h
create mode 100644 include/linux/mlx5/cq.h
create mode 100644 include/linux/mlx5/device.h
create mode 100644 include/linux/mlx5/doorbell.h
create mode 100644 include/linux/mlx5/driver.h
create mode 100644 include/linux/mlx5/qp.h
create mode 100644 include/linux/mlx5/srq.h
create mode 100644 include/rdma/ib.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-07-10 14:38 ` Roland Dreier
@ 2013-07-10 15:34 ` Bart Van Assche
0 siblings, 0 replies; 223+ messages in thread
From: Bart Van Assche @ 2013-07-10 15:34 UTC (permalink / raw)
To: Roland Dreier; +Cc: Sebastian Riemer, Linus Torvalds, linux-kernel, linux-rdma
On 07/10/13 16:38, Roland Dreier wrote:
> On Wed, Jul 10, 2013 at 7:35 AM, Sebastian Riemer
> <sebastian.riemer@profitbricks.com> wrote:
>>
>> I've checked the commits on that tag and the following commit is not
>> what we've agreed on:
>
> Sorry about that. The discussion was long and complex and I probably
> made a mistake in aplying the patches. Please me send a patch to fix
> the driver to what it should be, and I will merge it ASAP.
I will send such a patch in reply to this e-mail but without CC-ing the
LKML. Sebastian, if you could review that patch, that would be appreciated.
Bart.
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-07-10 14:35 ` Sebastian Riemer
@ 2013-07-10 14:38 ` Roland Dreier
2013-07-10 15:34 ` Bart Van Assche
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2013-07-10 14:38 UTC (permalink / raw)
To: Sebastian Riemer; +Cc: Linus Torvalds, linux-kernel, linux-rdma
On Wed, Jul 10, 2013 at 7:35 AM, Sebastian Riemer
<sebastian.riemer@profitbricks.com> wrote:
>
> I've checked the commits on that tag and the following commit is not
> what we've agreed on:
Sorry about that. The discussion was long and complex and I probably
made a mistake in aplying the patches. Please me send a patch to fix
the driver to what it should be, and I will merge it ASAP.
- Roland
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2013-07-09 17:36 Roland Dreier
@ 2013-07-10 14:35 ` Sebastian Riemer
2013-07-10 14:38 ` Roland Dreier
0 siblings, 1 reply; 223+ messages in thread
From: Sebastian Riemer @ 2013-07-10 14:35 UTC (permalink / raw)
To: Roland Dreier; +Cc: Linus Torvalds, linux-kernel, linux-rdma
Hi Roland,
I've checked the commits on that tag and the following commit is not
what we've agreed on:
commit 086f44f58855ae18bab19fb794cce6c6d2c6143b
Author: Bart Van Assche <bvanassche@acm.org>
IB/srp: Avoid skipping srp_reset_host() after a transport error
Together with the following commit this results in the wrong return code
if transport_offline (SUCCESS instead of FAST_IO_FAIL):
commit 99e1c1398f44a056b16e78122133988c82b66d97
Author: Bart Van Assche <bvanassche@acm.org>
IB/srp: Fail I/O fast if target offline
Resulting code:
1755 if (srp_send_tsk_mgmt(target, req->index, scmnd->device->lun,
1756 SRP_TSK_ABORT_TASK) == 0 ||
1757 target->transport_offline)
1758 ret = SUCCESS;
1759 else if (target->transport_offline)
1760 ret = FAST_IO_FAIL;
1761 else
1762 ret = FAILED;
This doesn't make sense. The check for transport_offline has to be
removed for the SUCCESS case! I've already told that on linux-rdma.
Cheers,
Sebastian
On 09.07.2013 19:36, Roland Dreier wrote:
> Hi Linus,
>
> Please pull from
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
>
> ----------------------------------------------------------------
>
> Main batch of InfiniBand/RDMA changes for 3.11 merge window:
>
> - AF_IB (native IB addressing) for CMA from Sean Hefty
> - New mlx5 driver for Mellanox Connect-IB adapters
> - SRP fixes from Bart Van Assche
> - qib HW driver updates
> - Resurrection of ocrdma HW driver development
> - uverbs conversion to create fds with O_CLOEXEC set
> - Other small changes and fixes
>
> ----------------------------------------------------------------
> Bart Van Assche (5):
> IB/srp: Avoid skipping srp_reset_host() after a transport error
> IB/srp: Skip host settle delay
> IB/srp: Fail I/O fast if target offline
> IB/srp: Maintain a single connection per I_T nexus
> IB/srp: Make HCA completion vector configurable
>
> Dan Carpenter (1):
> RDMA/cxgb3: Timeout condition is never true
>
> Dotan Barak (1):
> IB/srp: Fix remove_one crash due to resource exhaustion
>
> Eli Cohen (1):
> mlx5: Add driver for Mellanox Connect-IB adapters
>
> Gottumukkala, Naresh (1):
> RDMA/ocrdma: Remove use_cnt for queues
>
> Jack Morgenstein (1):
> IB/core: Add reserved values to enums for low-level driver use
>
> Mike Marciniszyn (6):
> IB/qib: Add DCA support
> IB/qib: Remove atomic_inc_not_zero() from QP RCU
> IB/qib: Optimize CQ callbacks
> IB/qib: Convert opcode counters to per-context
> IB/qib: Add per-context stats interface
> IB/qib: Add qp_stats debug file
>
> Mitko Haralanov (1):
> IB/qib: New transmitter tunning settings for Dell 1.1 backplane
>
> Naresh Gottumukkala (5):
> RDMA/ocrdma: Use MCC_CREATE_EXT_V1 for MCC create
> RDMA/ocrdma: Replace ocrdma_err with pr_err
> RDMA/ocrdma: Set bad_wr in error case
> RDMA/ocrdma: Change macros to inline funtions
> RDMA/ocrdma: Reorg structures to avoid padding
>
> Ramkrishna Vepa (2):
> IB/qib: Add optional NUMA affinity
> IB/qib: Add dual-rail NUMA awareness for PSM processes
>
> Roland Dreier (5):
> mlx5: Fix parameter type of health_handler_t
> IB/mlx5: Make profile[] static in main.c
> mlx5_core: Fixes for sparse warnings
> IB/uverbs: Use get_unused_fd_flags(O_CLOEXEC) instead of get_unused_fd()
> Merge branches 'af_ib', 'cxgb4', 'misc', 'mlx5', 'ocrdma', 'qib' and 'srp' into for-next
>
> Sean Hefty (28):
> RDMA/cma: Define native IB address
> RDMA/cma: Allow enabling reuseaddr in any state
> RDMA/cma: Include AF_IB in loopback and any address checks
> IB/addr: Add AF_IB support to ip_addr_size
> RDMA/cma: Update port reservation to support AF_IB
> RDMA/cma: Allow user to specify AF_IB when binding
> RDMA/cma: Do not modify sa_family when setting loopback address
> RDMA/cma: Add helper functions to return id address information
> RDMA/cma: Restrict AF_IB loopback to binding to IB devices only
> RDMA/cma: Verify that source and dest sa_family are the same
> RDMA/cma: Add support for AF_IB to rdma_resolve_addr()
> RDMA/cma: Add support for AF_IB to rdma_resolve_route()
> RDMA/cma: Add support for AF_IB to cma_get_service_id()
> RDMA/cma: Remove unused SDP related code
> RDMA/cma: Merge cma_get/save_net_info
> RDMA/cma: Expose private data when using AF_IB
> RDMA/cma: Set qkey for AF_IB
> RDMA/cma: Only listen on IB devices when using AF_IB
> RDMA/ucma: Support querying for AF_IB addresses
> IB/sa: Export function to pack a path record into wire format
> RDMA/ucma: Support querying when IB paths are not reversible
> RDMA/cma: Export cma_get_service_id()
> RDMA/ucma: Add ability to query GID addresses
> RDMA/ucma: Name changes to indicate only IP addresses supported
> RDMA/ucma: Allow user space to bind to AF_IB
> RDMA/ucma: Allow user space to pass AF_IB into resolve
> RDMA/ucma: Allow user space to specify AF_IB when joining multicast
> RDMA/cma: Export AF_IB statistics
>
> Vinit Agnihotri (1):
> IB/qib: Update minor version number
>
> Vu Pham (1):
> IB/srp: Bump driver version and release date
>
> Wei Yongjun (3):
> IB/ehca: Fix error return code in ehca_create_slab_caches()
> RDMA/ocrdma: Fix error return code in ocrdma_set_create_qp_rq_cmd()
> IB/core: Fix error return code in add_port()
>
> Documentation/ABI/stable/sysfs-driver-ib_srp | 7 +
> MAINTAINERS | 22 ++
> drivers/infiniband/Kconfig | 1 +
> drivers/infiniband/Makefile | 1 +
> drivers/infiniband/core/addr.c | 20 +-
> drivers/infiniband/core/cma.c | 906 ++++++++++++++++++++++++++++++++++-------------------------
> drivers/infiniband/core/sa_query.c | 6 +
> drivers/infiniband/core/sysfs.c | 8 +-
> drivers/infiniband/core/ucma.c | 321 ++++++++++++++++++---
> drivers/infiniband/core/uverbs_cmd.c | 4 +-
> drivers/infiniband/hw/cxgb3/iwch_qp.c | 3 +-
> drivers/infiniband/hw/ehca/ehca_main.c | 1 +
> drivers/infiniband/hw/mlx5/Kconfig | 10 +
> drivers/infiniband/hw/mlx5/Makefile | 3 +
> drivers/infiniband/hw/mlx5/ah.c | 92 ++++++
> drivers/infiniband/hw/mlx5/cq.c | 843 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> drivers/infiniband/hw/mlx5/doorbell.c | 100 +++++++
> drivers/infiniband/hw/mlx5/mad.c | 139 +++++++++
> drivers/infiniband/hw/mlx5/main.c | 1504 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> drivers/infiniband/hw/mlx5/mem.c | 162 +++++++++++
> drivers/infiniband/hw/mlx5/mlx5_ib.h | 545 +++++++++++++++++++++++++++++++++++
> drivers/infiniband/hw/mlx5/mr.c | 1007 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> drivers/infiniband/hw/mlx5/qp.c | 2524 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> drivers/infiniband/hw/mlx5/srq.c | 473 +++++++++++++++++++++++++++++++
> drivers/infiniband/hw/mlx5/user.h | 121 ++++++++
> drivers/infiniband/hw/ocrdma/ocrdma.h | 63 +++--
> drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 86 +++---
> drivers/infiniband/hw/ocrdma/ocrdma_main.c | 6 +-
> drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 35 +--
> drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 135 ++++-----
> drivers/infiniband/hw/qib/Kconfig | 8 +
> drivers/infiniband/hw/qib/Makefile | 1 +
> drivers/infiniband/hw/qib/qib.h | 61 ++--
> drivers/infiniband/hw/qib/qib_common.h | 2 +-
> drivers/infiniband/hw/qib/qib_cq.c | 67 ++++-
> drivers/infiniband/hw/qib/qib_debugfs.c | 283 +++++++++++++++++++
> drivers/infiniband/hw/qib/qib_debugfs.h | 45 +++
> drivers/infiniband/hw/qib/qib_driver.c | 1 -
> drivers/infiniband/hw/qib/qib_file_ops.c | 176 ++++++++----
> drivers/infiniband/hw/qib/qib_iba6120.c | 10 +
> drivers/infiniband/hw/qib/qib_iba7220.c | 10 +
> drivers/infiniband/hw/qib/qib_iba7322.c | 393 +++++++++++++++++++++++---
> drivers/infiniband/hw/qib/qib_init.c | 139 +++++++--
> drivers/infiniband/hw/qib/qib_qp.c | 123 +++++++-
> drivers/infiniband/hw/qib/qib_verbs.c | 8 +-
> drivers/infiniband/hw/qib/qib_verbs.h | 33 ++-
> drivers/infiniband/ulp/srp/ib_srp.c | 90 +++++-
> drivers/infiniband/ulp/srp/ib_srp.h | 1 +
> drivers/net/ethernet/mellanox/Kconfig | 1 +
> drivers/net/ethernet/mellanox/Makefile | 1 +
> drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 18 ++
> drivers/net/ethernet/mellanox/mlx5/core/Makefile | 5 +
> drivers/net/ethernet/mellanox/mlx5/core/alloc.c | 238 ++++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 1515 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/cq.c | 224 +++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/debugfs.c | 587 ++++++++++++++++++++++++++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/eq.c | 521 ++++++++++++++++++++++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/fw.c | 185 ++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/health.c | 227 +++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/mad.c | 78 ++++++
> drivers/net/ethernet/mellanox/mlx5/core/main.c | 475 +++++++++++++++++++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/mcg.c | 106 +++++++
> drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h | 73 +++++
> drivers/net/ethernet/mellanox/mlx5/core/mr.c | 136 +++++++++
> drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c | 435 ++++++++++++++++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/pd.c | 101 +++++++
> drivers/net/ethernet/mellanox/mlx5/core/port.c | 104 +++++++
> drivers/net/ethernet/mellanox/mlx5/core/qp.c | 301 ++++++++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/srq.c | 223 +++++++++++++++
> drivers/net/ethernet/mellanox/mlx5/core/uar.c | 223 +++++++++++++++
> include/linux/mlx5/cmd.h | 51 ++++
> include/linux/mlx5/cq.h | 165 +++++++++++
> include/linux/mlx5/device.h | 893 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/mlx5/doorbell.h | 79 ++++++
> include/linux/mlx5/driver.h | 769 ++++++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/mlx5/qp.h | 467 ++++++++++++++++++++++++++++++
> include/linux/mlx5/srq.h | 41 +++
> include/linux/socket.h | 2 +
> include/rdma/ib.h | 89 ++++++
> include/rdma/ib_addr.h | 6 +-
> include/rdma/ib_sa.h | 7 +
> include/rdma/ib_verbs.h | 35 ++-
> include/rdma/rdma_cm.h | 13 +
> include/uapi/rdma/rdma_user_cm.h | 73 ++++-
> 84 files changed, 18267 insertions(+), 799 deletions(-)
> create mode 100644 drivers/infiniband/hw/mlx5/Kconfig
> create mode 100644 drivers/infiniband/hw/mlx5/Makefile
> create mode 100644 drivers/infiniband/hw/mlx5/ah.c
> create mode 100644 drivers/infiniband/hw/mlx5/cq.c
> create mode 100644 drivers/infiniband/hw/mlx5/doorbell.c
> create mode 100644 drivers/infiniband/hw/mlx5/mad.c
> create mode 100644 drivers/infiniband/hw/mlx5/main.c
> create mode 100644 drivers/infiniband/hw/mlx5/mem.c
> create mode 100644 drivers/infiniband/hw/mlx5/mlx5_ib.h
> create mode 100644 drivers/infiniband/hw/mlx5/mr.c
> create mode 100644 drivers/infiniband/hw/mlx5/qp.c
> create mode 100644 drivers/infiniband/hw/mlx5/srq.c
> create mode 100644 drivers/infiniband/hw/mlx5/user.h
> create mode 100644 drivers/infiniband/hw/qib/qib_debugfs.c
> create mode 100644 drivers/infiniband/hw/qib/qib_debugfs.h
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/Kconfig
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/Makefile
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/alloc.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/cmd.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/cq.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/eq.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/fw.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/health.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mad.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/main.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mcg.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mr.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/pd.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/port.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/qp.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/srq.c
> create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/uar.c
> create mode 100644 include/linux/mlx5/cmd.h
> create mode 100644 include/linux/mlx5/cq.h
> create mode 100644 include/linux/mlx5/device.h
> create mode 100644 include/linux/mlx5/doorbell.h
> create mode 100644 include/linux/mlx5/driver.h
> create mode 100644 include/linux/mlx5/qp.h
> create mode 100644 include/linux/mlx5/srq.h
> create mode 100644 include/rdma/ib.h
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-07-09 17:36 Roland Dreier
2013-07-10 14:35 ` Sebastian Riemer
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2013-07-09 17:36 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main batch of InfiniBand/RDMA changes for 3.11 merge window:
- AF_IB (native IB addressing) for CMA from Sean Hefty
- New mlx5 driver for Mellanox Connect-IB adapters
- SRP fixes from Bart Van Assche
- qib HW driver updates
- Resurrection of ocrdma HW driver development
- uverbs conversion to create fds with O_CLOEXEC set
- Other small changes and fixes
----------------------------------------------------------------
Bart Van Assche (5):
IB/srp: Avoid skipping srp_reset_host() after a transport error
IB/srp: Skip host settle delay
IB/srp: Fail I/O fast if target offline
IB/srp: Maintain a single connection per I_T nexus
IB/srp: Make HCA completion vector configurable
Dan Carpenter (1):
RDMA/cxgb3: Timeout condition is never true
Dotan Barak (1):
IB/srp: Fix remove_one crash due to resource exhaustion
Eli Cohen (1):
mlx5: Add driver for Mellanox Connect-IB adapters
Gottumukkala, Naresh (1):
RDMA/ocrdma: Remove use_cnt for queues
Jack Morgenstein (1):
IB/core: Add reserved values to enums for low-level driver use
Mike Marciniszyn (6):
IB/qib: Add DCA support
IB/qib: Remove atomic_inc_not_zero() from QP RCU
IB/qib: Optimize CQ callbacks
IB/qib: Convert opcode counters to per-context
IB/qib: Add per-context stats interface
IB/qib: Add qp_stats debug file
Mitko Haralanov (1):
IB/qib: New transmitter tunning settings for Dell 1.1 backplane
Naresh Gottumukkala (5):
RDMA/ocrdma: Use MCC_CREATE_EXT_V1 for MCC create
RDMA/ocrdma: Replace ocrdma_err with pr_err
RDMA/ocrdma: Set bad_wr in error case
RDMA/ocrdma: Change macros to inline funtions
RDMA/ocrdma: Reorg structures to avoid padding
Ramkrishna Vepa (2):
IB/qib: Add optional NUMA affinity
IB/qib: Add dual-rail NUMA awareness for PSM processes
Roland Dreier (5):
mlx5: Fix parameter type of health_handler_t
IB/mlx5: Make profile[] static in main.c
mlx5_core: Fixes for sparse warnings
IB/uverbs: Use get_unused_fd_flags(O_CLOEXEC) instead of get_unused_fd()
Merge branches 'af_ib', 'cxgb4', 'misc', 'mlx5', 'ocrdma', 'qib' and 'srp' into for-next
Sean Hefty (28):
RDMA/cma: Define native IB address
RDMA/cma: Allow enabling reuseaddr in any state
RDMA/cma: Include AF_IB in loopback and any address checks
IB/addr: Add AF_IB support to ip_addr_size
RDMA/cma: Update port reservation to support AF_IB
RDMA/cma: Allow user to specify AF_IB when binding
RDMA/cma: Do not modify sa_family when setting loopback address
RDMA/cma: Add helper functions to return id address information
RDMA/cma: Restrict AF_IB loopback to binding to IB devices only
RDMA/cma: Verify that source and dest sa_family are the same
RDMA/cma: Add support for AF_IB to rdma_resolve_addr()
RDMA/cma: Add support for AF_IB to rdma_resolve_route()
RDMA/cma: Add support for AF_IB to cma_get_service_id()
RDMA/cma: Remove unused SDP related code
RDMA/cma: Merge cma_get/save_net_info
RDMA/cma: Expose private data when using AF_IB
RDMA/cma: Set qkey for AF_IB
RDMA/cma: Only listen on IB devices when using AF_IB
RDMA/ucma: Support querying for AF_IB addresses
IB/sa: Export function to pack a path record into wire format
RDMA/ucma: Support querying when IB paths are not reversible
RDMA/cma: Export cma_get_service_id()
RDMA/ucma: Add ability to query GID addresses
RDMA/ucma: Name changes to indicate only IP addresses supported
RDMA/ucma: Allow user space to bind to AF_IB
RDMA/ucma: Allow user space to pass AF_IB into resolve
RDMA/ucma: Allow user space to specify AF_IB when joining multicast
RDMA/cma: Export AF_IB statistics
Vinit Agnihotri (1):
IB/qib: Update minor version number
Vu Pham (1):
IB/srp: Bump driver version and release date
Wei Yongjun (3):
IB/ehca: Fix error return code in ehca_create_slab_caches()
RDMA/ocrdma: Fix error return code in ocrdma_set_create_qp_rq_cmd()
IB/core: Fix error return code in add_port()
Documentation/ABI/stable/sysfs-driver-ib_srp | 7 +
MAINTAINERS | 22 ++
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/addr.c | 20 +-
drivers/infiniband/core/cma.c | 906 ++++++++++++++++++++++++++++++++++-------------------------
drivers/infiniband/core/sa_query.c | 6 +
drivers/infiniband/core/sysfs.c | 8 +-
drivers/infiniband/core/ucma.c | 321 ++++++++++++++++++---
drivers/infiniband/core/uverbs_cmd.c | 4 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 3 +-
drivers/infiniband/hw/ehca/ehca_main.c | 1 +
drivers/infiniband/hw/mlx5/Kconfig | 10 +
drivers/infiniband/hw/mlx5/Makefile | 3 +
drivers/infiniband/hw/mlx5/ah.c | 92 ++++++
drivers/infiniband/hw/mlx5/cq.c | 843 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
drivers/infiniband/hw/mlx5/doorbell.c | 100 +++++++
drivers/infiniband/hw/mlx5/mad.c | 139 +++++++++
drivers/infiniband/hw/mlx5/main.c | 1504 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
drivers/infiniband/hw/mlx5/mem.c | 162 +++++++++++
drivers/infiniband/hw/mlx5/mlx5_ib.h | 545 +++++++++++++++++++++++++++++++++++
drivers/infiniband/hw/mlx5/mr.c | 1007 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
drivers/infiniband/hw/mlx5/qp.c | 2524 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
drivers/infiniband/hw/mlx5/srq.c | 473 +++++++++++++++++++++++++++++++
drivers/infiniband/hw/mlx5/user.h | 121 ++++++++
drivers/infiniband/hw/ocrdma/ocrdma.h | 63 +++--
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 86 +++---
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 35 +--
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 135 ++++-----
drivers/infiniband/hw/qib/Kconfig | 8 +
drivers/infiniband/hw/qib/Makefile | 1 +
drivers/infiniband/hw/qib/qib.h | 61 ++--
drivers/infiniband/hw/qib/qib_common.h | 2 +-
drivers/infiniband/hw/qib/qib_cq.c | 67 ++++-
drivers/infiniband/hw/qib/qib_debugfs.c | 283 +++++++++++++++++++
drivers/infiniband/hw/qib/qib_debugfs.h | 45 +++
drivers/infiniband/hw/qib/qib_driver.c | 1 -
drivers/infiniband/hw/qib/qib_file_ops.c | 176 ++++++++----
drivers/infiniband/hw/qib/qib_iba6120.c | 10 +
drivers/infiniband/hw/qib/qib_iba7220.c | 10 +
drivers/infiniband/hw/qib/qib_iba7322.c | 393 +++++++++++++++++++++++---
drivers/infiniband/hw/qib/qib_init.c | 139 +++++++--
drivers/infiniband/hw/qib/qib_qp.c | 123 +++++++-
drivers/infiniband/hw/qib/qib_verbs.c | 8 +-
drivers/infiniband/hw/qib/qib_verbs.h | 33 ++-
drivers/infiniband/ulp/srp/ib_srp.c | 90 +++++-
drivers/infiniband/ulp/srp/ib_srp.h | 1 +
drivers/net/ethernet/mellanox/Kconfig | 1 +
drivers/net/ethernet/mellanox/Makefile | 1 +
drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 18 ++
drivers/net/ethernet/mellanox/mlx5/core/Makefile | 5 +
drivers/net/ethernet/mellanox/mlx5/core/alloc.c | 238 ++++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 1515 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/cq.c | 224 +++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/debugfs.c | 587 ++++++++++++++++++++++++++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/eq.c | 521 ++++++++++++++++++++++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/fw.c | 185 ++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/health.c | 227 +++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/mad.c | 78 ++++++
drivers/net/ethernet/mellanox/mlx5/core/main.c | 475 +++++++++++++++++++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/mcg.c | 106 +++++++
drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h | 73 +++++
drivers/net/ethernet/mellanox/mlx5/core/mr.c | 136 +++++++++
drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c | 435 ++++++++++++++++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/pd.c | 101 +++++++
drivers/net/ethernet/mellanox/mlx5/core/port.c | 104 +++++++
drivers/net/ethernet/mellanox/mlx5/core/qp.c | 301 ++++++++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/srq.c | 223 +++++++++++++++
drivers/net/ethernet/mellanox/mlx5/core/uar.c | 223 +++++++++++++++
include/linux/mlx5/cmd.h | 51 ++++
include/linux/mlx5/cq.h | 165 +++++++++++
include/linux/mlx5/device.h | 893 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/mlx5/doorbell.h | 79 ++++++
include/linux/mlx5/driver.h | 769 ++++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/mlx5/qp.h | 467 ++++++++++++++++++++++++++++++
include/linux/mlx5/srq.h | 41 +++
include/linux/socket.h | 2 +
include/rdma/ib.h | 89 ++++++
include/rdma/ib_addr.h | 6 +-
include/rdma/ib_sa.h | 7 +
include/rdma/ib_verbs.h | 35 ++-
include/rdma/rdma_cm.h | 13 +
include/uapi/rdma/rdma_user_cm.h | 73 ++++-
84 files changed, 18267 insertions(+), 799 deletions(-)
create mode 100644 drivers/infiniband/hw/mlx5/Kconfig
create mode 100644 drivers/infiniband/hw/mlx5/Makefile
create mode 100644 drivers/infiniband/hw/mlx5/ah.c
create mode 100644 drivers/infiniband/hw/mlx5/cq.c
create mode 100644 drivers/infiniband/hw/mlx5/doorbell.c
create mode 100644 drivers/infiniband/hw/mlx5/mad.c
create mode 100644 drivers/infiniband/hw/mlx5/main.c
create mode 100644 drivers/infiniband/hw/mlx5/mem.c
create mode 100644 drivers/infiniband/hw/mlx5/mlx5_ib.h
create mode 100644 drivers/infiniband/hw/mlx5/mr.c
create mode 100644 drivers/infiniband/hw/mlx5/qp.c
create mode 100644 drivers/infiniband/hw/mlx5/srq.c
create mode 100644 drivers/infiniband/hw/mlx5/user.h
create mode 100644 drivers/infiniband/hw/qib/qib_debugfs.c
create mode 100644 drivers/infiniband/hw/qib/qib_debugfs.h
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/Kconfig
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/Makefile
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/alloc.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/cmd.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/cq.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/eq.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/fw.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/health.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mad.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/main.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mcg.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/mr.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/pd.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/port.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/qp.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/srq.c
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/uar.c
create mode 100644 include/linux/mlx5/cmd.h
create mode 100644 include/linux/mlx5/cq.h
create mode 100644 include/linux/mlx5/device.h
create mode 100644 include/linux/mlx5/doorbell.h
create mode 100644 include/linux/mlx5/driver.h
create mode 100644 include/linux/mlx5/qp.h
create mode 100644 include/linux/mlx5/srq.h
create mode 100644 include/rdma/ib.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-06-07 22:28 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-06-07 22:28 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
InfiniBand fixes for 3.10-rc:
- qib RCU/lockdep fix
- iser device removal fix, plus doc fixes
----------------------------------------------------------------
Mike Marciniszyn (1):
IB/qib: Fix lockdep splat in qib_alloc_lkey()
Or Gerlitz (2):
IB/iser: Add Mellanox copyright
MAINTAINERS: Add entry for iSCSI Extensions for RDMA (iSER) initiator
Roi Dayan (1):
IB/iser: Fix device removal flow
Roland Dreier (1):
Merge branches 'iser' and 'qib' into for-next
MAINTAINERS | 10 ++++++++++
drivers/infiniband/hw/qib/qib_keys.c | 2 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 1 +
drivers/infiniband/ulp/iser/iscsi_iser.h | 1 +
drivers/infiniband/ulp/iser/iser_initiator.c | 1 +
drivers/infiniband/ulp/iser/iser_memory.c | 1 +
drivers/infiniband/ulp/iser/iser_verbs.c | 16 +++++++++-------
7 files changed, 24 insertions(+), 8 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-05-08 21:20 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-05-08 21:20 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA changes for the 3.10 merge window:
- XRC transport fixes
- Fix DHCP on IPoIB
- mlx4 preparations for flow steering
- iSER fixes
- miscellaneous other fixes
Sorry for being so late on this -- I moved houses and the system with
all my private keys was offline for a week or so.
----------------------------------------------------------------
Akinobu Mita (1):
RDMA: Rename random32() to prandom_u32()
Cong Ding (1):
RDMA/cxgb3: Fix uninitialized variable
Dotan Barak (1):
IB/mlx4: Disable VLAN stripping for RAW PACKET QPs
Doug Ledford (1):
IPoIB: Fix ipoib_hard_header() return value
Eli Cohen (1):
IB/mlx4: Set link type for RAW PACKET QPs in the QP context
Grant Grundler (1):
SRPT: Fix odd use of WARN_ON()
Hadar Hen Zion (5):
mlx4_core: Move DMFS HW structs to common header file
mlx4: Match DMFS promiscuous field names to firmware spec
mlx4_core: Change a few DMFS fields names to match firmare spec
mlx4_core: Directly expose fields of DMFS HW rule control segment
mlx4_core: Expose a few helpers to fill DMFS HW strucutures
Jack Morgenstein (1):
mlx4_core: Reduce warning message for SRQ_LIMIT event to debug level
Mike Marciniszyn (2):
IB/ipath: Correct ipath_verbs_register_sysfs() error handling
IB/qib: Correct qib_verbs_register_sysfs() error handling
Or Gerlitz (2):
IB/iser: Return error to upper layers on EAGAIN registration failures
IB/iser: Add support for iser CM REQ additional info
Roi Dayan (2):
IB/iser: Add module version
IB/iser: Move informational messages from error to info level
Roland Dreier (1):
Merge branches 'cxgb4', 'ipoib', 'iser', 'misc', 'mlx4', 'qib' and 'srp' into for-next
Shlomo Pongratz (3):
IB/core: Verify that QP handler is valid before dispatching events
mlx4_core: Implement SRQ object lookup from srqn
IB/mlx4: Fetch XRC SRQ in the CQ polling code
Steve Wise (1):
RDMA/iwcm: Don't touch cmid after dropping reference
Thadeu Lima de Souza Cascardo (1):
RDMA/cxgb4: Fix SQ allocation when on-chip SQ is disabled
drivers/infiniband/core/iwcm.c | 2 +
drivers/infiniband/core/verbs.c | 3 +-
drivers/infiniband/hw/cxgb3/cxio_resource.c | 4 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 2 +-
drivers/infiniband/hw/cxgb4/id_table.c | 4 +-
drivers/infiniband/hw/cxgb4/qp.c | 25 ++---
drivers/infiniband/hw/ipath/ipath_verbs.c | 19 ++--
drivers/infiniband/hw/mlx4/cq.c | 21 +++++
drivers/infiniband/hw/mlx4/mad.c | 2 +-
drivers/infiniband/hw/mlx4/qp.c | 6 ++
drivers/infiniband/hw/qib/qib_sysfs.c | 6 +-
drivers/infiniband/hw/qib/qib_verbs.c | 3 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 24 ++---
drivers/infiniband/ulp/iser/iscsi_iser.h | 24 ++++-
drivers/infiniband/ulp/iser/iser_memory.c | 3 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 36 ++++---
drivers/infiniband/ulp/srpt/ib_srpt.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 16 ++--
drivers/net/ethernet/mellanox/mlx4/eq.c | 4 +-
drivers/net/ethernet/mellanox/mlx4/mcg.c | 120 +++++++++++++++---------
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 79 ----------------
drivers/net/ethernet/mellanox/mlx4/srq.c | 15 +++
include/linux/mlx4/device.h | 104 ++++++++++++++++++--
include/linux/mlx4/srq.h | 2 +
27 files changed, 328 insertions(+), 204 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-02-26 17:41 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-02-26 17:41 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Main batch of InfiniBand/RDMA changes for 3.9:
- SRP error handling fixes from Bart Van Assche
- Implementation of memory windows for mlx4 from Shani Michaeli
- Lots of cxgb4 HW driver fixes from Vipul Pandya
- Make iSER work for virtual functions, other fixes from Or Gerlitz
- Fix for bug in qib HW driver from Mike Marciniszyn
- IPoIB fixes from me, Itai Garbi, Shlomo Pongratz, Yan Burman
- Various cleanups and warning fixes from Julia Lawall, Paul Bolle, Wei Yongjun
----------------------------------------------------------------
Bart Van Assche (4):
IB/srp: Track connection state properly
IB/srp: Avoid sending a task management function needlessly
IB/srp: Avoid endless SCSI error handling loop
IB/srp: Fail I/O requests if the transport is offline
Dan Carpenter (1):
IB/mlx4: Fix bug unwinding on error in mlx4_ib_init_sriov()
Itai Garbi (1):
IPoIB: Don't attempt to release resources on error flow
Julia Lawall (1):
IB/mlx4: Adjust duplicate test
Mike Marciniszyn (1):
IB/qib: Fix QP locate/remove race
Or Gerlitz (3):
IB/iser: Use proper define for the commands per LUN value advertised to SCSI ML
IB/iser: Avoid error prints on EAGAIN registration failures
IB/iser: Enable iser when FMRs are not supported
Paul Bolle (2):
RDMA/cxgb4: "cookie" can stay in host endianness
IB/mlx4: Fix compiler warning about uninitialized 'vlan' variable
Roland Dreier (3):
IB/mlx4: Convert is_xxx variables in build_mlx_header() to bool
IPoIB: Free ipoib neigh on path record failure so path rec queries are retried
Merge branches 'core', 'cxgb4', 'ipoib', 'iser', 'misc', 'mlx4', 'qib' and 'srp' into for-next
Shani Michaeli (10):
IB/mlx4_ib: Remove local invalidate segment unused fields
mlx4_core: Rename MPT-related functions to have mpt_ prefix
mlx4_core: Propagate MR deregistration failures to caller
IB/core: Add "type 2" memory windows support
IB/uverbs: Implement memory windows support in uverbs
mlx4_core: Disable memory windows for virtual functions
mlx4_core: Enable memory windows in {INIT, QUERY}_HCA
mlx4: Implement memory windows allocation and deallocation
IB/mlx4: Support memory window binding
IB/mlx4: Advertise MW support
Shlomo Pongratz (1):
IPoIB: Fix ipoib_neigh hashing to use the correct daddr octets
Stefan Hasko (1):
RDMA/cxgb4: Fix cast warning
Syam Sidhardhan (1):
IB/mlx4: Remove redundant NULL check before kfree
Vipul Pandya (11):
RDMA/cxgb4: Abort connections that receive unexpected streaming mode data
RDMA/cxgb4: Abort connections when moving to ERROR state
RDMA/cxgb4: Display streaming mode error only if detected in RTS
RDMA/cxgb4: Keep QP referenced until TID released
RDMA/cxgb4: Always log async errors
RDMA/cxgb4: Only log rx_data warnings if cpl status is non-zero
RDMA/cxgb4: Fix endpoint timeout race condition
RDMA/cxgb4: Don't reconnect on abort for mpa_rev 1
RDMA/cxgb4: Don't wakeup threads for MPAv2
RDMA/cxgb4: Insert hwtid in pass_accept_req instead in pass_establish
RDMA/cxgb4: Address sparse warnings
Wei Yongjun (1):
RDMA/amso1100: Use module_pci_driver() to simplify the code
Yan Burman (1):
IPoIB: Add version and firmware info to ethtool reporting
drivers/infiniband/core/uverbs.h | 2 +
drivers/infiniband/core/uverbs_cmd.c | 121 ++++++++++++++
drivers/infiniband/core/uverbs_main.c | 13 +-
drivers/infiniband/core/verbs.c | 5 +-
drivers/infiniband/hw/amso1100/c2.c | 13 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 5 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 15 +-
drivers/infiniband/hw/cxgb4/cm.c | 170 +++++++++++--------
drivers/infiniband/hw/cxgb4/device.c | 5 +-
drivers/infiniband/hw/cxgb4/ev.c | 8 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 4 +-
drivers/infiniband/hw/cxgb4/mem.c | 5 +-
drivers/infiniband/hw/cxgb4/qp.c | 1 +
drivers/infiniband/hw/ehca/ehca_iverbs.h | 2 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 5 +-
drivers/infiniband/hw/mlx4/mad.c | 7 +-
drivers/infiniband/hw/mlx4/main.c | 22 ++-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 18 +-
drivers/infiniband/hw/mlx4/mr.c | 87 +++++++++-
drivers/infiniband/hw/mlx4/qp.c | 49 ++++--
drivers/infiniband/hw/mlx4/sysfs.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 19 ++-
drivers/infiniband/hw/qib/qib_qp.c | 5 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 4 +
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 19 ++-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 14 +-
drivers/infiniband/ulp/iser/iscsi_iser.h | 2 +-
drivers/infiniband/ulp/iser/iser_memory.c | 9 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 8 +-
drivers/infiniband/ulp/srp/ib_srp.c | 42 +++--
drivers/infiniband/ulp/srp/ib_srp.h | 1 +
drivers/net/ethernet/mellanox/mlx4/en_main.c | 4 +-
drivers/net/ethernet/mellanox/mlx4/fw.c | 14 +-
drivers/net/ethernet/mellanox/mlx4/fw.h | 1 +
drivers/net/ethernet/mellanox/mlx4/main.c | 4 +
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 34 +++-
drivers/net/ethernet/mellanox/mlx4/mr.c | 186 ++++++++++++++++-----
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 63 ++++++-
include/linux/mlx4/device.h | 22 ++-
include/linux/mlx4/qp.h | 19 ++-
include/rdma/ib_verbs.h | 73 +++++++-
include/uapi/rdma/ib_user_verbs.h | 16 ++
net/sunrpc/xprtrdma/verbs.c | 20 +--
43 files changed, 885 insertions(+), 253 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2013-02-07 1:15 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2013-02-07 1:15 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
IB regression fixes for 3.8:
- Fix mlx4 VFs not working on old guests because of 64B CQE changes
- Fix ill-considered sparse fix for qib
- Fix IPoIB crash due to skb double destruct introduced in 3.8-rc1
----------------------------------------------------------------
Mike Marciniszyn (1):
IB/qib: Fix for broken sparse warning fix
Or Gerlitz (1):
mlx4_core: Fix advertisement of wrong PF context behaviour
Roland Dreier (1):
Merge branches 'ipoib', 'mlx4' and 'qib' into for-next
Shlomo Pongratz (1):
IPoIB: Fix crash due to skb double destruct
drivers/infiniband/hw/qib/qib_qp.c | 11 +++--------
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 6 +++---
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 6 +++---
drivers/net/ethernet/mellanox/mlx4/main.c | 2 +-
4 files changed, 10 insertions(+), 15 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-12-21 21:42 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-12-21 21:42 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Second batch of InfiniBand/RDMA changes for 3.8:
- cxgb4 changes to fix lookup engine hash collisions
- mlx4 changes to make flow steering usable
- fix to IPoIB to avoid pinning dst reference for too long
----------------------------------------------------------------
Hadar Hen Zion (2):
mlx4_core: Add QPN enforcement for flow steering rules set by VFs
mlx4_core: Fix error flow in the flow steering wrapper
Jack Morgenstein (2):
mlx4_core: Adjustments to Flow Steering activation logic for SR-IOV
mlx4_core: Allow choosing flow steering mode
Roland Dreier (2):
IPoIB: Call skb_dst_drop() once skb is enqueued for sending
Merge branches 'cxgb4', 'ipoib' and 'mlx4' into for-next
Vipul Pandya (5):
cxgb4: Add T4 filter support
cxgb4: Add LE hash collision bug fix path in LLD driver
RDMA/cxgb4: Fix LE hash collision bug for active open connection
RDMA/cxgb4: Fix LE hash collision bug for passive open connection
RDMA/cxgb4: Fix bug for active and passive LE hash collision path
drivers/infiniband/hw/cxgb4/cm.c | 791 ++++++++++++++++++---
drivers/infiniband/hw/cxgb4/device.c | 210 +++++-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 33 +
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 3 +
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 3 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 136 ++++
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 459 +++++++++++-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 23 +-
drivers/net/ethernet/chelsio/cxgb4/l2t.c | 32 +
drivers/net/ethernet/chelsio/cxgb4/l2t.h | 3 +
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 22 +-
drivers/net/ethernet/chelsio/cxgb4/t4_msg.h | 66 ++
drivers/net/ethernet/chelsio/cxgb4/t4_regs.h | 37 +
drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h | 418 +++++++++++
drivers/net/ethernet/mellanox/mlx4/fw.c | 15 +-
drivers/net/ethernet/mellanox/mlx4/fw.h | 1 +
drivers/net/ethernet/mellanox/mlx4/main.c | 115 ++-
drivers/net/ethernet/mellanox/mlx4/mcg.c | 7 +-
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 6 +-
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 28 +-
drivers/scsi/csiostor/t4fw_api_stor.h | 39 -
include/linux/mlx4/device.h | 1 +
22 files changed, 2234 insertions(+), 214 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2012-12-14 15:36 ` Linus Torvalds
@ 2012-12-14 23:57 ` Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-12-14 23:57 UTC (permalink / raw)
To: Linus Torvalds; +Cc: LKML, linux-rdma
On Fri, Dec 14, 2012 at 7:36 AM, Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>> Any problem with this tree, or did it just slip through the cracks?
>
> It was merged seven hours before your email. Forgot to check?
No, just dumb-assery in how I fetched in one place and checked in
another. Sorry.
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2012-12-14 9:56 ` Roland Dreier
@ 2012-12-14 15:36 ` Linus Torvalds
2012-12-14 23:57 ` Roland Dreier
0 siblings, 1 reply; 223+ messages in thread
From: Linus Torvalds @ 2012-12-14 15:36 UTC (permalink / raw)
To: Roland Dreier; +Cc: LKML, linux-rdma
On Fri, Dec 14, 2012 at 1:56 AM, Roland Dreier <roland@kernel.org> wrote:
>
> Any problem with this tree, or did it just slip through the cracks?
It was merged seven hours before your email. Forgot to check?
Linus
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2012-12-11 5:59 Roland Dreier
@ 2012-12-14 9:56 ` Roland Dreier
2012-12-14 15:36 ` Linus Torvalds
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2012-12-14 9:56 UTC (permalink / raw)
To: Linus Torvalds; +Cc: LKML, linux-rdma
On Mon, Dec 10, 2012 at 9:59 PM, Roland Dreier <roland@kernel.org> wrote:
> Hi Linus,
>
> Please pull from
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
Hi Linus,
Any problem with this tree, or did it just slip through the cracks?
Thanks,
Roland
> ----------------------------------------------------------------
>
> First batch of InfiniBand/RDMA changes for the 3.8 merge window:
> - A good chunk of Bart Van Assche's SRP fixes
> - UAPI disintegration from David Howells
> - mlx4 support for "64-byte CQE" hardware feature from Or Gerlitz
> - Other miscellaneous fixes
>
> ----------------------------------------------------------------
> Alan Cox (2):
> IB/ipath: Remove unreachable code
> RDMA/amsol1100: Fix missing break
>
> Bart Van Assche (14):
> IB/srp: Increase block layer timeout
> IB/srp: Eliminate state SRP_TARGET_CONNECTING
> IB/srp: Keep processing commands during host removal
> IB/srp: Simplify SCSI error handling
> IB/srp: Introduce srp_handle_qp_err()
> IB/srp: Process all error completions
> IB/srp: Suppress superfluous error messages
> IB/srp: Introduce the helper function srp_remove_target()
> IB/srp: Eliminate state SRP_TARGET_DEAD
> IB/srp: Document sysfs attributes
> srp_transport: Fix attribute registration
> srp_transport: Simplify attribute initialization code
> srp_transport: Document sysfs attributes
> IB/srp: Allow SRP disconnect through sysfs
>
> David Howells (1):
> UAPI: (Scripted) Disintegrate include/rdma
>
> Ishai Rabinovitz (1):
> IB/srp: destroy and recreate QP and CQs when reconnecting
>
> Jack Morgenstein (2):
> IB/mlx4: Fix spinlock order to avoid lockdep warnings
> mlx4_core: Fix potential deadlock in mlx4_eq_int()
>
> Julia Lawall (3):
> RDMA/nes: Use WARN()
> RDMA/cxgb4: use WARN
> RDMA/cxgb3: use WARN
>
> Or Gerlitz (1):
> mlx4: 64-byte CQE/EQE support
>
> Roland Dreier (4):
> Merge branches 'cxgb4', 'misc', 'mlx4', 'nes' and 'uapi' into for-next
> Merge branches 'cma' and 'mlx4' into for-next
> Merge branch 'srp' into for-next
> Merge branch 'nes' into for-next
>
> Tatyana Nikolova (7):
> RDMA/nes: Fix incorrect address of IP header
> RDMA/nes: Fix for unlinking skbs from empty list
> RDMA/nes: Fix for sending fpdus in order to hardware
> RDMA/nes: Fix for incorrect multicast address in the perfect filter table
> RDMA/nes: Fix for BUG_ON due to adding already-pending timer
> RDMA/nes: Fix for terminate timer crash
> RDMA/nes: Fix for crash when registering zero length MR for CQ
>
> Vu Pham (1):
> IB/srp: send disconnect request without waiting for CM timewait exit
>
> shefty (1):
> RDMA/cm: Change return value from find_gid_port()
>
> Documentation/ABI/stable/sysfs-driver-ib_srp | 156 ++++++++++++
> Documentation/ABI/stable/sysfs-transport-srp | 19 ++
> drivers/infiniband/core/cma.c | 9 +-
> drivers/infiniband/hw/amso1100/c2_ae.c | 1 +
> drivers/infiniband/hw/cxgb3/iwch_cm.c | 6 +-
> drivers/infiniband/hw/cxgb4/cm.c | 6 +-
> drivers/infiniband/hw/ipath/ipath_init_chip.c | 10 -
> drivers/infiniband/hw/mlx4/cm.c | 4 +-
> drivers/infiniband/hw/mlx4/cq.c | 34 ++-
> drivers/infiniband/hw/mlx4/main.c | 27 +-
> drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
> drivers/infiniband/hw/mlx4/user.h | 12 +-
> drivers/infiniband/hw/nes/nes.h | 1 +
> drivers/infiniband/hw/nes/nes_cm.c | 32 +--
> drivers/infiniband/hw/nes/nes_hw.c | 9 +-
> drivers/infiniband/hw/nes/nes_mgt.c | 42 ++--
> drivers/infiniband/hw/nes/nes_nic.c | 13 +-
> drivers/infiniband/hw/nes/nes_verbs.c | 9 +-
> drivers/infiniband/ulp/srp/ib_srp.c | 314 ++++++++++++++----------
> drivers/infiniband/ulp/srp/ib_srp.h | 11 +-
> drivers/net/ethernet/mellanox/mlx4/cmd.c | 11 +-
> drivers/net/ethernet/mellanox/mlx4/en_cq.c | 2 +-
> drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 1 +
> drivers/net/ethernet/mellanox/mlx4/en_rx.c | 5 +-
> drivers/net/ethernet/mellanox/mlx4/en_tx.c | 5 +-
> drivers/net/ethernet/mellanox/mlx4/eq.c | 36 ++-
> drivers/net/ethernet/mellanox/mlx4/fw.c | 30 ++-
> drivers/net/ethernet/mellanox/mlx4/fw.h | 1 +
> drivers/net/ethernet/mellanox/mlx4/main.c | 38 ++-
> drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 +
> drivers/scsi/scsi_transport_srp.c | 51 ++--
> include/linux/mlx4/device.h | 21 ++
> include/rdma/Kbuild | 6 -
> include/rdma/rdma_netlink.h | 36 +--
> include/scsi/scsi_transport_srp.h | 8 +
> include/uapi/rdma/Kbuild | 6 +
> include/{ => uapi}/rdma/ib_user_cm.h | 0
> include/{ => uapi}/rdma/ib_user_mad.h | 0
> include/{ => uapi}/rdma/ib_user_sa.h | 0
> include/{ => uapi}/rdma/ib_user_verbs.h | 0
> include/uapi/rdma/rdma_netlink.h | 37 +++
> include/{ => uapi}/rdma/rdma_user_cm.h | 0
> 42 files changed, 689 insertions(+), 322 deletions(-)
> create mode 100644 Documentation/ABI/stable/sysfs-driver-ib_srp
> create mode 100644 Documentation/ABI/stable/sysfs-transport-srp
> rename include/{ => uapi}/rdma/ib_user_cm.h (100%)
> rename include/{ => uapi}/rdma/ib_user_mad.h (100%)
> rename include/{ => uapi}/rdma/ib_user_sa.h (100%)
> rename include/{ => uapi}/rdma/ib_user_verbs.h (100%)
> create mode 100644 include/uapi/rdma/rdma_netlink.h
> rename include/{ => uapi}/rdma/rdma_user_cm.h (100%)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-12-11 5:59 Roland Dreier
2012-12-14 9:56 ` Roland Dreier
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2012-12-11 5:59 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
First batch of InfiniBand/RDMA changes for the 3.8 merge window:
- A good chunk of Bart Van Assche's SRP fixes
- UAPI disintegration from David Howells
- mlx4 support for "64-byte CQE" hardware feature from Or Gerlitz
- Other miscellaneous fixes
----------------------------------------------------------------
Alan Cox (2):
IB/ipath: Remove unreachable code
RDMA/amsol1100: Fix missing break
Bart Van Assche (14):
IB/srp: Increase block layer timeout
IB/srp: Eliminate state SRP_TARGET_CONNECTING
IB/srp: Keep processing commands during host removal
IB/srp: Simplify SCSI error handling
IB/srp: Introduce srp_handle_qp_err()
IB/srp: Process all error completions
IB/srp: Suppress superfluous error messages
IB/srp: Introduce the helper function srp_remove_target()
IB/srp: Eliminate state SRP_TARGET_DEAD
IB/srp: Document sysfs attributes
srp_transport: Fix attribute registration
srp_transport: Simplify attribute initialization code
srp_transport: Document sysfs attributes
IB/srp: Allow SRP disconnect through sysfs
David Howells (1):
UAPI: (Scripted) Disintegrate include/rdma
Ishai Rabinovitz (1):
IB/srp: destroy and recreate QP and CQs when reconnecting
Jack Morgenstein (2):
IB/mlx4: Fix spinlock order to avoid lockdep warnings
mlx4_core: Fix potential deadlock in mlx4_eq_int()
Julia Lawall (3):
RDMA/nes: Use WARN()
RDMA/cxgb4: use WARN
RDMA/cxgb3: use WARN
Or Gerlitz (1):
mlx4: 64-byte CQE/EQE support
Roland Dreier (4):
Merge branches 'cxgb4', 'misc', 'mlx4', 'nes' and 'uapi' into for-next
Merge branches 'cma' and 'mlx4' into for-next
Merge branch 'srp' into for-next
Merge branch 'nes' into for-next
Tatyana Nikolova (7):
RDMA/nes: Fix incorrect address of IP header
RDMA/nes: Fix for unlinking skbs from empty list
RDMA/nes: Fix for sending fpdus in order to hardware
RDMA/nes: Fix for incorrect multicast address in the perfect filter table
RDMA/nes: Fix for BUG_ON due to adding already-pending timer
RDMA/nes: Fix for terminate timer crash
RDMA/nes: Fix for crash when registering zero length MR for CQ
Vu Pham (1):
IB/srp: send disconnect request without waiting for CM timewait exit
shefty (1):
RDMA/cm: Change return value from find_gid_port()
Documentation/ABI/stable/sysfs-driver-ib_srp | 156 ++++++++++++
Documentation/ABI/stable/sysfs-transport-srp | 19 ++
drivers/infiniband/core/cma.c | 9 +-
drivers/infiniband/hw/amso1100/c2_ae.c | 1 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 6 +-
drivers/infiniband/hw/cxgb4/cm.c | 6 +-
drivers/infiniband/hw/ipath/ipath_init_chip.c | 10 -
drivers/infiniband/hw/mlx4/cm.c | 4 +-
drivers/infiniband/hw/mlx4/cq.c | 34 ++-
drivers/infiniband/hw/mlx4/main.c | 27 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
drivers/infiniband/hw/mlx4/user.h | 12 +-
drivers/infiniband/hw/nes/nes.h | 1 +
drivers/infiniband/hw/nes/nes_cm.c | 32 +--
drivers/infiniband/hw/nes/nes_hw.c | 9 +-
drivers/infiniband/hw/nes/nes_mgt.c | 42 ++--
drivers/infiniband/hw/nes/nes_nic.c | 13 +-
drivers/infiniband/hw/nes/nes_verbs.c | 9 +-
drivers/infiniband/ulp/srp/ib_srp.c | 314 ++++++++++++++----------
drivers/infiniband/ulp/srp/ib_srp.h | 11 +-
drivers/net/ethernet/mellanox/mlx4/cmd.c | 11 +-
drivers/net/ethernet/mellanox/mlx4/en_cq.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 1 +
drivers/net/ethernet/mellanox/mlx4/en_rx.c | 5 +-
drivers/net/ethernet/mellanox/mlx4/en_tx.c | 5 +-
drivers/net/ethernet/mellanox/mlx4/eq.c | 36 ++-
drivers/net/ethernet/mellanox/mlx4/fw.c | 30 ++-
drivers/net/ethernet/mellanox/mlx4/fw.h | 1 +
drivers/net/ethernet/mellanox/mlx4/main.c | 38 ++-
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 +
drivers/scsi/scsi_transport_srp.c | 51 ++--
include/linux/mlx4/device.h | 21 ++
include/rdma/Kbuild | 6 -
include/rdma/rdma_netlink.h | 36 +--
include/scsi/scsi_transport_srp.h | 8 +
include/uapi/rdma/Kbuild | 6 +
include/{ => uapi}/rdma/ib_user_cm.h | 0
include/{ => uapi}/rdma/ib_user_mad.h | 0
include/{ => uapi}/rdma/ib_user_sa.h | 0
include/{ => uapi}/rdma/ib_user_verbs.h | 0
include/uapi/rdma/rdma_netlink.h | 37 +++
include/{ => uapi}/rdma/rdma_user_cm.h | 0
42 files changed, 689 insertions(+), 322 deletions(-)
create mode 100644 Documentation/ABI/stable/sysfs-driver-ib_srp
create mode 100644 Documentation/ABI/stable/sysfs-transport-srp
rename include/{ => uapi}/rdma/ib_user_cm.h (100%)
rename include/{ => uapi}/rdma/ib_user_mad.h (100%)
rename include/{ => uapi}/rdma/ib_user_sa.h (100%)
rename include/{ => uapi}/rdma/ib_user_verbs.h (100%)
create mode 100644 include/uapi/rdma/rdma_netlink.h
rename include/{ => uapi}/rdma/rdma_user_cm.h (100%)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-10-26 19:55 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-10-26 19:55 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Small batch of fixes for 3.7:
- Fix crash in error path in cxgb4
- Fix build error on 32 bits in mlx4
- Fix SR-IOV bugs in mlx4
----------------------------------------------------------------
Dotan Barak (1):
mlx4_core: Perform correct resource cleanup if mlx4_QUERY_ADAPTER() fails
Doug Ledford (1):
IB/mlx4: Fix build error on platforms where UL is not 64 bits
Eli Cohen (1):
IB/mlx4: Synchronize cleanup of MCGs in MCG paravirtualization
Jack Morgenstein (1):
IB/mlx4: Fix QP1 P_Key processing in the Primary Physical Function (PPF)
Or Gerlitz (1):
mlx4_core: Remove annoying debug messages from SR-IOV flow
Roland Dreier (1):
Merge branches 'cxgb4' and 'mlx4' into for-next
Thadeu Lima de Souza Cascardo (1):
RDMA/cxgb4: Don't free chunk that we have failed to allocate
drivers/infiniband/hw/cxgb4/mem.c | 2 +-
drivers/infiniband/hw/mlx4/alias_GUID.c | 2 +-
drivers/infiniband/hw/mlx4/mad.c | 85 +++++++++-----------
drivers/infiniband/hw/mlx4/mcg.c | 18 +++--
drivers/net/ethernet/mellanox/mlx4/eq.c | 6 --
drivers/net/ethernet/mellanox/mlx4/main.c | 5 +-
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 6 --
7 files changed, 56 insertions(+), 68 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-10-05 2:20 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-10-05 2:20 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Second batch of changes for the 3.7 merge window:
- Late-breaking fix for IPoIB on mlx4 SR-IOV VFs.
- Fix for IPoIB build breakage with CONFIG_INFINIBAND_IPOIB_CM=n
(new netlink config changes are to blame).
- Make sure retry count values are in range in RDMA CM.
- A few nes hardware driver fixes and cleanups.
- Have iSER initiator use >1 interrupt vectors if available.
----------------------------------------------------------------
Alex Tabachnik (1):
IB/iser: Add more RX CQs to scale out processing of SCSI responses
Jack Morgenstein (1):
mlx4_core: Adjust flow steering attach wrapper so that IB works on SR-IOV VFs
Roland Dreier (2):
IPoIB: Fix build with CONFIG_INFINIBAND_IPOIB_CM=n
Merge branches 'cma', 'ipoib', 'iser', 'mlx4' and 'nes' into for-next
Sean Hefty (1):
RDMA/cma: Check that retry count values are in range
Tatyana Nikolova (4):
RDMA/nes: Add missing break to switch.
RDMA/nes: Remove unnecessary if-else statement
RDMA/nes: Remove unused module parameter "send_first"
RDMA/nes: Bump the version number of nes driver
drivers/infiniband/core/cma.c | 6 +-
drivers/infiniband/hw/nes/nes.c | 5 -
drivers/infiniband/hw/nes/nes.h | 3 +-
drivers/infiniband/hw/nes/nes_verbs.c | 16 +--
drivers/infiniband/ulp/ipoib/ipoib.h | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 31 -----
drivers/infiniband/ulp/ipoib/ipoib_main.c | 31 +++++
drivers/infiniband/ulp/iser/iscsi_iser.h | 17 ++-
drivers/infiniband/ulp/iser/iser_verbs.c | 130 ++++++++++++++------
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 2 +
10 files changed, 146 insertions(+), 99 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-10-02 16:08 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-10-02 16:08 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
First batch of InfiniBand/RDMA changes for the 3.7 merge window:
- mlx4 IB support for SR-IOV
- A couple of SRP initiator fixes
- Batch of nes hardware driver fixes
- Fix for long-standing use-after-free crash in IPoIB
- Other miscellaneous fixes
----------------------------------------------------------------
Amir Vadai (1):
IB/mlx4: Add CM paravirtualization
Bart Van Assche (2):
IB/srp: Fix use-after-free in srp_reset_req()
IB/srp: Avoid having aborted requests hang
Dean Luick (1):
IB/qib: Add a qib driver version
Dotan Barak (4):
IB/core: Remove unused variables in ucm/ucma
RDMA/cma: Use consistent component mask for IPoIB port space multicast joins
IB/mlx4: Fill in sq_sig_type in query QP
mlx4_core: Fix wrong offset in parsing query device caps response
Emil Goode (1):
RDMA/cxgb4: Fix error handling in create_qp()
Jack Morgenstein (20):
IB/core: Reserve bits in enum ib_qp_create_flags for low-level driver use
IB/core: Handle table with full and partial membership for the same P_Key
IB/core: Add ib_find_exact_cached_pkey()
IB/mlx4: SR-IOV IB context objects and proxy/tunnel SQP support
mlx4_core: Add proxy and tunnel QPs to the reserved QP area
IB/mlx4: Initialize SR-IOV IB support for slaves in master context
mlx4: Implement QP paravirtualization and maintain phys_pkey_cache for smp_snoop
IB/mlx4: SR-IOV multiplex and demultiplex MADs
mlx4: MAD_IFC paravirtualization
mlx4_core: Add IB port-state machine and port mgmt event propagation
mlx4: Add alias_guid mechanism
IB/mlx4: Propagate P_Key and guid change port management events to slaves
IB/mlx4: Add iov directory in sysfs under the ib device
net/mlx4_core: Adjustments to SET_PORT for IB SR-IOV
mlx4_core: INIT/CLOSE port logic for IB ports in SR-IOV mode
IB/mlx4: Miscellaneous adjustments for SR-IOV IB support
mlx4: Activate SR-IOV mode for IB
mlx4: Paravirtualize Node Guids for slaves
mlx4: Modify proxy/tunnel QP mechanism so that guests do no calculations
IB/mlx4: Create paravirt contexts for VFs when master IB driver initializes
Mike Marciniszyn (1):
IB/qib: Fix local access validation for user MRs
Or Gerlitz (1):
mlx4_core: Remove annoying debug message in the resource tracker
Oren Duer (1):
IB/mlx4: Add multicast group (MCG) paravirtualization for SR-IOV
Patrick McHardy (1):
IPoIB: Fix use-after-free of multicast object
Roland Dreier (7):
mlx4_core: Trivial readability fix: "0X30" -> "0x30"
mlx4_core: Trivial cleanups to driver log messages
mlx4_core: Fix crash on uninitialized priv->cmd.slave_sem
mlx4_core: Stash PCI ID driver_data in mlx4_priv structure
mlx4_core: Clean up enabling of SENSE_PORT for older (ConnectX-1/-2) HCAs
mlx4_core: Disable SENSE_PORT for multifunction devices
Merge branches 'cma', 'cxgb4', 'ipoib', 'mlx4', 'mlx4-sriov', 'nes', 'qib' and 'srp' into for-linus
Tatyana Nikolova (6):
RDMA/nes: Fix incorrect resolving of the loopback MAC address
RDMA/nes: Fix for incorrect MSS when TSO is on
RDMA/nes: Cosmetic changes
RDMA/nes: Fix for crash when TX checksum offload is off
RDMA/nes: Print hardware resource type
RDMA/nes: Fix compilation error when nes_debug is enabled
drivers/infiniband/core/cache.c | 43 +-
drivers/infiniband/core/cma.c | 5 +-
drivers/infiniband/core/device.c | 16 +-
drivers/infiniband/core/ucm.c | 1 -
drivers/infiniband/core/ucma.c | 1 -
drivers/infiniband/hw/cxgb4/qp.c | 62 +-
drivers/infiniband/hw/mlx4/Makefile | 2 +-
drivers/infiniband/hw/mlx4/alias_GUID.c | 688 +++++++++
drivers/infiniband/hw/mlx4/cm.c | 437 ++++++
drivers/infiniband/hw/mlx4/cq.c | 31 +-
drivers/infiniband/hw/mlx4/mad.c | 1573 +++++++++++++++++++-
drivers/infiniband/hw/mlx4/main.c | 273 +++-
drivers/infiniband/hw/mlx4/mcg.c | 1254 ++++++++++++++++
drivers/infiniband/hw/mlx4/mlx4_ib.h | 341 ++++-
drivers/infiniband/hw/mlx4/qp.c | 660 +++++++-
drivers/infiniband/hw/mlx4/sysfs.c | 794 ++++++++++
drivers/infiniband/hw/nes/nes.h | 15 +-
drivers/infiniband/hw/nes/nes_cm.c | 34 +-
drivers/infiniband/hw/nes/nes_hw.c | 4 +-
drivers/infiniband/hw/nes/nes_nic.c | 40 +-
drivers/infiniband/hw/nes/nes_utils.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 14 +-
drivers/infiniband/hw/qib/qib_common.h | 14 +-
drivers/infiniband/hw/qib/qib_driver.c | 3 +-
drivers/infiniband/hw/qib/qib_keys.c | 5 +-
drivers/infiniband/hw/qib/qib_verbs.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 19 +-
drivers/infiniband/ulp/srp/ib_srp.c | 3 +-
drivers/net/ethernet/mellanox/mlx4/cmd.c | 242 ++-
drivers/net/ethernet/mellanox/mlx4/eq.c | 245 ++-
drivers/net/ethernet/mellanox/mlx4/fw.c | 246 ++-
drivers/net/ethernet/mellanox/mlx4/fw.h | 11 +-
drivers/net/ethernet/mellanox/mlx4/main.c | 171 ++-
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 59 +-
drivers/net/ethernet/mellanox/mlx4/port.c | 10 +
drivers/net/ethernet/mellanox/mlx4/qp.c | 100 +-
.../net/ethernet/mellanox/mlx4/resource_tracker.c | 222 ++-
include/linux/mlx4/device.h | 69 +-
include/linux/mlx4/driver.h | 2 +
include/linux/mlx4/qp.h | 3 +-
include/rdma/ib_cache.h | 16 +
include/rdma/ib_verbs.h | 3 +
43 files changed, 7289 insertions(+), 448 deletions(-)
create mode 100644 drivers/infiniband/hw/mlx4/alias_GUID.c
create mode 100644 drivers/infiniband/hw/mlx4/cm.c
create mode 100644 drivers/infiniband/hw/mlx4/mcg.c
create mode 100644 drivers/infiniband/hw/mlx4/sysfs.c
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-09-17 15:57 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-09-17 15:57 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Last set of InfiniBand/RDMA fixes for 3.6:
- Couple more IPoIB fixes for regressions introduced by path database conversion
- Minor other fixes to low-level drivers (cxgb4, mlx4, qib, ocrdma)
----------------------------------------------------------------
Mike Marciniszyn (1):
IB/qib: Fix failure of compliance test C14-024#06_LocalPortNum
Parav Pandit (1):
RDMA/ocrdma: Fix CQE expansion of unsignaled WQE
Roland Dreier (1):
Merge branches 'cxgb4', 'ipoib', 'mlx4', 'ocrdma' and 'qib' into for-next
Shlomo Pongratz (2):
IPoIB: Fix memory leak in the neigh table deletion flow
IPoIB: Fix AB-BA deadlock when deleting neighbours
Wei Yongjun (1):
RDMA/cxgb4: Move dereference below NULL test
Yishai Hadas (1):
mlx4_core: Fix integer overflows so 8TBs of memory registration works
drivers/infiniband/hw/cxgb4/cm.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 8 +-
drivers/infiniband/hw/qib/qib_mad.c | 3 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 5 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 93 +++++++++++-------------
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 2 -
drivers/net/ethernet/mellanox/mlx4/icm.c | 30 +++++---
drivers/net/ethernet/mellanox/mlx4/icm.h | 10 +--
8 files changed, 78 insertions(+), 75 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-08-17 18:38 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-08-17 18:38 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Grab bag of InfiniBand/RDMA fixes:
- IPoIB fixes for regressions introduced by path database conversion
- mlx4 fixes for bugs with large memory systems and regressions from SR-IOV patches
- RDMA CM fix for passing bad event up to userspace
- Other minor fixes
----------------------------------------------------------------
Bart Van Assche (1):
IB/srp: Fix a race condition
Jack Morgenstein (1):
IB/mlx4: Fix possible deadlock on sm_lock spinlock
Julia Lawall (1):
IB/qib: Fix error return code in qib_init_7322_variables()
Kleber Sacilotto de Souza (1):
IB/mlx4: Check iboe netdev pointer before dereferencing it
Masanari Iida (1):
IB: Fix typos in infiniband drivers
Roland Dreier (3):
RDMA/ocrdma: Don't call vlan_dev_real_dev() for non-VLAN netdevs
mlx4_core: Clean up buddy bitmap allocation
Merge branches 'cma', 'ipoib', 'misc', 'mlx4', 'ocrdma', 'qib' and 'srp' into for-next
Shlomo Pongratz (2):
IB/ipoib: Add missing locking when CM object is deleted
IB/ipoib: Fix RCU pointer dereference of wrong object
Tatyana Nikolova (1):
RDMA/ucma.c: Fix for events with wrong context on iWARP
Yishai Hadas (2):
mlx4_core: Allow large mlx4_buddy bitmaps
mlx4_core: Fix integer overflow issues around MTT table
drivers/infiniband/core/ucma.c | 2 +-
drivers/infiniband/hw/amso1100/c2_rnic.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 2 +-
drivers/infiniband/hw/mlx4/mad.c | 16 +++--
drivers/infiniband/hw/mlx4/main.c | 5 +-
drivers/infiniband/hw/mlx4/qp.c | 6 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 16 ++---
drivers/infiniband/hw/qib/qib_iba7322.c | 4 +-
drivers/infiniband/hw/qib/qib_sd7220.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 3 +
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 87 +++++++++++++++++++-------
drivers/infiniband/ulp/srpt/ib_srpt.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/icm.c | 9 ++-
drivers/net/ethernet/mellanox/mlx4/icm.h | 2 +-
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 4 +-
drivers/net/ethernet/mellanox/mlx4/mr.c | 27 +++++---
drivers/net/ethernet/mellanox/mlx4/profile.c | 4 +-
18 files changed, 130 insertions(+), 65 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-07-23 16:17 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-07-23 16:17 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-3.6
----------------------------------------------------------------
InfiniBand/RDMA changes for the 3.6 merge window:
- Updates to the qib low-level driver
- First chunk of changes for SR-IOV support for mlx4 IB
- RDMA CM support for IPv6-only binding
- Other misc cleanups and fixes
----------------------------------------------------------------
Betty Dall (1):
IB/qib: Fix an incorrect log message
Dotan Barak (6):
IB/mthca: Warning about event for non-existent QPs should show event type
IB/mthca: Fill in sq_sig_type in query QP
IB/mlx4: Fill the masked_atomic_cap attribute in query device
mlx4_core: Remove double function declarations
IB/cm: Destroy idr as part of the module init error flow
net/mlx4_core: Free ICM table in case of error
Erez Shitrit (1):
IB/sa: Add GuidInfoRecord query support
Jack Morgenstein (8):
mlx4_core: Pass an invalid PCI id number to VFs
IB/mlx4: Add debug prints
IB/core: Move CM_xxx_ATTR_ID macros from cm_msgs.h to ib_cm.h
mlx4: Use port management change event instead of smp_snoop
net/mlx4_core: Initialize IB port capabilities for all slaves
mlx4_core: Implement mechanism for reserved Q_Keys
mlx4_core: Allow guests to have IB ports
mlx4: Put physical GID and P_Key table sizes in mlx4_phys_caps struct and paravirtualize them
Mike Marciniszyn (8):
IB/qib: Fix UC MR refs for immediate operations
IB/qib: Avoid returning EBUSY from MR deregister
IB/qib: RCU locking for MR validation
IB/qib: Fix sparse RCU warnings in qib_keys.c
IB/qib: Fix QP RCU sparse warnings
IB/qib: Reduce sdma_lock contention
IB/qib: Add congestion control agent implementation
IB/qib: checkpatch fixes
Roland Dreier (4):
RDMA/ocrdma: Fix assignment of max_srq_sge in device query
RDMA/cxgb4: Fix endianness of addition to mpa->private_data_size
IB: Use IS_ENABLED(CONFIG_IPV6)
Merge branches 'cma', 'cxgb4', 'misc', 'mlx4-sriov', 'mlx-cleanups', 'ocrdma' and 'qib' into for-linus
Sean Hefty (3):
RDMA/cma: Bind to a specific address family
RDMA/cma: Listen on specific address family
RDMA/cma: Allow user to restrict listens to bound address family
drivers/infiniband/core/addr.c | 4 +-
drivers/infiniband/core/cm.c | 16 +-
drivers/infiniband/core/cm_msgs.h | 12 -
drivers/infiniband/core/cma.c | 77 ++++--
drivers/infiniband/core/sa_query.c | 133 +++++++++++
drivers/infiniband/core/ucma.c | 7 +
drivers/infiniband/hw/cxgb4/cm.c | 12 +-
drivers/infiniband/hw/mlx4/mad.c | 141 ++++++++---
drivers/infiniband/hw/mlx4/main.c | 33 ++-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 19 ++
drivers/infiniband/hw/mlx4/qp.c | 27 ++-
drivers/infiniband/hw/mthca/mthca_qp.c | 4 +-
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 7 +-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 2 +-
drivers/infiniband/hw/qib/qib.h | 45 +++-
drivers/infiniband/hw/qib/qib_diag.c | 13 +-
drivers/infiniband/hw/qib/qib_driver.c | 15 +-
drivers/infiniband/hw/qib/qib_eeprom.c | 41 ++--
drivers/infiniband/hw/qib/qib_file_ops.c | 63 ++---
drivers/infiniband/hw/qib/qib_fs.c | 21 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 91 +++----
drivers/infiniband/hw/qib/qib_iba7220.c | 92 ++++----
drivers/infiniband/hw/qib/qib_iba7322.c | 160 +++++++------
drivers/infiniband/hw/qib/qib_init.c | 238 +++++++++++++++----
drivers/infiniband/hw/qib/qib_intr.c | 8 +-
drivers/infiniband/hw/qib/qib_keys.c | 152 +++++++-----
drivers/infiniband/hw/qib/qib_mad.c | 327 +++++++++++++++++++++++++-
drivers/infiniband/hw/qib/qib_mad.h | 198 +++++++++++++++-
drivers/infiniband/hw/qib/qib_mr.c | 247 ++++++++++---------
drivers/infiniband/hw/qib/qib_pcie.c | 25 +-
drivers/infiniband/hw/qib/qib_qp.c | 56 +++--
drivers/infiniband/hw/qib/qib_rc.c | 24 +-
drivers/infiniband/hw/qib/qib_ruc.c | 14 +-
drivers/infiniband/hw/qib/qib_sd7220.c | 41 ++--
drivers/infiniband/hw/qib/qib_sdma.c | 11 +-
drivers/infiniband/hw/qib/qib_sysfs.c | 246 +++++++++++++------
drivers/infiniband/hw/qib/qib_twsi.c | 8 +-
drivers/infiniband/hw/qib/qib_uc.c | 31 +--
drivers/infiniband/hw/qib/qib_ud.c | 12 +-
drivers/infiniband/hw/qib/qib_verbs.c | 66 +++++-
drivers/infiniband/hw/qib/qib_verbs.h | 56 +++--
drivers/infiniband/hw/qib/qib_wc_x86_64.c | 14 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/en_main.c | 5 +-
drivers/net/ethernet/mellanox/mlx4/eq.c | 22 +-
drivers/net/ethernet/mellanox/mlx4/fw.c | 132 ++++++++---
drivers/net/ethernet/mellanox/mlx4/icm.c | 2 +
drivers/net/ethernet/mellanox/mlx4/icm.h | 6 -
drivers/net/ethernet/mellanox/mlx4/intf.c | 5 +-
drivers/net/ethernet/mellanox/mlx4/main.c | 86 +++++--
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 67 +-----
drivers/net/ethernet/mellanox/mlx4/port.c | 11 +-
include/linux/mlx4/device.h | 119 +++++++++-
include/linux/mlx4/driver.h | 3 +-
include/rdma/ib_cm.h | 12 +
include/rdma/ib_sa.h | 33 +++
include/rdma/rdma_cm.h | 10 +
include/rdma/rdma_user_cm.h | 1 +
58 files changed, 2414 insertions(+), 911 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* RE: [GIT PULL] please pull infiniband.git
2012-06-24 12:09 Roland Dreier
@ 2012-06-25 14:11 ` Tziporet Koren
0 siblings, 0 replies; 223+ messages in thread
From: Tziporet Koren @ 2012-06-25 14:11 UTC (permalink / raw)
To: Roland Dreier, Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Roland
Can you updated us on status of review of our mlx4 SRIOV IB submission?
Thanks
Tziporet
-----Original Message-----
From: linux-rdma-owner@vger.kernel.org [mailto:linux-rdma-owner@vger.kernel.org] On Behalf Of Roland Dreier
Sent: Sunday, June 24, 2012 5:11 AM
To: Linus Torvalds
Cc: linux-rdma@vger.kernel.org; linux-kernel@vger.kernel.org
Subject: [GIT PULL] please pull infiniband.git
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-fixes
----------------------------------------------------------------
InfiniBand/RDMA fixes for 3.5-rc:
- Fixes to new ocrdma driver
- Typo in test in CMA
----------------------------------------------------------------
Dan Carpenter (1):
RDMA/ocrdma: Fix off by one in ocrdma_query_gid()
Mahesh Vardhamanaiah (2):
RDMA/ocrdma: Correct reported max queue sizes
RDMA/ocrdma: Correct queue SGE calculation
Parav Pandit (2):
RDMA/ocrdma: Fixed GID table for vlan and events
RDMA/ocrdma: Fixed RQ error CQE polling
Roland Dreier (1):
Merge branches 'cma' and 'ocrdma' into for-linus
Sean Hefty (1):
RDMA/cma: QP type check on received REQs should be AND not OR
drivers/infiniband/core/cma.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma.h | 1 +
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 18 ++++----
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 63 +++++++++++++++------------
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 5 ++-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 12 ++---
6 files changed, 55 insertions(+), 46 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-06-24 12:09 Roland Dreier
2012-06-25 14:11 ` Tziporet Koren
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2012-06-24 12:09 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-fixes
----------------------------------------------------------------
InfiniBand/RDMA fixes for 3.5-rc:
- Fixes to new ocrdma driver
- Typo in test in CMA
----------------------------------------------------------------
Dan Carpenter (1):
RDMA/ocrdma: Fix off by one in ocrdma_query_gid()
Mahesh Vardhamanaiah (2):
RDMA/ocrdma: Correct reported max queue sizes
RDMA/ocrdma: Correct queue SGE calculation
Parav Pandit (2):
RDMA/ocrdma: Fixed GID table for vlan and events
RDMA/ocrdma: Fixed RQ error CQE polling
Roland Dreier (1):
Merge branches 'cma' and 'ocrdma' into for-linus
Sean Hefty (1):
RDMA/cma: QP type check on received REQs should be AND not OR
drivers/infiniband/core/cma.c | 2 +-
drivers/infiniband/hw/ocrdma/ocrdma.h | 1 +
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 18 ++++----
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 63 +++++++++++++++------------
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 5 ++-
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 12 ++---
6 files changed, 55 insertions(+), 46 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
2012-05-21 1:14 Roland Dreier
2012-05-21 2:05 ` Stephen Rothwell
2012-05-21 16:07 ` Roland Dreier
@ 2012-06-06 17:44 ` Roland Dreier
2 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-06-06 17:44 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-fixes
----------------------------------------------------------------
InfiniBand/RDMA fixes for 3.5-rc2, all in hardware drivers:
- Fix crash in cxgb4
- Fixes to new ocrdma driver
- Regression fixes for mlx4
----------------------------------------------------------------
Devendra Naga (1):
RDMA/ocrdma: Remove unnecessary version.h includes
Jack Morgenstein (1):
mlx4_core: Fix setting VL_cap in mlx4_SET_PORT wrapper flow
Parav Pandit (2):
RDMA/ocrdma: Correct queue free count math
RDMA/ocrdma: Fix signaled event for SRQ_LIMIT_REACHED
Roland Dreier (1):
Merge branches 'cxgb4', 'mlx4' and 'ocrdma' into for-linus
Sagi Grimberg (1):
IB/mlx4: Fix max_wqe capacity reported from query device
Shlomo Pongratz (1):
IB/mlx4: Fix EQ deallocation in legacy mode
Thadeu Lima de Souza Cascardo (1):
RDMA/cxgb4: Fix crash when peer address is 0.0.0.0
drivers/infiniband/hw/cxgb4/cm.c | 4 ++++
drivers/infiniband/hw/mlx4/main.c | 21 ++++++++-------------
drivers/infiniband/hw/mlx4/mlx4_ib.h | 8 ++++++++
drivers/infiniband/hw/mlx4/qp.c | 21 +++++++++++++++------
drivers/infiniband/hw/ocrdma/ocrdma.h | 1 -
drivers/infiniband/hw/ocrdma/ocrdma_abi.h | 5 +----
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 9 +--------
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 1 -
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 5 -----
drivers/infiniband/hw/ocrdma/ocrdma_verbs.h | 1 -
drivers/net/ethernet/mellanox/mlx4/port.c | 4 ++--
11 files changed, 39 insertions(+), 41 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
2012-05-21 1:14 Roland Dreier
2012-05-21 2:05 ` Stephen Rothwell
@ 2012-05-21 16:07 ` Roland Dreier
2012-06-06 17:44 ` Roland Dreier
2 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-05-21 16:07 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
I updated my tag with the patch to fix powerpc build breakage with the
one-liner
RDMA/cxgb4: Include vmalloc.h for vmalloc and vfree
so the pull request now looks like the following.
Thanks,
Roland
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-3.5
----------------------------------------------------------------
InfiniBand/RDMA changes for the 3.5 merge window:
- Add ocrdma hardware driver for Emulex IB-over-Ethernet adapters
- Add generic and mlx4 support for "raw" QPs: allow suitably privileged
applications to send and receive arbitrary packets directly to/from
the hardware
- Add "doorbell drop" handling to the cxgb4 driver
- A fairly large batch of qib hardware driver changes
- A few fixes for lockdep-detected issues
- A few other miscellaneous fixes and cleanups
----------------------------------------------------------------
Dan Carpenter (2):
RDMA/ocrdma: Fix check for NULL instead of IS_ERR
RDMA/ocrdma: Tiny locking cleanup
Jack Morgenstein (3):
mlx4_core: Change bitmap allocator to work in round-robin fashion
IB/core: Fix IB_SA_COMP_MASK macro
IB/mlx4: Fix mlx4_ib_add() error flow
Jim Cromie (1):
IB/ipath: Replace open-coded ARRAY_SIZE with macro
Jim Foraker (2):
IB/qib: Fix M_Key lease timeout handling
IB/qib: MADs with misset M_Keys should return failure
Mike Marciniszyn (5):
IB/ipath: Replace open-coded ARRAY_SIZE with macro
MAINTAINERS: Update qib and ipath entries from QLogic to Intel
IB/qib: Add prefetch for eager buffers
IB/qib: Optimize pio ack buffer allocation
IB/qib: Add cache line awareness to qib_qp and qib_devdata structures
Mitko Haralanov (2):
IB/qib: Display correct value for number of contexts
IB/qib: Fix QLE734X link cycling
Or Gerlitz (4):
IB/core: Use qp->usecnt to track multicast attach/detach
IB/core: Add raw packet QP type
IB/mlx4: Add raw packet QP support
IB/iser: Fix error flow in iser ep connection establishment
Oren Duer (1):
IB/mlx4: Put priority bits in WQE of IBoE MLX QP
Parav Pandit (3):
be2net: Add function to issue mailbox cmd on MQ
be2net: Add functionality to support RoCE driver
RDMA/ocrdma: Add driver for Emulex OneConnect IBoE RDMA adapter
Roland Dreier (8):
IB/uverbs: Make lockdep output more readable
IB/uverbs: Lock SRQ / CQ / PD objects in a consistent order
RDMA/ocrdma: Fix warnings about uninitialized variables
RDMA/ocrdma: Make needlessly global functions/structs static
RDMA/ocrdma: Set event's device member in ocrdma_dispatch_ibevent()
RDMA/ocrdma: Remove write-only variables
RDMA/ocrdma: Fix build with IPV6=n
Merge branches 'core', 'cxgb4', 'ipath', 'iser', 'lockdep', 'mlx4', 'nes', 'ocrdma', 'qib' and 'raw-qp' into for-linus
Sasha Levin (1):
RDMA/ocrdma: Don't sleep in atomic notifier handler
Sean Hefty (1):
RDMA/cma: Fix lockdep false positive recursive locking
Shlomo Pongratz (3):
mlx4_core: Add second capabilities flags field
IB/mlx4: Replace printk(KERN_yyy...) with pr_yyy(...)
IB/mlx4: Increase the number of vectors (EQs) available for ULPs
Steve Wise (3):
RDMA/cxgb4: Use dst parameter in import_ep()
RDMA/cxgb4: Always wake up waiters in c4iw_peer_abort_intr()
RDMA/cxgb4: Drop peer_abort when no endpoint found
Tatyana Nikolova (2):
RDMA/nes: Fix for the ORD value of the connecting peer
RDMA/nes: Don't call event handler if pointer is NULL
Todd Rimmer (1):
IB/qib: Correct ordering of reregister vs. port active events
Vipul Pandya (11):
cxgb4: Detect DB FULL events and notify RDMA ULD
cxgb4: Common platform specific changes for DB Drop Recovery
cxgb4: DB Drop Recovery for RDMA and LLD queues
RDMA/cxgb4: Add debugfs RDMA memory stats
RDMA/cxgb4: Add DB Overflow Avoidance
RDMA/cxgb4: Disable interrupts in c4iw_ev_dispatch()
RDMA/cxgb4: DB Drop Recovery for RDMA and LLD queues
RDMA/cxgb4: Use vmalloc() for debugfs QP dump
RDMA/cxgb4: Remove kfifo usage
RDMA/cxgb4: Add query_qp support
RDMA/cxgb4: Include vmalloc.h for vmalloc and vfree
Yishai Hadas (1):
IB/core: Fix mismatch between locked and pinned pages
MAINTAINERS | 4 +-
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/cma.c | 42 +-
drivers/infiniband/core/umem.c | 2 +-
drivers/infiniband/core/uverbs_cmd.c | 108 +-
drivers/infiniband/core/verbs.c | 15 +-
drivers/infiniband/hw/cxgb4/Makefile | 2 +-
drivers/infiniband/hw/cxgb4/cm.c | 36 +-
drivers/infiniband/hw/cxgb4/device.c | 340 ++-
drivers/infiniband/hw/cxgb4/ev.c | 8 +-
drivers/infiniband/hw/cxgb4/id_table.c | 112 +
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 134 +-
drivers/infiniband/hw/cxgb4/mem.c | 21 +-
drivers/infiniband/hw/cxgb4/provider.c | 19 +-
drivers/infiniband/hw/cxgb4/qp.c | 105 +-
drivers/infiniband/hw/cxgb4/resource.c | 180 +-
drivers/infiniband/hw/cxgb4/t4.h | 24 +
drivers/infiniband/hw/cxgb4/user.h | 2 +-
drivers/infiniband/hw/ipath/ipath_iba6110.c | 3 +-
drivers/infiniband/hw/ipath/ipath_intr.c | 3 +-
drivers/infiniband/hw/mlx4/cq.c | 13 +-
drivers/infiniband/hw/mlx4/main.c | 104 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 2 +
drivers/infiniband/hw/mlx4/mr.c | 2 +-
drivers/infiniband/hw/mlx4/qp.c | 54 +-
drivers/infiniband/hw/mlx4/srq.c | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 7 +-
drivers/infiniband/hw/ocrdma/Kconfig | 8 +
drivers/infiniband/hw/ocrdma/Makefile | 5 +
drivers/infiniband/hw/ocrdma/ocrdma.h | 393 ++++
drivers/infiniband/hw/ocrdma/ocrdma_abi.h | 134 ++
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 172 ++
drivers/infiniband/hw/ocrdma/ocrdma_ah.h | 42 +
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 2640 +++++++++++++++++++++++
drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 132 ++
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 577 +++++
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 1672 ++++++++++++++
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 2537 ++++++++++++++++++++++
drivers/infiniband/hw/ocrdma/ocrdma_verbs.h | 94 +
drivers/infiniband/hw/qib/qib.h | 35 +-
drivers/infiniband/hw/qib/qib_driver.c | 5 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 1 +
drivers/infiniband/hw/qib/qib_iba7220.c | 1 +
drivers/infiniband/hw/qib/qib_iba7322.c | 3 +-
drivers/infiniband/hw/qib/qib_init.c | 3 +-
drivers/infiniband/hw/qib/qib_mad.c | 63 +-
drivers/infiniband/hw/qib/qib_qp.c | 7 +
drivers/infiniband/hw/qib/qib_rc.c | 4 +-
drivers/infiniband/hw/qib/qib_ruc.c | 12 +-
drivers/infiniband/hw/qib/qib_sysfs.c | 7 +-
drivers/infiniband/hw/qib/qib_tx.c | 25 +-
drivers/infiniband/hw/qib/qib_uc.c | 4 +-
drivers/infiniband/hw/qib/qib_ud.c | 16 +-
drivers/infiniband/hw/qib/qib_verbs.h | 145 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 5 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 3 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 23 +
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 235 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 11 +
drivers/net/ethernet/chelsio/cxgb4/sge.c | 22 +-
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 62 +-
drivers/net/ethernet/chelsio/cxgb4/t4_regs.h | 53 +
drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h | 15 +
drivers/net/ethernet/emulex/benet/Makefile | 2 +-
drivers/net/ethernet/emulex/benet/be.h | 38 +-
drivers/net/ethernet/emulex/benet/be_cmds.c | 39 +
drivers/net/ethernet/emulex/benet/be_cmds.h | 1 +
drivers/net/ethernet/emulex/benet/be_hw.h | 4 +-
drivers/net/ethernet/emulex/benet/be_main.c | 88 +-
drivers/net/ethernet/emulex/benet/be_roce.c | 182 ++
drivers/net/ethernet/emulex/benet/be_roce.h | 75 +
drivers/net/ethernet/mellanox/mlx4/alloc.c | 3 -
drivers/net/ethernet/mellanox/mlx4/fw.c | 29 +
drivers/net/ethernet/mellanox/mlx4/fw.h | 2 +
drivers/net/ethernet/mellanox/mlx4/main.c | 2 +
include/linux/mlx4/device.h | 8 +
include/linux/mlx4/qp.h | 3 +-
include/rdma/ib_mad.h | 2 +-
include/rdma/ib_verbs.h | 4 +-
80 files changed, 10547 insertions(+), 447 deletions(-)
create mode 100644 drivers/infiniband/hw/cxgb4/id_table.c
create mode 100644 drivers/infiniband/hw/ocrdma/Kconfig
create mode 100644 drivers/infiniband/hw/ocrdma/Makefile
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_abi.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_ah.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_ah.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_hw.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_hw.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_main.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_sli.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_verbs.h
create mode 100644 drivers/net/ethernet/emulex/benet/be_roce.c
create mode 100644 drivers/net/ethernet/emulex/benet/be_roce.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2012-05-21 2:35 ` Roland Dreier
@ 2012-05-21 3:39 ` Stephen Rothwell
0 siblings, 0 replies; 223+ messages in thread
From: Stephen Rothwell @ 2012-05-21 3:39 UTC (permalink / raw)
To: Roland Dreier; +Cc: Linus Torvalds, linux-kernel, linux-rdma
[-- Attachment #1: Type: text/plain, Size: 354 bytes --]
Hi Roland,
On Sun, 20 May 2012 19:35:30 -0700 Roland Dreier <roland@kernel.org> wrote:
>
> Sorry about that. Which commit in particular? The vmalloc one?
> What's the error?
Yeah, the vmalloc patch - see my linux-next build error report. Its just
missing an include.
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2012-05-21 2:05 ` Stephen Rothwell
@ 2012-05-21 2:35 ` Roland Dreier
2012-05-21 3:39 ` Stephen Rothwell
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2012-05-21 2:35 UTC (permalink / raw)
To: Stephen Rothwell; +Cc: Linus Torvalds, linux-kernel, linux-rdma
On Sun, May 20, 2012 at 7:05 PM, Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>> Vipul Pandya (10):
>> cxgb4: Detect DB FULL events and notify RDMA ULD
>> cxgb4: Common platform specific changes for DB Drop Recovery
>> cxgb4: DB Drop Recovery for RDMA and LLD queues
>> RDMA/cxgb4: Add debugfs RDMA memory stats
>> RDMA/cxgb4: Add DB Overflow Avoidance
>> RDMA/cxgb4: Disable interrupts in c4iw_ev_dispatch()
>> RDMA/cxgb4: DB Drop Recovery for RDMA and LLD queues
>> RDMA/cxgb4: Use vmalloc() for debugfs QP dump
> This commit breaks (at least) powerpc builds and has not bee in linux-next
> before today.
Sorry about that. Which commit in particular? The vmalloc one?
What's the error?
(I did add this patchset to my for-next branch on Friday at the
latest, but I understand if you didn't do a linux-next build over the
past 48 weekend hours :)
- R.
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2012-05-21 1:14 Roland Dreier
@ 2012-05-21 2:05 ` Stephen Rothwell
2012-05-21 2:35 ` Roland Dreier
2012-05-21 16:07 ` Roland Dreier
2012-06-06 17:44 ` Roland Dreier
2 siblings, 1 reply; 223+ messages in thread
From: Stephen Rothwell @ 2012-05-21 2:05 UTC (permalink / raw)
To: Roland Dreier; +Cc: Linus Torvalds, linux-kernel, linux-rdma
[-- Attachment #1: Type: text/plain, Size: 780 bytes --]
Hi Roland,
On Sun, 20 May 2012 18:14:28 -0700 Roland Dreier <roland@kernel.org> wrote:
>
> Vipul Pandya (10):
> cxgb4: Detect DB FULL events and notify RDMA ULD
> cxgb4: Common platform specific changes for DB Drop Recovery
> cxgb4: DB Drop Recovery for RDMA and LLD queues
> RDMA/cxgb4: Add debugfs RDMA memory stats
> RDMA/cxgb4: Add DB Overflow Avoidance
> RDMA/cxgb4: Disable interrupts in c4iw_ev_dispatch()
> RDMA/cxgb4: DB Drop Recovery for RDMA and LLD queues
> RDMA/cxgb4: Use vmalloc() for debugfs QP dump
This commit breaks (at least) powerpc builds and has not bee in linux-next
before today.
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-05-21 1:14 Roland Dreier
2012-05-21 2:05 ` Stephen Rothwell
` (2 more replies)
0 siblings, 3 replies; 223+ messages in thread
From: Roland Dreier @ 2012-05-21 1:14 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-3.5
----------------------------------------------------------------
InfiniBand/RDMA changes for the 3.5 merge window:
- Add ocrdma hardware driver for Emulex IB-over-Ethernet adapters
- Add generic and mlx4 support for "raw" QPs: allow suitably privileged
applications to send and receive arbitrary packets directly to/from
the hardware
- Add "doorbell drop" handling to the cxgb4 driver
- A fairly large batch of qib hardware driver changes
- A few fixes for lockdep-detected issues
- A few other miscellaneous fixes and cleanups
----------------------------------------------------------------
Dan Carpenter (2):
RDMA/ocrdma: Fix check for NULL instead of IS_ERR
RDMA/ocrdma: Tiny locking cleanup
Jack Morgenstein (3):
mlx4_core: Change bitmap allocator to work in round-robin fashion
IB/core: Fix IB_SA_COMP_MASK macro
IB/mlx4: Fix mlx4_ib_add() error flow
Jim Cromie (1):
IB/ipath: Replace open-coded ARRAY_SIZE with macro
Jim Foraker (2):
IB/qib: Fix M_Key lease timeout handling
IB/qib: MADs with misset M_Keys should return failure
Mike Marciniszyn (5):
IB/ipath: Replace open-coded ARRAY_SIZE with macro
MAINTAINERS: Update qib and ipath entries from QLogic to Intel
IB/qib: Add prefetch for eager buffers
IB/qib: Optimize pio ack buffer allocation
IB/qib: Add cache line awareness to qib_qp and qib_devdata structures
Mitko Haralanov (2):
IB/qib: Display correct value for number of contexts
IB/qib: Fix QLE734X link cycling
Or Gerlitz (4):
IB/core: Use qp->usecnt to track multicast attach/detach
IB/core: Add raw packet QP type
IB/mlx4: Add raw packet QP support
IB/iser: Fix error flow in iser ep connection establishment
Oren Duer (1):
IB/mlx4: Put priority bits in WQE of IBoE MLX QP
Parav Pandit (3):
be2net: Add function to issue mailbox cmd on MQ
be2net: Add functionality to support RoCE driver
RDMA/ocrdma: Add driver for Emulex OneConnect IBoE RDMA adapter
Roland Dreier (8):
IB/uverbs: Make lockdep output more readable
IB/uverbs: Lock SRQ / CQ / PD objects in a consistent order
RDMA/ocrdma: Fix warnings about uninitialized variables
RDMA/ocrdma: Make needlessly global functions/structs static
RDMA/ocrdma: Set event's device member in ocrdma_dispatch_ibevent()
RDMA/ocrdma: Remove write-only variables
RDMA/ocrdma: Fix build with IPV6=n
Merge branches 'core', 'cxgb4', 'ipath', 'iser', 'lockdep', 'mlx4', 'nes', 'ocrdma', 'qib' and 'raw-qp' into for-linus
Sasha Levin (1):
RDMA/ocrdma: Don't sleep in atomic notifier handler
Sean Hefty (1):
RDMA/cma: Fix lockdep false positive recursive locking
Shlomo Pongratz (3):
mlx4_core: Add second capabilities flags field
IB/mlx4: Replace printk(KERN_yyy...) with pr_yyy(...)
IB/mlx4: Increase the number of vectors (EQs) available for ULPs
Steve Wise (3):
RDMA/cxgb4: Use dst parameter in import_ep()
RDMA/cxgb4: Always wake up waiters in c4iw_peer_abort_intr()
RDMA/cxgb4: Drop peer_abort when no endpoint found
Tatyana Nikolova (2):
RDMA/nes: Fix for the ORD value of the connecting peer
RDMA/nes: Don't call event handler if pointer is NULL
Todd Rimmer (1):
IB/qib: Correct ordering of reregister vs. port active events
Vipul Pandya (10):
cxgb4: Detect DB FULL events and notify RDMA ULD
cxgb4: Common platform specific changes for DB Drop Recovery
cxgb4: DB Drop Recovery for RDMA and LLD queues
RDMA/cxgb4: Add debugfs RDMA memory stats
RDMA/cxgb4: Add DB Overflow Avoidance
RDMA/cxgb4: Disable interrupts in c4iw_ev_dispatch()
RDMA/cxgb4: DB Drop Recovery for RDMA and LLD queues
RDMA/cxgb4: Use vmalloc() for debugfs QP dump
RDMA/cxgb4: Remove kfifo usage
RDMA/cxgb4: Add query_qp support
Yishai Hadas (1):
IB/core: Fix mismatch between locked and pinned pages
MAINTAINERS | 4 +-
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/cma.c | 42 +-
drivers/infiniband/core/umem.c | 2 +-
drivers/infiniband/core/uverbs_cmd.c | 108 +-
drivers/infiniband/core/verbs.c | 15 +-
drivers/infiniband/hw/cxgb4/Makefile | 2 +-
drivers/infiniband/hw/cxgb4/cm.c | 36 +-
drivers/infiniband/hw/cxgb4/device.c | 339 ++-
drivers/infiniband/hw/cxgb4/ev.c | 8 +-
drivers/infiniband/hw/cxgb4/id_table.c | 112 +
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 134 +-
drivers/infiniband/hw/cxgb4/mem.c | 21 +-
drivers/infiniband/hw/cxgb4/provider.c | 19 +-
drivers/infiniband/hw/cxgb4/qp.c | 105 +-
drivers/infiniband/hw/cxgb4/resource.c | 180 +-
drivers/infiniband/hw/cxgb4/t4.h | 24 +
drivers/infiniband/hw/cxgb4/user.h | 2 +-
drivers/infiniband/hw/ipath/ipath_iba6110.c | 3 +-
drivers/infiniband/hw/ipath/ipath_intr.c | 3 +-
drivers/infiniband/hw/mlx4/cq.c | 13 +-
drivers/infiniband/hw/mlx4/main.c | 104 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 2 +
drivers/infiniband/hw/mlx4/mr.c | 2 +-
drivers/infiniband/hw/mlx4/qp.c | 54 +-
drivers/infiniband/hw/mlx4/srq.c | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 7 +-
drivers/infiniband/hw/ocrdma/Kconfig | 8 +
drivers/infiniband/hw/ocrdma/Makefile | 5 +
drivers/infiniband/hw/ocrdma/ocrdma.h | 393 ++++
drivers/infiniband/hw/ocrdma/ocrdma_abi.h | 134 ++
drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 172 ++
drivers/infiniband/hw/ocrdma/ocrdma_ah.h | 42 +
drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 2640 +++++++++++++++++++++++
drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 132 ++
drivers/infiniband/hw/ocrdma/ocrdma_main.c | 577 +++++
drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 1672 ++++++++++++++
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 2537 ++++++++++++++++++++++
drivers/infiniband/hw/ocrdma/ocrdma_verbs.h | 94 +
drivers/infiniband/hw/qib/qib.h | 35 +-
drivers/infiniband/hw/qib/qib_driver.c | 5 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 1 +
drivers/infiniband/hw/qib/qib_iba7220.c | 1 +
drivers/infiniband/hw/qib/qib_iba7322.c | 3 +-
drivers/infiniband/hw/qib/qib_init.c | 3 +-
drivers/infiniband/hw/qib/qib_mad.c | 63 +-
drivers/infiniband/hw/qib/qib_qp.c | 7 +
drivers/infiniband/hw/qib/qib_rc.c | 4 +-
drivers/infiniband/hw/qib/qib_ruc.c | 12 +-
drivers/infiniband/hw/qib/qib_sysfs.c | 7 +-
drivers/infiniband/hw/qib/qib_tx.c | 25 +-
drivers/infiniband/hw/qib/qib_uc.c | 4 +-
drivers/infiniband/hw/qib/qib_ud.c | 16 +-
drivers/infiniband/hw/qib/qib_verbs.h | 145 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 5 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 3 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 23 +
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 235 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h | 11 +
drivers/net/ethernet/chelsio/cxgb4/sge.c | 22 +-
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 62 +-
drivers/net/ethernet/chelsio/cxgb4/t4_regs.h | 53 +
drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h | 15 +
drivers/net/ethernet/emulex/benet/Makefile | 2 +-
drivers/net/ethernet/emulex/benet/be.h | 38 +-
drivers/net/ethernet/emulex/benet/be_cmds.c | 39 +
drivers/net/ethernet/emulex/benet/be_cmds.h | 1 +
drivers/net/ethernet/emulex/benet/be_hw.h | 4 +-
drivers/net/ethernet/emulex/benet/be_main.c | 88 +-
drivers/net/ethernet/emulex/benet/be_roce.c | 182 ++
drivers/net/ethernet/emulex/benet/be_roce.h | 75 +
drivers/net/ethernet/mellanox/mlx4/alloc.c | 3 -
drivers/net/ethernet/mellanox/mlx4/fw.c | 29 +
drivers/net/ethernet/mellanox/mlx4/fw.h | 2 +
drivers/net/ethernet/mellanox/mlx4/main.c | 2 +
include/linux/mlx4/device.h | 8 +
include/linux/mlx4/qp.h | 3 +-
include/rdma/ib_mad.h | 2 +-
include/rdma/ib_verbs.h | 4 +-
80 files changed, 10546 insertions(+), 447 deletions(-)
create mode 100644 drivers/infiniband/hw/cxgb4/id_table.c
create mode 100644 drivers/infiniband/hw/ocrdma/Kconfig
create mode 100644 drivers/infiniband/hw/ocrdma/Makefile
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_abi.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_ah.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_ah.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_hw.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_hw.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_main.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_sli.h
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
create mode 100644 drivers/infiniband/hw/ocrdma/ocrdma_verbs.h
create mode 100644 drivers/net/ethernet/emulex/benet/be_roce.c
create mode 100644 drivers/net/ethernet/emulex/benet/be_roce.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-04-26 17:39 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-04-26 17:39 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/ib-fixes
----------------------------------------------------------------
A few fixes for regressions introduced in 3.4-rc1:
- fix memory leak in mlx4
- fix two problems with new MAD response generation code
----------------------------------------------------------------
Jack Morgenstein (2):
IB/mad: Set 'D' bit in response for unhandled MADs
IB/mad: Don't send response for failed MADs
Jesper Juhl (1):
IB/mlx4: Fix memory leaks in ib_link_query_port()
Roland Dreier (1):
Merge branches 'mad-response' and 'mlx4' into fixes
drivers/infiniband/core/mad.c | 8 +++++---
drivers/infiniband/hw/mlx4/main.c | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-04-12 23:45 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-04-12 23:45 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, target-devel, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/srpt-srq-type fixes
----------------------------------------------------------------
Add a fix for a bug hit by Alexey Shvetsov in ib_srtp that hits on
non-mlx4 hardware.
----------------------------------------------------------------
Roland Dreier (1):
IB/srpt: Set srq_type to IB_SRQT_BASIC
drivers/infiniband/ulp/srpt/ib_srpt.c | 1 +
1 file changed, 1 insertion(+)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-04-11 20:07 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-04-11 20:07 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git tags/rdma-for-linus
----------------------------------------------------------------
Fix regression in the /sys/class/infiniband/.../rate attribute -- old
kernels used to just return something, even if the underlying value was
out-of-bounds, while 3.4-rc1 returned EINVAL to userspace. This breaks
some applications that check for the error, so go back to the old
behavior.
----------------------------------------------------------------
Or Gerlitz (1):
IB/mlx4: Don't return an invalid speed when a port is down
Roland Dreier (1):
IB/core: Don't return EINVAL from sysfs rate attribute for invalid speeds
drivers/infiniband/core/sysfs.c | 9 +++++----
drivers/infiniband/hw/mlx4/main.c | 5 +++++
2 files changed, 10 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* RE: [GIT PULL] please pull infiniband.git
2012-03-26 21:13 ` Roland Dreier
@ 2012-03-27 16:33 ` Tziporet Koren
0 siblings, 0 replies; 223+ messages in thread
From: Tziporet Koren @ 2012-03-27 16:33 UTC (permalink / raw)
To: Roland Dreier; +Cc: Linus Torvalds, linux-kernel, linux-rdma
>> What about the IPoIB patches (e.g. use Interrupt moderation)
> I have no idea what patch that might be. We've had the modify_cq call in ipoib for years now, with moderation parameters set through ethtool.
http://www.spinics.net/lists/linux-rdma/msg09142.html
and
http://www.spinics.net/lists/linux-rdma/msg09143.html
Tziporet
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2012-03-26 21:04 ` Tziporet Koren
@ 2012-03-26 21:13 ` Roland Dreier
2012-03-27 16:33 ` Tziporet Koren
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2012-03-26 21:13 UTC (permalink / raw)
To: Tziporet Koren; +Cc: Linus Torvalds, linux-kernel, linux-rdma
On Mon, Mar 26, 2012 at 2:04 PM, Tziporet Koren <tziporet@mellanox.com> wrote:
> What about the IPoIB patches (e.g. use Interrupt moderation)
I have no idea what patch that might be. We've had the modify_cq call
in ipoib for years now,
with moderation parameters set through ethtool.
- R.
^ permalink raw reply [flat|nested] 223+ messages in thread
* RE: [GIT PULL] please pull infiniband.git
2012-03-19 17:11 Roland Dreier
@ 2012-03-26 21:04 ` Tziporet Koren
2012-03-26 21:13 ` Roland Dreier
0 siblings, 1 reply; 223+ messages in thread
From: Tziporet Koren @ 2012-03-26 21:04 UTC (permalink / raw)
To: Roland Dreier, Linus Torvalds; +Cc: linux-kernel, linux-rdma
Roland
What about the IPoIB patches (e.g. use Interrupt moderation)
Regards,
Tziporet
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-03-19 17:11 Roland Dreier
2012-03-26 21:04 ` Tziporet Koren
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2012-03-19 17:11 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA changes for the 3.4 merge window. Nothing big really
stands out; by patch count lots of fixes to the mlx4 driver plus some
cleanups and fixes to the core and other drivers.
----------------------------------------------------------------
Bart Van Assche (2):
IB/srp: Use pr_fmt() and pr_err()/pr_warn()
IB/srp: Consolidate repetitive sysfs code
Doug Ledford (1):
IB/iser: Free IB connection resources in the proper place
Eli Cohen (3):
IB/mlx4: Set bad_wr for invalid send opcode
mlx4: Enforce device max FMR maps in FMR alloc
IB/mlx4: Fix possible missed completion event
Eric Dumazet (1):
IB/ehca: Use kthread_create_on_node()
Hefty, Sean (1):
RDMA/ucma: Fix AB-BA deadlock
Jack Morgenstein (1):
mlx4_core: Report thermal error events
Kumar Sanghvi (1):
RDMA/cxgb4: Add missing peer2peer check in MPAv2 code
Kyle McMartin (1):
IB/ehca: Fix ilog2() compile failure
Masanari Iida (1):
IB/srpt: Fix typo "alocate" -> "allocate"
Mike Marciniszyn (2):
IB/qib: Add logic for affinity hint
IB/qib: Avoid filtering LID on SMA portinfo
Or Gerlitz (6):
IB/iser: Post initial receive buffers before sending the final login request
IB: Use central enum for speed instead of hard-coded values
mlx4_core: Get rid of redundant ext_port_cap flags
IB: Change CQE "csum_ok" field to a bit flag
IB/mlx4: Fix info returned when querying IBoE ports
mlx4_core: Allow dynamic MTU configuration for IB ports
Roland Dreier (5):
IB/core: Fix SDR rates in sysfs
mlx4_core: Fix one more static exported function
mlx4_core: Scale size of MTT table with system RAM
Merge branches 'misc' and 'mlx4' into for-next
Merge branches 'cma', 'cxgb3', 'cxgb4', 'ehca', 'iser', 'mad', 'nes', 'qib', 'srp' and 'srpt' into for-next
Steve Wise (2):
RDMA/cxgb3: Don't pass irq flags to flush_qp()
RDMA/iwcm: Reject connect requests if cmid is not in LISTEN state
Swapna Thete (2):
IB/mad: Add MAD error codes from IBA spec
IB/mad: Return error response for unsupported MADs
Tatyana Nikolova (1):
RDMA/nes: Fixes for sparse endianness warnings
drivers/infiniband/core/iwcm.c | 24 +++--
drivers/infiniband/core/mad.c | 21 ++++
drivers/infiniband/core/sysfs.c | 27 +++---
drivers/infiniband/core/ucma.c | 37 ++++----
drivers/infiniband/hw/amso1100/c2_provider.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 40 ++++----
drivers/infiniband/hw/cxgb4/cm.c | 2 +-
drivers/infiniband/hw/cxgb4/provider.c | 2 +-
drivers/infiniband/hw/ehca/ehca_hca.c | 2 +-
drivers/infiniband/hw/ehca/ehca_irq.c | 3 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 2 +-
drivers/infiniband/hw/mlx4/cq.c | 6 +-
drivers/infiniband/hw/mlx4/main.c | 130 +++++++++++++------------
drivers/infiniband/hw/mlx4/qp.c | 1 +
drivers/infiniband/hw/mthca/mthca_cq.c | 3 +-
drivers/infiniband/hw/nes/nes_cm.c | 39 +++++----
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
drivers/infiniband/hw/qib/qib.h | 10 ++-
drivers/infiniband/hw/qib/qib_iba7322.c | 107 +++++++++++++++------
drivers/infiniband/hw/qib/qib_mad.c | 4 +-
drivers/infiniband/hw/qib/qib_pcie.c | 21 ++++-
drivers/infiniband/hw/qib/qib_rc.c | 1 -
drivers/infiniband/hw/qib/qib_uc.c | 1 -
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 3 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 18 +---
drivers/infiniband/ulp/iser/iscsi_iser.h | 1 +
drivers/infiniband/ulp/iser/iser_initiator.c | 42 ++++-----
drivers/infiniband/ulp/iser/iser_verbs.c | 12 +++
drivers/infiniband/ulp/srp/ib_srp.c | 103 +++++++++-----------
drivers/infiniband/ulp/srpt/ib_srpt.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/eq.c | 32 ++++++-
drivers/net/ethernet/mellanox/mlx4/main.c | 126 +++++++++++++++++++++++--
drivers/net/ethernet/mellanox/mlx4/mlx4.h | 9 ++-
drivers/net/ethernet/mellanox/mlx4/mr.c | 3 +
drivers/net/ethernet/mellanox/mlx4/port.c | 68 +++++---------
drivers/net/ethernet/mellanox/mlx4/profile.c | 19 ++++
include/linux/mlx4/device.h | 12 ++-
include/rdma/ib_mad.h | 9 ++
include/rdma/ib_verbs.h | 11 ++-
40 files changed, 607 insertions(+), 352 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-02-25 2:32 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-02-25 2:32 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git rdma-for-linus
----------------------------------------------------------------
One InfiniBand/RDMA regression fix for 3.3:
- mlx4 SR-IOV changes added static exported functions, which doesn't
build on powerpc at least. Fix from Doug Ledford for this.
----------------------------------------------------------------
Doug Ledford (1):
mlx4_core: Exported functions can't be static
drivers/net/ethernet/mellanox/mlx4/fw.c | 2 +-
drivers/net/ethernet/mellanox/mlx4/mr.c | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-02-07 17:34 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-02-07 17:34 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, target-devel, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git ib-srpt-fixes
This will get a few small cleanups and fixes for the srpt fabric
driver. The driver is new for 3.3 so it makes sense to get this in
before the first release.
----------------------------------------------------------------
Cleanups and error path fixes for the new SRP (SCSI RDMA protocol) target.
----------------------------------------------------------------
Dan Carpenter (1):
IB/srpt: Fix ERR_PTR() vs. NULL checking confusion
Jesper Juhl (2):
IB/srpt: Remove unneeded <linux/version.h> include
IB/srpt: Don't return freed pointer from srpt_alloc_ioctx_ring()
Roland Dreier (2):
IB/srpt: Use DEFINE_SPINLOCK()/LIST_HEAD()
IB/srpt: Use ARRAY_SIZE() instead of open-coding
drivers/infiniband/ulp/srpt/ib_srpt.c | 17 +++++++----------
drivers/infiniband/ulp/srpt/ib_srpt.h | 1 -
2 files changed, 7 insertions(+), 11 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-02-01 6:36 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-02-01 6:36 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git rdma-for-linus
----------------------------------------------------------------
InfiniBand/RDMA fixes for 3.3:
- Fix a crash due to a regression (uninitialized refcnt) introduced in
3.2 with XRC support.
- Close race in how ucma reports events when connect fails.
- Process vendor-specific MADs in mlx4 so that eg FDR-10 data rate works.
- Fix regression in qib caused by over-aggressive PCIe tuning.
- Other small fixes for hardware drivers (ipath, nes, qib).
----------------------------------------------------------------
Bernd Schubert (1):
RDMA/core: Fix kernel panic by always initializing qp->usecnt
Dan Carpenter (1):
IB/ipath: Calling PTR_ERR() on right variable in create_file()
Jack Morgenstein (1):
IB/mlx4: pass SMP vendor-specific attribute MADs to firmware
Julia Lawall (1):
IB/qib: Use GFP_ATOMIC when locks are held
Mike Marciniszyn (1):
IB/qib: Roll back PCIe tuning change
Roland Dreier (2):
RDMA/nes: Add missing rcu_read_unlock() in nes_addr_resolve_neigh()
Merge branches 'cma', 'ipath', 'misc', 'mlx4', 'nes' and 'qib' into for-next
Sean Hefty (1):
RDMA/ucma: Discard all events for new connections until accepted
Tatyana Nikolova (4):
RDMA/nes: Fix for sending MPA reject frame
RDMA/nes: Fix fast memory registration length
RDMA/nes: Fix fast memory registration opcode
RDMA/nes: Copyright update
drivers/infiniband/core/ucma.c | 5 ++++-
drivers/infiniband/core/uverbs_cmd.c | 1 +
drivers/infiniband/core/verbs.c | 2 +-
drivers/infiniband/hw/ipath/ipath_fs.c | 2 +-
drivers/infiniband/hw/mlx4/mad.c | 7 ++-----
drivers/infiniband/hw/nes/nes.c | 2 +-
drivers/infiniband/hw/nes/nes.h | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 10 +++++++---
drivers/infiniband/hw/nes/nes_cm.h | 2 +-
drivers/infiniband/hw/nes/nes_context.h | 2 +-
drivers/infiniband/hw/nes/nes_hw.c | 2 +-
drivers/infiniband/hw/nes/nes_hw.h | 2 +-
drivers/infiniband/hw/nes/nes_mgt.c | 2 +-
drivers/infiniband/hw/nes/nes_mgt.h | 2 +-
drivers/infiniband/hw/nes/nes_nic.c | 2 +-
drivers/infiniband/hw/nes/nes_user.h | 2 +-
drivers/infiniband/hw/nes/nes_utils.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 6 ++++--
drivers/infiniband/hw/nes/nes_verbs.h | 2 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 2 +-
drivers/infiniband/hw/qib/qib_pcie.c | 2 +-
21 files changed, 34 insertions(+), 27 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2012-01-06 17:38 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2012-01-06 17:38 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
[Trying the signed tag thing for the first time here]
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git infiniband-for-linus
This will get my small batch of stuff for 3.3:
- Fix for userspace-provokable multicast membership list corruption
- Fix for CM protocol message layout
- Fixes and cleanups for qib hardware driver
- Fixes and cleanup for nes hardware driver
- Fix for mlx4 handling of Ethernet priority bits
- Fix for bugs and warnings found by sparse in core code
Eli Cohen (2):
IB/uverbs: Protect QP multicast list
IB/cm: Fix layout of APR message
Mike Marciniszyn (4):
IB/qib: Fix style issues
IB/qib: Eliminate 64-bit jiffies use
IB/qib: Optimize locking for get_txreq()
IB/qib: Default some module parameters optimally
Or Gerlitz (1):
IB/mlx4: Fix SL to 802.1Q priority-bits mapping for IBoE
Ram Vepa (1):
IB/qib: Fix a possible data corruption when receiving packets
Roland Dreier (1):
Merge branches 'cma', 'misc', 'mlx4', 'nes', 'qib' and 'uverbs' into for-next
Sean Hefty (2):
RDMA/cma: Fix endianness bugs
rdma/core: Fix sparse warnings
Tatyana Nikolova (3):
RDMA/nes: Change MDIO bus clock to 2.5MHz
RDMA/nes: Make unnecessarily global nes_set_pau() static
RDMA/nes: Fix terminate during AE
drivers/infiniband/core/cm_msgs.h | 1 +
drivers/infiniband/core/cma.c | 6 ++--
drivers/infiniband/core/ucm.c | 3 --
drivers/infiniband/core/uverbs_cmd.c | 27 ++++++++++++++-----
drivers/infiniband/hw/mlx4/ah.c | 2 +-
drivers/infiniband/hw/mlx4/cq.c | 6 +++-
drivers/infiniband/hw/mlx4/qp.c | 4 +-
drivers/infiniband/hw/nes/nes_cm.c | 1 +
drivers/infiniband/hw/nes/nes_hw.c | 6 +---
drivers/infiniband/hw/nes/nes_utils.c | 2 +-
drivers/infiniband/hw/qib/qib_7220.h | 2 +-
drivers/infiniband/hw/qib/qib_driver.c | 3 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 4 ++-
drivers/infiniband/hw/qib/qib_iba7220.c | 10 ++++---
drivers/infiniband/hw/qib/qib_iba7322.c | 40 ++++++++++++++--------------
drivers/infiniband/hw/qib/qib_init.c | 2 +-
drivers/infiniband/hw/qib/qib_pcie.c | 4 +-
drivers/infiniband/hw/qib/qib_qsfp.h | 2 +-
drivers/infiniband/hw/qib/qib_sd7220.c | 2 +-
drivers/infiniband/hw/qib/qib_sysfs.c | 2 +-
drivers/infiniband/hw/qib/qib_verbs.c | 43 +++++++++++++++++++++++-------
include/rdma/ib_addr.h | 2 +-
include/rdma/ib_cm.h | 3 ++
23 files changed, 109 insertions(+), 68 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-12-19 17:39 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-12-19 17:39 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few last fixes:
- Fix for crash on mlx4 module unload
- Fix for crash on too-long private data in RDMA CM
- Trivial fix for context counting bug in qib
Thanks!
Mike Marciniszyn (1):
IB/qib: Correct sense on freectxts increment and decrement
Roland Dreier (2):
IB/mlx4: Fix shutdown crash accessing a non-existent bitmap
Merge branches 'cma', 'mlx4' and 'qib' into for-next
Sean Hefty (1):
RDMA/cma: Verify private data length
drivers/infiniband/core/cma.c | 6 ++++++
drivers/infiniband/hw/mlx4/main.c | 6 ++++--
drivers/infiniband/hw/qib/qib_file_ops.c | 4 ++--
3 files changed, 12 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-11-30 17:50 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-11-30 17:50 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few fixes:
- Fixes for missing RCU read locking due to net neighbour changes
- Fix for IPoIB softlockup in error path
- Low-level driver fixes to cxgb4 and qib
Thanks!
Eric Dumazet (1):
IB: Fix RCU lockdep splats
Jonathan Lallinger (1):
RDMA/cxgb4: Fix iw_cxgb4 count_rcqes() logic
Kumar Sanghvi (1):
RDMA/cxgb4: Fix retry with MPAv1 logic for MPAv2
Mike Marciniszyn (3):
IB/qib: Don't use schedule_work()
IB/qib: Fix over-scheduling of QSFP work
IB/ipoib: Prevent hung task or softlockup processing multicast response
Roland Dreier (1):
Merge branches 'cxgb4', 'ipoib', 'misc' and 'qib' into for-next
drivers/infiniband/core/addr.c | 9 ++++++---
drivers/infiniband/hw/cxgb3/iwch_cm.c | 4 ++++
drivers/infiniband/hw/cxgb4/cm.c | 10 +++++++++-
drivers/infiniband/hw/cxgb4/cq.c | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 6 ++++--
drivers/infiniband/hw/qib/qib_iba7322.c | 18 +++++++++---------
drivers/infiniband/hw/qib/qib_qsfp.c | 12 ------------
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 13 ++++++++-----
drivers/infiniband/ulp/ipoib/ipoib_main.c | 20 ++++++++++++--------
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 13 +++++++++----
10 files changed, 62 insertions(+), 45 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-11-04 18:26 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-11-04 18:26 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few more 3.2 merge window changes:
- a panic fix for the qib hardware driver
- a couple of cleanups to iSER's use of the DMA mapping API
- a fix to mthca that reduces memory use a bit
Mike Marciniszyn (1):
IB/qib: Fix panic in RC error flushing logic
Or Gerlitz (2):
IB/iser: Use separate buffers for the login request/response
IB/iser: DMA unmap TX bufs used for iSCSI/iSER headers
Roland Dreier (2):
IB/mthca: Fix buddy->num_free allocation size
Merge branches 'iser', 'mthca' and 'qib' into for-next
drivers/infiniband/hw/mthca/mthca_mr.c | 2 +-
drivers/infiniband/hw/qib/qib_rc.c | 10 ++-----
drivers/infiniband/ulp/iser/iscsi_iser.c | 11 ++++++--
drivers/infiniband/ulp/iser/iscsi_iser.h | 4 +-
drivers/infiniband/ulp/iser/iser_initiator.c | 31 ++++++++++++++++++-----
drivers/infiniband/ulp/iser/iser_verbs.c | 33 ++++++++++++++++++++-----
6 files changed, 64 insertions(+), 27 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-11-01 16:54 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-11-01 16:54 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
From: Roland Dreier <roland@kernel.org>
Hi Linus,
Please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the main batch of changes for 3.2. One note: my tree is
based on 3.1-rc9, and I have some changes to drivers/net/mlx4, but in
your tree that driver has moved to drivers/net/ethernet/mellanox/mlx4.
With a high enough merge.renamelimit, git handles this merge fine in
my test, so I'm assuming you would want to do the merge yourself.
Anyway, the main things here are:
- Finally we get XRC support upstream, thanks to Sean Hefty's
cleaning up of the series.
- MPAv2 support for iWARP devices, which makes negotiating limits
during connection much cleaner.
- Support for reporting new higher link speeds (FDR, FDR-10, EDR).
- Optimizations to the qib driver.
- Various fixes and cleanups, mostly to low-level hardware drivers.
Andy Shevchenko (1):
RDMA/amso1100: Use '%pM' format option to print MAC
Dotan Barak (2):
mlx4_core: Use the right function to free eq->page_list entries
IPoIB: Use the right function to do DMA unmap pages
Eli Cohen (1):
mlx4_core: Fix buddy->num_free allocation size
Faisal Latif (3):
RDMA/nes: Fix terminate connection
RDMA/nes: Print IP address for critcal errors
RDMA/nes: Support for Packed And Unaligned fpdus
Hefty, Sean (4):
RDMA/cma: Fix crash in cma_req_handler
RDMA/cma: Check for NULL conn_param in rdma_accept
IB/mad: Verify mgmt class in received MADs
RDMA/ucm: Removed checks for unsigned value < 0
Jonathan Lallinger (1):
RDMA/cxgb4: Use correct QID in insert_recv_cqe()
Julia Lawall (1):
RDMA/nes: Add missing calls to ib_umem_release()
Kumar Sanghvi (6):
RDMA/iwcm: Propagate ird/ord values upwards
RDMA/{amso1100,cxgb3}: Minimal MPAv2 support
RDMA/cxgb4: Add support for MPAv2 Enhanced RDMA Negotiation
RDMA/cxgb4: Make sure flush CQ entries are collected on connection close
RDMA/cxgb3: Serialize calls to CQ's comp_handler
RDMA/cxgb4: Serialize calls to CQ's comp_handler
Marcel Apfelbaum (4):
IB: Add new InfiniBand link speeds
IPoIB: Handle extended rates in debugfs
mlx4_core: Add extended port capabilities support
IB/mlx4: Configure extended active speeds
Mike Marciniszyn (8):
IB/qib: Correct nfreectxts for multiple HCAs
IB/qib: Optimize RC/UC code by IB operation
IB/qib: Decode path MTU optimization
IB/qib: Eliminate divide/mod in converting idx to egr buf pointer
IB/qib: Use RCU for qpn lookup
IB/qib: Precompute timeout jiffies to optimize latency
IB/qib: Remove s_lock around header validation
IB/qib: Clean up checkpatch issue
Mitko Haralanov (2):
IB/qib: Hold links until tuning data is available
IB/qib: Fix issue with link states and QSFP cables
Or Gerlitz (3):
IB/mlx4: Enable 4K mtu for IBoE
IB/mlx4: Don't set VLAN in IBoE WQEs' control segment
mlx4_core: Deprecate log_num_vlan module param
Randy Dunlap (1):
IB/ipath: Add missing <linux/stat.h> in ipath_chip_init.c
Roland Dreier (2):
mlx4_core: Clean up error flow in mlx4_register_mac()
Merge branches 'amso1100', 'cma', 'cxgb3', 'cxgb4', 'fdr', 'ipath', 'ipoib', 'misc', 'mlx4', 'misc', 'nes', 'qib' and 'xrc' into for-next
Sean Hefty (20):
RDMA/core: Add XRC domain support
RDMA/core: Add SRQ type field
RDMA/core: Add XRC SRQ type
RDMA/core: Add XRC QPs
RDMA/verbs: Cleanup XRC TGT QPs when destroying XRCD
RDMA/uverbs: Export XRC domains to user space
RDMA/uverbs: Export XRC SRQs to user space
RDMA/uverbs: Export XRC INI QPs to userspace
RDMA/uverbs: Export XRC TGT QPs to user space
IB/cm: Update protocol to support XRC
IB/cm: Update XRC support based on XRC annex errata
RDMA/cm: Define new RDMA port space specific to IB
RDMA/ucm: Allow user to specify QP type when creating id
RDMA/cma: Support XRC QPs
IB/cm: Do not automatically disconnect XRC TGT QPs
IB/mlx4: Add support for XRC domains
IB/mlx4: Add support for XRC SRQs
IB/mlx4: Add support for XRC QPs
RDMA/core: Export ib_open_qp() to share XRC TGT QPs
RDMA/uverbs: Export ib_open_qp() capability to user space
Steve Wise (1):
RDMA/cxgb4: Fail RDMA initialization for unsupported cards
Tatyana Nikolova (1):
RDMA/nes: Add support for MPAv2 Enhanced RDMA Negotiation
Tom Tucker (1):
RDMA/cxgb4: Mark QP in error before disabling the queue in firmware
Yong Zhang (1):
IB/ehca: Remove IRQF_DISABLED, since it's a no-op
drivers/infiniband/core/cm.c | 63 +-
drivers/infiniband/core/cm_msgs.h | 32 +-
drivers/infiniband/core/cma.c | 67 +-
drivers/infiniband/core/mad.c | 3 +
drivers/infiniband/core/sysfs.c | 26 +-
drivers/infiniband/core/ucm.c | 2 +-
drivers/infiniband/core/ucma.c | 7 +-
drivers/infiniband/core/user_mad.c | 5 +-
drivers/infiniband/core/uverbs.h | 18 +
drivers/infiniband/core/uverbs_cmd.c | 703 ++++++++++++++--
drivers/infiniband/core/uverbs_main.c | 30 +-
drivers/infiniband/core/verbs.c | 376 ++++++++-
drivers/infiniband/hw/amso1100/c2_ae.c | 5 +
drivers/infiniband/hw/amso1100/c2_intr.c | 5 +
drivers/infiniband/hw/amso1100/c2_provider.c | 5 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 10 +
drivers/infiniband/hw/cxgb3/iwch_ev.c | 6 +
drivers/infiniband/hw/cxgb3/iwch_provider.c | 1 +
drivers/infiniband/hw/cxgb3/iwch_provider.h | 1 +
drivers/infiniband/hw/cxgb3/iwch_qp.c | 14 +-
drivers/infiniband/hw/cxgb4/cm.c | 469 +++++++++-
drivers/infiniband/hw/cxgb4/cq.c | 3 +-
drivers/infiniband/hw/cxgb4/device.c | 41 +-
drivers/infiniband/hw/cxgb4/ev.c | 10 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 23 +-
drivers/infiniband/hw/cxgb4/qp.c | 39 +-
drivers/infiniband/hw/ehca/ehca_eq.c | 4 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 3 +
drivers/infiniband/hw/ipath/ipath_init_chip.c | 1 +
drivers/infiniband/hw/ipath/ipath_srq.c | 5 +
drivers/infiniband/hw/mlx4/main.c | 106 +++-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 13 +
drivers/infiniband/hw/mlx4/qp.c | 131 ++-
drivers/infiniband/hw/mlx4/srq.c | 10 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 3 +
drivers/infiniband/hw/nes/Makefile | 2 +-
drivers/infiniband/hw/nes/nes.c | 8 +-
drivers/infiniband/hw/nes/nes.h | 17 +-
drivers/infiniband/hw/nes/nes_cm.c | 1121 ++++++++++++++----------
drivers/infiniband/hw/nes/nes_cm.h | 75 ++-
drivers/infiniband/hw/nes/nes_hw.c | 99 ++-
drivers/infiniband/hw/nes/nes_hw.h | 35 +-
drivers/infiniband/hw/nes/nes_mgt.c | 1162 +++++++++++++++++++++++++
drivers/infiniband/hw/nes/nes_mgt.h | 97 ++
drivers/infiniband/hw/nes/nes_nic.c | 4 +
drivers/infiniband/hw/nes/nes_utils.c | 53 +-
drivers/infiniband/hw/nes/nes_verbs.c | 8 +-
drivers/infiniband/hw/nes/nes_verbs.h | 12 +-
drivers/infiniband/hw/qib/qib.h | 15 +-
drivers/infiniband/hw/qib/qib_driver.c | 20 +-
drivers/infiniband/hw/qib/qib_file_ops.c | 2 +
drivers/infiniband/hw/qib/qib_iba6120.c | 2 +
drivers/infiniband/hw/qib/qib_iba7220.c | 2 +
drivers/infiniband/hw/qib/qib_iba7322.c | 135 ++-
drivers/infiniband/hw/qib/qib_init.c | 8 +-
drivers/infiniband/hw/qib/qib_qp.c | 90 ++-
drivers/infiniband/hw/qib/qib_qsfp.c | 25 +-
drivers/infiniband/hw/qib/qib_qsfp.h | 3 +
drivers/infiniband/hw/qib/qib_rc.c | 36 +-
drivers/infiniband/hw/qib/qib_ruc.c | 7 +-
drivers/infiniband/hw/qib/qib_srq.c | 5 +
drivers/infiniband/hw/qib/qib_sysfs.c | 3 +-
drivers/infiniband/hw/qib/qib_uc.c | 25 +-
drivers/infiniband/hw/qib/qib_verbs.c | 36 +-
drivers/infiniband/hw/qib/qib_verbs.h | 5 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 5 +-
drivers/infiniband/ulp/ipoib/ipoib_fs.c | 7 +-
drivers/net/mlx4/eq.c | 2 +-
drivers/net/mlx4/fw.c | 6 +
drivers/net/mlx4/fw.h | 2 +
drivers/net/mlx4/main.c | 36 +-
drivers/net/mlx4/mlx4.h | 4 +
drivers/net/mlx4/mr.c | 2 +-
drivers/net/mlx4/pd.c | 30 +
drivers/net/mlx4/port.c | 72 ++-
drivers/net/mlx4/qp.c | 3 +
drivers/net/mlx4/srq.c | 20 +-
include/linux/mlx4/device.h | 16 +-
include/linux/mlx4/qp.h | 3 +-
include/rdma/ib_user_verbs.h | 48 +-
include/rdma/ib_verbs.h | 106 +++-
include/rdma/iw_cm.h | 4 +-
include/rdma/rdma_cm.h | 1 +
include/rdma/rdma_user_cm.h | 3 +-
84 files changed, 4738 insertions(+), 984 deletions(-)
create mode 100644 drivers/infiniband/hw/nes/nes_mgt.c
create mode 100644 drivers/infiniband/hw/nes/nes_mgt.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-08-18 15:54 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-08-18 15:54 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Hi Linus,
Please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few fixes:
- Fix for crash on boot in IPoIB from Bernd Schubert
- Two iSER bugs from Or Gerlitz
Bernd Schubert (1):
IPoIB: Fix possible NULL dereference in ipoib_start_xmit()
Or Gerlitz (2):
IBiser: Fix wrong mask when sizeof (dma_addr_t) > sizeof (unsigned long)
IB/iser: Support iSCSI PDU padding
Roland Dreier (1):
Merge branches 'ipoib' and 'iser' into for-next
drivers/infiniband/ulp/ipoib/ipoib_main.c | 8 +++++---
drivers/infiniband/ulp/iser/iscsi_iser.c | 10 +++++++---
drivers/infiniband/ulp/iser/iscsi_iser.h | 2 +-
drivers/infiniband/ulp/iser/iser_initiator.c | 2 +-
4 files changed, 14 insertions(+), 8 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-07-22 19:08 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-07-22 19:08 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-kernel, linux-rdma
Hi Linus,
Congrats on the recent version number bump. Please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get my 3.1 merge window changes:
- Various fixes to the qib hardware driver.
- Improvements to IBoE support, mostly in the mlx4 hardware driver.
- A nice cleanup to the mthca driver from Goldwyn Rodrigues that
actually lets this pull request delete more lines than it adds.
- Various other small fixes.
Bart Van Assche (2):
IB/srp: Avoid duplicate devices from LUN scan
RDMA: Allow for NULL .modify_device() and .modify_port() methods
Dotan Barak (1):
mlx4_core: Bump the driver version to 1.0
Edwin van Vliet (1):
IB/qib: Remove double define
Goldwyn Rodrigues (1):
IB/mthca: Stop returning separate error and status from FW commands
Jack Morgenstein (1):
RDMA/cma: Avoid assigning an IS_ERR value to cm_id pointer in CMA id object
Jon Mason (2):
IB/qib: Remove unnecessary read of PCI_CAP_ID_EXP
IB/mthca: Remove unnecessary read of PCI_CAP_ID_EXP
Manuel Zerpies (1):
RDMA/cxgb4: Use printk_ratelimited() instead of printk_ratelimit()
Mike Marciniszyn (2):
MAINTAINERS: Update ipath/qib (QLogic IB adapter) entries
IB/qib: Defer HCA error events to tasklet
Mitko Haralanov (1):
IB/qib: Update active link width
Moni Shoua (1):
RDMA/cma: Don't allow IPoIB port space for IBoE
Motohiro KOSAKI (2):
IB/qib: Convert old cpumask api into new one
IB/ipath: Convert old cpumask api into new one
Or Gerlitz (9):
IB/core: Add GID change event
IB/mlx4: Generate GID change events in IBoE code
mlx4_core: Extend capability flags to 64 bits
mlx4_core: Read extended capabilities into the flags field
mlx4_core: Fix location of counter index in QP context struct
mlx4_core: Add network flow counters
IB/pma: Add include file for IBA performance counters definitions
IB/mlx4: Use flow counters on IBoE ports
IB/mlx4: Support PMA counters for IBoE
Ram Vepa (2):
IB/qib: Add sysfs interface to read free contexts
IB/qib: Fix potential deadlock with link down interrupt
Roland Dreier (1):
Merge branches 'cma', 'cxgb4', 'ipath', 'misc', 'mlx4', 'mthca', 'qib' and 'srp' into for-next
MAINTAINERS | 11 +-
drivers/infiniband/core/cache.c | 3 +-
drivers/infiniband/core/cma.c | 84 ++++----
drivers/infiniband/core/device.c | 6 +
drivers/infiniband/hw/amso1100/c2_provider.c | 9 -
drivers/infiniband/hw/cxgb3/iwch_provider.c | 8 -
drivers/infiniband/hw/cxgb4/provider.c | 8 -
drivers/infiniband/hw/cxgb4/resource.c | 9 +-
drivers/infiniband/hw/ipath/ipath_file_ops.c | 11 +-
drivers/infiniband/hw/ipath/ipath_mad.c | 198 +++---------------
drivers/infiniband/hw/mlx4/mad.c | 68 +++++++-
drivers/infiniband/hw/mlx4/main.c | 21 ++-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
drivers/infiniband/hw/mlx4/qp.c | 10 +-
drivers/infiniband/hw/mthca/mthca_cmd.c | 276 ++++++++++++++------------
drivers/infiniband/hw/mthca/mthca_cmd.h | 93 ++++-----
drivers/infiniband/hw/mthca/mthca_cq.c | 15 +--
drivers/infiniband/hw/mthca/mthca_eq.c | 43 +---
drivers/infiniband/hw/mthca/mthca_mad.c | 15 +-
drivers/infiniband/hw/mthca/mthca_main.c | 175 +++++------------
drivers/infiniband/hw/mthca/mthca_mcg.c | 101 +++-------
drivers/infiniband/hw/mthca/mthca_memfree.c | 43 ++---
drivers/infiniband/hw/mthca/mthca_mr.c | 35 +---
drivers/infiniband/hw/mthca/mthca_provider.c | 77 +------
drivers/infiniband/hw/mthca/mthca_qp.c | 49 ++----
drivers/infiniband/hw/mthca/mthca_reset.c | 2 +-
drivers/infiniband/hw/mthca/mthca_srq.c | 33 +---
drivers/infiniband/hw/nes/nes_verbs.c | 11 -
drivers/infiniband/hw/qib/qib.h | 3 +
drivers/infiniband/hw/qib/qib_file_ops.c | 16 +-
drivers/infiniband/hw/qib/qib_iba7220.c | 26 +++-
drivers/infiniband/hw/qib/qib_iba7322.c | 72 +++++--
drivers/infiniband/hw/qib/qib_mad.c | 78 ++++----
drivers/infiniband/hw/qib/qib_mad.h | 143 +-------------
drivers/infiniband/hw/qib/qib_pcie.c | 8 +-
drivers/infiniband/hw/qib/qib_sysfs.c | 14 ++
drivers/infiniband/ulp/srp/ib_srp.c | 2 +
drivers/net/mlx4/en_ethtool.c | 9 +-
drivers/net/mlx4/en_main.c | 3 +-
drivers/net/mlx4/en_netdev.c | 5 +-
drivers/net/mlx4/en_port.c | 6 +-
drivers/net/mlx4/en_selftest.c | 3 +-
drivers/net/mlx4/fw.c | 39 +++--
drivers/net/mlx4/fw.h | 8 +-
drivers/net/mlx4/main.c | 58 +++++-
drivers/net/mlx4/mcg.c | 17 +-
drivers/net/mlx4/mlx4.h | 5 +-
drivers/net/mlx4/port.c | 8 +-
include/linux/mlx4/cmd.h | 3 +
include/linux/mlx4/device.h | 60 ++++--
include/linux/mlx4/qp.h | 8 +-
include/rdma/ib_pma.h | 156 +++++++++++++++
include/rdma/ib_verbs.h | 3 +-
53 files changed, 1006 insertions(+), 1162 deletions(-)
create mode 100644 include/rdma/ib_pma.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-06-21 16:18 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-06-21 16:18 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few fixes for the cxgb4 and qib hardware device drivers.
Mitko Haralanov (1):
IB/qib: Ensure that LOS and DFE are being turned off
Roland Dreier (1):
Merge branches 'cxgb4' and 'qib' into for-next
Steve Wise (3):
RDMA/cxgb4: Don't exceed hw IQ depth limit for user CQs
RDMA/cxgb4: Don't truncate MR lengths
RDMA/cxgb4: Couple of abort fixes
drivers/infiniband/hw/cxgb4/cm.c | 46 +++++++++++++++++++++++++------
drivers/infiniband/hw/cxgb4/cq.c | 4 +++
drivers/infiniband/hw/cxgb4/mem.c | 2 +-
drivers/infiniband/hw/cxgb4/qp.c | 5 +---
drivers/infiniband/hw/qib/qib_iba7322.c | 25 ++++++++++++-----
drivers/infiniband/hw/qib/qib_intr.c | 6 +++-
6 files changed, 66 insertions(+), 22 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-05-26 16:46 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-05-26 16:46 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the second, main batch of 2.6.40 changes:
- Add netlink-based way to dump active RDMA connections
- Update char devices to use /dev/infiniband/... paths
- Chelsio driver fixes
- Fix for crash on access to QP0 with IBoE devices
- Couple of warning fixes
Ira Weiny (1):
IB/mad: Return EPROTONOSUPPORT when an RDMA device lacks the QP required
Liu Yuan (1):
RDMA/nes: Add a check for strict_strtoul()
Nir Muchtar (4):
RDMA: Add error handling to ib_core_init()
RDMA/cma: Export enum cma_state in <rdma/rdma_cm.h>
RDMA/cma: Add support for netlink statistics export
RDMA/cma: Save PID of ID's owner
Roland Dreier (7):
RDMA: Add netlink infrastructure
RDMA/ucma: Add .nodename/.mode to tell userspace where to create device node
IB/uverbs: Add devnode method to set path/mode
IB: Add devnode methods to cm_class and umad_class
IB/srp: Fix integer -> pointer cast warnings
RDMA: Update exported headers list
Merge branches 'cma', 'cxgb3', 'cxgb4', 'misc', 'nes', 'netlink', 'srp' and 'uverbs' into for-next
Sean Hefty (1):
RDMA/cma: Pass QP type into rdma_create_id()
Steve Wise (2):
RDMA/cxgb4: Use completion objects for event blocking
RDMA/cxgb3: Don't post zero-byte read if endpoint is going away
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/core/Makefile | 2 +-
drivers/infiniband/core/cm.c | 8 +
drivers/infiniband/core/cma.c | 308 +++++++++++++++++----------
drivers/infiniband/core/device.c | 25 ++-
drivers/infiniband/core/mad.c | 7 +
drivers/infiniband/core/netlink.c | 190 +++++++++++++++++
drivers/infiniband/core/ucma.c | 35 +++-
drivers/infiniband/core/user_mad.c | 7 +
drivers/infiniband/core/uverbs_main.c | 8 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 26 ++-
drivers/infiniband/hw/cxgb3/iwch_provider.h | 2 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 6 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 18 +--
drivers/infiniband/hw/nes/nes.c | 4 +-
drivers/infiniband/hw/qib/Kconfig | 2 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 4 +-
include/linux/netlink.h | 1 +
include/rdma/Kbuild | 5 +
include/rdma/ib_user_cm.h | 1 +
include/rdma/rdma_cm.h | 19 ++-
include/rdma/rdma_netlink.h | 92 ++++++++
net/9p/trans_rdma.c | 3 +-
net/rds/ib.c | 2 +-
net/rds/ib_cm.c | 2 +-
net/rds/iw.c | 2 +-
net/rds/iw_cm.c | 2 +-
net/rds/rdma_transport.c | 3 +-
net/sunrpc/xprtrdma/svc_rdma_transport.c | 3 +-
net/sunrpc/xprtrdma/verbs.c | 2 +-
31 files changed, 633 insertions(+), 159 deletions(-)
create mode 100644 drivers/infiniband/core/netlink.c
create mode 100644 include/rdma/rdma_netlink.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-05-19 18:17 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-05-19 18:17 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the first batch of 2.6.40 changes: mostly fixes to the
cxgb4 and qib low-level drivers, plus a couple of RDMA CM fixes.
Hefty, Sean (2):
RDMA/cma: Fix handling of IPv6 addressing in cma_use_port
RDMA/cma: Add an ID_REUSEADDR option
Mitko Haralanov (1):
IB/qib: Prevent driver hang with unprogrammed boards
Roel Kluin (1):
RDMA/cxgb4: Fix missing parentheses
Roland Dreier (2):
RDMA/iwcm: Get rid of enum iw_cm_event_status
Merge branches 'cma', 'cxgb4' and 'qib' into for-next
Sergei Shtylyov (2):
IB/ipath: Use pci_dev->revision, again
IB/qib: Use pci_dev->revision
Steve Wise (4):
RDMA/cxgb4: Don't change QP state outside EP lock
RDMA/cxgb4: Initialization errors can cause crash
RDMA/cxgb4: Reset wait condition atomically
RDMA/cxgb4: EEH errors can hang the driver
drivers/infiniband/core/cma.c | 207 +++++++++++++++++++---------
drivers/infiniband/core/iwcm.c | 2 +-
drivers/infiniband/core/ucma.c | 7 +
drivers/infiniband/hw/cxgb4/cm.c | 46 ++-----
drivers/infiniband/hw/cxgb4/device.c | 115 +++++++++-------
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 36 ++++--
drivers/infiniband/hw/cxgb4/provider.c | 2 -
drivers/infiniband/hw/cxgb4/qp.c | 3 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 9 +-
drivers/infiniband/hw/nes/nes_cm.c | 16 +-
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 3 +-
drivers/infiniband/hw/qib/qib_pcie.c | 5 +-
include/rdma/iw_cm.h | 11 +--
include/rdma/rdma_cm.h | 10 ++
include/rdma/rdma_user_cm.h | 5 +-
16 files changed, 278 insertions(+), 201 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-03-25 19:07 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-03-25 19:07 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get one fix for a bug introduced into the nes driver through
the net tree:
Roland Dreier (1):
RDMA/nes: Fix test of uninitialized netdev
drivers/infiniband/hw/nes/nes_cm.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2011-03-23 17:47 Roland Dreier
@ 2011-03-23 18:15 ` Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-03-23 18:15 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-rdma, linux-kernel
On Wed, Mar 23, 2011 at 10:47 AM, Roland Dreier <roland@kernel.org> wrote:
> drivers/infiniband/core/addr.c | 2 +-
> drivers/infiniband/core/agent.c | 3 +-
> drivers/infiniband/hw/mthca/mthca_main.c | 3 +
> drivers/infiniband/hw/nes/nes.c | 2 +-
> drivers/infiniband/ulp/srp/ib_srp.c | 725 ++++++++++++++++++++----------
> drivers/infiniband/ulp/srp/ib_srp.h | 38 ++-
> 6 files changed, 521 insertions(+), 252 deletions(-)
Somehow I missed a hunk of
IB: Increase DMA max_segment_size on Mellanox hardware
diffstat now should look like
drivers/infiniband/core/addr.c | 2 +-
drivers/infiniband/core/agent.c | 3 +-
drivers/infiniband/hw/mthca/mthca_main.c | 3 +
drivers/infiniband/hw/nes/nes.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 725 ++++++++++++++++++++----------
drivers/infiniband/ulp/srp/ib_srp.h | 38 ++-
drivers/net/mlx4/main.c | 3 +
7 files changed, 524 insertions(+), 252 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-03-23 17:47 Roland Dreier
2011-03-23 18:15 ` Roland Dreier
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2011-03-23 17:47 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the second batch of 2.6.39 changes:
- Dave Dillow's SRP initiator changes
- Fix to uninitialized return value introduced by net tree merge
- A couple of other minor cleanups
David Dillow (7):
IB/srp: always avoid non-zero offsets into an FMR
IB/srp: move IB CM setup completion into its own function
IB/srp: allow sg_tablesize to be set for each target
IB/srp: rework mapping engine to use multiple FMR entries
IB/srp: add support for indirect tables that don't fit in SRP_CMD
IB/srp: try to use larger FMR sizes to cover our mappings
IB: Increase DMA max_segment_size on Mellanox hardware
Michael Heinz (1):
IB/mad: Improve an error message so error code is included
Roland Dreier (3):
RDMA/nes: Don't print success message at level KERN_ERR
Merge branch 'external-indirect' of git://git.kernel.org/.../dad/srp-initiator into srp
Merge branches 'misc', 'nes' and 'srp' into for-next
Sean Hefty (1):
RDMA/addr: Fix return of uninitialized ret value
drivers/infiniband/core/addr.c | 2 +-
drivers/infiniband/core/agent.c | 3 +-
drivers/infiniband/hw/mthca/mthca_main.c | 3 +
drivers/infiniband/hw/nes/nes.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 725 ++++++++++++++++++++----------
drivers/infiniband/ulp/srp/ib_srp.h | 38 ++-
6 files changed, 521 insertions(+), 252 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-03-15 18:01 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-03-15 18:01 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the first batch of 2.6.39 changes:
- Fixes and improvements for the iw_cxgb4 low-level driver
- Fixes to the ib_qib low-level driver
- Fixes for crashes in the RDMA CM (also tagged for stable)
Mitko Haralanov (3):
IB/qib: Return correct MAD when setting link width to 255
IB/qib: Set default LE2 value for active cables to 0
IB/qib: Fix M_Key field in SubnGet and SubnGetResp MADs
Nicolas Kaiser (1):
IB/ipath: Don't reset disabled devices
Roland Dreier (1):
Merge branches 'cma', 'cxgb4', 'ipath' and 'qib' into for-next
Sean Hefty (4):
RDMA/cma: Fix crash in request handlers
IB/cm: Bump reference count on cm_id before invoking callback
IB/cm: Cancel pending LAP message when exiting IB_CM_ESTABLISH state
RDMA/cma: Replace global lock in rdma_destroy_id() with id-specific one
Steve Wise (7):
RDMA/cxgb4: Turn on delayed ACK
RDMA/cxgb4: Remove db_drop_task
RDMA/cxgb4: Do CIDX_INC updates every 1/16 CQ depth CQE reaps
RDMA/cxgb4: Enable on-chip SQ support by default
RDMA/cxgb4: Use ULP_MODE_TCPDDP
RDMA/cxgb4: Dispatch FATAL event on EEH errors
RDMA/cxgb4: Debugfs dump_qp() updates
drivers/infiniband/core/cm.c | 20 +++++++++-
drivers/infiniband/core/cma.c | 58 +++++++++++++++-------------
drivers/infiniband/hw/cxgb4/cm.c | 6 ++-
drivers/infiniband/hw/cxgb4/device.c | 24 +++++++++---
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 1 -
drivers/infiniband/hw/cxgb4/qp.c | 4 +-
drivers/infiniband/hw/cxgb4/t4.h | 8 +++-
drivers/infiniband/hw/ipath/ipath_sysfs.c | 1 +
drivers/infiniband/hw/qib/qib_iba7322.c | 13 +++++-
drivers/infiniband/hw/qib/qib_mad.c | 12 +++--
drivers/infiniband/hw/qib/qib_qsfp.h | 2 +
drivers/net/cxgb4/t4_msg.h | 1 +
12 files changed, 102 insertions(+), 48 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-02-17 22:26 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-02-17 22:26 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few small things:
- Don't send events for nonexistent nes devices
- Fix a couple of double events in qib
Maciej Sosnowski (1):
RDMA/nes: Don't generate async events for unregistered devices
Mike Marciniszyn (2):
IB/qib: Fix double add_timer()
IB/qib: Prevent double completions after a timeout or RNR error
Roland Dreier (1):
Merge branches 'nes' and 'qib' into for-next
drivers/infiniband/hw/nes/nes_hw.c | 32 ++++++++++++++++++++------------
drivers/infiniband/hw/qib/qib_rc.c | 5 ++++-
2 files changed, 24 insertions(+), 13 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-02-03 18:05 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-02-03 18:05 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few small things:
- Low-level driver fixes to qib, cxgb4 and amso1100
- Add PCI IDs for new Mellanox devices to mlx4
- Add a dropped hunk of Tejun's workqueue conversion
- Fix route query for iWARP connections
Mitko Haralanov (1):
IB/qib: Hold link for TX SERDES settings
Ralf Thielow (1):
RDMA/amso1100: Fix compile warnings
Roland Dreier (1):
Merge branches 'amso1100', 'cma', 'cxgb4', 'misc', 'mlx4' and 'qib' into for-next
Steve Wise (3):
RDMA/cxgb4: Limit MAXBURST EQ context field to 256B
RDMA/cxgb4: Set the correct device physical function for iWARP connections
RDMA/ucma: Copy iWARP route information on queries
Tejun Heo (1):
RDMA: Update missed conversion of flush_scheduled_work()
Yevgeny Petrilin (1):
mlx4_core: Add ConnectX-3 device IDs
drivers/infiniband/core/sa_query.c | 2 +-
drivers/infiniband/core/ucma.c | 22 ++++++++++++++++++++--
drivers/infiniband/hw/amso1100/c2_vq.c | 6 +++---
drivers/infiniband/hw/cxgb4/cm.c | 2 +-
drivers/infiniband/hw/cxgb4/qp.c | 4 ++--
drivers/infiniband/hw/qib/qib_iba7322.c | 30 +++++++++++-------------------
drivers/net/mlx4/main.c | 15 +++++++++++++++
7 files changed, 53 insertions(+), 28 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2011-01-17 21:55 Roland Dreier
@ 2011-01-25 16:23 ` Tziporet Koren
0 siblings, 0 replies; 223+ messages in thread
From: Tziporet Koren @ 2011-01-25 16:23 UTC (permalink / raw)
To: Roland Dreier; +Cc: torvalds, akpm, linux-kernel, linux-rdma
On 1/17/2011 11:55 PM, Roland Dreier wrote:
> Linus, please pull from
>
> master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
>
> This tree is also available from kernel.org mirrors at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
>
> This will get the last batch of InfiniBand/RDMA patches for the merge
> window. The biggest thing here is Tejun's conversion of the RDMA
> stack away from flush_scheduled_work(); the remaining stuff is mostly
> driver fixes, with an SRP compile warning fix and a vzalloc()
> conversion patch thrown in.
Roland,
What about the new mlx4 device IDs?
We wish to have them in for CX3 so that the new kernel will support it
Thanks,
Tziporet
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-01-17 21:55 Roland Dreier
2011-01-25 16:23 ` Tziporet Koren
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2011-01-17 21:55 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the last batch of InfiniBand/RDMA patches for the merge
window. The biggest thing here is Tejun's conversion of the RDMA
stack away from flush_scheduled_work(); the remaining stuff is mostly
driver fixes, with an SRP compile warning fix and a vzalloc()
conversion patch thrown in.
Aleksey Senin (1):
IB/mlx4: Handle protocol field in multicast table
Bart Van Assche (1):
IB/srp: Test only once whether iu allocation succeeded
Joe Perches (1):
RDMA: Use vzalloc() to replace vmalloc()+memset(0)
John L. Burr (1):
IB/mthca: Fix driver when sizeof (phys_addr_t) > sizeof (long)
Maciej Sosnowski (4):
RDMA/nes: Fix bonding on iw_nes
RDMA/nes: Generate IB_EVENT_PORT_ERR/PORT_ACTIVE events
RDMA/nes: Fix SFP+ link down detection issue with switch port disable
RDMA/nes: Fix incorrect SFP+ link status detection on driver init
Roland Dreier (2):
mlx4_{core, ib, en}: Fix driver when sizeof (phys_addr_t) > sizeof (long)
Merge branches 'misc', 'mlx4', 'mthca', 'nes' and 'srp' into for-next
Tejun Heo (1):
RDMA: Update workqueue usage
drivers/infiniband/core/cache.c | 4 +-
drivers/infiniband/core/device.c | 11 ++-
drivers/infiniband/core/sa_query.c | 2 +-
drivers/infiniband/core/umem.c | 2 +-
drivers/infiniband/hw/amso1100/c2_rnic.c | 5 +-
drivers/infiniband/hw/ehca/ipz_pt_fn.c | 5 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 5 +-
drivers/infiniband/hw/ipath/ipath_file_ops.c | 11 +--
drivers/infiniband/hw/ipath/ipath_init_chip.c | 5 +-
drivers/infiniband/hw/ipath/ipath_user_pages.c | 2 +-
drivers/infiniband/hw/mlx4/main.c | 12 ++-
drivers/infiniband/hw/mthca/mthca_catas.c | 5 +-
drivers/infiniband/hw/mthca/mthca_cmd.c | 2 +-
drivers/infiniband/hw/mthca/mthca_eq.c | 2 +-
drivers/infiniband/hw/mthca/mthca_main.c | 2 +-
drivers/infiniband/hw/mthca/mthca_mr.c | 2 +-
drivers/infiniband/hw/nes/nes.c | 35 ++++++++-
drivers/infiniband/hw/nes/nes.h | 4 +
drivers/infiniband/hw/nes/nes_cm.c | 8 ++-
drivers/infiniband/hw/nes/nes_hw.c | 95 ++++++++++++++++++++++++
drivers/infiniband/hw/nes/nes_hw.h | 10 +++
drivers/infiniband/hw/nes/nes_nic.c | 78 ++++++++++++++++---
drivers/infiniband/hw/nes/nes_verbs.c | 37 +++++++++-
drivers/infiniband/hw/qib/qib_iba7220.c | 7 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 14 ++--
drivers/infiniband/hw/qib/qib_init.c | 33 ++-------
drivers/infiniband/hw/qib/qib_qsfp.c | 9 +-
drivers/infiniband/hw/qib/qib_verbs.h | 3 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 10 +--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 3 +-
drivers/infiniband/ulp/srp/ib_srp.c | 19 ++---
drivers/net/mlx4/catas.c | 6 +-
drivers/net/mlx4/en_main.c | 3 +-
drivers/net/mlx4/main.c | 2 +-
drivers/net/mlx4/mcg.c | 23 +++---
include/linux/mlx4/device.h | 10 ++-
include/linux/mlx4/driver.h | 6 +-
include/rdma/ib_verbs.h | 3 +
38 files changed, 351 insertions(+), 144 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2011-01-11 18:38 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2011-01-11 18:38 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the main batch of InfiniBand/RDMA patches for the merge
window. There are three main things here:
- SRP initiator performance improvements from Bart Van Assche and
Dave Dillow
- Conversion of IPoIB from LRO to GRO from Or Gerlitz
- Lots of fixes to hardware drivers, including mostly clearing the
backlog of qib patches
Ali Ayoub (1):
mlx4_core: Avoid vunmap() of invalid pointer if allocation fails
Bart Van Assche (6):
IB/srp: consolidate state change code
IB/srp: allow lockless work posting
IB/srp: don't move active requests to their own list
IB/srp: reduce local coverage for command submission and EH
IB/srp: reduce lock coverage of command completion
IB/srp: stop sharing the host lock with SCSI
Dan Carpenter (2):
IB/mlx4: Handle -ENOMEM in forward_trap()
IB/mthca: Handle -ENOMEM in forward_trap()
David Dillow (2):
IB/srp: allow task management without a previous request
IB/srp: consolidate hot-path variables into cache lines
Joe Perches (2):
IB/ipath: Use printf extension %pR for struct resource
RDMA/nes: Fix string continuation line
Mike Marciniszyn (23):
IB/qib: Remove IB latency turnoff
IB/qib: Add receive header queue size module parameters
IB/qib: Add support for the new QME7362 card
IB/qib: Generate completion callback on errors
IB/qib: Set port physical state even if other fields are invalid
IB/qib: UD send with immediate receive completion has wrong size
IB/qib: Handle transitions from ACTIVE_DEFERRED to ACTIVE better
IB/qib: Fix multi-Florida HCA host panic on reboot
IB/qib: Fix context allocation with multiple HCAs
IB/qib: Clear WAIT_SEND flags when setting QP to error state
IB/qib: New SERDES init routine and improvements to SI quality
IB/qib: Reset packet list after freeing
IB/qib: Add a few new SERDES tunings
IB/qib: Avoid duplicate writes to the rcv head register
IB/qib: Fix interrupt mitigation
IB/qib: Change receive queue/QPN selection
IB/qib: Add fix missing from earlier patch
IB/qib: Change QPN increment
IB/qib: RDMA lkey/rkey validation is inefficient for large MRs
IB/qib: Issue pre-emptive NAKs on eager buffer overflow
IB/qib: Unnecessary delayed completions on RC connection
IB/qib: Improve SERDES tunning on QMH boards
IB/qib: Fix refcount leak in lkey/rkey validation
Or Gerlitz (2):
IPoIB: Remove LRO support
IPoIB: Add GRO support
Roland Dreier (2):
mlx4_core: Remove warning message about firmware bug
Merge branches 'cxgb4', 'ipath', 'ipoib', 'mlx4', 'mthca', 'nes', 'qib' and 'srp' into for-next
Stephen Hemminger (1):
RDMA/cxgb3,cxgb4: Remove dead code
Steve Wise (1):
RDMA/cxgb4: Don't re-init wait object in init/fini paths
Vladimir Sokolovsky (1):
IB/mlx4: Don't call dma_free_coherent() with irqs disabled
drivers/infiniband/hw/cxgb3/cxio_hal.c | 2 +
drivers/infiniband/hw/cxgb3/iwch_provider.h | 2 -
drivers/infiniband/hw/cxgb3/iwch_qp.c | 56 ----
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 1 -
drivers/infiniband/hw/cxgb4/qp.c | 32 --
drivers/infiniband/hw/ipath/ipath_driver.c | 5 +-
drivers/infiniband/hw/mlx4/cq.c | 9 +-
drivers/infiniband/hw/mlx4/mad.c | 2 +
drivers/infiniband/hw/mthca/mthca_mad.c | 2 +
drivers/infiniband/hw/nes/nes_nic.c | 4 +-
drivers/infiniband/hw/qib/qib.h | 2 +-
drivers/infiniband/hw/qib/qib_cq.c | 3 +-
drivers/infiniband/hw/qib/qib_driver.c | 155 ++++++++++-
drivers/infiniband/hw/qib/qib_file_ops.c | 10 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 2 +-
drivers/infiniband/hw/qib/qib_iba7220.c | 4 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 373 ++++++++++++++++++++++---
drivers/infiniband/hw/qib/qib_init.c | 6 +-
drivers/infiniband/hw/qib/qib_intr.c | 3 +-
drivers/infiniband/hw/qib/qib_keys.c | 80 ++++--
drivers/infiniband/hw/qib/qib_mad.c | 45 ++--
drivers/infiniband/hw/qib/qib_mr.c | 8 +-
drivers/infiniband/hw/qib/qib_qp.c | 32 +--
drivers/infiniband/hw/qib/qib_rc.c | 24 ++
drivers/infiniband/hw/qib/qib_ud.c | 57 ++--
drivers/infiniband/hw/qib/qib_user_sdma.c | 1 +
drivers/infiniband/hw/qib/qib_verbs.h | 11 +-
drivers/infiniband/ulp/ipoib/Kconfig | 1 -
drivers/infiniband/ulp/ipoib/ipoib.h | 12 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 1 +
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 51 ----
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 8 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 62 +----
drivers/infiniband/ulp/srp/ib_srp.c | 392 ++++++++++++--------------
drivers/infiniband/ulp/srp/ib_srp.h | 46 ++--
drivers/net/mlx4/alloc.c | 3 +-
drivers/net/mlx4/fw.c | 4 +-
37 files changed, 889 insertions(+), 622 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-12-13 21:53 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-12-13 21:53 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Just a one thing here: a fix for a user-triggerable integer overflow
as a well as a leak of a few bytes of kernel memory. The severity is
not too high here as actually hitting this requires a system with real
RDMA hardware, and the user must be granted direct access to that hardware.
Dan Carpenter (1):
IB/uverbs: Handle large number of entries in poll CQ
drivers/infiniband/core/uverbs_cmd.c | 101 +++++++++++++++++++---------------
1 files changed, 57 insertions(+), 44 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-12-02 18:57 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-12-02 18:57 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Just a few small things here:
- Fix a minor leak of a few bytes of kernel stack
- MAINTAINERS update
- Fix a few small issues introduced with the merge of IBoE support in 2.6.37-rc1
Chien Tung (1):
MAINTAINERS: Update NetEffect entry
Eli Cohen (4):
IB/mlx4: Fix memory ordering of VLAN insertion control bits
mlx4_core: Workaround firmware bug in query dev cap
IB/mlx4: Fix IBoE reported link rate
IB/mlx4: Fix IBoE link state
Or Gerlitz (1):
IB/pack: Remove some unused code added by the IBoE patches
Roland Dreier (1):
Merge branches 'misc', 'mlx4' and 'nes' into for-next
Vasiliy Kulikov (1):
IB: Fix information leak in marshalling code
MAINTAINERS | 3 +-
drivers/infiniband/core/ud_header.c | 30 -----------------------------
drivers/infiniband/core/uverbs_marshall.c | 4 +++
drivers/infiniband/hw/mlx4/main.c | 4 +-
drivers/infiniband/hw/mlx4/qp.c | 10 ++++----
drivers/net/mlx4/fw.c | 4 +++
6 files changed, 16 insertions(+), 39 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2010-10-26 20:52 Roland Dreier
@ 2010-10-26 23:17 ` Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-10-26 23:17 UTC (permalink / raw)
To: torvalds; +Cc: akpm, linux-rdma, linux-kernel
Hi Linus,
A) I forgot to push out my for-linus branch, so if you tried earlier, it
wasn't there, but it is now:
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
B) It was pointed out to me that I missed one patch hunk, so the
diffstat now looks like the below. One difference is that there now is
a qib_uc.c line and the summary goes from
74 files changed, 2668 insertions(+), 725 deletions(-)
to
75 files changed, 2672 insertions(+), 727 deletions(-)
Thanks!
Roland
MAINTAINERS | 12 +-
drivers/infiniband/core/agent.c | 29 +-
drivers/infiniband/core/cma.c | 313 ++++++++++++++-
drivers/infiniband/core/iwcm.c | 4 +
drivers/infiniband/core/mad.c | 27 ++-
drivers/infiniband/core/multicast.c | 23 +-
drivers/infiniband/core/sa_query.c | 30 +-
drivers/infiniband/core/sysfs.c | 15 +
drivers/infiniband/core/ucma.c | 92 ++++-
drivers/infiniband/core/ud_header.c | 138 ++++++--
drivers/infiniband/core/user_mad.c | 2 +-
drivers/infiniband/core/uverbs_cmd.c | 2 +
drivers/infiniband/core/verbs.c | 16 +
drivers/infiniband/hw/amso1100/Kbuild | 4 +-
drivers/infiniband/hw/amso1100/c2_intr.c | 4 +-
drivers/infiniband/hw/cxgb3/Makefile | 6 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 1 +
drivers/infiniband/hw/cxgb3/cxio_wr.h | 16 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 4 +-
drivers/infiniband/hw/cxgb3/iwch_ev.c | 17 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 24 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 25 +-
drivers/infiniband/hw/cxgb3/iwch_user.h | 8 +
drivers/infiniband/hw/cxgb4/Makefile | 2 +-
drivers/infiniband/hw/cxgb4/cm.c | 178 ++++-----
drivers/infiniband/hw/cxgb4/cq.c | 28 +-
drivers/infiniband/hw/cxgb4/device.c | 191 ++++++----
drivers/infiniband/hw/cxgb4/ev.c | 2 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 68 +++-
drivers/infiniband/hw/cxgb4/mem.c | 11 +-
drivers/infiniband/hw/cxgb4/provider.c | 44 ++-
drivers/infiniband/hw/cxgb4/qp.c | 283 ++++++++------
drivers/infiniband/hw/cxgb4/resource.c | 62 +++
drivers/infiniband/hw/cxgb4/t4.h | 44 ++-
drivers/infiniband/hw/cxgb4/user.h | 7 +
drivers/infiniband/hw/ehca/ehca_mrmw.c | 6 +-
drivers/infiniband/hw/ipath/Makefile | 2 +-
drivers/infiniband/hw/mlx4/ah.c | 163 +++++++--
drivers/infiniband/hw/mlx4/mad.c | 32 +-
drivers/infiniband/hw/mlx4/main.c | 553 +++++++++++++++++++++++++--
drivers/infiniband/hw/mlx4/mlx4_ib.h | 32 ++-
drivers/infiniband/hw/mlx4/mr.c | 2 +-
drivers/infiniband/hw/mlx4/qp.c | 195 ++++++++--
drivers/infiniband/hw/mthca/mthca_qp.c | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 3 +-
drivers/infiniband/hw/nes/nes_nic.c | 1 +
drivers/infiniband/hw/nes/nes_verbs.c | 16 +-
drivers/infiniband/hw/qib/qib.h | 2 +-
drivers/infiniband/hw/qib/qib_file_ops.c | 4 +-
drivers/infiniband/hw/qib/qib_init.c | 1 +
drivers/infiniband/hw/qib/qib_pcie.c | 8 +-
drivers/infiniband/hw/qib/qib_rc.c | 5 +-
drivers/infiniband/hw/qib/qib_uc.c | 6 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 14 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 3 +
drivers/infiniband/ulp/srp/ib_srp.c | 236 ++++++++----
drivers/infiniband/ulp/srp/ib_srp.h | 21 +-
drivers/net/mlx4/en_main.c | 15 +-
drivers/net/mlx4/en_netdev.c | 10 +
drivers/net/mlx4/en_port.c | 4 +-
drivers/net/mlx4/en_port.h | 3 +-
drivers/net/mlx4/fw.c | 3 +-
drivers/net/mlx4/intf.c | 21 +
drivers/net/mlx4/main.c | 4 +-
drivers/net/mlx4/mlx4_en.h | 1 +
drivers/net/mlx4/port.c | 19 +
include/linux/mlx4/cmd.h | 2 +
include/linux/mlx4/device.h | 35 ++-
include/linux/mlx4/driver.h | 9 +
include/linux/mlx4/qp.h | 9 +-
include/rdma/ib_addr.h | 134 +++++++-
include/rdma/ib_pack.h | 39 ++-
include/rdma/ib_user_verbs.h | 3 +-
include/rdma/ib_verbs.h | 11 +
include/scsi/srp.h | 38 ++
75 files changed, 2672 insertions(+), 727 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-10-26 20:52 Roland Dreier
2010-10-26 23:17 ` Roland Dreier
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2010-10-26 20:52 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
The big new feature here is support for InfiniBand-over-Ethernet / IBoE
(aka "RDMA over Converged Ethernet / RoCE"). We also have a new SRP
initiator submaintainer (thanks Dave!), and various fixes all over.
Animesh K Trivedi (1):
RDMA/iwcm: Fix hang in uninterruptible wait on cm_id destroy
Bart Van Assche (3):
IB/srp: Preparation for transmit ring response allocation
IB/srp: Reduce number of BUSY conditions
IB/srp: Use list_first_entry()
Chien Tung (1):
RDMA/nes: Report correct port state if interface is down
Christoph Lameter (1):
IPoIB: Set pkt_type correctly for multicast packets (fix IGMP breakage)
Dan Carpenter (1):
RDMA/nes: Remove unneeded variable
David Dillow (3):
IB/srp: Implement SRP_CRED_REQ and SRP_AER_REQ
IB/srp: Eliminate two forward declarations
IB/srp: Sync buffer before posting send
Eli Cohen (16):
IB/core: Add link layer property to ports
mlx4_core: Allow log_mtts_per_seg up to 7
IB/mlx4: Limit size of fast registration WRs
IPoIB: Skip IBoE ports
IB/mad: IBoE supports only QP1 (no QP0)
RDMA/cm: Add RDMA CM support for IBoE devices
IB/pack: IBoE UD packet packing support
IPoIB: Set dev_id field of net_device
IB/uverbs: Return link layer type to userspace for query port operation
mlx4_core: Allow protocol drivers to find corresponding interfaces
mlx4_core: Update data structures and constants for IBoE
mlx4_en: Change multicast promiscuous mode to support IBoE
IB/mlx4: Add support for IBoE
IB/core: Add VLAN support for IBoE
IB/mlx4: Add VLAN support for IBoE
IB/core: Add link layer type information to sysfs
Jack Morgenstein (1):
IB/mlx4: Signal node desc changes to SM by using FW to generate trap 144
Jason Gunthorpe (3):
IB/qib: Process RDMA WRITE ONLY with IMMEDIATE properly
IB/qib: Fix extra log level in qib_early_err()
IB/qib: clean up properly if pci_set_consistent_dma_mask() fails
Joe Perches (4):
RDMA/amso1100: Remove KERN_<level> from pr_<level> use
IB/qib: Remove unnecessary casts of private_data
RDMA/cxgb3: Remove unnecessary KERN_<level> use
RDMA/cxgb4: Remove unnecessary KERN_<level> use
Maciej Sosnowski (1):
RDMA/nes: Turn carrier off on ifdown
Ralph Campbell (2):
IB/qib: Fix uninitialized pointer if CONFIG_PCI_MSI not set
IB/qib: Allow driver to load if PCIe AER fails
Roland Dreier (5):
RDMA/cxgb4: Fix warnings about casts to/from pointers of different sizes
MAINTAINERS: Fix broken link to http://www.openib.org/
RDMA/nes: Fix cast-to-pointer warnings on 32-bit
MAINTAINERS: Hand off SCSI RDMA Protocol (SRP) initiator to Dave Dillow
Merge branches 'amso1100', 'cma', 'cxgb3', 'cxgb4', 'ehca', 'iboe', 'ipoib', 'misc', 'mlx4', 'nes', 'qib' and 'srp' into for-next
Sonny Rao (1):
IB/ehca: Fix driver on relocatable kernel
Steve Wise (19):
RDMA/cxgb4: Don't use null ep ptr
RDMA/cxgb4: Zero out ISGL padding
RDMA/cxgb4: Ignore positive return values from cxgb4_*_send() functions
RDMA/cxgb4: Ignore TERMINATE CQEs
RDMA/cxgb4: Handle CPL_RDMA_TERMINATE messages
RDMA/cxgb4: Log HW lack-of-resource errors
RDMA/cxgb4: debugfs files for dumping active stags
RDMA/cxgb4: Centralize the wait logic
RDMA/cxgb4: Support on-chip SQs
RDMA/cxgb4: Use a mutex for QP and EP state transitions
RDMA/cxgb4: Set the default TCP send window to 128KB
RDMA/cxgb4: Don't set completion flag for read requests
RDMA/cxgb4: Fastreg NSMR fixes
RDMA/cxgb4: Add default_llseek to debugfs files
RDMA/cxgb4: Use simple_read_from_buffer() for debugfs handlers
RDMA/cxgb4: Export T4 TCP MIB
RDMA/cxgb4: Use cxgb4 service for packet gl to skb
RDMA/cxgb3: When a user QP is marked in error, also mark the CQs in error
RDMA/ucma: Allow tuning the max listen backlog
Thomas Gleixner (1):
IB/umad: Make user_mad semaphore a real one
matt mooney (1):
IB: Replace EXTRA_CFLAGS with ccflags-y
MAINTAINERS | 12 +-
drivers/infiniband/core/agent.c | 29 +-
drivers/infiniband/core/cma.c | 313 ++++++++++++++-
drivers/infiniband/core/iwcm.c | 4 +
drivers/infiniband/core/mad.c | 27 ++-
drivers/infiniband/core/multicast.c | 23 +-
drivers/infiniband/core/sa_query.c | 30 +-
drivers/infiniband/core/sysfs.c | 15 +
drivers/infiniband/core/ucma.c | 92 ++++-
drivers/infiniband/core/ud_header.c | 138 ++++++--
drivers/infiniband/core/user_mad.c | 2 +-
drivers/infiniband/core/uverbs_cmd.c | 2 +
drivers/infiniband/core/verbs.c | 16 +
drivers/infiniband/hw/amso1100/Kbuild | 4 +-
drivers/infiniband/hw/amso1100/c2_intr.c | 4 +-
drivers/infiniband/hw/cxgb3/Makefile | 6 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 1 +
drivers/infiniband/hw/cxgb3/cxio_wr.h | 16 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 4 +-
drivers/infiniband/hw/cxgb3/iwch_ev.c | 17 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 24 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 25 +-
drivers/infiniband/hw/cxgb3/iwch_user.h | 8 +
drivers/infiniband/hw/cxgb4/Makefile | 2 +-
drivers/infiniband/hw/cxgb4/cm.c | 178 ++++-----
drivers/infiniband/hw/cxgb4/cq.c | 28 +-
drivers/infiniband/hw/cxgb4/device.c | 191 ++++++----
drivers/infiniband/hw/cxgb4/ev.c | 2 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 68 +++-
drivers/infiniband/hw/cxgb4/mem.c | 11 +-
drivers/infiniband/hw/cxgb4/provider.c | 44 ++-
drivers/infiniband/hw/cxgb4/qp.c | 283 ++++++++------
drivers/infiniband/hw/cxgb4/resource.c | 62 +++
drivers/infiniband/hw/cxgb4/t4.h | 44 ++-
drivers/infiniband/hw/cxgb4/user.h | 7 +
drivers/infiniband/hw/ehca/ehca_mrmw.c | 6 +-
drivers/infiniband/hw/ipath/Makefile | 2 +-
drivers/infiniband/hw/mlx4/ah.c | 163 +++++++--
drivers/infiniband/hw/mlx4/mad.c | 32 +-
drivers/infiniband/hw/mlx4/main.c | 553 +++++++++++++++++++++++++--
drivers/infiniband/hw/mlx4/mlx4_ib.h | 32 ++-
drivers/infiniband/hw/mlx4/mr.c | 2 +-
drivers/infiniband/hw/mlx4/qp.c | 195 ++++++++--
drivers/infiniband/hw/mthca/mthca_qp.c | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 3 +-
drivers/infiniband/hw/nes/nes_nic.c | 1 +
drivers/infiniband/hw/nes/nes_verbs.c | 16 +-
drivers/infiniband/hw/qib/qib.h | 2 +-
drivers/infiniband/hw/qib/qib_file_ops.c | 4 +-
drivers/infiniband/hw/qib/qib_init.c | 1 +
drivers/infiniband/hw/qib/qib_pcie.c | 8 +-
drivers/infiniband/hw/qib/qib_rc.c | 5 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 14 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 3 +
drivers/infiniband/ulp/srp/ib_srp.c | 236 ++++++++----
drivers/infiniband/ulp/srp/ib_srp.h | 21 +-
drivers/net/mlx4/en_main.c | 15 +-
drivers/net/mlx4/en_netdev.c | 10 +
drivers/net/mlx4/en_port.c | 4 +-
drivers/net/mlx4/en_port.h | 3 +-
drivers/net/mlx4/fw.c | 3 +-
drivers/net/mlx4/intf.c | 21 +
drivers/net/mlx4/main.c | 4 +-
drivers/net/mlx4/mlx4_en.h | 1 +
drivers/net/mlx4/port.c | 19 +
include/linux/mlx4/cmd.h | 2 +
include/linux/mlx4/device.h | 35 ++-
include/linux/mlx4/driver.h | 9 +
include/linux/mlx4/qp.h | 9 +-
include/rdma/ib_addr.h | 134 +++++++-
include/rdma/ib_pack.h | 39 ++-
include/rdma/ib_user_verbs.h | 3 +-
include/rdma/ib_verbs.h | 11 +
include/scsi/srp.h | 38 ++
74 files changed, 2668 insertions(+), 725 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-09-27 16:31 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-09-27 16:31 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get one cxgb3 driver fix:
Steve Wise (1):
RDMA/cxgb3: Turn off RX coalescing for iWARP connections
drivers/infiniband/hw/cxgb3/iwch_cm.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-09-08 21:45 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-09-08 21:45 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few small driver fixes.
Chien Tung (1):
RDMA/nes: Write correct register write to set TX pause param
Faisal Latif (3):
RDMA/nes: Fix double CLOSE event indication crash
RDMA/nes: Change state to closing after FIN
RDMA/nes: Fix hang with modified FIN handling on A0 cards
Roland Dreier (1):
Merge branches 'cxgb3' and 'nes' into for-linus
Steve Wise (1):
RDMA/cxgb3: Don't exceed the max HW CQ depth
drivers/infiniband/hw/cxgb3/cxio_hal.h | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 18 ++++++++++--------
drivers/infiniband/hw/nes/nes_hw.c | 14 +++++++++++++-
drivers/infiniband/hw/nes/nes_hw.h | 1 +
drivers/infiniband/hw/nes/nes_nic.c | 4 ++--
5 files changed, 27 insertions(+), 12 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-08-09 22:44 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-08-09 22:44 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get one cxgb4 patch that I was holding until prerequisites
merged through the net tree.
Steve Wise (1):
RDMA/cxgb4: Obtain RDMA QID ranges from LLD/FW
drivers/infiniband/hw/cxgb4/device.c | 9 +++++++--
drivers/infiniband/hw/cxgb4/resource.c | 7 ++++---
drivers/infiniband/hw/cxgb4/t4.h | 2 --
3 files changed, 11 insertions(+), 7 deletions(-)
--
Roland Dreier <rolandd@cisco.com> || For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] Please pull infiniband.git
@ 2010-08-05 21:37 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-08-05 21:37 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the 2.6.36 merge window pile, which actually does not
include anything big this time around.
Aleksey Senin (1):
IB: Rename RAW_ETY to RAW_ETHERTYPE
Alexander Schmidt (3):
IB/ehca: Fix bitmask handling for lock_hcalls
IB/ehca: Catch failing ioremap()
IB/ehca: Init irq tasklet before irq can happen
Arnd Bergmann (1):
IB/qib: Use generic_file_llseek
Bart Van Assche (3):
IB/srp: Use print_hex_dump()
IB/srp: Make receive buffer handling more robust
IB/srp: Export req_lim via sysfs
Ben Hutchings (1):
IB/ipath: Fix probe failure path
Chien Tung (1):
RDMA/nes: Store and print eeprom version
Dan Carpenter (2):
RDMA/cxgb4: Remove unneeded assignment
RDMA/cxgb3: Clean up signed check of unsigned variable
Dave Olson (1):
IB/qib: Allow PSM to select from multiple port assignment algorithms
David Miller (1):
IB/qib: Add missing <linux/slab.h> include
David Rientjes (1):
RDMA/cxgb4: Remove dependency on __GFP_NOFAIL
Faisal Latif (1):
RDMA/nes: Fix hangs on ifdown
Ira Weiny (1):
IB/qib: Allow writes to the diag_counters to be able to clear them
Julia Lawall (1):
IB/ehca: Drop unnecessary NULL test
Miroslaw Walukiewicz (1):
RDMA/nes: Read firmware version from correct place
Or Gerlitz (3):
IB/iser: Make needlessly global iser_alloc_rx_descriptors() static
RDMA/cxgb3: Make needlessly global iwch_l2t_send() static
RDMA/nes: Fix two sparse warnings
Peter Huewe (1):
RDMA/nes: Convert pci_table entries to PCI_VDEVICE
Ralph Campbell (5):
IB/qib: Avoid variable-length array
IB/qib: Turn off IB latency mode
IB/qib: Set cfgctxts to number of CPUs by default
IB/qib: Limit the number of packets processed per interrupt
IB/qib: Fix race between qib_error_qp() and receive packet processing
Roland Dreier (8):
IB/umad: Remove unused-but-set variable 'already_dead'
RDMA/nes: Rewrite expression to avoid undefined semantics
RDMA/cxgb4: Remove unneeded NULL check
RDMA/nes: Get rid of "set but not used" variables
RDMA/nes: Fix showing wqm_quanta
RDMA/nes: Fix misindented code
RDMA/nes: Fix confusing if statement indentation
Merge branches 'cxgb3', 'cxgb4', 'ehca', 'ipath', 'misc', 'nes', 'qib' and 'srp' into for-next
Sean Hefty (1):
IB/cm: Check LAP state before sending an MRA
Steve Wise (6):
RDMA/cxgb4: Add module option to tweak delayed ack
RDMA/cxgb4: Support variable sized work requests
RDMA/cxgb4: Fix race in fini path
RDMA/cxgb4: Use correct control txq
RDMA/cxgb4: Set/reset the EP timer inside EP lock
RDMA/cxgb4: Add timeouts when waiting for FW responses
drivers/infiniband/core/cm.c | 10 +-
drivers/infiniband/core/user_mad.c | 2 -
drivers/infiniband/core/verbs.c | 4 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 4 +-
drivers/infiniband/hw/cxgb4/cm.c | 91 ++++++-----
drivers/infiniband/hw/cxgb4/cq.c | 4 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 1 +
drivers/infiniband/hw/cxgb4/mem.c | 2 +-
drivers/infiniband/hw/cxgb4/qp.c | 240 +++++++++++++------------
drivers/infiniband/hw/cxgb4/t4.h | 32 ++--
drivers/infiniband/hw/cxgb4/t4fw_ri_api.h | 10 +
drivers/infiniband/hw/ehca/ehca_eq.c | 8 +-
drivers/infiniband/hw/ehca/ehca_main.c | 3 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 5 -
drivers/infiniband/hw/ehca/ehca_qp.c | 2 +-
drivers/infiniband/hw/ehca/hcp_if.c | 32 +++-
drivers/infiniband/hw/ehca/hcp_phyp.c | 11 +-
drivers/infiniband/hw/ehca/hcp_phyp.h | 2 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 13 +-
drivers/infiniband/hw/mthca/mthca_cmd.c | 2 +-
drivers/infiniband/hw/nes/nes.c | 37 ++---
drivers/infiniband/hw/nes/nes.h | 2 +
drivers/infiniband/hw/nes/nes_cm.c | 10 +-
drivers/infiniband/hw/nes/nes_hw.c | 23 ++-
drivers/infiniband/hw/nes/nes_hw.h | 3 +-
drivers/infiniband/hw/nes/nes_nic.c | 15 +-
drivers/infiniband/hw/nes/nes_utils.c | 5 +
drivers/infiniband/hw/nes/nes_verbs.c | 21 ++-
drivers/infiniband/hw/qib/qib.h | 4 +
drivers/infiniband/hw/qib/qib_common.h | 16 ++-
drivers/infiniband/hw/qib/qib_driver.c | 2 +-
drivers/infiniband/hw/qib/qib_file_ops.c | 203 +++++++++++-----------
drivers/infiniband/hw/qib/qib_fs.c | 18 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 4 +-
drivers/infiniband/hw/qib/qib_init.c | 2 +-
drivers/infiniband/hw/qib/qib_qp.c | 2 +-
drivers/infiniband/hw/qib/qib_rc.c | 47 ++----
drivers/infiniband/hw/qib/qib_sdma.c | 2 +
drivers/infiniband/hw/qib/qib_sysfs.c | 21 ++-
drivers/infiniband/hw/qib/qib_tx.c | 2 +-
drivers/infiniband/hw/qib/qib_uc.c | 6 -
drivers/infiniband/hw/qib/qib_ud.c | 17 +--
drivers/infiniband/hw/qib/qib_verbs.c | 7 +-
drivers/infiniband/ulp/iser/iser_initiator.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 118 +++++++------
include/rdma/ib_verbs.h | 2 +-
47 files changed, 576 insertions(+), 495 deletions(-)
--
Roland Dreier <rolandd@cisco.com> || For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-07-08 16:12 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-07-08 16:12 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get one security fix for IPoIB, and a bunch of relatively
small fixes to drivers new in 2.6.35 (so perhaps not regression fixes,
but not able to regress anything either ... and you don't care about
RDMA anyway ;)
Dave Olson (1):
IB/qib: Don't mark VL15 bufs as WC to avoid a rare 7322 chip problem
FUJITA Tomonori (1):
RDMA/cxgb4: Use the DMA state API instead of the pci equivalents
Or Gerlitz (1):
IPoIB: Fix world-writable child interface control sysfs attributes
Ralph Campbell (6):
IB/qib: Mask hardware error during link reset
IB/qib: Clear eager buffer memory for each new process
IB/qib: Clear 6120 hardware error register
IB/qib: Update 7322 serdes tables
IB/qib: Completion queue callback needs to be single threaded
IB/qib: Clean up properly if qib_init() fails
Roland Dreier (1):
Merge branches 'cxgb4', 'ipoib' and 'qib' into for-next
Steve Wise (3):
RDMA/cxgb4: Don't call abort_connection() for active connect failures
RDMA/cxgb4: Avoid false GTS CIDX_INC overflows
RDMA/cxgb4: Derive smac_idx from port viid
drivers/infiniband/hw/cxgb4/cm.c | 12 ++++---
drivers/infiniband/hw/cxgb4/cq.c | 31 ++++++++++++++-----
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 2 +-
drivers/infiniband/hw/cxgb4/mem.c | 4 +-
drivers/infiniband/hw/cxgb4/qp.c | 12 +++---
drivers/infiniband/hw/cxgb4/t4.h | 6 ++--
drivers/infiniband/hw/qib/qib.h | 1 +
drivers/infiniband/hw/qib/qib_7322_regs.h | 48 ++++++++++++++--------------
drivers/infiniband/hw/qib/qib_diag.c | 19 +++++++++--
drivers/infiniband/hw/qib/qib_iba6120.c | 3 +-
drivers/infiniband/hw/qib/qib_iba7322.c | 43 +++++++++++++++++++++----
drivers/infiniband/hw/qib/qib_init.c | 21 ++++++++++++-
drivers/infiniband/hw/qib/qib_pcie.c | 2 +
drivers/infiniband/hw/qib/qib_tx.c | 6 +++-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 4 +-
15 files changed, 148 insertions(+), 66 deletions(-)
--
Roland Dreier <rolandd@cisco.com> || For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-05-27 22:18 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-05-27 22:18 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This is pretty much settled down to fixes -- one semantic patch
cleanup from Julia Lawall and then some fixes to the new qib driver.
The following changes since commit ec96e2fe954c23a54bfdf2673437a39e193a1822:
Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm (2010-05-25 12:06:33 -0700)
are available in the git repository at:
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Julia Lawall (1):
IB/ucm: Use memdup_user()
Ralph Campbell (3):
IB/qib: Fix undefined symbol error when CONFIG_PCI_MSI=n
IB/qib: Use a single txselect module parameter for serdes tuning
IB/qib: Remove DCA support until feature is finished
Roland Dreier (2):
IB/qib: Don't rely on (undefined) order of function parameter evaluation
Merge branches 'misc' and 'qib' into for-next
drivers/infiniband/core/ucm.c | 11 +-
drivers/infiniband/hw/qib/qib_fs.c | 25 +-
drivers/infiniband/hw/qib/qib_iba6120.c | 12 -
drivers/infiniband/hw/qib/qib_iba7322.c | 771 +++++++------------------------
drivers/infiniband/hw/qib/qib_init.c | 6 +
5 files changed, 203 insertions(+), 622 deletions(-)
--
Roland Dreier <rolandd@cisco.com> || For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-05-25 16:58 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-05-25 16:58 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
The biggest thing here is the rather huge new qib driver for QLogic
PCIe adapters. This is pretty much self-contained (just one small
change to the core to allow low-level drivers to create per-port files
in sysfs). There are also some fixes to the new iw_cxgb4 driver, as
well as a few other miscellaneous fixes.
Chien Tung (1):
RDMA/nes: Fix incorrect unlock in nes_process_mac_intr()
Faisal Latif (2):
RDMA/nes: Have ethtool read hardware registers for rx/tx stats
RDMA/nes: Async event for closed QP causes crash
Ralph Campbell (3):
IB/core: Allow device-specific per-port sysfs files
IB/qib: Add new qib driver for QLogic PCIe InfiniBand adapters
IB/ipath: Remove support for QLogic PCIe QLE devices
Roland Dreier (3):
mlx4_core: Clean up mlx4_alloc_icm() a bit
IB/mad: Make needlessly global mad_sendq_size/mad_recvq_size static
Merge branches 'cxgb4', 'misc', 'mlx4', 'nes' and 'qib' into for-next
Sebastien Dugue (1):
mlx4_core: Fix possible chunk sg list overflow in mlx4_alloc_icm()
Steve Wise (11):
RDMA/cxgb4: Detach from the LLD after unregistering RDMA device
RDMA/cxgb4: Register RDMA provider based on LLD state_change events
RDMA/cxgb4: CQ size must be IQ size - 2
RDMA/cxgb4: Optimize CQ overflow detection
RDMA/cxgb4: Fix overflow bug in CQ arm
RDMA/cxgb4: Return proper errors in fastreg mr/pbl allocation
RDMA/cxgb4: Don't limit fastreg page list depth
RDMA/cxgb4: Update some HW limits
RDMA/cxgb4: Set fence flag for inv-local-stag work requests
RDMA/cxgb4: Support IB_WR_READ_WITH_INV opcode
RDMA/cxgb4: Only insert sq qid in lookup table
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/core_priv.h | 4 +-
drivers/infiniband/core/device.c | 6 +-
drivers/infiniband/core/mad.c | 4 +-
drivers/infiniband/core/sysfs.c | 21 +-
drivers/infiniband/hw/amso1100/c2_provider.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 2 +-
drivers/infiniband/hw/cxgb4/cq.c | 6 +-
drivers/infiniband/hw/cxgb4/device.c | 50 +-
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 1 +
drivers/infiniband/hw/cxgb4/mem.c | 11 +-
drivers/infiniband/hw/cxgb4/provider.c | 4 +-
drivers/infiniband/hw/cxgb4/qp.c | 33 +-
drivers/infiniband/hw/cxgb4/t4.h | 76 +-
drivers/infiniband/hw/ehca/ehca_main.c | 2 +-
drivers/infiniband/hw/ipath/Kconfig | 8 +-
drivers/infiniband/hw/ipath/Makefile | 6 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 28 +-
drivers/infiniband/hw/ipath/ipath_iba6120.c | 1862 -----
drivers/infiniband/hw/ipath/ipath_iba7220.c | 2631 -------
drivers/infiniband/hw/ipath/ipath_kernel.h | 2 -
drivers/infiniband/hw/ipath/ipath_verbs.c | 2 +-
drivers/infiniband/hw/mlx4/main.c | 2 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 2 +-
drivers/infiniband/hw/nes/nes_hw.c | 12 +-
drivers/infiniband/hw/nes/nes_nic.c | 72 +-
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
drivers/infiniband/hw/qib/Kconfig | 7 +
drivers/infiniband/hw/qib/Makefile | 15 +
drivers/infiniband/hw/qib/qib.h | 1439 ++++
drivers/infiniband/hw/qib/qib_6120_regs.h | 977 +++
drivers/infiniband/hw/qib/qib_7220.h | 156 +
drivers/infiniband/hw/qib/qib_7220_regs.h | 1496 ++++
drivers/infiniband/hw/qib/qib_7322_regs.h | 3163 ++++++++
drivers/infiniband/hw/qib/qib_common.h | 758 ++
drivers/infiniband/hw/qib/qib_cq.c | 484 ++
drivers/infiniband/hw/qib/qib_diag.c | 894 +++
drivers/infiniband/hw/qib/qib_dma.c | 182 +
drivers/infiniband/hw/qib/qib_driver.c | 665 ++
drivers/infiniband/hw/qib/qib_eeprom.c | 451 ++
drivers/infiniband/hw/qib/qib_file_ops.c | 2317 ++++++
drivers/infiniband/hw/qib/qib_fs.c | 613 ++
drivers/infiniband/hw/qib/qib_iba6120.c | 3588 +++++++++
drivers/infiniband/hw/qib/qib_iba7220.c | 4618 +++++++++++
drivers/infiniband/hw/qib/qib_iba7322.c | 8058 ++++++++++++++++++++
drivers/infiniband/hw/qib/qib_init.c | 1580 ++++
drivers/infiniband/hw/qib/qib_intr.c | 236 +
drivers/infiniband/hw/qib/qib_keys.c | 328 +
drivers/infiniband/hw/qib/qib_mad.c | 2173 ++++++
drivers/infiniband/hw/qib/qib_mad.h | 373 +
drivers/infiniband/hw/qib/qib_mmap.c | 174 +
drivers/infiniband/hw/qib/qib_mr.c | 503 ++
drivers/infiniband/hw/qib/qib_pcie.c | 738 ++
.../hw/{ipath/ipath_7220.h => qib/qib_pio_copy.c} | 53 +-
drivers/infiniband/hw/qib/qib_qp.c | 1255 +++
drivers/infiniband/hw/qib/qib_qsfp.c | 564 ++
drivers/infiniband/hw/qib/qib_qsfp.h | 184 +
drivers/infiniband/hw/qib/qib_rc.c | 2288 ++++++
drivers/infiniband/hw/qib/qib_ruc.c | 817 ++
.../hw/{ipath/ipath_sd7220.c => qib/qib_sd7220.c} | 859 +--
.../ipath_sd7220_img.c => qib/qib_sd7220_img.c} | 19 +-
drivers/infiniband/hw/qib/qib_sdma.c | 973 +++
drivers/infiniband/hw/qib/qib_srq.c | 375 +
drivers/infiniband/hw/qib/qib_sysfs.c | 691 ++
drivers/infiniband/hw/qib/qib_twsi.c | 498 ++
drivers/infiniband/hw/qib/qib_tx.c | 557 ++
drivers/infiniband/hw/qib/qib_uc.c | 555 ++
drivers/infiniband/hw/qib/qib_ud.c | 607 ++
drivers/infiniband/hw/qib/qib_user_pages.c | 157 +
drivers/infiniband/hw/qib/qib_user_sdma.c | 897 +++
.../hw/{ipath/ipath_7220.h => qib/qib_user_sdma.h} | 43 +-
drivers/infiniband/hw/qib/qib_verbs.c | 2248 ++++++
drivers/infiniband/hw/qib/qib_verbs.h | 1100 +++
drivers/infiniband/hw/qib/qib_verbs_mcast.c | 368 +
.../hw/{ipath/ipath_7220.h => qib/qib_wc_ppc64.c} | 49 +-
drivers/infiniband/hw/qib/qib_wc_x86_64.c | 171 +
drivers/net/mlx4/icm.c | 36 +-
include/rdma/ib_verbs.h | 4 +-
79 files changed, 51016 insertions(+), 5191 deletions(-)
delete mode 100644 drivers/infiniband/hw/ipath/ipath_iba6120.c
delete mode 100644 drivers/infiniband/hw/ipath/ipath_iba7220.c
create mode 100644 drivers/infiniband/hw/qib/Kconfig
create mode 100644 drivers/infiniband/hw/qib/Makefile
create mode 100644 drivers/infiniband/hw/qib/qib.h
create mode 100644 drivers/infiniband/hw/qib/qib_6120_regs.h
create mode 100644 drivers/infiniband/hw/qib/qib_7220.h
create mode 100644 drivers/infiniband/hw/qib/qib_7220_regs.h
create mode 100644 drivers/infiniband/hw/qib/qib_7322_regs.h
create mode 100644 drivers/infiniband/hw/qib/qib_common.h
create mode 100644 drivers/infiniband/hw/qib/qib_cq.c
create mode 100644 drivers/infiniband/hw/qib/qib_diag.c
create mode 100644 drivers/infiniband/hw/qib/qib_dma.c
create mode 100644 drivers/infiniband/hw/qib/qib_driver.c
create mode 100644 drivers/infiniband/hw/qib/qib_eeprom.c
create mode 100644 drivers/infiniband/hw/qib/qib_file_ops.c
create mode 100644 drivers/infiniband/hw/qib/qib_fs.c
create mode 100644 drivers/infiniband/hw/qib/qib_iba6120.c
create mode 100644 drivers/infiniband/hw/qib/qib_iba7220.c
create mode 100644 drivers/infiniband/hw/qib/qib_iba7322.c
create mode 100644 drivers/infiniband/hw/qib/qib_init.c
create mode 100644 drivers/infiniband/hw/qib/qib_intr.c
create mode 100644 drivers/infiniband/hw/qib/qib_keys.c
create mode 100644 drivers/infiniband/hw/qib/qib_mad.c
create mode 100644 drivers/infiniband/hw/qib/qib_mad.h
create mode 100644 drivers/infiniband/hw/qib/qib_mmap.c
create mode 100644 drivers/infiniband/hw/qib/qib_mr.c
create mode 100644 drivers/infiniband/hw/qib/qib_pcie.c
copy drivers/infiniband/hw/{ipath/ipath_7220.h => qib/qib_pio_copy.c} (57%)
create mode 100644 drivers/infiniband/hw/qib/qib_qp.c
create mode 100644 drivers/infiniband/hw/qib/qib_qsfp.c
create mode 100644 drivers/infiniband/hw/qib/qib_qsfp.h
create mode 100644 drivers/infiniband/hw/qib/qib_rc.c
create mode 100644 drivers/infiniband/hw/qib/qib_ruc.c
rename drivers/infiniband/hw/{ipath/ipath_sd7220.c => qib/qib_sd7220.c} (57%)
rename drivers/infiniband/hw/{ipath/ipath_sd7220_img.c => qib/qib_sd7220_img.c} (99%)
create mode 100644 drivers/infiniband/hw/qib/qib_sdma.c
create mode 100644 drivers/infiniband/hw/qib/qib_srq.c
create mode 100644 drivers/infiniband/hw/qib/qib_sysfs.c
create mode 100644 drivers/infiniband/hw/qib/qib_twsi.c
create mode 100644 drivers/infiniband/hw/qib/qib_tx.c
create mode 100644 drivers/infiniband/hw/qib/qib_uc.c
create mode 100644 drivers/infiniband/hw/qib/qib_ud.c
create mode 100644 drivers/infiniband/hw/qib/qib_user_pages.c
create mode 100644 drivers/infiniband/hw/qib/qib_user_sdma.c
copy drivers/infiniband/hw/{ipath/ipath_7220.h => qib/qib_user_sdma.h} (57%)
create mode 100644 drivers/infiniband/hw/qib/qib_verbs.c
create mode 100644 drivers/infiniband/hw/qib/qib_verbs.h
create mode 100644 drivers/infiniband/hw/qib/qib_verbs_mcast.c
rename drivers/infiniband/hw/{ipath/ipath_7220.h => qib/qib_wc_ppc64.c} (57%)
create mode 100644 drivers/infiniband/hw/qib/qib_wc_x86_64.c
--
Roland Dreier <rolandd@cisco.com> || For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-05-18 3:37 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-05-18 3:37 UTC (permalink / raw)
To: torvalds, linux-kernel, akpm; +Cc: linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the first batch InfinBand/RDMA changes for the 2.6.35
merge window:
Chien Tung (1):
RDMA/nes: Make nesadapter->phy_lock usage consistent
Dan Carpenter (1):
IB/iser: Fix error flow in iser_create_ib_conn_res()
FUJITA Tomonori (3):
RDMA/cxgb3: Use the dma state API instead of pci equivalents
RDMA/amso1100: Use the dma state API instead of pci equivalents
IB/mthca: Use the dma state API instead of pci equivalents
Julia Lawall (1):
IB/core: Use kmemdup() instead of kmalloc()+memcpy()
Or Gerlitz (4):
IPoIB: Allow disabling/enabling TSO on the fly through ethtool
IB/iser: Add asynchronous event handler
IB/iser: Remove buggy back-pointer setting
IB/iser: Enhance disconnection logic for multi-pathing
Roland Dreier (5):
IB: Explicitly rule out llseek to avoid BKL in default_llseek()
RDMA/nes: Make unnecessarily global functions static
RDMA/cxgb3: Shrink .text with compile-time init of handlers arrays
MAINTAINERS: Add cxgb4 and iw_cxgb4 entries
Merge branches 'amso1100', 'bkl', 'cma', 'cxgb3', 'cxgb4', 'ipoib', 'iser', 'masked-atomics', 'misc', 'mthca' and 'nes' into for-next
Steve Wise (2):
RDMA/cxgb3: Don't free skbs on NET_XMIT_* indications from LLD
RDMA/cxgb4: Add driver for Chelsio T4 RNIC
Tetsuo Handa (1):
RDMA/cma: Randomize local port allocation
Vladimir Sokolovsky (2):
IB/core: Add support for masked atomic operations
IB/mlx4: Add support for masked atomic operations
MAINTAINERS | 14 +
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/cma.c | 74 +-
drivers/infiniband/core/mad.c | 4 +-
drivers/infiniband/core/ucm.c | 3 +-
drivers/infiniband/core/ucma.c | 4 +-
drivers/infiniband/core/user_mad.c | 12 +-
drivers/infiniband/core/uverbs_main.c | 11 +-
drivers/infiniband/hw/amso1100/c2.h | 2 +-
drivers/infiniband/hw/amso1100/c2_alloc.c | 4 +-
drivers/infiniband/hw/amso1100/c2_cq.c | 4 +-
drivers/infiniband/hw/amso1100/c2_mq.h | 2 +-
drivers/infiniband/hw/amso1100/c2_provider.h | 2 +-
drivers/infiniband/hw/amso1100/c2_rnic.c | 12 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 12 +-
drivers/infiniband/hw/cxgb3/cxio_hal.h | 2 +-
drivers/infiniband/hw/cxgb3/cxio_wr.h | 4 +-
drivers/infiniband/hw/cxgb3/iwch.c | 2 -
drivers/infiniband/hw/cxgb3/iwch_cm.c | 133 +-
drivers/infiniband/hw/cxgb4/Kconfig | 18 +
drivers/infiniband/hw/cxgb4/Makefile | 5 +
drivers/infiniband/hw/cxgb4/cm.c | 2374 +++++++++++++++++++++++++
drivers/infiniband/hw/cxgb4/cq.c | 882 +++++++++
drivers/infiniband/hw/cxgb4/device.c | 520 ++++++
drivers/infiniband/hw/cxgb4/ev.c | 193 ++
drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 745 ++++++++
drivers/infiniband/hw/cxgb4/mem.c | 811 +++++++++
drivers/infiniband/hw/cxgb4/provider.c | 518 ++++++
drivers/infiniband/hw/cxgb4/qp.c | 1577 ++++++++++++++++
drivers/infiniband/hw/cxgb4/resource.c | 417 +++++
drivers/infiniband/hw/cxgb4/t4.h | 550 ++++++
drivers/infiniband/hw/cxgb4/t4fw_ri_api.h | 829 +++++++++
drivers/infiniband/hw/cxgb4/user.h | 66 +
drivers/infiniband/hw/mlx4/cq.c | 8 +
drivers/infiniband/hw/mlx4/main.c | 1 +
drivers/infiniband/hw/mlx4/qp.c | 50 +-
drivers/infiniband/hw/mthca/mthca_allocator.c | 8 +-
drivers/infiniband/hw/mthca/mthca_eq.c | 6 +-
drivers/infiniband/hw/mthca/mthca_provider.h | 2 +-
drivers/infiniband/hw/nes/nes_hw.c | 12 +-
drivers/infiniband/hw/nes/nes_nic.c | 16 +-
drivers/infiniband/hw/nes/nes_utils.c | 10 -
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 20 +
drivers/infiniband/ulp/iser/iscsi_iser.c | 9 +-
drivers/infiniband/ulp/iser/iscsi_iser.h | 4 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 115 +-
include/linux/mlx4/device.h | 4 +-
include/linux/mlx4/qp.h | 7 +
include/rdma/ib_verbs.h | 7 +
51 files changed, 9838 insertions(+), 251 deletions(-)
create mode 100644 drivers/infiniband/hw/cxgb4/Kconfig
create mode 100644 drivers/infiniband/hw/cxgb4/Makefile
create mode 100644 drivers/infiniband/hw/cxgb4/cm.c
create mode 100644 drivers/infiniband/hw/cxgb4/cq.c
create mode 100644 drivers/infiniband/hw/cxgb4/device.c
create mode 100644 drivers/infiniband/hw/cxgb4/ev.c
create mode 100644 drivers/infiniband/hw/cxgb4/iw_cxgb4.h
create mode 100644 drivers/infiniband/hw/cxgb4/mem.c
create mode 100644 drivers/infiniband/hw/cxgb4/provider.c
create mode 100644 drivers/infiniband/hw/cxgb4/qp.c
create mode 100644 drivers/infiniband/hw/cxgb4/resource.c
create mode 100644 drivers/infiniband/hw/cxgb4/t4.h
create mode 100644 drivers/infiniband/hw/cxgb4/t4fw_ri_api.h
create mode 100644 drivers/infiniband/hw/cxgb4/user.h
--
Roland Dreier <rolandd@cisco.com> || For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-04-09 16:13 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-04-09 16:13 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few small fixes that have trickled in:
Chien Tung (1):
RDMA/nes: Correct cap.max_inline_data assignment in nes_query_qp()
Dan Carpenter (1):
IB/mlx4: Check correct variable for allocation failure
Jani Nikula (1):
IB/cm: Fix device_create() return value check
Roland Dreier (1):
Merge branches 'cma', 'misc', 'mlx4' and 'nes' into for-linus
shefty (1):
RDMA/cm: Set num_paths when manually assigning path records
drivers/infiniband/core/cm.c | 2 +-
drivers/infiniband/core/cma.c | 1 +
drivers/infiniband/hw/mlx4/mr.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 9 ++++-----
4 files changed, 7 insertions(+), 7 deletions(-)
--
Roland Dreier <rolandd@cisco.com> || For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-03-12 18:56 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-03-12 18:56 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few small fixes:
Chien Tung (2):
RDMA/nes: Clear stall bit before destroying NIC QP
RDMA/nes: Fix CX4 link problem in back-to-back configuration
Eli Cohen (1):
IPoIB: Fix TX queue lockup with mixed UD/CM traffic
Faisal Latif (1):
RDMA/nes: Set assume_aligned_header bit
Or Gerlitz (1):
IPoIB: Include return code in trace message for ib_post_send() failures
Roland Dreier (1):
Merge branches 'cxgb3', 'ipoib', 'misc' and 'nes' into for-next
Steve Wise (2):
IB/mad: Ignore iWARP devices on device removal
RDMA/cxgb3: Wait at least one schedule cycle during device removal
drivers/infiniband/core/mad.c | 3 +++
drivers/infiniband/hw/cxgb3/iwch.c | 2 ++
drivers/infiniband/hw/nes/nes_hw.c | 8 ++++++++
drivers/infiniband/hw/nes/nes_hw.h | 1 +
drivers/infiniband/hw/nes/nes_nic.c | 30 ++++++++++++++++++++++++++++--
drivers/infiniband/hw/nes/nes_verbs.c | 1 +
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 10 +++++++---
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 9 +++++----
8 files changed, 55 insertions(+), 9 deletions(-)
--
Roland Dreier <rolandd@cisco.com>
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2010-03-02 7:56 Roland Dreier
@ 2010-03-02 11:52 ` Tziporet Koren
0 siblings, 0 replies; 223+ messages in thread
From: Tziporet Koren @ 2010-03-02 11:52 UTC (permalink / raw)
To: Roland Dreier; +Cc: torvalds, akpm, linux-kernel, linux-rdma
On 3/2/2010 9:56 AM, Roland Dreier wrote:
> Linus, please pull from
>
> master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
>
> This tree is also available from kernel.org mirrors at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
>
> This will get my current pile for the 2.6.34 merge window:
>
What about the pending patches for:
- XRC
- IBoE
- SRIOV support for mlx4
Thanks
Tziporet
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-03-02 7:56 Roland Dreier
2010-03-02 11:52 ` Tziporet Koren
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2010-03-02 7:56 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get my current pile for the 2.6.34 merge window:
Alexander Chiang (18):
IB/uverbs: Convert *cdev to cdev in struct ib_uverbs_device
IB/uverbs: Remove dev_table
IB/uverbs: Use stack variable 'devnum' in ib_uverbs_add_one
IB/uverbs: use stack variable 'base' in ib_uverbs_add_one
IB/uverbs: Increase maximum devices supported
IB/uverbs: Pack struct ib_uverbs_event_file tighter
IB/uverbs: Whitespace cleanup
IB/umad: Convert *cdev to cdev in struct ib_umad_port
IB/umad: Remove port_table[]
IB/umad: Use stack variable 'devnum' in ib_umad_init_port
IB/umad: Use stack variable 'base' in ib_umad_init_port
IB/umad: Increase maximum devices supported
IB/umad: Clean whitespace
IB/ucm: Use stack variable 'devnum' in ib_ucm_add_one
IB/ucm: Use stack variable 'base' in ib_ucm_add_one
IB/ucm: Increase maximum devices supported
IB/ucm: Clean whitespace errors
IB/core: Pack struct ib_device a little tighter
Alexander Schmidt (3):
IB/ehca: Do not turn off irqs in tasklet context
IB/ehca: Allow access for ib_query_qp()
IB/ehca: Require in_wc in process_mad()
Bart Van Assche (1):
IB/srp: Split send and recieve CQs to reduce number of interrupts
Chien Tung (1):
RDMA/nes: Add support for KR device id 0x0110
Eli Cohen (2):
IB/mlx4: Simplify retrieval of ib_device
IB/core: Fix and clean up ib_ud_header_init()
Faisal Latif (3):
RDMA/nes: Use atomic counters for CM listener create and destroy
RDMA/nes: Fix crash when listener destroyed during loopback setup
RDMA/nes: Multiple disconnects cause crash during AE handling
Jiri Slaby (1):
RDMA: Use rlimit helpers
Or Gerlitz (11):
IPoIB: Remove TX moderation settings from ethtool support
RDMA/nes: Change WQ overflow return code
IB/iser: Revert commit bba7ebb "avoid recv buffer exhaustion"
IB/iser: New receive buffer posting logic
IB/iser: Remove atomic counter for posted receive buffers
IB/iser: Use different CQ for send completions
IB/iser: Simplify send flow/descriptors
IB/iser: Use atomic allocations
IB/iser: Remove unnecessary connection checks
IB/iser: Use libiscsi passthrough mode
IB/iser: Remove redundant locking from iser scsi command response flow
Roland Dreier (11):
IB/uverbs: Use anon_inodes instead of private infinibandeventfs
IB/srp: Clean up error path in srp_create_target_ib()
Merge branch 'cma' into for-next
Merge branch 'cxgb3' into for-next
Merge branch 'ehca' into for-next
Merge branch 'ipoib' into for-next
Merge branch 'iser' into for-next
Merge branch 'mlx4' into for-next
Merge branch 'nes' into for-next
Merge branch 'srp' into for-next
Merge branch 'misc' into for-next
Sean Hefty (1):
RDMA/cm: Remove unused definition of RDMA_PS_SCTP
Steve Wise (5):
RDMA/cxgb3: Remove BUG_ON() on CQ rearm failure
RDMA/cxgb3: Doorbell overflow avoidance and recovery
RDMA/cxgb3: Increase the max CQ depth
RDMA/cxgb3: Don't allocate the SW queue for user mode CQs
RDMA/cxgb3: Mark RDMA device with CXIO_ERROR_FATAL when removing
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/core/ucm.c | 63 +++-
drivers/infiniband/core/ud_header.c | 14 +-
drivers/infiniband/core/umem.c | 2 +-
drivers/infiniband/core/user_mad.c | 173 +++++----
drivers/infiniband/core/uverbs.h | 11 +-
drivers/infiniband/core/uverbs_main.c | 234 +++++------
drivers/infiniband/hw/cxgb3/cxio_hal.c | 15 +-
drivers/infiniband/hw/cxgb3/cxio_hal.h | 4 +-
drivers/infiniband/hw/cxgb3/cxio_wr.h | 17 +-
drivers/infiniband/hw/cxgb3/iwch.c | 80 ++++-
drivers/infiniband/hw/cxgb3/iwch.h | 2 +
drivers/infiniband/hw/cxgb3/iwch_provider.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 9 +-
drivers/infiniband/hw/ehca/ehca_irq.c | 5 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 4 +-
drivers/infiniband/hw/ehca/ehca_sqp.c | 2 +-
drivers/infiniband/hw/ipath/ipath_user_pages.c | 3 +-
drivers/infiniband/hw/mlx4/qp.c | 4 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 2 +-
drivers/infiniband/hw/nes/nes.c | 1 +
drivers/infiniband/hw/nes/nes.h | 9 +-
drivers/infiniband/hw/nes/nes_cm.c | 11 +-
drivers/infiniband/hw/nes/nes_hw.c | 488 ++++++++++++-----------
drivers/infiniband/hw/nes/nes_hw.h | 2 +-
drivers/infiniband/hw/nes/nes_nic.c | 61 +---
drivers/infiniband/hw/nes/nes_verbs.c | 6 +-
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 10 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 47 ++-
drivers/infiniband/ulp/iser/iscsi_iser.h | 97 +++---
drivers/infiniband/ulp/iser/iser_initiator.c | 506 ++++++++----------------
drivers/infiniband/ulp/iser/iser_memory.c | 64 +---
drivers/infiniband/ulp/iser/iser_verbs.c | 281 +++++++-------
drivers/infiniband/ulp/srp/ib_srp.c | 91 +++--
drivers/infiniband/ulp/srp/ib_srp.h | 6 +-
drivers/net/cxgb3/adapter.h | 5 +
drivers/net/cxgb3/cxgb3_main.c | 57 +++-
drivers/net/cxgb3/cxgb3_offload.h | 5 +-
drivers/net/cxgb3/regs.h | 16 +
drivers/net/cxgb3/sge.c | 10 +-
drivers/net/cxgb3/t3_hw.c | 5 +-
include/rdma/ib_pack.h | 1 +
include/rdma/ib_verbs.h | 4 +-
include/rdma/rdma_cm.h | 1 -
44 files changed, 1221 insertions(+), 1210 deletions(-)
--
Roland Dreier <rolandd@cisco.com>
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-02-10 20:03 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-02-10 20:03 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get one partial revert needed to fix a regression due to a
behavior change introduced in 2.6.33-rc1 that breaks some existing apps:
Sean Hefty (1):
RDMA/cm: Revert association of an RDMA device when binding to loopback
drivers/infiniband/core/cma.c | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index cc9b594..875e34e 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -2115,9 +2115,7 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)
if (ret)
goto err1;
- if (cma_loopback_addr(addr)) {
- ret = cma_bind_loopback(id_priv);
- } else if (!cma_zero_addr(addr)) {
+ if (!cma_any_addr(addr)) {
ret = rdma_translate_ip(addr, &id->route.addr.dev_addr);
if (ret)
goto err1;
--
Roland Dreier <rolandd@cisco.com>
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/index.html
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2010-01-07 19:30 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2010-01-07 19:30 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few very small fixes that have trickled in over the
holidays.
Eli Cohen (1):
mlx4_core: Fix cleanup in __mlx4_init_one() error path
Jack Morgenstein (1):
IB/mlx4: Initialize SRQ scatter entries when creating an SRQ
Or Gerlitz (1):
IB/mlx4: Fix queue overflow check in post_recv
Robert P. J. Day (1):
IB/addr: Correct CONFIG_IPv6 to CONFIG_IPV6
Roland Dreier (1):
Merge branches 'misc' and 'mlx4' into for-next
drivers/infiniband/core/cma.c | 2 +-
drivers/infiniband/hw/mlx4/qp.c | 2 +-
drivers/infiniband/hw/mlx4/srq.c | 6 ++++++
drivers/net/mlx4/main.c | 2 +-
4 files changed, 9 insertions(+), 3 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-12-16 7:41 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-12-16 7:41 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, linux-rdma
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get all my pending 2.6.33 merge window stuff. Sorry for
being so late, but I'm just now out from under my flu-induced
backlog. None of the stuff here is in any way controversial: it's
pretty much all small fixes scattered around, with no major changes
included (we're saving those for 2.6.34).
Akinobu Mita (1):
IB/ipath: Use bitmap_weight()
Alexander Schmidt (1):
IB/ehca: Rework destroy_eq()
Bart Van Assche (2):
IB: Clarify the documentation of ib_post_send()
IB: Fix typo in ipoib.txt
Chien Tung (7):
RDMA/nes: Add support for IB_WR_*INV
RDMA/nes: Correct fast memory registration implementation
RDMA/nes: Add additional SFP+ PHY uC status check and PHY reset
RDMA/nes: Implement IB_SIGNAL_ALL_WR as an iWARP extension
RDMA/nes: Clean up struct nes_qp
RDMA/nes: Add max_cqe check to nes_create_cq()
RDMA/nes: Update copyright and branding string
David J. Wilder (1):
IPoIB: Clear ipoib_neigh.dgid in ipoib_neigh_alloc()
Eli Cohen (2):
IB/mlx4: Remove unneeded code
IB/mlx4: Remove limitation on LSO header size
Eric Dumazet (1):
RDMA/addr: Use appropriate locking with for_each_netdev()
Faisal Latif (11):
RDMA/nes: Fix MAX_CM_BUFFER define
RDMA/nes: Fix query of ORD values
RDMA/nes: MPA request/response error checking
RDMA/nes: Resource not freed for REJECTed connections
RDMA/nes: Fix crash in nes_accept()
RDMA/nes: Abnormal listener exit causes loopback node crash
RDMA/nes: Fix Xansation test crash on cm_node ref_count
RDMA/nes: Check for zero STag
RDMA/nes: Free kmap() resources
RDMA/nes: FIN during MPA startup causes timeout
RDMA/nes: Fix stale ARP issue
Frank Zago (5):
RDMA/nes: In nes_post_send() always set bad_wr on error
RDMA/nes: In nes_post_recv() always set bad_wr on error
RDMA/amso1100: Fix error paths in post_send and post_recv
IB/ehca: Fix error paths in post_send and post_recv
RDMA/cxgb3: Fix error paths in post_send and post_recv
Jason Gunthorpe (2):
RDMA/cma: Correct detection of SA Created MGID
RDMA/cma: Fix AF_INET6 support in multicast joining
Julia Lawall (1):
RDMA/nes: Pass correct size to ioremap_nocache()
Or Gerlitz (1):
IB/iser: Rewrite SG handling for RDMA logic
Roel Kluin (1):
IB/uverbs: Fix return of PTR_ERR() of wrong pointer in ib_uverbs_get_context()
Roland Dreier (1):
Merge branches 'amso1100', 'cma', 'cxgb3', 'ehca', 'ipath', 'ipoib', 'iser', 'misc', 'mlx4' and 'nes' into for-next
Sean Hefty (7):
RDMA/ucma: Add option to manually set IB path
RDMA/cma: Replace net_device pointer with index
IB/addr: Verify source and destination address families match
IB/addr: Store net_device type instead of translating to RDMA transport
RDMA/cm: fix loopback address support
IB/addr: Simplify resolving IPv4 addresses
IB/addr: Fix IPv6 routing lookup
Steve Wise (1):
RDMA/cxgb3: Remove BUG_ON() on CQ rearm failure
Yevgeny Petrilin (1):
mlx4_core: Fix parsing of reserved EQ cap
Documentation/infiniband/ipoib.txt | 10 +-
drivers/infiniband/core/addr.c | 275 ++++------
drivers/infiniband/core/cma.c | 133 +++--
drivers/infiniband/core/sa_query.c | 6 +
drivers/infiniband/core/ucma.c | 57 ++-
drivers/infiniband/core/uverbs_cmd.c | 2 +-
drivers/infiniband/hw/amso1100/c2_qp.c | 14 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 32 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 1 +
drivers/infiniband/hw/ehca/ehca_eq.c | 9 +-
drivers/infiniband/hw/ehca/ehca_main.c | 2 +-
drivers/infiniband/hw/ehca/ehca_reqs.c | 67 +--
drivers/infiniband/hw/ipath/ipath_driver.c | 10 +-
drivers/infiniband/hw/mlx4/main.c | 2 +-
drivers/infiniband/hw/mlx4/qp.c | 25 +-
drivers/infiniband/hw/nes/Kconfig | 9 +-
drivers/infiniband/hw/nes/nes.c | 5 +-
drivers/infiniband/hw/nes/nes.h | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 201 +++++--
drivers/infiniband/hw/nes/nes_cm.h | 7 +-
drivers/infiniband/hw/nes/nes_context.h | 2 +-
drivers/infiniband/hw/nes/nes_hw.c | 40 +-
drivers/infiniband/hw/nes/nes_hw.h | 29 +-
drivers/infiniband/hw/nes/nes_nic.c | 2 +-
drivers/infiniband/hw/nes/nes_user.h | 3 +-
drivers/infiniband/hw/nes/nes_utils.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 817 ++++++++++++++--------------
drivers/infiniband/hw/nes/nes_verbs.h | 23 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 1 +
drivers/infiniband/ulp/iser/iser_memory.c | 122 ++---
drivers/net/mlx4/fw.c | 3 +-
include/linux/mlx4/device.h | 1 +
include/rdma/ib_addr.h | 36 +-
include/rdma/ib_sa.h | 6 +
include/rdma/ib_user_sa.h | 16 +
include/rdma/ib_verbs.h | 5 +
include/rdma/rdma_user_cm.h | 6 +-
net/rds/ib.c | 4 +-
net/rds/iw.c | 4 +-
39 files changed, 1084 insertions(+), 907 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-10-28 18:07 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-10-28 18:07 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will just get one PCI device ID addition:
Eli Cohen (1):
mlx4_core: Add a new supported 40 GigE device ID
drivers/net/mlx4/main.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 5dd7225..291a505 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -1282,6 +1282,7 @@ static struct pci_device_id mlx4_pci_table[] = {
{ PCI_VDEVICE(MELLANOX, 0x6372) }, /* MT25458 ConnectX EN 10GBASE-T 10GigE */
{ PCI_VDEVICE(MELLANOX, 0x675a) }, /* MT25458 ConnectX EN 10GBASE-T+Gen2 10GigE */
{ PCI_VDEVICE(MELLANOX, 0x6764) }, /* MT26468 ConnectX EN 10GigE PCIe gen2*/
+ { PCI_VDEVICE(MELLANOX, 0x6746) }, /* MT26438 ConnectX EN 40GigE PCIe gen2 5GT/s */
{ PCI_VDEVICE(MELLANOX, 0x676e) }, /* MT26478 ConnectX2 40GigE PCIe gen2 */
{ 0, }
};
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-10-09 17:08 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-10-09 17:08 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get another small batch of small RDMA/InfiniBand fixes, and
one device ID addition:
Bart Van Assche (1):
IB: Fix typo in udev rule documentation
David J. Wilder (1):
RDMA/addr: Fix resolution of local IPv6 addresses
Roland Dreier (1):
Merge branches 'cxgb3', 'misc' and 'mlx4' into for-next
Steve Wise (2):
RDMA/iwcm: Don't call provider reject func with irqs disabled
RDMA/cxgb3: Handle NULL inetdev pointer in iwch_query_port()
Yevgeny Petrilin (1):
mlx4_core: Add 40GigE device ID
Documentation/infiniband/user_mad.txt | 4 ++--
Documentation/infiniband/user_verbs.txt | 2 +-
drivers/infiniband/core/addr.c | 2 +-
drivers/infiniband/core/iwcm.c | 2 ++
drivers/infiniband/hw/cxgb3/iwch_provider.c | 11 +++++++----
drivers/net/mlx4/main.c | 1 +
6 files changed, 14 insertions(+), 8 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-09-24 19:45 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-09-24 19:45 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, linux-rdma, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the batch of RDMA/InfiniBand changes for the 2.6.32
merge window:
The following changes since commit 86d710146fb9975f04c505ec78caa43d227c1018:
Linus Torvalds (1):
Merge git://git.linux-nfs.org/projects/trondmy/nfs-2.6
are available in the git repository at:
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Eli Cohen (1):
mlx4_core: Pass cache line size to device FW
Jack Morgenstein (1):
IB/mthca: Fix access to freed memory in catastrophic event handling
Julia Lawall (1):
RDMA/nes: Remove duplicate .ndo_set_mac_address field initialization
Moni Shoua (1):
IPoIB: Don't turn on carrier for a non-active port
Roland Dreier (2):
IB/mad: Fix lock-lock-timer deadlock in RMPP code
Merge branches 'ipoib', 'mad', 'mlx4', 'mthca' and 'nes' into for-linus
drivers/infiniband/core/mad_rmpp.c | 17 +++++++++++++----
drivers/infiniband/hw/mthca/mthca_catas.c | 11 ++++++++---
drivers/infiniband/hw/nes/nes_nic.c | 1 -
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 7 +++++++
drivers/net/mlx4/fw.c | 5 +++++
5 files changed, 33 insertions(+), 8 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-09-11 4:23 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-09-11 4:23 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-rdma, general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the batch of RDMA/InfiniBand changes for the 2.6.32
merge window:
Alexander Schmidt (1):
IB/ehca: Make port autodetect mode the default
Arputham Benjamin (2):
mlx4_core: Distinguish multiple devices in /proc/interrupts
IB/mthca: Distinguish multiple devices in /proc/interrupts
Chien Tung (1):
RDMA/nes: Map MTU to IB_MTU_* and correctly report link state
Don Wood (10):
RDMA/nes: Update refcnt during disconnect
RDMA/nes: Allocate work item for disconnect event handling
RDMA/nes: Change memory allocation for cqp request to GFP_ATOMIC
RDMA/nes: Clean out CQ completions when QP is destroyed
RDMA/nes: Add CQ error handling
RDMA/nes: Implement Terminate Packet
RDMA/nes: Use flush mechanism to set status for wqe in error
RDMA/nes: Make poll_cq return correct number of wqes during flush
RDMA/nes: Use the flush code to fill in cqe error
RDMA/nes: Rework the disconn routine for terminate and flushing
Hal Rosenstock (1):
IB/mad: Allow tuning of QP0 and QP1 sizes
Jack Morgenstein (3):
IB/uverbs: Return ENOSYS for unimplemented commands (not EINVAL)
IB/mlx4: Don't allow userspace open while recovering from catastrophic error
IB/mthca: Don't allow userspace open while recovering from catastrophic error
Jason Gunthorpe (1):
IPoIB: Check multicast address format
Joachim Fenkes (2):
IB/ehca: Construct MAD redirect replies from request MAD
IB/ehca: Fix CQE flags reporting
Marcin Slusarz (1):
IB: Use printk_once() for driver versions
Roel Kluin (2):
IB/ipath: strncpy() doesn't always NUL-terminate
RDMA/amso1100: Check kmalloc() result in c2_register_device()
Roland Dreier (15):
IPoIB: Remove unused <rdma/ib_cache.h> includes
IPoIB: Drop priv->lock before calling ipoib_send()
IB/mad: Check hop count field in directed route MAD to avoid array overflow
IB: Use DEFINE_SPINLOCK() for static spinlocks
mlx4_core: Use pci_request_regions()
mlx4_core: Remove unnecessary includes of <linux/init.h>
IB/mlx4: Annotate CQ locking
mlx4_core: Allocate and map sufficient ICM memory for EQ context
IB/mthca: Remove unnecessary include of <asm/page.h>
IB/mthca: Remove unnecessary include of <linux/init.h>
IB/mthca: Annotate CQ locking
IB/mad: Fix possible lock-lock-timer deadlock
MAINTAINERS: InfiniBand/RDMA mailing list transition to vger
Merge branches 'cxgb3', 'ehca', 'ipath', 'ipoib', 'misc', 'mlx4', 'mthca' and 'nes' into for-linus
Merge branch 'mad' into for-linus
Steve Wise (8):
RDMA/cxgb3: iwch_unregister_device leaks memory
RDMA/cxgb3: Set the appropriate IO channel in rdma_init work requests
RDMA/cxgb3: Handle port events properly
RDMA/cxgb3: Don't free endpoints early
RDMA/cxgb3: Wake up any waiters on peer close/abort
RDMA/cxgb3: Don't ignore insert_handle() failures
RDMA/cxgb3: Clean up properly on FW mismatch failures
RDMA/iwcm: Reject the connection when the cm_id is destroyed
Tobias Klauser (1):
RDMA/amso1100: Use %pM conversion specifier
Yevgeny Petrilin (1):
mlx4_core: Avoid double free_icms
Yossi Etigin (1):
IB/core: Fix send multicast group leave retry
MAINTAINERS | 12 +-
drivers/infiniband/core/iwcm.c | 1 +
drivers/infiniband/core/mad.c | 35 +-
drivers/infiniband/core/mad_priv.h | 3 +
drivers/infiniband/core/multicast.c | 10 +-
drivers/infiniband/core/sa_query.c | 7 +-
drivers/infiniband/core/smi.c | 8 +
drivers/infiniband/core/uverbs_main.c | 10 +-
drivers/infiniband/hw/amso1100/c2.c | 6 +-
drivers/infiniband/hw/amso1100/c2_provider.c | 24 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 5 +-
drivers/infiniband/hw/cxgb3/cxio_wr.h | 6 +
drivers/infiniband/hw/cxgb3/iwch.c | 37 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 68 ++-
drivers/infiniband/hw/cxgb3/iwch_cm.h | 9 +-
drivers/infiniband/hw/cxgb3/iwch_mem.c | 21 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 52 ++-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 1 +
drivers/infiniband/hw/ehca/ehca_main.c | 8 +-
drivers/infiniband/hw/ehca/ehca_reqs.c | 6 +-
drivers/infiniband/hw/ehca/ehca_sqp.c | 47 ++-
drivers/infiniband/hw/ipath/ipath_file_ops.c | 2 +-
drivers/infiniband/hw/ipath/ipath_mad.c | 2 +-
drivers/infiniband/hw/mlx4/main.c | 12 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
drivers/infiniband/hw/mlx4/qp.c | 12 +-
drivers/infiniband/hw/mthca/mthca_catas.c | 1 +
drivers/infiniband/hw/mthca/mthca_config_reg.h | 2 -
drivers/infiniband/hw/mthca/mthca_dev.h | 1 +
drivers/infiniband/hw/mthca/mthca_eq.c | 17 +-
drivers/infiniband/hw/mthca/mthca_main.c | 8 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 3 +
drivers/infiniband/hw/mthca/mthca_provider.h | 1 +
drivers/infiniband/hw/mthca/mthca_qp.c | 12 +-
drivers/infiniband/hw/mthca/mthca_reset.c | 1 -
drivers/infiniband/hw/nes/nes.h | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 128 ++--
drivers/infiniband/hw/nes/nes_cm.h | 2 -
drivers/infiniband/hw/nes/nes_hw.c | 767 +++++++++++++++++-------
drivers/infiniband/hw/nes/nes_hw.h | 103 ++++
drivers/infiniband/hw/nes/nes_utils.c | 5 +-
drivers/infiniband/hw/nes/nes_verbs.c | 204 +++++--
drivers/infiniband/hw/nes/nes_verbs.h | 16 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 1 -
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 1 -
drivers/infiniband/ulp/ipoib/ipoib_main.c | 7 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 21 +
drivers/net/cxgb3/cxgb3_main.c | 6 +-
drivers/net/cxgb3/cxgb3_offload.c | 6 +-
drivers/net/cxgb3/cxgb3_offload.h | 8 +-
drivers/net/mlx4/cq.c | 1 -
drivers/net/mlx4/eq.c | 77 +--
drivers/net/mlx4/icm.c | 1 -
drivers/net/mlx4/main.c | 37 +-
drivers/net/mlx4/mcg.c | 1 -
drivers/net/mlx4/mlx4.h | 7 +-
drivers/net/mlx4/mr.c | 1 -
drivers/net/mlx4/pd.c | 1 -
drivers/net/mlx4/profile.c | 2 -
drivers/net/mlx4/qp.c | 2 -
drivers/net/mlx4/reset.c | 1 -
drivers/net/mlx4/srq.c | 2 -
drivers/scsi/cxgb3i/cxgb3i_init.c | 12 +-
63 files changed, 1278 insertions(+), 595 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-07-14 18:48 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-07-14 18:48 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a new PCI ID for the mlx4 driver, which also requires
handling one new firmware status code. The chance of regressions
should be near-nil, since existing devices won't hit any of the new
code (and the worst case seems to be printing an incorrect error
message anyway).
Yevgeny Petrilin (2):
mlx4_core: Handle multi-physical function devices
mlx4_core: Add new ConnectX EN PCI ID 0x6764
drivers/net/mlx4/cmd.c | 5 ++++-
drivers/net/mlx4/main.c | 6 +++++-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/net/mlx4/cmd.c b/drivers/net/mlx4/cmd.c
index 2845a05..65ec77d 100644
--- a/drivers/net/mlx4/cmd.c
+++ b/drivers/net/mlx4/cmd.c
@@ -80,7 +80,9 @@ enum {
/* Bad management packet (silently discarded): */
CMD_STAT_BAD_PKT = 0x30,
/* More outstanding CQEs in CQ than new CQ size: */
- CMD_STAT_BAD_SIZE = 0x40
+ CMD_STAT_BAD_SIZE = 0x40,
+ /* Multi Function device support required: */
+ CMD_STAT_MULTI_FUNC_REQ = 0x50,
};
enum {
@@ -128,6 +130,7 @@ static int mlx4_status_to_errno(u8 status)
[CMD_STAT_LAM_NOT_PRE] = -EAGAIN,
[CMD_STAT_BAD_PKT] = -EINVAL,
[CMD_STAT_BAD_SIZE] = -ENOMEM,
+ [CMD_STAT_MULTI_FUNC_REQ] = -EACCES,
};
if (status >= ARRAY_SIZE(trans_table) ||
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 018348c..dac621b 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -729,7 +729,10 @@ static int mlx4_init_hca(struct mlx4_dev *dev)
err = mlx4_QUERY_FW(dev);
if (err) {
- mlx4_err(dev, "QUERY_FW command failed, aborting.\n");
+ if (err == -EACCES)
+ mlx4_info(dev, "non-primary physical function, skipping.\n");
+ else
+ mlx4_err(dev, "QUERY_FW command failed, aborting.\n");
return err;
}
@@ -1285,6 +1288,7 @@ static struct pci_device_id mlx4_pci_table[] = {
{ PCI_VDEVICE(MELLANOX, 0x6750) }, /* MT25408 "Hermon" EN 10GigE PCIe gen2 */
{ PCI_VDEVICE(MELLANOX, 0x6372) }, /* MT25458 ConnectX EN 10GBASE-T 10GigE */
{ PCI_VDEVICE(MELLANOX, 0x675a) }, /* MT25458 ConnectX EN 10GBASE-T+Gen2 10GigE */
+ { PCI_VDEVICE(MELLANOX, 0x6764) }, /* MT26468 ConnectX EN 10GigE PCIe gen2*/
{ 0, }
};
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-06-23 17:39 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-06-23 17:39 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This has a few more fixes for 2.6.31-rc1; however everything here
should be a fix appropriate for -rc2 as well, so if this misses the
end of the merge window then I think it should still be OK to pull.
Alexander Schmidt (1):
IB/ehca: Bump version number
Faisal Latif (2):
RDMA/nes: Fix max_qp_init_rd_atom returned from query device
RDMA/nes: Fix FIN state handling under error conditions
Hannes Hering (1):
IB/ehca: Tolerate dynamic memory operations before driver load
Peter Huewe (1):
RDMA: Add __init/__exit macros to addr.c and cma.c
Roel Kluin (1):
IB/ehca: Ensure that guid_entry index is not negative
Roland Dreier (3):
IB/mthca: Replace dma_sync_single() use with proper functions
mlx4_core: Fix dma_sync_single_for_cpu() with matching for_device() calls
Merge branches 'ehca', 'misc', 'mlx4', 'mthca' and 'nes' into for-linus
drivers/infiniband/core/addr.c | 4 +-
drivers/infiniband/core/cma.c | 4 +-
drivers/infiniband/hw/ehca/ehca_hca.c | 2 +-
drivers/infiniband/hw/ehca/ehca_main.c | 20 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 508 +++++++++++++++++++++++++++++++-
drivers/infiniband/hw/ehca/ehca_mrmw.h | 13 +-
drivers/infiniband/hw/mthca/mthca_mr.c | 13 +-
drivers/infiniband/hw/nes/nes_cm.c | 8 +-
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
drivers/net/mlx4/mr.c | 14 +-
10 files changed, 554 insertions(+), 34 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-06-14 20:47 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-06-14 20:47 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This has the main batch of InfiniBand/RDMA changes for 2.6.31; sorry
for being so late in the merge cycle but the whole family was sick
with the stomach flu for the past week and, well, merge requests
weren't a top priority.
Anyway, this has been a slow cycle for my tree for whatever reason, so
there's not much here; everything has been in -next for a while except
for my two IRQ double-free patches, which fix a just-reported bug (and
are tiny and have been tested).
Anton Blanchard (1):
IB/ehca: Replace vmalloc() with kmalloc() for queue allocation
Eli Cohen (2):
IB/mthca: Add module parameter for number of MTTs per segment
mlx4_core: Add module parameter for number of MTTs per segment
Jack Morgenstein (1):
IB/mlx4: Add strong ordering to local inval and fast reg work requests
Jack Stone (1):
infiniband: Remove void casts
Joachim Fenkes (1):
IB/ehca: Remove superfluous bitmasks from QP control block
Roel Kluin (1):
RDMA/nes: Fix off-by-one bugs in reset_adapter_ne020() and init_serdes()
Roland Dreier (3):
IB/mthca: Don't double-free IRQs when falling back from MSI-X to INTx
mlx4_core: Don't double-free IRQs when falling back from MSI-X to INTx
Merge branches 'cxgb3', 'ehca', 'misc', 'mlx4', 'mthca' and 'nes' into for-linus
Stefan Roscher (3):
IB/ehca: Fall back to vmalloc() for big allocations
IB/ehca: Remove unnecessary memory operations for userspace queue pairs
IB/ehca: Increment version number
Steve Wise (2):
RDMA/cxgb3: Report correct port state and MTU
RDMA/cxgb3: Limit fast register size based on T3 limitations
drivers/infiniband/hw/amso1100/c2_cq.c | 4 +-
drivers/infiniband/hw/cxgb3/cxio_wr.h | 2 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 32 ++++++-
drivers/infiniband/hw/ehca/ehca_classes_pSeries.h | 28 -----
drivers/infiniband/hw/ehca/ehca_irq.c | 9 +-
drivers/infiniband/hw/ehca/ehca_main.c | 2 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 112 +++++++++++----------
drivers/infiniband/hw/ehca/hcp_if.c | 6 +-
drivers/infiniband/hw/ehca/hcp_if.h | 2 +-
drivers/infiniband/hw/ehca/hcp_phyp.c | 11 ++-
drivers/infiniband/hw/ehca/hcp_phyp.h | 2 +-
drivers/infiniband/hw/ehca/ipz_pt_fn.c | 19 +++-
drivers/infiniband/hw/mlx4/qp.c | 4 +
drivers/infiniband/hw/mthca/mthca_cmd.c | 2 +-
drivers/infiniband/hw/mthca/mthca_dev.h | 1 +
drivers/infiniband/hw/mthca/mthca_eq.c | 4 +-
drivers/infiniband/hw/mthca/mthca_main.c | 17 +++-
drivers/infiniband/hw/mthca/mthca_mr.c | 16 ++--
drivers/infiniband/hw/mthca/mthca_profile.c | 4 +-
drivers/infiniband/hw/nes/nes_hw.c | 14 ++--
drivers/net/mlx4/eq.c | 4 +-
drivers/net/mlx4/main.c | 14 ++-
drivers/net/mlx4/mr.c | 6 +-
drivers/net/mlx4/profile.c | 2 +-
include/linux/mlx4/device.h | 1 +
include/linux/mlx4/qp.h | 1 +
26 files changed, 183 insertions(+), 136 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-05-13 22:18 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-05-13 22:18 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a couple of fixes to low-level drivers that fix crashes
seen when running NFS/RDMA:
Jack Morgenstein (1):
IB/mlx4: Don't overwrite fast registration page list when posting work request
Roland Dreier (1):
Merge branches 'cxgb3' and 'mlx4' into for-linus
Steve Wise (1):
RDMA/cxgb3: Don't complete flushed send work requests twice
drivers/infiniband/hw/cxgb3/cxio_hal.c | 1 +
drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
drivers/infiniband/hw/mlx4/mr.c | 10 ++++++++--
drivers/infiniband/hw/mlx4/qp.c | 2 +-
4 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c
index 8d71086..62f9cf2 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.c
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c
@@ -410,6 +410,7 @@ int cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count)
ptr = wq->sq_rptr + count;
sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2);
while (ptr != wq->sq_wptr) {
+ sqp->signaled = 0;
insert_sq_cqe(wq, cq, sqp);
ptr++;
sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2);
diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h
index 9974e88..8a7dd67 100644
--- a/drivers/infiniband/hw/mlx4/mlx4_ib.h
+++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h
@@ -86,6 +86,7 @@ struct mlx4_ib_mr {
struct mlx4_ib_fast_reg_page_list {
struct ib_fast_reg_page_list ibfrpl;
+ __be64 *mapped_page_list;
dma_addr_t map;
};
diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
index 8e4d26d..8f3666b 100644
--- a/drivers/infiniband/hw/mlx4/mr.c
+++ b/drivers/infiniband/hw/mlx4/mr.c
@@ -231,7 +231,11 @@ struct ib_fast_reg_page_list *mlx4_ib_alloc_fast_reg_page_list(struct ib_device
if (!mfrpl)
return ERR_PTR(-ENOMEM);
- mfrpl->ibfrpl.page_list = dma_alloc_coherent(&dev->dev->pdev->dev,
+ mfrpl->ibfrpl.page_list = kmalloc(size, GFP_KERNEL);
+ if (!mfrpl->ibfrpl.page_list)
+ goto err_free;
+
+ mfrpl->mapped_page_list = dma_alloc_coherent(&dev->dev->pdev->dev,
size, &mfrpl->map,
GFP_KERNEL);
if (!mfrpl->ibfrpl.page_list)
@@ -242,6 +246,7 @@ struct ib_fast_reg_page_list *mlx4_ib_alloc_fast_reg_page_list(struct ib_device
return &mfrpl->ibfrpl;
err_free:
+ kfree(mfrpl->ibfrpl.page_list);
kfree(mfrpl);
return ERR_PTR(-ENOMEM);
}
@@ -252,8 +257,9 @@ void mlx4_ib_free_fast_reg_page_list(struct ib_fast_reg_page_list *page_list)
struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(page_list);
int size = page_list->max_page_list_len * sizeof (u64);
- dma_free_coherent(&dev->dev->pdev->dev, size, page_list->page_list,
+ dma_free_coherent(&dev->dev->pdev->dev, size, mfrpl->mapped_page_list,
mfrpl->map);
+ kfree(mfrpl->ibfrpl.page_list);
kfree(mfrpl);
}
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index f385a24..20724ae 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1365,7 +1365,7 @@ static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr)
int i;
for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i)
- wr->wr.fast_reg.page_list->page_list[i] =
+ mfrpl->mapped_page_list[i] =
cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] |
MLX4_MTT_FLAG_PRESENT);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-04-28 23:03 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-04-28 23:03 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a batch of changes for -rc2, mostly low-level hardware
driver fixes with a few other miscellaneous fixes and an IPoIB
documentation update.
Chien Tung (8):
RDMA/nes: Fix compiler warning at nes_verbs.c:1955
RDMA/nes: Modify thermo mitigation to flip SerDes1 ref clk to internal
RDMA/nes: Correct CDR loop filter setting for port 1
RDMA/nes: Enable repause timer for port 1
RDMA/nes: Set trace length to 1 inch for SFP_D
RDMA/nes: Fix fw_ver in /sys
RDMA/nes: Fix unused variable compile warning when INFINIBAND_NES_DEBUG=n
RDMA/nes: Update iw_nes version
Don Wood (1):
RDMA/nes: Fix bugs in nes_reg_phys_mr()
Faisal Latif (5):
RDMA/nes: Do not set apbvt entry for loopback
RDMA/nes: Check for sequence number wrap-around
RDMA/nes: Increase rexmit timeout interval
RDMA/nes: Fix hang issues for large cluster dynamic connections
RDMA/nes: Fix error path in nes_accept()
Jack Morgenstein (1):
IB/mthca: Fix timeout for INIT_HCA and a few other commands
Matt Kraai (1):
RDMA/nes: Remove root_256()'s unused pbl_count_256 parameter
Miroslaw Walukiewicz (1):
RDMA/nes: Fix resource issues in nes_create_cq() and nes_destroy_cq()
Nicolas Morey-Chaisemartin (1):
mlx4_core: Fix memory leak in mlx4_enable_msi_x()
Roland Dreier (1):
Merge branches 'cxgb3', 'ipoib', 'mthca', 'mlx4' and 'nes' into for-linus
Steve Wise (2):
RDMA/cxgb3: Adjust ORD/IRD (if needed) for peer2peer connections
RDMA/cxgb3: Don't zero QP attrs when moving to IDLE
Yossi Etigin (1):
IPoIB: Disable NAPI while CQ is being drained
drivers/infiniband/hw/cxgb3/iwch_cm.c | 8 +++
drivers/infiniband/hw/cxgb3/iwch_qp.c | 1 -
drivers/infiniband/hw/mthca/mthca_cmd.c | 16 +++---
drivers/infiniband/hw/nes/nes.h | 4 +-
drivers/infiniband/hw/nes/nes_cm.c | 84 ++++++++++++++--------------
drivers/infiniband/hw/nes/nes_cm.h | 1 +
drivers/infiniband/hw/nes/nes_hw.c | 30 ++++++----
drivers/infiniband/hw/nes/nes_verbs.c | 67 +++++++++++++++--------
drivers/infiniband/hw/nes/nes_verbs.h | 1 +
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 6 ++-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 5 +--
drivers/net/mlx4/main.c | 2 +-
12 files changed, 130 insertions(+), 95 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-04-09 21:58 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-04-09 21:58 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a batch of changes for -rc2, mostly low-level hardware
driver fixes with a few other miscellaneous fixes and an IPoIB
documentation update.
Chien Tung (3):
RDMA/nes: Fix SFP+ PHY initialization
RDMA/nes: Add wide_ppm_offset parm for switch compatibility
RDMA/nes: Add support for new SFP+ PHY
Don Wood (1):
RDMA/nes: Fix incorrect casts on 32-bit architectures
Faisal Latif (2):
RDMA/nes: Fix error handling issues
RDMA/nes: Fix nes_nic_cm_xmit() error handling
Or Gerlitz (1):
IPoIB: Document newish features
Roland Dreier (4):
IB/mlx4: Use pgprot_writecombine() for BlueFlame pages
mlx4_core: Don't leak mailbox for SET_PORT on Ethernet ports
IPoIB: Avoid free_netdev() BUG when destroying a child interface
Merge branches 'cma', 'cxgb3', 'ipoib', 'mlx4' and 'nes' into for-next
Steve Wise (2):
RDMA/cxgb3: Handle EEH events
RDMA/cxgb3: Release dependent resources only when endpoint memory is freed.
Yossi Etigin (2):
RDMA/cma: Use rate from IPoIB broadcast when joining IPoIB multicast groups
RDMA/cma: Create cm id even when IB port is down
Documentation/infiniband/ipoib.txt | 45 ++++
drivers/infiniband/core/cma.c | 45 +++-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 10 +-
drivers/infiniband/hw/cxgb3/cxio_hal.h | 6 +
drivers/infiniband/hw/cxgb3/iwch.c | 11 +-
drivers/infiniband/hw/cxgb3/iwch.h | 5 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 116 ++++++---
drivers/infiniband/hw/cxgb3/iwch_cm.h | 3 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 4 +-
drivers/infiniband/hw/mlx4/main.c | 3 +-
drivers/infiniband/hw/nes/nes.h | 4 +-
drivers/infiniband/hw/nes/nes_cm.c | 22 +-
drivers/infiniband/hw/nes/nes_cm.h | 1 -
drivers/infiniband/hw/nes/nes_hw.c | 389 ++++++++++++++---------------
drivers/infiniband/hw/nes/nes_hw.h | 2 +
drivers/infiniband/hw/nes/nes_nic.c | 52 +++--
drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 25 ++-
drivers/net/mlx4/port.c | 5 +-
18 files changed, 442 insertions(+), 306 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-03-25 4:05 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-03-25 4:05 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This has the first batch of 2.6.30 changes -- I have one more patch
that I'll send after the net-next tree is merged (just to avoid merge
hassles due to dependencies).
Chien Tung (3):
RDMA/nes: Update copyright to new legal entity and year
RDMA/nes: Report correct vendor_id and vendor_part_id
RDMA/nes: Fix tmp_addr compilation warning
Don Wood (3):
RDMA/nes: Account for freed PBL after HW operation
RDMA/nes: Inform hardware that asynchronous event has been handled
RDMA/nes: Improve use of PBLs
Faisal Latif (2):
RDMA/nes: Remove LLTX
RDMA/nes: Handle MPA Reject message properly
Harvey Harrison (1):
IB: Remove __constant_{endian} uses
Jack Morgenstein (3):
IPoIB: In unicast_arp_send(), only free newly-created paths
mlx4_core: Add device IDs for MT25458 10GigE devices
IB/sa_query: Fix AH leak due to update_sm_ah() race
Moni Shoua (2):
IB/mlx4: Fix dispatch of IB_EVENT_LID_CHANGE event
IB/mthca: Fix dispatch of IB_EVENT_LID_CHANGE event
Or Gerlitz (1):
IB/iser: Remove hard setting of path MTU
Ralph Campbell (3):
IB/mad: Fix null pointer dereference in local_completions()
IB/mad: initialize mad_agent_priv before putting on lists
IB/mad: Fix ib_post_send_mad() returning 0 with no generate send comp
Ramachandra K (1):
IB/mad: Fix RMPP header RRespTime manipulation
Roland Dreier (5):
IB/ipath: Fix memory leak in init_shadow_tids() error path
IB/ipath: Really run work in ipath_release_user_pages_on_close()
IB: Remove sysfs files before unregistering device
IB: Remove useless ibdev_is_alive() tests from sysfs code
Merge branches 'cxgb3', 'endian', 'ipath', 'ipoib', 'iser', 'mad', 'misc', 'mlx4', 'mthca', 'nes' and 'sysfs' into for-next
Steve Wise (4):
RDMA/cxgb3: sgl/pbl offset calculation needs 64 bits
RDMA/cxgb3: Connection termination fixes
RDMA/cxgb3: Remove modulo math from build_rdma_recv()
RDMA/cxgb3: Enforce required firmware
Yevgeny Petrilin (3):
mlx4_core: Don't perform SET_PORT command for Ethernet ports
mlx4_core: Add link type autosensing
IB/mlx4: Unregister IB device prior to CLOSE PORT command
drivers/infiniband/core/cm.c | 15 +-
drivers/infiniband/core/cm_msgs.h | 22 +-
drivers/infiniband/core/device.c | 4 +-
drivers/infiniband/core/mad.c | 40 +-
drivers/infiniband/core/mad_rmpp.c | 2 +-
drivers/infiniband/core/sa_query.c | 2 +
drivers/infiniband/core/sysfs.c | 19 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 30 ++-
drivers/infiniband/hw/cxgb3/cxio_hal.h | 3 +
drivers/infiniband/hw/cxgb3/cxio_wr.h | 6 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 3 +
drivers/infiniband/hw/cxgb3/iwch_ev.c | 5 -
drivers/infiniband/hw/cxgb3/iwch_qp.c | 17 +-
drivers/infiniband/hw/ehca/ehca_sqp.c | 8 +-
drivers/infiniband/hw/ipath/ipath_eeprom.c | 4 +-
drivers/infiniband/hw/ipath/ipath_init_chip.c | 2 +-
drivers/infiniband/hw/ipath/ipath_mad.c | 95 ++--
drivers/infiniband/hw/ipath/ipath_rc.c | 2 +-
drivers/infiniband/hw/ipath/ipath_sdma.c | 4 +-
drivers/infiniband/hw/ipath/ipath_uc.c | 2 +-
drivers/infiniband/hw/ipath/ipath_ud.c | 4 +-
drivers/infiniband/hw/ipath/ipath_user_pages.c | 8 +-
drivers/infiniband/hw/ipath/ipath_user_sdma.c | 6 +-
drivers/infiniband/hw/ipath/ipath_verbs.c | 2 +-
drivers/infiniband/hw/ipath/ipath_verbs.h | 10 +-
drivers/infiniband/hw/mlx4/mad.c | 27 +-
drivers/infiniband/hw/mlx4/main.c | 5 +-
drivers/infiniband/hw/mlx4/qp.c | 22 +-
drivers/infiniband/hw/mthca/mthca_mad.c | 25 +-
drivers/infiniband/hw/nes/nes.c | 2 +-
drivers/infiniband/hw/nes/nes.h | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 586 ++++++++++++++++--------
drivers/infiniband/hw/nes/nes_cm.h | 12 +-
drivers/infiniband/hw/nes/nes_context.h | 2 +-
drivers/infiniband/hw/nes/nes_hw.c | 17 +-
drivers/infiniband/hw/nes/nes_hw.h | 5 +-
drivers/infiniband/hw/nes/nes_nic.c | 142 +++----
drivers/infiniband/hw/nes/nes_user.h | 2 +-
drivers/infiniband/hw/nes/nes_utils.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 249 +++++++----
drivers/infiniband/hw/nes/nes_verbs.h | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 9 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 7 -
drivers/net/mlx4/Makefile | 2 +-
drivers/net/mlx4/catas.c | 16 +-
drivers/net/mlx4/eq.c | 16 +-
drivers/net/mlx4/main.c | 106 ++++--
drivers/net/mlx4/mlx4.h | 27 +-
drivers/net/mlx4/port.c | 13 +-
drivers/net/mlx4/sense.c | 156 +++++++
include/linux/mlx4/cmd.h | 1 +
include/linux/mlx4/device.h | 6 +-
include/rdma/ib_cm.h | 12 +-
include/rdma/ib_mad.h | 4 +-
include/rdma/ib_smi.h | 34 +-
55 files changed, 1190 insertions(+), 636 deletions(-)
create mode 100644 drivers/net/mlx4/sense.c
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-01-16 23:07 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-01-16 23:07 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Some fixes to go into 2.6.29-rc3. Nothing too urgent so if this takes
a long time due to LCA, it's not a big deal. The bulk of things are
for the ehca driver, to fix warning spew caused by the powerpc u64
transition from long to long long.
Andrew Morton (1):
mlx4_core: Fix min() warning
Roland Dreier (4):
IPoIB: Fix hang in napi_disable() if P_Key is never found
IPoIB: Fix deadlock between ipoib_open() and child interface create
IB/mlx4: Fix memory ordering problem when posting LSO sends
Merge branches 'ehca', 'ipoib' and 'mlx4' into for-linus
Stephen Rothwell (2):
IB/ehca: Fix printk format warnings from u64 type change
IB/ehca: Use consistent types for ehca_plpar_hcall9()
Yossi Etigin (1):
IPoIB: Do not print error messages for multicast join retries
drivers/infiniband/hw/ehca/ehca_cq.c | 16 ++--
drivers/infiniband/hw/ehca/ehca_hca.c | 2 +-
drivers/infiniband/hw/ehca/ehca_irq.c | 18 ++--
drivers/infiniband/hw/ehca/ehca_main.c | 6 +-
drivers/infiniband/hw/ehca/ehca_mcast.c | 4 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 144 ++++++++++++------------
drivers/infiniband/hw/ehca/ehca_qp.c | 32 +++---
drivers/infiniband/hw/ehca/ehca_reqs.c | 2 +-
drivers/infiniband/hw/ehca/ehca_sqp.c | 2 +-
drivers/infiniband/hw/ehca/ehca_tools.h | 2 +-
drivers/infiniband/hw/ehca/ehca_uverbs.c | 2 +-
drivers/infiniband/hw/ehca/hcp_if.c | 56 +++++-----
drivers/infiniband/hw/mlx4/qp.c | 28 +++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 27 +++--
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 11 ++-
drivers/net/mlx4/profile.c | 6 +-
17 files changed, 189 insertions(+), 171 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2009-01-13 3:40 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2009-01-13 3:40 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Some fixes for 2.6.29-rc2:
Harvey Harrison (1):
RDMA/nes: Fix for NIPQUAD removal
Randy Dunlap (1):
IB/iser: Add dependency on INFINIBAND_ADDR_TRANS
Roland Dreier (3):
mlx4_core: Fix warning from min()
IB/mlx4: Don't register IB device for adapters with no IB ports
Merge branches 'ehca', 'ipoib', 'iser', 'mlx4' and 'nes' into for-next
Stephen Rothwell (1):
IB/ehca: spin_lock_irqsave() takes an unsigned long
Yossi Etigin (2):
IPoIB: Fix loss of connectivity after bonding failover on both sides
IPoIB: Do not join broadcast group if interface is brought down
drivers/infiniband/hw/ehca/ehca_main.c | 2 +-
drivers/infiniband/hw/mlx4/main.c | 13 +++++--
drivers/infiniband/hw/nes/nes_cm.c | 12 +++++--
drivers/infiniband/hw/nes/nes_utils.c | 4 ++-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 38 ++++++++++++------------
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 3 ++
drivers/infiniband/ulp/iser/Kconfig | 2 +-
drivers/net/mlx4/main.c | 4 +-
8 files changed, 47 insertions(+), 31 deletions(-)
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index 3b77b67..c7b8a50 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -955,7 +955,7 @@ void ehca_poll_eqs(unsigned long data)
struct ehca_eq *eq = &shca->eq;
int max = 3;
volatile u64 q_ofs, q_ofs2;
- u64 flags;
+ unsigned long flags;
spin_lock_irqsave(&eq->spinlock, flags);
q_ofs = eq->ipz_queue.current_q_offset;
spin_unlock_irqrestore(&eq->spinlock, flags);
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index dcefe1f..61588bd 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -543,14 +543,21 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
{
static int mlx4_ib_version_printed;
struct mlx4_ib_dev *ibdev;
+ int num_ports = 0;
int i;
-
if (!mlx4_ib_version_printed) {
printk(KERN_INFO "%s", mlx4_ib_version);
++mlx4_ib_version_printed;
}
+ mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_IB)
+ num_ports++;
+
+ /* No point in registering a device with no ports... */
+ if (num_ports == 0)
+ return NULL;
+
ibdev = (struct mlx4_ib_dev *) ib_alloc_device(sizeof *ibdev);
if (!ibdev) {
dev_err(&dev->pdev->dev, "Device struct alloc failed\n");
@@ -574,9 +581,7 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
ibdev->ib_dev.owner = THIS_MODULE;
ibdev->ib_dev.node_type = RDMA_NODE_IB_CA;
ibdev->ib_dev.local_dma_lkey = dev->caps.reserved_lkey;
- ibdev->num_ports = 0;
- mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_IB)
- ibdev->num_ports++;
+ ibdev->num_ports = num_ports;
ibdev->ib_dev.phys_port_cnt = ibdev->num_ports;
ibdev->ib_dev.num_comp_vectors = dev->caps.num_comp_vectors;
ibdev->ib_dev.dma_device = &dev->pdev->dev;
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index a812db2..ca9ef3f 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -778,12 +778,13 @@ static struct nes_cm_node *find_node(struct nes_cm_core *cm_core,
unsigned long flags;
struct list_head *hte;
struct nes_cm_node *cm_node;
+ __be32 tmp_addr = cpu_to_be32(loc_addr);
/* get a handle on the hte */
hte = &cm_core->connected_nodes;
nes_debug(NES_DBG_CM, "Searching for an owner node: %pI4:%x from core %p->%p\n",
- &loc_addr, loc_port, cm_core, hte);
+ &tmp_addr, loc_port, cm_core, hte);
/* walk list and find cm_node associated with this session ID */
spin_lock_irqsave(&cm_core->ht_lock, flags);
@@ -816,6 +817,7 @@ static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core,
{
unsigned long flags;
struct nes_cm_listener *listen_node;
+ __be32 tmp_addr = cpu_to_be32(dst_addr);
/* walk list and find cm_node associated with this session ID */
spin_lock_irqsave(&cm_core->listen_list_lock, flags);
@@ -833,7 +835,7 @@ static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core,
spin_unlock_irqrestore(&cm_core->listen_list_lock, flags);
nes_debug(NES_DBG_CM, "Unable to find listener for %pI4:%x\n",
- &dst_addr, dst_port);
+ &tmp_addr, dst_port);
/* no listener */
return NULL;
@@ -2059,6 +2061,7 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core,
struct tcphdr *tcph;
struct nes_cm_info nfo;
int skb_handled = 1;
+ __be32 tmp_daddr, tmp_saddr;
if (!skb)
return 0;
@@ -2074,8 +2077,11 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core,
nfo.rem_addr = ntohl(iph->saddr);
nfo.rem_port = ntohs(tcph->source);
+ tmp_daddr = cpu_to_be32(iph->daddr);
+ tmp_saddr = cpu_to_be32(iph->saddr);
+
nes_debug(NES_DBG_CM, "Received packet: dest=%pI4:0x%04X src=%pI4:0x%04X\n",
- &iph->daddr, tcph->dest, &iph->saddr, tcph->source);
+ &tmp_daddr, tcph->dest, &tmp_saddr, tcph->source);
do {
cm_node = find_node(cm_core,
diff --git a/drivers/infiniband/hw/nes/nes_utils.c b/drivers/infiniband/hw/nes/nes_utils.c
index aa9b734..6f3bc1b 100644
--- a/drivers/infiniband/hw/nes/nes_utils.c
+++ b/drivers/infiniband/hw/nes/nes_utils.c
@@ -655,6 +655,7 @@ int nes_arp_table(struct nes_device *nesdev, u32 ip_addr, u8 *mac_addr, u32 acti
struct nes_adapter *nesadapter = nesdev->nesadapter;
int arp_index;
int err = 0;
+ __be32 tmp_addr;
for (arp_index = 0; (u32) arp_index < nesadapter->arp_table_size; arp_index++) {
if (nesadapter->arp_table[arp_index].ip_addr == ip_addr)
@@ -682,8 +683,9 @@ int nes_arp_table(struct nes_device *nesdev, u32 ip_addr, u8 *mac_addr, u32 acti
/* DELETE or RESOLVE */
if (arp_index == nesadapter->arp_table_size) {
+ tmp_addr = cpu_to_be32(ip_addr);
nes_debug(NES_DBG_NETDEV, "MAC for %pI4 not in ARP table - cannot %s\n",
- &ip_addr, action == NES_ARP_RESOLVE ? "resolve" : "delete");
+ &tmp_addr, action == NES_ARP_RESOLVE ? "resolve" : "delete");
return -1;
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 19e06bc..dce0443 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -711,26 +711,26 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
neigh = *to_ipoib_neigh(skb->dst->neighbour);
- if (neigh->ah)
- if (unlikely((memcmp(&neigh->dgid.raw,
- skb->dst->neighbour->ha + 4,
- sizeof(union ib_gid))) ||
- (neigh->dev != dev))) {
- spin_lock_irqsave(&priv->lock, flags);
- /*
- * It's safe to call ipoib_put_ah() inside
- * priv->lock here, because we know that
- * path->ah will always hold one more reference,
- * so ipoib_put_ah() will never do more than
- * decrement the ref count.
- */
+ if (unlikely((memcmp(&neigh->dgid.raw,
+ skb->dst->neighbour->ha + 4,
+ sizeof(union ib_gid))) ||
+ (neigh->dev != dev))) {
+ spin_lock_irqsave(&priv->lock, flags);
+ /*
+ * It's safe to call ipoib_put_ah() inside
+ * priv->lock here, because we know that
+ * path->ah will always hold one more reference,
+ * so ipoib_put_ah() will never do more than
+ * decrement the ref count.
+ */
+ if (neigh->ah)
ipoib_put_ah(neigh->ah);
- list_del(&neigh->list);
- ipoib_neigh_free(dev, neigh);
- spin_unlock_irqrestore(&priv->lock, flags);
- ipoib_path_lookup(skb, dev);
- return NETDEV_TX_OK;
- }
+ list_del(&neigh->list);
+ ipoib_neigh_free(dev, neigh);
+ spin_unlock_irqrestore(&priv->lock, flags);
+ ipoib_path_lookup(skb, dev);
+ return NETDEV_TX_OK;
+ }
if (ipoib_cm_get(neigh)) {
if (ipoib_cm_up(neigh)) {
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index a2eb3b9..59d02e0 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -529,6 +529,9 @@ void ipoib_mcast_join_task(struct work_struct *work)
if (!priv->broadcast) {
struct ipoib_mcast *broadcast;
+ if (!test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
+ return;
+
broadcast = ipoib_mcast_alloc(dev, 1);
if (!broadcast) {
ipoib_warn(priv, "failed to allocate broadcast group\n");
diff --git a/drivers/infiniband/ulp/iser/Kconfig b/drivers/infiniband/ulp/iser/Kconfig
index 77dedba..b411c51 100644
--- a/drivers/infiniband/ulp/iser/Kconfig
+++ b/drivers/infiniband/ulp/iser/Kconfig
@@ -1,6 +1,6 @@
config INFINIBAND_ISER
tristate "iSCSI Extensions for RDMA (iSER)"
- depends on SCSI && INET
+ depends on SCSI && INET && INFINIBAND_ADDR_TRANS
select SCSI_ISCSI_ATTRS
---help---
Support for the iSCSI Extensions for RDMA (iSER) Protocol
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 710c79e..6ef2490 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -912,8 +912,8 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
int i;
if (msi_x) {
- nreq = min(dev->caps.num_eqs - dev->caps.reserved_eqs,
- num_possible_cpus() + 1);
+ nreq = min_t(int, dev->caps.num_eqs - dev->caps.reserved_eqs,
+ num_possible_cpus() + 1);
entries = kcalloc(nreq, sizeof *entries, GFP_KERNEL);
if (!entries)
goto no_msi;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-12-30 23:38 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-12-30 23:38 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
A build fix and an endianness bug fix before the new year:
Roland Dreier (3):
RDMA/addr: Fix build breakage when IPv6 is disabled
IB/mlx4: Fix reading SL field out of cqe->sl_vid
Merge branches 'cma' and 'mlx4' into for-linus
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/core/addr.c | 47 +++++++++++++++++++++++++++++++++-----
drivers/infiniband/hw/mlx4/cq.c | 2 +-
3 files changed, 42 insertions(+), 8 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-12-25 15:21 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-12-25 15:21 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the first tranche of InfiniBand/RDMA changes for 2.6.29:
Aleksey Senin (2):
RDMA/addr: Add support for translating IPv6 addresses
RDMA/cma: Add IPv6 support
Chien Tung (2):
RDMA/nes: Add loopback check to make_cm_node()
RDMA/nes: Cleanup warnings
Dave Olson (4):
IB/ipath: Don't count IB symbol and link errors unless link is UP
IB/ipath: Only do 1X workaround on rev1 chips
IB/ipath: Fix spi_pioindex value
IB/ipath: Add locking for interrupt use of ipath_pd contexts vs free
David Disseldorp (1):
IB/iser: Avoid recv buffer exhaustion caused by unexpected PDUs
Faisal Latif (7):
RDMA/nes: Cleanup cqp_request list usage
RDMA/nes: Lock down connected_nodes list while processing it
RDMA/nes: Avoid race between MPA request and reset event to rdma_cm
RDMA/nes: Forward packets for a new connection with stale APBVT entry
RDMA/nes: Fix TCP compliance test failures
RDMA/nes: Check cqp_avail_reqs is empty after locking the list
RDMA/nes: Remove tx_free_list
Jack Morgenstein (1):
IB/mlx4: Set ownership bit correctly when copying CQEs during CQ resize
Joachim Fenkes (1):
IB/ehca: Fix locking for shca_list_lock
Julia Lawall (1):
IB/ehca: Remove redundant test of vpage
Michael Ellerman (1):
IB/ipath: Fix pointer-to-pointer thinko in ipath_fs.c
Ralph Campbell (3):
IB/ipath: Improve UD loopback performance by allocating temp array only once
IB/ipath: Fix PSN of send WQEs after an RDMA read resend
IB/ipath: Check return value of dma_map_single()
Roland Dreier (2):
mlx4_core: Delete incorrect comment
Merge branches 'cma', 'ehca', 'ipath', 'iser', 'mlx4' and 'nes' into for-next
Stefan Roscher (1):
IB/ehca: Replace modulus operations in flush error completion path
Yevgeny Petrilin (1):
mlx4_core: Add support for multiple completion event vectors
drivers/infiniband/core/addr.c | 196 +++++++++++++----
drivers/infiniband/core/cma.c | 86 ++++++---
drivers/infiniband/hw/ehca/ehca_classes.h | 7 +
drivers/infiniband/hw/ehca/ehca_eq.c | 2 +-
drivers/infiniband/hw/ehca/ehca_main.c | 17 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 12 +-
drivers/infiniband/hw/ehca/ehca_reqs.c | 13 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 49 +++--
drivers/infiniband/hw/ipath/ipath_file_ops.c | 30 ++--
drivers/infiniband/hw/ipath/ipath_fs.c | 2 +-
drivers/infiniband/hw/ipath/ipath_iba6120.c | 61 ++++++
drivers/infiniband/hw/ipath/ipath_iba7220.c | 83 +++++++-
drivers/infiniband/hw/ipath/ipath_init_chip.c | 1 +
drivers/infiniband/hw/ipath/ipath_kernel.h | 15 ++
drivers/infiniband/hw/ipath/ipath_keys.c | 2 +
drivers/infiniband/hw/ipath/ipath_mad.c | 2 +
drivers/infiniband/hw/ipath/ipath_qp.c | 32 ++-
drivers/infiniband/hw/ipath/ipath_rc.c | 5 +-
drivers/infiniband/hw/ipath/ipath_sdma.c | 21 ++-
drivers/infiniband/hw/ipath/ipath_stats.c | 8 +
drivers/infiniband/hw/ipath/ipath_ud.c | 19 +--
drivers/infiniband/hw/ipath/ipath_verbs.c | 3 +-
drivers/infiniband/hw/ipath/ipath_verbs.h | 1 +
drivers/infiniband/hw/mlx4/cq.c | 12 +-
drivers/infiniband/hw/mlx4/main.c | 2 +-
drivers/infiniband/hw/nes/nes.h | 18 +-
drivers/infiniband/hw/nes/nes_cm.c | 279 +++++++++++++------------
drivers/infiniband/hw/nes/nes_cm.h | 14 +-
drivers/infiniband/hw/nes/nes_hw.c | 42 ++--
drivers/infiniband/hw/nes/nes_utils.c | 9 +-
drivers/infiniband/hw/nes/nes_verbs.c | 45 +---
drivers/infiniband/ulp/iser/iscsi_iser.h | 3 +
drivers/infiniband/ulp/iser/iser_initiator.c | 132 ++++++++----
drivers/infiniband/ulp/iser/iser_verbs.c | 1 +
drivers/net/mlx4/cq.c | 11 +-
drivers/net/mlx4/en_cq.c | 9 +-
drivers/net/mlx4/en_main.c | 4 +-
drivers/net/mlx4/eq.c | 121 ++++++++---
drivers/net/mlx4/main.c | 53 ++++--
drivers/net/mlx4/mlx4.h | 14 +-
drivers/net/mlx4/profile.c | 4 +-
include/linux/mlx4/device.h | 4 +-
42 files changed, 965 insertions(+), 479 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-12-01 18:16 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-12-01 18:16 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get two fixes to the ehca driver for problems in patches
added in the 2.6.28 cycle, and two fixes for mlx4, one for a
regression introduced in the 2.6.28 cycle, and one for a resource leak
that is serious enough and has a simple enough fix to target -stable.
Jack Morgenstein (2):
mlx4_core: Save/restore default port IB capability mask
IB/mlx4: Fix MTT leakage in resize CQ
Joachim Fenkes (1):
IB/ehca: Change misleading error message on memory hotplug
Roland Dreier (1):
Merge branches 'ehca' and 'mlx4' into for-linus
Stefan Roscher (1):
IB/ehca: Fix problem with generated flush work completions
drivers/infiniband/hw/ehca/ehca_classes.h | 4 ++-
drivers/infiniband/hw/ehca/ehca_main.c | 3 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 26 +++++++++++---
drivers/infiniband/hw/ehca/ehca_reqs.c | 51 +++++++++++++++++------------
drivers/infiniband/hw/mlx4/cq.c | 5 +++
drivers/net/mlx4/main.c | 8 ++++
drivers/net/mlx4/mlx4.h | 1 +
drivers/net/mlx4/port.c | 39 +++++++++++++++++++++-
include/linux/mlx4/device.h | 1 +
9 files changed, 107 insertions(+), 31 deletions(-)
diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h
index 4df887a..7fc35cf 100644
--- a/drivers/infiniband/hw/ehca/ehca_classes.h
+++ b/drivers/infiniband/hw/ehca/ehca_classes.h
@@ -163,7 +163,8 @@ struct ehca_mod_qp_parm {
/* struct for tracking if cqes have been reported to the application */
struct ehca_qmap_entry {
u16 app_wr_id;
- u16 reported;
+ u8 reported;
+ u8 cqe_req;
};
struct ehca_queue_map {
@@ -171,6 +172,7 @@ struct ehca_queue_map {
unsigned int entries;
unsigned int tail;
unsigned int left_to_poll;
+ unsigned int next_wqe_idx; /* Idx to first wqe to be flushed */
};
struct ehca_qp {
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index bb02a86..bec7e02 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -994,8 +994,7 @@ static int ehca_mem_notifier(struct notifier_block *nb,
if (printk_timed_ratelimit(&ehca_dmem_warn_time,
30 * 1000))
ehca_gen_err("DMEM operations are not allowed"
- "as long as an ehca adapter is"
- "attached to the LPAR");
+ "in conjunction with eHCA");
return NOTIFY_BAD;
}
}
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index 9e05ee2..cadbf0c 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -435,9 +435,13 @@ static void reset_queue_map(struct ehca_queue_map *qmap)
{
int i;
- qmap->tail = 0;
- for (i = 0; i < qmap->entries; i++)
+ qmap->tail = qmap->entries - 1;
+ qmap->left_to_poll = 0;
+ qmap->next_wqe_idx = 0;
+ for (i = 0; i < qmap->entries; i++) {
qmap->map[i].reported = 1;
+ qmap->map[i].cqe_req = 0;
+ }
}
/*
@@ -1121,6 +1125,7 @@ static int calc_left_cqes(u64 wqe_p, struct ipz_queue *ipz_queue,
void *wqe_v;
u64 q_ofs;
u32 wqe_idx;
+ unsigned int tail_idx;
/* convert real to abs address */
wqe_p = wqe_p & (~(1UL << 63));
@@ -1133,12 +1138,17 @@ static int calc_left_cqes(u64 wqe_p, struct ipz_queue *ipz_queue,
return -EFAULT;
}
+ tail_idx = (qmap->tail + 1) % qmap->entries;
wqe_idx = q_ofs / ipz_queue->qe_size;
- if (wqe_idx < qmap->tail)
- qmap->left_to_poll = (qmap->entries - qmap->tail) + wqe_idx;
- else
- qmap->left_to_poll = wqe_idx - qmap->tail;
+ /* check all processed wqes, whether a cqe is requested or not */
+ while (tail_idx != wqe_idx) {
+ if (qmap->map[tail_idx].cqe_req)
+ qmap->left_to_poll++;
+ tail_idx = (tail_idx + 1) % qmap->entries;
+ }
+ /* save index in queue, where we have to start flushing */
+ qmap->next_wqe_idx = wqe_idx;
return 0;
}
@@ -1185,10 +1195,14 @@ static int check_for_left_cqes(struct ehca_qp *my_qp, struct ehca_shca *shca)
} else {
spin_lock_irqsave(&my_qp->send_cq->spinlock, flags);
my_qp->sq_map.left_to_poll = 0;
+ my_qp->sq_map.next_wqe_idx = (my_qp->sq_map.tail + 1) %
+ my_qp->sq_map.entries;
spin_unlock_irqrestore(&my_qp->send_cq->spinlock, flags);
spin_lock_irqsave(&my_qp->recv_cq->spinlock, flags);
my_qp->rq_map.left_to_poll = 0;
+ my_qp->rq_map.next_wqe_idx = (my_qp->rq_map.tail + 1) %
+ my_qp->rq_map.entries;
spin_unlock_irqrestore(&my_qp->recv_cq->spinlock, flags);
}
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c
index 6492807..00a648f 100644
--- a/drivers/infiniband/hw/ehca/ehca_reqs.c
+++ b/drivers/infiniband/hw/ehca/ehca_reqs.c
@@ -179,6 +179,7 @@ static inline int ehca_write_swqe(struct ehca_qp *qp,
qmap_entry->app_wr_id = get_app_wr_id(send_wr->wr_id);
qmap_entry->reported = 0;
+ qmap_entry->cqe_req = 0;
switch (send_wr->opcode) {
case IB_WR_SEND:
@@ -203,8 +204,10 @@ static inline int ehca_write_swqe(struct ehca_qp *qp,
if ((send_wr->send_flags & IB_SEND_SIGNALED ||
qp->init_attr.sq_sig_type == IB_SIGNAL_ALL_WR)
- && !hidden)
+ && !hidden) {
wqe_p->wr_flag |= WQE_WRFLAG_REQ_SIGNAL_COM;
+ qmap_entry->cqe_req = 1;
+ }
if (send_wr->opcode == IB_WR_SEND_WITH_IMM ||
send_wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) {
@@ -569,6 +572,7 @@ static int internal_post_recv(struct ehca_qp *my_qp,
qmap_entry = &my_qp->rq_map.map[rq_map_idx];
qmap_entry->app_wr_id = get_app_wr_id(cur_recv_wr->wr_id);
qmap_entry->reported = 0;
+ qmap_entry->cqe_req = 1;
wqe_cnt++;
} /* eof for cur_recv_wr */
@@ -706,27 +710,34 @@ repoll:
goto repoll;
wc->qp = &my_qp->ib_qp;
+ qmap_tail_idx = get_app_wr_id(cqe->work_request_id);
+ if (!(cqe->w_completion_flags & WC_SEND_RECEIVE_BIT))
+ /* We got a send completion. */
+ qmap = &my_qp->sq_map;
+ else
+ /* We got a receive completion. */
+ qmap = &my_qp->rq_map;
+
+ /* advance the tail pointer */
+ qmap->tail = qmap_tail_idx;
+
if (is_error) {
/*
* set left_to_poll to 0 because in error state, we will not
* get any additional CQEs
*/
- ehca_add_to_err_list(my_qp, 1);
+ my_qp->sq_map.next_wqe_idx = (my_qp->sq_map.tail + 1) %
+ my_qp->sq_map.entries;
my_qp->sq_map.left_to_poll = 0;
+ ehca_add_to_err_list(my_qp, 1);
+ my_qp->rq_map.next_wqe_idx = (my_qp->rq_map.tail + 1) %
+ my_qp->rq_map.entries;
+ my_qp->rq_map.left_to_poll = 0;
if (HAS_RQ(my_qp))
ehca_add_to_err_list(my_qp, 0);
- my_qp->rq_map.left_to_poll = 0;
}
- qmap_tail_idx = get_app_wr_id(cqe->work_request_id);
- if (!(cqe->w_completion_flags & WC_SEND_RECEIVE_BIT))
- /* We got a send completion. */
- qmap = &my_qp->sq_map;
- else
- /* We got a receive completion. */
- qmap = &my_qp->rq_map;
-
qmap_entry = &qmap->map[qmap_tail_idx];
if (qmap_entry->reported) {
ehca_warn(cq->device, "Double cqe on qp_num=%#x",
@@ -738,10 +749,6 @@ repoll:
wc->wr_id = replace_wr_id(cqe->work_request_id, qmap_entry->app_wr_id);
qmap_entry->reported = 1;
- /* this is a proper completion, we need to advance the tail pointer */
- if (++qmap->tail == qmap->entries)
- qmap->tail = 0;
-
/* if left_to_poll is decremented to 0, add the QP to the error list */
if (qmap->left_to_poll > 0) {
qmap->left_to_poll--;
@@ -805,13 +812,14 @@ static int generate_flush_cqes(struct ehca_qp *my_qp, struct ib_cq *cq,
else
qmap = &my_qp->rq_map;
- qmap_entry = &qmap->map[qmap->tail];
+ qmap_entry = &qmap->map[qmap->next_wqe_idx];
while ((nr < num_entries) && (qmap_entry->reported == 0)) {
/* generate flush CQE */
+
memset(wc, 0, sizeof(*wc));
- offset = qmap->tail * ipz_queue->qe_size;
+ offset = qmap->next_wqe_idx * ipz_queue->qe_size;
wqe = (struct ehca_wqe *)ipz_qeit_calc(ipz_queue, offset);
if (!wqe) {
ehca_err(cq->device, "Invalid wqe offset=%#lx on "
@@ -850,11 +858,12 @@ static int generate_flush_cqes(struct ehca_qp *my_qp, struct ib_cq *cq,
wc->qp = &my_qp->ib_qp;
- /* mark as reported and advance tail pointer */
+ /* mark as reported and advance next_wqe pointer */
qmap_entry->reported = 1;
- if (++qmap->tail == qmap->entries)
- qmap->tail = 0;
- qmap_entry = &qmap->map[qmap->tail];
+ qmap->next_wqe_idx++;
+ if (qmap->next_wqe_idx == qmap->entries)
+ qmap->next_wqe_idx = 0;
+ qmap_entry = &qmap->map[qmap->next_wqe_idx];
wc++; nr++;
}
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index d0866a3..1830849 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
@@ -343,6 +343,7 @@ int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
{
struct mlx4_ib_dev *dev = to_mdev(ibcq->device);
struct mlx4_ib_cq *cq = to_mcq(ibcq);
+ struct mlx4_mtt mtt;
int outst_cqe;
int err;
@@ -376,10 +377,13 @@ int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
goto out;
}
+ mtt = cq->buf.mtt;
+
err = mlx4_cq_resize(dev->dev, &cq->mcq, entries, &cq->resize_buf->buf.mtt);
if (err)
goto err_buf;
+ mlx4_mtt_cleanup(dev->dev, &mtt);
if (ibcq->uobject) {
cq->buf = cq->resize_buf->buf;
cq->ibcq.cqe = cq->resize_buf->cqe;
@@ -406,6 +410,7 @@ int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
goto out;
err_buf:
+ mlx4_mtt_cleanup(dev->dev, &cq->resize_buf->buf.mtt);
if (!ibcq->uobject)
mlx4_ib_free_cq_buf(dev, &cq->resize_buf->buf,
cq->resize_buf->cqe);
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 468921b..90a0281 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -753,6 +753,7 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
struct mlx4_priv *priv = mlx4_priv(dev);
int err;
int port;
+ __be32 ib_port_default_caps;
err = mlx4_init_uar_table(dev);
if (err) {
@@ -852,6 +853,13 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
}
for (port = 1; port <= dev->caps.num_ports; port++) {
+ ib_port_default_caps = 0;
+ err = mlx4_get_port_ib_caps(dev, port, &ib_port_default_caps);
+ if (err)
+ mlx4_warn(dev, "failed to get port %d default "
+ "ib capabilities (%d). Continuing with "
+ "caps = 0\n", port, err);
+ dev->caps.ib_port_def_cap[port] = ib_port_default_caps;
err = mlx4_SET_PORT(dev, port);
if (err) {
mlx4_err(dev, "Failed to set port %d, aborting\n",
diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h
index 56a2e21..34c909d 100644
--- a/drivers/net/mlx4/mlx4.h
+++ b/drivers/net/mlx4/mlx4.h
@@ -385,5 +385,6 @@ void mlx4_init_mac_table(struct mlx4_dev *dev, struct mlx4_mac_table *table);
void mlx4_init_vlan_table(struct mlx4_dev *dev, struct mlx4_vlan_table *table);
int mlx4_SET_PORT(struct mlx4_dev *dev, u8 port);
+int mlx4_get_port_ib_caps(struct mlx4_dev *dev, u8 port, __be32 *caps);
#endif /* MLX4_H */
diff --git a/drivers/net/mlx4/port.c b/drivers/net/mlx4/port.c
index e2fdab4..0a057e5 100644
--- a/drivers/net/mlx4/port.c
+++ b/drivers/net/mlx4/port.c
@@ -258,6 +258,42 @@ out:
}
EXPORT_SYMBOL_GPL(mlx4_unregister_vlan);
+int mlx4_get_port_ib_caps(struct mlx4_dev *dev, u8 port, __be32 *caps)
+{
+ struct mlx4_cmd_mailbox *inmailbox, *outmailbox;
+ u8 *inbuf, *outbuf;
+ int err;
+
+ inmailbox = mlx4_alloc_cmd_mailbox(dev);
+ if (IS_ERR(inmailbox))
+ return PTR_ERR(inmailbox);
+
+ outmailbox = mlx4_alloc_cmd_mailbox(dev);
+ if (IS_ERR(outmailbox)) {
+ mlx4_free_cmd_mailbox(dev, inmailbox);
+ return PTR_ERR(outmailbox);
+ }
+
+ inbuf = inmailbox->buf;
+ outbuf = outmailbox->buf;
+ memset(inbuf, 0, 256);
+ memset(outbuf, 0, 256);
+ inbuf[0] = 1;
+ inbuf[1] = 1;
+ inbuf[2] = 1;
+ inbuf[3] = 1;
+ *(__be16 *) (&inbuf[16]) = cpu_to_be16(0x0015);
+ *(__be32 *) (&inbuf[20]) = cpu_to_be32(port);
+
+ err = mlx4_cmd_box(dev, inmailbox->dma, outmailbox->dma, port, 3,
+ MLX4_CMD_MAD_IFC, MLX4_CMD_TIME_CLASS_C);
+ if (!err)
+ *caps = *(__be32 *) (outbuf + 84);
+ mlx4_free_cmd_mailbox(dev, inmailbox);
+ mlx4_free_cmd_mailbox(dev, outmailbox);
+ return err;
+}
+
int mlx4_SET_PORT(struct mlx4_dev *dev, u8 port)
{
struct mlx4_cmd_mailbox *mailbox;
@@ -273,7 +309,8 @@ int mlx4_SET_PORT(struct mlx4_dev *dev, u8 port)
((u8 *) mailbox->buf)[3] = 6;
((__be16 *) mailbox->buf)[4] = cpu_to_be16(1 << 15);
((__be16 *) mailbox->buf)[6] = cpu_to_be16(1 << 15);
- }
+ } else
+ ((__be32 *) mailbox->buf)[1] = dev->caps.ib_port_def_cap[port];
err = mlx4_cmd(dev, mailbox->dma, port, is_eth, MLX4_CMD_SET_PORT,
MLX4_CMD_TIME_CLASS_B);
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index bd9977b..371086f 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -179,6 +179,7 @@ struct mlx4_caps {
int num_ports;
int vl_cap[MLX4_MAX_PORTS + 1];
int ib_mtu_cap[MLX4_MAX_PORTS + 1];
+ __be32 ib_port_def_cap[MLX4_MAX_PORTS + 1];
u64 def_mac[MLX4_MAX_PORTS + 1];
int eth_mtu_cap[MLX4_MAX_PORTS + 1];
int gid_table_len[MLX4_MAX_PORTS + 1];
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-11-04 21:37 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-11-04 21:37 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the following changes; mostly low-level hardware changes
plus a couple of small patches that fix IPoIB crashes.
Chien Tung (2):
RDMA/nes: Correct handling of PBL resources
RDMA/nes: Mitigate compatibility issue regarding PCIe write credits
Ilpo Järvinen (1):
RDMA/nes: Reindent mis-indented spinlocks
Ralph Campbell (1):
IB/ipath: Fix RDMA write with immediate copy of last packet
Roland Dreier (3):
RDMA/cxgb3: Fix too-big reserved field zeroing in iwch_post_zb_read()
mlx4_core: Fix unused variable warning
Merge branches 'cxgb3', 'ehca', 'ipath', 'ipoib', 'mlx4' and 'nes' into for-next
Stefan Roscher (1):
IB/ehca: Remove reference to special QP in case of port activation failure
Vadim Makhervaks (1):
RDMA/nes: Fix CQ allocation scheme for multicast receive queue apps
Yossi Etigin (3):
IPoIB: Don't enable napi when it's already enabled
IPoIB: Fix hang in ipoib_flush_paths()
IPoIB: Fix crash in path_rec_completion()
drivers/infiniband/hw/cxgb3/iwch_qp.c | 1 -
drivers/infiniband/hw/ehca/ehca_irq.c | 7 ++-
drivers/infiniband/hw/ehca/ehca_qp.c | 5 ++
drivers/infiniband/hw/ipath/ipath_ruc.c | 10 ++--
drivers/infiniband/hw/nes/nes.c | 16 +++++++
drivers/infiniband/hw/nes/nes_hw.h | 1 +
drivers/infiniband/hw/nes/nes_verbs.c | 64 +++++++++++++++++++---------
drivers/infiniband/ulp/ipoib/ipoib_main.c | 6 ++-
drivers/net/mlx4/mlx4.h | 9 +---
9 files changed, 82 insertions(+), 37 deletions(-)
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c
index 3e4585c..19661b2 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_qp.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c
@@ -745,7 +745,6 @@ int iwch_post_zb_read(struct iwch_qp *qhp)
wqe->read.rdmaop = T3_READ_REQ;
wqe->read.reserved[0] = 0;
wqe->read.reserved[1] = 0;
- wqe->read.reserved[2] = 0;
wqe->read.rem_stag = cpu_to_be32(1);
wqe->read.rem_to = cpu_to_be64(1);
wqe->read.local_stag = cpu_to_be32(1);
diff --git a/drivers/infiniband/hw/ehca/ehca_irq.c b/drivers/infiniband/hw/ehca/ehca_irq.c
index cb55be0..9e43459 100644
--- a/drivers/infiniband/hw/ehca/ehca_irq.c
+++ b/drivers/infiniband/hw/ehca/ehca_irq.c
@@ -370,6 +370,10 @@ static void parse_ec(struct ehca_shca *shca, u64 eqe)
switch (ec) {
case 0x30: /* port availability change */
if (EHCA_BMASK_GET(NEQE_PORT_AVAILABILITY, eqe)) {
+ /* only for autodetect mode important */
+ if (ehca_nr_ports >= 0)
+ break;
+
int suppress_event;
/* replay modify_qp for sqps */
spin_lock_irqsave(&sport->mod_sqp_lock, flags);
@@ -387,8 +391,7 @@ static void parse_ec(struct ehca_shca *shca, u64 eqe)
sport->port_state = IB_PORT_ACTIVE;
dispatch_port_event(shca, port, IB_EVENT_PORT_ACTIVE,
"is active");
- ehca_query_sma_attr(shca, port,
- &sport->saved_attr);
+ ehca_query_sma_attr(shca, port, &sport->saved_attr);
} else {
sport->port_state = IB_PORT_DOWN;
dispatch_port_event(shca, port, IB_EVENT_PORT_ERR,
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index 4d54b9f..9e05ee2 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -860,6 +860,11 @@ static struct ehca_qp *internal_create_qp(
if (qp_type == IB_QPT_GSI) {
h_ret = ehca_define_sqp(shca, my_qp, init_attr);
if (h_ret != H_SUCCESS) {
+ kfree(my_qp->mod_qp_parm);
+ my_qp->mod_qp_parm = NULL;
+ /* the QP pointer is no longer valid */
+ shca->sport[init_attr->port_num - 1].ibqp_sqp[qp_type] =
+ NULL;
ret = ehca2ib_return_code(h_ret);
goto create_qp_exit6;
}
diff --git a/drivers/infiniband/hw/ipath/ipath_ruc.c b/drivers/infiniband/hw/ipath/ipath_ruc.c
index fc0f6d9..2296832 100644
--- a/drivers/infiniband/hw/ipath/ipath_ruc.c
+++ b/drivers/infiniband/hw/ipath/ipath_ruc.c
@@ -156,7 +156,7 @@ bail:
/**
* ipath_get_rwqe - copy the next RWQE into the QP's RWQE
* @qp: the QP
- * @wr_id_only: update wr_id only, not SGEs
+ * @wr_id_only: update qp->r_wr_id only, not qp->r_sge
*
* Return 0 if no RWQE is available, otherwise return 1.
*
@@ -173,8 +173,6 @@ int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only)
u32 tail;
int ret;
- qp->r_sge.sg_list = qp->r_sg_list;
-
if (qp->ibqp.srq) {
srq = to_isrq(qp->ibqp.srq);
handler = srq->ibsrq.event_handler;
@@ -206,8 +204,10 @@ int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only)
wqe = get_rwqe_ptr(rq, tail);
if (++tail >= rq->size)
tail = 0;
- } while (!wr_id_only && !ipath_init_sge(qp, wqe, &qp->r_len,
- &qp->r_sge));
+ if (wr_id_only)
+ break;
+ qp->r_sge.sg_list = qp->r_sg_list;
+ } while (!ipath_init_sge(qp, wqe, &qp->r_len, &qp->r_sge));
qp->r_wr_id = wqe->wr_id;
wq->tail = tail;
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c
index a2b04d6..aa1dc41 100644
--- a/drivers/infiniband/hw/nes/nes.c
+++ b/drivers/infiniband/hw/nes/nes.c
@@ -95,6 +95,10 @@ unsigned int wqm_quanta = 0x10000;
module_param(wqm_quanta, int, 0644);
MODULE_PARM_DESC(wqm_quanta, "WQM quanta");
+static unsigned int limit_maxrdreqsz;
+module_param(limit_maxrdreqsz, bool, 0644);
+MODULE_PARM_DESC(limit_maxrdreqsz, "Limit max read request size to 256 Bytes");
+
LIST_HEAD(nes_adapter_list);
static LIST_HEAD(nes_dev_list);
@@ -588,6 +592,18 @@ static int __devinit nes_probe(struct pci_dev *pcidev, const struct pci_device_i
nesdev->nesadapter->port_count;
}
+ if ((limit_maxrdreqsz ||
+ ((nesdev->nesadapter->phy_type[0] == NES_PHY_TYPE_GLADIUS) &&
+ (hw_rev == NE020_REV1))) &&
+ (pcie_get_readrq(pcidev) > 256)) {
+ if (pcie_set_readrq(pcidev, 256))
+ printk(KERN_ERR PFX "Unable to set max read request"
+ " to 256 bytes\n");
+ else
+ nes_debug(NES_DBG_INIT, "Max read request size set"
+ " to 256 bytes\n");
+ }
+
tasklet_init(&nesdev->dpc_tasklet, nes_dpc, (unsigned long)nesdev);
/* bring up the Control QP */
diff --git a/drivers/infiniband/hw/nes/nes_hw.h b/drivers/infiniband/hw/nes/nes_hw.h
index 610b9d8..bc0b4de 100644
--- a/drivers/infiniband/hw/nes/nes_hw.h
+++ b/drivers/infiniband/hw/nes/nes_hw.h
@@ -40,6 +40,7 @@
#define NES_PHY_TYPE_ARGUS 4
#define NES_PHY_TYPE_PUMA_1G 5
#define NES_PHY_TYPE_PUMA_10G 6
+#define NES_PHY_TYPE_GLADIUS 7
#define NES_MULTICAST_PF_MAX 8
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 932e56f..d36c9a0 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -220,14 +220,14 @@ static int nes_bind_mw(struct ib_qp *ibqp, struct ib_mw *ibmw,
if (nesqp->ibqp_state > IB_QPS_RTS)
return -EINVAL;
- spin_lock_irqsave(&nesqp->lock, flags);
+ spin_lock_irqsave(&nesqp->lock, flags);
head = nesqp->hwqp.sq_head;
qsize = nesqp->hwqp.sq_tail;
/* Check for SQ overflow */
if (((head + (2 * qsize) - nesqp->hwqp.sq_tail) % qsize) == (qsize - 1)) {
- spin_unlock_irqrestore(&nesqp->lock, flags);
+ spin_unlock_irqrestore(&nesqp->lock, flags);
return -EINVAL;
}
@@ -269,7 +269,7 @@ static int nes_bind_mw(struct ib_qp *ibqp, struct ib_mw *ibmw,
nes_write32(nesdev->regs+NES_WQE_ALLOC,
(1 << 24) | 0x00800000 | nesqp->hwqp.qp_id);
- spin_unlock_irqrestore(&nesqp->lock, flags);
+ spin_unlock_irqrestore(&nesqp->lock, flags);
return 0;
}
@@ -349,7 +349,7 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
if (nesfmr->nesmr.pbls_used > nesadapter->free_4kpbl) {
spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
ret = -ENOMEM;
- goto failed_vpbl_alloc;
+ goto failed_vpbl_avail;
} else {
nesadapter->free_4kpbl -= nesfmr->nesmr.pbls_used;
}
@@ -357,7 +357,7 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
if (nesfmr->nesmr.pbls_used > nesadapter->free_256pbl) {
spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
ret = -ENOMEM;
- goto failed_vpbl_alloc;
+ goto failed_vpbl_avail;
} else {
nesadapter->free_256pbl -= nesfmr->nesmr.pbls_used;
}
@@ -391,14 +391,14 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
goto failed_vpbl_alloc;
}
- nesfmr->root_vpbl.leaf_vpbl = kzalloc(sizeof(*nesfmr->root_vpbl.leaf_vpbl)*1024, GFP_KERNEL);
+ nesfmr->leaf_pbl_cnt = nesfmr->nesmr.pbls_used-1;
+ nesfmr->root_vpbl.leaf_vpbl = kzalloc(sizeof(*nesfmr->root_vpbl.leaf_vpbl)*1024, GFP_ATOMIC);
if (!nesfmr->root_vpbl.leaf_vpbl) {
spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
ret = -ENOMEM;
goto failed_leaf_vpbl_alloc;
}
- nesfmr->leaf_pbl_cnt = nesfmr->nesmr.pbls_used-1;
nes_debug(NES_DBG_MR, "two level pbl, root_vpbl.pbl_vbase=%p"
" leaf_pbl_cnt=%d root_vpbl.leaf_vpbl=%p\n",
nesfmr->root_vpbl.pbl_vbase, nesfmr->leaf_pbl_cnt, nesfmr->root_vpbl.leaf_vpbl);
@@ -519,6 +519,16 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
nesfmr->root_vpbl.pbl_pbase);
failed_vpbl_alloc:
+ if (nesfmr->nesmr.pbls_used != 0) {
+ spin_lock_irqsave(&nesadapter->pbl_lock, flags);
+ if (nesfmr->nesmr.pbl_4k)
+ nesadapter->free_4kpbl += nesfmr->nesmr.pbls_used;
+ else
+ nesadapter->free_256pbl += nesfmr->nesmr.pbls_used;
+ spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
+ }
+
+failed_vpbl_avail:
kfree(nesfmr);
failed_fmr_alloc:
@@ -534,18 +544,14 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
*/
static int nes_dealloc_fmr(struct ib_fmr *ibfmr)
{
+ unsigned long flags;
struct nes_mr *nesmr = to_nesmr_from_ibfmr(ibfmr);
struct nes_fmr *nesfmr = to_nesfmr(nesmr);
struct nes_vnic *nesvnic = to_nesvnic(ibfmr->device);
struct nes_device *nesdev = nesvnic->nesdev;
- struct nes_mr temp_nesmr = *nesmr;
+ struct nes_adapter *nesadapter = nesdev->nesadapter;
int i = 0;
- temp_nesmr.ibmw.device = ibfmr->device;
- temp_nesmr.ibmw.pd = ibfmr->pd;
- temp_nesmr.ibmw.rkey = ibfmr->rkey;
- temp_nesmr.ibmw.uobject = NULL;
-
/* free the resources */
if (nesfmr->leaf_pbl_cnt == 0) {
/* single PBL case */
@@ -561,8 +567,24 @@ static int nes_dealloc_fmr(struct ib_fmr *ibfmr)
pci_free_consistent(nesdev->pcidev, 8192, nesfmr->root_vpbl.pbl_vbase,
nesfmr->root_vpbl.pbl_pbase);
}
+ nesmr->ibmw.device = ibfmr->device;
+ nesmr->ibmw.pd = ibfmr->pd;
+ nesmr->ibmw.rkey = ibfmr->rkey;
+ nesmr->ibmw.uobject = NULL;
- return nes_dealloc_mw(&temp_nesmr.ibmw);
+ if (nesfmr->nesmr.pbls_used != 0) {
+ spin_lock_irqsave(&nesadapter->pbl_lock, flags);
+ if (nesfmr->nesmr.pbl_4k) {
+ nesadapter->free_4kpbl += nesfmr->nesmr.pbls_used;
+ WARN_ON(nesadapter->free_4kpbl > nesadapter->max_4kpbl);
+ } else {
+ nesadapter->free_256pbl += nesfmr->nesmr.pbls_used;
+ WARN_ON(nesadapter->free_256pbl > nesadapter->max_256pbl);
+ }
+ spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
+ }
+
+ return nes_dealloc_mw(&nesmr->ibmw);
}
@@ -1595,7 +1617,7 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
nes_ucontext->mcrqf = req.mcrqf;
if (nes_ucontext->mcrqf) {
if (nes_ucontext->mcrqf & 0x80000000)
- nescq->hw_cq.cq_number = nesvnic->nic.qp_id + 12 + (nes_ucontext->mcrqf & 0xf) - 1;
+ nescq->hw_cq.cq_number = nesvnic->nic.qp_id + 28 + 2 * ((nes_ucontext->mcrqf & 0xf) - 1);
else if (nes_ucontext->mcrqf & 0x40000000)
nescq->hw_cq.cq_number = nes_ucontext->mcrqf & 0xffff;
else
@@ -3212,7 +3234,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
if (nesqp->ibqp_state > IB_QPS_RTS)
return -EINVAL;
- spin_lock_irqsave(&nesqp->lock, flags);
+ spin_lock_irqsave(&nesqp->lock, flags);
head = nesqp->hwqp.sq_head;
@@ -3337,7 +3359,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
(counter << 24) | 0x00800000 | nesqp->hwqp.qp_id);
}
- spin_unlock_irqrestore(&nesqp->lock, flags);
+ spin_unlock_irqrestore(&nesqp->lock, flags);
if (err)
*bad_wr = ib_wr;
@@ -3368,7 +3390,7 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
if (nesqp->ibqp_state > IB_QPS_RTS)
return -EINVAL;
- spin_lock_irqsave(&nesqp->lock, flags);
+ spin_lock_irqsave(&nesqp->lock, flags);
head = nesqp->hwqp.rq_head;
@@ -3421,7 +3443,7 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
nes_write32(nesdev->regs+NES_WQE_ALLOC, (counter<<24) | nesqp->hwqp.qp_id);
}
- spin_unlock_irqrestore(&nesqp->lock, flags);
+ spin_unlock_irqrestore(&nesqp->lock, flags);
if (err)
*bad_wr = ib_wr;
@@ -3453,7 +3475,7 @@ static int nes_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry)
nes_debug(NES_DBG_CQ, "\n");
- spin_lock_irqsave(&nescq->lock, flags);
+ spin_lock_irqsave(&nescq->lock, flags);
head = nescq->hw_cq.cq_head;
cq_size = nescq->hw_cq.cq_size;
@@ -3562,7 +3584,7 @@ static int nes_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry)
nes_debug(NES_DBG_CQ, "Reporting %u completions for CQ%u.\n",
cqe_count, nescq->hw_cq.cq_number);
- spin_unlock_irqrestore(&nescq->lock, flags);
+ spin_unlock_irqrestore(&nescq->lock, flags);
return cqe_count;
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index fddded7..85257f6 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -106,12 +106,13 @@ int ipoib_open(struct net_device *dev)
ipoib_dbg(priv, "bringing up interface\n");
- napi_enable(&priv->napi);
set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
if (ipoib_pkey_dev_delay_open(dev))
return 0;
+ napi_enable(&priv->napi);
+
if (ipoib_ib_dev_open(dev)) {
napi_disable(&priv->napi);
return -EINVAL;
@@ -546,6 +547,7 @@ static int path_rec_start(struct net_device *dev,
if (path->query_id < 0) {
ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id);
path->query = NULL;
+ complete(&path->done);
return path->query_id;
}
@@ -662,7 +664,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
skb_push(skb, sizeof *phdr);
__skb_queue_tail(&path->queue, skb);
- if (path_rec_start(dev, path)) {
+ if (!path->query && path_rec_start(dev, path)) {
spin_unlock_irqrestore(&priv->lock, flags);
path_free(dev, path);
return;
diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h
index fa431fa..56a2e21 100644
--- a/drivers/net/mlx4/mlx4.h
+++ b/drivers/net/mlx4/mlx4.h
@@ -87,6 +87,9 @@ enum {
#ifdef CONFIG_MLX4_DEBUG
extern int mlx4_debug_level;
+#else /* CONFIG_MLX4_DEBUG */
+#define mlx4_debug_level (0)
+#endif /* CONFIG_MLX4_DEBUG */
#define mlx4_dbg(mdev, format, arg...) \
do { \
@@ -94,12 +97,6 @@ extern int mlx4_debug_level;
dev_printk(KERN_DEBUG, &mdev->pdev->dev, format, ## arg); \
} while (0)
-#else /* CONFIG_MLX4_DEBUG */
-
-#define mlx4_dbg(mdev, format, arg...) do { (void) mdev; } while (0)
-
-#endif /* CONFIG_MLX4_DEBUG */
-
#define mlx4_err(mdev, format, arg...) \
dev_err(&mdev->pdev->dev, format, ## arg)
#define mlx4_info(mdev, format, arg...) \
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-10-23 4:37 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-10-23 4:37 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel, jeff
Linus, please pull from
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the last batch of merges for the 2.6.28 window. As the
dirstat shows, this is almost entirely the new mlx4_en driver, which
is a 10G Ethernet driver for Mellanox ConnectX adapters:
1.2% drivers/infiniband/
98.6% drivers/net/mlx4/
Jeff Garzik and I agreed that this new driver should go through my
tree because it depended on changes to the existing mlx4_ib InfiniBand
driver that I wanted to review and apply through my tree.
Other than mlx4_en, there are just miscellaneous fixes of the usual
type (low-level hardware drivers and IPoIB).
Hoang-Nam Nguyen (1):
IB/ehca: Don't allow creating UC QP with SRQ
Julien Brunel (1):
RDMA/ucma: Test ucma_alloc_multicast() return against NULL, not with IS_ERR()
Or Gerlitz (2):
IPoIB: Clean up ethtool support
IPoIB: Set netdev offload features properly for child (VLAN) interfaces
Roland Dreier (4):
IPoIB: Always initialize poll_timer to avoid crash on unload
IB/mad: Use krealloc() to resize snoop table
Update NetEffect maintainer emails to Intel emails
Merge branches 'cma', 'cxgb3', 'ehca', 'ipoib', 'mad', 'mlx4' and 'nes' into for-next
Stefan Roscher (2):
IB/ehca: Fix reported max number of QPs and CQs in systems with >1 adapter
IB/ehca: Reject dynamic memory add/remove when ehca adapter is present
Steve Wise (1):
RDMA/cxgb3: Remove cmid reference on tid allocation failures
Yevgeny Petrilin (7):
mlx4_core: Add QP range reservation support
mlx4_core: Support multiple pre-reserved QP regions
mlx4_core: Get ethernet MTU and default address from firmware
mlx4_core: Ethernet MAC/VLAN management
mlx4_core: Multiple port type support
mlx4_en: Add driver for Mellanox ConnectX 10GbE NIC
mlx4_core: Add Ethernet PCI device IDs
MAINTAINERS | 4 +-
drivers/infiniband/core/mad.c | 14 +-
drivers/infiniband/core/ucma.c | 4 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 1 +
drivers/infiniband/hw/ehca/ehca_classes.h | 2 +
drivers/infiniband/hw/ehca/ehca_cq.c | 4 +-
drivers/infiniband/hw/ehca/ehca_main.c | 83 ++-
drivers/infiniband/hw/ehca/ehca_qp.c | 10 +-
drivers/infiniband/hw/mlx4/mad.c | 6 +-
drivers/infiniband/hw/mlx4/main.c | 11 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
drivers/infiniband/hw/mlx4/qp.c | 21 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 1 +
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 9 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 7 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 67 +-
drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 4 +
drivers/net/Kconfig | 9 +
drivers/net/mlx4/Makefile | 7 +-
drivers/net/mlx4/alloc.c | 97 +++-
drivers/net/mlx4/cq.c | 2 +-
drivers/net/mlx4/en_cq.c | 146 ++++
drivers/net/mlx4/en_main.c | 254 ++++++
drivers/net/mlx4/en_netdev.c | 1088 ++++++++++++++++++++++++++
drivers/net/mlx4/en_params.c | 480 ++++++++++++
drivers/net/mlx4/en_port.c | 261 ++++++
drivers/net/mlx4/en_port.h | 570 ++++++++++++++
drivers/net/mlx4/en_resources.c | 96 +++
drivers/net/mlx4/en_rx.c | 1080 +++++++++++++++++++++++++
drivers/net/mlx4/en_tx.c | 820 +++++++++++++++++++
drivers/net/mlx4/eq.c | 2 +-
drivers/net/mlx4/fw.c | 20 +-
drivers/net/mlx4/fw.h | 7 +-
drivers/net/mlx4/main.c | 287 +++++++-
drivers/net/mlx4/mcg.c | 4 +-
drivers/net/mlx4/mlx4.h | 45 +-
drivers/net/mlx4/mlx4_en.h | 561 +++++++++++++
drivers/net/mlx4/mr.c | 2 +-
drivers/net/mlx4/pd.c | 4 +-
drivers/net/mlx4/port.c | 282 +++++++
drivers/net/mlx4/qp.c | 81 ++-
drivers/net/mlx4/srq.c | 2 +-
include/linux/mlx4/cmd.h | 9 +
include/linux/mlx4/device.h | 54 ++-
44 files changed, 6394 insertions(+), 125 deletions(-)
create mode 100644 drivers/net/mlx4/en_cq.c
create mode 100644 drivers/net/mlx4/en_main.c
create mode 100644 drivers/net/mlx4/en_netdev.c
create mode 100644 drivers/net/mlx4/en_params.c
create mode 100644 drivers/net/mlx4/en_port.c
create mode 100644 drivers/net/mlx4/en_port.h
create mode 100644 drivers/net/mlx4/en_resources.c
create mode 100644 drivers/net/mlx4/en_rx.c
create mode 100644 drivers/net/mlx4/en_tx.c
create mode 100644 drivers/net/mlx4/mlx4_en.h
create mode 100644 drivers/net/mlx4/port.c
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-10-10 0:48 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-10-10 0:48 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the first batch of 2.6.28 merges -- pretty much all
low-level hardware driver and IP-over-IB fixes, along with a few little
things elsewhere, as the dirstat shows:
14.4% drivers/infiniband/hw/ehca/
22.0% drivers/infiniband/hw/mthca/
33.1% drivers/infiniband/hw/nes/
26.9% drivers/infiniband/ulp/ipoib/
3.4% drivers/infiniband/
Full list of patches below:
Alexander Schmidt (1):
IB/ehca: Generate flush status CQ entries
Bob Sharp (4):
RDMA/nes: Free NIC TX buffers when destroying NIC QP
RDMA/nes: Enable MC/UC after changing MTU
RDMA/nes: Correct MAX TSO frags value
RDMA/nes: Fix routed RDMA connections
Chien Tung (10):
RDMA/nes: Add support for 4-port 1G HP blade card
RDMA/nes: Module parameter permissions
RDMA/nes: Add wqm_quanta module option
RDMA/nes: Fix MDC setting
RDMA/nes: Fill in firmware version for ethtool
RDMA/nes: Correct tso_wqe_length
RDMA/nes: Stop spurious MAC interrupts
RDMA/nes: Limit critical error interrupts
RDMA/nes: Correct error_module bit mask
RDMA/nes: Fix slab corruption
Faisal Latif (2):
RDMA/nes: Make mini_cm_connect() static
RDMA/nes: Handle AE bounds violation
Hefty, Sean (1):
IB/cm: Correctly free cm_device structure
John Lacombe (1):
RDMA/nes: Use ethtool timer value
Jon Mason (1):
RDMA/cxgb3: Set active_mtu in ib_port_attr
Julia Lawall (1):
IB: Drop code after return statement
Michael Brooks (1):
IB/mad: Don't discard BMA responses in kernel
Ralph Campbell (1):
IB/ipath: Fix SLID generation for RC/UC QPs when LMC > 0
Roland Dreier (4):
IPoIB: Fix crash when path record fails after path flush
IB/mthca: Use pci_request_regions()
IPoIB: Use netif_tx_lock() and get rid of private tx_lock, LLTX
Merge branches 'cma', 'cxgb3', 'ehca', 'ipath', 'ipoib', 'mad', 'misc', 'mlx4', 'mthca' and 'nes' into for-next
Vadim Makhervaks (1):
RDMA/nes: Enhanced PFT management scheme
Vladimir Sokolovsky (1):
IB/mlx4: Set RLKEY bit for kernel QPs
Yannick Cote (1):
IB/ipath: Fix hang on module unload
drivers/infiniband/core/cm.c | 2 +
drivers/infiniband/core/mad.c | 5 +-
drivers/infiniband/hw/amso1100/c2_provider.c | 1 -
drivers/infiniband/hw/cxgb3/iwch_provider.c | 9 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 14 ++-
drivers/infiniband/hw/ehca/ehca_cq.c | 3 +
drivers/infiniband/hw/ehca/ehca_iverbs.h | 2 +
drivers/infiniband/hw/ehca/ehca_qp.c | 225 ++++++++++++++++++++++--
drivers/infiniband/hw/ehca/ehca_reqs.c | 211 +++++++++++++++++++---
drivers/infiniband/hw/ipath/ipath_rc.c | 3 +-
drivers/infiniband/hw/ipath/ipath_ruc.c | 3 +-
drivers/infiniband/hw/ipath/ipath_verbs.c | 7 +
drivers/infiniband/hw/mlx4/qp.c | 3 +
drivers/infiniband/hw/mthca/mthca_catas.c | 15 +--
drivers/infiniband/hw/mthca/mthca_eq.c | 51 +-----
drivers/infiniband/hw/mthca/mthca_main.c | 59 +------
drivers/infiniband/hw/nes/nes.c | 95 +++++++++-
drivers/infiniband/hw/nes/nes.h | 2 +-
drivers/infiniband/hw/nes/nes_cm.c | 41 ++++-
drivers/infiniband/hw/nes/nes_hw.c | 205 ++++++++++++++++++----
drivers/infiniband/hw/nes/nes_hw.h | 6 +
drivers/infiniband/hw/nes/nes_nic.c | 122 +++++++++++---
drivers/infiniband/hw/nes/nes_verbs.c | 3 -
drivers/infiniband/ulp/ipoib/ipoib.h | 8 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 88 ++++++----
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 30 +++-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 76 ++++-----
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 31 ++--
28 files changed, 961 insertions(+), 359 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-09-17 16:40 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-09-17 16:40 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get four patches, which I believe are all appropriate for
this stage of 2.6.27:
- A fix for a nes regression we introduced in some earlier 2.6.27
patches that leads to userspace processes hanging on exit.
- Two fixes that make a new mlx4 feature we added in 2.6.27 actually
work. The functions touched are only used for the new fast
register work requests so fixing this is low risk.
- A fix for an IPoIB RTNL deadlock that we introduced in 2.6.27.
Faisal Latif (1):
RDMA/nes: Fix client side QP destroy
Roland Dreier (1):
Merge branches 'ipoib', 'mlx4' and 'nes' into for-linus
Vladimir Sokolovsky (2):
mlx4_core: Set RAE and init mtt_sz field in FRMR MPT entries
IB/mlx4: Fix up fast register page list format
Yossi Etigin (1):
IPoIB: Fix deadlock on RTNL between bcast join comp and ipoib_stop()
drivers/infiniband/hw/mlx4/qp.c | 6 ++++
drivers/infiniband/hw/nes/nes_cm.c | 11 +-------
drivers/infiniband/ulp/ipoib/ipoib.h | 2 +
drivers/infiniband/ulp/ipoib/ipoib_main.c | 1 +
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 31 ++++++++++++++++-------
drivers/net/mlx4/mr.c | 10 ++++---
include/linux/mlx4/device.h | 4 +++
7 files changed, 42 insertions(+), 23 deletions(-)
commit e8224e4b804b4fd26723191c1891101a5959bb8a
Author: Yossi Etigin <yossi.openib@gmail.com>
Date: Tue Sep 16 11:57:45 2008 -0700
IPoIB: Fix deadlock on RTNL between bcast join comp and ipoib_stop()
Taking rtnl_lock in ipoib_mcast_join_complete() causes a deadlock with
ipoib_stop(). We avoid it by scheduling the piece of code that takes
the lock on ipoib_workqueue instead of executing it directly. This
works because we only flush the ipoib_workqueue with the RTNL not held.
The deadlock happens because ipoib_stop() calls ipoib_ib_dev_down()
which calls ipoib_mcast_dev_flush(), which calls ipoib_mcast_free(),
which calls ipoib_mcast_leave(). The latter calls
ib_sa_free_multicast(), and this waits until the multicast completion
handler finishes. This handler is ipoib_mcast_join_complete(), which
waits for the rtnl_lock(), which was already taken by ipoib_stop().
This bug was introduced in commit a77a57a1 ("IPoIB: Fix deadlock on
RTNL in ipoib_stop()").
Signed-off-by: Yossi Etigin <yosefe@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index b0ffc9a..05eb41b 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -293,6 +293,7 @@ struct ipoib_dev_priv {
struct delayed_work pkey_poll_task;
struct delayed_work mcast_task;
+ struct work_struct carrier_on_task;
struct work_struct flush_light;
struct work_struct flush_normal;
struct work_struct flush_heavy;
@@ -464,6 +465,7 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port);
void ipoib_dev_cleanup(struct net_device *dev);
void ipoib_mcast_join_task(struct work_struct *work);
+void ipoib_mcast_carrier_on_task(struct work_struct *work);
void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb);
void ipoib_mcast_restart_task(struct work_struct *work);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 7e9e218..1b1df5c 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -1075,6 +1075,7 @@ static void ipoib_setup(struct net_device *dev)
INIT_DELAYED_WORK(&priv->pkey_poll_task, ipoib_pkey_poll);
INIT_DELAYED_WORK(&priv->mcast_task, ipoib_mcast_join_task);
+ INIT_WORK(&priv->carrier_on_task, ipoib_mcast_carrier_on_task);
INIT_WORK(&priv->flush_light, ipoib_ib_dev_flush_light);
INIT_WORK(&priv->flush_normal, ipoib_ib_dev_flush_normal);
INIT_WORK(&priv->flush_heavy, ipoib_ib_dev_flush_heavy);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index ac33c8f..aae2862 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -366,6 +366,21 @@ static int ipoib_mcast_sendonly_join(struct ipoib_mcast *mcast)
return ret;
}
+void ipoib_mcast_carrier_on_task(struct work_struct *work)
+{
+ struct ipoib_dev_priv *priv = container_of(work, struct ipoib_dev_priv,
+ carrier_on_task);
+
+ /*
+ * Take rtnl_lock to avoid racing with ipoib_stop() and
+ * turning the carrier back on while a device is being
+ * removed.
+ */
+ rtnl_lock();
+ netif_carrier_on(priv->dev);
+ rtnl_unlock();
+}
+
static int ipoib_mcast_join_complete(int status,
struct ib_sa_multicast *multicast)
{
@@ -392,16 +407,12 @@ static int ipoib_mcast_join_complete(int status,
&priv->mcast_task, 0);
mutex_unlock(&mcast_mutex);
- if (mcast == priv->broadcast) {
- /*
- * Take RTNL lock here to avoid racing with
- * ipoib_stop() and turning the carrier back
- * on while a device is being removed.
- */
- rtnl_lock();
- netif_carrier_on(dev);
- rtnl_unlock();
- }
+ /*
+ * Defer carrier on work to ipoib_workqueue to avoid a
+ * deadlock on rtnl_lock here.
+ */
+ if (mcast == priv->broadcast)
+ queue_work(ipoib_workqueue, &priv->carrier_on_task);
return 0;
}
commit d7ffd5076d4407d54b25bc4b25f3002f74fbafde
Author: Faisal Latif <flatif@neteffect.com>
Date: Tue Sep 16 11:56:26 2008 -0700
RDMA/nes: Fix client side QP destroy
Fix QP not being destroyed properly on the client, which leads to
userspace programs hanging on exit. This is a missing chunk from the
connection management rewrite in commit 6492cdf3 ("RDMA/nes: CM
connection setup/teardown rework").
Signed-off-by: Faisal Latif <flatif@neteffect.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index 9f0b964..499d3cf 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -1956,13 +1956,6 @@ static int mini_cm_reject(struct nes_cm_core *cm_core,
return ret;
cleanup_retrans_entry(cm_node);
cm_node->state = NES_CM_STATE_CLOSED;
- ret = send_fin(cm_node, NULL);
-
- if (cm_node->accept_pend) {
- BUG_ON(!cm_node->listener);
- atomic_dec(&cm_node->listener->pend_accepts_cnt);
- BUG_ON(atomic_read(&cm_node->listener->pend_accepts_cnt) < 0);
- }
ret = send_reset(cm_node, NULL);
return ret;
@@ -2383,6 +2376,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
atomic_inc(&cm_disconnects);
cm_event.event = IW_CM_EVENT_DISCONNECT;
if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET) {
+ issued_disconnect_reset = 1;
cm_event.status = IW_CM_EVENT_STATUS_RESET;
nes_debug(NES_DBG_CM, "Generating a CM "
"Disconnect Event (status reset) for "
@@ -2508,7 +2502,6 @@ static int nes_disconnect(struct nes_qp *nesqp, int abrupt)
nes_debug(NES_DBG_CM, "Call close API\n");
g_cm_core->api->close(g_cm_core, nesqp->cm_node);
- nesqp->cm_node = NULL;
}
return ret;
@@ -2837,6 +2830,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
cm_node->apbvt_set = 1;
nesqp->cm_node = cm_node;
cm_node->nesqp = nesqp;
+ nes_add_ref(&nesqp->ibqp);
return 0;
}
@@ -3167,7 +3161,6 @@ static void cm_event_connect_error(struct nes_cm_event *event)
if (ret)
printk(KERN_ERR "%s[%u] OFA CM event_handler returned, "
"ret=%d\n", __func__, __LINE__, ret);
- nes_rem_ref(&nesqp->ibqp);
cm_id->rem_ref(cm_id);
rem_ref_cm_node(event->cm_node->cm_core, event->cm_node);
commit 29bdc88384c2b24e37e5760df0dc898546083d6b
Author: Vladimir Sokolovsky <vlad@mellanox.co.il>
Date: Mon Sep 15 14:25:23 2008 -0700
IB/mlx4: Fix up fast register page list format
Byte swap the addresses in the page list for fast register work requests
to big endian to match what the HCA expectx. Also, the addresses must
have the "present" bit set so that the HCA knows it can access them.
Otherwise the HCA will fault the first time it accesses the memory
region.
Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index f29dbb7..9559248 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1342,6 +1342,12 @@ static __be32 convert_access(int acc)
static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr)
{
struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(wr->wr.fast_reg.page_list);
+ int i;
+
+ for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i)
+ wr->wr.fast_reg.page_list->page_list[i] =
+ cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] |
+ MLX4_MTT_FLAG_PRESENT);
fseg->flags = convert_access(wr->wr.fast_reg.access_flags);
fseg->mem_key = cpu_to_be32(wr->wr.fast_reg.rkey);
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c
index 644adf0..d1dd5b4 100644
--- a/drivers/net/mlx4/mr.c
+++ b/drivers/net/mlx4/mr.c
@@ -71,8 +71,6 @@ struct mlx4_mpt_entry {
#define MLX4_MPT_PD_FLAG_RAE (1 << 28)
#define MLX4_MPT_PD_FLAG_EN_INV (3 << 24)
-#define MLX4_MTT_FLAG_PRESENT 1
-
#define MLX4_MPT_STATUS_SW 0xF0
#define MLX4_MPT_STATUS_HW 0x00
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index 655ea0d..b2f9444 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -141,6 +141,10 @@ enum {
MLX4_STAT_RATE_OFFSET = 5
};
+enum {
+ MLX4_MTT_FLAG_PRESENT = 1
+};
+
static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor)
{
return (major << 32) | (minor << 16) | subminor;
commit c9257433f2eaf8803a1f3d3be5d984232db41ffe
Author: Vladimir Sokolovsky <vlad@mellanox.co.il>
Date: Tue Sep 2 13:38:29 2008 -0700
mlx4_core: Set RAE and init mtt_sz field in FRMR MPT entries
Set the RAE (remote access enable) bit and correctly initialize the
MTT size in MPT entries being set up for fast register memory
regions. Otherwise the callers can't enable remote access and in fact
can't fast register at all (since the HCA will think no MTT entries
are allocated).
Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c
index 62071d9..644adf0 100644
--- a/drivers/net/mlx4/mr.c
+++ b/drivers/net/mlx4/mr.c
@@ -67,7 +67,8 @@ struct mlx4_mpt_entry {
#define MLX4_MPT_FLAG_PHYSICAL (1 << 9)
#define MLX4_MPT_FLAG_REGION (1 << 8)
-#define MLX4_MPT_PD_FLAG_FAST_REG (1 << 26)
+#define MLX4_MPT_PD_FLAG_FAST_REG (1 << 27)
+#define MLX4_MPT_PD_FLAG_RAE (1 << 28)
#define MLX4_MPT_PD_FLAG_EN_INV (3 << 24)
#define MLX4_MTT_FLAG_PRESENT 1
@@ -348,7 +349,10 @@ int mlx4_mr_enable(struct mlx4_dev *dev, struct mlx4_mr *mr)
if (mr->mtt.order >= 0 && mr->mtt.page_shift == 0) {
/* fast register MR in free state */
mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_FREE);
- mpt_entry->pd_flags |= cpu_to_be32(MLX4_MPT_PD_FLAG_FAST_REG);
+ mpt_entry->pd_flags |= cpu_to_be32(MLX4_MPT_PD_FLAG_FAST_REG |
+ MLX4_MPT_PD_FLAG_RAE);
+ mpt_entry->mtt_sz = cpu_to_be32((1 << mr->mtt.order) *
+ MLX4_MTT_ENTRY_PER_SEG);
} else {
mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_SW_OWNS);
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-08-19 22:03 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-08-19 22:03 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Dave Olson (1):
IB/ipath: Fix incorrect check for max physical address in TID
Ralph Campbell (1):
IB/ipath: Fix lost UD send work request
Roland Dreier (2):
IPoIB: Fix deadlock on RTNL in ipoib_stop()
Merge branches 'ipath' and 'ipoib' into for-linus
drivers/infiniband/hw/ipath/ipath_iba7220.c | 2 +-
drivers/infiniband/hw/ipath/ipath_ud.c | 8 ++++++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 19 +++++++++----------
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 10 +++++++++-
4 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/drivers/infiniband/hw/ipath/ipath_iba7220.c b/drivers/infiniband/hw/ipath/ipath_iba7220.c
index d90f5e9..9839e20 100644
--- a/drivers/infiniband/hw/ipath/ipath_iba7220.c
+++ b/drivers/infiniband/hw/ipath/ipath_iba7220.c
@@ -1720,7 +1720,7 @@ static void ipath_7220_put_tid(struct ipath_devdata *dd, u64 __iomem *tidptr,
"not 2KB aligned!\n", pa);
return;
}
- if (pa >= (1UL << IBA7220_TID_SZ_SHIFT)) {
+ if (chippa >= (1UL << IBA7220_TID_SZ_SHIFT)) {
ipath_dev_err(dd,
"BUG: Physical page address 0x%lx "
"larger than supported\n", pa);
diff --git a/drivers/infiniband/hw/ipath/ipath_ud.c b/drivers/infiniband/hw/ipath/ipath_ud.c
index 36aa242..729446f 100644
--- a/drivers/infiniband/hw/ipath/ipath_ud.c
+++ b/drivers/infiniband/hw/ipath/ipath_ud.c
@@ -267,6 +267,7 @@ int ipath_make_ud_req(struct ipath_qp *qp)
u16 lrh0;
u16 lid;
int ret = 0;
+ int next_cur;
spin_lock_irqsave(&qp->s_lock, flags);
@@ -290,8 +291,9 @@ int ipath_make_ud_req(struct ipath_qp *qp)
goto bail;
wqe = get_swqe_ptr(qp, qp->s_cur);
- if (++qp->s_cur >= qp->s_size)
- qp->s_cur = 0;
+ next_cur = qp->s_cur + 1;
+ if (next_cur >= qp->s_size)
+ next_cur = 0;
/* Construct the header. */
ah_attr = &to_iah(wqe->wr.wr.ud.ah)->attr;
@@ -315,6 +317,7 @@ int ipath_make_ud_req(struct ipath_qp *qp)
qp->s_flags |= IPATH_S_WAIT_DMA;
goto bail;
}
+ qp->s_cur = next_cur;
spin_unlock_irqrestore(&qp->s_lock, flags);
ipath_ud_loopback(qp, wqe);
spin_lock_irqsave(&qp->s_lock, flags);
@@ -323,6 +326,7 @@ int ipath_make_ud_req(struct ipath_qp *qp)
}
}
+ qp->s_cur = next_cur;
extra_bytes = -wqe->length & 3;
nwords = (wqe->length + extra_bytes) >> 2;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index f51201b..7e9e218 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -156,14 +156,8 @@ static int ipoib_stop(struct net_device *dev)
netif_stop_queue(dev);
- /*
- * Now flush workqueue to make sure a scheduled task doesn't
- * bring our internal state back up.
- */
- flush_workqueue(ipoib_workqueue);
-
- ipoib_ib_dev_down(dev, 1);
- ipoib_ib_dev_stop(dev, 1);
+ ipoib_ib_dev_down(dev, 0);
+ ipoib_ib_dev_stop(dev, 0);
if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
struct ipoib_dev_priv *cpriv;
@@ -1314,7 +1308,7 @@ sysfs_failed:
register_failed:
ib_unregister_event_handler(&priv->event_handler);
- flush_scheduled_work();
+ flush_workqueue(ipoib_workqueue);
event_failed:
ipoib_dev_cleanup(priv->dev);
@@ -1373,7 +1367,12 @@ static void ipoib_remove_one(struct ib_device *device)
list_for_each_entry_safe(priv, tmp, dev_list, list) {
ib_unregister_event_handler(&priv->event_handler);
- flush_scheduled_work();
+
+ rtnl_lock();
+ dev_change_flags(priv->dev, priv->dev->flags & ~IFF_UP);
+ rtnl_unlock();
+
+ flush_workqueue(ipoib_workqueue);
unregister_netdev(priv->dev);
ipoib_dev_cleanup(priv->dev);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index 8950e95..ac33c8f 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -392,8 +392,16 @@ static int ipoib_mcast_join_complete(int status,
&priv->mcast_task, 0);
mutex_unlock(&mcast_mutex);
- if (mcast == priv->broadcast)
+ if (mcast == priv->broadcast) {
+ /*
+ * Take RTNL lock here to avoid racing with
+ * ipoib_stop() and turning the carrier back
+ * on while a device is being removed.
+ */
+ rtnl_lock();
netif_carrier_on(dev);
+ rtnl_unlock();
+ }
return 0;
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-08-12 20:55 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-08-12 20:55 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the following fixes:
Alexander Schmidt (5):
IB/ehca: Update qp_state on cached modify_qp()
IB/ehca: Rename goto label in ehca_poll_cq_one()
IB/ehca: Repoll CQ on invalid opcode
IB/ehca: Check idr_find() return value
IB/ehca: Discard double CQE for one WR
David J. Wilder (1):
IPoIB/cm: Use vmalloc() to allocate rx_rings
Roland Dreier (1):
Merge branches 'ehca' and 'ipoib' into for-linus
drivers/infiniband/hw/ehca/ehca_classes.h | 9 ++++
drivers/infiniband/hw/ehca/ehca_qes.h | 1 +
drivers/infiniband/hw/ehca/ehca_qp.c | 48 +++++++++++++++++------
drivers/infiniband/hw/ehca/ehca_reqs.c | 60 ++++++++++++++++++++++------
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 17 ++++++--
5 files changed, 104 insertions(+), 31 deletions(-)
diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h
index 0b0618e..1ab919f 100644
--- a/drivers/infiniband/hw/ehca/ehca_classes.h
+++ b/drivers/infiniband/hw/ehca/ehca_classes.h
@@ -156,6 +156,14 @@ struct ehca_mod_qp_parm {
#define EHCA_MOD_QP_PARM_MAX 4
+#define QMAP_IDX_MASK 0xFFFFULL
+
+/* struct for tracking if cqes have been reported to the application */
+struct ehca_qmap_entry {
+ u16 app_wr_id;
+ u16 reported;
+};
+
struct ehca_qp {
union {
struct ib_qp ib_qp;
@@ -165,6 +173,7 @@ struct ehca_qp {
enum ehca_ext_qp_type ext_type;
enum ib_qp_state state;
struct ipz_queue ipz_squeue;
+ struct ehca_qmap_entry *sq_map;
struct ipz_queue ipz_rqueue;
struct h_galpas galpas;
u32 qkey;
diff --git a/drivers/infiniband/hw/ehca/ehca_qes.h b/drivers/infiniband/hw/ehca/ehca_qes.h
index 8188030..5d28e3e 100644
--- a/drivers/infiniband/hw/ehca/ehca_qes.h
+++ b/drivers/infiniband/hw/ehca/ehca_qes.h
@@ -213,6 +213,7 @@ struct ehca_wqe {
#define WC_STATUS_ERROR_BIT 0x80000000
#define WC_STATUS_REMOTE_ERROR_FLAGS 0x0000F800
#define WC_STATUS_PURGE_BIT 0x10
+#define WC_SEND_RECEIVE_BIT 0x80
struct ehca_cqe {
u64 work_request_id;
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index ea13efd..b6bcee0 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -412,6 +412,7 @@ static struct ehca_qp *internal_create_qp(
struct ehca_shca *shca = container_of(pd->device, struct ehca_shca,
ib_device);
struct ib_ucontext *context = NULL;
+ u32 nr_qes;
u64 h_ret;
int is_llqp = 0, has_srq = 0;
int qp_type, max_send_sge, max_recv_sge, ret;
@@ -715,6 +716,15 @@ static struct ehca_qp *internal_create_qp(
"and pages ret=%i", ret);
goto create_qp_exit2;
}
+ nr_qes = my_qp->ipz_squeue.queue_length /
+ my_qp->ipz_squeue.qe_size;
+ my_qp->sq_map = vmalloc(nr_qes *
+ sizeof(struct ehca_qmap_entry));
+ if (!my_qp->sq_map) {
+ ehca_err(pd->device, "Couldn't allocate squeue "
+ "map ret=%i", ret);
+ goto create_qp_exit3;
+ }
}
if (HAS_RQ(my_qp)) {
@@ -724,7 +734,7 @@ static struct ehca_qp *internal_create_qp(
if (ret) {
ehca_err(pd->device, "Couldn't initialize rqueue "
"and pages ret=%i", ret);
- goto create_qp_exit3;
+ goto create_qp_exit4;
}
}
@@ -770,7 +780,7 @@ static struct ehca_qp *internal_create_qp(
if (!my_qp->mod_qp_parm) {
ehca_err(pd->device,
"Could not alloc mod_qp_parm");
- goto create_qp_exit4;
+ goto create_qp_exit5;
}
}
}
@@ -780,7 +790,7 @@ static struct ehca_qp *internal_create_qp(
h_ret = ehca_define_sqp(shca, my_qp, init_attr);
if (h_ret != H_SUCCESS) {
ret = ehca2ib_return_code(h_ret);
- goto create_qp_exit5;
+ goto create_qp_exit6;
}
}
@@ -789,7 +799,7 @@ static struct ehca_qp *internal_create_qp(
if (ret) {
ehca_err(pd->device,
"Couldn't assign qp to send_cq ret=%i", ret);
- goto create_qp_exit5;
+ goto create_qp_exit6;
}
}
@@ -815,22 +825,26 @@ static struct ehca_qp *internal_create_qp(
if (ib_copy_to_udata(udata, &resp, sizeof resp)) {
ehca_err(pd->device, "Copy to udata failed");
ret = -EINVAL;
- goto create_qp_exit6;
+ goto create_qp_exit7;
}
}
return my_qp;
-create_qp_exit6:
+create_qp_exit7:
ehca_cq_unassign_qp(my_qp->send_cq, my_qp->real_qp_num);
-create_qp_exit5:
+create_qp_exit6:
kfree(my_qp->mod_qp_parm);
-create_qp_exit4:
+create_qp_exit5:
if (HAS_RQ(my_qp))
ipz_queue_dtor(my_pd, &my_qp->ipz_rqueue);
+create_qp_exit4:
+ if (HAS_SQ(my_qp))
+ vfree(my_qp->sq_map);
+
create_qp_exit3:
if (HAS_SQ(my_qp))
ipz_queue_dtor(my_pd, &my_qp->ipz_squeue);
@@ -1534,8 +1548,6 @@ static int internal_modify_qp(struct ib_qp *ibqp,
if (attr_mask & IB_QP_QKEY)
my_qp->qkey = attr->qkey;
- my_qp->state = qp_new_state;
-
modify_qp_exit2:
if (squeue_locked) { /* this means: sqe -> rts */
spin_unlock_irqrestore(&my_qp->spinlock_s, flags);
@@ -1551,6 +1563,8 @@ modify_qp_exit1:
int ehca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask,
struct ib_udata *udata)
{
+ int ret = 0;
+
struct ehca_shca *shca = container_of(ibqp->device, struct ehca_shca,
ib_device);
struct ehca_qp *my_qp = container_of(ibqp, struct ehca_qp, ib_qp);
@@ -1597,12 +1611,18 @@ int ehca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask,
attr->qp_state, my_qp->init_attr.port_num,
ibqp->qp_type);
spin_unlock_irqrestore(&sport->mod_sqp_lock, flags);
- return 0;
+ goto out;
}
spin_unlock_irqrestore(&sport->mod_sqp_lock, flags);
}
- return internal_modify_qp(ibqp, attr, attr_mask, 0);
+ ret = internal_modify_qp(ibqp, attr, attr_mask, 0);
+
+out:
+ if ((ret == 0) && (attr_mask & IB_QP_STATE))
+ my_qp->state = attr->qp_state;
+
+ return ret;
}
void ehca_recover_sqp(struct ib_qp *sqp)
@@ -1973,8 +1993,10 @@ static int internal_destroy_qp(struct ib_device *dev, struct ehca_qp *my_qp,
if (HAS_RQ(my_qp))
ipz_queue_dtor(my_pd, &my_qp->ipz_rqueue);
- if (HAS_SQ(my_qp))
+ if (HAS_SQ(my_qp)) {
ipz_queue_dtor(my_pd, &my_qp->ipz_squeue);
+ vfree(my_qp->sq_map);
+ }
kmem_cache_free(qp_cache, my_qp);
atomic_dec(&shca->num_qps);
return 0;
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c
index 898c8b5..4426d82 100644
--- a/drivers/infiniband/hw/ehca/ehca_reqs.c
+++ b/drivers/infiniband/hw/ehca/ehca_reqs.c
@@ -139,6 +139,7 @@ static void trace_send_wr_ud(const struct ib_send_wr *send_wr)
static inline int ehca_write_swqe(struct ehca_qp *qp,
struct ehca_wqe *wqe_p,
const struct ib_send_wr *send_wr,
+ u32 sq_map_idx,
int hidden)
{
u32 idx;
@@ -157,7 +158,11 @@ static inline int ehca_write_swqe(struct ehca_qp *qp,
/* clear wqe header until sglist */
memset(wqe_p, 0, offsetof(struct ehca_wqe, u.ud_av.sg_list));
- wqe_p->work_request_id = send_wr->wr_id;
+ wqe_p->work_request_id = send_wr->wr_id & ~QMAP_IDX_MASK;
+ wqe_p->work_request_id |= sq_map_idx & QMAP_IDX_MASK;
+
+ qp->sq_map[sq_map_idx].app_wr_id = send_wr->wr_id & QMAP_IDX_MASK;
+ qp->sq_map[sq_map_idx].reported = 0;
switch (send_wr->opcode) {
case IB_WR_SEND:
@@ -381,6 +386,7 @@ static inline int post_one_send(struct ehca_qp *my_qp,
{
struct ehca_wqe *wqe_p;
int ret;
+ u32 sq_map_idx;
u64 start_offset = my_qp->ipz_squeue.current_q_offset;
/* get pointer next to free WQE */
@@ -393,8 +399,15 @@ static inline int post_one_send(struct ehca_qp *my_qp,
"qp_num=%x", my_qp->ib_qp.qp_num);
return -ENOMEM;
}
+
+ /*
+ * Get the index of the WQE in the send queue. The same index is used
+ * for writing into the sq_map.
+ */
+ sq_map_idx = start_offset / my_qp->ipz_squeue.qe_size;
+
/* write a SEND WQE into the QUEUE */
- ret = ehca_write_swqe(my_qp, wqe_p, cur_send_wr, hidden);
+ ret = ehca_write_swqe(my_qp, wqe_p, cur_send_wr, sq_map_idx, hidden);
/*
* if something failed,
* reset the free entry pointer to the start value
@@ -589,7 +602,7 @@ static inline int ehca_poll_cq_one(struct ib_cq *cq, struct ib_wc *wc)
struct ehca_qp *my_qp;
int cqe_count = 0, is_error;
-poll_cq_one_read_cqe:
+repoll:
cqe = (struct ehca_cqe *)
ipz_qeit_get_inc_valid(&my_cq->ipz_queue);
if (!cqe) {
@@ -617,7 +630,7 @@ poll_cq_one_read_cqe:
ehca_dmp(cqe, 64, "cq_num=%x qp_num=%x",
my_cq->cq_number, cqe->local_qp_number);
/* ignore this purged cqe */
- goto poll_cq_one_read_cqe;
+ goto repoll;
}
spin_lock_irqsave(&qp->spinlock_s, flags);
purgeflag = qp->sqerr_purgeflag;
@@ -636,7 +649,7 @@ poll_cq_one_read_cqe:
* that caused sqe and turn off purge flag
*/
qp->sqerr_purgeflag = 0;
- goto poll_cq_one_read_cqe;
+ goto repoll;
}
}
@@ -654,8 +667,34 @@ poll_cq_one_read_cqe:
my_cq, my_cq->cq_number);
}
- /* we got a completion! */
- wc->wr_id = cqe->work_request_id;
+ read_lock(&ehca_qp_idr_lock);
+ my_qp = idr_find(&ehca_qp_idr, cqe->qp_token);
+ read_unlock(&ehca_qp_idr_lock);
+ if (!my_qp)
+ goto repoll;
+ wc->qp = &my_qp->ib_qp;
+
+ if (!(cqe->w_completion_flags & WC_SEND_RECEIVE_BIT)) {
+ struct ehca_qmap_entry *qmap_entry;
+ /*
+ * We got a send completion and need to restore the original
+ * wr_id.
+ */
+ qmap_entry = &my_qp->sq_map[cqe->work_request_id &
+ QMAP_IDX_MASK];
+
+ if (qmap_entry->reported) {
+ ehca_warn(cq->device, "Double cqe on qp_num=%#x",
+ my_qp->real_qp_num);
+ /* found a double cqe, discard it and read next one */
+ goto repoll;
+ }
+ wc->wr_id = cqe->work_request_id & ~QMAP_IDX_MASK;
+ wc->wr_id |= qmap_entry->app_wr_id;
+ qmap_entry->reported = 1;
+ } else
+ /* We got a receive completion. */
+ wc->wr_id = cqe->work_request_id;
/* eval ib_wc_opcode */
wc->opcode = ib_wc_opcode[cqe->optype]-1;
@@ -667,7 +706,7 @@ poll_cq_one_read_cqe:
ehca_dmp(cqe, 64, "ehca_cq=%p cq_num=%x",
my_cq, my_cq->cq_number);
/* update also queue adder to throw away this entry!!! */
- goto poll_cq_one_exit0;
+ goto repoll;
}
/* eval ib_wc_status */
@@ -678,11 +717,6 @@ poll_cq_one_read_cqe:
} else
wc->status = IB_WC_SUCCESS;
- read_lock(&ehca_qp_idr_lock);
- my_qp = idr_find(&ehca_qp_idr, cqe->qp_token);
- wc->qp = &my_qp->ib_qp;
- read_unlock(&ehca_qp_idr_lock);
-
wc->byte_len = cqe->nr_bytes_transferred;
wc->pkey_index = cqe->pkey_index;
wc->slid = cqe->rlid;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 7ebc400..341ffed 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -202,7 +202,7 @@ static void ipoib_cm_free_rx_ring(struct net_device *dev,
dev_kfree_skb_any(rx_ring[i].skb);
}
- kfree(rx_ring);
+ vfree(rx_ring);
}
static void ipoib_cm_start_rx_drain(struct ipoib_dev_priv *priv)
@@ -352,9 +352,14 @@ static int ipoib_cm_nonsrq_init_rx(struct net_device *dev, struct ib_cm_id *cm_i
int ret;
int i;
- rx->rx_ring = kcalloc(ipoib_recvq_size, sizeof *rx->rx_ring, GFP_KERNEL);
- if (!rx->rx_ring)
+ rx->rx_ring = vmalloc(ipoib_recvq_size * sizeof *rx->rx_ring);
+ if (!rx->rx_ring) {
+ printk(KERN_WARNING "%s: failed to allocate CM non-SRQ ring (%d entries)\n",
+ priv->ca->name, ipoib_recvq_size);
return -ENOMEM;
+ }
+
+ memset(rx->rx_ring, 0, ipoib_recvq_size * sizeof *rx->rx_ring);
t = kmalloc(sizeof *t, GFP_KERNEL);
if (!t) {
@@ -1494,14 +1499,16 @@ static void ipoib_cm_create_srq(struct net_device *dev, int max_sge)
return;
}
- priv->cm.srq_ring = kzalloc(ipoib_recvq_size * sizeof *priv->cm.srq_ring,
- GFP_KERNEL);
+ priv->cm.srq_ring = vmalloc(ipoib_recvq_size * sizeof *priv->cm.srq_ring);
if (!priv->cm.srq_ring) {
printk(KERN_WARNING "%s: failed to allocate CM SRQ ring (%d entries)\n",
priv->ca->name, ipoib_recvq_size);
ib_destroy_srq(priv->cm.srq);
priv->cm.srq = NULL;
+ return;
}
+
+ memset(priv->cm.srq_ring, 0, ipoib_recvq_size * sizeof *priv->cm.srq_ring);
}
int ipoib_cm_dev_init(struct net_device *dev)
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-08-07 21:15 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-08-07 21:15 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the following fixes:
Alex Naslednikov (1):
IB/mlx4: Allow 4K messages for UD QPs
Alexander Beregalov (1):
IB/ipath: Fix printk format warnings
Julien Brunel (1):
IB/mad: Test ib_create_send_mad() return with IS_ERR(), not == NULL
Roland Dreier (3):
IPoIB/cm: Set correct SG list in ipoib_cm_init_rx_wr()
RDMA/cma: Remove padding arrays by using struct sockaddr_storage
Merge branches 'cma', 'cxgb3', 'ipath', 'ipoib', 'mad' and 'mlx4' into for-linus
Steve Wise (3):
RDMA/cxgb3: Fix QP capabilities
RDMA/cxgb3: Fix up MW access rights
RDMA/cxgb3: Fix deadlock initializing iw_cxgb3 device
Vegard Nossum (1):
IB/ipath: Use unsigned long for irq flags
Yevgeny Petrilin (1):
mlx4_core: Add ethernet fields to CQE struct
drivers/infiniband/core/cma.c | 37 +++++++++++++--------------
drivers/infiniband/core/mad_rmpp.c | 2 +-
drivers/infiniband/core/ucma.c | 14 ++++------
drivers/infiniband/hw/cxgb3/cxio_hal.c | 6 ++--
drivers/infiniband/hw/cxgb3/iwch_provider.c | 28 ++------------------
drivers/infiniband/hw/cxgb3/iwch_provider.h | 7 +++++
drivers/infiniband/hw/cxgb3/iwch_qp.c | 25 ++++++------------
drivers/infiniband/hw/ipath/ipath_driver.c | 5 ++-
drivers/infiniband/hw/ipath/ipath_iba7220.c | 7 +++--
drivers/infiniband/hw/ipath/ipath_intr.c | 12 ++++++---
drivers/infiniband/hw/ipath/ipath_verbs.c | 6 ++--
drivers/infiniband/hw/mlx4/cq.c | 33 +++++++++++------------
drivers/infiniband/hw/mlx4/qp.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +-
include/linux/mlx4/cq.h | 36 +++++++++++++++++--------
include/rdma/rdma_cm.h | 8 +----
16 files changed, 108 insertions(+), 122 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index e980ff3..d951896 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -155,9 +155,7 @@ struct cma_multicast {
} multicast;
struct list_head list;
void *context;
- struct sockaddr addr;
- u8 pad[sizeof(struct sockaddr_in6) -
- sizeof(struct sockaddr)];
+ struct sockaddr_storage addr;
};
struct cma_work {
@@ -786,8 +784,8 @@ static void cma_cancel_operation(struct rdma_id_private *id_priv,
cma_cancel_route(id_priv);
break;
case CMA_LISTEN:
- if (cma_any_addr(&id_priv->id.route.addr.src_addr) &&
- !id_priv->cma_dev)
+ if (cma_any_addr((struct sockaddr *) &id_priv->id.route.addr.src_addr)
+ && !id_priv->cma_dev)
cma_cancel_listens(id_priv);
break;
default:
@@ -1026,7 +1024,7 @@ static struct rdma_id_private *cma_new_conn_id(struct rdma_cm_id *listen_id,
rt->path_rec[1] = *ib_event->param.req_rcvd.alternate_path;
ib_addr_set_dgid(&rt->addr.dev_addr, &rt->path_rec[0].dgid);
- ret = rdma_translate_ip(&id->route.addr.src_addr,
+ ret = rdma_translate_ip((struct sockaddr *) &id->route.addr.src_addr,
&id->route.addr.dev_addr);
if (ret)
goto destroy_id;
@@ -1064,7 +1062,7 @@ static struct rdma_id_private *cma_new_udp_id(struct rdma_cm_id *listen_id,
cma_save_net_info(&id->route.addr, &listen_id->route.addr,
ip_ver, port, src, dst);
- ret = rdma_translate_ip(&id->route.addr.src_addr,
+ ret = rdma_translate_ip((struct sockaddr *) &id->route.addr.src_addr,
&id->route.addr.dev_addr);
if (ret)
goto err;
@@ -1377,7 +1375,7 @@ static int cma_ib_listen(struct rdma_id_private *id_priv)
if (IS_ERR(id_priv->cm_id.ib))
return PTR_ERR(id_priv->cm_id.ib);
- addr = &id_priv->id.route.addr.src_addr;
+ addr = (struct sockaddr *) &id_priv->id.route.addr.src_addr;
svc_id = cma_get_service_id(id_priv->id.ps, addr);
if (cma_any_addr(addr))
ret = ib_cm_listen(id_priv->cm_id.ib, svc_id, 0, NULL);
@@ -1443,7 +1441,7 @@ static void cma_listen_on_dev(struct rdma_id_private *id_priv,
dev_id_priv->state = CMA_ADDR_BOUND;
memcpy(&id->route.addr.src_addr, &id_priv->id.route.addr.src_addr,
- ip_addr_size(&id_priv->id.route.addr.src_addr));
+ ip_addr_size((struct sockaddr *) &id_priv->id.route.addr.src_addr));
cma_attach_to_dev(dev_id_priv, cma_dev);
list_add_tail(&dev_id_priv->listen_list, &id_priv->listen_list);
@@ -1563,13 +1561,14 @@ static int cma_query_ib_route(struct rdma_id_private *id_priv, int timeout_ms,
path_rec.pkey = cpu_to_be16(ib_addr_get_pkey(&addr->dev_addr));
path_rec.numb_path = 1;
path_rec.reversible = 1;
- path_rec.service_id = cma_get_service_id(id_priv->id.ps, &addr->dst_addr);
+ path_rec.service_id = cma_get_service_id(id_priv->id.ps,
+ (struct sockaddr *) &addr->dst_addr);
comp_mask = IB_SA_PATH_REC_DGID | IB_SA_PATH_REC_SGID |
IB_SA_PATH_REC_PKEY | IB_SA_PATH_REC_NUMB_PATH |
IB_SA_PATH_REC_REVERSIBLE | IB_SA_PATH_REC_SERVICE_ID;
- if (addr->src_addr.sa_family == AF_INET) {
+ if (addr->src_addr.ss_family == AF_INET) {
path_rec.qos_class = cpu_to_be16((u16) id_priv->tos);
comp_mask |= IB_SA_PATH_REC_QOS_CLASS;
} else {
@@ -1848,7 +1847,7 @@ static int cma_resolve_loopback(struct rdma_id_private *id_priv)
ib_addr_get_sgid(&id_priv->id.route.addr.dev_addr, &gid);
ib_addr_set_dgid(&id_priv->id.route.addr.dev_addr, &gid);
- if (cma_zero_addr(&id_priv->id.route.addr.src_addr)) {
+ if (cma_zero_addr((struct sockaddr *) &id_priv->id.route.addr.src_addr)) {
src_in = (struct sockaddr_in *)&id_priv->id.route.addr.src_addr;
dst_in = (struct sockaddr_in *)&id_priv->id.route.addr.dst_addr;
src_in->sin_family = dst_in->sin_family;
@@ -1897,7 +1896,7 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
if (cma_any_addr(dst_addr))
ret = cma_resolve_loopback(id_priv);
else
- ret = rdma_resolve_ip(&addr_client, &id->route.addr.src_addr,
+ ret = rdma_resolve_ip(&addr_client, (struct sockaddr *) &id->route.addr.src_addr,
dst_addr, &id->route.addr.dev_addr,
timeout_ms, addr_handler, id_priv);
if (ret)
@@ -2021,11 +2020,11 @@ static int cma_use_port(struct idr *ps, struct rdma_id_private *id_priv)
* We don't support binding to any address if anyone is bound to
* a specific address on the same port.
*/
- if (cma_any_addr(&id_priv->id.route.addr.src_addr))
+ if (cma_any_addr((struct sockaddr *) &id_priv->id.route.addr.src_addr))
return -EADDRNOTAVAIL;
hlist_for_each_entry(cur_id, node, &bind_list->owners, node) {
- if (cma_any_addr(&cur_id->id.route.addr.src_addr))
+ if (cma_any_addr((struct sockaddr *) &cur_id->id.route.addr.src_addr))
return -EADDRNOTAVAIL;
cur_sin = (struct sockaddr_in *) &cur_id->id.route.addr.src_addr;
@@ -2060,7 +2059,7 @@ static int cma_get_port(struct rdma_id_private *id_priv)
}
mutex_lock(&lock);
- if (cma_any_port(&id_priv->id.route.addr.src_addr))
+ if (cma_any_port((struct sockaddr *) &id_priv->id.route.addr.src_addr))
ret = cma_alloc_any_port(ps, id_priv);
else
ret = cma_use_port(ps, id_priv);
@@ -2232,7 +2231,7 @@ static int cma_resolve_ib_udp(struct rdma_id_private *id_priv,
req.path = route->path_rec;
req.service_id = cma_get_service_id(id_priv->id.ps,
- &route->addr.dst_addr);
+ (struct sockaddr *) &route->addr.dst_addr);
req.timeout_ms = 1 << (CMA_CM_RESPONSE_TIMEOUT - 8);
req.max_cm_retries = CMA_MAX_CM_RETRIES;
@@ -2283,7 +2282,7 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
req.alternate_path = &route->path_rec[1];
req.service_id = cma_get_service_id(id_priv->id.ps,
- &route->addr.dst_addr);
+ (struct sockaddr *) &route->addr.dst_addr);
req.qp_num = id_priv->qp_num;
req.qp_type = IB_QPT_RC;
req.starting_psn = id_priv->seq_num;
@@ -2667,7 +2666,7 @@ static int cma_join_ib_multicast(struct rdma_id_private *id_priv,
if (ret)
return ret;
- cma_set_mgid(id_priv, &mc->addr, &rec.mgid);
+ cma_set_mgid(id_priv, (struct sockaddr *) &mc->addr, &rec.mgid);
if (id_priv->id.ps == RDMA_PS_UDP)
rec.qkey = cpu_to_be32(RDMA_UDP_QKEY);
ib_addr_get_sgid(dev_addr, &rec.port_gid);
diff --git a/drivers/infiniband/core/mad_rmpp.c b/drivers/infiniband/core/mad_rmpp.c
index d0ef7d6..3af2b84 100644
--- a/drivers/infiniband/core/mad_rmpp.c
+++ b/drivers/infiniband/core/mad_rmpp.c
@@ -133,7 +133,7 @@ static void ack_recv(struct mad_rmpp_recv *rmpp_recv,
msg = ib_create_send_mad(&rmpp_recv->agent->agent, recv_wc->wc->src_qp,
recv_wc->wc->pkey_index, 1, hdr_len,
0, GFP_KERNEL);
- if (!msg)
+ if (IS_ERR(msg))
return;
format_ack(msg, (struct ib_rmpp_mad *) recv_wc->recv_buf.mad, rmpp_recv);
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
index b41dd26..3ddacf3 100644
--- a/drivers/infiniband/core/ucma.c
+++ b/drivers/infiniband/core/ucma.c
@@ -81,9 +81,7 @@ struct ucma_multicast {
u64 uid;
struct list_head list;
- struct sockaddr addr;
- u8 pad[sizeof(struct sockaddr_in6) -
- sizeof(struct sockaddr)];
+ struct sockaddr_storage addr;
};
struct ucma_event {
@@ -603,11 +601,11 @@ static ssize_t ucma_query_route(struct ucma_file *file,
return PTR_ERR(ctx);
memset(&resp, 0, sizeof resp);
- addr = &ctx->cm_id->route.addr.src_addr;
+ addr = (struct sockaddr *) &ctx->cm_id->route.addr.src_addr;
memcpy(&resp.src_addr, addr, addr->sa_family == AF_INET ?
sizeof(struct sockaddr_in) :
sizeof(struct sockaddr_in6));
- addr = &ctx->cm_id->route.addr.dst_addr;
+ addr = (struct sockaddr *) &ctx->cm_id->route.addr.dst_addr;
memcpy(&resp.dst_addr, addr, addr->sa_family == AF_INET ?
sizeof(struct sockaddr_in) :
sizeof(struct sockaddr_in6));
@@ -913,7 +911,7 @@ static ssize_t ucma_join_multicast(struct ucma_file *file,
mc->uid = cmd.uid;
memcpy(&mc->addr, &cmd.addr, sizeof cmd.addr);
- ret = rdma_join_multicast(ctx->cm_id, &mc->addr, mc);
+ ret = rdma_join_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr, mc);
if (ret)
goto err2;
@@ -929,7 +927,7 @@ static ssize_t ucma_join_multicast(struct ucma_file *file,
return 0;
err3:
- rdma_leave_multicast(ctx->cm_id, &mc->addr);
+ rdma_leave_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr);
ucma_cleanup_mc_events(mc);
err2:
mutex_lock(&mut);
@@ -975,7 +973,7 @@ static ssize_t ucma_leave_multicast(struct ucma_file *file,
goto out;
}
- rdma_leave_multicast(mc->ctx->cm_id, &mc->addr);
+ rdma_leave_multicast(mc->ctx->cm_id, (struct sockaddr *) &mc->addr);
mutex_lock(&mc->ctx->file->mut);
ucma_cleanup_mc_events(mc);
list_del(&mc->list);
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c
index f6d5747..4dcf08b 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.c
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c
@@ -725,9 +725,9 @@ static int __cxio_tpt_op(struct cxio_rdev *rdev_p, u32 reset_tpt_entry,
V_TPT_STAG_TYPE(type) | V_TPT_PDID(pdid));
BUG_ON(page_size >= 28);
tpt.flags_pagesize_qpid = cpu_to_be32(V_TPT_PERM(perm) |
- F_TPT_MW_BIND_ENABLE |
- V_TPT_ADDR_TYPE((zbva ? TPT_ZBTO : TPT_VATO)) |
- V_TPT_PAGE_SIZE(page_size));
+ ((perm & TPT_MW_BIND) ? F_TPT_MW_BIND_ENABLE : 0) |
+ V_TPT_ADDR_TYPE((zbva ? TPT_ZBTO : TPT_VATO)) |
+ V_TPT_PAGE_SIZE(page_size));
tpt.rsvd_pbl_addr = reset_tpt_entry ? 0 :
cpu_to_be32(V_TPT_PBL_ADDR(PBL_OFF(rdev_p, pbl_addr)>>3));
tpt.len = cpu_to_be32(len);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index b89640a..eb778bf 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -1187,28 +1187,6 @@ static ssize_t show_rev(struct device *dev, struct device_attribute *attr,
return sprintf(buf, "%d\n", iwch_dev->rdev.t3cdev_p->type);
}
-static int fw_supports_fastreg(struct iwch_dev *iwch_dev)
-{
- struct ethtool_drvinfo info;
- struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev;
- char *cp, *next;
- unsigned fw_maj, fw_min;
-
- rtnl_lock();
- lldev->ethtool_ops->get_drvinfo(lldev, &info);
- rtnl_unlock();
-
- next = info.fw_version+1;
- cp = strsep(&next, ".");
- sscanf(cp, "%i", &fw_maj);
- cp = strsep(&next, ".");
- sscanf(cp, "%i", &fw_min);
-
- PDBG("%s maj %u min %u\n", __func__, fw_maj, fw_min);
-
- return fw_maj > 6 || (fw_maj == 6 && fw_min > 0);
-}
-
static ssize_t show_fw_ver(struct device *dev, struct device_attribute *attr, char *buf)
{
struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev,
@@ -1325,12 +1303,12 @@ int iwch_register_device(struct iwch_dev *dev)
memset(&dev->ibdev.node_guid, 0, sizeof(dev->ibdev.node_guid));
memcpy(&dev->ibdev.node_guid, dev->rdev.t3cdev_p->lldev->dev_addr, 6);
dev->ibdev.owner = THIS_MODULE;
- dev->device_cap_flags = IB_DEVICE_LOCAL_DMA_LKEY | IB_DEVICE_MEM_WINDOW;
+ dev->device_cap_flags = IB_DEVICE_LOCAL_DMA_LKEY |
+ IB_DEVICE_MEM_WINDOW |
+ IB_DEVICE_MEM_MGT_EXTENSIONS;
/* cxgb3 supports STag 0. */
dev->ibdev.local_dma_lkey = 0;
- if (fw_supports_fastreg(dev))
- dev->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
dev->ibdev.uverbs_cmd_mask =
(1ull << IB_USER_VERBS_CMD_GET_CONTEXT) |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.h b/drivers/infiniband/hw/cxgb3/iwch_provider.h
index f5ceca0..a237d49 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.h
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.h
@@ -293,9 +293,16 @@ static inline u32 iwch_ib_to_tpt_access(int acc)
return (acc & IB_ACCESS_REMOTE_WRITE ? TPT_REMOTE_WRITE : 0) |
(acc & IB_ACCESS_REMOTE_READ ? TPT_REMOTE_READ : 0) |
(acc & IB_ACCESS_LOCAL_WRITE ? TPT_LOCAL_WRITE : 0) |
+ (acc & IB_ACCESS_MW_BIND ? TPT_MW_BIND : 0) |
TPT_LOCAL_READ;
}
+static inline u32 iwch_ib_to_tpt_bind_access(int acc)
+{
+ return (acc & IB_ACCESS_REMOTE_WRITE ? TPT_REMOTE_WRITE : 0) |
+ (acc & IB_ACCESS_REMOTE_READ ? TPT_REMOTE_READ : 0);
+}
+
enum iwch_mmid_state {
IWCH_STAG_STATE_VALID,
IWCH_STAG_STATE_INVALID
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c
index 9a3be3a..3e4585c 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_qp.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c
@@ -565,7 +565,7 @@ int iwch_bind_mw(struct ib_qp *qp,
wqe->bind.type = TPT_VATO;
/* TBD: check perms */
- wqe->bind.perms = iwch_ib_to_tpt_access(mw_bind->mw_access_flags);
+ wqe->bind.perms = iwch_ib_to_tpt_bind_access(mw_bind->mw_access_flags);
wqe->bind.mr_stag = cpu_to_be32(mw_bind->mr->lkey);
wqe->bind.mw_stag = cpu_to_be32(mw->rkey);
wqe->bind.mw_len = cpu_to_be32(mw_bind->length);
@@ -879,20 +879,13 @@ static int rdma_init(struct iwch_dev *rhp, struct iwch_qp *qhp,
(qhp->attr.mpa_attr.xmit_marker_enabled << 1) |
(qhp->attr.mpa_attr.crc_enabled << 2);
- /*
- * XXX - The IWCM doesn't quite handle getting these
- * attrs set before going into RTS. For now, just turn
- * them on always...
- */
-#if 0
- init_attr.qpcaps = qhp->attr.enableRdmaRead |
- (qhp->attr.enableRdmaWrite << 1) |
- (qhp->attr.enableBind << 2) |
- (qhp->attr.enable_stag0_fastreg << 3) |
- (qhp->attr.enable_stag0_fastreg << 4);
-#else
- init_attr.qpcaps = 0x1f;
-#endif
+ init_attr.qpcaps = uP_RI_QP_RDMA_READ_ENABLE |
+ uP_RI_QP_RDMA_WRITE_ENABLE |
+ uP_RI_QP_BIND_ENABLE;
+ if (!qhp->ibqp.uobject)
+ init_attr.qpcaps |= uP_RI_QP_STAG0_ENABLE |
+ uP_RI_QP_FAST_REGISTER_ENABLE;
+
init_attr.tcp_emss = qhp->ep->emss;
init_attr.ord = qhp->attr.max_ord;
init_attr.ird = qhp->attr.max_ird;
@@ -900,8 +893,6 @@ static int rdma_init(struct iwch_dev *rhp, struct iwch_qp *qhp,
init_attr.qp_dma_size = (1UL << qhp->wq.size_log2);
init_attr.rqe_count = iwch_rqes_posted(qhp);
init_attr.flags = qhp->attr.mpa_attr.initiator ? MPA_INITIATOR : 0;
- if (!qhp->ibqp.uobject)
- init_attr.flags |= PRIV_QP;
if (peer2peer) {
init_attr.rtr_type = RTR_READ;
if (init_attr.ord == 0 && qhp->attr.mpa_attr.initiator)
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index daad09a..ad0aab6 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -1259,7 +1259,7 @@ reloop:
*/
ipath_cdbg(ERRPKT, "Error Pkt, but no eflags! egrbuf"
" %x, len %x hdrq+%x rhf: %Lx\n",
- etail, tlen, l,
+ etail, tlen, l, (unsigned long long)
le64_to_cpu(*(__le64 *) rhf_addr));
if (ipath_debug & __IPATH_ERRPKTDBG) {
u32 j, *d, dw = rsize-2;
@@ -1457,7 +1457,8 @@ static void ipath_reset_availshadow(struct ipath_devdata *dd)
0xaaaaaaaaaaaaaaaaULL); /* All BUSY bits in qword */
if (oldval != dd->ipath_pioavailshadow[i])
ipath_dbg("shadow[%d] was %Lx, now %lx\n",
- i, oldval, dd->ipath_pioavailshadow[i]);
+ i, (unsigned long long) oldval,
+ dd->ipath_pioavailshadow[i]);
}
spin_unlock_irqrestore(&ipath_pioavail_lock, flags);
}
diff --git a/drivers/infiniband/hw/ipath/ipath_iba7220.c b/drivers/infiniband/hw/ipath/ipath_iba7220.c
index fb70712..85b2cd0 100644
--- a/drivers/infiniband/hw/ipath/ipath_iba7220.c
+++ b/drivers/infiniband/hw/ipath/ipath_iba7220.c
@@ -1032,7 +1032,7 @@ static int ipath_7220_bringup_serdes(struct ipath_devdata *dd)
ipath_cdbg(VERBOSE, "done: xgxs=%llx from %llx\n",
(unsigned long long)
ipath_read_kreg64(dd, dd->ipath_kregs->kr_xgxsconfig),
- prev_val);
+ (unsigned long long) prev_val);
guid = be64_to_cpu(dd->ipath_guid);
@@ -1042,7 +1042,8 @@ static int ipath_7220_bringup_serdes(struct ipath_devdata *dd)
ipath_dbg("No GUID for heartbeat, faking %llx\n",
(unsigned long long)guid);
} else
- ipath_cdbg(VERBOSE, "Wrote %llX to HRTBT_GUID\n", guid);
+ ipath_cdbg(VERBOSE, "Wrote %llX to HRTBT_GUID\n",
+ (unsigned long long) guid);
ipath_write_kreg(dd, dd->ipath_kregs->kr_hrtbt_guid, guid);
return ret;
}
@@ -2505,7 +2506,7 @@ done:
if (dd->ipath_flags & IPATH_IB_AUTONEG_INPROG) {
ipath_dbg("Did not get to DDR INIT (%x) after %Lu msecs\n",
ipath_ib_state(dd, dd->ipath_lastibcstat),
- jiffies_to_msecs(jiffies)-startms);
+ (unsigned long long) jiffies_to_msecs(jiffies)-startms);
dd->ipath_flags &= ~IPATH_IB_AUTONEG_INPROG;
if (dd->ipath_autoneg_tries == IPATH_AUTONEG_TRIES) {
dd->ipath_flags |= IPATH_IB_AUTONEG_FAILED;
diff --git a/drivers/infiniband/hw/ipath/ipath_intr.c b/drivers/infiniband/hw/ipath/ipath_intr.c
index 26900b3..6c21b4b 100644
--- a/drivers/infiniband/hw/ipath/ipath_intr.c
+++ b/drivers/infiniband/hw/ipath/ipath_intr.c
@@ -356,9 +356,10 @@ static void handle_e_ibstatuschanged(struct ipath_devdata *dd,
dd->ipath_cregs->cr_iblinkerrrecovcnt);
if (linkrecov != dd->ipath_lastlinkrecov) {
ipath_dbg("IB linkrecov up %Lx (%s %s) recov %Lu\n",
- ibcs, ib_linkstate(dd, ibcs),
+ (unsigned long long) ibcs,
+ ib_linkstate(dd, ibcs),
ipath_ibcstatus_str[ltstate],
- linkrecov);
+ (unsigned long long) linkrecov);
/* and no more until active again */
dd->ipath_lastlinkrecov = 0;
ipath_set_linkstate(dd, IPATH_IB_LINKDOWN);
@@ -1118,9 +1119,11 @@ irqreturn_t ipath_intr(int irq, void *data)
if (unlikely(istat & ~dd->ipath_i_bitsextant))
ipath_dev_err(dd,
"interrupt with unknown interrupts %Lx set\n",
+ (unsigned long long)
istat & ~dd->ipath_i_bitsextant);
else if (istat & ~INFINIPATH_I_ERROR) /* errors do own printing */
- ipath_cdbg(VERBOSE, "intr stat=0x%Lx\n", istat);
+ ipath_cdbg(VERBOSE, "intr stat=0x%Lx\n",
+ (unsigned long long) istat);
if (istat & INFINIPATH_I_ERROR) {
ipath_stats.sps_errints++;
@@ -1128,7 +1131,8 @@ irqreturn_t ipath_intr(int irq, void *data)
dd->ipath_kregs->kr_errorstatus);
if (!estat)
dev_info(&dd->pcidev->dev, "error interrupt (%Lx), "
- "but no error bits set!\n", istat);
+ "but no error bits set!\n",
+ (unsigned long long) istat);
else if (estat == -1LL)
/*
* should we try clearing all, or hope next read
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c
index 55c7188..b766e40 100644
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c
@@ -1021,7 +1021,7 @@ static void sdma_complete(void *cookie, int status)
struct ipath_verbs_txreq *tx = cookie;
struct ipath_qp *qp = tx->qp;
struct ipath_ibdev *dev = to_idev(qp->ibqp.device);
- unsigned int flags;
+ unsigned long flags;
enum ib_wc_status ibs = status == IPATH_SDMA_TXREQ_S_OK ?
IB_WC_SUCCESS : IB_WC_WR_FLUSH_ERR;
@@ -1051,7 +1051,7 @@ static void sdma_complete(void *cookie, int status)
static void decrement_dma_busy(struct ipath_qp *qp)
{
- unsigned int flags;
+ unsigned long flags;
if (atomic_dec_and_test(&qp->s_dma_busy)) {
spin_lock_irqsave(&qp->s_lock, flags);
@@ -1221,7 +1221,7 @@ static int ipath_verbs_send_pio(struct ipath_qp *qp,
unsigned flush_wc;
u32 control;
int ret;
- unsigned int flags;
+ unsigned long flags;
piobuf = ipath_getpiobuf(dd, plen, NULL);
if (unlikely(piobuf == NULL)) {
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index a146457..d0866a3 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
@@ -515,17 +515,17 @@ static void mlx4_ib_handle_error_cqe(struct mlx4_err_cqe *cqe,
wc->vendor_err = cqe->vendor_err_syndrome;
}
-static int mlx4_ib_ipoib_csum_ok(__be32 status, __be16 checksum)
+static int mlx4_ib_ipoib_csum_ok(__be16 status, __be16 checksum)
{
- return ((status & cpu_to_be32(MLX4_CQE_IPOIB_STATUS_IPV4 |
- MLX4_CQE_IPOIB_STATUS_IPV4F |
- MLX4_CQE_IPOIB_STATUS_IPV4OPT |
- MLX4_CQE_IPOIB_STATUS_IPV6 |
- MLX4_CQE_IPOIB_STATUS_IPOK)) ==
- cpu_to_be32(MLX4_CQE_IPOIB_STATUS_IPV4 |
- MLX4_CQE_IPOIB_STATUS_IPOK)) &&
- (status & cpu_to_be32(MLX4_CQE_IPOIB_STATUS_UDP |
- MLX4_CQE_IPOIB_STATUS_TCP)) &&
+ return ((status & cpu_to_be16(MLX4_CQE_STATUS_IPV4 |
+ MLX4_CQE_STATUS_IPV4F |
+ MLX4_CQE_STATUS_IPV4OPT |
+ MLX4_CQE_STATUS_IPV6 |
+ MLX4_CQE_STATUS_IPOK)) ==
+ cpu_to_be16(MLX4_CQE_STATUS_IPV4 |
+ MLX4_CQE_STATUS_IPOK)) &&
+ (status & cpu_to_be16(MLX4_CQE_STATUS_UDP |
+ MLX4_CQE_STATUS_TCP)) &&
checksum == cpu_to_be16(0xffff);
}
@@ -582,17 +582,17 @@ repoll:
}
if (!*cur_qp ||
- (be32_to_cpu(cqe->my_qpn) & 0xffffff) != (*cur_qp)->mqp.qpn) {
+ (be32_to_cpu(cqe->vlan_my_qpn) & MLX4_CQE_QPN_MASK) != (*cur_qp)->mqp.qpn) {
/*
* We do not have to take the QP table lock here,
* because CQs will be locked while QPs are removed
* from the table.
*/
mqp = __mlx4_qp_lookup(to_mdev(cq->ibcq.device)->dev,
- be32_to_cpu(cqe->my_qpn));
+ be32_to_cpu(cqe->vlan_my_qpn));
if (unlikely(!mqp)) {
printk(KERN_WARNING "CQ %06x with entry for unknown QPN %06x\n",
- cq->mcq.cqn, be32_to_cpu(cqe->my_qpn) & 0xffffff);
+ cq->mcq.cqn, be32_to_cpu(cqe->vlan_my_qpn) & MLX4_CQE_QPN_MASK);
return -EINVAL;
}
@@ -692,14 +692,13 @@ repoll:
}
wc->slid = be16_to_cpu(cqe->rlid);
- wc->sl = cqe->sl >> 4;
+ wc->sl = be16_to_cpu(cqe->sl_vid >> 12);
g_mlpath_rqpn = be32_to_cpu(cqe->g_mlpath_rqpn);
wc->src_qp = g_mlpath_rqpn & 0xffffff;
wc->dlid_path_bits = (g_mlpath_rqpn >> 24) & 0x7f;
wc->wc_flags |= g_mlpath_rqpn & 0x80000000 ? IB_WC_GRH : 0;
wc->pkey_index = be32_to_cpu(cqe->immed_rss_invalid) & 0x7f;
- wc->csum_ok = mlx4_ib_ipoib_csum_ok(cqe->ipoib_status,
- cqe->checksum);
+ wc->csum_ok = mlx4_ib_ipoib_csum_ok(cqe->status, cqe->checksum);
}
return 0;
@@ -767,7 +766,7 @@ void __mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq)
*/
while ((int) --prod_index - (int) cq->mcq.cons_index >= 0) {
cqe = get_cqe(cq, prod_index & cq->ibcq.cqe);
- if ((be32_to_cpu(cqe->my_qpn) & 0xffffff) == qpn) {
+ if ((be32_to_cpu(cqe->vlan_my_qpn) & MLX4_CQE_QPN_MASK) == qpn) {
if (srq && !(cqe->owner_sr_opcode & MLX4_CQE_IS_SEND_MASK))
mlx4_ib_free_srq_wqe(srq, be16_to_cpu(cqe->wqe_index));
++nfreed;
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index f7bc7dd..f29dbb7 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -902,7 +902,7 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
context->mtu_msgmax = (IB_MTU_4096 << 5) |
ilog2(dev->dev->caps.max_gso_sz);
else
- context->mtu_msgmax = (IB_MTU_4096 << 5) | 11;
+ context->mtu_msgmax = (IB_MTU_4096 << 5) | 12;
} else if (attr_mask & IB_QP_PATH_MTU) {
if (attr->path_mtu < IB_MTU_256 || attr->path_mtu > IB_MTU_4096) {
printk(KERN_ERR "path MTU (%u) is invalid\n",
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 0f2d304..7ebc400 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -337,7 +337,7 @@ static void ipoib_cm_init_rx_wr(struct net_device *dev,
sge[i].length = PAGE_SIZE;
wr->next = NULL;
- wr->sg_list = priv->cm.rx_sge;
+ wr->sg_list = sge;
wr->num_sge = priv->cm.num_frags;
}
diff --git a/include/linux/mlx4/cq.h b/include/linux/mlx4/cq.h
index 071cf96..6f65b2c 100644
--- a/include/linux/mlx4/cq.h
+++ b/include/linux/mlx4/cq.h
@@ -39,17 +39,18 @@
#include <linux/mlx4/doorbell.h>
struct mlx4_cqe {
- __be32 my_qpn;
+ __be32 vlan_my_qpn;
__be32 immed_rss_invalid;
__be32 g_mlpath_rqpn;
- u8 sl;
- u8 reserved1;
+ __be16 sl_vid;
__be16 rlid;
- __be32 ipoib_status;
+ __be16 status;
+ u8 ipv6_ext_mask;
+ u8 badfcs_enc;
__be32 byte_cnt;
__be16 wqe_index;
__be16 checksum;
- u8 reserved2[3];
+ u8 reserved[3];
u8 owner_sr_opcode;
};
@@ -64,6 +65,11 @@ struct mlx4_err_cqe {
};
enum {
+ MLX4_CQE_VLAN_PRESENT_MASK = 1 << 29,
+ MLX4_CQE_QPN_MASK = 0xffffff,
+};
+
+enum {
MLX4_CQE_OWNER_MASK = 0x80,
MLX4_CQE_IS_SEND_MASK = 0x40,
MLX4_CQE_OPCODE_MASK = 0x1f
@@ -86,13 +92,19 @@ enum {
};
enum {
- MLX4_CQE_IPOIB_STATUS_IPV4 = 1 << 22,
- MLX4_CQE_IPOIB_STATUS_IPV4F = 1 << 23,
- MLX4_CQE_IPOIB_STATUS_IPV6 = 1 << 24,
- MLX4_CQE_IPOIB_STATUS_IPV4OPT = 1 << 25,
- MLX4_CQE_IPOIB_STATUS_TCP = 1 << 26,
- MLX4_CQE_IPOIB_STATUS_UDP = 1 << 27,
- MLX4_CQE_IPOIB_STATUS_IPOK = 1 << 28,
+ MLX4_CQE_STATUS_IPV4 = 1 << 6,
+ MLX4_CQE_STATUS_IPV4F = 1 << 7,
+ MLX4_CQE_STATUS_IPV6 = 1 << 8,
+ MLX4_CQE_STATUS_IPV4OPT = 1 << 9,
+ MLX4_CQE_STATUS_TCP = 1 << 10,
+ MLX4_CQE_STATUS_UDP = 1 << 11,
+ MLX4_CQE_STATUS_IPOK = 1 << 12,
+};
+
+enum {
+ MLX4_CQE_LLC = 1,
+ MLX4_CQE_SNAP = 1 << 1,
+ MLX4_CQE_BAD_FCS = 1 << 4,
};
static inline void mlx4_cq_arm(struct mlx4_cq *cq, u32 cmd,
diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h
index df7faf0..c6b2962 100644
--- a/include/rdma/rdma_cm.h
+++ b/include/rdma/rdma_cm.h
@@ -71,12 +71,8 @@ enum rdma_port_space {
};
struct rdma_addr {
- struct sockaddr src_addr;
- u8 src_pad[sizeof(struct sockaddr_in6) -
- sizeof(struct sockaddr)];
- struct sockaddr dst_addr;
- u8 dst_pad[sizeof(struct sockaddr_in6) -
- sizeof(struct sockaddr)];
+ struct sockaddr_storage src_addr;
+ struct sockaddr_storage dst_addr;
struct rdma_dev_addr dev_addr;
};
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-07-26 21:02 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-07-26 21:02 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the some last RDMA/InfiniBand changes for 2.6.27. The
only major thing is changes to the iw_nes connection setup handling,
which fix problems with lots of connections:
Faisal Latif (1):
RDMA/nes: CM connection setup/teardown rework
Jack Morgenstein (1):
mlx4: Update/add Mellanox Technologies copyright lines to mlx4 driver files
Roland Dreier (5):
RDMA/ucma: BKL is not needed for ucma_open()
RDMA/ucm: BKL is not needed for ib_ucm_open()
IPoIB/cm: Connected mode is no longer EXPERIMENTAL
IPoIB: Correct help text for INFINIBAND_IPOIB_DEBUG
Merge branches 'bkl-removal', 'ipoib', 'mlx4' and 'nes' into for-linus
Yevgeny Petrilin (1):
mlx4_core: Add VLAN tag field to WQE control segment struct
drivers/infiniband/core/ucm.c | 10 +-
drivers/infiniband/core/ucma.c | 11 +-
drivers/infiniband/hw/mlx4/cq.c | 1 +
drivers/infiniband/hw/mlx4/main.c | 1 +
drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 +
drivers/infiniband/hw/mlx4/mr.c | 1 +
drivers/infiniband/hw/mlx4/qp.c | 1 +
drivers/infiniband/hw/mlx4/srq.c | 1 +
drivers/infiniband/hw/mlx4/user.h | 1 +
drivers/infiniband/hw/nes/nes.c | 4 +-
drivers/infiniband/hw/nes/nes_cm.c | 2034 ++++++++++++++++++---------------
drivers/infiniband/hw/nes/nes_cm.h | 23 +-
drivers/infiniband/hw/nes/nes_hw.c | 9 -
drivers/infiniband/hw/nes/nes_verbs.c | 15 -
drivers/infiniband/ulp/ipoib/Kconfig | 22 +-
drivers/net/mlx4/alloc.c | 1 +
drivers/net/mlx4/catas.c | 1 +
drivers/net/mlx4/cmd.c | 2 +-
drivers/net/mlx4/cq.c | 2 +-
drivers/net/mlx4/eq.c | 2 +-
drivers/net/mlx4/fw.c | 2 +-
drivers/net/mlx4/fw.h | 2 +-
drivers/net/mlx4/icm.c | 2 +-
drivers/net/mlx4/icm.h | 2 +-
drivers/net/mlx4/intf.c | 1 +
drivers/net/mlx4/main.c | 2 +-
drivers/net/mlx4/mcg.c | 1 +
drivers/net/mlx4/mlx4.h | 2 +-
drivers/net/mlx4/mr.c | 2 +-
drivers/net/mlx4/qp.c | 2 +-
drivers/net/mlx4/reset.c | 1 +
drivers/net/mlx4/srq.c | 1 +
include/linux/mlx4/qp.h | 4 +-
33 files changed, 1211 insertions(+), 956 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-07-24 15:41 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-07-24 15:41 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the some more RDMA/InfiniBand changes for 2.6.27, all of
which have been in linux-next:
Amir Vadai (1):
RDMA/cma: Add RDMA_CM_EVENT_TIMEWAIT_EXIT event
Dotan Barak (1):
RDMA/iwcm: Remove IB_ACCESS_LOCAL_WRITE from remote QP attributes
Jack Morgenstein (2):
mlx4_core: Add module parameter to enable QoS support
mlx4_code: Add missing FW status return code
Joachim Fenkes (2):
IB/ehca: Filter PATH_MIG events if QP was never armed
IB/ehca: Use default value for Local CA ACK Delay if FW returns 0
Julia Lawall (1):
IB/ehca: Release mutex in error path of alloc_small_queue_page()
Or Gerlitz (3):
RDMA/cma: Add RDMA_CM_EVENT_ADDR_CHANGE event
IB/iser: Add support for RDMA_CM_EVENT_ADDR_CHANGE event
IPoIB: Include err code in trace message for ib_sa_path_rec_get() failures
Ralph Campbell (1):
IB/sa_query: Check if sm_ah is NULL in ib_sa_remove_one()
Roland Dreier (7):
IB/mlx4: Rename struct mlx4_lso_seg to mlx4_wqe_lso_seg
mlx4_core: Keep free count for MTT buddy allocator
IB/mthca: Keep free count for MTT buddy allocator
IB/mlx4: Add support for memory management extensions and local DMA L_Key
mlx4_core: Improve error message when not enough UAR pages are available
MAINTAINERS: Remove Glenn Streiff from NetEffect entry
Merge branches 'bkl-removal', 'cma', 'ehca', 'for-2.6.27', 'mlx4', 'mthca' and 'nes' into for-linus
MAINTAINERS | 2 -
drivers/infiniband/core/cma.c | 99 ++++++++++++++++++++++++++++-
drivers/infiniband/core/iwcm.c | 3 +-
drivers/infiniband/core/sa_query.c | 3 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 1 +
drivers/infiniband/hw/ehca/ehca_hca.c | 4 +-
drivers/infiniband/hw/ehca/ehca_irq.c | 4 +
drivers/infiniband/hw/ehca/ehca_qp.c | 2 +
drivers/infiniband/hw/ehca/ipz_pt_fn.c | 1 +
drivers/infiniband/hw/mlx4/cq.c | 12 ++++
drivers/infiniband/hw/mlx4/main.c | 11 +++
drivers/infiniband/hw/mlx4/mlx4_ib.h | 15 +++++
drivers/infiniband/hw/mlx4/mr.c | 70 ++++++++++++++++++++
drivers/infiniband/hw/mlx4/qp.c | 74 ++++++++++++++++++++--
drivers/infiniband/hw/mthca/mthca_dev.h | 1 +
drivers/infiniband/hw/mthca/mthca_mr.c | 26 +++++---
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 1 +
drivers/net/mlx4/cmd.c | 3 +
drivers/net/mlx4/fw.c | 18 +++--
drivers/net/mlx4/fw.h | 2 +-
drivers/net/mlx4/main.c | 2 +
drivers/net/mlx4/mlx4.h | 1 +
drivers/net/mlx4/mr.c | 49 +++++++++++----
drivers/net/mlx4/pd.c | 7 ++
include/linux/mlx4/device.h | 10 +++
include/linux/mlx4/qp.h | 18 ++++--
include/rdma/rdma_cm.h | 4 +-
28 files changed, 396 insertions(+), 49 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-07-15 6:51 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-07-15 6:51 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the first big batch of RDMA/InfiniBand changes for
2.6.27, all of which have been in linux-next:
Christophe Jaillet (1):
RDMA/nes: Remove unnecessary memset()
Dotan Barak (1):
RDMA: Improve include file coding style
Eli Cohen (12):
IB/mlx4: Optimize QP stamping
IPoIB: Copy small received SKBs in connected mode
IB/mlx4: Configure QPs' max message size based on real device capability
IB/mlx4: Pass congestion management class MADs to the HCA
IPoIB: Remove unused IPOIB_MCAST_STARTED code
IPoIB: Remove priv->mcast_mutex
IPoIB: Only set Q_Key once: after joining broadcast group
IPoIB: Use rtnl lock/unlock when changing device flags
IPoIB: Use dev_set_mtu() to change mtu
IPoIB/cm: Reduce connected mode TX object size
IPoIB: Double default RX/TX ring sizes
IB/mlx4: Use kzalloc() for new QPs so flags are initialized to 0
Joachim Fenkes (2):
IB/ehca: Reject receive work requests if QP is in RESET state
IB/ehca: Make device table externally visible
Jon Mason (1):
RDMA/cxgb3: Propagate HW page size capabilities
Moni Shoua (2):
IB/sa: Fail requests made while creating new SM AH
IPoIB: Refresh paths instead of flushing them on SM change events
Or Gerlitz (2):
RDMA/addr: Keep pointer to netdevice in struct rdma_dev_addr
RDMA/cma: Simplify locking needed for serialization of callbacks
Ralph Campbell (2):
IB/core: Reset to error QP state transition is not allowed
IB/ipath: Use IEEE OUI for vendor_id reported by ibv_query_device()
Robert P. J. Day (1):
IB/ipath: Simplify code using ARRAY_SIZE() macro
Roland Dreier (13):
IB/srp: Remove use of cached P_Key/GID queries
RDMA: Remove subversion $Id tags
IB/mthca: Remove extra code for RESET->ERR QP state transition
IB/mlx4: Remove extra code for RESET->ERR QP state transition
RDMA/cxgb3: Remove write-only iwch_rnic_attributes fields
RDMA/cma: Add missing newlines to printk()s
IPoIB/cm: Fix racy use of receive WR/SGL in ipoib_cm_post_receive_nonsrq()
RDMA/nes: Encapsulate logic nes_put_cqp_request()
RDMA/nes: Get rid of ring_doorbell parameter of nes_post_cqp_request()
IPoIB: Get rid of ipoib_mcast_detach() wrapper
IB/mthca: Remove "stop" flag for catastrophic error polling timer
IB/mthca: Use round_jiffies() for catastrophic error polling timer
IB/mthca: Fix check of max_send_sge for special QPs
Ron Livne (3):
IB/core: Add support for multicast loopback blocking
IB/mlx4: Add support for blocking multicast loopback packets
IPoIB: Use multicast loopback blocking if available
Sean Hefty (1):
RDMA: Fix license text
Stefan Roscher (1):
IB/ehca: In case of lost interrupts, trigger EOI to reenable interrupts
Steve Wise (8):
RDMA/core: Add memory management extensions support
RDMA/cxgb3: MEM_MGT_EXTENSIONS support
RDMA/cxgb3: Fix up some ib_device_attr fields
RDMA/core: Add iWARP protocol statistics attributes in sysfs
RDMA/cxgb3: Add support for protocol statistics
RDMA/cxgb3: Set rkey field for new memory windows in iwch_alloc_mw()
RDMA/core: Add local DMA L_Key support
RDMA/cxgb3: Fixes for zero STag
Vladimir Sokolovsky (2):
IPoIB: add LRO support
mlx4_core: Use MOD_STAT_CFG command to get minimal page size
drivers/infiniband/core/addr.c | 42 +++--
drivers/infiniband/core/agent.h | 2 -
drivers/infiniband/core/cache.c | 2 -
drivers/infiniband/core/cm.c | 2 -
drivers/infiniband/core/cma.c | 162 ++++++++--------
drivers/infiniband/core/core_priv.h | 2 -
drivers/infiniband/core/device.c | 2 -
drivers/infiniband/core/fmr_pool.c | 2 -
drivers/infiniband/core/mad_priv.h | 2 -
drivers/infiniband/core/mad_rmpp.c | 2 -
drivers/infiniband/core/mad_rmpp.h | 2 -
drivers/infiniband/core/packer.c | 2 -
drivers/infiniband/core/sa_query.c | 24 ++-
drivers/infiniband/core/sysfs.c | 122 +++++++++++-
drivers/infiniband/core/ucm.c | 2 -
drivers/infiniband/core/ud_header.c | 2 -
drivers/infiniband/core/umem.c | 2 -
drivers/infiniband/core/user_mad.c | 2 -
drivers/infiniband/core/uverbs.h | 2 -
drivers/infiniband/core/uverbs_cmd.c | 4 +-
drivers/infiniband/core/uverbs_main.c | 2 -
drivers/infiniband/core/verbs.c | 49 ++++-
drivers/infiniband/hw/amso1100/c2_rnic.c | 2 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 27 ++-
drivers/infiniband/hw/cxgb3/cxio_hal.h | 5 +-
drivers/infiniband/hw/cxgb3/cxio_wr.h | 103 ++++++++--
drivers/infiniband/hw/cxgb3/iwch.c | 8 +-
drivers/infiniband/hw/cxgb3/iwch.h | 2 -
drivers/infiniband/hw/cxgb3/iwch_cq.c | 15 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 199 +++++++++++++++++-
drivers/infiniband/hw/cxgb3/iwch_provider.h | 8 -
drivers/infiniband/hw/cxgb3/iwch_qp.c | 261 ++++++++++++++++++------
drivers/infiniband/hw/ehca/ehca_irq.c | 9 +-
drivers/infiniband/hw/ehca/ehca_main.c | 1 +
drivers/infiniband/hw/ehca/ehca_reqs.c | 14 +-
drivers/infiniband/hw/ehca/hcp_if.c | 10 +
drivers/infiniband/hw/ehca/hcp_if.h | 1 +
drivers/infiniband/hw/ipath/ipath_cq.c | 2 +-
drivers/infiniband/hw/ipath/ipath_iba7220.c | 4 +-
drivers/infiniband/hw/ipath/ipath_mad.c | 6 +-
drivers/infiniband/hw/ipath/ipath_rc.c | 4 +-
drivers/infiniband/hw/ipath/ipath_ruc.c | 4 +-
drivers/infiniband/hw/ipath/ipath_uc.c | 8 +-
drivers/infiniband/hw/ipath/ipath_ud.c | 8 +-
drivers/infiniband/hw/ipath/ipath_verbs.c | 3 +-
drivers/infiniband/hw/mlx4/cq.c | 12 +-
drivers/infiniband/hw/mlx4/mad.c | 3 +-
drivers/infiniband/hw/mlx4/main.c | 7 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 3 +-
drivers/infiniband/hw/mlx4/qp.c | 73 +++----
drivers/infiniband/hw/mthca/mthca_allocator.c | 2 -
drivers/infiniband/hw/mthca/mthca_av.c | 2 -
drivers/infiniband/hw/mthca/mthca_catas.c | 17 +--
drivers/infiniband/hw/mthca/mthca_cmd.c | 2 -
drivers/infiniband/hw/mthca/mthca_cmd.h | 2 -
drivers/infiniband/hw/mthca/mthca_config_reg.h | 2 -
drivers/infiniband/hw/mthca/mthca_cq.c | 6 +-
drivers/infiniband/hw/mthca/mthca_dev.h | 3 -
drivers/infiniband/hw/mthca/mthca_doorbell.h | 2 -
drivers/infiniband/hw/mthca/mthca_eq.c | 2 -
drivers/infiniband/hw/mthca/mthca_mad.c | 2 -
drivers/infiniband/hw/mthca/mthca_main.c | 2 -
drivers/infiniband/hw/mthca/mthca_mcg.c | 2 -
drivers/infiniband/hw/mthca/mthca_memfree.c | 2 -
drivers/infiniband/hw/mthca/mthca_memfree.h | 2 -
drivers/infiniband/hw/mthca/mthca_mr.c | 2 -
drivers/infiniband/hw/mthca/mthca_pd.c | 2 -
drivers/infiniband/hw/mthca/mthca_profile.c | 2 -
drivers/infiniband/hw/mthca/mthca_profile.h | 2 -
drivers/infiniband/hw/mthca/mthca_provider.c | 2 -
drivers/infiniband/hw/mthca/mthca_provider.h | 2 -
drivers/infiniband/hw/mthca/mthca_qp.c | 32 +---
drivers/infiniband/hw/mthca/mthca_reset.c | 2 -
drivers/infiniband/hw/mthca/mthca_srq.c | 2 -
drivers/infiniband/hw/mthca/mthca_uar.c | 2 -
drivers/infiniband/hw/mthca/mthca_user.h | 1 -
drivers/infiniband/hw/mthca/mthca_wqe.h | 2 -
drivers/infiniband/hw/nes/nes.c | 2 +-
drivers/infiniband/hw/nes/nes.h | 9 +-
drivers/infiniband/hw/nes/nes_cm.c | 1 -
drivers/infiniband/hw/nes/nes_hw.c | 68 +-----
drivers/infiniband/hw/nes/nes_hw.h | 2 +-
drivers/infiniband/hw/nes/nes_utils.c | 33 +++-
drivers/infiniband/hw/nes/nes_verbs.c | 207 ++++---------------
drivers/infiniband/ulp/ipoib/Kconfig | 1 +
drivers/infiniband/ulp/ipoib/ipoib.h | 48 ++++--
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 104 +++++++---
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 46 ++++
drivers/infiniband/ulp/ipoib/ipoib_fs.c | 2 -
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 52 +++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 115 ++++++++++-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 27 +--
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 69 +++----
drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 2 -
drivers/infiniband/ulp/iser/iscsi_iser.c | 3 -
drivers/infiniband/ulp/iser/iscsi_iser.h | 2 -
drivers/infiniband/ulp/iser/iser_initiator.c | 2 -
drivers/infiniband/ulp/iser/iser_memory.c | 2 -
drivers/infiniband/ulp/iser/iser_verbs.c | 2 -
drivers/infiniband/ulp/srp/ib_srp.c | 15 +-
drivers/infiniband/ulp/srp/ib_srp.h | 2 -
drivers/net/cxgb3/cxgb3_ctl_defs.h | 1 +
drivers/net/cxgb3/cxgb3_offload.c | 7 +
drivers/net/cxgb3/version.h | 2 +-
drivers/net/mlx4/fw.c | 28 +++
drivers/net/mlx4/fw.h | 6 +
drivers/net/mlx4/main.c | 7 +
drivers/net/mlx4/mcg.c | 17 ++-
include/linux/mlx4/device.h | 3 +-
include/rdma/ib_addr.h | 43 +++--
include/rdma/ib_cache.h | 2 -
include/rdma/ib_cm.h | 2 -
include/rdma/ib_fmr_pool.h | 4 +-
include/rdma/ib_mad.h | 17 +-
include/rdma/ib_pack.h | 2 -
include/rdma/ib_sa.h | 2 -
include/rdma/ib_smi.h | 4 +-
include/rdma/ib_user_cm.h | 2 -
include/rdma/ib_user_mad.h | 2 -
include/rdma/ib_user_verbs.h | 7 +-
include/rdma/ib_verbs.h | 149 +++++++++++++-
include/rdma/iw_cm.h | 2 +-
include/rdma/rdma_cm.h | 52 +++---
include/rdma/rdma_cm_ib.h | 50 +++--
124 files changed, 1632 insertions(+), 935 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-07-08 21:41 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-07-08 21:41 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel, steve
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a fix for one regression introduced earlier in the
2.6.26 cycle:
Steve Wise (1):
RDMA/cxgb3: Fix regression caused by class_device -> device conversion
drivers/infiniband/hw/cxgb3/iwch_provider.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index 8934178..95f82cf 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -1096,7 +1096,9 @@ static ssize_t show_fw_ver(struct device *dev, struct device_attribute *attr, ch
struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev;
PDBG("%s dev 0x%p\n", __func__, dev);
+ rtnl_lock();
lldev->ethtool_ops->get_drvinfo(lldev, &info);
+ rtnl_unlock();
return sprintf(buf, "%s\n", info.fw_version);
}
@@ -1109,7 +1111,9 @@ static ssize_t show_hca(struct device *dev, struct device_attribute *attr,
struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev;
PDBG("%s dev 0x%p\n", __func__, dev);
+ rtnl_lock();
lldev->ethtool_ops->get_drvinfo(lldev, &info);
+ rtnl_unlock();
return sprintf(buf, "%s\n", info.driver);
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-06-23 19:23 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-06-23 19:23 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a fix for one rare bug seen by SGI on large clusters:
Eli Cohen (1):
IB/mthca: Clear ICM pages before handing to FW
drivers/infiniband/hw/mthca/mthca_memfree.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniband/hw/mthca/mthca_memfree.c
index b224079..d5862e5 100644
--- a/drivers/infiniband/hw/mthca/mthca_memfree.c
+++ b/drivers/infiniband/hw/mthca/mthca_memfree.c
@@ -109,7 +109,11 @@ static int mthca_alloc_icm_pages(struct scatterlist *mem, int order, gfp_t gfp_m
{
struct page *page;
- page = alloc_pages(gfp_mask, order);
+ /*
+ * Use __GFP_ZERO because buggy firmware assumes ICM pages are
+ * cleared, and subtle failures are seen if they aren't.
+ */
+ page = alloc_pages(gfp_mask | __GFP_ZERO, order);
if (!page)
return -ENOMEM;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-06-18 22:38 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-06-18 22:38 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a couple of small fixes:
Jack Morgenstein (1):
IB/uverbs: Fix check of is_closed flag check in ib_uverbs_async_handler()
Roland Dreier (1):
RDMA/nes: Fix off-by-one in nes_reg_user_mr() error path
drivers/infiniband/core/uverbs_main.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 4 +---
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
index f806da1..caed42b 100644
--- a/drivers/infiniband/core/uverbs_main.c
+++ b/drivers/infiniband/core/uverbs_main.c
@@ -423,7 +423,7 @@ static void ib_uverbs_async_handler(struct ib_uverbs_file *file,
unsigned long flags;
spin_lock_irqsave(&file->async_file->lock, flags);
- if (!file->async_file->is_closed) {
+ if (file->async_file->is_closed) {
spin_unlock_irqrestore(&file->async_file->lock, flags);
return;
}
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 99b3c4a..d617da9 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -2456,10 +2456,8 @@ static struct ib_mr *nes_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
if ((page_count!=0)&&(page_count<<12)-(region->offset&(4096-1))>=region->length)
goto enough_pages;
if ((page_count&0x01FF) == 0) {
- if (page_count>(1024*512)) {
+ if (page_count >= 1024 * 512) {
ib_umem_release(region);
- pci_free_consistent(nesdev->pcidev, 4096, vpbl.pbl_vbase,
- vpbl.pbl_pbase);
nes_free_resource(nesadapter,
nesadapter->allocated_mrs, stag_index);
kfree(nesmr);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-06-09 20:10 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-06-09 20:10 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a fix for a crash/lockup triggerable by buggy userspace
(that I already sent you as a patch via email), and remove one API
that only appeared in 2.6.26-rc kernels and that we decided should be
exposed in a different way (already queued for 2.6.27 in linux-next).
Roland Dreier (2):
IB/umem: Avoid sign problems when demoting npages to integer
IB/core: Remove IB_DEVICE_SEND_W_INV capability flag
drivers/infiniband/core/umem.c | 2 +-
drivers/infiniband/hw/amso1100/c2_rnic.c | 3 +--
include/rdma/ib_verbs.h | 1 -
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index fe78f7d..a1768db 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -150,7 +150,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
ret = 0;
while (npages) {
ret = get_user_pages(current, current->mm, cur_base,
- min_t(int, npages,
+ min_t(unsigned long, npages,
PAGE_SIZE / sizeof (struct page *)),
1, !umem->writable, page_list, vma_list);
diff --git a/drivers/infiniband/hw/amso1100/c2_rnic.c b/drivers/infiniband/hw/amso1100/c2_rnic.c
index 9a054c6..b1441ae 100644
--- a/drivers/infiniband/hw/amso1100/c2_rnic.c
+++ b/drivers/infiniband/hw/amso1100/c2_rnic.c
@@ -455,8 +455,7 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev)
IB_DEVICE_CURR_QP_STATE_MOD |
IB_DEVICE_SYS_IMAGE_GUID |
IB_DEVICE_ZERO_STAG |
- IB_DEVICE_MEM_WINDOW |
- IB_DEVICE_SEND_W_INV);
+ IB_DEVICE_MEM_WINDOW);
/* Allocate the qptr_array */
c2dev->qptr_array = vmalloc(C2_MAX_CQS * sizeof(void *));
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 911a661..31d30b1 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -105,7 +105,6 @@ enum ib_device_cap_flags {
*/
IB_DEVICE_UD_IP_CSUM = (1<<18),
IB_DEVICE_UD_TSO = (1<<19),
- IB_DEVICE_SEND_W_INV = (1<<21),
};
enum ib_atomic_cap {
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-06-06 18:26 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-06-06 18:26 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get some small fixes for various low-level driver issues:
Chien Tung (1):
MAINTAINERS: Update NetEffect (iw_nes) entry
Joachim Fenkes (1):
IB/ehca: Reject send WRs only for RESET, INIT and RTR state
Ralph Campbell (2):
IB/ipath: Fix device capability flags
IB/ipath: Fix SM trap forwarding
Roland Dreier (1):
IB/ipath: Avoid test_bit() on u64 SDMA status value
MAINTAINERS | 4 ++--
drivers/infiniband/hw/ehca/ehca_reqs.c | 6 ++++--
drivers/infiniband/hw/ipath/ipath_kernel.h | 5 +++++
drivers/infiniband/hw/ipath/ipath_mad.c | 4 ++++
drivers/infiniband/hw/ipath/ipath_sdma.c | 12 ++++--------
drivers/infiniband/hw/ipath/ipath_verbs.c | 3 ++-
6 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 0a6d2ca..bd3badb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2866,8 +2866,8 @@ S: Maintained
NETEFFECT IWARP RNIC DRIVER (IW_NES)
P: Faisal Latif
M: flatif@neteffect.com
-P: Nishi Gupta
-M: ngupta@neteffect.com
+P: Chien Tung
+M: ctung@neteffect.com
P: Glenn Streiff
M: gstreiff@neteffect.com
L: general@lists.openfabrics.org
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c
index bbe0436..f093b00 100644
--- a/drivers/infiniband/hw/ehca/ehca_reqs.c
+++ b/drivers/infiniband/hw/ehca/ehca_reqs.c
@@ -421,8 +421,10 @@ int ehca_post_send(struct ib_qp *qp,
int ret = 0;
unsigned long flags;
- if (unlikely(my_qp->state != IB_QPS_RTS)) {
- ehca_err(qp->device, "QP not in RTS state qpn=%x", qp->qp_num);
+ /* Reject WR if QP is in RESET, INIT or RTR state */
+ if (unlikely(my_qp->state < IB_QPS_RTS)) {
+ ehca_err(qp->device, "Invalid QP state qp_state=%d qpn=%x",
+ my_qp->state, qp->qp_num);
return -EINVAL;
}
diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h
index 59a8b25..0bd8bcb 100644
--- a/drivers/infiniband/hw/ipath/ipath_kernel.h
+++ b/drivers/infiniband/hw/ipath/ipath_kernel.h
@@ -232,6 +232,11 @@ struct ipath_sdma_desc {
#define IPATH_SDMA_TXREQ_S_ABORTED 2
#define IPATH_SDMA_TXREQ_S_SHUTDOWN 3
+#define IPATH_SDMA_STATUS_SCORE_BOARD_DRAIN_IN_PROG (1ull << 63)
+#define IPATH_SDMA_STATUS_ABORT_IN_PROG (1ull << 62)
+#define IPATH_SDMA_STATUS_INTERNAL_SDMA_ENABLE (1ull << 61)
+#define IPATH_SDMA_STATUS_SCB_EMPTY (1ull << 30)
+
/* max dwords in small buffer packet */
#define IPATH_SMALLBUF_DWORDS (dd->ipath_piosize2k >> 2)
diff --git a/drivers/infiniband/hw/ipath/ipath_mad.c b/drivers/infiniband/hw/ipath/ipath_mad.c
index 1ff46ae..5f9315d 100644
--- a/drivers/infiniband/hw/ipath/ipath_mad.c
+++ b/drivers/infiniband/hw/ipath/ipath_mad.c
@@ -1492,6 +1492,10 @@ static int process_subn(struct ib_device *ibdev, int mad_flags,
goto bail;
}
+ case IB_MGMT_METHOD_TRAP:
+ case IB_MGMT_METHOD_REPORT:
+ case IB_MGMT_METHOD_REPORT_RESP:
+ case IB_MGMT_METHOD_TRAP_REPRESS:
case IB_MGMT_METHOD_GET_RESP:
/*
* The ib_mad module will call us to process responses
diff --git a/drivers/infiniband/hw/ipath/ipath_sdma.c b/drivers/infiniband/hw/ipath/ipath_sdma.c
index 0a8c1b8..eaba032 100644
--- a/drivers/infiniband/hw/ipath/ipath_sdma.c
+++ b/drivers/infiniband/hw/ipath/ipath_sdma.c
@@ -263,14 +263,10 @@ static void sdma_abort_task(unsigned long opaque)
hwstatus = ipath_read_kreg64(dd,
dd->ipath_kregs->kr_senddmastatus);
- if (/* ScoreBoardDrainInProg */
- test_bit(63, &hwstatus) ||
- /* AbortInProg */
- test_bit(62, &hwstatus) ||
- /* InternalSDmaEnable */
- test_bit(61, &hwstatus) ||
- /* ScbEmpty */
- !test_bit(30, &hwstatus)) {
+ if ((hwstatus & (IPATH_SDMA_STATUS_SCORE_BOARD_DRAIN_IN_PROG |
+ IPATH_SDMA_STATUS_ABORT_IN_PROG |
+ IPATH_SDMA_STATUS_INTERNAL_SDMA_ENABLE)) ||
+ !(hwstatus & IPATH_SDMA_STATUS_SCB_EMPTY)) {
if (dd->ipath_sdma_reset_wait > 0) {
/* not done shutting down sdma */
--dd->ipath_sdma_reset_wait;
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c
index e0ec540..7779165 100644
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c
@@ -1494,7 +1494,8 @@ static int ipath_query_device(struct ib_device *ibdev,
props->device_cap_flags = IB_DEVICE_BAD_PKEY_CNTR |
IB_DEVICE_BAD_QKEY_CNTR | IB_DEVICE_SHUTDOWN_PORT |
- IB_DEVICE_SYS_IMAGE_GUID;
+ IB_DEVICE_SYS_IMAGE_GUID | IB_DEVICE_RC_RNR_NAK_GEN |
+ IB_DEVICE_PORT_ACTIVE_EVENT | IB_DEVICE_SRQ_RESIZE;
props->page_size_cap = PAGE_SIZE;
props->vendor_id = dev->dd->ipath_vendorid;
props->vendor_part_id = dev->dd->ipath_deviceid;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-05-23 17:57 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-05-23 17:57 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a fixes for various issues:
- Various trivial fixes that get rid of warnings
- A couple of oopsable bugs fixed
- Fixes for mthca/mlx4 driver bugs that stop NFS/RDMA from working
- MAINTAINERS entry for Chelsio drivers
Andrew Morton (1):
IB/mlx4: Fix uninitialized-var warning in mlx4_ib_post_send()
Dave Olson (1):
IB/mad: Fix kernel crash when .process_mad() returns SUCCESS|CONSUMED
Jack Morgenstein (1):
IPoIB: Test for NULL broadcast object in ipiob_mcast_join_finish()
Ralph Campbell (1):
IB/ipath: Fix UC receive completion opcode for RDMA WRITE with immediate
Roland Dreier (4):
IB/ipath: Fix printk format for ipath_sdma_status
RDMA/cxgb3: Fix uninitialized variable warning in iwch_post_send()
IB/mthca: Fix max_sge value returned by query_device
IB/mlx4: Fix creation of kernel QP with max number of send s/g entries
Steve Wise (1):
MAINTAINERS: Add cxgb3 and iw_cxgb3 NIC and iWARP driver entries
MAINTAINERS | 14 ++++++++++++++
drivers/infiniband/core/mad.c | 4 +++-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 2 +-
drivers/infiniband/hw/ipath/ipath_sdma.c | 4 ++--
drivers/infiniband/hw/ipath/ipath_uc.c | 4 ++--
drivers/infiniband/hw/mlx4/qp.c | 15 +++++++++------
drivers/infiniband/hw/mthca/mthca_main.c | 14 +++++++++++++-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 6 ++++++
8 files changed, 50 insertions(+), 13 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index bc1c008..907d8c4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1239,6 +1239,20 @@ L: video4linux-list@redhat.com
W: http://linuxtv.org
S: Maintained
+CXGB3 ETHERNET DRIVER (CXGB3)
+P: Divy Le Ray
+M: divy@chelsio.com
+L: netdev@vger.kernel.org
+W: http://www.chelsio.com
+S: Supported
+
+CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
+P: Steve Wise
+M: swise@chelsio.com
+L: general@lists.openfabrics.org
+W: http://www.openfabrics.org
+S: Supported
+
CYBERPRO FB DRIVER
P: Russell King
M: rmk@arm.linux.org.uk
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index fbe16d5..1adf2ef 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -747,7 +747,9 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
break;
case IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_CONSUMED:
kmem_cache_free(ib_mad_cache, mad_priv);
- break;
+ kfree(local);
+ ret = 1;
+ goto out;
case IB_MAD_RESULT_SUCCESS:
/* Treat like an incoming receive MAD */
port_priv = ib_get_mad_port(mad_agent_priv->agent.device,
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c
index 79dbe5b..9926137 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_qp.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c
@@ -229,7 +229,7 @@ int iwch_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
struct ib_send_wr **bad_wr)
{
int err = 0;
- u8 t3_wr_flit_cnt;
+ u8 uninitialized_var(t3_wr_flit_cnt);
enum t3_wr_opcode t3_wr_opcode = 0;
enum t3_wr_flags t3_wr_flags;
struct iwch_qp *qhp;
diff --git a/drivers/infiniband/hw/ipath/ipath_sdma.c b/drivers/infiniband/hw/ipath/ipath_sdma.c
index 3697449..0a8c1b8 100644
--- a/drivers/infiniband/hw/ipath/ipath_sdma.c
+++ b/drivers/infiniband/hw/ipath/ipath_sdma.c
@@ -345,7 +345,7 @@ resched:
* state change
*/
if (jiffies > dd->ipath_sdma_abort_jiffies) {
- ipath_dbg("looping with status 0x%016llx\n",
+ ipath_dbg("looping with status 0x%08lx\n",
dd->ipath_sdma_status);
dd->ipath_sdma_abort_jiffies = jiffies + 5 * HZ;
}
@@ -615,7 +615,7 @@ void ipath_restart_sdma(struct ipath_devdata *dd)
}
spin_unlock_irqrestore(&dd->ipath_sdma_lock, flags);
if (!needed) {
- ipath_dbg("invalid attempt to restart SDMA, status 0x%016llx\n",
+ ipath_dbg("invalid attempt to restart SDMA, status 0x%08lx\n",
dd->ipath_sdma_status);
goto bail;
}
diff --git a/drivers/infiniband/hw/ipath/ipath_uc.c b/drivers/infiniband/hw/ipath/ipath_uc.c
index 7fd18e8..0596ec1 100644
--- a/drivers/infiniband/hw/ipath/ipath_uc.c
+++ b/drivers/infiniband/hw/ipath/ipath_uc.c
@@ -407,12 +407,11 @@ void ipath_uc_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr,
dev->n_pkt_drops++;
goto done;
}
- /* XXX Need to free SGEs */
+ wc.opcode = IB_WC_RECV;
last_imm:
ipath_copy_sge(&qp->r_sge, data, tlen);
wc.wr_id = qp->r_wr_id;
wc.status = IB_WC_SUCCESS;
- wc.opcode = IB_WC_RECV;
wc.qp = &qp->ibqp;
wc.src_qp = qp->remote_qpn;
wc.slid = qp->remote_ah_attr.dlid;
@@ -514,6 +513,7 @@ void ipath_uc_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr,
goto done;
}
wc.byte_len = qp->r_len;
+ wc.opcode = IB_WC_RECV_RDMA_WITH_IMM;
goto last_imm;
case OP(RDMA_WRITE_LAST):
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 8e02ecf..a80df22 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -333,6 +333,9 @@ static int set_kernel_sq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
cap->max_inline_data + sizeof (struct mlx4_wqe_inline_seg)) +
send_wqe_overhead(type, qp->flags);
+ if (s > dev->dev->caps.max_sq_desc_sz)
+ return -EINVAL;
+
/*
* Hermon supports shrinking WQEs, such that a single work
* request can include multiple units of 1 << wqe_shift. This
@@ -372,9 +375,6 @@ static int set_kernel_sq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
qp->sq.wqe_shift = ilog2(roundup_pow_of_two(s));
for (;;) {
- if (1 << qp->sq.wqe_shift > dev->dev->caps.max_sq_desc_sz)
- return -EINVAL;
-
qp->sq_max_wqes_per_wr = DIV_ROUND_UP(s, 1U << qp->sq.wqe_shift);
/*
@@ -395,7 +395,8 @@ static int set_kernel_sq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
++qp->sq.wqe_shift;
}
- qp->sq.max_gs = ((qp->sq_max_wqes_per_wr << qp->sq.wqe_shift) -
+ qp->sq.max_gs = (min(dev->dev->caps.max_sq_desc_sz,
+ (qp->sq_max_wqes_per_wr << qp->sq.wqe_shift)) -
send_wqe_overhead(type, qp->flags)) /
sizeof (struct mlx4_wqe_data_seg);
@@ -411,7 +412,9 @@ static int set_kernel_sq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
cap->max_send_wr = qp->sq.max_post =
(qp->sq.wqe_cnt - qp->sq_spare_wqes) / qp->sq_max_wqes_per_wr;
- cap->max_send_sge = qp->sq.max_gs;
+ cap->max_send_sge = min(qp->sq.max_gs,
+ min(dev->dev->caps.max_sq_sg,
+ dev->dev->caps.max_rq_sg));
/* We don't support inline sends for kernel QPs (yet) */
cap->max_inline_data = 0;
@@ -1457,7 +1460,7 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
unsigned ind;
int uninitialized_var(stamp);
int uninitialized_var(size);
- unsigned seglen;
+ unsigned uninitialized_var(seglen);
int i;
spin_lock_irqsave(&qp->sq.lock, flags);
diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c
index 9ebadd6..200cf13 100644
--- a/drivers/infiniband/hw/mthca/mthca_main.c
+++ b/drivers/infiniband/hw/mthca/mthca_main.c
@@ -45,6 +45,7 @@
#include "mthca_cmd.h"
#include "mthca_profile.h"
#include "mthca_memfree.h"
+#include "mthca_wqe.h"
MODULE_AUTHOR("Roland Dreier");
MODULE_DESCRIPTION("Mellanox InfiniBand HCA low-level driver");
@@ -200,7 +201,18 @@ static int mthca_dev_lim(struct mthca_dev *mdev, struct mthca_dev_lim *dev_lim)
mdev->limits.gid_table_len = dev_lim->max_gids;
mdev->limits.pkey_table_len = dev_lim->max_pkeys;
mdev->limits.local_ca_ack_delay = dev_lim->local_ca_ack_delay;
- mdev->limits.max_sg = dev_lim->max_sg;
+ /*
+ * Need to allow for worst case send WQE overhead and check
+ * whether max_desc_sz imposes a lower limit than max_sg; UD
+ * send has the biggest overhead.
+ */
+ mdev->limits.max_sg = min_t(int, dev_lim->max_sg,
+ (dev_lim->max_desc_sz -
+ sizeof (struct mthca_next_seg) -
+ (mthca_is_memfree(mdev) ?
+ sizeof (struct mthca_arbel_ud_seg) :
+ sizeof (struct mthca_tavor_ud_seg))) /
+ sizeof (struct mthca_data_seg));
mdev->limits.max_wqes = dev_lim->max_qp_sz;
mdev->limits.max_qp_init_rdma = dev_lim->max_requester_per_qp;
mdev->limits.reserved_qps = dev_lim->reserved_qps;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index d00a2c1..3f663fb 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -194,7 +194,13 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
/* Set the cached Q_Key before we attach if it's the broadcast group */
if (!memcmp(mcast->mcmember.mgid.raw, priv->dev->broadcast + 4,
sizeof (union ib_gid))) {
+ spin_lock_irq(&priv->lock);
+ if (!priv->broadcast) {
+ spin_unlock_irq(&priv->lock);
+ return -EAGAIN;
+ }
priv->qkey = be32_to_cpu(priv->broadcast->mcmember.qkey);
+ spin_unlock_irq(&priv->lock);
priv->tx_wr.wr.ud.remote_qkey = priv->qkey;
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-05-07 19:17 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-05-07 19:17 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a fixes for various low-level HW driver issues:
- cxgb3 severe limits on memory registration size
- ehca QP async event race
- ipath miscellaneous issues
Dave Olson (2):
IB/ipath: Fix bug that can leave sends disabled after freeze recovery
IB/ipath: Need to always request and handle PIO avail interrupts
John Gregor (1):
IB/ipath: Fix SDMA error recovery in absence of link status change
Michael Albaugh (2):
IB/ipath: Only warn about prototype chip during init
IB/ipath: Fix count of packets received by kernel
Ralph Campbell (2):
IB/ipath: Only increment SSN if WQE is put on send queue
IB/ipath: Return the correct opcode for RDMA WRITE with immediate
Roland Dreier (2):
RDMA/cxgb3: Don't add PBL memory to gen_pool in chunks
RDMA/cxgb3: Fix severe limit on userspace memory registration size
Stefan Roscher (1):
IB/ehca: Wait for async events to finish before destroying QP
drivers/infiniband/hw/cxgb3/cxio_hal.c | 90 ++++++++--------
drivers/infiniband/hw/cxgb3/cxio_hal.h | 8 +-
drivers/infiniband/hw/cxgb3/cxio_resource.c | 36 +++++--
drivers/infiniband/hw/cxgb3/iwch_mem.c | 75 +++++++++-----
drivers/infiniband/hw/cxgb3/iwch_provider.c | 68 ++++++++++---
drivers/infiniband/hw/cxgb3/iwch_provider.h | 8 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 2 +
drivers/infiniband/hw/ehca/ehca_irq.c | 4 +
drivers/infiniband/hw/ehca/ehca_qp.c | 5 +
drivers/infiniband/hw/ipath/ipath_driver.c | 138 ++++++++++++++++++++++---
drivers/infiniband/hw/ipath/ipath_file_ops.c | 72 ++++++--------
drivers/infiniband/hw/ipath/ipath_iba7220.c | 26 ++---
drivers/infiniband/hw/ipath/ipath_init_chip.c | 95 ++++++++----------
drivers/infiniband/hw/ipath/ipath_intr.c | 80 ++------------
drivers/infiniband/hw/ipath/ipath_kernel.h | 8 ++-
drivers/infiniband/hw/ipath/ipath_rc.c | 6 +-
drivers/infiniband/hw/ipath/ipath_ruc.c | 7 +-
drivers/infiniband/hw/ipath/ipath_sdma.c | 44 ++++++--
drivers/infiniband/hw/ipath/ipath_verbs.c | 2 +-
19 files changed, 458 insertions(+), 316 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-05-05 23:00 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-05-05 23:00 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a fixes for:
- mlx4 breakage introduced (by me) with the CQ resize support
- mlx4 breakage with new FW that supports smaller adapter pages
- IPoIB breakage introduced with the separate send CQ support
- longstanding cxgb3 breakage uncovered by stress testing
- ehca minor messiness
Eli Cohen (1):
IB/ipoib: Fix transmit queue stalling forever
Oren Duer (1):
mlx4_core: Support creation of FMRs with pages smaller than 4K
Roland Dreier (1):
IB/mlx4: Fix off-by-one errors in calls to mlx4_ib_free_cq_buf()
Stefan Roscher (1):
IB/ehca: Fix function return types
Steve Wise (3):
RDMA/cxgb3: QP flush fixes
RDMA/cxgb3: Silently ignore close reply after abort.
RDMA/cxgb3: Bump up the MPA connection setup timeout.
drivers/infiniband/hw/cxgb3/cxio_hal.c | 13 ++++++--
drivers/infiniband/hw/cxgb3/cxio_hal.h | 4 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 6 ++--
drivers/infiniband/hw/cxgb3/iwch_qp.c | 13 +++++---
drivers/infiniband/hw/ehca/ehca_hca.c | 7 ++--
drivers/infiniband/hw/mlx4/cq.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 2 +
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 47 +++++++++++++++++++++++++---
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 3 +-
drivers/net/mlx4/mr.c | 2 +-
10 files changed, 75 insertions(+), 26 deletions(-)
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c
index ed2ee4b..5fd8506 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.c
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c
@@ -359,9 +359,10 @@ static void insert_recv_cqe(struct t3_wq *wq, struct t3_cq *cq)
cq->sw_wptr++;
}
-void cxio_flush_rq(struct t3_wq *wq, struct t3_cq *cq, int count)
+int cxio_flush_rq(struct t3_wq *wq, struct t3_cq *cq, int count)
{
u32 ptr;
+ int flushed = 0;
PDBG("%s wq %p cq %p\n", __func__, wq, cq);
@@ -369,8 +370,11 @@ void cxio_flush_rq(struct t3_wq *wq, struct t3_cq *cq, int count)
PDBG("%s rq_rptr %u rq_wptr %u skip count %u\n", __func__,
wq->rq_rptr, wq->rq_wptr, count);
ptr = wq->rq_rptr + count;
- while (ptr++ != wq->rq_wptr)
+ while (ptr++ != wq->rq_wptr) {
insert_recv_cqe(wq, cq);
+ flushed++;
+ }
+ return flushed;
}
static void insert_sq_cqe(struct t3_wq *wq, struct t3_cq *cq,
@@ -394,9 +398,10 @@ static void insert_sq_cqe(struct t3_wq *wq, struct t3_cq *cq,
cq->sw_wptr++;
}
-void cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count)
+int cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count)
{
__u32 ptr;
+ int flushed = 0;
struct t3_swsq *sqp = wq->sq + Q_PTR2IDX(wq->sq_rptr, wq->sq_size_log2);
ptr = wq->sq_rptr + count;
@@ -405,7 +410,9 @@ void cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count)
insert_sq_cqe(wq, cq, sqp);
sqp++;
ptr++;
+ flushed++;
}
+ return flushed;
}
/*
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.h b/drivers/infiniband/hw/cxgb3/cxio_hal.h
index 2bcff7f..69ab08e 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.h
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.h
@@ -173,8 +173,8 @@ u32 cxio_hal_get_pdid(struct cxio_hal_resource *rscp);
void cxio_hal_put_pdid(struct cxio_hal_resource *rscp, u32 pdid);
int __init cxio_hal_init(void);
void __exit cxio_hal_exit(void);
-void cxio_flush_rq(struct t3_wq *wq, struct t3_cq *cq, int count);
-void cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count);
+int cxio_flush_rq(struct t3_wq *wq, struct t3_cq *cq, int count);
+int cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count);
void cxio_count_rcqes(struct t3_cq *cq, struct t3_wq *wq, int *count);
void cxio_count_scqes(struct t3_cq *cq, struct t3_wq *wq, int *count);
void cxio_flush_hw_cq(struct t3_cq *cq);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index d44a6df..c325c44 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -67,10 +67,10 @@ int peer2peer = 0;
module_param(peer2peer, int, 0644);
MODULE_PARM_DESC(peer2peer, "Support peer2peer ULPs (default=0)");
-static int ep_timeout_secs = 10;
+static int ep_timeout_secs = 60;
module_param(ep_timeout_secs, int, 0644);
MODULE_PARM_DESC(ep_timeout_secs, "CM Endpoint operation timeout "
- "in seconds (default=10)");
+ "in seconds (default=60)");
static int mpa_rev = 1;
module_param(mpa_rev, int, 0644);
@@ -1650,8 +1650,8 @@ static int close_con_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
release = 1;
break;
case ABORTING:
- break;
case DEAD:
+ break;
default:
BUG_ON(1);
break;
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c
index 9b4be88..79dbe5b 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_qp.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c
@@ -655,6 +655,7 @@ static void __flush_qp(struct iwch_qp *qhp, unsigned long *flag)
{
struct iwch_cq *rchp, *schp;
int count;
+ int flushed;
rchp = get_chp(qhp->rhp, qhp->attr.rcq);
schp = get_chp(qhp->rhp, qhp->attr.scq);
@@ -669,20 +670,22 @@ static void __flush_qp(struct iwch_qp *qhp, unsigned long *flag)
spin_lock(&qhp->lock);
cxio_flush_hw_cq(&rchp->cq);
cxio_count_rcqes(&rchp->cq, &qhp->wq, &count);
- cxio_flush_rq(&qhp->wq, &rchp->cq, count);
+ flushed = cxio_flush_rq(&qhp->wq, &rchp->cq, count);
spin_unlock(&qhp->lock);
spin_unlock_irqrestore(&rchp->lock, *flag);
- (*rchp->ibcq.comp_handler)(&rchp->ibcq, rchp->ibcq.cq_context);
+ if (flushed)
+ (*rchp->ibcq.comp_handler)(&rchp->ibcq, rchp->ibcq.cq_context);
/* locking heirarchy: cq lock first, then qp lock. */
spin_lock_irqsave(&schp->lock, *flag);
spin_lock(&qhp->lock);
cxio_flush_hw_cq(&schp->cq);
cxio_count_scqes(&schp->cq, &qhp->wq, &count);
- cxio_flush_sq(&qhp->wq, &schp->cq, count);
+ flushed = cxio_flush_sq(&qhp->wq, &schp->cq, count);
spin_unlock(&qhp->lock);
spin_unlock_irqrestore(&schp->lock, *flag);
- (*schp->ibcq.comp_handler)(&schp->ibcq, schp->ibcq.cq_context);
+ if (flushed)
+ (*schp->ibcq.comp_handler)(&schp->ibcq, schp->ibcq.cq_context);
/* deref */
if (atomic_dec_and_test(&qhp->refcnt))
@@ -880,7 +883,6 @@ int iwch_modify_qp(struct iwch_dev *rhp, struct iwch_qp *qhp,
ep = qhp->ep;
get_ep(&ep->com);
}
- flush_qp(qhp, &flag);
break;
case IWCH_QP_STATE_TERMINATE:
qhp->attr.state = IWCH_QP_STATE_TERMINATE;
@@ -911,6 +913,7 @@ int iwch_modify_qp(struct iwch_dev *rhp, struct iwch_qp *qhp,
}
switch (attrs->next_state) {
case IWCH_QP_STATE_IDLE:
+ flush_qp(qhp, &flag);
qhp->attr.state = IWCH_QP_STATE_IDLE;
qhp->attr.llp_stream_handle = NULL;
put_ep(&qhp->ep->com);
diff --git a/drivers/infiniband/hw/ehca/ehca_hca.c b/drivers/infiniband/hw/ehca/ehca_hca.c
index 2515cbd..bc3b37d 100644
--- a/drivers/infiniband/hw/ehca/ehca_hca.c
+++ b/drivers/infiniband/hw/ehca/ehca_hca.c
@@ -101,7 +101,6 @@ int ehca_query_device(struct ib_device *ibdev, struct ib_device_attr *props)
props->max_ee = limit_uint(rblock->max_rd_ee_context);
props->max_rdd = limit_uint(rblock->max_rd_domain);
props->max_fmr = limit_uint(rblock->max_mr);
- props->local_ca_ack_delay = limit_uint(rblock->local_ca_ack_delay);
props->max_qp_rd_atom = limit_uint(rblock->max_rr_qp);
props->max_ee_rd_atom = limit_uint(rblock->max_rr_ee_context);
props->max_res_rd_atom = limit_uint(rblock->max_rr_hca);
@@ -115,7 +114,7 @@ int ehca_query_device(struct ib_device *ibdev, struct ib_device_attr *props)
}
props->max_pkeys = 16;
- props->local_ca_ack_delay = limit_uint(rblock->local_ca_ack_delay);
+ props->local_ca_ack_delay = min_t(u8, rblock->local_ca_ack_delay, 255);
props->max_raw_ipv6_qp = limit_uint(rblock->max_raw_ipv6_qp);
props->max_raw_ethy_qp = limit_uint(rblock->max_raw_ethy_qp);
props->max_mcast_grp = limit_uint(rblock->max_mcast_grp);
@@ -136,7 +135,7 @@ query_device1:
return ret;
}
-static int map_mtu(struct ehca_shca *shca, u32 fw_mtu)
+static enum ib_mtu map_mtu(struct ehca_shca *shca, u32 fw_mtu)
{
switch (fw_mtu) {
case 0x1:
@@ -156,7 +155,7 @@ static int map_mtu(struct ehca_shca *shca, u32 fw_mtu)
}
}
-static int map_number_of_vls(struct ehca_shca *shca, u32 vl_cap)
+static u8 map_number_of_vls(struct ehca_shca *shca, u32 vl_cap)
{
switch (vl_cap) {
case 0x1:
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index 2f199c5..4521319 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
@@ -246,7 +246,7 @@ err_mtt:
if (context)
ib_umem_release(cq->umem);
else
- mlx4_ib_free_cq_buf(dev, &cq->buf, entries);
+ mlx4_ib_free_cq_buf(dev, &cq->buf, cq->ibcq.cqe);
err_db:
if (!context)
@@ -434,7 +434,7 @@ int mlx4_ib_destroy_cq(struct ib_cq *cq)
mlx4_ib_db_unmap_user(to_mucontext(cq->uobject->context), &mcq->db);
ib_umem_release(mcq->umem);
} else {
- mlx4_ib_free_cq_buf(dev, &mcq->buf, cq->cqe + 1);
+ mlx4_ib_free_cq_buf(dev, &mcq->buf, cq->cqe);
mlx4_db_free(dev->dev, &mcq->db);
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 9044f88..ca126fc 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -334,6 +334,7 @@ struct ipoib_dev_priv {
#endif
int hca_caps;
struct ipoib_ethtool_st ethtool;
+ struct timer_list poll_timer;
};
struct ipoib_ah {
@@ -404,6 +405,7 @@ extern struct workqueue_struct *ipoib_workqueue;
int ipoib_poll(struct napi_struct *napi, int budget);
void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr);
+void ipoib_send_comp_handler(struct ib_cq *cq, void *dev_ptr);
struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
struct ib_pd *pd, struct ib_ah_attr *attr);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 97b815c..f429bce 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -461,6 +461,26 @@ void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr)
netif_rx_schedule(dev, &priv->napi);
}
+static void drain_tx_cq(struct net_device *dev)
+{
+ struct ipoib_dev_priv *priv = netdev_priv(dev);
+ unsigned long flags;
+
+ spin_lock_irqsave(&priv->tx_lock, flags);
+ while (poll_tx(priv))
+ ; /* nothing */
+
+ if (netif_queue_stopped(dev))
+ mod_timer(&priv->poll_timer, jiffies + 1);
+
+ spin_unlock_irqrestore(&priv->tx_lock, flags);
+}
+
+void ipoib_send_comp_handler(struct ib_cq *cq, void *dev_ptr)
+{
+ drain_tx_cq((struct net_device *)dev_ptr);
+}
+
static inline int post_send(struct ipoib_dev_priv *priv,
unsigned int wr_id,
struct ib_ah *address, u32 qpn,
@@ -555,12 +575,22 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb,
else
priv->tx_wr.send_flags &= ~IB_SEND_IP_CSUM;
+ if (++priv->tx_outstanding == ipoib_sendq_size) {
+ ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n");
+ if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP))
+ ipoib_warn(priv, "request notify on send CQ failed\n");
+ netif_stop_queue(dev);
+ }
+
if (unlikely(post_send(priv, priv->tx_head & (ipoib_sendq_size - 1),
address->ah, qpn, tx_req, phead, hlen))) {
ipoib_warn(priv, "post_send failed\n");
++dev->stats.tx_errors;
+ --priv->tx_outstanding;
ipoib_dma_unmap_tx(priv->ca, tx_req);
dev_kfree_skb_any(skb);
+ if (netif_queue_stopped(dev))
+ netif_wake_queue(dev);
} else {
dev->trans_start = jiffies;
@@ -568,14 +598,11 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb,
++priv->tx_head;
skb_orphan(skb);
- if (++priv->tx_outstanding == ipoib_sendq_size) {
- ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n");
- netif_stop_queue(dev);
- }
}
if (unlikely(priv->tx_outstanding > MAX_SEND_CQE))
- poll_tx(priv);
+ while (poll_tx(priv))
+ ; /* nothing */
}
static void __ipoib_reap_ah(struct net_device *dev)
@@ -609,6 +636,11 @@ void ipoib_reap_ah(struct work_struct *work)
round_jiffies_relative(HZ));
}
+static void ipoib_ib_tx_timer_func(unsigned long ctx)
+{
+ drain_tx_cq((struct net_device *)ctx);
+}
+
int ipoib_ib_dev_open(struct net_device *dev)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
@@ -645,6 +677,10 @@ int ipoib_ib_dev_open(struct net_device *dev)
queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task,
round_jiffies_relative(HZ));
+ init_timer(&priv->poll_timer);
+ priv->poll_timer.function = ipoib_ib_tx_timer_func;
+ priv->poll_timer.data = (unsigned long)dev;
+
set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags);
return 0;
@@ -810,6 +846,7 @@ int ipoib_ib_dev_stop(struct net_device *dev, int flush)
ipoib_dbg(priv, "All sends and receives done.\n");
timeout:
+ del_timer_sync(&priv->poll_timer);
qp_attr.qp_state = IB_QPS_RESET;
if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE))
ipoib_warn(priv, "Failed to modify QP to RESET state\n");
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
index c1e7ece..8766d29 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
@@ -187,7 +187,8 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)
goto out_free_mr;
}
- priv->send_cq = ib_create_cq(priv->ca, NULL, NULL, dev, ipoib_sendq_size, 0);
+ priv->send_cq = ib_create_cq(priv->ca, ipoib_send_comp_handler, NULL,
+ dev, ipoib_sendq_size, 0);
if (IS_ERR(priv->send_cq)) {
printk(KERN_WARNING "%s: failed to create send CQ\n", ca->name);
goto out_free_recv_cq;
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c
index cb46446..03a9abc 100644
--- a/drivers/net/mlx4/mr.c
+++ b/drivers/net/mlx4/mr.c
@@ -551,7 +551,7 @@ int mlx4_fmr_alloc(struct mlx4_dev *dev, u32 pd, u32 access, int max_pages,
u64 mtt_seg;
int err = -ENOMEM;
- if (page_shift < 12 || page_shift >= 32)
+ if (page_shift < (ffs(dev->caps.page_size_cap) - 1) || page_shift >= 32)
return -EINVAL;
/* All MTTs must fit in the same page */
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-05-01 3:46 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-05-01 3:46 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a couple of fixes for medium-impact bugs. If they can go
into -rc1, great; otherwise the world won't end if they end up in -rc2.
Eli Cohen (1):
IB/ipoib: Fix transmit queue stalling forever
Roland Dreier (1):
IB/mlx4: Fix off-by-one errors in calls to mlx4_ib_free_cq_buf()
drivers/infiniband/hw/mlx4/cq.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 2 +
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 47 +++++++++++++++++++++++++---
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 3 +-
4 files changed, 48 insertions(+), 8 deletions(-)
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index 2f199c5..4521319 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
@@ -246,7 +246,7 @@ err_mtt:
if (context)
ib_umem_release(cq->umem);
else
- mlx4_ib_free_cq_buf(dev, &cq->buf, entries);
+ mlx4_ib_free_cq_buf(dev, &cq->buf, cq->ibcq.cqe);
err_db:
if (!context)
@@ -434,7 +434,7 @@ int mlx4_ib_destroy_cq(struct ib_cq *cq)
mlx4_ib_db_unmap_user(to_mucontext(cq->uobject->context), &mcq->db);
ib_umem_release(mcq->umem);
} else {
- mlx4_ib_free_cq_buf(dev, &mcq->buf, cq->cqe + 1);
+ mlx4_ib_free_cq_buf(dev, &mcq->buf, cq->cqe);
mlx4_db_free(dev->dev, &mcq->db);
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 9044f88..ca126fc 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -334,6 +334,7 @@ struct ipoib_dev_priv {
#endif
int hca_caps;
struct ipoib_ethtool_st ethtool;
+ struct timer_list poll_timer;
};
struct ipoib_ah {
@@ -404,6 +405,7 @@ extern struct workqueue_struct *ipoib_workqueue;
int ipoib_poll(struct napi_struct *napi, int budget);
void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr);
+void ipoib_send_comp_handler(struct ib_cq *cq, void *dev_ptr);
struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
struct ib_pd *pd, struct ib_ah_attr *attr);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 97b815c..f429bce 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -461,6 +461,26 @@ void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr)
netif_rx_schedule(dev, &priv->napi);
}
+static void drain_tx_cq(struct net_device *dev)
+{
+ struct ipoib_dev_priv *priv = netdev_priv(dev);
+ unsigned long flags;
+
+ spin_lock_irqsave(&priv->tx_lock, flags);
+ while (poll_tx(priv))
+ ; /* nothing */
+
+ if (netif_queue_stopped(dev))
+ mod_timer(&priv->poll_timer, jiffies + 1);
+
+ spin_unlock_irqrestore(&priv->tx_lock, flags);
+}
+
+void ipoib_send_comp_handler(struct ib_cq *cq, void *dev_ptr)
+{
+ drain_tx_cq((struct net_device *)dev_ptr);
+}
+
static inline int post_send(struct ipoib_dev_priv *priv,
unsigned int wr_id,
struct ib_ah *address, u32 qpn,
@@ -555,12 +575,22 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb,
else
priv->tx_wr.send_flags &= ~IB_SEND_IP_CSUM;
+ if (++priv->tx_outstanding == ipoib_sendq_size) {
+ ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n");
+ if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP))
+ ipoib_warn(priv, "request notify on send CQ failed\n");
+ netif_stop_queue(dev);
+ }
+
if (unlikely(post_send(priv, priv->tx_head & (ipoib_sendq_size - 1),
address->ah, qpn, tx_req, phead, hlen))) {
ipoib_warn(priv, "post_send failed\n");
++dev->stats.tx_errors;
+ --priv->tx_outstanding;
ipoib_dma_unmap_tx(priv->ca, tx_req);
dev_kfree_skb_any(skb);
+ if (netif_queue_stopped(dev))
+ netif_wake_queue(dev);
} else {
dev->trans_start = jiffies;
@@ -568,14 +598,11 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb,
++priv->tx_head;
skb_orphan(skb);
- if (++priv->tx_outstanding == ipoib_sendq_size) {
- ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n");
- netif_stop_queue(dev);
- }
}
if (unlikely(priv->tx_outstanding > MAX_SEND_CQE))
- poll_tx(priv);
+ while (poll_tx(priv))
+ ; /* nothing */
}
static void __ipoib_reap_ah(struct net_device *dev)
@@ -609,6 +636,11 @@ void ipoib_reap_ah(struct work_struct *work)
round_jiffies_relative(HZ));
}
+static void ipoib_ib_tx_timer_func(unsigned long ctx)
+{
+ drain_tx_cq((struct net_device *)ctx);
+}
+
int ipoib_ib_dev_open(struct net_device *dev)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
@@ -645,6 +677,10 @@ int ipoib_ib_dev_open(struct net_device *dev)
queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task,
round_jiffies_relative(HZ));
+ init_timer(&priv->poll_timer);
+ priv->poll_timer.function = ipoib_ib_tx_timer_func;
+ priv->poll_timer.data = (unsigned long)dev;
+
set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags);
return 0;
@@ -810,6 +846,7 @@ int ipoib_ib_dev_stop(struct net_device *dev, int flush)
ipoib_dbg(priv, "All sends and receives done.\n");
timeout:
+ del_timer_sync(&priv->poll_timer);
qp_attr.qp_state = IB_QPS_RESET;
if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE))
ipoib_warn(priv, "Failed to modify QP to RESET state\n");
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
index c1e7ece..8766d29 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
@@ -187,7 +187,8 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)
goto out_free_mr;
}
- priv->send_cq = ib_create_cq(priv->ca, NULL, NULL, dev, ipoib_sendq_size, 0);
+ priv->send_cq = ib_create_cq(priv->ca, ipoib_send_comp_handler, NULL,
+ dev, ipoib_sendq_size, 0);
if (IS_ERR(priv->send_cq)) {
printk(KERN_WARNING "%s: failed to create send CQ\n", ca->name);
goto out_free_recv_cq;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-04-29 20:57 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-04-29 20:57 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a last batch of changes before 2.6.26-rc1:
Eli Cohen (2):
IPoIB: Use separate CQ for UD send completions
IPoIB: Copy child MTU from parent
Eli Dorfman (2):
IB/iser: Move high-volume debug output to higher debug level
IB/iser: Count FMR alignment violations per session
Eric Schneider (1):
RDMA/nes: Add support for SFP+ PHY
Faisal Latif (1):
RDMA/nes: Use LRO
Glenn Streiff (1):
RDMA/nes: Formatting cleanup
Hoang-Nam Nguyen (1):
IB/ehca: handle negative return value from ibmebus_request_irq() properly
Olaf Kirch (2):
mlx4_core: Avoid recycling old FMR R_Keys too soon
IB/mthca: Avoid recycling old FMR R_Keys too soon
Roland Dreier (1):
IB/mthca: Avoid changing userspace ABI to handle DMA write barrier attribute
Stefan Roscher (1):
IB/ehca: Allocate event queue size depending on max number of CQs and QPs
Steve Wise (3):
RDMA/cxgb3: Correctly serialize peer abort path
RDMA/cxgb3: Set the max_mr_size device attribute correctly
RDMA/cxgb3: Support peer-2-peer connection setup
Yevgeny Petrilin (1):
mlx4_core: Add a way to set the "collapsed" CQ flag
drivers/infiniband/hw/cxgb3/cxio_hal.c | 18 ++-
drivers/infiniband/hw/cxgb3/cxio_hal.h | 1 +
drivers/infiniband/hw/cxgb3/cxio_wr.h | 21 ++-
drivers/infiniband/hw/cxgb3/iwch.c | 1 +
drivers/infiniband/hw/cxgb3/iwch.h | 1 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 167 ++++++++----
drivers/infiniband/hw/cxgb3/iwch_cm.h | 2 +
drivers/infiniband/hw/cxgb3/iwch_provider.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_provider.h | 3 +
drivers/infiniband/hw/cxgb3/iwch_qp.c | 60 ++++-
drivers/infiniband/hw/ehca/ehca_classes.h | 5 +
drivers/infiniband/hw/ehca/ehca_cq.c | 11 +
drivers/infiniband/hw/ehca/ehca_eq.c | 35 ++--
drivers/infiniband/hw/ehca/ehca_main.c | 36 +++-
drivers/infiniband/hw/ehca/ehca_qp.c | 26 ++-
drivers/infiniband/hw/mlx4/cq.c | 2 +-
drivers/infiniband/hw/mthca/mthca_mr.c | 13 -
drivers/infiniband/hw/mthca/mthca_provider.c | 14 +-
drivers/infiniband/hw/mthca/mthca_provider.h | 1 +
drivers/infiniband/hw/mthca/mthca_user.h | 10 +-
drivers/infiniband/hw/nes/Kconfig | 1 +
drivers/infiniband/hw/nes/nes.c | 4 +
drivers/infiniband/hw/nes/nes.h | 5 +-
drivers/infiniband/hw/nes/nes_cm.c | 8 +-
drivers/infiniband/hw/nes/nes_hw.c | 371 ++++++++++++++++++++------
drivers/infiniband/hw/nes/nes_hw.h | 19 +-
drivers/infiniband/hw/nes/nes_nic.c | 180 ++++++++-----
drivers/infiniband/hw/nes/nes_utils.c | 10 +-
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 7 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 8 +-
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 45 ++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 3 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 39 ++-
drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 3 +
drivers/infiniband/ulp/iser/iscsi_iser.c | 4 +-
drivers/infiniband/ulp/iser/iscsi_iser.h | 7 +
drivers/infiniband/ulp/iser/iser_memory.c | 9 +-
drivers/net/cxgb3/version.h | 2 +-
drivers/net/mlx4/cq.c | 4 +-
drivers/net/mlx4/mr.c | 6 -
include/linux/mlx4/device.h | 3 +-
include/scsi/libiscsi.h | 1 +
44 files changed, 845 insertions(+), 327 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-04-22 1:26 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-04-22 1:26 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few fixes for various things, including one build fix
for the ipath driver:
Paul Bolle (1):
IB/ipath: Fix module parameter description for disable_sma
Roland Dreier (6):
RDMA/nes: Remove unneeded function declarations
IB/ipath: Remove reference to dev->class_dev
IB/ipath: Build IBA7220 code unconditionally
IB/ipath: Remove dependency on PCI_MSI || HT_IRQ
IB/ipath: Remove tests of PCI_MSI in ipath_iba7220.c
IB/ipath: Correct capitalization "IntX" -> "INTx"
drivers/infiniband/hw/ipath/Kconfig | 2 +-
drivers/infiniband/hw/ipath/Makefile | 6 ++++--
drivers/infiniband/hw/ipath/ipath_driver.c | 2 +-
drivers/infiniband/hw/ipath/ipath_iba7220.c | 23 +++++++++--------------
drivers/infiniband/hw/ipath/ipath_verbs.c | 3 +--
drivers/infiniband/hw/nes/nes.c | 6 ------
drivers/infiniband/hw/nes/nes_nic.c | 9 ---------
7 files changed, 16 insertions(+), 35 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2008-04-17 14:53 Roland Dreier
@ 2008-04-19 8:16 ` Ingo Molnar
0 siblings, 0 replies; 223+ messages in thread
From: Ingo Molnar @ 2008-04-19 8:16 UTC (permalink / raw)
To: Roland Dreier; +Cc: torvalds, akpm, general, linux-kernel
* Roland Dreier <rdreier@cisco.com> wrote:
> IB/ipath: Misc changes to prepare for IB7220 introduction
> IB/ipath: add calls to new 7220 code and enable in build
x86.git auto-testing found that these changes broke the -git build, with
this config:
http://redhat.com/~mingo/misc/config-Sat_Apr_19_09_55_05_CEST_2008.bad
the failure is a link failure:
drivers/built-in.o: In function `ipath_init_one':
ipath_driver.c:(.devinit.text+0x1e5bc): undefined reference to `ipath_init_iba7220_funcs'
disabling CONFIG_INFINIBAND_IPATH=y works this around.
Ingo
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-04-17 14:53 Roland Dreier
2008-04-19 8:16 ` Ingo Molnar
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2008-04-17 14:53 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the first batch of things queued for 2.6.26: sparse
cleanups, new HW support for the ipath driver, IPoIB updates, and
miscellaneous fixes all over.
Arthur Jones (7):
IB/ipath: Fix sparse warning about pointer signedness
IB/ipath: Misc sparse warning cleanup
IB/ipath: Provide I/O bus speeds for diagnostic purposes
IB/ipath: Fix link up LED display
IB/ipath: User mode send DMA header file
IB/ipath: User mode send DMA
IB/ipath: Misc changes to prepare for IB7220 introduction
Dave Olson (10):
IB/ipath: Make some constants chip-specific, related cleanup
IB/ipath: Shared context code needs to be sure device is usable
IB/ipath: Enable 4KB MTU
IB/ipath: HW workaround for case where chip can send but not receive
IB/ipath: Make link state transition code ignore (transient) link recovery
IB/ipath: Add support for IBTA 1.2 Heartbeat
IB/ipath: Set LID filtering for HCAs that support it.
IB/ipath: Enable reduced PIO update for HCAs that support it.
IB/ipath: Fix check for no interrupts to reliably fallback to INTx
IB/ipath: add calls to new 7220 code and enable in build
David Dillow (1):
IB/srp: Enforce protocol limit on srp_sg_tablesize
Dotan Barak (3):
IB/core: Check optional verbs before using them
IB/mthca: Update QP state if query QP succeeds
IB/mlx4: Update QP state if query QP succeeds
Eli Cohen (13):
IPoIB: Use checksum offload support if available
IB/mlx4: Add IPoIB checksum offload support
IB/mthca: Add IPoIB checksum offload support
IB/core: Add creation flags to struct ib_qp_init_attr
IB/core: Add IPoIB UD LSO support
IPoIB: Add LSO support
IB/mlx4: Add IPoIB LSO support
IPoIB: Add basic ethtool support
IB/core: Add support for modify CQ
IPoIB: Support modifying IPoIB CQ event moderation
IB/mlx4: Add support for modifying CQ moderation parameters
IB/mlx4: Fix race when detaching a QP from a multicast group
IB/mlx4: Fix incorrect comment
Erez Zilber (2):
IB/iser: Release connection resources on RDMA_CM_EVENT_DEVICE_REMOVAL event
IB/iser: Don't change itt endianness
Harvey Harrison (1):
IB: Replace remaining __FUNCTION__ occurrences with __func__
Hoang-Nam Nguyen (1):
IB/ehca: Remove tgid checking
Jack Morgenstein (3):
mlx4_core: Increase max number of QPs to 128K
IB/mthca: Update module version and release date
IB/mlx4: Update module version and release date
John Gregor (2):
IB/ipath: Head of Line blocking vs forward progress of user apps
IB/ipath: Add code for IBA7220 send DMA
Julia Lawall (1):
RDMA/iwcm: Test rdma_create_id() for IS_ERR rather than 0
Michael Albaugh (5):
IB/ipath: Prevent link-recovery code from negating admin disable
IB/ipath: EEPROM support for 7220 devices, robustness improvements, cleanup
IB/ipath: Allow old and new diagnostic packet formats
IB/ipath: Isolate 7220-specific content
IB/ipath: Support for SerDes portion of IBA7220
Ralph Campbell (18):
IB/ipath: Fix byte order of pioavail in handle_errors()
IB/ipath: Fix error recovery for send buffer status after chip freeze mode
IB/ipath: Don't try to handle freeze mode HW errors if diagnostic mode
IB/ipath: Make debug error message match the constraint that is checked for
IB/ipath: Add code to support multiple link speeds and widths
IB/ipath: Remove useless comments
IB/ipath: Fix sanity checks on QP number of WRs and SGEs
IB/ipath: Change the module author
IB/ipath: Remove some useless (void) casts
IB/ipath: Make send buffers available for kernel if not allocated to user
IB/ipath: Use PIO buffer for RC ACKs
IB/ipath: Fix some white space and code style issues
IB/ipath: Add support for 7220 receive queue changes
IB/ipath: Fix up error handling
IB/ipath: Header file changes to support IBA7220
IB/ipath: HCA-specific code to support IBA7220
IB/ipath: Add IBA7220-specific SERDES initialization data
IB/ipath: Update copyright dates for files changed in 2008
Robert P. J. Day (3):
IB: Use shorter list_splice_init() for brevity
RDMA/nes: Use more concise list_for_each_entry()
IB/ipath: Fix time comparison to use time_after_eq()
Roland Dreier (31):
IB/mthca: Formatting cleanups
IB/mlx4: Convert "if(foo)" to "if (foo)"
mlx4_core: Move opening brace of function onto a new line
RDMA/amso1100: Don't use 0UL as a NULL pointer
RDMA/cxgb3: IDR IDs are signed
IB: Make struct ib_uobject.id a signed int
IB/ipath: Fix sparse warning about shadowed symbol
IB/mlx4: Endianness annotations
IB/cm: Endianness annotations
RDMA/ucma: Endian annotation
RDMA/nes: Trivial endianness annotations
RDMA/nes: Delete unused variables
RDMA/amso1100: Start of endianness annotation
RDMA/amso1100: Endian annotate mqsq allocator
mlx4_core: Fix confusion between mlx4_event and mlx4_dev_event enums
IB/uverbs: Don't store struct file * for event files
IB/uverbs: Use alloc_file() instead of get_empty_filp()
RDMA/nes: Remove redundant NULL check in nes_unregister_ofa_device()
RDMA/nes: Remove unused nes_netdev_exit() function
RDMA/nes: Use proper format and cast to print dma_addr_t
RDMA/nes: Make symbols used only in a single source file static
IB/ehca: Make symbols used only in a single source file static
IB/mthca: Avoid integer overflow when dealing with profile size
IB/mthca: Avoid integer overflow when allocating huge ICM table
IB/ipath: Fix PCI config write size used to clear linkctrl error bits
RDMA/nes: Remove session_id from nes_cm stuff
IB/mlx4: Micro-optimize mlx4_ib_post_send()
IB/core: Add support for "send with invalidate" work requests
RDMA/amso1100: Add support for "send with invalidate" work requests
RDMA/nes: Free IRQ before killing tasklet
IPoIB: Handle case when P_Key is deleted and re-added at same index
Stefan Roscher (1):
IB/ehca: Support all ibv_devinfo values in query_device() and query_port()
Tom Tucker (1):
RDMA/amso1100: Add check for NULL reply_msg in c2_intr()
Vladimir Sokolovsky (1):
IB/mlx4: Add support for resizing CQs
drivers/infiniband/core/cm.c | 63 +-
drivers/infiniband/core/cma.c | 2 +-
drivers/infiniband/core/fmr_pool.c | 3 +-
drivers/infiniband/core/ucma.c | 2 +-
drivers/infiniband/core/uverbs.h | 4 +-
drivers/infiniband/core/uverbs_cmd.c | 14 +-
drivers/infiniband/core/uverbs_main.c | 28 +-
drivers/infiniband/core/verbs.c | 14 +-
drivers/infiniband/hw/amso1100/c2.c | 80 +-
drivers/infiniband/hw/amso1100/c2.h | 16 +-
drivers/infiniband/hw/amso1100/c2_ae.c | 10 +-
drivers/infiniband/hw/amso1100/c2_alloc.c | 12 +-
drivers/infiniband/hw/amso1100/c2_cq.c | 4 +-
drivers/infiniband/hw/amso1100/c2_intr.c | 6 +-
drivers/infiniband/hw/amso1100/c2_mm.c | 2 +-
drivers/infiniband/hw/amso1100/c2_mq.c | 4 +-
drivers/infiniband/hw/amso1100/c2_mq.h | 2 +-
drivers/infiniband/hw/amso1100/c2_provider.c | 85 +-
drivers/infiniband/hw/amso1100/c2_qp.c | 30 +-
drivers/infiniband/hw/amso1100/c2_rnic.c | 31 +-
drivers/infiniband/hw/amso1100/c2_vq.c | 2 +-
drivers/infiniband/hw/amso1100/c2_wr.h | 212 +-
drivers/infiniband/hw/cxgb3/cxio_dbg.c | 24 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 84 +-
drivers/infiniband/hw/cxgb3/cxio_resource.c | 12 +-
drivers/infiniband/hw/cxgb3/iwch.c | 6 +-
drivers/infiniband/hw/cxgb3/iwch.h | 2 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 166 +-
drivers/infiniband/hw/cxgb3/iwch_cm.h | 4 +-
drivers/infiniband/hw/cxgb3/iwch_cq.c | 4 +-
drivers/infiniband/hw/cxgb3/iwch_ev.c | 12 +-
drivers/infiniband/hw/cxgb3/iwch_mem.c | 6 +-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 79 +-
drivers/infiniband/hw/cxgb3/iwch_provider.h | 4 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 42 +-
drivers/infiniband/hw/ehca/ehca_av.c | 31 -
drivers/infiniband/hw/ehca/ehca_classes.h | 2 -
drivers/infiniband/hw/ehca/ehca_cq.c | 19 -
drivers/infiniband/hw/ehca/ehca_hca.c | 129 +-
drivers/infiniband/hw/ehca/ehca_main.c | 19 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 42 +-
drivers/infiniband/hw/ehca/ehca_pd.c | 11 -
drivers/infiniband/hw/ehca/ehca_qp.c | 51 +-
drivers/infiniband/hw/ehca/ehca_reqs.c | 2 +-
drivers/infiniband/hw/ehca/ehca_tools.h | 16 +-
drivers/infiniband/hw/ehca/ehca_uverbs.c | 19 -
drivers/infiniband/hw/ipath/Makefile | 3 +
drivers/infiniband/hw/ipath/ipath_7220.h | 57 +
drivers/infiniband/hw/ipath/ipath_common.h | 54 +-
drivers/infiniband/hw/ipath/ipath_debug.h | 2 +
drivers/infiniband/hw/ipath/ipath_diag.c | 35 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 1041 +++++++---
drivers/infiniband/hw/ipath/ipath_eeprom.c | 428 ++++-
drivers/infiniband/hw/ipath/ipath_file_ops.c | 176 ++-
drivers/infiniband/hw/ipath/ipath_iba6110.c | 51 +-
drivers/infiniband/hw/ipath/ipath_iba6120.c | 203 ++-
drivers/infiniband/hw/ipath/ipath_iba7220.c | 2571 ++++++++++++++++++++++++
drivers/infiniband/hw/ipath/ipath_init_chip.c | 312 ++--
drivers/infiniband/hw/ipath/ipath_intr.c | 656 ++++---
drivers/infiniband/hw/ipath/ipath_kernel.h | 304 +++-
drivers/infiniband/hw/ipath/ipath_mad.c | 110 +-
drivers/infiniband/hw/ipath/ipath_qp.c | 59 +-
drivers/infiniband/hw/ipath/ipath_rc.c | 67 +-
drivers/infiniband/hw/ipath/ipath_registers.h | 168 +-
drivers/infiniband/hw/ipath/ipath_ruc.c | 22 +-
drivers/infiniband/hw/ipath/ipath_sd7220.c | 1462 ++++++++++++++
drivers/infiniband/hw/ipath/ipath_sd7220_img.c | 1082 ++++++++++
drivers/infiniband/hw/ipath/ipath_sdma.c | 790 ++++++++
drivers/infiniband/hw/ipath/ipath_srq.c | 5 +-
drivers/infiniband/hw/ipath/ipath_stats.c | 33 +-
drivers/infiniband/hw/ipath/ipath_sysfs.c | 104 +-
drivers/infiniband/hw/ipath/ipath_uc.c | 8 +-
drivers/infiniband/hw/ipath/ipath_ud.c | 7 +-
drivers/infiniband/hw/ipath/ipath_user_sdma.c | 879 ++++++++
drivers/infiniband/hw/ipath/ipath_user_sdma.h | 54 +
drivers/infiniband/hw/ipath/ipath_verbs.c | 413 ++++-
drivers/infiniband/hw/ipath/ipath_verbs.h | 32 +-
drivers/infiniband/hw/mlx4/cq.c | 319 +++-
drivers/infiniband/hw/mlx4/mad.c | 2 +-
drivers/infiniband/hw/mlx4/main.c | 25 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 15 +
drivers/infiniband/hw/mlx4/qp.c | 117 +-
drivers/infiniband/hw/mthca/mthca_cmd.c | 6 +-
drivers/infiniband/hw/mthca/mthca_cmd.h | 1 +
drivers/infiniband/hw/mthca/mthca_cq.c | 14 +-
drivers/infiniband/hw/mthca/mthca_dev.h | 14 +-
drivers/infiniband/hw/mthca/mthca_eq.c | 4 +-
drivers/infiniband/hw/mthca/mthca_mad.c | 2 +-
drivers/infiniband/hw/mthca/mthca_main.c | 15 +-
drivers/infiniband/hw/mthca/mthca_memfree.c | 6 +-
drivers/infiniband/hw/mthca/mthca_profile.c | 4 +-
drivers/infiniband/hw/mthca/mthca_profile.h | 2 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 5 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 28 +-
drivers/infiniband/hw/mthca/mthca_wqe.h | 16 +-
drivers/infiniband/hw/nes/nes.c | 15 +-
drivers/infiniband/hw/nes/nes.h | 32 +-
drivers/infiniband/hw/nes/nes_cm.c | 131 +-
drivers/infiniband/hw/nes/nes_cm.h | 35 -
drivers/infiniband/hw/nes/nes_hw.c | 49 +-
drivers/infiniband/hw/nes/nes_nic.c | 26 +-
drivers/infiniband/hw/nes/nes_utils.c | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 29 +-
drivers/infiniband/ulp/ipoib/Makefile | 3 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 10 +
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 15 +-
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 99 +
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 126 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 33 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 3 +
drivers/infiniband/ulp/iser/iser_initiator.c | 4 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 5 +-
drivers/infiniband/ulp/srp/ib_srp.c | 7 +-
drivers/net/mlx4/catas.c | 2 +-
drivers/net/mlx4/cmd.c | 3 +-
drivers/net/mlx4/cq.c | 72 +-
drivers/net/mlx4/eq.c | 5 +-
drivers/net/mlx4/fw.c | 13 +
drivers/net/mlx4/fw.h | 1 +
drivers/net/mlx4/intf.c | 8 +-
drivers/net/mlx4/main.c | 6 +-
drivers/net/mlx4/mcg.c | 12 +-
drivers/net/mlx4/mlx4.h | 4 +-
include/linux/mlx4/cmd.h | 2 +-
include/linux/mlx4/cq.h | 19 +-
include/linux/mlx4/device.h | 1 +
include/linux/mlx4/driver.h | 3 +-
include/linux/mlx4/qp.h | 15 +-
include/rdma/ib_user_verbs.h | 5 +-
include/rdma/ib_verbs.h | 35 +-
net/sunrpc/xprtrdma/verbs.c | 1 -
131 files changed, 11739 insertions(+), 2287 deletions(-)
create mode 100644 drivers/infiniband/hw/ipath/ipath_7220.h
create mode 100644 drivers/infiniband/hw/ipath/ipath_iba7220.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_sd7220.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_sd7220_img.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_sdma.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_user_sdma.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_user_sdma.h
create mode 100644 drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-03-21 21:02 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-03-21 21:02 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Chien Tung (1):
RDMA/nes: Fix MSS calculation on RDMA path
drivers/infiniband/hw/nes/nes_cm.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index 39adb26..0bef878 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -40,6 +40,7 @@
#include <linux/tcp.h>
#include <linux/init.h>
#include <linux/if_arp.h>
+#include <linux/if_vlan.h>
#include <linux/notifier.h>
#include <linux/net.h>
#include <linux/types.h>
@@ -1072,7 +1073,7 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core,
ts = current_kernel_time();
cm_node->tcp_cntxt.loc_seq_num = htonl(ts.tv_nsec);
cm_node->tcp_cntxt.mss = nesvnic->max_frame_size - sizeof(struct iphdr) -
- sizeof(struct tcphdr) - ETH_HLEN;
+ sizeof(struct tcphdr) - ETH_HLEN - VLAN_HLEN;
cm_node->tcp_cntxt.rcv_nxt = 0;
/* get a unique session ID , add thread_id to an upcounter to handle race */
atomic_inc(&cm_core->node_cnt);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-03-13 20:15 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-03-13 20:15 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get some more small post-2.6.25-rc5 fixes, mostly to the
ipath driver but some to IP-over-IB also:
Or Gerlitz (1):
IPoIB: Don't drop multicast sends when they can be queued
Patrick Marchand Latifi (4):
IB/ipath: Fix potentially wrong RNR retry counter returned in ipath_query_qp()
IB/ipath: Fix RC QP initialization
IB/ipath: Fix error completion put on send CQ instead of recv CQ
IB/ipath: Reset the retry counter for RDMA_READ_RESPONSE_MIDDLE packets
Ralph Campbell (1):
IB/ipath: Fix IB compliance problems with link state vs physical state
Roland Dreier (2):
IPoIB/cm: Set tx_wr.num_sge in connected mode post_send()
IPoIB: Allocate priv->tx_ring with vmalloc()
drivers/infiniband/hw/ipath/ipath_common.h | 2 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 28 ++++++++++-------------
drivers/infiniband/hw/ipath/ipath_kernel.h | 1 +
drivers/infiniband/hw/ipath/ipath_mad.c | 7 ++---
drivers/infiniband/hw/ipath/ipath_qp.c | 13 ++++++-----
drivers/infiniband/hw/ipath/ipath_rc.c | 4 +++
drivers/infiniband/hw/ipath/ipath_registers.h | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 9 +++++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 9 ++++---
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 2 +-
10 files changed, 41 insertions(+), 36 deletions(-)
diff --git a/drivers/infiniband/hw/ipath/ipath_common.h b/drivers/infiniband/hw/ipath/ipath_common.h
index 4146210..591901a 100644
--- a/drivers/infiniband/hw/ipath/ipath_common.h
+++ b/drivers/infiniband/hw/ipath/ipath_common.h
@@ -75,7 +75,7 @@
#define IPATH_IB_LINKDOWN 0
#define IPATH_IB_LINKARM 1
#define IPATH_IB_LINKACTIVE 2
-#define IPATH_IB_LINKINIT 3
+#define IPATH_IB_LINKDOWN_ONLY 3
#define IPATH_IB_LINKDOWN_SLEEP 4
#define IPATH_IB_LINKDOWN_DISABLE 5
#define IPATH_IB_LINK_LOOPBACK 6 /* enable local loopback */
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index d5ff6ca..ca4d0ac 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -851,8 +851,7 @@ void ipath_disarm_piobufs(struct ipath_devdata *dd, unsigned first,
* -ETIMEDOUT state can have multiple states set, for any of several
* transitions.
*/
-static int ipath_wait_linkstate(struct ipath_devdata *dd, u32 state,
- int msecs)
+int ipath_wait_linkstate(struct ipath_devdata *dd, u32 state, int msecs)
{
dd->ipath_state_wanted = state;
wait_event_interruptible_timeout(ipath_state_wait,
@@ -1656,8 +1655,8 @@ void ipath_cancel_sends(struct ipath_devdata *dd, int restore_sendctrl)
static void ipath_set_ib_lstate(struct ipath_devdata *dd, int which)
{
static const char *what[4] = {
- [0] = "DOWN",
- [INFINIPATH_IBCC_LINKCMD_INIT] = "INIT",
+ [0] = "NOP",
+ [INFINIPATH_IBCC_LINKCMD_DOWN] = "DOWN",
[INFINIPATH_IBCC_LINKCMD_ARMED] = "ARMED",
[INFINIPATH_IBCC_LINKCMD_ACTIVE] = "ACTIVE"
};
@@ -1672,9 +1671,9 @@ static void ipath_set_ib_lstate(struct ipath_devdata *dd, int which)
(dd, dd->ipath_kregs->kr_ibcstatus) >>
INFINIPATH_IBCS_LINKTRAININGSTATE_SHIFT) &
INFINIPATH_IBCS_LINKTRAININGSTATE_MASK]);
- /* flush all queued sends when going to DOWN or INIT, to be sure that
+ /* flush all queued sends when going to DOWN to be sure that
* they don't block MAD packets */
- if (!linkcmd || linkcmd == INFINIPATH_IBCC_LINKCMD_INIT)
+ if (linkcmd == INFINIPATH_IBCC_LINKCMD_DOWN)
ipath_cancel_sends(dd, 1);
ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl,
@@ -1687,6 +1686,13 @@ int ipath_set_linkstate(struct ipath_devdata *dd, u8 newstate)
int ret;
switch (newstate) {
+ case IPATH_IB_LINKDOWN_ONLY:
+ ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKCMD_DOWN <<
+ INFINIPATH_IBCC_LINKCMD_SHIFT);
+ /* don't wait */
+ ret = 0;
+ goto bail;
+
case IPATH_IB_LINKDOWN:
ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKINITCMD_POLL <<
INFINIPATH_IBCC_LINKINITCMD_SHIFT);
@@ -1709,16 +1715,6 @@ int ipath_set_linkstate(struct ipath_devdata *dd, u8 newstate)
ret = 0;
goto bail;
- case IPATH_IB_LINKINIT:
- if (dd->ipath_flags & IPATH_LINKINIT) {
- ret = 0;
- goto bail;
- }
- ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKCMD_INIT <<
- INFINIPATH_IBCC_LINKCMD_SHIFT);
- lstate = IPATH_LINKINIT;
- break;
-
case IPATH_IB_LINKARM:
if (dd->ipath_flags & IPATH_LINKARMED) {
ret = 0;
diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h
index 4cc0f95..ecf3f7f 100644
--- a/drivers/infiniband/hw/ipath/ipath_kernel.h
+++ b/drivers/infiniband/hw/ipath/ipath_kernel.h
@@ -767,6 +767,7 @@ void ipath_kreceive(struct ipath_portdata *);
int ipath_setrcvhdrsize(struct ipath_devdata *, unsigned);
int ipath_reset_device(int);
void ipath_get_faststats(unsigned long);
+int ipath_wait_linkstate(struct ipath_devdata *, u32, int);
int ipath_set_linkstate(struct ipath_devdata *, u8);
int ipath_set_mtu(struct ipath_devdata *, u16);
int ipath_set_lid(struct ipath_devdata *, u32, u8);
diff --git a/drivers/infiniband/hw/ipath/ipath_mad.c b/drivers/infiniband/hw/ipath/ipath_mad.c
index d98d5f1..b34b91d 100644
--- a/drivers/infiniband/hw/ipath/ipath_mad.c
+++ b/drivers/infiniband/hw/ipath/ipath_mad.c
@@ -555,10 +555,7 @@ static int recv_subn_set_portinfo(struct ib_smp *smp,
/* FALLTHROUGH */
case IB_PORT_DOWN:
if (lstate == 0)
- if (get_linkdowndefaultstate(dd))
- lstate = IPATH_IB_LINKDOWN_SLEEP;
- else
- lstate = IPATH_IB_LINKDOWN;
+ lstate = IPATH_IB_LINKDOWN_ONLY;
else if (lstate == 1)
lstate = IPATH_IB_LINKDOWN_SLEEP;
else if (lstate == 2)
@@ -568,6 +565,8 @@ static int recv_subn_set_portinfo(struct ib_smp *smp,
else
goto err;
ipath_set_linkstate(dd, lstate);
+ ipath_wait_linkstate(dd, IPATH_LINKINIT | IPATH_LINKARMED |
+ IPATH_LINKACTIVE, 1000);
break;
case IB_PORT_ARMED:
ipath_set_linkstate(dd, IPATH_IB_LINKARM);
diff --git a/drivers/infiniband/hw/ipath/ipath_qp.c b/drivers/infiniband/hw/ipath/ipath_qp.c
index 80dc623..087ed31 100644
--- a/drivers/infiniband/hw/ipath/ipath_qp.c
+++ b/drivers/infiniband/hw/ipath/ipath_qp.c
@@ -329,8 +329,9 @@ struct ipath_qp *ipath_lookup_qpn(struct ipath_qp_table *qpt, u32 qpn)
/**
* ipath_reset_qp - initialize the QP state to the reset state
* @qp: the QP to reset
+ * @type: the QP type
*/
-static void ipath_reset_qp(struct ipath_qp *qp)
+static void ipath_reset_qp(struct ipath_qp *qp, enum ib_qp_type type)
{
qp->remote_qpn = 0;
qp->qkey = 0;
@@ -342,7 +343,7 @@ static void ipath_reset_qp(struct ipath_qp *qp)
qp->s_psn = 0;
qp->r_psn = 0;
qp->r_msn = 0;
- if (qp->ibqp.qp_type == IB_QPT_RC) {
+ if (type == IB_QPT_RC) {
qp->s_state = IB_OPCODE_RC_SEND_LAST;
qp->r_state = IB_OPCODE_RC_SEND_LAST;
} else {
@@ -414,7 +415,7 @@ int ipath_error_qp(struct ipath_qp *qp, enum ib_wc_status err)
wc.wr_id = qp->r_wr_id;
wc.opcode = IB_WC_RECV;
wc.status = err;
- ipath_cq_enter(to_icq(qp->ibqp.send_cq), &wc, 1);
+ ipath_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, 1);
}
wc.status = IB_WC_WR_FLUSH_ERR;
@@ -534,7 +535,7 @@ int ipath_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
switch (new_state) {
case IB_QPS_RESET:
- ipath_reset_qp(qp);
+ ipath_reset_qp(qp, ibqp->qp_type);
break;
case IB_QPS_ERR:
@@ -647,7 +648,7 @@ int ipath_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
attr->port_num = 1;
attr->timeout = qp->timeout;
attr->retry_cnt = qp->s_retry_cnt;
- attr->rnr_retry = qp->s_rnr_retry;
+ attr->rnr_retry = qp->s_rnr_retry_cnt;
attr->alt_port_num = 0;
attr->alt_timeout = 0;
@@ -839,7 +840,7 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
goto bail_qp;
}
qp->ip = NULL;
- ipath_reset_qp(qp);
+ ipath_reset_qp(qp, init_attr->qp_type);
break;
default:
diff --git a/drivers/infiniband/hw/ipath/ipath_rc.c b/drivers/infiniband/hw/ipath/ipath_rc.c
index 459e46e..40f3e37 100644
--- a/drivers/infiniband/hw/ipath/ipath_rc.c
+++ b/drivers/infiniband/hw/ipath/ipath_rc.c
@@ -1196,6 +1196,10 @@ static inline void ipath_rc_rcv_resp(struct ipath_ibdev *dev,
list_move_tail(&qp->timerwait,
&dev->pending[dev->pending_index]);
spin_unlock(&dev->pending_lock);
+
+ if (opcode == OP(RDMA_READ_RESPONSE_MIDDLE))
+ qp->s_retry = qp->s_retry_cnt;
+
/*
* Update the RDMA receive state but do the copy w/o
* holding the locks and blocking interrupts.
diff --git a/drivers/infiniband/hw/ipath/ipath_registers.h b/drivers/infiniband/hw/ipath/ipath_registers.h
index 6d2a17f..92ad73a 100644
--- a/drivers/infiniband/hw/ipath/ipath_registers.h
+++ b/drivers/infiniband/hw/ipath/ipath_registers.h
@@ -185,7 +185,7 @@
#define INFINIPATH_IBCC_LINKINITCMD_SLEEP 3
#define INFINIPATH_IBCC_LINKINITCMD_SHIFT 16
#define INFINIPATH_IBCC_LINKCMD_MASK 0x3ULL
-#define INFINIPATH_IBCC_LINKCMD_INIT 1 /* move to 0x11 */
+#define INFINIPATH_IBCC_LINKCMD_DOWN 1 /* move to 0x11 */
#define INFINIPATH_IBCC_LINKCMD_ARMED 2 /* move to 0x21 */
#define INFINIPATH_IBCC_LINKCMD_ACTIVE 3 /* move to 0x31 */
#define INFINIPATH_IBCC_LINKCMD_SHIFT 18
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 52b1beb..2490b2d 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -38,6 +38,7 @@
#include <net/icmp.h>
#include <linux/icmpv6.h>
#include <linux/delay.h>
+#include <linux/vmalloc.h>
#include "ipoib.h"
@@ -637,6 +638,7 @@ static inline int post_send(struct ipoib_dev_priv *priv,
priv->tx_sge[0].addr = addr;
priv->tx_sge[0].length = len;
+ priv->tx_wr.num_sge = 1;
priv->tx_wr.wr_id = wr_id | IPOIB_OP_CM;
return ib_post_send(tx->qp, &priv->tx_wr, &bad_wr);
@@ -1030,13 +1032,13 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn,
struct ipoib_dev_priv *priv = netdev_priv(p->dev);
int ret;
- p->tx_ring = kzalloc(ipoib_sendq_size * sizeof *p->tx_ring,
- GFP_KERNEL);
+ p->tx_ring = vmalloc(ipoib_sendq_size * sizeof *p->tx_ring);
if (!p->tx_ring) {
ipoib_warn(priv, "failed to allocate tx ring\n");
ret = -ENOMEM;
goto err_tx;
}
+ memset(p->tx_ring, 0, ipoib_sendq_size * sizeof *p->tx_ring);
p->qp = ipoib_cm_create_tx_qp(p->dev, p);
if (IS_ERR(p->qp)) {
@@ -1077,6 +1079,7 @@ err_id:
ib_destroy_qp(p->qp);
err_qp:
p->qp = NULL;
+ vfree(p->tx_ring);
err_tx:
return ret;
}
@@ -1127,7 +1130,7 @@ timeout:
if (p->qp)
ib_destroy_qp(p->qp);
- kfree(p->tx_ring);
+ vfree(p->tx_ring);
kfree(p);
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index f96477a..5728204 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -41,6 +41,7 @@
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/kernel.h>
+#include <linux/vmalloc.h>
#include <linux/if_arp.h> /* For ARPHRD_xxx */
@@ -887,13 +888,13 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
goto out;
}
- priv->tx_ring = kzalloc(ipoib_sendq_size * sizeof *priv->tx_ring,
- GFP_KERNEL);
+ priv->tx_ring = vmalloc(ipoib_sendq_size * sizeof *priv->tx_ring);
if (!priv->tx_ring) {
printk(KERN_WARNING "%s: failed to allocate TX ring (%d entries)\n",
ca->name, ipoib_sendq_size);
goto out_rx_ring_cleanup;
}
+ memset(priv->tx_ring, 0, ipoib_sendq_size * sizeof *priv->tx_ring);
/* priv->tx_head, tx_tail & tx_outstanding are already 0 */
@@ -903,7 +904,7 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
return 0;
out_tx_ring_cleanup:
- kfree(priv->tx_ring);
+ vfree(priv->tx_ring);
out_rx_ring_cleanup:
kfree(priv->rx_ring);
@@ -928,7 +929,7 @@ void ipoib_dev_cleanup(struct net_device *dev)
ipoib_ib_dev_cleanup(dev);
kfree(priv->rx_ring);
- kfree(priv->tx_ring);
+ vfree(priv->tx_ring);
priv->rx_ring = NULL;
priv->tx_ring = NULL;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index 2628339..31a53c5 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -650,7 +650,7 @@ void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb)
*/
spin_lock(&priv->lock);
- if (!test_bit(IPOIB_MCAST_STARTED, &priv->flags) ||
+ if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags) ||
!priv->broadcast ||
!test_bit(IPOIB_MCAST_FLAG_ATTACHED, &priv->broadcast->flags)) {
++dev->stats.tx_dropped;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-03-11 4:33 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-03-11 4:33 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get some more small post-2.6.25-rc5 fixes:
Arne Redlich (2):
IB/iser: Fix list iteration bug
IB/iser: Handle iser_device allocation error gracefully
Arthur Jones (1):
MAINTAINERS: update ipath owner
Jon Mason (2):
RDMA/cxgb3: Return correct max_inline_data when creating a QP
RDMA/cxgb3: Fix iwch_create_cq() off-by-one error
Pete Wyckoff (2):
Revert "IB/fmr_pool: ib_fmr_pool_flush() should flush all dirty FMRs"
IB/fmr_pool: Flush all dirty FMRs from ib_fmr_pool_flush()
Sean Hefty (1):
IB/cm: Flush workqueue when removing device
Steve Wise (1):
RDMA/iwcm: Don't access a cm_id after dropping reference
MAINTAINERS | 2 +-
drivers/infiniband/core/cm.c | 3 +-
drivers/infiniband/core/fmr_pool.c | 38 ++++++++++++---------
drivers/infiniband/core/iwcm.c | 5 ++-
drivers/infiniband/hw/cxgb3/iwch_provider.c | 5 ++-
drivers/infiniband/ulp/iser/iser_verbs.c | 47 ++++++++++++++-------------
6 files changed, 56 insertions(+), 44 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index fed09b5..f229e16 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2143,7 +2143,7 @@ L: netdev@vger.kernel.org
S: Maintained
IPATH DRIVER:
-P: Arthur Jones
+P: Ralph Campbell
M: infinipath@qlogic.com
L: general@lists.openfabrics.org
T: git git://git.qlogic.com/ipath-linux-2.6
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index b10ade9..4df4051 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -3759,6 +3759,7 @@ static void cm_remove_one(struct ib_device *device)
port = cm_dev->port[i-1];
ib_modify_port(device, port->port_num, 0, &port_modify);
ib_unregister_mad_agent(port->mad_agent);
+ flush_workqueue(cm.wq);
cm_remove_port_fs(port);
}
kobject_put(&cm_dev->dev_obj);
@@ -3813,6 +3814,7 @@ static void __exit ib_cm_cleanup(void)
cancel_delayed_work(&timewait_info->work.work);
spin_unlock_irq(&cm.lock);
+ ib_unregister_client(&cm_client);
destroy_workqueue(cm.wq);
list_for_each_entry_safe(timewait_info, tmp, &cm.timewait_list, list) {
@@ -3820,7 +3822,6 @@ static void __exit ib_cm_cleanup(void)
kfree(timewait_info);
}
- ib_unregister_client(&cm_client);
class_unregister(&cm_class);
idr_destroy(&cm.local_id_table);
}
diff --git a/drivers/infiniband/core/fmr_pool.c b/drivers/infiniband/core/fmr_pool.c
index 7f00347..06d502c 100644
--- a/drivers/infiniband/core/fmr_pool.c
+++ b/drivers/infiniband/core/fmr_pool.c
@@ -139,7 +139,7 @@ static inline struct ib_pool_fmr *ib_fmr_cache_lookup(struct ib_fmr_pool *pool,
static void ib_fmr_batch_release(struct ib_fmr_pool *pool)
{
int ret;
- struct ib_pool_fmr *fmr, *next;
+ struct ib_pool_fmr *fmr;
LIST_HEAD(unmap_list);
LIST_HEAD(fmr_list);
@@ -158,20 +158,6 @@ static void ib_fmr_batch_release(struct ib_fmr_pool *pool)
#endif
}
- /*
- * The free_list may hold FMRs that have been put there
- * because they haven't reached the max_remap count.
- * Invalidate their mapping as well.
- */
- list_for_each_entry_safe(fmr, next, &pool->free_list, list) {
- if (fmr->remap_count == 0)
- continue;
- hlist_del_init(&fmr->cache_node);
- fmr->remap_count = 0;
- list_add_tail(&fmr->fmr->list, &fmr_list);
- list_move(&fmr->list, &unmap_list);
- }
-
list_splice(&pool->dirty_list, &unmap_list);
INIT_LIST_HEAD(&pool->dirty_list);
pool->dirty_len = 0;
@@ -384,6 +370,11 @@ void ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
i = 0;
list_for_each_entry_safe(fmr, tmp, &pool->free_list, list) {
+ if (fmr->remap_count) {
+ INIT_LIST_HEAD(&fmr_list);
+ list_add_tail(&fmr->fmr->list, &fmr_list);
+ ib_unmap_fmr(&fmr_list);
+ }
ib_dealloc_fmr(fmr->fmr);
list_del(&fmr->list);
kfree(fmr);
@@ -407,8 +398,23 @@ EXPORT_SYMBOL(ib_destroy_fmr_pool);
*/
int ib_flush_fmr_pool(struct ib_fmr_pool *pool)
{
- int serial = atomic_inc_return(&pool->req_ser);
+ int serial;
+ struct ib_pool_fmr *fmr, *next;
+
+ /*
+ * The free_list holds FMRs that may have been used
+ * but have not been remapped enough times to be dirty.
+ * Put them on the dirty list now so that the cleanup
+ * thread will reap them too.
+ */
+ spin_lock_irq(&pool->pool_lock);
+ list_for_each_entry_safe(fmr, next, &pool->free_list, list) {
+ if (fmr->remap_count > 0)
+ list_move(&fmr->list, &pool->dirty_list);
+ }
+ spin_unlock_irq(&pool->pool_lock);
+ serial = atomic_inc_return(&pool->req_ser);
wake_up_process(pool->thread);
if (wait_event_interruptible(pool->force_wait,
diff --git a/drivers/infiniband/core/iwcm.c b/drivers/infiniband/core/iwcm.c
index 223b1aa..81c9195 100644
--- a/drivers/infiniband/core/iwcm.c
+++ b/drivers/infiniband/core/iwcm.c
@@ -839,6 +839,7 @@ static void cm_work_handler(struct work_struct *_work)
unsigned long flags;
int empty;
int ret = 0;
+ int destroy_id;
spin_lock_irqsave(&cm_id_priv->lock, flags);
empty = list_empty(&cm_id_priv->work_list);
@@ -857,9 +858,9 @@ static void cm_work_handler(struct work_struct *_work)
destroy_cm_id(&cm_id_priv->id);
}
BUG_ON(atomic_read(&cm_id_priv->refcount)==0);
+ destroy_id = test_bit(IWCM_F_CALLBACK_DESTROY, &cm_id_priv->flags);
if (iwcm_deref_id(cm_id_priv)) {
- if (test_bit(IWCM_F_CALLBACK_DESTROY,
- &cm_id_priv->flags)) {
+ if (destroy_id) {
BUG_ON(!list_empty(&cm_id_priv->work_list));
free_cm_id(cm_id_priv);
}
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index df1838f..b2ea921 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -189,7 +189,7 @@ static struct ib_cq *iwch_create_cq(struct ib_device *ibdev, int entries, int ve
return ERR_PTR(-ENOMEM);
}
chp->rhp = rhp;
- chp->ibcq.cqe = (1 << chp->cq.size_log2) - 1;
+ chp->ibcq.cqe = 1 << chp->cq.size_log2;
spin_lock_init(&chp->lock);
atomic_set(&chp->refcnt, 1);
init_waitqueue_head(&chp->wait);
@@ -819,8 +819,11 @@ static struct ib_qp *iwch_create_qp(struct ib_pd *pd,
kfree(qhp);
return ERR_PTR(-ENOMEM);
}
+
attrs->cap.max_recv_wr = rqsize - 1;
attrs->cap.max_send_wr = sqsize;
+ attrs->cap.max_inline_data = T3_MAX_INLINE;
+
qhp->rhp = rhp;
qhp->attr.pd = php->pdid;
qhp->attr.scq = ((struct iwch_cq *) attrs->send_cq)->cq.cqid;
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
index 714b8db..993f0a8 100644
--- a/drivers/infiniband/ulp/iser/iser_verbs.c
+++ b/drivers/infiniband/ulp/iser/iser_verbs.c
@@ -237,36 +237,32 @@ static int iser_free_ib_conn_res(struct iser_conn *ib_conn)
static
struct iser_device *iser_device_find_by_ib_device(struct rdma_cm_id *cma_id)
{
- struct list_head *p_list;
- struct iser_device *device = NULL;
+ struct iser_device *device;
mutex_lock(&ig.device_list_mutex);
- p_list = ig.device_list.next;
- while (p_list != &ig.device_list) {
- device = list_entry(p_list, struct iser_device, ig_list);
+ list_for_each_entry(device, &ig.device_list, ig_list)
/* find if there's a match using the node GUID */
if (device->ib_device->node_guid == cma_id->device->node_guid)
- break;
- }
+ goto inc_refcnt;
- if (device == NULL) {
- device = kzalloc(sizeof *device, GFP_KERNEL);
- if (device == NULL)
- goto out;
- /* assign this device to the device */
- device->ib_device = cma_id->device;
- /* init the device and link it into ig device list */
- if (iser_create_device_ib_res(device)) {
- kfree(device);
- device = NULL;
- goto out;
- }
- list_add(&device->ig_list, &ig.device_list);
+ device = kzalloc(sizeof *device, GFP_KERNEL);
+ if (device == NULL)
+ goto out;
+
+ /* assign this device to the device */
+ device->ib_device = cma_id->device;
+ /* init the device and link it into ig device list */
+ if (iser_create_device_ib_res(device)) {
+ kfree(device);
+ device = NULL;
+ goto out;
}
-out:
- BUG_ON(device == NULL);
+ list_add(&device->ig_list, &ig.device_list);
+
+inc_refcnt:
device->refcount++;
+out:
mutex_unlock(&ig.device_list_mutex);
return device;
}
@@ -372,6 +368,12 @@ static void iser_addr_handler(struct rdma_cm_id *cma_id)
int ret;
device = iser_device_find_by_ib_device(cma_id);
+ if (!device) {
+ iser_err("device lookup/creation failed\n");
+ iser_connect_error(cma_id);
+ return;
+ }
+
ib_conn = (struct iser_conn *)cma_id->context;
ib_conn->device = device;
@@ -380,7 +382,6 @@ static void iser_addr_handler(struct rdma_cm_id *cma_id)
iser_err("resolve route failed: %d\n", ret);
iser_connect_error(cma_id);
}
- return;
}
static void iser_route_handler(struct rdma_cm_id *cma_id)
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-02-29 22:06 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-02-29 22:06 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get some more small post-2.6.25-rc3 fixes:
Arthur Jones (1):
MAINTAINERS: update ipath owner
Jon Mason (1):
RDMA/cxgb3: Return correct max_inline_data when creating a QP
Pete Wyckoff (2):
Revert "IB/fmr_pool: ib_fmr_pool_flush() should flush all dirty FMRs"
IB/fmr_pool: Flush all dirty FMRs from ib_fmr_pool_flush()
Sean Hefty (1):
IB/cm: Flush workqueue when removing device
MAINTAINERS | 2 +-
drivers/infiniband/core/cm.c | 3 +-
drivers/infiniband/core/fmr_pool.c | 38 +++++++++++++++-----------
drivers/infiniband/hw/cxgb3/iwch_provider.c | 3 ++
4 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index fed09b5..f229e16 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2143,7 +2143,7 @@ L: netdev@vger.kernel.org
S: Maintained
IPATH DRIVER:
-P: Arthur Jones
+P: Ralph Campbell
M: infinipath@qlogic.com
L: general@lists.openfabrics.org
T: git git://git.qlogic.com/ipath-linux-2.6
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index b10ade9..4df4051 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -3759,6 +3759,7 @@ static void cm_remove_one(struct ib_device *device)
port = cm_dev->port[i-1];
ib_modify_port(device, port->port_num, 0, &port_modify);
ib_unregister_mad_agent(port->mad_agent);
+ flush_workqueue(cm.wq);
cm_remove_port_fs(port);
}
kobject_put(&cm_dev->dev_obj);
@@ -3813,6 +3814,7 @@ static void __exit ib_cm_cleanup(void)
cancel_delayed_work(&timewait_info->work.work);
spin_unlock_irq(&cm.lock);
+ ib_unregister_client(&cm_client);
destroy_workqueue(cm.wq);
list_for_each_entry_safe(timewait_info, tmp, &cm.timewait_list, list) {
@@ -3820,7 +3822,6 @@ static void __exit ib_cm_cleanup(void)
kfree(timewait_info);
}
- ib_unregister_client(&cm_client);
class_unregister(&cm_class);
idr_destroy(&cm.local_id_table);
}
diff --git a/drivers/infiniband/core/fmr_pool.c b/drivers/infiniband/core/fmr_pool.c
index 7f00347..06d502c 100644
--- a/drivers/infiniband/core/fmr_pool.c
+++ b/drivers/infiniband/core/fmr_pool.c
@@ -139,7 +139,7 @@ static inline struct ib_pool_fmr *ib_fmr_cache_lookup(struct ib_fmr_pool *pool,
static void ib_fmr_batch_release(struct ib_fmr_pool *pool)
{
int ret;
- struct ib_pool_fmr *fmr, *next;
+ struct ib_pool_fmr *fmr;
LIST_HEAD(unmap_list);
LIST_HEAD(fmr_list);
@@ -158,20 +158,6 @@ static void ib_fmr_batch_release(struct ib_fmr_pool *pool)
#endif
}
- /*
- * The free_list may hold FMRs that have been put there
- * because they haven't reached the max_remap count.
- * Invalidate their mapping as well.
- */
- list_for_each_entry_safe(fmr, next, &pool->free_list, list) {
- if (fmr->remap_count == 0)
- continue;
- hlist_del_init(&fmr->cache_node);
- fmr->remap_count = 0;
- list_add_tail(&fmr->fmr->list, &fmr_list);
- list_move(&fmr->list, &unmap_list);
- }
-
list_splice(&pool->dirty_list, &unmap_list);
INIT_LIST_HEAD(&pool->dirty_list);
pool->dirty_len = 0;
@@ -384,6 +370,11 @@ void ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
i = 0;
list_for_each_entry_safe(fmr, tmp, &pool->free_list, list) {
+ if (fmr->remap_count) {
+ INIT_LIST_HEAD(&fmr_list);
+ list_add_tail(&fmr->fmr->list, &fmr_list);
+ ib_unmap_fmr(&fmr_list);
+ }
ib_dealloc_fmr(fmr->fmr);
list_del(&fmr->list);
kfree(fmr);
@@ -407,8 +398,23 @@ EXPORT_SYMBOL(ib_destroy_fmr_pool);
*/
int ib_flush_fmr_pool(struct ib_fmr_pool *pool)
{
- int serial = atomic_inc_return(&pool->req_ser);
+ int serial;
+ struct ib_pool_fmr *fmr, *next;
+
+ /*
+ * The free_list holds FMRs that may have been used
+ * but have not been remapped enough times to be dirty.
+ * Put them on the dirty list now so that the cleanup
+ * thread will reap them too.
+ */
+ spin_lock_irq(&pool->pool_lock);
+ list_for_each_entry_safe(fmr, next, &pool->free_list, list) {
+ if (fmr->remap_count > 0)
+ list_move(&fmr->list, &pool->dirty_list);
+ }
+ spin_unlock_irq(&pool->pool_lock);
+ serial = atomic_inc_return(&pool->req_ser);
wake_up_process(pool->thread);
if (wait_event_interruptible(pool->force_wait,
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index df1838f..ee3d63c 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -819,8 +819,11 @@ static struct ib_qp *iwch_create_qp(struct ib_pd *pd,
kfree(qhp);
return ERR_PTR(-ENOMEM);
}
+
attrs->cap.max_recv_wr = rqsize - 1;
attrs->cap.max_send_wr = sqsize;
+ attrs->cap.max_inline_data = T3_MAX_INLINE;
+
qhp->rhp = rhp;
qhp->attr.pd = php->pdid;
qhp->attr.scq = ((struct iwch_cq *) attrs->send_cq)->cq.cqid;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-02-27 0:27 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-02-27 0:27 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a couple of small post-2.6.25-rc3 fixes, mostly to the
new nes driver:
Adrian Bunk (3):
RDMA/nes: Fix off-by-one
RDMA/nes: Fix a memory leak in schedule_nes_timer()
RDMA/nes: Fix a check-after-use in nes_probe()
Bryan Rosenburg (1):
RDMA/cxgb3: Fix shift calc in build_phys_page_list() for 1-entry page lists
Chien Tung (1):
RDMA/nes: Resurrect error path dead code
Faisal Latif (2):
RDMA/nes: Fix use-after-free in mini_cm_dec_refcnt_listen()
RDMA/nes: Fix CRC endianness for RDMA connection establishment on big-endian
Glenn Streiff (1):
RDMA/nes: Fix use-after-free in nes_create_cq()
John Lacombe (1):
RDMA/nes: Fix interrupt moderation low threshold
Roland Dreier (1):
MAINTAINERS: neteffect update
MAINTAINERS | 2 ++
drivers/infiniband/hw/cxgb3/iwch_mem.c | 10 ++--------
drivers/infiniband/hw/nes/nes.c | 2 +-
drivers/infiniband/hw/nes/nes.h | 15 +++++++++++++++
drivers/infiniband/hw/nes/nes_cm.c | 15 +++++++++------
drivers/infiniband/hw/nes/nes_hw.c | 13 +++++--------
drivers/infiniband/hw/nes/nes_hw.h | 2 +-
drivers/infiniband/hw/nes/nes_verbs.c | 10 ++++------
8 files changed, 39 insertions(+), 30 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-02-19 18:51 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-02-19 18:51 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a couple of small post-2.6.25-rc2 fixes:
Pradeep Satyanarayana (1):
IPoIB/cm: Fix ipoib_cm_dev_stop() cleanup when drain times out
Roland Dreier (1):
IB/mthca: Free correct MPT on error exit from mthca_fmr_alloc()
drivers/infiniband/hw/mthca/mthca_mr.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 10 ++++++----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
index 3b69855..3538da1 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
@@ -686,7 +686,7 @@ err_out_table:
mthca_table_put(dev, dev->mr_table.mpt_table, key);
err_out_mpt_free:
- mthca_free(&dev->mr_table.mpt_alloc, mr->ibmr.lkey);
+ mthca_free(&dev->mr_table.mpt_alloc, key);
return err;
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 7dd2ec4..52b1beb 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -824,7 +824,6 @@ void ipoib_cm_dev_stop(struct net_device *dev)
struct ipoib_dev_priv *priv = netdev_priv(dev);
struct ipoib_cm_rx *p;
unsigned long begin;
- LIST_HEAD(list);
int ret;
if (!IPOIB_CM_SUPPORTED(dev->dev_addr) || !priv->cm.id)
@@ -857,9 +856,12 @@ void ipoib_cm_dev_stop(struct net_device *dev)
/*
* assume the HW is wedged and just free up everything.
*/
- list_splice_init(&priv->cm.rx_flush_list, &list);
- list_splice_init(&priv->cm.rx_error_list, &list);
- list_splice_init(&priv->cm.rx_drain_list, &list);
+ list_splice_init(&priv->cm.rx_flush_list,
+ &priv->cm.rx_reap_list);
+ list_splice_init(&priv->cm.rx_error_list,
+ &priv->cm.rx_reap_list);
+ list_splice_init(&priv->cm.rx_drain_list,
+ &priv->cm.rx_reap_list);
break;
}
spin_unlock_irq(&priv->lock);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-02-18 20:35 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-02-18 20:35 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few post-2.6.25-rc2 fixes, mostly for the new nes driver:
Chien Tung (1):
RDMA/nes: Fix VLAN support
Glenn Streiff (1):
RDMA/nes: Fix MAC interrupt erroneously masked on ifdown
Li Zefan (1):
IB: Fix return value in ib_device_register_sysfs()
Roland Dreier (1):
RDMA/nes: Fix possible array overrun
drivers/infiniband/core/sysfs.c | 4 ++-
drivers/infiniband/hw/nes/nes_nic.c | 62 +++++++++++++++++++++++---------
drivers/infiniband/hw/nes/nes_verbs.c | 2 +-
3 files changed, 48 insertions(+), 20 deletions(-)
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index c864ef7..5a4b2e6 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -686,8 +686,10 @@ int ib_device_register_sysfs(struct ib_device *device)
device->ports_parent = kobject_create_and_add("ports",
kobject_get(&class_dev->kobj));
- if (!device->ports_parent)
+ if (!device->ports_parent) {
+ ret = -ENOMEM;
goto err_put;
+ }
if (device->node_type == RDMA_NODE_IB_SWITCH) {
ret = add_port(device, 0);
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
index b6cc265..eee77da 100644
--- a/drivers/infiniband/hw/nes/nes_nic.c
+++ b/drivers/infiniband/hw/nes/nes_nic.c
@@ -148,14 +148,15 @@ static int nes_netdev_open(struct net_device *netdev)
struct nes_device *nesdev = nesvnic->nesdev;
int ret;
int i;
- struct nes_vnic *first_nesvnic;
+ struct nes_vnic *first_nesvnic = NULL;
u32 nic_active_bit;
u32 nic_active;
+ struct list_head *list_pos, *list_temp;
assert(nesdev != NULL);
- first_nesvnic = list_entry(nesdev->nesadapter->nesvnic_list[nesdev->mac_index].next,
- struct nes_vnic, list);
+ if (nesvnic->netdev_open == 1)
+ return 0;
if (netif_msg_ifup(nesvnic))
printk(KERN_INFO PFX "%s: enabling interface\n", netdev->name);
@@ -225,7 +226,18 @@ static int nes_netdev_open(struct net_device *netdev)
nes_write32(nesdev->regs+NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT |
nesvnic->nic_cq.cq_number);
nes_read32(nesdev->regs+NES_CQE_ALLOC);
-
+ list_for_each_safe(list_pos, list_temp, &nesdev->nesadapter->nesvnic_list[nesdev->mac_index]) {
+ first_nesvnic = container_of(list_pos, struct nes_vnic, list);
+ if (first_nesvnic->netdev_open == 1)
+ break;
+ }
+ if (first_nesvnic->netdev_open == 0) {
+ nes_debug(NES_DBG_INIT, "Setting up MAC interrupt mask.\n");
+ nes_write_indexed(nesdev, NES_IDX_MAC_INT_MASK + (0x200 * nesdev->mac_index),
+ ~(NES_MAC_INT_LINK_STAT_CHG | NES_MAC_INT_XGMII_EXT |
+ NES_MAC_INT_TX_UNDERFLOW | NES_MAC_INT_TX_ERROR));
+ first_nesvnic = nesvnic;
+ }
if (first_nesvnic->linkup) {
/* Enable network packets */
nesvnic->linkup = 1;
@@ -248,6 +260,8 @@ static int nes_netdev_stop(struct net_device *netdev)
struct nes_device *nesdev = nesvnic->nesdev;
u32 nic_active_mask;
u32 nic_active;
+ struct nes_vnic *first_nesvnic = NULL;
+ struct list_head *list_pos, *list_temp;
nes_debug(NES_DBG_SHUTDOWN, "nesvnic=%p, nesdev=%p, netdev=%p %s\n",
nesvnic, nesdev, netdev, netdev->name);
@@ -260,9 +274,20 @@ static int nes_netdev_stop(struct net_device *netdev)
/* Disable network packets */
napi_disable(&nesvnic->napi);
netif_stop_queue(netdev);
- if ((nesdev->netdev[0] == netdev) & (nesvnic->logical_port == nesdev->mac_index)) {
- nes_write_indexed(nesdev,
- NES_IDX_MAC_INT_MASK+(0x200*nesdev->mac_index), 0xffffffff);
+ list_for_each_safe(list_pos, list_temp, &nesdev->nesadapter->nesvnic_list[nesdev->mac_index]) {
+ first_nesvnic = container_of(list_pos, struct nes_vnic, list);
+ if ((first_nesvnic->netdev_open == 1) && (first_nesvnic != nesvnic))
+ break;
+ }
+
+ if (first_nesvnic->netdev_open == 0)
+ nes_write_indexed(nesdev, NES_IDX_MAC_INT_MASK+(0x200*nesdev->mac_index), 0xffffffff);
+ else if ((first_nesvnic != nesvnic) &&
+ (PCI_FUNC(first_nesvnic->nesdev->pcidev->devfn) != PCI_FUNC(nesvnic->nesdev->pcidev->devfn))) {
+ nes_write_indexed(nesdev, NES_IDX_MAC_INT_MASK + (0x200 * nesdev->mac_index), 0xffffffff);
+ nes_write_indexed(first_nesvnic->nesdev, NES_IDX_MAC_INT_MASK + (0x200 * first_nesvnic->nesdev->mac_index),
+ ~(NES_MAC_INT_LINK_STAT_CHG | NES_MAC_INT_XGMII_EXT |
+ NES_MAC_INT_TX_UNDERFLOW | NES_MAC_INT_TX_ERROR));
}
nic_active_mask = ~((u32)(1 << nesvnic->nic_index));
@@ -859,7 +884,6 @@ void nes_netdev_set_multicast_list(struct net_device *netdev)
for (mc_index=0; mc_index < NES_MULTICAST_PF_MAX; mc_index++) {
while (multicast_addr && nesvnic->mcrq_mcast_filter && ((mc_nic_index = nesvnic->mcrq_mcast_filter(nesvnic, multicast_addr->dmi_addr)) == 0))
multicast_addr = multicast_addr->next;
-
if (mc_nic_index < 0)
mc_nic_index = nesvnic->nic_index;
if (multicast_addr) {
@@ -908,7 +932,7 @@ static int nes_netdev_change_mtu(struct net_device *netdev, int new_mtu)
return -EINVAL;
netdev->mtu = new_mtu;
- nesvnic->max_frame_size = new_mtu+ETH_HLEN;
+ nesvnic->max_frame_size = new_mtu + VLAN_ETH_HLEN;
if (netdev->mtu > 1500) {
jumbomode=1;
@@ -1470,10 +1494,15 @@ static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct vlan_g
{
struct nes_vnic *nesvnic = netdev_priv(netdev);
struct nes_device *nesdev = nesvnic->nesdev;
+ struct nes_adapter *nesadapter = nesdev->nesadapter;
u32 u32temp;
+ unsigned long flags;
+ spin_lock_irqsave(&nesadapter->phy_lock, flags);
nesvnic->vlan_grp = grp;
+ nes_debug(NES_DBG_NETDEV, "%s: %s\n", __func__, netdev->name);
+
/* Enable/Disable VLAN Stripping */
u32temp = nes_read_indexed(nesdev, NES_IDX_PCIX_DIAG);
if (grp)
@@ -1482,6 +1511,7 @@ static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct vlan_g
u32temp |= 0x02000000;
nes_write_indexed(nesdev, NES_IDX_PCIX_DIAG, u32temp);
+ spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
}
@@ -1540,7 +1570,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
nesvnic->msg_enable = netif_msg_init(debug, default_msg);
nesvnic->netdev_index = nesdev->netdev_count;
nesvnic->perfect_filter_index = nesdev->nesadapter->netdev_count;
- nesvnic->max_frame_size = netdev->mtu+netdev->hard_header_len;
+ nesvnic->max_frame_size = netdev->mtu + netdev->hard_header_len + VLAN_HLEN;
curr_qp_map = nic_qp_mapping_per_function[PCI_FUNC(nesdev->pcidev->devfn)];
nesvnic->nic.qp_id = curr_qp_map[nesdev->netdev_count].qpid;
@@ -1610,7 +1640,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
list_add_tail(&nesvnic->list, &nesdev->nesadapter->nesvnic_list[nesdev->mac_index]);
if ((nesdev->netdev_count == 0) &&
- (PCI_FUNC(nesdev->pcidev->devfn) == nesdev->mac_index)) {
+ (PCI_FUNC(nesdev->pcidev->devfn) == nesdev->mac_index)) {
nes_debug(NES_DBG_INIT, "Setting up PHY interrupt mask. Using register index 0x%04X\n",
NES_IDX_PHY_PCS_CONTROL_STATUS0+(0x200*(nesvnic->logical_port&1)));
u32temp = nes_read_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 +
@@ -1648,18 +1678,14 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
nesvnic->linkup = 1;
}
}
- nes_debug(NES_DBG_INIT, "Setting up MAC interrupt mask.\n");
/* clear the MAC interrupt status, assumes direct logical to physical mapping */
- u32temp = nes_read_indexed(nesdev, NES_IDX_MAC_INT_STATUS+(0x200*nesvnic->logical_port));
+ u32temp = nes_read_indexed(nesdev, NES_IDX_MAC_INT_STATUS + (0x200 * nesdev->mac_index));
nes_debug(NES_DBG_INIT, "Phy interrupt status = 0x%X.\n", u32temp);
- nes_write_indexed(nesdev, NES_IDX_MAC_INT_STATUS+(0x200*nesvnic->logical_port), u32temp);
+ nes_write_indexed(nesdev, NES_IDX_MAC_INT_STATUS + (0x200 * nesdev->mac_index), u32temp);
- if (nesdev->nesadapter->phy_type[nesvnic->logical_port] != NES_PHY_TYPE_IRIS)
+ if (nesdev->nesadapter->phy_type[nesdev->mac_index] != NES_PHY_TYPE_IRIS)
nes_init_phy(nesdev);
- nes_write_indexed(nesdev, NES_IDX_MAC_INT_MASK+(0x200*nesvnic->logical_port),
- ~(NES_MAC_INT_LINK_STAT_CHG | NES_MAC_INT_XGMII_EXT |
- NES_MAC_INT_TX_UNDERFLOW | NES_MAC_INT_TX_ERROR));
}
return netdev;
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index ffd4b42..4dafbe1 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -1337,7 +1337,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
NES_MAX_USER_WQ_REGIONS, nes_ucontext->first_free_wq);
/* nes_debug(NES_DBG_QP, "find_first_zero_biton wqs returned %u\n",
nespd->mmap_db_index); */
- if (nesqp->mmap_sq_db_index > NES_MAX_USER_WQ_REGIONS) {
+ if (nesqp->mmap_sq_db_index >= NES_MAX_USER_WQ_REGIONS) {
nes_debug(NES_DBG_QP,
"db index > max user regions, failing create QP\n");
nes_free_resource(nesadapter, nesadapter->allocated_qps, qp_num);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-02-14 23:31 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-02-14 23:31 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few post-2.6.25-rc1 fixes:
Eli Cohen (1):
IPoIB: Remove unused struct ipoib_cm_tx.ibwc member
Jack Morgenstein (3):
IPoIB: On P_Key change event, reset state properly
IB/mlx4: mlx4_ib_fmr_alloc() should call mlx4_fmr_enable()
mlx4_core: Move table_find from fmr_alloc to fmr_enable
Marcin Slusarz (1):
IB/mthca: Convert to use be16_add_cpu()
Roland Dreier (3):
IB/mthca: Add missing sg_init_table() in mthca_map_user_db()
IB/cm: Remove debug printk()s that snuck upstream
IB/cm: Fix infiniband_cm class kobject ref counting
Sean Hefty (1):
RDMA/cma: Do not issue MRA if user rejects connection request
Steve Wise (1):
RDMA/cxgb3: Fail loopback connections
drivers/infiniband/core/cm.c | 26 ++++++++------------------
drivers/infiniband/core/cma.c | 10 +++++++++-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 17 +++++++++++++++++
drivers/infiniband/hw/mlx4/mr.c | 2 +-
drivers/infiniband/hw/mthca/mthca_cq.c | 2 +-
drivers/infiniband/hw/mthca/mthca_memfree.c | 1 +
drivers/infiniband/ulp/ipoib/ipoib.h | 1 -
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 1 +
drivers/net/mlx4/mr.c | 21 +++++++++++++--------
9 files changed, 51 insertions(+), 30 deletions(-)
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index 638b727..b10ade9 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -3587,8 +3587,6 @@ static void cm_release_port_obj(struct kobject *obj)
{
struct cm_port *cm_port;
- printk(KERN_ERR "free cm port\n");
-
cm_port = container_of(obj, struct cm_port, port_obj);
kfree(cm_port);
}
@@ -3601,8 +3599,6 @@ static void cm_release_dev_obj(struct kobject *obj)
{
struct cm_device *cm_dev;
- printk(KERN_ERR "free cm dev\n");
-
cm_dev = container_of(obj, struct cm_device, dev_obj);
kfree(cm_dev);
}
@@ -3616,18 +3612,12 @@ struct class cm_class = {
};
EXPORT_SYMBOL(cm_class);
-static void cm_remove_fs_obj(struct kobject *obj)
-{
- kobject_put(obj->parent);
- kobject_put(obj);
-}
-
static int cm_create_port_fs(struct cm_port *port)
{
int i, ret;
ret = kobject_init_and_add(&port->port_obj, &cm_port_obj_type,
- kobject_get(&port->cm_dev->dev_obj),
+ &port->cm_dev->dev_obj,
"%d", port->port_num);
if (ret) {
kfree(port);
@@ -3637,7 +3627,7 @@ static int cm_create_port_fs(struct cm_port *port)
for (i = 0; i < CM_COUNTER_GROUPS; i++) {
ret = kobject_init_and_add(&port->counter_group[i].obj,
&cm_counter_obj_type,
- kobject_get(&port->port_obj),
+ &port->port_obj,
"%s", counter_group_names[i]);
if (ret)
goto error;
@@ -3647,8 +3637,8 @@ static int cm_create_port_fs(struct cm_port *port)
error:
while (i--)
- cm_remove_fs_obj(&port->counter_group[i].obj);
- cm_remove_fs_obj(&port->port_obj);
+ kobject_put(&port->counter_group[i].obj);
+ kobject_put(&port->port_obj);
return ret;
}
@@ -3658,9 +3648,9 @@ static void cm_remove_port_fs(struct cm_port *port)
int i;
for (i = 0; i < CM_COUNTER_GROUPS; i++)
- cm_remove_fs_obj(&port->counter_group[i].obj);
+ kobject_put(&port->counter_group[i].obj);
- cm_remove_fs_obj(&port->port_obj);
+ kobject_put(&port->port_obj);
}
static void cm_add_one(struct ib_device *device)
@@ -3744,7 +3734,7 @@ error1:
ib_unregister_mad_agent(port->mad_agent);
cm_remove_port_fs(port);
}
- cm_remove_fs_obj(&cm_dev->dev_obj);
+ kobject_put(&cm_dev->dev_obj);
}
static void cm_remove_one(struct ib_device *device)
@@ -3771,7 +3761,7 @@ static void cm_remove_one(struct ib_device *device)
ib_unregister_mad_agent(port->mad_agent);
cm_remove_port_fs(port);
}
- cm_remove_fs_obj(&cm_dev->dev_obj);
+ kobject_put(&cm_dev->dev_obj);
}
static int __init ib_cm_init(void)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 1eff1b2..34507da 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -1107,7 +1107,6 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
event.param.ud.private_data_len =
IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE - offset;
} else {
- ib_send_cm_mra(cm_id, CMA_CM_MRA_SETTING, NULL, 0);
conn_id = cma_new_conn_id(&listen_id->id, ib_event);
cma_set_req_event_data(&event, &ib_event->param.req_rcvd,
ib_event->private_data, offset);
@@ -1130,6 +1129,15 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
ret = conn_id->id.event_handler(&conn_id->id, &event);
if (!ret) {
+ /*
+ * Acquire mutex to prevent user executing rdma_destroy_id()
+ * while we're accessing the cm_id.
+ */
+ mutex_lock(&lock);
+ if (cma_comp(conn_id, CMA_CONNECT) &&
+ !cma_is_ud_ps(conn_id->id.ps))
+ ib_send_cm_mra(cm_id, CMA_CM_MRA_SETTING, NULL, 0);
+ mutex_unlock(&lock);
cma_enable_remove(conn_id);
goto out;
}
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index e9a08fa..320f2b6 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -35,6 +35,7 @@
#include <linux/skbuff.h>
#include <linux/timer.h>
#include <linux/notifier.h>
+#include <linux/inetdevice.h>
#include <net/neighbour.h>
#include <net/netevent.h>
@@ -1784,6 +1785,17 @@ err:
return err;
}
+static int is_loopback_dst(struct iw_cm_id *cm_id)
+{
+ struct net_device *dev;
+
+ dev = ip_dev_find(&init_net, cm_id->remote_addr.sin_addr.s_addr);
+ if (!dev)
+ return 0;
+ dev_put(dev);
+ return 1;
+}
+
int iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
{
int err = 0;
@@ -1791,6 +1803,11 @@ int iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
struct iwch_ep *ep;
struct rtable *rt;
+ if (is_loopback_dst(cm_id)) {
+ err = -ENOSYS;
+ goto out;
+ }
+
ep = alloc_ep(sizeof(*ep), GFP_KERNEL);
if (!ep) {
printk(KERN_ERR MOD "%s - cannot alloc ep.\n", __FUNCTION__);
diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
index 7dc91a3..fe2c2e9 100644
--- a/drivers/infiniband/hw/mlx4/mr.c
+++ b/drivers/infiniband/hw/mlx4/mr.c
@@ -199,7 +199,7 @@ struct ib_fmr *mlx4_ib_fmr_alloc(struct ib_pd *pd, int acc,
if (err)
goto err_free;
- err = mlx4_mr_enable(to_mdev(pd->device)->dev, &fmr->mfmr.mr);
+ err = mlx4_fmr_enable(to_mdev(pd->device)->dev, &fmr->mfmr);
if (err)
goto err_mr;
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
index 6bd9f13..1e1e336 100644
--- a/drivers/infiniband/hw/mthca/mthca_cq.c
+++ b/drivers/infiniband/hw/mthca/mthca_cq.c
@@ -473,7 +473,7 @@ static void handle_error_cqe(struct mthca_dev *dev, struct mthca_cq *cq,
if (!(new_wqe & cpu_to_be32(0x3f)) || (!cqe->db_cnt && dbd))
return;
- cqe->db_cnt = cpu_to_be16(be16_to_cpu(cqe->db_cnt) - dbd);
+ be16_add_cpu(&cqe->db_cnt, -dbd);
cqe->wqe = new_wqe;
cqe->syndrome = SYNDROME_WR_FLUSH_ERR;
diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniband/hw/mthca/mthca_memfree.c
index 1f4d27d..252db08 100644
--- a/drivers/infiniband/hw/mthca/mthca_memfree.c
+++ b/drivers/infiniband/hw/mthca/mthca_memfree.c
@@ -542,6 +542,7 @@ struct mthca_user_db_table *mthca_init_user_db_tab(struct mthca_dev *dev)
for (i = 0; i < npages; ++i) {
db_tab->page[i].refcount = 0;
db_tab->page[i].uvirt = 0;
+ sg_init_table(&db_tab->page[i].mem, 1);
}
return db_tab;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index f9b7caa..054fab8 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -209,7 +209,6 @@ struct ipoib_cm_tx {
unsigned tx_tail;
unsigned long flags;
u32 mtu;
- struct ib_wc ibwc[IPOIB_NUM_WC];
};
struct ipoib_cm_rx_buf {
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 9d3e778..08c4396 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -780,6 +780,7 @@ static void __ipoib_ib_dev_flush(struct ipoib_dev_priv *priv, int pkey_event)
if (ib_find_pkey(priv->ca, priv->port, priv->pkey, &new_index)) {
clear_bit(IPOIB_PKEY_ASSIGNED, &priv->flags);
ipoib_ib_dev_down(dev, 0);
+ ipoib_ib_dev_stop(dev, 0);
ipoib_pkey_dev_delay_open(dev);
return;
}
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c
index 679dfdb..79b317b 100644
--- a/drivers/net/mlx4/mr.c
+++ b/drivers/net/mlx4/mr.c
@@ -578,13 +578,6 @@ int mlx4_fmr_alloc(struct mlx4_dev *dev, u32 pd, u32 access, int max_pages,
goto err_free;
}
- fmr->mpt = mlx4_table_find(&priv->mr_table.dmpt_table,
- key_to_hw_index(fmr->mr.key), NULL);
- if (!fmr->mpt) {
- err = -ENOMEM;
- goto err_free;
- }
-
return 0;
err_free:
@@ -595,7 +588,19 @@ EXPORT_SYMBOL_GPL(mlx4_fmr_alloc);
int mlx4_fmr_enable(struct mlx4_dev *dev, struct mlx4_fmr *fmr)
{
- return mlx4_mr_enable(dev, &fmr->mr);
+ struct mlx4_priv *priv = mlx4_priv(dev);
+ int err;
+
+ err = mlx4_mr_enable(dev, &fmr->mr);
+ if (err)
+ return err;
+
+ fmr->mpt = mlx4_table_find(&priv->mr_table.dmpt_table,
+ key_to_hw_index(fmr->mr.key), NULL);
+ if (!fmr->mpt)
+ return -ENOMEM;
+
+ return 0;
}
EXPORT_SYMBOL_GPL(mlx4_fmr_enable);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-02-11 22:25 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-02-11 22:25 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get one build fix:
Olof Johansson (1):
mlx4_core: Fix build break (missing include)
drivers/net/mlx4/alloc.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/net/mlx4/alloc.c b/drivers/net/mlx4/alloc.c
index 521dc03..75ef9d0 100644
--- a/drivers/net/mlx4/alloc.c
+++ b/drivers/net/mlx4/alloc.c
@@ -34,6 +34,7 @@
#include <linux/slab.h>
#include <linux/bitmap.h>
#include <linux/dma-mapping.h>
+#include <linux/vmalloc.h>
#include "mlx4.h"
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-02-08 23:16 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-02-08 23:16 UTC (permalink / raw)
To: torvalds, akpm; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the last batch of InfiniBand/RDMA merges for 2.6.25,
mostly preparation for enabling stateless offloads for IP-over-InfiniBand.
Eli Cohen (3):
IPoIB: Add high DMA feature flag
IPoIB: Add send gather support
IB/core: Add IP checksum offload support
Jack Morgenstein (2):
mlx4_core: For 64-bit systems, vmap() kernel queue buffers
IB/mlx4: Use multiple WQ blocks to post smaller send WQEs
Roland Dreier (3):
IB/mlx4: Consolidate code to get an entry from a struct mlx4_buf
mlx4_core: Clean up struct mlx4_buf
IB/core: Remove unused struct ib_device.flags member
drivers/infiniband/hw/mlx4/cq.c | 20 ++--
drivers/infiniband/hw/mlx4/mlx4_ib.h | 2 +
drivers/infiniband/hw/mlx4/qp.c | 216 +++++++++++++++++++++++-----
drivers/infiniband/hw/mlx4/srq.c | 8 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 10 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 89 +++++++++---
drivers/infiniband/ulp/ipoib/ipoib_main.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 10 +-
drivers/net/mlx4/alloc.c | 48 ++++--
drivers/net/mlx4/mr.c | 4 +-
include/linux/mlx4/device.h | 19 ++-
include/linux/mlx4/qp.h | 4 +
include/rdma/ib_verbs.h | 16 ++-
14 files changed, 342 insertions(+), 112 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-02-05 4:49 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-02-05 4:49 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general, gstreiff
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a second batch of InfiniBand/RDMA batches. In addition
to the usual motley crew of changes, this pull includes a new driver
for NetEffect RNICs in drivers/infiniband/hw/nes. The code could use
some further cleaning, but I don't think it's worth holding off on the
merge.
David Dillow (1):
IB/srp: Retry stale connections
Eli Cohen (2):
IB/mthca: Remove checks for srq->first_free < 0
IB/ib_mthca: Pre-link receive WQEs in Tavor mode
Glenn Streiff (1):
RDMA/nes: Add a driver for NetEffect RNICs
Hoang-Nam Nguyen (1):
IB/ehca: Add PMA support
Jack Morgenstein (2):
IB/mthca: Don't read reserved fields in mthca_QUERY_ADAPTER()
mlx4_core: Don't read reserved fields in mlx4_QUERY_ADAPTER()
Joachim Fenkes (2):
IB/ehca: Prevent sending UD packets to QP0
IB/ehca: Update sma_attr also in case of disruptive config change
Olaf Kirch (1):
IB/mthca: Return proper error codes from mthca_fmr_alloc()
Or Gerlitz (3):
IPoIB: Handle bonding failover race for connected neighbours too
IPoIB: Remove a misleading debug print
IB/fmr_pool: Allocate page list for pool FMRs only when caching enabled
Roland Dreier (4):
mlx4_core: Fix more section mismatches
IB/mthca: Fix and simplify page size calculation in mthca_reg_phys_mr()
IB/mlx4: Actually print out the driver version
IB: Avoid marking __devinitdata as const
Sean Hefty (1):
IB/cm: Add interim support for routed paths
MAINTAINERS | 10 +
drivers/infiniband/Kconfig | 2 +-
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/cm.c | 89 +-
drivers/infiniband/core/fmr_pool.c | 7 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 1 +
drivers/infiniband/hw/ehca/ehca_irq.c | 2 +
drivers/infiniband/hw/ehca/ehca_iverbs.h | 5 +
drivers/infiniband/hw/ehca/ehca_main.c | 2 +-
drivers/infiniband/hw/ehca/ehca_reqs.c | 4 +
drivers/infiniband/hw/ehca/ehca_sqp.c | 91 +
drivers/infiniband/hw/mlx4/main.c | 10 +-
drivers/infiniband/hw/mthca/mthca_cmd.c | 11 +-
drivers/infiniband/hw/mthca/mthca_main.c | 5 +-
drivers/infiniband/hw/mthca/mthca_mr.c | 8 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 22 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 13 +-
drivers/infiniband/hw/mthca/mthca_srq.c | 47 +-
drivers/infiniband/hw/nes/Kconfig | 16 +
drivers/infiniband/hw/nes/Makefile | 3 +
drivers/infiniband/hw/nes/nes.c | 1152 ++++++++
drivers/infiniband/hw/nes/nes.h | 560 ++++
drivers/infiniband/hw/nes/nes_cm.c | 3088 ++++++++++++++++++++
drivers/infiniband/hw/nes/nes_cm.h | 433 +++
drivers/infiniband/hw/nes/nes_context.h | 193 ++
drivers/infiniband/hw/nes/nes_hw.c | 3080 ++++++++++++++++++++
drivers/infiniband/hw/nes/nes_hw.h | 1206 ++++++++
drivers/infiniband/hw/nes/nes_nic.c | 1703 +++++++++++
drivers/infiniband/hw/nes/nes_user.h | 112 +
drivers/infiniband/hw/nes/nes_utils.c | 917 ++++++
drivers/infiniband/hw/nes/nes_verbs.c | 3917 ++++++++++++++++++++++++++
drivers/infiniband/hw/nes/nes_verbs.h | 169 ++
drivers/infiniband/ulp/ipoib/ipoib_main.c | 19 +-
drivers/infiniband/ulp/srp/ib_srp.c | 53 +-
drivers/infiniband/ulp/srp/ib_srp.h | 1 +
drivers/net/mlx4/fw.c | 6 -
drivers/net/mlx4/fw.h | 3 -
drivers/net/mlx4/main.c | 11 +-
drivers/net/mlx4/mr.c | 2 +-
39 files changed, 16848 insertions(+), 126 deletions(-)
create mode 100644 drivers/infiniband/hw/nes/Kconfig
create mode 100644 drivers/infiniband/hw/nes/Makefile
create mode 100644 drivers/infiniband/hw/nes/nes.c
create mode 100644 drivers/infiniband/hw/nes/nes.h
create mode 100644 drivers/infiniband/hw/nes/nes_cm.c
create mode 100644 drivers/infiniband/hw/nes/nes_cm.h
create mode 100644 drivers/infiniband/hw/nes/nes_context.h
create mode 100644 drivers/infiniband/hw/nes/nes_hw.c
create mode 100644 drivers/infiniband/hw/nes/nes_hw.h
create mode 100644 drivers/infiniband/hw/nes/nes_nic.c
create mode 100644 drivers/infiniband/hw/nes/nes_user.h
create mode 100644 drivers/infiniband/hw/nes/nes_utils.c
create mode 100644 drivers/infiniband/hw/nes/nes_verbs.c
create mode 100644 drivers/infiniband/hw/nes/nes_verbs.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-01-16 22:46 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-01-16 22:46 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the commit below, which moves a little code around to
make a couple of major MPI implementations work on ipath devices:
drivers/infiniband/hw/ipath/ipath_ud.c | 44 ++++++++++++++++----------------
1 files changed, 22 insertions(+), 22 deletions(-)
commit 0a69631b2869093d7306e8f66cca8eb0a05aa919
Author: Ralph Campbell <ralph.campbell@qlogic.com>
Date: Tue Jan 15 15:58:13 2008 -0800
IB/ipath: Fix receiving UD messages with immediate data
This fixes a small bug in ipath_ud_rcv()'s handling of UD messages
with immediate data. We need to test whether immediate data is
present and update the header size accordingly *before* testing the
packet size from the header against the actual received length.
Otherwise the wrong header size will be used and all messages with
immediate data will be dropped.
This bug keeps MVAPICH-UD and HP MPI from working at all on ipath devices.
Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
---
diff --git a/drivers/infiniband/hw/ipath/ipath_ud.c b/drivers/infiniband/hw/ipath/ipath_ud.c
index 16a2a93..b3df6f3 100644
--- a/drivers/infiniband/hw/ipath/ipath_ud.c
+++ b/drivers/infiniband/hw/ipath/ipath_ud.c
@@ -455,6 +455,28 @@ void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr,
}
}
+ /*
+ * The opcode is in the low byte when its in network order
+ * (top byte when in host order).
+ */
+ opcode = be32_to_cpu(ohdr->bth[0]) >> 24;
+ if (qp->ibqp.qp_num > 1 &&
+ opcode == IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE) {
+ if (header_in_data) {
+ wc.imm_data = *(__be32 *) data;
+ data += sizeof(__be32);
+ } else
+ wc.imm_data = ohdr->u.ud.imm_data;
+ wc.wc_flags = IB_WC_WITH_IMM;
+ hdrsize += sizeof(u32);
+ } else if (opcode == IB_OPCODE_UD_SEND_ONLY) {
+ wc.imm_data = 0;
+ wc.wc_flags = 0;
+ } else {
+ dev->n_pkt_drops++;
+ goto bail;
+ }
+
/* Get the number of bytes the message was padded by. */
pad = (be32_to_cpu(ohdr->bth[0]) >> 20) & 3;
if (unlikely(tlen < (hdrsize + pad + 4))) {
@@ -482,28 +504,6 @@ void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr,
wc.byte_len = tlen + sizeof(struct ib_grh);
/*
- * The opcode is in the low byte when its in network order
- * (top byte when in host order).
- */
- opcode = be32_to_cpu(ohdr->bth[0]) >> 24;
- if (qp->ibqp.qp_num > 1 &&
- opcode == IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE) {
- if (header_in_data) {
- wc.imm_data = *(__be32 *) data;
- data += sizeof(__be32);
- } else
- wc.imm_data = ohdr->u.ud.imm_data;
- wc.wc_flags = IB_WC_WITH_IMM;
- hdrsize += sizeof(u32);
- } else if (opcode == IB_OPCODE_UD_SEND_ONLY) {
- wc.imm_data = 0;
- wc.wc_flags = 0;
- } else {
- dev->n_pkt_drops++;
- goto bail;
- }
-
- /*
* Get the next work request entry to find where to put the data.
*/
if (qp->r_reuse_sge)
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2008-01-08 20:25 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2008-01-08 20:25 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few one-line fixes: change a maintainer email address
that is going away soon, fix a bug that would make the second port on
some HCAs useless, and fix SRP the right way now that the root cause
is fixed via James's tree.
(And just to counter James's suggestion that the SRP user base is
comparable to voyager's: these SRP fixes are coming from a real
production user, and that user is @ornl.gov, which means that SRP is
actually being used to do something involving things like atomic bombs
or sharks with laser beams)
Dave Dillow (1):
IB/srp: Release transport before removing host
Dotan Barak (1):
IB/mlx4: Fix value of pkey_index in QP1 completions
Sean Hefty (1):
MAINTAINERS: Update Sean Hefty's email address
MAINTAINERS | 2 +-
drivers/infiniband/hw/mlx4/cq.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 79c711e..56e6159 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1919,7 +1919,7 @@ INFINIBAND SUBSYSTEM
P: Roland Dreier
M: rolandd@cisco.com
P: Sean Hefty
-M: mshefty@ichips.intel.com
+M: sean.hefty@intel.com
P: Hal Rosenstock
M: hal.rosenstock@gmail.com
L: general@lists.openfabrics.org
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index 8bf44da..9d32c49 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
@@ -430,7 +430,7 @@ static int mlx4_ib_poll_one(struct mlx4_ib_cq *cq,
wc->dlid_path_bits = (be32_to_cpu(cqe->g_mlpath_rqpn) >> 24) & 0x7f;
wc->wc_flags |= be32_to_cpu(cqe->g_mlpath_rqpn) & 0x80000000 ?
IB_WC_GRH : 0;
- wc->pkey_index = be32_to_cpu(cqe->immed_rss_invalid) >> 16;
+ wc->pkey_index = be32_to_cpu(cqe->immed_rss_invalid) & 0x7f;
}
return 0;
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 77e8b90..bdb6f85 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -2053,8 +2053,8 @@ static void srp_remove_one(struct ib_device *device)
list_for_each_entry_safe(target, tmp_target,
&host->target_list, list) {
- scsi_remove_host(target->scsi_host);
srp_remove_host(target->scsi_host);
+ scsi_remove_host(target->scsi_host);
srp_disconnect_target(target);
ib_destroy_cm_id(target->cm_id);
srp_free_target_ib(target);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-12-13 17:39 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-12-13 17:39 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will pull a few small ehca driver fixes for 2.6.24:
Joachim Fenkes (3):
IB/ehca: Return correct number of SGEs for SRQ
IB/ehca: Serialize HCA-related hCalls if necessary
IB/ehca: Fix lock flag variable location, bump version number
drivers/infiniband/hw/ehca/ehca_classes.h | 1 +
drivers/infiniband/hw/ehca/ehca_main.c | 15 ++++++++++++++-
drivers/infiniband/hw/ehca/ehca_qp.c | 4 ++--
drivers/infiniband/hw/ehca/hcp_if.c | 27 ++++++++++-----------------
drivers/infiniband/hw/ehca/hipz_hw.h | 1 +
5 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h
index 87f12d4..74d2b72 100644
--- a/drivers/infiniband/hw/ehca/ehca_classes.h
+++ b/drivers/infiniband/hw/ehca/ehca_classes.h
@@ -322,6 +322,7 @@ extern int ehca_static_rate;
extern int ehca_port_act_time;
extern int ehca_use_hp_mr;
extern int ehca_scaling_code;
+extern int ehca_lock_hcalls;
struct ipzu_queue_resp {
u32 qe_size; /* queue entry size */
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index 90d4334..6a56d86 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -43,13 +43,14 @@
#ifdef CONFIG_PPC_64K_PAGES
#include <linux/slab.h>
#endif
+
#include "ehca_classes.h"
#include "ehca_iverbs.h"
#include "ehca_mrmw.h"
#include "ehca_tools.h"
#include "hcp_if.h"
-#define HCAD_VERSION "0024"
+#define HCAD_VERSION "0025"
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Christoph Raisch <raisch@de.ibm.com>");
@@ -66,6 +67,7 @@ int ehca_poll_all_eqs = 1;
int ehca_static_rate = -1;
int ehca_scaling_code = 0;
int ehca_mr_largepage = 1;
+int ehca_lock_hcalls = -1;
module_param_named(open_aqp1, ehca_open_aqp1, int, S_IRUGO);
module_param_named(debug_level, ehca_debug_level, int, S_IRUGO);
@@ -77,6 +79,7 @@ module_param_named(poll_all_eqs, ehca_poll_all_eqs, int, S_IRUGO);
module_param_named(static_rate, ehca_static_rate, int, S_IRUGO);
module_param_named(scaling_code, ehca_scaling_code, int, S_IRUGO);
module_param_named(mr_largepage, ehca_mr_largepage, int, S_IRUGO);
+module_param_named(lock_hcalls, ehca_lock_hcalls, bool, S_IRUGO);
MODULE_PARM_DESC(open_aqp1,
"AQP1 on startup (0: no (default), 1: yes)");
@@ -102,6 +105,9 @@ MODULE_PARM_DESC(scaling_code,
MODULE_PARM_DESC(mr_largepage,
"use large page for MR (0: use PAGE_SIZE (default), "
"1: use large page depending on MR size");
+MODULE_PARM_DESC(lock_hcalls,
+ "serialize all hCalls made by the driver "
+ "(default: autodetect)");
DEFINE_RWLOCK(ehca_qp_idr_lock);
DEFINE_RWLOCK(ehca_cq_idr_lock);
@@ -258,6 +264,7 @@ static struct cap_descr {
{ HCA_CAP_UD_LL_QP, "HCA_CAP_UD_LL_QP" },
{ HCA_CAP_RESIZE_MR, "HCA_CAP_RESIZE_MR" },
{ HCA_CAP_MINI_QP, "HCA_CAP_MINI_QP" },
+ { HCA_CAP_H_ALLOC_RES_SYNC, "HCA_CAP_H_ALLOC_RES_SYNC" },
};
static int ehca_sense_attributes(struct ehca_shca *shca)
@@ -333,6 +340,12 @@ static int ehca_sense_attributes(struct ehca_shca *shca)
if (EHCA_BMASK_GET(hca_cap_descr[i].mask, shca->hca_cap))
ehca_gen_dbg(" %s", hca_cap_descr[i].descr);
+ /* Autodetect hCall locking -- the "H_ALLOC_RESOURCE synced" flag is
+ * a firmware property, so it's valid across all adapters
+ */
+ if (ehca_lock_hcalls == -1)
+ ehca_lock_hcalls = !(shca->hca_cap & HCA_CAP_H_ALLOC_RES_SYNC);
+
/* translate supported MR page sizes; always support 4K */
shca->hca_cap_mr_pgsize = EHCA_PAGESIZE;
if (ehca_mr_largepage) { /* support extra sizes only if enabled */
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index dd12668..eff5fb5 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -838,7 +838,7 @@ struct ib_srq *ehca_create_srq(struct ib_pd *pd,
/* copy back return values */
srq_init_attr->attr.max_wr = qp_init_attr.cap.max_recv_wr;
- srq_init_attr->attr.max_sge = qp_init_attr.cap.max_recv_sge;
+ srq_init_attr->attr.max_sge = 3;
/* drive SRQ into RTR state */
mqpcb = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
@@ -1750,7 +1750,7 @@ int ehca_query_srq(struct ib_srq *srq, struct ib_srq_attr *srq_attr)
}
srq_attr->max_wr = qpcb->max_nr_outst_recv_wr - 1;
- srq_attr->max_sge = qpcb->actual_nr_sges_in_rq_wqe;
+ srq_attr->max_sge = 3;
srq_attr->srq_limit = EHCA_BMASK_GET(
MQPCB_CURR_SRQ_LIMIT, qpcb->curr_srq_limit);
diff --git a/drivers/infiniband/hw/ehca/hcp_if.c b/drivers/infiniband/hw/ehca/hcp_if.c
index c16a213..7029aa6 100644
--- a/drivers/infiniband/hw/ehca/hcp_if.c
+++ b/drivers/infiniband/hw/ehca/hcp_if.c
@@ -120,26 +120,21 @@ static long ehca_plpar_hcall_norets(unsigned long opcode,
unsigned long arg7)
{
long ret;
- int i, sleep_msecs, do_lock;
- unsigned long flags;
+ int i, sleep_msecs;
+ unsigned long flags = 0;
ehca_gen_dbg("opcode=%lx " HCALL7_REGS_FORMAT,
opcode, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
- /* lock H_FREE_RESOURCE(MR) against itself and H_ALLOC_RESOURCE(MR) */
- if ((opcode == H_FREE_RESOURCE) && (arg7 == 5)) {
- arg7 = 0; /* better not upset firmware */
- do_lock = 1;
- }
-
for (i = 0; i < 5; i++) {
- if (do_lock)
+ /* serialize hCalls to work around firmware issue */
+ if (ehca_lock_hcalls)
spin_lock_irqsave(&hcall_lock, flags);
ret = plpar_hcall_norets(opcode, arg1, arg2, arg3, arg4,
arg5, arg6, arg7);
- if (do_lock)
+ if (ehca_lock_hcalls)
spin_unlock_irqrestore(&hcall_lock, flags);
if (H_IS_LONG_BUSY(ret)) {
@@ -174,24 +169,22 @@ static long ehca_plpar_hcall9(unsigned long opcode,
unsigned long arg9)
{
long ret;
- int i, sleep_msecs, do_lock;
+ int i, sleep_msecs;
unsigned long flags = 0;
ehca_gen_dbg("INPUT -- opcode=%lx " HCALL9_REGS_FORMAT, opcode,
arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
- /* lock H_ALLOC_RESOURCE(MR) against itself and H_FREE_RESOURCE(MR) */
- do_lock = ((opcode == H_ALLOC_RESOURCE) && (arg2 == 5));
-
for (i = 0; i < 5; i++) {
- if (do_lock)
+ /* serialize hCalls to work around firmware issue */
+ if (ehca_lock_hcalls)
spin_lock_irqsave(&hcall_lock, flags);
ret = plpar_hcall9(opcode, outs,
arg1, arg2, arg3, arg4, arg5,
arg6, arg7, arg8, arg9);
- if (do_lock)
+ if (ehca_lock_hcalls)
spin_unlock_irqrestore(&hcall_lock, flags);
if (H_IS_LONG_BUSY(ret)) {
@@ -821,7 +814,7 @@ u64 hipz_h_free_resource_mr(const struct ipz_adapter_handle adapter_handle,
return ehca_plpar_hcall_norets(H_FREE_RESOURCE,
adapter_handle.handle, /* r4 */
mr->ipz_mr_handle.handle, /* r5 */
- 0, 0, 0, 0, 5);
+ 0, 0, 0, 0, 0);
}
u64 hipz_h_reregister_pmr(const struct ipz_adapter_handle adapter_handle,
diff --git a/drivers/infiniband/hw/ehca/hipz_hw.h b/drivers/infiniband/hw/ehca/hipz_hw.h
index 485b840..bf996c7 100644
--- a/drivers/infiniband/hw/ehca/hipz_hw.h
+++ b/drivers/infiniband/hw/ehca/hipz_hw.h
@@ -378,6 +378,7 @@ struct hipz_query_hca {
#define HCA_CAP_UD_LL_QP EHCA_BMASK_IBM(16, 16)
#define HCA_CAP_RESIZE_MR EHCA_BMASK_IBM(17, 17)
#define HCA_CAP_MINI_QP EHCA_BMASK_IBM(18, 18)
+#define HCA_CAP_H_ALLOC_RES_SYNC EHCA_BMASK_IBM(19, 19)
/* query port response block */
struct hipz_query_port {
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-12-01 4:03 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-12-01 4:03 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get two small fixes for 2.6.24:
Jack Morgenstein (1):
IPoIB: Fix oops if xmit is called when priv->broadcast is NULL
Joachim Fenkes (1):
IB/ehca: Fix static rate if path faster than link
drivers/infiniband/hw/ehca/ehca_av.c | 8 ++++++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 3 +++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/hw/ehca/ehca_av.c b/drivers/infiniband/hw/ehca/ehca_av.c
index 453eb99..f7782c8 100644
--- a/drivers/infiniband/hw/ehca/ehca_av.c
+++ b/drivers/infiniband/hw/ehca/ehca_av.c
@@ -76,8 +76,12 @@ int ehca_calc_ipd(struct ehca_shca *shca, int port,
link = ib_width_enum_to_int(pa.active_width) * pa.active_speed;
- /* IPD = round((link / path) - 1) */
- *ipd = ((link + (path >> 1)) / path) - 1;
+ if (path >= link)
+ /* no need to throttle if path faster than link */
+ *ipd = 0;
+ else
+ /* IPD = round((link / path) - 1) */
+ *ipd = ((link + (path >> 1)) / path) - 1;
return 0;
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index a03a65e..c9f6077 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -460,6 +460,9 @@ static struct ipoib_path *path_rec_create(struct net_device *dev, void *gid)
struct ipoib_dev_priv *priv = netdev_priv(dev);
struct ipoib_path *path;
+ if (!priv->broadcast)
+ return NULL;
+
path = kzalloc(sizeof *path, GFP_ATOMIC);
if (!path)
return NULL;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-11-27 6:21 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-11-27 6:21 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will pull some small fixes for 2.6.24:
Erez Zilber (1):
IB/iser: Add missing counter increment in iser_data_buf_aligned_len()
Jack Morgenstein (1):
mlx4_core: Fix state check in mlx4_qp_modify()
Joachim Fenkes (1):
IB/ehca: Fix static rate regression
Ralph Campbell (4):
IB/ipath: Fix offset returned to ibv_resize_cq()
IB/ipath: Fix error path in QP creation
IB/ipath: Fix offset returned to ibv_modify_srq()
IB/ipath: Normalize error return codes for posting work requests
drivers/infiniband/hw/ehca/ehca_qp.c | 4 +-
drivers/infiniband/hw/ipath/ipath_cq.c | 19 +++++++++---
drivers/infiniband/hw/ipath/ipath_qp.c | 15 ++++++----
drivers/infiniband/hw/ipath/ipath_srq.c | 44 +++++++++++++++++------------
drivers/infiniband/hw/ipath/ipath_verbs.c | 8 +++--
drivers/infiniband/ulp/iser/iser_memory.c | 6 ++-
drivers/net/mlx4/qp.c | 2 +-
7 files changed, 61 insertions(+), 37 deletions(-)
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index 2e3e654..dd12668 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -1203,7 +1203,7 @@ static int internal_modify_qp(struct ib_qp *ibqp,
mqpcb->service_level = attr->ah_attr.sl;
update_mask |= EHCA_BMASK_SET(MQPCB_MASK_SERVICE_LEVEL, 1);
- if (ehca_calc_ipd(shca, my_qp->init_attr.port_num,
+ if (ehca_calc_ipd(shca, mqpcb->prim_phys_port,
attr->ah_attr.static_rate,
&mqpcb->max_static_rate)) {
ret = -EINVAL;
@@ -1302,7 +1302,7 @@ static int internal_modify_qp(struct ib_qp *ibqp,
mqpcb->source_path_bits_al = attr->alt_ah_attr.src_path_bits;
mqpcb->service_level_al = attr->alt_ah_attr.sl;
- if (ehca_calc_ipd(shca, my_qp->init_attr.port_num,
+ if (ehca_calc_ipd(shca, mqpcb->alt_phys_port,
attr->alt_ah_attr.static_rate,
&mqpcb->max_static_rate_al)) {
ret = -EINVAL;
diff --git a/drivers/infiniband/hw/ipath/ipath_cq.c b/drivers/infiniband/hw/ipath/ipath_cq.c
index 08d8ae1..d1380c7 100644
--- a/drivers/infiniband/hw/ipath/ipath_cq.c
+++ b/drivers/infiniband/hw/ipath/ipath_cq.c
@@ -395,12 +395,9 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
goto bail;
}
- /*
- * Return the address of the WC as the offset to mmap.
- * See ipath_mmap() for details.
- */
+ /* Check that we can write the offset to mmap. */
if (udata && udata->outlen >= sizeof(__u64)) {
- __u64 offset = (__u64) wc;
+ __u64 offset = 0;
ret = ib_copy_to_udata(udata, &offset, sizeof(offset));
if (ret)
@@ -450,6 +447,18 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
struct ipath_mmap_info *ip = cq->ip;
ipath_update_mmap_info(dev, ip, sz, wc);
+
+ /*
+ * Return the offset to mmap.
+ * See ipath_mmap() for details.
+ */
+ if (udata && udata->outlen >= sizeof(__u64)) {
+ ret = ib_copy_to_udata(udata, &ip->offset,
+ sizeof(ip->offset));
+ if (ret)
+ goto bail;
+ }
+
spin_lock_irq(&dev->pending_lock);
if (list_empty(&ip->pending_mmaps))
list_add(&ip->pending_mmaps, &dev->pending_mmaps);
diff --git a/drivers/infiniband/hw/ipath/ipath_qp.c b/drivers/infiniband/hw/ipath/ipath_qp.c
index 6a41fdb..b997ff8 100644
--- a/drivers/infiniband/hw/ipath/ipath_qp.c
+++ b/drivers/infiniband/hw/ipath/ipath_qp.c
@@ -835,7 +835,8 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
init_attr->qp_type);
if (err) {
ret = ERR_PTR(err);
- goto bail_rwq;
+ vfree(qp->r_rq.wq);
+ goto bail_qp;
}
qp->ip = NULL;
ipath_reset_qp(qp);
@@ -863,7 +864,7 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
sizeof(offset));
if (err) {
ret = ERR_PTR(err);
- goto bail_rwq;
+ goto bail_ip;
}
} else {
u32 s = sizeof(struct ipath_rwq) +
@@ -875,7 +876,7 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
qp->r_rq.wq);
if (!qp->ip) {
ret = ERR_PTR(-ENOMEM);
- goto bail_rwq;
+ goto bail_ip;
}
err = ib_copy_to_udata(udata, &(qp->ip->offset),
@@ -907,9 +908,11 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
goto bail;
bail_ip:
- kfree(qp->ip);
-bail_rwq:
- vfree(qp->r_rq.wq);
+ if (qp->ip)
+ kref_put(&qp->ip->ref, ipath_release_mmap_info);
+ else
+ vfree(qp->r_rq.wq);
+ ipath_free_qp(&dev->qp_table, qp);
bail_qp:
kfree(qp);
bail_swq:
diff --git a/drivers/infiniband/hw/ipath/ipath_srq.c b/drivers/infiniband/hw/ipath/ipath_srq.c
index 40c36ec..2fef36f 100644
--- a/drivers/infiniband/hw/ipath/ipath_srq.c
+++ b/drivers/infiniband/hw/ipath/ipath_srq.c
@@ -59,7 +59,7 @@ int ipath_post_srq_receive(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
if ((unsigned) wr->num_sge > srq->rq.max_sge) {
*bad_wr = wr;
- ret = -ENOMEM;
+ ret = -EINVAL;
goto bail;
}
@@ -211,11 +211,11 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
struct ib_udata *udata)
{
struct ipath_srq *srq = to_isrq(ibsrq);
+ struct ipath_rwq *wq;
int ret = 0;
if (attr_mask & IB_SRQ_MAX_WR) {
struct ipath_rwq *owq;
- struct ipath_rwq *wq;
struct ipath_rwqe *p;
u32 sz, size, n, head, tail;
@@ -236,27 +236,20 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
goto bail;
}
- /*
- * Return the address of the RWQ as the offset to mmap.
- * See ipath_mmap() for details.
- */
+ /* Check that we can write the offset to mmap. */
if (udata && udata->inlen >= sizeof(__u64)) {
__u64 offset_addr;
- __u64 offset = (__u64) wq;
+ __u64 offset = 0;
ret = ib_copy_from_udata(&offset_addr, udata,
sizeof(offset_addr));
- if (ret) {
- vfree(wq);
- goto bail;
- }
+ if (ret)
+ goto bail_free;
udata->outbuf = (void __user *) offset_addr;
ret = ib_copy_to_udata(udata, &offset,
sizeof(offset));
- if (ret) {
- vfree(wq);
- goto bail;
- }
+ if (ret)
+ goto bail_free;
}
spin_lock_irq(&srq->rq.lock);
@@ -277,10 +270,8 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
else
n -= tail;
if (size <= n) {
- spin_unlock_irq(&srq->rq.lock);
- vfree(wq);
ret = -EINVAL;
- goto bail;
+ goto bail_unlock;
}
n = 0;
p = wq->wq;
@@ -314,6 +305,18 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
u32 s = sizeof(struct ipath_rwq) + size * sz;
ipath_update_mmap_info(dev, ip, s, wq);
+
+ /*
+ * Return the offset to mmap.
+ * See ipath_mmap() for details.
+ */
+ if (udata && udata->inlen >= sizeof(__u64)) {
+ ret = ib_copy_to_udata(udata, &ip->offset,
+ sizeof(ip->offset));
+ if (ret)
+ goto bail;
+ }
+
spin_lock_irq(&dev->pending_lock);
if (list_empty(&ip->pending_mmaps))
list_add(&ip->pending_mmaps,
@@ -328,7 +331,12 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
srq->limit = attr->srq_limit;
spin_unlock_irq(&srq->rq.lock);
}
+ goto bail;
+bail_unlock:
+ spin_unlock_irq(&srq->rq.lock);
+bail_free:
+ vfree(wq);
bail:
return ret;
}
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c
index 74f77e7..c4c9984 100644
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c
@@ -302,8 +302,10 @@ static int ipath_post_one_send(struct ipath_qp *qp, struct ib_send_wr *wr)
next = qp->s_head + 1;
if (next >= qp->s_size)
next = 0;
- if (next == qp->s_last)
- goto bail_inval;
+ if (next == qp->s_last) {
+ ret = -ENOMEM;
+ goto bail;
+ }
wqe = get_swqe_ptr(qp, qp->s_head);
wqe->wr = *wr;
@@ -404,7 +406,7 @@ static int ipath_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
if ((unsigned) wr->num_sge > qp->r_rq.max_sge) {
*bad_wr = wr;
- ret = -ENOMEM;
+ ret = -EINVAL;
goto bail;
}
diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c
index d687980..4a17743 100644
--- a/drivers/infiniband/ulp/iser/iser_memory.c
+++ b/drivers/infiniband/ulp/iser/iser_memory.c
@@ -310,13 +310,15 @@ static unsigned int iser_data_buf_aligned_len(struct iser_data_buf *data,
if (i + 1 < data->dma_nents) {
next_addr = ib_sg_dma_address(ibdev, sg_next(sg));
/* are i, i+1 fragments of the same page? */
- if (end_addr == next_addr)
+ if (end_addr == next_addr) {
+ cnt++;
continue;
- else if (!IS_4K_ALIGNED(end_addr)) {
+ } else if (!IS_4K_ALIGNED(end_addr)) {
ret_len = cnt + 1;
break;
}
}
+ cnt++;
}
if (i == data->dma_nents)
ret_len = cnt; /* loop ended */
diff --git a/drivers/net/mlx4/qp.c b/drivers/net/mlx4/qp.c
index 42b4763..fa24e65 100644
--- a/drivers/net/mlx4/qp.c
+++ b/drivers/net/mlx4/qp.c
@@ -113,7 +113,7 @@ int mlx4_qp_modify(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
struct mlx4_cmd_mailbox *mailbox;
int ret = 0;
- if (cur_state >= MLX4_QP_NUM_STATE || cur_state >= MLX4_QP_NUM_STATE ||
+ if (cur_state >= MLX4_QP_NUM_STATE || new_state >= MLX4_QP_NUM_STATE ||
!op[cur_state][new_state])
return -EINVAL;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-11-14 16:23 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-11-14 16:23 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will pull some low-level driver fixes for 2.6.24:
Ali Ayoub (1):
mlx4_core: Fix possible bad free in mlx4_buf_free()
Jack Morgenstein (1):
mlx4_core: Fix thinko in QP destroy (incorrect bitmap_free)
Joachim Fenkes (2):
IB/ehca: Return physical link information in query_port()
IB/ehca: Fix static rate calculation
Ralph Campbell (2):
IB/ipath: Fix memory leak in ipath_resize_cq() if copy_to_user() fails
IB/ipath: Fix race with ACK retry timeout list management
Steve Wise (1):
RDMA/cxgb3: Set the max_qp_init_rd_atom attribute in query_device
drivers/infiniband/hw/cxgb3/iwch_provider.c | 1 +
drivers/infiniband/hw/ehca/ehca_av.c | 48 ++++++++++++++++++++++-----
drivers/infiniband/hw/ehca/ehca_classes.h | 1 -
drivers/infiniband/hw/ehca/ehca_hca.c | 20 ++++++++---
drivers/infiniband/hw/ehca/ehca_iverbs.h | 3 ++
drivers/infiniband/hw/ehca/ehca_main.c | 3 --
drivers/infiniband/hw/ehca/ehca_qp.c | 29 +++++++---------
drivers/infiniband/hw/ehca/hipz_hw.h | 6 +++-
drivers/infiniband/hw/ipath/ipath_cq.c | 11 ++++--
drivers/infiniband/hw/ipath/ipath_rc.c | 5 ++-
drivers/net/mlx4/alloc.c | 7 ++--
drivers/net/mlx4/qp.c | 2 +-
12 files changed, 89 insertions(+), 47 deletions(-)
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index f0c7775..b5436ca 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -1000,6 +1000,7 @@ static int iwch_query_device(struct ib_device *ibdev,
props->max_sge = dev->attr.max_sge_per_wr;
props->max_sge_rd = 1;
props->max_qp_rd_atom = dev->attr.max_rdma_reads_per_qp;
+ props->max_qp_init_rd_atom = dev->attr.max_rdma_reads_per_qp;
props->max_cq = dev->attr.max_cqs;
props->max_cqe = dev->attr.max_cqes_per_cq;
props->max_mr = dev->attr.max_mem_regs;
diff --git a/drivers/infiniband/hw/ehca/ehca_av.c b/drivers/infiniband/hw/ehca/ehca_av.c
index 97d1086..453eb99 100644
--- a/drivers/infiniband/hw/ehca/ehca_av.c
+++ b/drivers/infiniband/hw/ehca/ehca_av.c
@@ -50,6 +50,38 @@
static struct kmem_cache *av_cache;
+int ehca_calc_ipd(struct ehca_shca *shca, int port,
+ enum ib_rate path_rate, u32 *ipd)
+{
+ int path = ib_rate_to_mult(path_rate);
+ int link, ret;
+ struct ib_port_attr pa;
+
+ if (path_rate == IB_RATE_PORT_CURRENT) {
+ *ipd = 0;
+ return 0;
+ }
+
+ if (unlikely(path < 0)) {
+ ehca_err(&shca->ib_device, "Invalid static rate! path_rate=%x",
+ path_rate);
+ return -EINVAL;
+ }
+
+ ret = ehca_query_port(&shca->ib_device, port, &pa);
+ if (unlikely(ret < 0)) {
+ ehca_err(&shca->ib_device, "Failed to query port ret=%i", ret);
+ return ret;
+ }
+
+ link = ib_width_enum_to_int(pa.active_width) * pa.active_speed;
+
+ /* IPD = round((link / path) - 1) */
+ *ipd = ((link + (path >> 1)) / path) - 1;
+
+ return 0;
+}
+
struct ib_ah *ehca_create_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr)
{
int ret;
@@ -69,15 +101,13 @@ struct ib_ah *ehca_create_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr)
av->av.slid_path_bits = ah_attr->src_path_bits;
if (ehca_static_rate < 0) {
- int ah_mult = ib_rate_to_mult(ah_attr->static_rate);
- int ehca_mult =
- ib_rate_to_mult(shca->sport[ah_attr->port_num].rate );
-
- if (ah_mult >= ehca_mult)
- av->av.ipd = 0;
- else
- av->av.ipd = (ah_mult > 0) ?
- ((ehca_mult - 1) / ah_mult) : 0;
+ u32 ipd;
+ if (ehca_calc_ipd(shca, ah_attr->port_num,
+ ah_attr->static_rate, &ipd)) {
+ ret = -EINVAL;
+ goto create_ah_exit1;
+ }
+ av->av.ipd = ipd;
} else
av->av.ipd = ehca_static_rate;
diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h
index 2d660ae..87f12d4 100644
--- a/drivers/infiniband/hw/ehca/ehca_classes.h
+++ b/drivers/infiniband/hw/ehca/ehca_classes.h
@@ -95,7 +95,6 @@ struct ehca_sma_attr {
struct ehca_sport {
struct ib_cq *ibcq_aqp1;
struct ib_qp *ibqp_aqp1;
- enum ib_rate rate;
enum ib_port_state port_state;
struct ehca_sma_attr saved_attr;
};
diff --git a/drivers/infiniband/hw/ehca/ehca_hca.c b/drivers/infiniband/hw/ehca/ehca_hca.c
index 15806d1..5bd7b59 100644
--- a/drivers/infiniband/hw/ehca/ehca_hca.c
+++ b/drivers/infiniband/hw/ehca/ehca_hca.c
@@ -151,7 +151,6 @@ int ehca_query_port(struct ib_device *ibdev,
}
memset(props, 0, sizeof(struct ib_port_attr));
- props->state = rblock->state;
switch (rblock->max_mtu) {
case 0x1:
@@ -188,11 +187,20 @@ int ehca_query_port(struct ib_device *ibdev,
props->subnet_timeout = rblock->subnet_timeout;
props->init_type_reply = rblock->init_type_reply;
- props->active_width = IB_WIDTH_12X;
- props->active_speed = 0x1;
-
- /* at the moment (logical) link state is always LINK_UP */
- props->phys_state = 0x5;
+ if (rblock->state && rblock->phys_width) {
+ props->phys_state = rblock->phys_pstate;
+ props->state = rblock->phys_state;
+ props->active_width = rblock->phys_width;
+ props->active_speed = rblock->phys_speed;
+ } else {
+ /* old firmware releases don't report physical
+ * port info, so use default values
+ */
+ props->phys_state = 5;
+ props->state = rblock->state;
+ props->active_width = IB_WIDTH_12X;
+ props->active_speed = 0x1;
+ }
query_port1:
ehca_free_fw_ctrlblock(rblock);
diff --git a/drivers/infiniband/hw/ehca/ehca_iverbs.h b/drivers/infiniband/hw/ehca/ehca_iverbs.h
index dce503b..5485799 100644
--- a/drivers/infiniband/hw/ehca/ehca_iverbs.h
+++ b/drivers/infiniband/hw/ehca/ehca_iverbs.h
@@ -189,6 +189,9 @@ int ehca_mmap(struct ib_ucontext *context, struct vm_area_struct *vma);
void ehca_poll_eqs(unsigned long data);
+int ehca_calc_ipd(struct ehca_shca *shca, int port,
+ enum ib_rate path_rate, u32 *ipd);
+
#ifdef CONFIG_PPC_64K_PAGES
void *ehca_alloc_fw_ctrlblock(gfp_t flags);
void ehca_free_fw_ctrlblock(void *ptr);
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index c6cd38c..90d4334 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -327,9 +327,6 @@ static int ehca_sense_attributes(struct ehca_shca *shca)
shca->hw_level = ehca_hw_level;
ehca_gen_dbg(" ... hardware level=%x", shca->hw_level);
- shca->sport[0].rate = IB_RATE_30_GBPS;
- shca->sport[1].rate = IB_RATE_30_GBPS;
-
shca->hca_cap = rblock->hca_cap_indicators;
ehca_gen_dbg(" ... HCA capabilities:");
for (i = 0; i < ARRAY_SIZE(hca_cap_descr); i++)
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index de18264..2e3e654 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -1196,10 +1196,6 @@ static int internal_modify_qp(struct ib_qp *ibqp,
update_mask |= EHCA_BMASK_SET(MQPCB_MASK_QKEY, 1);
}
if (attr_mask & IB_QP_AV) {
- int ah_mult = ib_rate_to_mult(attr->ah_attr.static_rate);
- int ehca_mult = ib_rate_to_mult(shca->sport[my_qp->
- init_attr.port_num].rate);
-
mqpcb->dlid = attr->ah_attr.dlid;
update_mask |= EHCA_BMASK_SET(MQPCB_MASK_DLID, 1);
mqpcb->source_path_bits = attr->ah_attr.src_path_bits;
@@ -1207,11 +1203,12 @@ static int internal_modify_qp(struct ib_qp *ibqp,
mqpcb->service_level = attr->ah_attr.sl;
update_mask |= EHCA_BMASK_SET(MQPCB_MASK_SERVICE_LEVEL, 1);
- if (ah_mult < ehca_mult)
- mqpcb->max_static_rate = (ah_mult > 0) ?
- ((ehca_mult - 1) / ah_mult) : 0;
- else
- mqpcb->max_static_rate = 0;
+ if (ehca_calc_ipd(shca, my_qp->init_attr.port_num,
+ attr->ah_attr.static_rate,
+ &mqpcb->max_static_rate)) {
+ ret = -EINVAL;
+ goto modify_qp_exit2;
+ }
update_mask |= EHCA_BMASK_SET(MQPCB_MASK_MAX_STATIC_RATE, 1);
/*
@@ -1280,10 +1277,6 @@ static int internal_modify_qp(struct ib_qp *ibqp,
(MQPCB_MASK_RDMA_ATOMIC_OUTST_DEST_QP, 1);
}
if (attr_mask & IB_QP_ALT_PATH) {
- int ah_mult = ib_rate_to_mult(attr->alt_ah_attr.static_rate);
- int ehca_mult = ib_rate_to_mult(
- shca->sport[my_qp->init_attr.port_num].rate);
-
if (attr->alt_port_num < 1
|| attr->alt_port_num > shca->num_ports) {
ret = -EINVAL;
@@ -1309,10 +1302,12 @@ static int internal_modify_qp(struct ib_qp *ibqp,
mqpcb->source_path_bits_al = attr->alt_ah_attr.src_path_bits;
mqpcb->service_level_al = attr->alt_ah_attr.sl;
- if (ah_mult > 0 && ah_mult < ehca_mult)
- mqpcb->max_static_rate_al = (ehca_mult - 1) / ah_mult;
- else
- mqpcb->max_static_rate_al = 0;
+ if (ehca_calc_ipd(shca, my_qp->init_attr.port_num,
+ attr->alt_ah_attr.static_rate,
+ &mqpcb->max_static_rate_al)) {
+ ret = -EINVAL;
+ goto modify_qp_exit2;
+ }
/* OpenIB doesn't support alternate retry counts - copy them */
mqpcb->retry_count_al = mqpcb->retry_count;
diff --git a/drivers/infiniband/hw/ehca/hipz_hw.h b/drivers/infiniband/hw/ehca/hipz_hw.h
index d9739e5..485b840 100644
--- a/drivers/infiniband/hw/ehca/hipz_hw.h
+++ b/drivers/infiniband/hw/ehca/hipz_hw.h
@@ -402,7 +402,11 @@ struct hipz_query_port {
u64 max_msg_sz;
u32 max_mtu;
u32 vl_cap;
- u8 reserved2[1900];
+ u32 phys_pstate;
+ u32 phys_state;
+ u32 phys_speed;
+ u32 phys_width;
+ u8 reserved2[1884];
u64 guid_entries[255];
} __attribute__ ((packed));
diff --git a/drivers/infiniband/hw/ipath/ipath_cq.c b/drivers/infiniband/hw/ipath/ipath_cq.c
index 645ed71..08d8ae1 100644
--- a/drivers/infiniband/hw/ipath/ipath_cq.c
+++ b/drivers/infiniband/hw/ipath/ipath_cq.c
@@ -404,7 +404,7 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
ret = ib_copy_to_udata(udata, &offset, sizeof(offset));
if (ret)
- goto bail;
+ goto bail_free;
}
spin_lock_irq(&cq->lock);
@@ -424,10 +424,8 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
else
n = head - tail;
if (unlikely((u32)cqe < n)) {
- spin_unlock_irq(&cq->lock);
- vfree(wc);
ret = -EOVERFLOW;
- goto bail;
+ goto bail_unlock;
}
for (n = 0; tail != head; n++) {
if (cq->ip)
@@ -459,7 +457,12 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
}
ret = 0;
+ goto bail;
+bail_unlock:
+ spin_unlock_irq(&cq->lock);
+bail_free:
+ vfree(wc);
bail:
return ret;
}
diff --git a/drivers/infiniband/hw/ipath/ipath_rc.c b/drivers/infiniband/hw/ipath/ipath_rc.c
index 5c29b2b..120a61b 100644
--- a/drivers/infiniband/hw/ipath/ipath_rc.c
+++ b/drivers/infiniband/hw/ipath/ipath_rc.c
@@ -959,8 +959,9 @@ static int do_rc_ack(struct ipath_qp *qp, u32 aeth, u32 psn, int opcode,
/* If this is a partial ACK, reset the retransmit timer. */
if (qp->s_last != qp->s_tail) {
spin_lock(&dev->pending_lock);
- list_add_tail(&qp->timerwait,
- &dev->pending[dev->pending_index]);
+ if (list_empty(&qp->timerwait))
+ list_add_tail(&qp->timerwait,
+ &dev->pending[dev->pending_index]);
spin_unlock(&dev->pending_lock);
/*
* If we get a partial ACK for a resent operation,
diff --git a/drivers/net/mlx4/alloc.c b/drivers/net/mlx4/alloc.c
index f8d63d3..b226e01 100644
--- a/drivers/net/mlx4/alloc.c
+++ b/drivers/net/mlx4/alloc.c
@@ -171,9 +171,10 @@ void mlx4_buf_free(struct mlx4_dev *dev, int size, struct mlx4_buf *buf)
buf->u.direct.map);
else {
for (i = 0; i < buf->nbufs; ++i)
- dma_free_coherent(&dev->pdev->dev, PAGE_SIZE,
- buf->u.page_list[i].buf,
- buf->u.page_list[i].map);
+ if (buf->u.page_list[i].buf)
+ dma_free_coherent(&dev->pdev->dev, PAGE_SIZE,
+ buf->u.page_list[i].buf,
+ buf->u.page_list[i].map);
kfree(buf->u.page_list);
}
}
diff --git a/drivers/net/mlx4/qp.c b/drivers/net/mlx4/qp.c
index cc4b1be..42b4763 100644
--- a/drivers/net/mlx4/qp.c
+++ b/drivers/net/mlx4/qp.c
@@ -240,7 +240,7 @@ void mlx4_qp_free(struct mlx4_dev *dev, struct mlx4_qp *qp)
mlx4_table_put(dev, &qp_table->auxc_table, qp->qpn);
mlx4_table_put(dev, &qp_table->qp_table, qp->qpn);
- if (qp->qpn < dev->caps.sqp_start + 8)
+ if (qp->qpn >= dev->caps.sqp_start + 8)
mlx4_bitmap_free(&qp_table->bitmap, qp->qpn);
}
EXPORT_SYMBOL_GPL(mlx4_qp_free);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-10-30 22:17 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-10-30 22:17 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will pull some fixes for 2.6.24:
Anton Blanchard (1):
IB/fmr_pool: Stop ib_fmr threads from contributing to load average
Dave Olson (1):
IB/ipath: Fix incorrect use of sizeof on msg buffer (function argument)
Michael Albaugh (1):
IB/ipath: Limit length checksummed in eeprom
Ralph Campbell (1):
IB/ipath: Fix a race where s_last is updated without lock held
Roland Dreier (2):
IPoIB/cm: Fix receive QP cleanup
IB/mlx4: Lock SQ lock in mlx4_ib_post_send()
drivers/infiniband/core/fmr_pool.c | 8 ++++----
drivers/infiniband/hw/ipath/ipath_eeprom.c | 10 +++++++++-
drivers/infiniband/hw/ipath/ipath_intr.c | 18 +++++++++---------
drivers/infiniband/hw/ipath/ipath_ruc.c | 14 +++++++++-----
drivers/infiniband/hw/mlx4/qp.c | 4 ++--
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +-
6 files changed, 34 insertions(+), 22 deletions(-)
diff --git a/drivers/infiniband/core/fmr_pool.c b/drivers/infiniband/core/fmr_pool.c
index d7f6452..e8d5f6b 100644
--- a/drivers/infiniband/core/fmr_pool.c
+++ b/drivers/infiniband/core/fmr_pool.c
@@ -291,10 +291,10 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,
atomic_set(&pool->flush_ser, 0);
init_waitqueue_head(&pool->force_wait);
- pool->thread = kthread_create(ib_fmr_cleanup_thread,
- pool,
- "ib_fmr(%s)",
- device->name);
+ pool->thread = kthread_run(ib_fmr_cleanup_thread,
+ pool,
+ "ib_fmr(%s)",
+ device->name);
if (IS_ERR(pool->thread)) {
printk(KERN_WARNING PFX "couldn't start cleanup thread\n");
ret = PTR_ERR(pool->thread);
diff --git a/drivers/infiniband/hw/ipath/ipath_eeprom.c b/drivers/infiniband/hw/ipath/ipath_eeprom.c
index bcfa3cc..e7c25db 100644
--- a/drivers/infiniband/hw/ipath/ipath_eeprom.c
+++ b/drivers/infiniband/hw/ipath/ipath_eeprom.c
@@ -538,7 +538,15 @@ static u8 flash_csum(struct ipath_flash *ifp, int adjust)
u8 *ip = (u8 *) ifp;
u8 csum = 0, len;
- for (len = 0; len < ifp->if_length; len++)
+ /*
+ * Limit length checksummed to max length of actual data.
+ * Checksum of erased eeprom will still be bad, but we avoid
+ * reading past the end of the buffer we were passed.
+ */
+ len = ifp->if_length;
+ if (len > sizeof(struct ipath_flash))
+ len = sizeof(struct ipath_flash);
+ while (len--)
csum += *ip++;
csum -= ifp->if_csum;
csum = ~csum;
diff --git a/drivers/infiniband/hw/ipath/ipath_intr.c b/drivers/infiniband/hw/ipath/ipath_intr.c
index 6a5dd5c..c61f9da 100644
--- a/drivers/infiniband/hw/ipath/ipath_intr.c
+++ b/drivers/infiniband/hw/ipath/ipath_intr.c
@@ -453,7 +453,7 @@ skip_ibchange:
}
static void handle_supp_msgs(struct ipath_devdata *dd,
- unsigned supp_msgs, char msg[512])
+ unsigned supp_msgs, char *msg, int msgsz)
{
/*
* Print the message unless it's ibc status change only, which
@@ -461,9 +461,9 @@ static void handle_supp_msgs(struct ipath_devdata *dd,
*/
if (dd->ipath_lasterror & ~INFINIPATH_E_IBSTATUSCHANGED) {
int iserr;
- iserr = ipath_decode_err(msg, sizeof msg,
- dd->ipath_lasterror &
- ~INFINIPATH_E_IBSTATUSCHANGED);
+ iserr = ipath_decode_err(msg, msgsz,
+ dd->ipath_lasterror &
+ ~INFINIPATH_E_IBSTATUSCHANGED);
if (dd->ipath_lasterror &
~(INFINIPATH_E_RRCVEGRFULL |
INFINIPATH_E_RRCVHDRFULL | INFINIPATH_E_PKTERRS))
@@ -492,8 +492,8 @@ static void handle_supp_msgs(struct ipath_devdata *dd,
}
static unsigned handle_frequent_errors(struct ipath_devdata *dd,
- ipath_err_t errs, char msg[512],
- int *noprint)
+ ipath_err_t errs, char *msg,
+ int msgsz, int *noprint)
{
unsigned long nc;
static unsigned long nextmsg_time;
@@ -512,7 +512,7 @@ static unsigned handle_frequent_errors(struct ipath_devdata *dd,
nextmsg_time = nc + HZ * 3;
}
else if (supp_msgs) {
- handle_supp_msgs(dd, supp_msgs, msg);
+ handle_supp_msgs(dd, supp_msgs, msg, msgsz);
supp_msgs = 0;
nmsgs = 0;
}
@@ -525,14 +525,14 @@ static unsigned handle_frequent_errors(struct ipath_devdata *dd,
static int handle_errors(struct ipath_devdata *dd, ipath_err_t errs)
{
- char msg[512];
+ char msg[128];
u64 ignore_this_time = 0;
int i, iserr = 0;
int chkerrpkts = 0, noprint = 0;
unsigned supp_msgs;
int log_idx;
- supp_msgs = handle_frequent_errors(dd, errs, msg, &noprint);
+ supp_msgs = handle_frequent_errors(dd, errs, msg, sizeof msg, &noprint);
/* don't report errors that are masked */
errs &= ~dd->ipath_maskederrs;
diff --git a/drivers/infiniband/hw/ipath/ipath_ruc.c b/drivers/infiniband/hw/ipath/ipath_ruc.c
index 4b6b7ee..54c61a9 100644
--- a/drivers/infiniband/hw/ipath/ipath_ruc.c
+++ b/drivers/infiniband/hw/ipath/ipath_ruc.c
@@ -630,11 +630,8 @@ bail:;
void ipath_send_complete(struct ipath_qp *qp, struct ipath_swqe *wqe,
enum ib_wc_status status)
{
- u32 last = qp->s_last;
-
- if (++last == qp->s_size)
- last = 0;
- qp->s_last = last;
+ unsigned long flags;
+ u32 last;
/* See ch. 11.2.4.1 and 10.7.3.1 */
if (!(qp->s_flags & IPATH_S_SIGNAL_REQ_WR) ||
@@ -658,4 +655,11 @@ void ipath_send_complete(struct ipath_qp *qp, struct ipath_swqe *wqe,
wc.port_num = 0;
ipath_cq_enter(to_icq(qp->ibqp.send_cq), &wc, 0);
}
+
+ spin_lock_irqsave(&qp->s_lock, flags);
+ last = qp->s_last;
+ if (++last >= qp->s_size)
+ last = 0;
+ qp->s_last = last;
+ spin_unlock_irqrestore(&qp->s_lock, flags);
}
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 6b33224..8cba9c5 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1282,7 +1282,7 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
int size;
int i;
- spin_lock_irqsave(&qp->rq.lock, flags);
+ spin_lock_irqsave(&qp->sq.lock, flags);
ind = qp->sq.head;
@@ -1448,7 +1448,7 @@ out:
(qp->sq.wqe_cnt - 1));
}
- spin_unlock_irqrestore(&qp->rq.lock, flags);
+ spin_unlock_irqrestore(&qp->sq.lock, flags);
return err;
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 8761077..059cf92 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -60,7 +60,7 @@ static struct ib_qp_attr ipoib_cm_err_attr = {
.qp_state = IB_QPS_ERR
};
-#define IPOIB_CM_RX_DRAIN_WRID 0x7fffffff
+#define IPOIB_CM_RX_DRAIN_WRID 0xffffffff
static struct ib_send_wr ipoib_cm_rx_drain_wr = {
.wr_id = IPOIB_CM_RX_DRAIN_WRID,
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-10-23 16:30 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-10-23 16:30 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
this will get some more fixes/changes for 2.6.24. I have one more
IPoIB feature (support for CM without SRQs) I hope to send later
today, but we'll see...
Anton Blanchard (1):
IPoIB: Use round_jiffies() for ah_reap_task
Jack Morgenstein (2):
IB/mlx4: Sanity check userspace send queue sizes
mlx4_core: Increase command timeout for INIT_HCA to 10 seconds
Joachim Fenkes (5):
IB/ehca: Supply QP token for SRQ base QPs
IB/ehca: Fix masking error in {,re}reg_phys_mr()
IB/ehca: Fix ehca_encode_hwpage_size() and alloc_fmr()
IB/ehca: Change meaning of hca_cap_mr_pgsize
IB/ehca: Enable large page MRs by default
Michael S. Tsirkin (1):
IPoIB/cm: Use common CQ for CM send completions
Roland Dreier (4):
mlx4_core: Kill mlx4_write64_raw()
IB/mthca: Avoid alignment traps when writing doorbells
IPoIB: Rewrite "if (!likely(...))" as "if (unlikely(!(...)))"
IB/uverbs: Fix checking of userspace object ownership
Sean Hefty (2):
RDMA/cma: Add locking around QP accesses
RDMA/cma: Fix deadlock destroying listen requests
drivers/infiniband/core/cma.c | 160 +++++++++++++------------
drivers/infiniband/core/uverbs_cmd.c | 8 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 1 -
drivers/infiniband/hw/ehca/ehca_hca.c | 1 +
drivers/infiniband/hw/ehca/ehca_main.c | 20 +++-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 57 ++++-----
drivers/infiniband/hw/ehca/ehca_qp.c | 4 +-
drivers/infiniband/hw/mlx4/qp.c | 16 +++-
drivers/infiniband/hw/mthca/mthca_cq.c | 53 +++------
drivers/infiniband/hw/mthca/mthca_doorbell.h | 13 ++-
drivers/infiniband/hw/mthca/mthca_eq.c | 21 +---
drivers/infiniband/hw/mthca/mthca_qp.c | 45 +++-----
drivers/infiniband/hw/mthca/mthca_srq.c | 11 +--
drivers/infiniband/ulp/ipoib/ipoib.h | 15 ++-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 114 ++++++++-----------
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 52 +++++----
drivers/infiniband/ulp/ipoib/ipoib_main.c | 4 +-
drivers/net/mlx4/fw.c | 2 +-
include/linux/mlx4/doorbell.h | 11 --
19 files changed, 284 insertions(+), 324 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 93644f8..ee946cc 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -114,13 +114,16 @@ struct rdma_id_private {
struct rdma_bind_list *bind_list;
struct hlist_node node;
- struct list_head list;
- struct list_head listen_list;
+ struct list_head list; /* listen_any_list or cma_device.list */
+ struct list_head listen_list; /* per device listens */
struct cma_device *cma_dev;
struct list_head mc_list;
+ int internal_id;
enum cma_state state;
spinlock_t lock;
+ struct mutex qp_mutex;
+
struct completion comp;
atomic_t refcount;
wait_queue_head_t wait_remove;
@@ -389,6 +392,7 @@ struct rdma_cm_id *rdma_create_id(rdma_cm_event_handler event_handler,
id_priv->id.event_handler = event_handler;
id_priv->id.ps = ps;
spin_lock_init(&id_priv->lock);
+ mutex_init(&id_priv->qp_mutex);
init_completion(&id_priv->comp);
atomic_set(&id_priv->refcount, 1);
init_waitqueue_head(&id_priv->wait_remove);
@@ -474,61 +478,86 @@ EXPORT_SYMBOL(rdma_create_qp);
void rdma_destroy_qp(struct rdma_cm_id *id)
{
- ib_destroy_qp(id->qp);
+ struct rdma_id_private *id_priv;
+
+ id_priv = container_of(id, struct rdma_id_private, id);
+ mutex_lock(&id_priv->qp_mutex);
+ ib_destroy_qp(id_priv->id.qp);
+ id_priv->id.qp = NULL;
+ mutex_unlock(&id_priv->qp_mutex);
}
EXPORT_SYMBOL(rdma_destroy_qp);
-static int cma_modify_qp_rtr(struct rdma_cm_id *id)
+static int cma_modify_qp_rtr(struct rdma_id_private *id_priv)
{
struct ib_qp_attr qp_attr;
int qp_attr_mask, ret;
- if (!id->qp)
- return 0;
+ mutex_lock(&id_priv->qp_mutex);
+ if (!id_priv->id.qp) {
+ ret = 0;
+ goto out;
+ }
/* Need to update QP attributes from default values. */
qp_attr.qp_state = IB_QPS_INIT;
- ret = rdma_init_qp_attr(id, &qp_attr, &qp_attr_mask);
+ ret = rdma_init_qp_attr(&id_priv->id, &qp_attr, &qp_attr_mask);
if (ret)
- return ret;
+ goto out;
- ret = ib_modify_qp(id->qp, &qp_attr, qp_attr_mask);
+ ret = ib_modify_qp(id_priv->id.qp, &qp_attr, qp_attr_mask);
if (ret)
- return ret;
+ goto out;
qp_attr.qp_state = IB_QPS_RTR;
- ret = rdma_init_qp_attr(id, &qp_attr, &qp_attr_mask);
+ ret = rdma_init_qp_attr(&id_priv->id, &qp_attr, &qp_attr_mask);
if (ret)
- return ret;
+ goto out;
- return ib_modify_qp(id->qp, &qp_attr, qp_attr_mask);
+ ret = ib_modify_qp(id_priv->id.qp, &qp_attr, qp_attr_mask);
+out:
+ mutex_unlock(&id_priv->qp_mutex);
+ return ret;
}
-static int cma_modify_qp_rts(struct rdma_cm_id *id)
+static int cma_modify_qp_rts(struct rdma_id_private *id_priv)
{
struct ib_qp_attr qp_attr;
int qp_attr_mask, ret;
- if (!id->qp)
- return 0;
+ mutex_lock(&id_priv->qp_mutex);
+ if (!id_priv->id.qp) {
+ ret = 0;
+ goto out;
+ }
qp_attr.qp_state = IB_QPS_RTS;
- ret = rdma_init_qp_attr(id, &qp_attr, &qp_attr_mask);
+ ret = rdma_init_qp_attr(&id_priv->id, &qp_attr, &qp_attr_mask);
if (ret)
- return ret;
+ goto out;
- return ib_modify_qp(id->qp, &qp_attr, qp_attr_mask);
+ ret = ib_modify_qp(id_priv->id.qp, &qp_attr, qp_attr_mask);
+out:
+ mutex_unlock(&id_priv->qp_mutex);
+ return ret;
}
-static int cma_modify_qp_err(struct rdma_cm_id *id)
+static int cma_modify_qp_err(struct rdma_id_private *id_priv)
{
struct ib_qp_attr qp_attr;
+ int ret;
- if (!id->qp)
- return 0;
+ mutex_lock(&id_priv->qp_mutex);
+ if (!id_priv->id.qp) {
+ ret = 0;
+ goto out;
+ }
qp_attr.qp_state = IB_QPS_ERR;
- return ib_modify_qp(id->qp, &qp_attr, IB_QP_STATE);
+ ret = ib_modify_qp(id_priv->id.qp, &qp_attr, IB_QP_STATE);
+out:
+ mutex_unlock(&id_priv->qp_mutex);
+ return ret;
}
static int cma_ib_init_qp_attr(struct rdma_id_private *id_priv,
@@ -717,50 +746,27 @@ static void cma_cancel_route(struct rdma_id_private *id_priv)
}
}
-static inline int cma_internal_listen(struct rdma_id_private *id_priv)
-{
- return (id_priv->state == CMA_LISTEN) && id_priv->cma_dev &&
- cma_any_addr(&id_priv->id.route.addr.src_addr);
-}
-
-static void cma_destroy_listen(struct rdma_id_private *id_priv)
-{
- cma_exch(id_priv, CMA_DESTROYING);
-
- if (id_priv->cma_dev) {
- switch (rdma_node_get_transport(id_priv->id.device->node_type)) {
- case RDMA_TRANSPORT_IB:
- if (id_priv->cm_id.ib && !IS_ERR(id_priv->cm_id.ib))
- ib_destroy_cm_id(id_priv->cm_id.ib);
- break;
- case RDMA_TRANSPORT_IWARP:
- if (id_priv->cm_id.iw && !IS_ERR(id_priv->cm_id.iw))
- iw_destroy_cm_id(id_priv->cm_id.iw);
- break;
- default:
- break;
- }
- cma_detach_from_dev(id_priv);
- }
- list_del(&id_priv->listen_list);
-
- cma_deref_id(id_priv);
- wait_for_completion(&id_priv->comp);
-
- kfree(id_priv);
-}
-
static void cma_cancel_listens(struct rdma_id_private *id_priv)
{
struct rdma_id_private *dev_id_priv;
+ /*
+ * Remove from listen_any_list to prevent added devices from spawning
+ * additional listen requests.
+ */
mutex_lock(&lock);
list_del(&id_priv->list);
while (!list_empty(&id_priv->listen_list)) {
dev_id_priv = list_entry(id_priv->listen_list.next,
struct rdma_id_private, listen_list);
- cma_destroy_listen(dev_id_priv);
+ /* sync with device removal to avoid duplicate destruction */
+ list_del_init(&dev_id_priv->list);
+ list_del(&dev_id_priv->listen_list);
+ mutex_unlock(&lock);
+
+ rdma_destroy_id(&dev_id_priv->id);
+ mutex_lock(&lock);
}
mutex_unlock(&lock);
}
@@ -848,6 +854,9 @@ void rdma_destroy_id(struct rdma_cm_id *id)
cma_deref_id(id_priv);
wait_for_completion(&id_priv->comp);
+ if (id_priv->internal_id)
+ cma_deref_id(id_priv->id.context);
+
kfree(id_priv->id.route.path_rec);
kfree(id_priv);
}
@@ -857,11 +866,11 @@ static int cma_rep_recv(struct rdma_id_private *id_priv)
{
int ret;
- ret = cma_modify_qp_rtr(&id_priv->id);
+ ret = cma_modify_qp_rtr(id_priv);
if (ret)
goto reject;
- ret = cma_modify_qp_rts(&id_priv->id);
+ ret = cma_modify_qp_rts(id_priv);
if (ret)
goto reject;
@@ -871,7 +880,7 @@ static int cma_rep_recv(struct rdma_id_private *id_priv)
return 0;
reject:
- cma_modify_qp_err(&id_priv->id);
+ cma_modify_qp_err(id_priv);
ib_send_cm_rej(id_priv->cm_id.ib, IB_CM_REJ_CONSUMER_DEFINED,
NULL, 0, NULL, 0);
return ret;
@@ -947,7 +956,7 @@ static int cma_ib_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
/* ignore event */
goto out;
case IB_CM_REJ_RECEIVED:
- cma_modify_qp_err(&id_priv->id);
+ cma_modify_qp_err(id_priv);
event.status = ib_event->param.rej_rcvd.reason;
event.event = RDMA_CM_EVENT_REJECTED;
event.param.conn.private_data = ib_event->private_data;
@@ -1404,14 +1413,13 @@ static void cma_listen_on_dev(struct rdma_id_private *id_priv,
cma_attach_to_dev(dev_id_priv, cma_dev);
list_add_tail(&dev_id_priv->listen_list, &id_priv->listen_list);
+ atomic_inc(&id_priv->refcount);
+ dev_id_priv->internal_id = 1;
ret = rdma_listen(id, id_priv->backlog);
if (ret)
- goto err;
-
- return;
-err:
- cma_destroy_listen(dev_id_priv);
+ printk(KERN_WARNING "RDMA CMA: cma_listen_on_dev, error %d, "
+ "listening on device %s", ret, cma_dev->device->name);
}
static void cma_listen_on_all(struct rdma_id_private *id_priv)
@@ -2264,7 +2272,7 @@ static int cma_connect_iw(struct rdma_id_private *id_priv,
sin = (struct sockaddr_in*) &id_priv->id.route.addr.dst_addr;
cm_id->remote_addr = *sin;
- ret = cma_modify_qp_rtr(&id_priv->id);
+ ret = cma_modify_qp_rtr(id_priv);
if (ret)
goto out;
@@ -2331,7 +2339,7 @@ static int cma_accept_ib(struct rdma_id_private *id_priv,
int qp_attr_mask, ret;
if (id_priv->id.qp) {
- ret = cma_modify_qp_rtr(&id_priv->id);
+ ret = cma_modify_qp_rtr(id_priv);
if (ret)
goto out;
@@ -2370,7 +2378,7 @@ static int cma_accept_iw(struct rdma_id_private *id_priv,
struct iw_cm_conn_param iw_param;
int ret;
- ret = cma_modify_qp_rtr(&id_priv->id);
+ ret = cma_modify_qp_rtr(id_priv);
if (ret)
return ret;
@@ -2442,7 +2450,7 @@ int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
return 0;
reject:
- cma_modify_qp_err(id);
+ cma_modify_qp_err(id_priv);
rdma_reject(id, NULL, 0);
return ret;
}
@@ -2512,7 +2520,7 @@ int rdma_disconnect(struct rdma_cm_id *id)
switch (rdma_node_get_transport(id->device->node_type)) {
case RDMA_TRANSPORT_IB:
- ret = cma_modify_qp_err(id);
+ ret = cma_modify_qp_err(id_priv);
if (ret)
goto out;
/* Initiate or respond to a disconnect. */
@@ -2543,9 +2551,11 @@ static int cma_ib_mc_handler(int status, struct ib_sa_multicast *multicast)
cma_disable_remove(id_priv, CMA_ADDR_RESOLVED))
return 0;
+ mutex_lock(&id_priv->qp_mutex);
if (!status && id_priv->id.qp)
status = ib_attach_mcast(id_priv->id.qp, &multicast->rec.mgid,
multicast->rec.mlid);
+ mutex_unlock(&id_priv->qp_mutex);
memset(&event, 0, sizeof event);
event.status = status;
@@ -2757,16 +2767,12 @@ static void cma_process_remove(struct cma_device *cma_dev)
id_priv = list_entry(cma_dev->id_list.next,
struct rdma_id_private, list);
- if (cma_internal_listen(id_priv)) {
- cma_destroy_listen(id_priv);
- continue;
- }
-
+ list_del(&id_priv->listen_list);
list_del_init(&id_priv->list);
atomic_inc(&id_priv->refcount);
mutex_unlock(&lock);
- ret = cma_remove_id_dev(id_priv);
+ ret = id_priv->internal_id ? 1 : cma_remove_id_dev(id_priv);
cma_deref_id(id_priv);
if (ret)
rdma_destroy_id(&id_priv->id);
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index 01d7008..495c803 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -147,8 +147,12 @@ static struct ib_uobject *__idr_get_uobj(struct idr *idr, int id,
spin_lock(&ib_uverbs_idr_lock);
uobj = idr_find(idr, id);
- if (uobj)
- kref_get(&uobj->ref);
+ if (uobj) {
+ if (uobj->context == context)
+ kref_get(&uobj->ref);
+ else
+ uobj = NULL;
+ }
spin_unlock(&ib_uverbs_idr_lock);
return uobj;
diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h
index 0f7a55d..365bc5d 100644
--- a/drivers/infiniband/hw/ehca/ehca_classes.h
+++ b/drivers/infiniband/hw/ehca/ehca_classes.h
@@ -323,7 +323,6 @@ extern int ehca_static_rate;
extern int ehca_port_act_time;
extern int ehca_use_hp_mr;
extern int ehca_scaling_code;
-extern int ehca_mr_largepage;
struct ipzu_queue_resp {
u32 qe_size; /* queue entry size */
diff --git a/drivers/infiniband/hw/ehca/ehca_hca.c b/drivers/infiniband/hw/ehca/ehca_hca.c
index 4aa3ffa..15806d1 100644
--- a/drivers/infiniband/hw/ehca/ehca_hca.c
+++ b/drivers/infiniband/hw/ehca/ehca_hca.c
@@ -77,6 +77,7 @@ int ehca_query_device(struct ib_device *ibdev, struct ib_device_attr *props)
}
memset(props, 0, sizeof(struct ib_device_attr));
+ props->page_size_cap = shca->hca_cap_mr_pgsize;
props->fw_ver = rblock->hw_ver;
props->max_mr_size = rblock->max_mr_size;
props->vendor_id = rblock->vendor_id >> 8;
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index 403467f..2f51c13 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -65,7 +65,7 @@ int ehca_port_act_time = 30;
int ehca_poll_all_eqs = 1;
int ehca_static_rate = -1;
int ehca_scaling_code = 0;
-int ehca_mr_largepage = 0;
+int ehca_mr_largepage = 1;
module_param_named(open_aqp1, ehca_open_aqp1, int, S_IRUGO);
module_param_named(debug_level, ehca_debug_level, int, S_IRUGO);
@@ -260,13 +260,20 @@ static struct cap_descr {
{ HCA_CAP_MINI_QP, "HCA_CAP_MINI_QP" },
};
-int ehca_sense_attributes(struct ehca_shca *shca)
+static int ehca_sense_attributes(struct ehca_shca *shca)
{
int i, ret = 0;
u64 h_ret;
struct hipz_query_hca *rblock;
struct hipz_query_port *port;
+ static const u32 pgsize_map[] = {
+ HCA_CAP_MR_PGSIZE_4K, 0x1000,
+ HCA_CAP_MR_PGSIZE_64K, 0x10000,
+ HCA_CAP_MR_PGSIZE_1M, 0x100000,
+ HCA_CAP_MR_PGSIZE_16M, 0x1000000,
+ };
+
rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!rblock) {
ehca_gen_err("Cannot allocate rblock memory.");
@@ -329,8 +336,15 @@ int ehca_sense_attributes(struct ehca_shca *shca)
if (EHCA_BMASK_GET(hca_cap_descr[i].mask, shca->hca_cap))
ehca_gen_dbg(" %s", hca_cap_descr[i].descr);
- shca->hca_cap_mr_pgsize = rblock->memory_page_size_supported;
+ /* translate supported MR page sizes; always support 4K */
+ shca->hca_cap_mr_pgsize = EHCA_PAGESIZE;
+ if (ehca_mr_largepage) { /* support extra sizes only if enabled */
+ for (i = 0; i < ARRAY_SIZE(pgsize_map); i += 2)
+ if (rblock->memory_page_size_supported & pgsize_map[i])
+ shca->hca_cap_mr_pgsize |= pgsize_map[i + 1];
+ }
+ /* query max MTU from first port -- it's the same for all ports */
port = (struct hipz_query_port *)rblock;
h_ret = hipz_h_query_port(shca->ipz_hca_handle, 1, port);
if (h_ret != H_SUCCESS) {
diff --git a/drivers/infiniband/hw/ehca/ehca_mrmw.c b/drivers/infiniband/hw/ehca/ehca_mrmw.c
index da88738..bb97915 100644
--- a/drivers/infiniband/hw/ehca/ehca_mrmw.c
+++ b/drivers/infiniband/hw/ehca/ehca_mrmw.c
@@ -72,24 +72,14 @@ enum ehca_mr_pgsize {
static u32 ehca_encode_hwpage_size(u32 pgsize)
{
- u32 idx = 0;
- pgsize >>= 12;
- /*
- * map mr page size into hw code:
- * 0, 1, 2, 3 for 4K, 64K, 1M, 64M
- */
- while (!(pgsize & 1)) {
- idx++;
- pgsize >>= 4;
- }
- return idx;
+ int log = ilog2(pgsize);
+ WARN_ON(log < 12 || log > 24 || log & 3);
+ return (log - 12) / 4;
}
static u64 ehca_get_max_hwpage_size(struct ehca_shca *shca)
{
- if (shca->hca_cap_mr_pgsize & HCA_CAP_MR_PGSIZE_16M)
- return EHCA_MR_PGSIZE16M;
- return EHCA_MR_PGSIZE4K;
+ return 1UL << ilog2(shca->hca_cap_mr_pgsize);
}
static struct ehca_mr *ehca_mr_new(void)
@@ -259,7 +249,7 @@ struct ib_mr *ehca_reg_phys_mr(struct ib_pd *pd,
pginfo.u.phy.num_phys_buf = num_phys_buf;
pginfo.u.phy.phys_buf_array = phys_buf_array;
pginfo.next_hwpage =
- ((u64)iova_start & ~(hw_pgsize - 1)) / hw_pgsize;
+ ((u64)iova_start & ~PAGE_MASK) / hw_pgsize;
ret = ehca_reg_mr(shca, e_mr, iova_start, size, mr_access_flags,
e_pd, &pginfo, &e_mr->ib.ib_mr.lkey,
@@ -296,7 +286,7 @@ struct ib_mr *ehca_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
container_of(pd->device, struct ehca_shca, ib_device);
struct ehca_pd *e_pd = container_of(pd, struct ehca_pd, ib_pd);
struct ehca_mr_pginfo pginfo;
- int ret;
+ int ret, page_shift;
u32 num_kpages;
u32 num_hwpages;
u64 hwpage_size;
@@ -351,19 +341,20 @@ struct ib_mr *ehca_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
/* determine number of MR pages */
num_kpages = NUM_CHUNKS((virt % PAGE_SIZE) + length, PAGE_SIZE);
/* select proper hw_pgsize */
- if (ehca_mr_largepage &&
- (shca->hca_cap_mr_pgsize & HCA_CAP_MR_PGSIZE_16M)) {
- int page_shift = PAGE_SHIFT;
- if (e_mr->umem->hugetlb) {
- /* determine page_shift, clamp between 4K and 16M */
- page_shift = (fls64(length - 1) + 3) & ~3;
- page_shift = min(max(page_shift, EHCA_MR_PGSHIFT4K),
- EHCA_MR_PGSHIFT16M);
- }
- hwpage_size = 1UL << page_shift;
- } else
- hwpage_size = EHCA_MR_PGSIZE4K; /* ehca1 only supports 4k */
- ehca_dbg(pd->device, "hwpage_size=%lx", hwpage_size);
+ page_shift = PAGE_SHIFT;
+ if (e_mr->umem->hugetlb) {
+ /* determine page_shift, clamp between 4K and 16M */
+ page_shift = (fls64(length - 1) + 3) & ~3;
+ page_shift = min(max(page_shift, EHCA_MR_PGSHIFT4K),
+ EHCA_MR_PGSHIFT16M);
+ }
+ hwpage_size = 1UL << page_shift;
+
+ /* now that we have the desired page size, shift until it's
+ * supported, too. 4K is always supported, so this terminates.
+ */
+ while (!(hwpage_size & shca->hca_cap_mr_pgsize))
+ hwpage_size >>= 4;
reg_user_mr_fallback:
num_hwpages = NUM_CHUNKS((virt % hwpage_size) + length, hwpage_size);
@@ -547,7 +538,7 @@ int ehca_rereg_phys_mr(struct ib_mr *mr,
pginfo.u.phy.num_phys_buf = num_phys_buf;
pginfo.u.phy.phys_buf_array = phys_buf_array;
pginfo.next_hwpage =
- ((u64)iova_start & ~(hw_pgsize - 1)) / hw_pgsize;
+ ((u64)iova_start & ~PAGE_MASK) / hw_pgsize;
}
if (mr_rereg_mask & IB_MR_REREG_ACCESS)
new_acl = mr_access_flags;
@@ -809,8 +800,9 @@ struct ib_fmr *ehca_alloc_fmr(struct ib_pd *pd,
ib_fmr = ERR_PTR(-EINVAL);
goto alloc_fmr_exit0;
}
- hw_pgsize = ehca_get_max_hwpage_size(shca);
- if ((1 << fmr_attr->page_shift) != hw_pgsize) {
+
+ hw_pgsize = 1 << fmr_attr->page_shift;
+ if (!(hw_pgsize & shca->hca_cap_mr_pgsize)) {
ehca_err(pd->device, "unsupported fmr_attr->page_shift=%x",
fmr_attr->page_shift);
ib_fmr = ERR_PTR(-EINVAL);
@@ -826,6 +818,7 @@ struct ib_fmr *ehca_alloc_fmr(struct ib_pd *pd,
/* register MR on HCA */
memset(&pginfo, 0, sizeof(pginfo));
+ pginfo.hwpage_size = hw_pgsize;
/*
* pginfo.num_hwpages==0, ie register_rpages() will not be called
* but deferred to map_phys_fmr()
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index e2bd62b..de18264 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -451,7 +451,6 @@ static struct ehca_qp *internal_create_qp(
has_srq = 1;
parms.ext_type = EQPT_SRQBASE;
parms.srq_qpn = my_srq->real_qp_num;
- parms.srq_token = my_srq->token;
}
if (is_llqp && has_srq) {
@@ -583,6 +582,9 @@ static struct ehca_qp *internal_create_qp(
goto create_qp_exit1;
}
+ if (has_srq)
+ parms.srq_token = my_qp->token;
+
parms.servicetype = ibqptype2servicetype(qp_type);
if (parms.servicetype < 0) {
ret = -EINVAL;
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 31a480e..6b33224 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -63,6 +63,10 @@ struct mlx4_ib_sqp {
u8 header_buf[MLX4_IB_UD_HEADER_SIZE];
};
+enum {
+ MLX4_IB_MIN_SQ_STRIDE = 6
+};
+
static const __be32 mlx4_ib_opcode[] = {
[IB_WR_SEND] = __constant_cpu_to_be32(MLX4_OPCODE_SEND),
[IB_WR_SEND_WITH_IMM] = __constant_cpu_to_be32(MLX4_OPCODE_SEND_IMM),
@@ -285,9 +289,17 @@ static int set_kernel_sq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
return 0;
}
-static int set_user_sq_size(struct mlx4_ib_qp *qp,
+static int set_user_sq_size(struct mlx4_ib_dev *dev,
+ struct mlx4_ib_qp *qp,
struct mlx4_ib_create_qp *ucmd)
{
+ /* Sanity check SQ size before proceeding */
+ if ((1 << ucmd->log_sq_bb_count) > dev->dev->caps.max_wqes ||
+ ucmd->log_sq_stride >
+ ilog2(roundup_pow_of_two(dev->dev->caps.max_sq_desc_sz)) ||
+ ucmd->log_sq_stride < MLX4_IB_MIN_SQ_STRIDE)
+ return -EINVAL;
+
qp->sq.wqe_cnt = 1 << ucmd->log_sq_bb_count;
qp->sq.wqe_shift = ucmd->log_sq_stride;
@@ -330,7 +342,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
qp->sq_no_prefetch = ucmd.sq_no_prefetch;
- err = set_user_sq_size(qp, &ucmd);
+ err = set_user_sq_size(dev, qp, &ucmd);
if (err)
goto err;
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
index be6e1e0..6bd9f13 100644
--- a/drivers/infiniband/hw/mthca/mthca_cq.c
+++ b/drivers/infiniband/hw/mthca/mthca_cq.c
@@ -204,16 +204,11 @@ static void dump_cqe(struct mthca_dev *dev, void *cqe_ptr)
static inline void update_cons_index(struct mthca_dev *dev, struct mthca_cq *cq,
int incr)
{
- __be32 doorbell[2];
-
if (mthca_is_memfree(dev)) {
*cq->set_ci_db = cpu_to_be32(cq->cons_index);
wmb();
} else {
- doorbell[0] = cpu_to_be32(MTHCA_TAVOR_CQ_DB_INC_CI | cq->cqn);
- doorbell[1] = cpu_to_be32(incr - 1);
-
- mthca_write64(doorbell,
+ mthca_write64(MTHCA_TAVOR_CQ_DB_INC_CI | cq->cqn, incr - 1,
dev->kar + MTHCA_CQ_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
/*
@@ -731,17 +726,12 @@ repoll:
int mthca_tavor_arm_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags)
{
- __be32 doorbell[2];
+ u32 dbhi = ((flags & IB_CQ_SOLICITED_MASK) == IB_CQ_SOLICITED ?
+ MTHCA_TAVOR_CQ_DB_REQ_NOT_SOL :
+ MTHCA_TAVOR_CQ_DB_REQ_NOT) |
+ to_mcq(cq)->cqn;
- doorbell[0] = cpu_to_be32(((flags & IB_CQ_SOLICITED_MASK) ==
- IB_CQ_SOLICITED ?
- MTHCA_TAVOR_CQ_DB_REQ_NOT_SOL :
- MTHCA_TAVOR_CQ_DB_REQ_NOT) |
- to_mcq(cq)->cqn);
- doorbell[1] = (__force __be32) 0xffffffff;
-
- mthca_write64(doorbell,
- to_mdev(cq->device)->kar + MTHCA_CQ_DOORBELL,
+ mthca_write64(dbhi, 0xffffffff, to_mdev(cq->device)->kar + MTHCA_CQ_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&to_mdev(cq->device)->doorbell_lock));
return 0;
@@ -750,19 +740,16 @@ int mthca_tavor_arm_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags)
int mthca_arbel_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
{
struct mthca_cq *cq = to_mcq(ibcq);
- __be32 doorbell[2];
- u32 sn;
- __be32 ci;
-
- sn = cq->arm_sn & 3;
- ci = cpu_to_be32(cq->cons_index);
+ __be32 db_rec[2];
+ u32 dbhi;
+ u32 sn = cq->arm_sn & 3;
- doorbell[0] = ci;
- doorbell[1] = cpu_to_be32((cq->cqn << 8) | (2 << 5) | (sn << 3) |
- ((flags & IB_CQ_SOLICITED_MASK) ==
- IB_CQ_SOLICITED ? 1 : 2));
+ db_rec[0] = cpu_to_be32(cq->cons_index);
+ db_rec[1] = cpu_to_be32((cq->cqn << 8) | (2 << 5) | (sn << 3) |
+ ((flags & IB_CQ_SOLICITED_MASK) ==
+ IB_CQ_SOLICITED ? 1 : 2));
- mthca_write_db_rec(doorbell, cq->arm_db);
+ mthca_write_db_rec(db_rec, cq->arm_db);
/*
* Make sure that the doorbell record in host memory is
@@ -770,14 +757,12 @@ int mthca_arbel_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
*/
wmb();
- doorbell[0] = cpu_to_be32((sn << 28) |
- ((flags & IB_CQ_SOLICITED_MASK) == IB_CQ_SOLICITED ?
- MTHCA_ARBEL_CQ_DB_REQ_NOT_SOL :
- MTHCA_ARBEL_CQ_DB_REQ_NOT) |
- cq->cqn);
- doorbell[1] = ci;
+ dbhi = (sn << 28) |
+ ((flags & IB_CQ_SOLICITED_MASK) == IB_CQ_SOLICITED ?
+ MTHCA_ARBEL_CQ_DB_REQ_NOT_SOL :
+ MTHCA_ARBEL_CQ_DB_REQ_NOT) | cq->cqn;
- mthca_write64(doorbell,
+ mthca_write64(dbhi, cq->cons_index,
to_mdev(ibcq->device)->kar + MTHCA_CQ_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&to_mdev(ibcq->device)->doorbell_lock));
diff --git a/drivers/infiniband/hw/mthca/mthca_doorbell.h b/drivers/infiniband/hw/mthca/mthca_doorbell.h
index dd9a44d..b374dc3 100644
--- a/drivers/infiniband/hw/mthca/mthca_doorbell.h
+++ b/drivers/infiniband/hw/mthca/mthca_doorbell.h
@@ -58,10 +58,10 @@ static inline void mthca_write64_raw(__be64 val, void __iomem *dest)
__raw_writeq((__force u64) val, dest);
}
-static inline void mthca_write64(__be32 val[2], void __iomem *dest,
+static inline void mthca_write64(u32 hi, u32 lo, void __iomem *dest,
spinlock_t *doorbell_lock)
{
- __raw_writeq(*(u64 *) val, dest);
+ __raw_writeq((__force u64) cpu_to_be64((u64) hi << 32 | lo), dest);
}
static inline void mthca_write_db_rec(__be32 val[2], __be32 *db)
@@ -87,14 +87,17 @@ static inline void mthca_write64_raw(__be64 val, void __iomem *dest)
__raw_writel(((__force u32 *) &val)[1], dest + 4);
}
-static inline void mthca_write64(__be32 val[2], void __iomem *dest,
+static inline void mthca_write64(u32 hi, u32 lo, void __iomem *dest,
spinlock_t *doorbell_lock)
{
unsigned long flags;
+ hi = (__force u32) cpu_to_be32(hi);
+ lo = (__force u32) cpu_to_be32(lo);
+
spin_lock_irqsave(doorbell_lock, flags);
- __raw_writel((__force u32) val[0], dest);
- __raw_writel((__force u32) val[1], dest + 4);
+ __raw_writel(hi, dest);
+ __raw_writel(lo, dest + 4);
spin_unlock_irqrestore(doorbell_lock, flags);
}
diff --git a/drivers/infiniband/hw/mthca/mthca_eq.c b/drivers/infiniband/hw/mthca/mthca_eq.c
index 8592b26..b29de51 100644
--- a/drivers/infiniband/hw/mthca/mthca_eq.c
+++ b/drivers/infiniband/hw/mthca/mthca_eq.c
@@ -173,11 +173,6 @@ static inline u64 async_mask(struct mthca_dev *dev)
static inline void tavor_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci)
{
- __be32 doorbell[2];
-
- doorbell[0] = cpu_to_be32(MTHCA_EQ_DB_SET_CI | eq->eqn);
- doorbell[1] = cpu_to_be32(ci & (eq->nent - 1));
-
/*
* This barrier makes sure that all updates to ownership bits
* done by set_eqe_hw() hit memory before the consumer index
@@ -187,7 +182,7 @@ static inline void tavor_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u
* having set_eqe_hw() overwrite the owner field.
*/
wmb();
- mthca_write64(doorbell,
+ mthca_write64(MTHCA_EQ_DB_SET_CI | eq->eqn, ci & (eq->nent - 1),
dev->kar + MTHCA_EQ_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
@@ -212,12 +207,7 @@ static inline void set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci)
static inline void tavor_eq_req_not(struct mthca_dev *dev, int eqn)
{
- __be32 doorbell[2];
-
- doorbell[0] = cpu_to_be32(MTHCA_EQ_DB_REQ_NOT | eqn);
- doorbell[1] = 0;
-
- mthca_write64(doorbell,
+ mthca_write64(MTHCA_EQ_DB_REQ_NOT | eqn, 0,
dev->kar + MTHCA_EQ_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
@@ -230,12 +220,7 @@ static inline void arbel_eq_req_not(struct mthca_dev *dev, u32 eqn_mask)
static inline void disarm_cq(struct mthca_dev *dev, int eqn, int cqn)
{
if (!mthca_is_memfree(dev)) {
- __be32 doorbell[2];
-
- doorbell[0] = cpu_to_be32(MTHCA_EQ_DB_DISARM_CQ | eqn);
- doorbell[1] = cpu_to_be32(cqn);
-
- mthca_write64(doorbell,
+ mthca_write64(MTHCA_EQ_DB_DISARM_CQ | eqn, cqn,
dev->kar + MTHCA_EQ_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index df01b20..0e5461c 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -1799,15 +1799,11 @@ int mthca_tavor_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
out:
if (likely(nreq)) {
- __be32 doorbell[2];
-
- doorbell[0] = cpu_to_be32(((qp->sq.next_ind << qp->sq.wqe_shift) +
- qp->send_wqe_offset) | f0 | op0);
- doorbell[1] = cpu_to_be32((qp->qpn << 8) | size0);
-
wmb();
- mthca_write64(doorbell,
+ mthca_write64(((qp->sq.next_ind << qp->sq.wqe_shift) +
+ qp->send_wqe_offset) | f0 | op0,
+ (qp->qpn << 8) | size0,
dev->kar + MTHCA_SEND_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
/*
@@ -1829,7 +1825,6 @@ int mthca_tavor_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
{
struct mthca_dev *dev = to_mdev(ibqp->device);
struct mthca_qp *qp = to_mqp(ibqp);
- __be32 doorbell[2];
unsigned long flags;
int err = 0;
int nreq;
@@ -1907,13 +1902,10 @@ int mthca_tavor_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) {
nreq = 0;
- doorbell[0] = cpu_to_be32((qp->rq.next_ind << qp->rq.wqe_shift) | size0);
- doorbell[1] = cpu_to_be32(qp->qpn << 8);
-
wmb();
- mthca_write64(doorbell,
- dev->kar + MTHCA_RECEIVE_DOORBELL,
+ mthca_write64((qp->rq.next_ind << qp->rq.wqe_shift) | size0,
+ qp->qpn << 8, dev->kar + MTHCA_RECEIVE_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
qp->rq.next_ind = ind;
@@ -1923,13 +1915,10 @@ int mthca_tavor_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
out:
if (likely(nreq)) {
- doorbell[0] = cpu_to_be32((qp->rq.next_ind << qp->rq.wqe_shift) | size0);
- doorbell[1] = cpu_to_be32((qp->qpn << 8) | nreq);
-
wmb();
- mthca_write64(doorbell,
- dev->kar + MTHCA_RECEIVE_DOORBELL,
+ mthca_write64((qp->rq.next_ind << qp->rq.wqe_shift) | size0,
+ qp->qpn << 8 | nreq, dev->kar + MTHCA_RECEIVE_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
@@ -1951,7 +1940,7 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
{
struct mthca_dev *dev = to_mdev(ibqp->device);
struct mthca_qp *qp = to_mqp(ibqp);
- __be32 doorbell[2];
+ u32 dbhi;
void *wqe;
void *prev_wqe;
unsigned long flags;
@@ -1981,10 +1970,8 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
if (unlikely(nreq == MTHCA_ARBEL_MAX_WQES_PER_SEND_DB)) {
nreq = 0;
- doorbell[0] = cpu_to_be32((MTHCA_ARBEL_MAX_WQES_PER_SEND_DB << 24) |
- ((qp->sq.head & 0xffff) << 8) |
- f0 | op0);
- doorbell[1] = cpu_to_be32((qp->qpn << 8) | size0);
+ dbhi = (MTHCA_ARBEL_MAX_WQES_PER_SEND_DB << 24) |
+ ((qp->sq.head & 0xffff) << 8) | f0 | op0;
qp->sq.head += MTHCA_ARBEL_MAX_WQES_PER_SEND_DB;
@@ -2000,7 +1987,8 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
* write MMIO send doorbell.
*/
wmb();
- mthca_write64(doorbell,
+
+ mthca_write64(dbhi, (qp->qpn << 8) | size0,
dev->kar + MTHCA_SEND_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
@@ -2154,10 +2142,7 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
out:
if (likely(nreq)) {
- doorbell[0] = cpu_to_be32((nreq << 24) |
- ((qp->sq.head & 0xffff) << 8) |
- f0 | op0);
- doorbell[1] = cpu_to_be32((qp->qpn << 8) | size0);
+ dbhi = (nreq << 24) | ((qp->sq.head & 0xffff) << 8) | f0 | op0;
qp->sq.head += nreq;
@@ -2173,8 +2158,8 @@ out:
* write MMIO send doorbell.
*/
wmb();
- mthca_write64(doorbell,
- dev->kar + MTHCA_SEND_DOORBELL,
+
+ mthca_write64(dbhi, (qp->qpn << 8) | size0, dev->kar + MTHCA_SEND_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
diff --git a/drivers/infiniband/hw/mthca/mthca_srq.c b/drivers/infiniband/hw/mthca/mthca_srq.c
index 3f58c11..553d681 100644
--- a/drivers/infiniband/hw/mthca/mthca_srq.c
+++ b/drivers/infiniband/hw/mthca/mthca_srq.c
@@ -491,7 +491,6 @@ int mthca_tavor_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
{
struct mthca_dev *dev = to_mdev(ibsrq->device);
struct mthca_srq *srq = to_msrq(ibsrq);
- __be32 doorbell[2];
unsigned long flags;
int err = 0;
int first_ind;
@@ -563,16 +562,13 @@ int mthca_tavor_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) {
nreq = 0;
- doorbell[0] = cpu_to_be32(first_ind << srq->wqe_shift);
- doorbell[1] = cpu_to_be32(srq->srqn << 8);
-
/*
* Make sure that descriptors are written
* before doorbell is rung.
*/
wmb();
- mthca_write64(doorbell,
+ mthca_write64(first_ind << srq->wqe_shift, srq->srqn << 8,
dev->kar + MTHCA_RECEIVE_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
@@ -581,16 +577,13 @@ int mthca_tavor_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
}
if (likely(nreq)) {
- doorbell[0] = cpu_to_be32(first_ind << srq->wqe_shift);
- doorbell[1] = cpu_to_be32((srq->srqn << 8) | nreq);
-
/*
* Make sure that descriptors are written before
* doorbell is rung.
*/
wmb();
- mthca_write64(doorbell,
+ mthca_write64(first_ind << srq->wqe_shift, (srq->srqn << 8) | nreq,
dev->kar + MTHCA_RECEIVE_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 6545fa7..0a00ea0 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -84,9 +84,8 @@ enum {
IPOIB_MCAST_RUN = 6,
IPOIB_STOP_REAPER = 7,
IPOIB_MCAST_STARTED = 8,
- IPOIB_FLAG_NETIF_STOPPED = 9,
- IPOIB_FLAG_ADMIN_CM = 10,
- IPOIB_FLAG_UMCAST = 11,
+ IPOIB_FLAG_ADMIN_CM = 9,
+ IPOIB_FLAG_UMCAST = 10,
IPOIB_MAX_BACKOFF_SECONDS = 16,
@@ -98,9 +97,9 @@ enum {
#define IPOIB_OP_RECV (1ul << 31)
#ifdef CONFIG_INFINIBAND_IPOIB_CM
-#define IPOIB_CM_OP_SRQ (1ul << 30)
+#define IPOIB_OP_CM (1ul << 30)
#else
-#define IPOIB_CM_OP_SRQ (0)
+#define IPOIB_OP_CM (0)
#endif
/* structs */
@@ -197,7 +196,6 @@ struct ipoib_cm_rx {
struct ipoib_cm_tx {
struct ib_cm_id *id;
- struct ib_cq *cq;
struct ib_qp *qp;
struct list_head list;
struct net_device *dev;
@@ -294,6 +292,7 @@ struct ipoib_dev_priv {
unsigned tx_tail;
struct ib_sge tx_sge;
struct ib_send_wr tx_wr;
+ unsigned tx_outstanding;
struct ib_wc ibwc[IPOIB_NUM_WC];
@@ -502,6 +501,7 @@ void ipoib_cm_destroy_tx(struct ipoib_cm_tx *tx);
void ipoib_cm_skb_too_long(struct net_device* dev, struct sk_buff *skb,
unsigned int mtu);
void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc);
+void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc);
#else
struct ipoib_cm_tx;
@@ -590,6 +590,9 @@ static inline void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *w
{
}
+static inline void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc)
+{
+}
#endif
#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 0a0dcb8..8761077 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -87,7 +87,7 @@ static int ipoib_cm_post_receive(struct net_device *dev, int id)
struct ib_recv_wr *bad_wr;
int i, ret;
- priv->cm.rx_wr.wr_id = id | IPOIB_CM_OP_SRQ;
+ priv->cm.rx_wr.wr_id = id | IPOIB_OP_CM | IPOIB_OP_RECV;
for (i = 0; i < IPOIB_CM_RX_SG; ++i)
priv->cm.rx_sge[i].addr = priv->cm.srq_ring[id].mapping[i];
@@ -401,7 +401,7 @@ static void skb_put_frags(struct sk_buff *skb, unsigned int hdr_space,
void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
- unsigned int wr_id = wc->wr_id & ~IPOIB_CM_OP_SRQ;
+ unsigned int wr_id = wc->wr_id & ~(IPOIB_OP_CM | IPOIB_OP_RECV);
struct sk_buff *skb, *newskb;
struct ipoib_cm_rx *p;
unsigned long flags;
@@ -412,7 +412,7 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
wr_id, wc->status);
if (unlikely(wr_id >= ipoib_recvq_size)) {
- if (wr_id == (IPOIB_CM_RX_DRAIN_WRID & ~IPOIB_CM_OP_SRQ)) {
+ if (wr_id == (IPOIB_CM_RX_DRAIN_WRID & ~(IPOIB_OP_CM | IPOIB_OP_RECV))) {
spin_lock_irqsave(&priv->lock, flags);
list_splice_init(&priv->cm.rx_drain_list, &priv->cm.rx_reap_list);
ipoib_cm_start_rx_drain(priv);
@@ -434,7 +434,7 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
goto repost;
}
- if (!likely(wr_id & IPOIB_CM_RX_UPDATE_MASK)) {
+ if (unlikely(!(wr_id & IPOIB_CM_RX_UPDATE_MASK))) {
p = wc->qp->qp_context;
if (p && time_after_eq(jiffies, p->jiffies + IPOIB_CM_RX_UPDATE_TIME)) {
spin_lock_irqsave(&priv->lock, flags);
@@ -498,7 +498,7 @@ static inline int post_send(struct ipoib_dev_priv *priv,
priv->tx_sge.addr = addr;
priv->tx_sge.length = len;
- priv->tx_wr.wr_id = wr_id;
+ priv->tx_wr.wr_id = wr_id | IPOIB_OP_CM;
return ib_post_send(tx->qp, &priv->tx_wr, &bad_wr);
}
@@ -549,20 +549,19 @@ void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_
dev->trans_start = jiffies;
++tx->tx_head;
- if (tx->tx_head - tx->tx_tail == ipoib_sendq_size) {
+ if (++priv->tx_outstanding == ipoib_sendq_size) {
ipoib_dbg(priv, "TX ring 0x%x full, stopping kernel net queue\n",
tx->qp->qp_num);
netif_stop_queue(dev);
- set_bit(IPOIB_FLAG_NETIF_STOPPED, &tx->flags);
}
}
}
-static void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ipoib_cm_tx *tx,
- struct ib_wc *wc)
+void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ib_wc *wc)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
- unsigned int wr_id = wc->wr_id;
+ struct ipoib_cm_tx *tx = wc->qp->qp_context;
+ unsigned int wr_id = wc->wr_id & ~IPOIB_OP_CM;
struct ipoib_tx_buf *tx_req;
unsigned long flags;
@@ -587,11 +586,10 @@ static void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ipoib_cm_tx *tx
spin_lock_irqsave(&priv->tx_lock, flags);
++tx->tx_tail;
- if (unlikely(test_bit(IPOIB_FLAG_NETIF_STOPPED, &tx->flags)) &&
- tx->tx_head - tx->tx_tail <= ipoib_sendq_size >> 1) {
- clear_bit(IPOIB_FLAG_NETIF_STOPPED, &tx->flags);
+ if (unlikely(--priv->tx_outstanding == ipoib_sendq_size >> 1) &&
+ netif_queue_stopped(dev) &&
+ test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
netif_wake_queue(dev);
- }
if (wc->status != IB_WC_SUCCESS &&
wc->status != IB_WC_WR_FLUSH_ERR) {
@@ -614,11 +612,6 @@ static void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ipoib_cm_tx *tx
tx->neigh = NULL;
}
- /* queue would be re-started anyway when TX is destroyed,
- * but it makes sense to do it ASAP here. */
- if (test_and_clear_bit(IPOIB_FLAG_NETIF_STOPPED, &tx->flags))
- netif_wake_queue(dev);
-
if (test_and_clear_bit(IPOIB_FLAG_INITIALIZED, &tx->flags)) {
list_move(&tx->list, &priv->cm.reap_list);
queue_work(ipoib_workqueue, &priv->cm.reap_task);
@@ -632,19 +625,6 @@ static void ipoib_cm_handle_tx_wc(struct net_device *dev, struct ipoib_cm_tx *tx
spin_unlock_irqrestore(&priv->tx_lock, flags);
}
-static void ipoib_cm_tx_completion(struct ib_cq *cq, void *tx_ptr)
-{
- struct ipoib_cm_tx *tx = tx_ptr;
- int n, i;
-
- ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
- do {
- n = ib_poll_cq(cq, IPOIB_NUM_WC, tx->ibwc);
- for (i = 0; i < n; ++i)
- ipoib_cm_handle_tx_wc(tx->dev, tx, tx->ibwc + i);
- } while (n == IPOIB_NUM_WC);
-}
-
int ipoib_cm_dev_open(struct net_device *dev)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
@@ -807,17 +787,18 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even
return 0;
}
-static struct ib_qp *ipoib_cm_create_tx_qp(struct net_device *dev, struct ib_cq *cq)
+static struct ib_qp *ipoib_cm_create_tx_qp(struct net_device *dev, struct ipoib_cm_tx *tx)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
struct ib_qp_init_attr attr = {
- .send_cq = cq,
+ .send_cq = priv->cq,
.recv_cq = priv->cq,
.srq = priv->cm.srq,
.cap.max_send_wr = ipoib_sendq_size,
.cap.max_send_sge = 1,
.sq_sig_type = IB_SIGNAL_ALL_WR,
.qp_type = IB_QPT_RC,
+ .qp_context = tx
};
return ib_create_qp(priv->pd, &attr);
@@ -899,21 +880,7 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn,
goto err_tx;
}
- p->cq = ib_create_cq(priv->ca, ipoib_cm_tx_completion, NULL, p,
- ipoib_sendq_size + 1, 0);
- if (IS_ERR(p->cq)) {
- ret = PTR_ERR(p->cq);
- ipoib_warn(priv, "failed to allocate tx cq: %d\n", ret);
- goto err_cq;
- }
-
- ret = ib_req_notify_cq(p->cq, IB_CQ_NEXT_COMP);
- if (ret) {
- ipoib_warn(priv, "failed to request completion notification: %d\n", ret);
- goto err_req_notify;
- }
-
- p->qp = ipoib_cm_create_tx_qp(p->dev, p->cq);
+ p->qp = ipoib_cm_create_tx_qp(p->dev, p);
if (IS_ERR(p->qp)) {
ret = PTR_ERR(p->qp);
ipoib_warn(priv, "failed to allocate tx qp: %d\n", ret);
@@ -950,12 +917,8 @@ err_modify:
err_id:
p->id = NULL;
ib_destroy_qp(p->qp);
-err_req_notify:
err_qp:
p->qp = NULL;
- ib_destroy_cq(p->cq);
-err_cq:
- p->cq = NULL;
err_tx:
return ret;
}
@@ -964,6 +927,8 @@ static void ipoib_cm_tx_destroy(struct ipoib_cm_tx *p)
{
struct ipoib_dev_priv *priv = netdev_priv(p->dev);
struct ipoib_tx_buf *tx_req;
+ unsigned long flags;
+ unsigned long begin;
ipoib_dbg(priv, "Destroy active connection 0x%x head 0x%x tail 0x%x\n",
p->qp ? p->qp->qp_num : 0, p->tx_head, p->tx_tail);
@@ -971,27 +936,40 @@ static void ipoib_cm_tx_destroy(struct ipoib_cm_tx *p)
if (p->id)
ib_destroy_cm_id(p->id);
- if (p->qp)
- ib_destroy_qp(p->qp);
-
- if (p->cq)
- ib_destroy_cq(p->cq);
-
- if (test_bit(IPOIB_FLAG_NETIF_STOPPED, &p->flags))
- netif_wake_queue(p->dev);
-
if (p->tx_ring) {
+ /* Wait for all sends to complete */
+ begin = jiffies;
while ((int) p->tx_tail - (int) p->tx_head < 0) {
- tx_req = &p->tx_ring[p->tx_tail & (ipoib_sendq_size - 1)];
- ib_dma_unmap_single(priv->ca, tx_req->mapping, tx_req->skb->len,
- DMA_TO_DEVICE);
- dev_kfree_skb_any(tx_req->skb);
- ++p->tx_tail;
+ if (time_after(jiffies, begin + 5 * HZ)) {
+ ipoib_warn(priv, "timing out; %d sends not completed\n",
+ p->tx_head - p->tx_tail);
+ goto timeout;
+ }
+
+ msleep(1);
}
+ }
- kfree(p->tx_ring);
+timeout:
+
+ while ((int) p->tx_tail - (int) p->tx_head < 0) {
+ tx_req = &p->tx_ring[p->tx_tail & (ipoib_sendq_size - 1)];
+ ib_dma_unmap_single(priv->ca, tx_req->mapping, tx_req->skb->len,
+ DMA_TO_DEVICE);
+ dev_kfree_skb_any(tx_req->skb);
+ ++p->tx_tail;
+ spin_lock_irqsave(&priv->tx_lock, flags);
+ if (unlikely(--priv->tx_outstanding == ipoib_sendq_size >> 1) &&
+ netif_queue_stopped(p->dev) &&
+ test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
+ netif_wake_queue(p->dev);
+ spin_unlock_irqrestore(&priv->tx_lock, flags);
}
+ if (p->qp)
+ ib_destroy_qp(p->qp);
+
+ kfree(p->tx_ring);
kfree(p);
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 1a77e79..5063dd5 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -267,11 +267,10 @@ static void ipoib_ib_handle_tx_wc(struct net_device *dev, struct ib_wc *wc)
spin_lock_irqsave(&priv->tx_lock, flags);
++priv->tx_tail;
- if (unlikely(test_bit(IPOIB_FLAG_NETIF_STOPPED, &priv->flags)) &&
- priv->tx_head - priv->tx_tail <= ipoib_sendq_size >> 1) {
- clear_bit(IPOIB_FLAG_NETIF_STOPPED, &priv->flags);
+ if (unlikely(--priv->tx_outstanding == ipoib_sendq_size >> 1) &&
+ netif_queue_stopped(dev) &&
+ test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
netif_wake_queue(dev);
- }
spin_unlock_irqrestore(&priv->tx_lock, flags);
if (wc->status != IB_WC_SUCCESS &&
@@ -301,14 +300,18 @@ poll_more:
for (i = 0; i < n; i++) {
struct ib_wc *wc = priv->ibwc + i;
- if (wc->wr_id & IPOIB_CM_OP_SRQ) {
- ++done;
- ipoib_cm_handle_rx_wc(dev, wc);
- } else if (wc->wr_id & IPOIB_OP_RECV) {
+ if (wc->wr_id & IPOIB_OP_RECV) {
++done;
- ipoib_ib_handle_rx_wc(dev, wc);
- } else
- ipoib_ib_handle_tx_wc(dev, wc);
+ if (wc->wr_id & IPOIB_OP_CM)
+ ipoib_cm_handle_rx_wc(dev, wc);
+ else
+ ipoib_ib_handle_rx_wc(dev, wc);
+ } else {
+ if (wc->wr_id & IPOIB_OP_CM)
+ ipoib_cm_handle_tx_wc(dev, wc);
+ else
+ ipoib_ib_handle_tx_wc(dev, wc);
+ }
}
if (n != t)
@@ -401,10 +404,9 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb,
address->last_send = priv->tx_head;
++priv->tx_head;
- if (priv->tx_head - priv->tx_tail == ipoib_sendq_size) {
+ if (++priv->tx_outstanding == ipoib_sendq_size) {
ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n");
netif_stop_queue(dev);
- set_bit(IPOIB_FLAG_NETIF_STOPPED, &priv->flags);
}
}
}
@@ -436,7 +438,8 @@ void ipoib_reap_ah(struct work_struct *work)
__ipoib_reap_ah(dev);
if (!test_bit(IPOIB_STOP_REAPER, &priv->flags))
- queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task, HZ);
+ queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task,
+ round_jiffies_relative(HZ));
}
int ipoib_ib_dev_open(struct net_device *dev)
@@ -472,7 +475,8 @@ int ipoib_ib_dev_open(struct net_device *dev)
}
clear_bit(IPOIB_STOP_REAPER, &priv->flags);
- queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task, HZ);
+ queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task,
+ round_jiffies_relative(HZ));
set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags);
@@ -561,12 +565,17 @@ void ipoib_drain_cq(struct net_device *dev)
if (priv->ibwc[i].status == IB_WC_SUCCESS)
priv->ibwc[i].status = IB_WC_WR_FLUSH_ERR;
- if (priv->ibwc[i].wr_id & IPOIB_CM_OP_SRQ)
- ipoib_cm_handle_rx_wc(dev, priv->ibwc + i);
- else if (priv->ibwc[i].wr_id & IPOIB_OP_RECV)
- ipoib_ib_handle_rx_wc(dev, priv->ibwc + i);
- else
- ipoib_ib_handle_tx_wc(dev, priv->ibwc + i);
+ if (priv->ibwc[i].wr_id & IPOIB_OP_RECV) {
+ if (priv->ibwc[i].wr_id & IPOIB_OP_CM)
+ ipoib_cm_handle_rx_wc(dev, priv->ibwc + i);
+ else
+ ipoib_ib_handle_rx_wc(dev, priv->ibwc + i);
+ } else {
+ if (priv->ibwc[i].wr_id & IPOIB_OP_CM)
+ ipoib_cm_handle_tx_wc(dev, priv->ibwc + i);
+ else
+ ipoib_ib_handle_tx_wc(dev, priv->ibwc + i);
+ }
}
} while (n == IPOIB_NUM_WC);
}
@@ -612,6 +621,7 @@ int ipoib_ib_dev_stop(struct net_device *dev, int flush)
DMA_TO_DEVICE);
dev_kfree_skb_any(tx_req->skb);
++priv->tx_tail;
+ --priv->tx_outstanding;
}
for (i = 0; i < ipoib_recvq_size; ++i) {
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index e072f3c..ace2345 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -148,8 +148,6 @@ static int ipoib_stop(struct net_device *dev)
netif_stop_queue(dev);
- clear_bit(IPOIB_FLAG_NETIF_STOPPED, &priv->flags);
-
/*
* Now flush workqueue to make sure a scheduled task doesn't
* bring our internal state back up.
@@ -895,7 +893,7 @@ int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
goto out_rx_ring_cleanup;
}
- /* priv->tx_head & tx_tail are already 0 */
+ /* priv->tx_head, tx_tail & tx_outstanding are already 0 */
if (ipoib_ib_dev_init(dev, ca, port))
goto out_tx_ring_cleanup;
diff --git a/drivers/net/mlx4/fw.c b/drivers/net/mlx4/fw.c
index 6471d33..5064873 100644
--- a/drivers/net/mlx4/fw.c
+++ b/drivers/net/mlx4/fw.c
@@ -736,7 +736,7 @@ int mlx4_INIT_HCA(struct mlx4_dev *dev, struct mlx4_init_hca_param *param)
MLX4_PUT(inbox, (u8) (PAGE_SHIFT - 12), INIT_HCA_UAR_PAGE_SZ_OFFSET);
MLX4_PUT(inbox, param->log_uar_sz, INIT_HCA_LOG_UAR_SZ_OFFSET);
- err = mlx4_cmd(dev, mailbox->dma, 0, 0, MLX4_CMD_INIT_HCA, 1000);
+ err = mlx4_cmd(dev, mailbox->dma, 0, 0, MLX4_CMD_INIT_HCA, 10000);
if (err)
mlx4_err(dev, "INIT_HCA returns %d\n", err);
diff --git a/include/linux/mlx4/doorbell.h b/include/linux/mlx4/doorbell.h
index 3f2da44..f31bba2 100644
--- a/include/linux/mlx4/doorbell.h
+++ b/include/linux/mlx4/doorbell.h
@@ -52,11 +52,6 @@
#define MLX4_INIT_DOORBELL_LOCK(ptr) do { } while (0)
#define MLX4_GET_DOORBELL_LOCK(ptr) (NULL)
-static inline void mlx4_write64_raw(__be64 val, void __iomem *dest)
-{
- __raw_writeq((__force u64) val, dest);
-}
-
static inline void mlx4_write64(__be32 val[2], void __iomem *dest,
spinlock_t *doorbell_lock)
{
@@ -75,12 +70,6 @@ static inline void mlx4_write64(__be32 val[2], void __iomem *dest,
#define MLX4_INIT_DOORBELL_LOCK(ptr) spin_lock_init(ptr)
#define MLX4_GET_DOORBELL_LOCK(ptr) (ptr)
-static inline void mlx4_write64_raw(__be64 val, void __iomem *dest)
-{
- __raw_writel(((__force u32 *) &val)[0], dest);
- __raw_writel(((__force u32 *) &val)[1], dest + 4);
-}
-
static inline void mlx4_write64(__be32 val[2], void __iomem *dest,
spinlock_t *doorbell_lock)
{
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-09-23 20:06 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-09-23 20:06 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get one fix for a data corruption bug in 2.6.23-rc7:
Jack Morgenstein (1):
IB/mlx4: Fix data corruption triggered by wrong headroom marking order
drivers/infiniband/hw/mlx4/qp.c | 62 ++++++++++++++++++++++++++++++--------
1 files changed, 49 insertions(+), 13 deletions(-)
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index ba0428d..85c51bd 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1211,12 +1211,42 @@ static void set_datagram_seg(struct mlx4_wqe_datagram_seg *dseg,
dseg->qkey = cpu_to_be32(wr->wr.ud.remote_qkey);
}
-static void set_data_seg(struct mlx4_wqe_data_seg *dseg,
- struct ib_sge *sg)
+static void set_mlx_icrc_seg(void *dseg)
+{
+ u32 *t = dseg;
+ struct mlx4_wqe_inline_seg *iseg = dseg;
+
+ t[1] = 0;
+
+ /*
+ * Need a barrier here before writing the byte_count field to
+ * make sure that all the data is visible before the
+ * byte_count field is set. Otherwise, if the segment begins
+ * a new cacheline, the HCA prefetcher could grab the 64-byte
+ * chunk and get a valid (!= * 0xffffffff) byte count but
+ * stale data, and end up sending the wrong data.
+ */
+ wmb();
+
+ iseg->byte_count = cpu_to_be32((1 << 31) | 4);
+}
+
+static void set_data_seg(struct mlx4_wqe_data_seg *dseg, struct ib_sge *sg)
{
- dseg->byte_count = cpu_to_be32(sg->length);
dseg->lkey = cpu_to_be32(sg->lkey);
dseg->addr = cpu_to_be64(sg->addr);
+
+ /*
+ * Need a barrier here before writing the byte_count field to
+ * make sure that all the data is visible before the
+ * byte_count field is set. Otherwise, if the segment begins
+ * a new cacheline, the HCA prefetcher could grab the 64-byte
+ * chunk and get a valid (!= * 0xffffffff) byte count but
+ * stale data, and end up sending the wrong data.
+ */
+ wmb();
+
+ dseg->byte_count = cpu_to_be32(sg->length);
}
int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
@@ -1225,6 +1255,7 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
struct mlx4_ib_qp *qp = to_mqp(ibqp);
void *wqe;
struct mlx4_wqe_ctrl_seg *ctrl;
+ struct mlx4_wqe_data_seg *dseg;
unsigned long flags;
int nreq;
int err = 0;
@@ -1324,22 +1355,27 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
break;
}
- for (i = 0; i < wr->num_sge; ++i) {
- set_data_seg(wqe, wr->sg_list + i);
+ /*
+ * Write data segments in reverse order, so as to
+ * overwrite cacheline stamp last within each
+ * cacheline. This avoids issues with WQE
+ * prefetching.
+ */
- wqe += sizeof (struct mlx4_wqe_data_seg);
- size += sizeof (struct mlx4_wqe_data_seg) / 16;
- }
+ dseg = wqe;
+ dseg += wr->num_sge - 1;
+ size += wr->num_sge * (sizeof (struct mlx4_wqe_data_seg) / 16);
/* Add one more inline data segment for ICRC for MLX sends */
- if (qp->ibqp.qp_type == IB_QPT_SMI || qp->ibqp.qp_type == IB_QPT_GSI) {
- ((struct mlx4_wqe_inline_seg *) wqe)->byte_count =
- cpu_to_be32((1 << 31) | 4);
- ((u32 *) wqe)[1] = 0;
- wqe += sizeof (struct mlx4_wqe_data_seg);
+ if (unlikely(qp->ibqp.qp_type == IB_QPT_SMI ||
+ qp->ibqp.qp_type == IB_QPT_GSI)) {
+ set_mlx_icrc_seg(dseg + 1);
size += sizeof (struct mlx4_wqe_data_seg) / 16;
}
+ for (i = wr->num_sge - 1; i >= 0; --i, --dseg)
+ set_data_seg(dseg, wr->sg_list + i);
+
ctrl->fence_size = (wr->send_flags & IB_SEND_FENCE ?
MLX4_WQE_CTRL_FENCE : 0) | size;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-07-30 20:18 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-07-30 20:18 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get some small fixes for 2.6.23:
Dave Olson (4):
IB/ipath: Remove unsafe fastrcvint code from interrupt handler
IB/ipath: Use faster put_tid_2 routine after initialization
IB/ipath: Fix some issues with buffer cancel and sendctrl register update
IB/ipath: Workaround problem of errormask register being overwritten
Hoang-Nam Nguyen (2):
IB/ehca: Fix include order to better match kernel style
IB/ehca: Move extern declarations from .c files to .h files
Jack Morgenstein (1):
mlx4_core: Remove kfree() in mlx4_mr_alloc() error flow
Roland Dreier (1):
IB/mlx4: Whitespace fix
Tom Tucker (1):
RDMA/amso1100: Initialize the wait_queue_head_t in the c2_qp structure
drivers/infiniband/hw/amso1100/c2_qp.c | 1 +
drivers/infiniband/hw/ehca/ehca_classes.h | 1 +
drivers/infiniband/hw/ehca/ehca_mrmw.c | 6 +--
drivers/infiniband/hw/ehca/ehca_pd.c | 1 -
drivers/infiniband/hw/ehca/hcp_if.c | 1 -
drivers/infiniband/hw/ehca/ipz_pt_fn.h | 2 +
drivers/infiniband/hw/ipath/ipath_common.h | 3 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 11 +++--
drivers/infiniband/hw/ipath/ipath_iba6120.c | 20 +++++---
drivers/infiniband/hw/ipath/ipath_init_chip.c | 7 ++-
drivers/infiniband/hw/ipath/ipath_intr.c | 63 ++++++------------------
drivers/infiniband/hw/ipath/ipath_kernel.h | 13 +----
drivers/infiniband/hw/ipath/ipath_stats.c | 54 +++++++++++++++++++--
drivers/infiniband/hw/mlx4/qp.c | 1 -
drivers/net/mlx4/mr.c | 15 +-----
15 files changed, 101 insertions(+), 98 deletions(-)
diff --git a/drivers/infiniband/hw/amso1100/c2_qp.c b/drivers/infiniband/hw/amso1100/c2_qp.c
index 420c138..01d0786 100644
--- a/drivers/infiniband/hw/amso1100/c2_qp.c
+++ b/drivers/infiniband/hw/amso1100/c2_qp.c
@@ -506,6 +506,7 @@ int c2_alloc_qp(struct c2_dev *c2dev,
qp->send_sgl_depth = qp_attrs->cap.max_send_sge;
qp->rdma_write_sgl_depth = qp_attrs->cap.max_send_sge;
qp->recv_sgl_depth = qp_attrs->cap.max_recv_sge;
+ init_waitqueue_head(&qp->wait);
/* Initialize the SQ MQ */
q_size = be32_to_cpu(reply->sq_depth);
diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h
index 3725aa8..b5e9603 100644
--- a/drivers/infiniband/hw/ehca/ehca_classes.h
+++ b/drivers/infiniband/hw/ehca/ehca_classes.h
@@ -322,6 +322,7 @@ extern int ehca_static_rate;
extern int ehca_port_act_time;
extern int ehca_use_hp_mr;
extern int ehca_scaling_code;
+extern int ehca_mr_largepage;
struct ipzu_queue_resp {
u32 qe_size; /* queue entry size */
diff --git a/drivers/infiniband/hw/ehca/ehca_mrmw.c b/drivers/infiniband/hw/ehca/ehca_mrmw.c
index c1b868b..d97eda3 100644
--- a/drivers/infiniband/hw/ehca/ehca_mrmw.c
+++ b/drivers/infiniband/hw/ehca/ehca_mrmw.c
@@ -40,10 +40,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <rdma/ib_umem.h>
-
#include <asm/current.h>
+#include <rdma/ib_umem.h>
+
#include "ehca_iverbs.h"
#include "ehca_mrmw.h"
#include "hcp_if.h"
@@ -64,8 +64,6 @@ enum ehca_mr_pgsize {
EHCA_MR_PGSIZE16M = 0x1000000L
};
-extern int ehca_mr_largepage;
-
static u32 ehca_encode_hwpage_size(u32 pgsize)
{
u32 idx = 0;
diff --git a/drivers/infiniband/hw/ehca/ehca_pd.c b/drivers/infiniband/hw/ehca/ehca_pd.c
index 3dafd7f..43bcf08 100644
--- a/drivers/infiniband/hw/ehca/ehca_pd.c
+++ b/drivers/infiniband/hw/ehca/ehca_pd.c
@@ -88,7 +88,6 @@ int ehca_dealloc_pd(struct ib_pd *pd)
u32 cur_pid = current->tgid;
struct ehca_pd *my_pd = container_of(pd, struct ehca_pd, ib_pd);
int i, leftovers = 0;
- extern struct kmem_cache *small_qp_cache;
struct ipz_small_queue_page *page, *tmp;
if (my_pd->ib_pd.uobject && my_pd->ib_pd.uobject->context &&
diff --git a/drivers/infiniband/hw/ehca/hcp_if.c b/drivers/infiniband/hw/ehca/hcp_if.c
index fdbfebe..24f4541 100644
--- a/drivers/infiniband/hw/ehca/hcp_if.c
+++ b/drivers/infiniband/hw/ehca/hcp_if.c
@@ -758,7 +758,6 @@ u64 hipz_h_register_rpage_mr(const struct ipz_adapter_handle adapter_handle,
const u64 logical_address_of_page,
const u64 count)
{
- extern int ehca_debug_level;
u64 ret;
if (unlikely(ehca_debug_level >= 2)) {
diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.h b/drivers/infiniband/hw/ehca/ipz_pt_fn.h
index c6937a0..a801274 100644
--- a/drivers/infiniband/hw/ehca/ipz_pt_fn.h
+++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.h
@@ -54,6 +54,8 @@
struct ehca_pd;
struct ipz_small_queue_page;
+extern struct kmem_cache *small_qp_cache;
+
/* struct generic ehca page */
struct ipz_page {
u8 entries[EHCA_PAGESIZE];
diff --git a/drivers/infiniband/hw/ipath/ipath_common.h b/drivers/infiniband/hw/ipath/ipath_common.h
index b4b786d..6ad822c 100644
--- a/drivers/infiniband/hw/ipath/ipath_common.h
+++ b/drivers/infiniband/hw/ipath/ipath_common.h
@@ -100,8 +100,7 @@ struct infinipath_stats {
__u64 sps_hwerrs;
/* number of times IB link changed state unexpectedly */
__u64 sps_iblink;
- /* kernel receive interrupts that didn't read intstat */
- __u64 sps_fastrcvint;
+ __u64 sps_unused; /* was fastrcvint, no longer implemented */
/* number of kernel (port0) packets received */
__u64 sps_port0pkts;
/* number of "ethernet" packets sent by driver */
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index 09c5fd8..6ccba36 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -740,7 +740,7 @@ void ipath_disarm_piobufs(struct ipath_devdata *dd, unsigned first,
* pioavail updates to memory to stop.
*/
ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
- sendorig & ~IPATH_S_PIOBUFAVAILUPD);
+ sendorig & ~INFINIPATH_S_PIOBUFAVAILUPD);
sendorig = ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch);
ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
dd->ipath_sendctrl);
@@ -1614,7 +1614,7 @@ int ipath_waitfor_mdio_cmdready(struct ipath_devdata *dd)
* it's safer to always do it.
* PIOAvail bits are updated by the chip as if normal send had happened.
*/
-void ipath_cancel_sends(struct ipath_devdata *dd)
+void ipath_cancel_sends(struct ipath_devdata *dd, int restore_sendctrl)
{
ipath_dbg("Cancelling all in-progress send buffers\n");
dd->ipath_lastcancel = jiffies+HZ/2; /* skip armlaunch errs a bit */
@@ -1627,6 +1627,9 @@ void ipath_cancel_sends(struct ipath_devdata *dd)
ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch);
ipath_disarm_piobufs(dd, 0,
(unsigned)(dd->ipath_piobcnt2k + dd->ipath_piobcnt4k));
+ if (restore_sendctrl) /* else done by caller later */
+ ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
+ dd->ipath_sendctrl);
/* and again, be sure all have hit the chip */
ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch);
@@ -1655,7 +1658,7 @@ static void ipath_set_ib_lstate(struct ipath_devdata *dd, int which)
/* flush all queued sends when going to DOWN or INIT, to be sure that
* they don't block MAD packets */
if (!linkcmd || linkcmd == INFINIPATH_IBCC_LINKCMD_INIT)
- ipath_cancel_sends(dd);
+ ipath_cancel_sends(dd, 1);
ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl,
dd->ipath_ibcctrl | which);
@@ -2000,7 +2003,7 @@ void ipath_shutdown_device(struct ipath_devdata *dd)
ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKINITCMD_DISABLE <<
INFINIPATH_IBCC_LINKINITCMD_SHIFT);
- ipath_cancel_sends(dd);
+ ipath_cancel_sends(dd, 0);
/* disable IBC */
dd->ipath_control &= ~INFINIPATH_C_LINKENABLE;
diff --git a/drivers/infiniband/hw/ipath/ipath_iba6120.c b/drivers/infiniband/hw/ipath/ipath_iba6120.c
index 9868ccd..5b6ac9a 100644
--- a/drivers/infiniband/hw/ipath/ipath_iba6120.c
+++ b/drivers/infiniband/hw/ipath/ipath_iba6120.c
@@ -321,6 +321,8 @@ static const struct ipath_hwerror_msgs ipath_6120_hwerror_msgs[] = {
<< INFINIPATH_HWE_TXEMEMPARITYERR_SHIFT)
static int ipath_pe_txe_recover(struct ipath_devdata *);
+static void ipath_pe_put_tid_2(struct ipath_devdata *, u64 __iomem *,
+ u32, unsigned long);
/**
* ipath_pe_handle_hwerrors - display hardware errors.
@@ -555,8 +557,11 @@ static int ipath_pe_boardname(struct ipath_devdata *dd, char *name,
ipath_dev_err(dd, "Unsupported InfiniPath hardware revision %u.%u!\n",
dd->ipath_majrev, dd->ipath_minrev);
ret = 1;
- } else
+ } else {
ret = 0;
+ if (dd->ipath_minrev >= 2)
+ dd->ipath_f_put_tid = ipath_pe_put_tid_2;
+ }
return ret;
}
@@ -1220,7 +1225,7 @@ static void ipath_pe_clear_tids(struct ipath_devdata *dd, unsigned port)
port * dd->ipath_rcvtidcnt * sizeof(*tidbase));
for (i = 0; i < dd->ipath_rcvtidcnt; i++)
- ipath_pe_put_tid(dd, &tidbase[i], RCVHQ_RCV_TYPE_EXPECTED,
+ dd->ipath_f_put_tid(dd, &tidbase[i], RCVHQ_RCV_TYPE_EXPECTED,
tidinv);
tidbase = (u64 __iomem *)
@@ -1229,7 +1234,7 @@ static void ipath_pe_clear_tids(struct ipath_devdata *dd, unsigned port)
port * dd->ipath_rcvegrcnt * sizeof(*tidbase));
for (i = 0; i < dd->ipath_rcvegrcnt; i++)
- ipath_pe_put_tid(dd, &tidbase[i], RCVHQ_RCV_TYPE_EAGER,
+ dd->ipath_f_put_tid(dd, &tidbase[i], RCVHQ_RCV_TYPE_EAGER,
tidinv);
}
@@ -1395,10 +1400,11 @@ void ipath_init_iba6120_funcs(struct ipath_devdata *dd)
dd->ipath_f_quiet_serdes = ipath_pe_quiet_serdes;
dd->ipath_f_bringup_serdes = ipath_pe_bringup_serdes;
dd->ipath_f_clear_tids = ipath_pe_clear_tids;
- if (dd->ipath_minrev >= 2)
- dd->ipath_f_put_tid = ipath_pe_put_tid_2;
- else
- dd->ipath_f_put_tid = ipath_pe_put_tid;
+ /*
+ * this may get changed after we read the chip revision,
+ * but we start with the safe version for all revs
+ */
+ dd->ipath_f_put_tid = ipath_pe_put_tid;
dd->ipath_f_cleanup = ipath_setup_pe_cleanup;
dd->ipath_f_setextled = ipath_setup_pe_setextled;
dd->ipath_f_get_base_info = ipath_pe_get_base_info;
diff --git a/drivers/infiniband/hw/ipath/ipath_init_chip.c b/drivers/infiniband/hw/ipath/ipath_init_chip.c
index 49951d5..9dd0bac 100644
--- a/drivers/infiniband/hw/ipath/ipath_init_chip.c
+++ b/drivers/infiniband/hw/ipath/ipath_init_chip.c
@@ -782,7 +782,7 @@ int ipath_init_chip(struct ipath_devdata *dd, int reinit)
* Follows early_init because some chips have to initialize
* PIO buffers in early_init to avoid false parity errors.
*/
- ipath_cancel_sends(dd);
+ ipath_cancel_sends(dd, 0);
/* early_init sets rcvhdrentsize and rcvhdrsize, so this must be
* done after early_init */
@@ -851,13 +851,14 @@ int ipath_init_chip(struct ipath_devdata *dd, int reinit)
ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrmask,
dd->ipath_hwerrmask);
- dd->ipath_maskederrs = dd->ipath_ignorederrs;
/* clear all */
ipath_write_kreg(dd, dd->ipath_kregs->kr_errorclear, -1LL);
/* enable errors that are masked, at least this first time. */
ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask,
~dd->ipath_maskederrs);
- /* clear any interrups up to this point (ints still not enabled) */
+ dd->ipath_errormask = ipath_read_kreg64(dd,
+ dd->ipath_kregs->kr_errormask);
+ /* clear any interrupts up to this point (ints still not enabled) */
ipath_write_kreg(dd, dd->ipath_kregs->kr_intclear, -1LL);
/*
diff --git a/drivers/infiniband/hw/ipath/ipath_intr.c b/drivers/infiniband/hw/ipath/ipath_intr.c
index 1fd91c5..b29fe7e 100644
--- a/drivers/infiniband/hw/ipath/ipath_intr.c
+++ b/drivers/infiniband/hw/ipath/ipath_intr.c
@@ -303,7 +303,7 @@ static void handle_e_ibstatuschanged(struct ipath_devdata *dd,
* Flush all queued sends when link went to DOWN or INIT,
* to be sure that they don't block SMA and other MAD packets
*/
- ipath_cancel_sends(dd);
+ ipath_cancel_sends(dd, 1);
}
else if (lstate == IPATH_IBSTATE_INIT || lstate == IPATH_IBSTATE_ARM ||
lstate == IPATH_IBSTATE_ACTIVE) {
@@ -517,10 +517,7 @@ static int handle_errors(struct ipath_devdata *dd, ipath_err_t errs)
supp_msgs = handle_frequent_errors(dd, errs, msg, &noprint);
- /*
- * don't report errors that are masked (includes those always
- * ignored)
- */
+ /* don't report errors that are masked */
errs &= ~dd->ipath_maskederrs;
/* do these first, they are most important */
@@ -566,19 +563,19 @@ static int handle_errors(struct ipath_devdata *dd, ipath_err_t errs)
* ones on this particular interrupt, which also isn't great
*/
dd->ipath_maskederrs |= dd->ipath_lasterror | errs;
+ dd->ipath_errormask &= ~dd->ipath_maskederrs;
ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask,
- ~dd->ipath_maskederrs);
+ dd->ipath_errormask);
s_iserr = ipath_decode_err(msg, sizeof msg,
- (dd->ipath_maskederrs & ~dd->
- ipath_ignorederrs));
+ dd->ipath_maskederrs);
- if ((dd->ipath_maskederrs & ~dd->ipath_ignorederrs) &
+ if (dd->ipath_maskederrs &
~(INFINIPATH_E_RRCVEGRFULL |
INFINIPATH_E_RRCVHDRFULL | INFINIPATH_E_PKTERRS))
ipath_dev_err(dd, "Temporarily disabling "
"error(s) %llx reporting; too frequent (%s)\n",
- (unsigned long long) (dd->ipath_maskederrs &
- ~dd->ipath_ignorederrs), msg);
+ (unsigned long long)dd->ipath_maskederrs,
+ msg);
else {
/*
* rcvegrfull and rcvhdrqfull are "normal",
@@ -793,19 +790,22 @@ void ipath_clear_freeze(struct ipath_devdata *dd)
/* disable error interrupts, to avoid confusion */
ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask, 0ULL);
+ /* also disable interrupts; errormask is sometimes overwriten */
+ ipath_write_kreg(dd, dd->ipath_kregs->kr_intmask, 0ULL);
+
/*
* clear all sends, because they have may been
* completed by usercode while in freeze mode, and
* therefore would not be sent, and eventually
* might cause the process to run out of bufs
*/
- ipath_cancel_sends(dd);
+ ipath_cancel_sends(dd, 0);
ipath_write_kreg(dd, dd->ipath_kregs->kr_control,
dd->ipath_control);
/* ensure pio avail updates continue */
ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
- dd->ipath_sendctrl & ~IPATH_S_PIOBUFAVAILUPD);
+ dd->ipath_sendctrl & ~INFINIPATH_S_PIOBUFAVAILUPD);
ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch);
ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
dd->ipath_sendctrl);
@@ -817,7 +817,7 @@ void ipath_clear_freeze(struct ipath_devdata *dd)
for (i = 0; i < dd->ipath_pioavregs; i++) {
/* deal with 6110 chip bug */
im = i > 3 ? ((i&1) ? i-1 : i+1) : i;
- val = ipath_read_kreg64(dd, 0x1000+(im*sizeof(u64)));
+ val = ipath_read_kreg64(dd, (0x1000/sizeof(u64))+im);
dd->ipath_pioavailregs_dma[i] = dd->ipath_pioavailshadow[i]
= le64_to_cpu(val);
}
@@ -832,7 +832,8 @@ void ipath_clear_freeze(struct ipath_devdata *dd)
ipath_write_kreg(dd, dd->ipath_kregs->kr_errorclear,
E_SPKT_ERRS_IGNORE);
ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask,
- ~dd->ipath_maskederrs);
+ dd->ipath_errormask);
+ ipath_write_kreg(dd, dd->ipath_kregs->kr_intmask, -1LL);
ipath_write_kreg(dd, dd->ipath_kregs->kr_intclear, 0ULL);
}
@@ -1002,7 +1003,6 @@ irqreturn_t ipath_intr(int irq, void *data)
u32 istat, chk0rcv = 0;
ipath_err_t estat = 0;
irqreturn_t ret;
- u32 oldhead, curtail;
static unsigned unexpected = 0;
static const u32 port0rbits = (1U<<INFINIPATH_I_RCVAVAIL_SHIFT) |
(1U<<INFINIPATH_I_RCVURG_SHIFT);
@@ -1035,36 +1035,6 @@ irqreturn_t ipath_intr(int irq, void *data)
goto bail;
}
- /*
- * We try to avoid reading the interrupt status register, since
- * that's a PIO read, and stalls the processor for up to about
- * ~0.25 usec. The idea is that if we processed a port0 packet,
- * we blindly clear the port 0 receive interrupt bits, and nothing
- * else, then return. If other interrupts are pending, the chip
- * will re-interrupt us as soon as we write the intclear register.
- * We then won't process any more kernel packets (if not the 2nd
- * time, then the 3rd or 4th) and we'll then handle the other
- * interrupts. We clear the interrupts first so that we don't
- * lose intr for later packets that arrive while we are processing.
- */
- oldhead = dd->ipath_port0head;
- curtail = (u32)le64_to_cpu(*dd->ipath_hdrqtailptr);
- if (oldhead != curtail) {
- if (dd->ipath_flags & IPATH_GPIO_INTR) {
- ipath_write_kreg(dd, dd->ipath_kregs->kr_gpio_clear,
- (u64) (1 << IPATH_GPIO_PORT0_BIT));
- istat = port0rbits | INFINIPATH_I_GPIO;
- }
- else
- istat = port0rbits;
- ipath_write_kreg(dd, dd->ipath_kregs->kr_intclear, istat);
- ipath_kreceive(dd);
- if (oldhead != dd->ipath_port0head) {
- ipath_stats.sps_fastrcvint++;
- goto done;
- }
- }
-
istat = ipath_read_kreg32(dd, dd->ipath_kregs->kr_intstatus);
if (unlikely(!istat)) {
@@ -1225,7 +1195,6 @@ irqreturn_t ipath_intr(int irq, void *data)
handle_layer_pioavail(dd);
}
-done:
ret = IRQ_HANDLED;
bail:
diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h
index ace63ef..7a7966f 100644
--- a/drivers/infiniband/hw/ipath/ipath_kernel.h
+++ b/drivers/infiniband/hw/ipath/ipath_kernel.h
@@ -261,18 +261,10 @@ struct ipath_devdata {
* limiting of hwerror reporting
*/
ipath_err_t ipath_lasthwerror;
- /*
- * errors masked because they occur too fast, also includes errors
- * that are always ignored (ipath_ignorederrs)
- */
+ /* errors masked because they occur too fast */
ipath_err_t ipath_maskederrs;
/* time in jiffies at which to re-enable maskederrs */
unsigned long ipath_unmasktime;
- /*
- * errors always ignored (masked), at least for a given
- * chip/device, because they are wrong or not useful
- */
- ipath_err_t ipath_ignorederrs;
/* count of egrfull errors, combined for all ports */
u64 ipath_last_tidfull;
/* for ipath_qcheck() */
@@ -436,6 +428,7 @@ struct ipath_devdata {
u64 ipath_lastibcstat;
/* hwerrmask shadow */
ipath_err_t ipath_hwerrmask;
+ ipath_err_t ipath_errormask; /* errormask shadow */
/* interrupt config reg shadow */
u64 ipath_intconfig;
/* kr_sendpiobufbase value */
@@ -683,7 +676,7 @@ int ipath_unordered_wc(void);
void ipath_disarm_piobufs(struct ipath_devdata *, unsigned first,
unsigned cnt);
-void ipath_cancel_sends(struct ipath_devdata *);
+void ipath_cancel_sends(struct ipath_devdata *, int);
int ipath_create_rcvhdrq(struct ipath_devdata *, struct ipath_portdata *);
void ipath_free_pddata(struct ipath_devdata *, struct ipath_portdata *);
diff --git a/drivers/infiniband/hw/ipath/ipath_stats.c b/drivers/infiniband/hw/ipath/ipath_stats.c
index 73ed17d..bae4f56 100644
--- a/drivers/infiniband/hw/ipath/ipath_stats.c
+++ b/drivers/infiniband/hw/ipath/ipath_stats.c
@@ -196,6 +196,45 @@ static void ipath_qcheck(struct ipath_devdata *dd)
}
}
+static void ipath_chk_errormask(struct ipath_devdata *dd)
+{
+ static u32 fixed;
+ u32 ctrl;
+ unsigned long errormask;
+ unsigned long hwerrs;
+
+ if (!dd->ipath_errormask || !(dd->ipath_flags & IPATH_INITTED))
+ return;
+
+ errormask = ipath_read_kreg64(dd, dd->ipath_kregs->kr_errormask);
+
+ if (errormask == dd->ipath_errormask)
+ return;
+ fixed++;
+
+ hwerrs = ipath_read_kreg64(dd, dd->ipath_kregs->kr_hwerrstatus);
+ ctrl = ipath_read_kreg32(dd, dd->ipath_kregs->kr_control);
+
+ ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask,
+ dd->ipath_errormask);
+
+ if ((hwerrs & dd->ipath_hwerrmask) ||
+ (ctrl & INFINIPATH_C_FREEZEMODE)) {
+ /* force re-interrupt of pending events, just in case */
+ ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrclear, 0ULL);
+ ipath_write_kreg(dd, dd->ipath_kregs->kr_errorclear, 0ULL);
+ ipath_write_kreg(dd, dd->ipath_kregs->kr_intclear, 0ULL);
+ dev_info(&dd->pcidev->dev,
+ "errormask fixed(%u) %lx -> %lx, ctrl %x hwerr %lx\n",
+ fixed, errormask, (unsigned long)dd->ipath_errormask,
+ ctrl, hwerrs);
+ } else
+ ipath_dbg("errormask fixed(%u) %lx -> %lx, no freeze\n",
+ fixed, errormask,
+ (unsigned long)dd->ipath_errormask);
+}
+
+
/**
* ipath_get_faststats - get word counters from chip before they overflow
* @opaque - contains a pointer to the infinipath device ipath_devdata
@@ -251,14 +290,13 @@ void ipath_get_faststats(unsigned long opaque)
dd->ipath_lasterror = 0;
if (dd->ipath_lasthwerror)
dd->ipath_lasthwerror = 0;
- if ((dd->ipath_maskederrs & ~dd->ipath_ignorederrs)
+ if (dd->ipath_maskederrs
&& time_after(jiffies, dd->ipath_unmasktime)) {
char ebuf[256];
int iserr;
iserr = ipath_decode_err(ebuf, sizeof ebuf,
- (dd->ipath_maskederrs & ~dd->
- ipath_ignorederrs));
- if ((dd->ipath_maskederrs & ~dd->ipath_ignorederrs) &
+ dd->ipath_maskederrs);
+ if (dd->ipath_maskederrs &
~(INFINIPATH_E_RRCVEGRFULL | INFINIPATH_E_RRCVHDRFULL |
INFINIPATH_E_PKTERRS ))
ipath_dev_err(dd, "Re-enabling masked errors "
@@ -278,9 +316,12 @@ void ipath_get_faststats(unsigned long opaque)
ipath_cdbg(ERRPKT, "Re-enabling packet"
" problem interrupt (%s)\n", ebuf);
}
- dd->ipath_maskederrs = dd->ipath_ignorederrs;
+
+ /* re-enable masked errors */
+ dd->ipath_errormask |= dd->ipath_maskederrs;
ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask,
- ~dd->ipath_maskederrs);
+ dd->ipath_errormask);
+ dd->ipath_maskederrs = 0;
}
/* limit qfull messages to ~one per minute per port */
@@ -294,6 +335,7 @@ void ipath_get_faststats(unsigned long opaque)
}
}
+ ipath_chk_errormask(dd);
done:
mod_timer(&dd->ipath_stats_timer, jiffies + HZ * 5);
}
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index f6315df..ba0428d 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1209,7 +1209,6 @@ static void set_datagram_seg(struct mlx4_wqe_datagram_seg *dseg,
memcpy(dseg->av, &to_mah(wr->wr.ud.ah)->av, sizeof (struct mlx4_av));
dseg->dqpn = cpu_to_be32(wr->wr.ud.remote_qpn);
dseg->qkey = cpu_to_be32(wr->wr.ud.remote_qkey);
-
}
static void set_data_seg(struct mlx4_wqe_data_seg *dseg,
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c
index d0808fa..5b87183 100644
--- a/drivers/net/mlx4/mr.c
+++ b/drivers/net/mlx4/mr.c
@@ -255,10 +255,8 @@ int mlx4_mr_alloc(struct mlx4_dev *dev, u32 pd, u64 iova, u64 size, u32 access,
int err;
index = mlx4_bitmap_alloc(&priv->mr_table.mpt_bitmap);
- if (index == -1) {
- err = -ENOMEM;
- goto err;
- }
+ if (index == -1)
+ return -ENOMEM;
mr->iova = iova;
mr->size = size;
@@ -269,15 +267,8 @@ int mlx4_mr_alloc(struct mlx4_dev *dev, u32 pd, u64 iova, u64 size, u32 access,
err = mlx4_mtt_init(dev, npages, page_shift, &mr->mtt);
if (err)
- goto err_index;
-
- return 0;
-
-err_index:
- mlx4_bitmap_free(&priv->mr_table.mpt_bitmap, index);
+ mlx4_bitmap_free(&priv->mr_table.mpt_bitmap, index);
-err:
- kfree(mr);
return err;
}
EXPORT_SYMBOL_GPL(mlx4_mr_alloc);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-07-21 4:56 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-07-21 4:56 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get another small batch of changes for 2.6.23:
Arthur Jones (1):
IB/ipath: Remove ipath_layer dead code
Florin Malita (1):
IB/mlx4: Fix leaks in __mlx4_ib_modify_qp
Hoang-Nam Nguyen (3):
IB/ehca: Support large page MRs
IB/ehca: Generate async event when SRQ limit reached
IB/ehca: Move ehca2ib_return_code() out of line
Joachim Fenkes (1):
IB/ehca: Make internal_create/destroy_qp() static
Michael S. Tsirkin (1):
IB/mthca: Change command token on timeout
Roland Dreier (2):
mlx4_core: Change command token on timeout
IB/mlx4: Fix error path in create_qp_common()
Stefan Roscher (1):
IB/ehca: Support small QP queues
drivers/infiniband/hw/ehca/ehca_classes.h | 50 +++--
drivers/infiniband/hw/ehca/ehca_cq.c | 8 +-
drivers/infiniband/hw/ehca/ehca_eq.c | 8 +-
drivers/infiniband/hw/ehca/ehca_irq.c | 42 +++-
drivers/infiniband/hw/ehca/ehca_main.c | 49 ++++-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 371 ++++++++++++++++++++++++-----
drivers/infiniband/hw/ehca/ehca_mrmw.h | 2 +-
drivers/infiniband/hw/ehca/ehca_pd.c | 25 ++-
drivers/infiniband/hw/ehca/ehca_qp.c | 178 ++++++++------
drivers/infiniband/hw/ehca/ehca_tools.h | 19 +--
drivers/infiniband/hw/ehca/ehca_uverbs.c | 2 +-
drivers/infiniband/hw/ehca/hcp_if.c | 50 +++-
drivers/infiniband/hw/ehca/ipz_pt_fn.c | 222 +++++++++++++----
drivers/infiniband/hw/ehca/ipz_pt_fn.h | 26 ++-
drivers/infiniband/hw/ipath/Makefile | 1 -
drivers/infiniband/hw/ipath/ipath_layer.c | 365 ----------------------------
drivers/infiniband/hw/ipath/ipath_layer.h | 71 ------
drivers/infiniband/hw/ipath/ipath_verbs.h | 2 -
drivers/infiniband/hw/mlx4/qp.c | 20 +-
drivers/infiniband/hw/mthca/mthca_cmd.c | 3 +-
drivers/net/mlx4/cmd.c | 3 +-
21 files changed, 802 insertions(+), 715 deletions(-)
delete mode 100644 drivers/infiniband/hw/ipath/ipath_layer.c
delete mode 100644 drivers/infiniband/hw/ipath/ipath_layer.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-07-18 22:52 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-07-18 22:52 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get another batch of changes for 2.6.23, including the
beginnings of cleaning up the work request posting code in mthca and
mlx4:
Dotan Barak (2):
IB/mlx4: Take sizeof the correct pointer in call to memset()
RDMA/cma: Remove local write permission from QP access flags
Hoang-Nam Nguyen (7):
IB/ehca: Fix memory leak in error path of ehca_get_dma_mr()
IB/ehca: Use common error code mapping instead of specific ones
IB/ehca: Use #define for "pages per register_rpage" instead of hardcoded value
IB/ehca: Use macro to calculate number of chunks in a mem block
IB/ehca: MR/MW structure refactoring
IB/ehca: Restructure ehca_set_pagebuf()
IB/ehca: Fix warnings issued by checkpatch.pl
Jack Morgenstein (4):
IB/mlx4: Fix flow label returned from query QP
IB/mlx4: Fix port returned from query QP for QPs in INIT state
mlx4_core: Reset device when internal error is detected
IB/mlx4: Increase max outstanding RDMA reads as target
Joachim Fenkes (1):
IB/ehca: Fix HW level autodetection
Roland Dreier (14):
IB/mthca: Schedule MSI support for removal
IB/mthca: Fix printk format used for firmware version in warning
IB/iser: Make a couple of functions static
IB/ipath: Make a few functions static
IB/ipath: Remove ipath_get_user_pages_nocopy()
IB/cm: Make internal function cm_get_ack_delay() static
IB/mthca: Use uninitialized_var() for f0
IB/mlx4: Return receive queue sizes for userspace QPs from query QP
IB/mthca: Factor out setting WQE data segment entries
IB/mlx4: Factor out setting WQE data segment entries
IB/mlx4: Factor out setting other WQE segments
IB/mthca: Factor out setting WQE remote address and atomic segment entries
IB/mthca: Factor out setting WQE UD segment entries
IB/mthca: Simplify use of size0 in work request posting
Steve Wise (1):
RDMA/cxgb3: Remove cm_id reference on listen failures
Documentation/feature-removal-schedule.txt | 10 +
drivers/infiniband/core/cm.c | 2 +-
drivers/infiniband/core/cma.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 1 +
drivers/infiniband/hw/ehca/ehca_av.c | 2 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 54 +-
drivers/infiniband/hw/ehca/ehca_classes_pSeries.h | 156 ++--
drivers/infiniband/hw/ehca/ehca_cq.c | 2 +-
drivers/infiniband/hw/ehca/ehca_eq.c | 3 +-
drivers/infiniband/hw/ehca/ehca_hca.c | 28 +-
drivers/infiniband/hw/ehca/ehca_irq.c | 56 +-
drivers/infiniband/hw/ehca/ehca_iverbs.h | 7 +-
drivers/infiniband/hw/ehca/ehca_main.c | 50 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 1087 ++++++++-------------
drivers/infiniband/hw/ehca/ehca_mrmw.h | 21 +-
drivers/infiniband/hw/ehca/ehca_qes.h | 22 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 39 +-
drivers/infiniband/hw/ehca/ehca_reqs.c | 15 +-
drivers/infiniband/hw/ehca/ehca_tools.h | 31 +-
drivers/infiniband/hw/ehca/ehca_uverbs.c | 10 +-
drivers/infiniband/hw/ehca/hcp_if.c | 8 +-
drivers/infiniband/hw/ehca/hcp_phyp.c | 2 +-
drivers/infiniband/hw/ehca/hipz_fns_core.h | 4 +-
drivers/infiniband/hw/ehca/hipz_hw.h | 24 +-
drivers/infiniband/hw/ehca/ipz_pt_fn.c | 2 +-
drivers/infiniband/hw/ehca/ipz_pt_fn.h | 4 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 2 +-
drivers/infiniband/hw/ipath/ipath_eeprom.c | 4 +-
drivers/infiniband/hw/ipath/ipath_intr.c | 2 +-
drivers/infiniband/hw/ipath/ipath_kernel.h | 2 -
drivers/infiniband/hw/ipath/ipath_ruc.c | 2 +-
drivers/infiniband/hw/ipath/ipath_user_pages.c | 26 -
drivers/infiniband/hw/ipath/ipath_verbs.c | 2 +-
drivers/infiniband/hw/ipath/ipath_verbs.h | 4 -
drivers/infiniband/hw/mlx4/qp.c | 115 ++-
drivers/infiniband/hw/mthca/mthca_main.c | 22 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 221 ++---
drivers/infiniband/hw/mthca/mthca_srq.c | 28 +-
drivers/infiniband/hw/mthca/mthca_wqe.h | 15 +
drivers/infiniband/ulp/iser/iscsi_iser.h | 5 -
drivers/infiniband/ulp/iser/iser_memory.c | 4 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 47 +-
drivers/net/mlx4/catas.c | 106 ++-
drivers/net/mlx4/eq.c | 56 +-
drivers/net/mlx4/intf.c | 2 +
drivers/net/mlx4/main.c | 26 +-
drivers/net/mlx4/mlx4.h | 13 +-
47 files changed, 1055 insertions(+), 1291 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-07-12 23:07 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-07-12 23:07 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the first batch of changes for the 2.6.23 merge window:
Andrew Morton (1):
IB: Fix ib_umem_get() when npages == 0
Arthur Jones (3):
IB/ipath: Update MAINTAINERS entry
IB/ipath: Test interrupts at driver startup
IB/ipath: Remove bogus RD_ATOMIC checks from modify_qp
Bryan O'Sullivan (1):
IB/ipath: Include <linux/vmalloc.h> to fix ppc64 build
Dave Olson (5):
IB/ipath: Support the IBA6110 revision 4
IB/ipath: Fix the mtrr_add args for chips with 2 buffer sizes
IB/ipath: Use S_ABORT not cancel and abort on exit freeze mode after recovery
IB/ipath: Be more cautious about coming out of freeze mode
IB/ipath: Change version wording to be less confusing with release number
Dotan Barak (2):
mlx4_core: Get the maximum message size from reported device capabilities
IB/core: Take sizeof the correct pointer when calling kmalloc()
Hal Rosenstock (1):
IB/mad: Enhance SMI for switch support
Hoang-Nam Nguyen (3):
IB/ehca: Change scaling_code parameter description to match default value
IB/ehca: Report RDMA atomic attributes in query_qp()
IB/ehca: Improve latency by unlocking after triggering the hardware
Jack Morgenstein (2):
IB/mlx4: Implement query QP
IB/mlx4: Implement query SRQ
Jan Engelhardt (1):
IB: Use menuconfig for InfiniBand menu
Joachim Fenkes (9):
IB/ehca: Refactor "maybe missed event" code
IB/ehca: HW level, HW caps and MTU autodetection
IB/ehca: QP code restructuring in preparation for SRQ
IB/ehca: add Shared Receive Queue support
IB/ehca: Lock renaming, static initializers
IB/ehca: Refactor sync between completions and destroy_cq using atomic_t
IB/ehca: Change idr spinlocks into rwlocks
IB/ehca: Return QP pointer in poll_cq()
IB/ehca: Notify consumers of LID/PKEY/SM changes after nondisruptive events
Joan Eslinger (1):
IB/ipath: Change use of constants for TID type to defined values
John Gregor (2):
IB/ipath: Remove incompletely implemented ipath_runtime flags and code
IB/ipath: Update copyright dates
Mark Debbage (2):
IB/ipath: Correct checking of swminor version field when using subports
IB/ipath: Make handling of one subport consistent
Michael Albaugh (4):
IB/ipath: Support blinking LEDs with an led_override file
IB/ipath: Lock and always use shadow copies of GPIO register
IB/ipath: Log "active" time and some errors to EEPROM
IB/ipath: Add capability to modify PBC word
Michael S. Tsirkin (2):
IB/mlx4: Include linux/mutex.h from mlx4_ib.h
mlx4_core: Include linux/mutex.h from mlx4.h
Ralph Campbell (10):
IB/ipath: Fix problem with next WQE after a UC completion
IB/ipath: Fix local loopback bug when waiting for resources
IB/ipath: Set M bit in BTH according to IB spec
IB/ipath: Fix RDMA read retry code
IB/ipath: Wait for PIO available interrupt
IB/ipath: Fix possible data corruption if multiple SGEs used for receive
IB/ipath: Duplicate RDMA reads can cause responder to NAK inappropriately
IB/ipath: Add barrier before updating WC head in shared memory
IB/ipath: Lower default number of kernel send buffers
IB/ipath: Remove support for preproduction HTX InfiniPath cards
Robert Walsh (5):
IB/ipath: Fix maximum MTU reporting
IB/ipath: Fill in some missing FMR-related fields in query_device
IB/ipath: Send ACK invalid where appropriate
IB/ipath: ipath_poll fixups and enhancements
IB/ipath: Clean send flags properly on QP reset
Roland Dreier (5):
IB: Remove garbage non-ASCII characters from comments
IB: Update mailing list address
IPoIB/cm: Fix warning if IPV6 is not enabled
IPoIB: Recycle loopback skbs instead of freeing and reallocating
IB: Update MAINTAINERS with Hal's new email address
Sean Hefty (7):
IB/ipath: return correct PortGUID in NodeInfo
IB/sa: Make sure SA queries use default P_Key
IB/cm: Use spin_lock_irq() instead of spin_lock_irqsave() when possible
IB/cm: Include HCA ACK delay in local ACK timeout
IB/cm: cm_msgs.h should include ib_cm.h
IB/cm: Fix handling of duplicate SIDR REQs
IB/cm: Send no match if a SIDR REQ does not match a listen
Shani Moideen (1):
IB/mthca: Replace memset(<addr>, 0, PAGE_SIZE) with clear_page(<addr>)
Stefan Roscher (2):
IB/ehca: Support UD low-latency QPs
IB/ehca: Set SEND_GRH flag for all non-LL UD QPs on eHCA2
Steve Wise (6):
RDMA/cxgb3: Streaming -> RDMA mode transition fixes
RDMA/cxgb3: TERMINATE WRs can hang the tx ofld queue
RDMA/cxgb3: Don't count neg_adv abort_req_rss messages as real aborts
RDMA/cxgb3: ctrl-qp init/clear shouldn't set the gen bit
RDMA/cxgb3: Don't post TID_RELEASE message
RDMA/cxgb3: Don't abort after failures sending the mpa reply
WANG Cong (1):
RDMA/cxgb3: Check return of kmalloc() in iwch_register_device()
MAINTAINERS | 15 +-
drivers/infiniband/Kconfig | 15 +-
drivers/infiniband/core/agent.c | 19 +-
drivers/infiniband/core/cm.c | 247 ++++---
drivers/infiniband/core/cm_msgs.h | 1 +
drivers/infiniband/core/cma.c | 1 -
drivers/infiniband/core/mad.c | 50 ++-
drivers/infiniband/core/multicast.c | 2 +-
drivers/infiniband/core/sa.h | 2 +-
drivers/infiniband/core/sa_query.c | 87 ++-
drivers/infiniband/core/smi.c | 16 +-
drivers/infiniband/core/smi.h | 2 +
drivers/infiniband/core/sysfs.c | 2 +-
drivers/infiniband/core/ucm.c | 1 -
drivers/infiniband/core/umem.c | 1 +
drivers/infiniband/hw/amso1100/Kconfig | 2 +-
drivers/infiniband/hw/cxgb3/Kconfig | 2 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 6 +-
drivers/infiniband/hw/cxgb3/cxio_wr.h | 3 +-
drivers/infiniband/hw/cxgb3/iwch_cm.c | 108 ++--
drivers/infiniband/hw/cxgb3/iwch_cm.h | 1 +
drivers/infiniband/hw/cxgb3/iwch_provider.c | 7 +-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 7 +-
drivers/infiniband/hw/ehca/Kconfig | 2 +-
drivers/infiniband/hw/ehca/ehca_av.c | 6 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 75 ++-
drivers/infiniband/hw/ehca/ehca_classes_pSeries.h | 4 +-
drivers/infiniband/hw/ehca/ehca_cq.c | 50 +-
drivers/infiniband/hw/ehca/ehca_hca.c | 61 ++-
drivers/infiniband/hw/ehca/ehca_irq.c | 140 +++--
drivers/infiniband/hw/ehca/ehca_irq.h | 1 -
drivers/infiniband/hw/ehca/ehca_iverbs.h | 18 +
drivers/infiniband/hw/ehca/ehca_main.c | 98 +++-
drivers/infiniband/hw/ehca/ehca_qp.c | 751 +++++++++++++++------
drivers/infiniband/hw/ehca/ehca_reqs.c | 85 ++-
drivers/infiniband/hw/ehca/ehca_tools.h | 1 +
drivers/infiniband/hw/ehca/ehca_uverbs.c | 13 +-
drivers/infiniband/hw/ehca/hcp_if.c | 58 +-
drivers/infiniband/hw/ehca/hcp_if.h | 1 -
drivers/infiniband/hw/ehca/hipz_hw.h | 19 +
drivers/infiniband/hw/ehca/ipz_pt_fn.h | 28 +-
drivers/infiniband/hw/ipath/Kconfig | 2 +-
drivers/infiniband/hw/ipath/ipath_common.h | 33 +-
drivers/infiniband/hw/ipath/ipath_cq.c | 7 +-
drivers/infiniband/hw/ipath/ipath_debug.h | 2 +-
drivers/infiniband/hw/ipath/ipath_diag.c | 41 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 187 +++++-
drivers/infiniband/hw/ipath/ipath_eeprom.c | 303 ++++++++-
drivers/infiniband/hw/ipath/ipath_file_ops.c | 205 ++++--
drivers/infiniband/hw/ipath/ipath_fs.c | 9 +-
drivers/infiniband/hw/ipath/ipath_iba6110.c | 101 ++--
drivers/infiniband/hw/ipath/ipath_iba6120.c | 92 ++-
drivers/infiniband/hw/ipath/ipath_init_chip.c | 26 +-
drivers/infiniband/hw/ipath/ipath_intr.c | 141 ++++-
drivers/infiniband/hw/ipath/ipath_kernel.h | 85 +++-
drivers/infiniband/hw/ipath/ipath_keys.c | 2 +-
drivers/infiniband/hw/ipath/ipath_layer.c | 2 +-
drivers/infiniband/hw/ipath/ipath_layer.h | 2 +-
drivers/infiniband/hw/ipath/ipath_mad.c | 11 +-
drivers/infiniband/hw/ipath/ipath_mmap.c | 2 +-
drivers/infiniband/hw/ipath/ipath_mr.c | 2 +-
drivers/infiniband/hw/ipath/ipath_qp.c | 19 +-
drivers/infiniband/hw/ipath/ipath_rc.c | 116 +++-
drivers/infiniband/hw/ipath/ipath_registers.h | 2 +-
drivers/infiniband/hw/ipath/ipath_ruc.c | 36 +-
drivers/infiniband/hw/ipath/ipath_srq.c | 4 +-
drivers/infiniband/hw/ipath/ipath_stats.c | 25 +-
drivers/infiniband/hw/ipath/ipath_sysfs.c | 43 ++-
drivers/infiniband/hw/ipath/ipath_uc.c | 9 +-
drivers/infiniband/hw/ipath/ipath_ud.c | 6 +-
drivers/infiniband/hw/ipath/ipath_user_pages.c | 2 +-
drivers/infiniband/hw/ipath/ipath_verbs.c | 29 +-
drivers/infiniband/hw/ipath/ipath_verbs.h | 3 +-
drivers/infiniband/hw/ipath/ipath_verbs_mcast.c | 2 +-
drivers/infiniband/hw/ipath/ipath_wc_ppc64.c | 2 +-
drivers/infiniband/hw/ipath/ipath_wc_x86_64.c | 29 +-
drivers/infiniband/hw/mlx4/Kconfig | 1 -
drivers/infiniband/hw/mlx4/main.c | 6 +-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 4 +
drivers/infiniband/hw/mlx4/qp.c | 137 ++++
drivers/infiniband/hw/mlx4/srq.c | 18 +
drivers/infiniband/hw/mthca/Kconfig | 2 +-
drivers/infiniband/hw/mthca/mthca_allocator.c | 2 +-
drivers/infiniband/hw/mthca/mthca_eq.c | 2 +-
drivers/infiniband/ulp/ipoib/Kconfig | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 33 +-
drivers/infiniband/ulp/iser/Kconfig | 2 +-
drivers/infiniband/ulp/srp/Kconfig | 2 +-
drivers/net/cxgb3/version.h | 2 +-
drivers/net/mlx4/fw.c | 3 +
drivers/net/mlx4/fw.h | 1 +
drivers/net/mlx4/main.c | 1 +
drivers/net/mlx4/mlx4.h | 1 +
drivers/net/mlx4/qp.c | 21 +
drivers/net/mlx4/srq.c | 30 +
include/linux/mlx4/device.h | 2 +
include/linux/mlx4/qp.h | 3 +
include/rdma/ib_cm.h | 1 -
include/rdma/ib_mad.h | 3 +
100 files changed, 2812 insertions(+), 1061 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-07-03 3:50 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-07-03 3:50 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a fix for a crash in IPoIB and new device IDs for mlx4:
Jack Morgenstein (1):
mlx4_core: Add new Mellanox device IDs
Ralph Campbell (1):
IPoIB/cm: Partial error clean up unmaps wrong address
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 4 ++--
drivers/net/mlx4/main.c | 2 ++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 5ffc464..ea74d1e 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -148,8 +148,8 @@ partial_error:
ib_dma_unmap_single(priv->ca, mapping[0], IPOIB_CM_HEAD_SIZE, DMA_FROM_DEVICE);
- for (; i >= 0; --i)
- ib_dma_unmap_single(priv->ca, mapping[i + 1], PAGE_SIZE, DMA_FROM_DEVICE);
+ for (; i > 0; --i)
+ ib_dma_unmap_single(priv->ca, mapping[i], PAGE_SIZE, DMA_FROM_DEVICE);
dev_kfree_skb_any(skb);
return NULL;
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 41eafeb..c3da2a2 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -911,6 +911,8 @@ static struct pci_device_id mlx4_pci_table[] = {
{ PCI_VDEVICE(MELLANOX, 0x6340) }, /* MT25408 "Hermon" SDR */
{ PCI_VDEVICE(MELLANOX, 0x634a) }, /* MT25408 "Hermon" DDR */
{ PCI_VDEVICE(MELLANOX, 0x6354) }, /* MT25408 "Hermon" QDR */
+ { PCI_VDEVICE(MELLANOX, 0x6732) }, /* MT25408 "Hermon" DDR PCIe gen2 */
+ { PCI_VDEVICE(MELLANOX, 0x673c) }, /* MT25408 "Hermon" QDR PCIe gen2 */
{ 0, }
};
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-06-22 16:26 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-06-22 16:26 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few fixes for crashes/deadlocks as a well as a few
other small, safe fixes:
Jack Morgenstein (1):
IB/mlx4: Correct max_srq_wr returned from mlx4_ib_query_device()
Michael S. Tsirkin (2):
IPoIB/cm: Initialize RX before moving QP to RTR
IPoIB/cm: Fix interoperability when MTU doesn't match
Roland Dreier (2):
IB/umem: Fix possible hang on process exit
IPoIB/cm: Remove dead definition of struct ipoib_cm_id
drivers/infiniband/core/umem.c | 16 ++++++-----
drivers/infiniband/hw/mlx4/main.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 42 ++++++++++++++----------------
3 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
index b4aec51..d40652a 100644
--- a/drivers/infiniband/core/umem.c
+++ b/drivers/infiniband/core/umem.c
@@ -225,13 +225,15 @@ void ib_umem_release(struct ib_umem *umem)
* up here and not be able to take the mmap_sem. In that case
* we defer the vm_locked accounting to the system workqueue.
*/
- if (context->closing && !down_write_trylock(&mm->mmap_sem)) {
- INIT_WORK(&umem->work, ib_umem_account);
- umem->mm = mm;
- umem->diff = diff;
-
- schedule_work(&umem->work);
- return;
+ if (context->closing) {
+ if (!down_write_trylock(&mm->mmap_sem)) {
+ INIT_WORK(&umem->work, ib_umem_account);
+ umem->mm = mm;
+ umem->diff = diff;
+
+ schedule_work(&umem->work);
+ return;
+ }
} else
down_write(&mm->mmap_sem);
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index 1095c82..c591616 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -120,7 +120,7 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
props->max_qp_init_rd_atom = dev->dev->caps.max_qp_init_rdma;
props->max_res_rd_atom = props->max_qp_rd_atom * props->max_qp;
props->max_srq = dev->dev->caps.num_srqs - dev->dev->caps.reserved_srqs;
- props->max_srq_wr = dev->dev->caps.max_srq_wqes;
+ props->max_srq_wr = dev->dev->caps.max_srq_wqes - 1;
props->max_srq_sge = dev->dev->caps.max_srq_sge;
props->local_ca_ack_delay = dev->dev->caps.local_ca_ack_delay;
props->atomic_cap = dev->dev->caps.flags & MLX4_DEV_CAP_FLAG_ATOMIC ?
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 076a0bb..5ffc464 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -56,13 +56,6 @@ MODULE_PARM_DESC(cm_data_debug_level,
#define IPOIB_CM_RX_DELAY (3 * 256 * HZ)
#define IPOIB_CM_RX_UPDATE_MASK (0x3)
-struct ipoib_cm_id {
- struct ib_cm_id *id;
- int flags;
- u32 remote_qpn;
- u32 remote_mtu;
-};
-
static struct ib_qp_attr ipoib_cm_err_attr = {
.qp_state = IB_QPS_ERR
};
@@ -309,6 +302,11 @@ static int ipoib_cm_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even
return -ENOMEM;
p->dev = dev;
p->id = cm_id;
+ cm_id->context = p;
+ p->state = IPOIB_CM_RX_LIVE;
+ p->jiffies = jiffies;
+ INIT_LIST_HEAD(&p->list);
+
p->qp = ipoib_cm_create_rx_qp(dev, p);
if (IS_ERR(p->qp)) {
ret = PTR_ERR(p->qp);
@@ -320,24 +318,24 @@ static int ipoib_cm_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even
if (ret)
goto err_modify;
+ spin_lock_irq(&priv->lock);
+ queue_delayed_work(ipoib_workqueue,
+ &priv->cm.stale_task, IPOIB_CM_RX_DELAY);
+ /* Add this entry to passive ids list head, but do not re-add it
+ * if IB_EVENT_QP_LAST_WQE_REACHED has moved it to flush list. */
+ p->jiffies = jiffies;
+ if (p->state == IPOIB_CM_RX_LIVE)
+ list_move(&p->list, &priv->cm.passive_ids);
+ spin_unlock_irq(&priv->lock);
+
ret = ipoib_cm_send_rep(dev, cm_id, p->qp, &event->param.req_rcvd, psn);
if (ret) {
ipoib_warn(priv, "failed to send REP: %d\n", ret);
- goto err_rep;
+ if (ib_modify_qp(p->qp, &ipoib_cm_err_attr, IB_QP_STATE))
+ ipoib_warn(priv, "unable to move qp to error state\n");
}
-
- cm_id->context = p;
- p->jiffies = jiffies;
- p->state = IPOIB_CM_RX_LIVE;
- spin_lock_irq(&priv->lock);
- if (list_empty(&priv->cm.passive_ids))
- queue_delayed_work(ipoib_workqueue,
- &priv->cm.stale_task, IPOIB_CM_RX_DELAY);
- list_add(&p->list, &priv->cm.passive_ids);
- spin_unlock_irq(&priv->lock);
return 0;
-err_rep:
err_modify:
ib_destroy_qp(p->qp);
err_qp:
@@ -754,9 +752,9 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even
p->mtu = be32_to_cpu(data->mtu);
- if (p->mtu < priv->dev->mtu + IPOIB_ENCAP_LEN) {
- ipoib_warn(priv, "Rejecting connection: mtu %d < device mtu %d + 4\n",
- p->mtu, priv->dev->mtu);
+ if (p->mtu <= IPOIB_ENCAP_LEN) {
+ ipoib_warn(priv, "Rejecting connection: mtu %d <= %d\n",
+ p->mtu, IPOIB_ENCAP_LEN);
return -EINVAL;
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-06-18 15:49 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-06-18 15:49 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a bunch of fixes to the new mlx4 driver. This pull is
bigger than I would have liked after -rc5, but Mellanox discovered a
problem that required a firmware change and also some driver help to
fix. Since this is a new driver for 2.6.22, which is for new hardware
that no one has in production yet, I think it's better to merge this
early even if it risks introducing a bug, rather than have a driver
in 2.6.22 that doesn't work at all with current adapter firmware.
Jack Morgenstein (1):
IB/mlx4: Handle buffer wraparound in __mlx4_ib_cq_clean()
Roland Dreier (6):
IB/mlx4: Fix handling of wq->tail for send completions
IB/mlx4: Fix warning in rounding up queue sizes
IB/mlx4: Handle new FW requirement for send request prefetching
IB/mlx4: Get rid of max_inline_data calculation
IB/mlx4: Handle FW command interface rev 3
IB/mlx4: Make sure inline data segments don't cross a 64 byte boundary
drivers/infiniband/hw/mlx4/cq.c | 19 ++--
drivers/infiniband/hw/mlx4/main.c | 16 ++-
drivers/infiniband/hw/mlx4/mlx4_ib.h | 5 +-
drivers/infiniband/hw/mlx4/qp.c | 196 ++++++++++++++++++++++------------
drivers/infiniband/hw/mlx4/user.h | 9 +-
drivers/net/mlx4/fw.c | 110 +++++++++++++-------
drivers/net/mlx4/fw.h | 10 +-
drivers/net/mlx4/main.c | 14 ++-
include/linux/mlx4/cmd.h | 1 +
include/linux/mlx4/device.h | 13 ++-
include/linux/mlx4/qp.h | 4 +
11 files changed, 259 insertions(+), 138 deletions(-)
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index b2a290c..660b27a 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
@@ -354,8 +354,8 @@ static int mlx4_ib_poll_one(struct mlx4_ib_cq *cq,
if (is_send) {
wq = &(*cur_qp)->sq;
wqe_ctr = be16_to_cpu(cqe->wqe_index);
- wq->tail += wqe_ctr - (u16) wq->tail;
- wc->wr_id = wq->wrid[wq->tail & (wq->max - 1)];
+ wq->tail += (u16) (wqe_ctr - (u16) wq->tail);
+ wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
++wq->tail;
} else if ((*cur_qp)->ibqp.srq) {
srq = to_msrq((*cur_qp)->ibqp.srq);
@@ -364,7 +364,7 @@ static int mlx4_ib_poll_one(struct mlx4_ib_cq *cq,
mlx4_ib_free_srq_wqe(srq, wqe_ctr);
} else {
wq = &(*cur_qp)->rq;
- wc->wr_id = wq->wrid[wq->tail & (wq->max - 1)];
+ wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
++wq->tail;
}
@@ -478,7 +478,8 @@ void __mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq)
{
u32 prod_index;
int nfreed = 0;
- struct mlx4_cqe *cqe;
+ struct mlx4_cqe *cqe, *dest;
+ u8 owner_bit;
/*
* First we need to find the current producer index, so we
@@ -501,9 +502,13 @@ void __mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq)
if (srq && !(cqe->owner_sr_opcode & MLX4_CQE_IS_SEND_MASK))
mlx4_ib_free_srq_wqe(srq, be16_to_cpu(cqe->wqe_index));
++nfreed;
- } else if (nfreed)
- memcpy(get_cqe(cq, (prod_index + nfreed) & cq->ibcq.cqe),
- cqe, sizeof *cqe);
+ } else if (nfreed) {
+ dest = get_cqe(cq, (prod_index + nfreed) & cq->ibcq.cqe);
+ owner_bit = dest->owner_sr_opcode & MLX4_CQE_OWNER_MASK;
+ memcpy(dest, cqe, sizeof *cqe);
+ dest->owner_sr_opcode = owner_bit |
+ (dest->owner_sr_opcode & ~MLX4_CQE_OWNER_MASK);
+ }
}
if (nfreed) {
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
index 402f3a2..1095c82 100644
--- a/drivers/infiniband/hw/mlx4/main.c
+++ b/drivers/infiniband/hw/mlx4/main.c
@@ -125,7 +125,7 @@ static int mlx4_ib_query_device(struct ib_device *ibdev,
props->local_ca_ack_delay = dev->dev->caps.local_ca_ack_delay;
props->atomic_cap = dev->dev->caps.flags & MLX4_DEV_CAP_FLAG_ATOMIC ?
IB_ATOMIC_HCA : IB_ATOMIC_NONE;
- props->max_pkeys = dev->dev->caps.pkey_table_len;
+ props->max_pkeys = dev->dev->caps.pkey_table_len[1];
props->max_mcast_grp = dev->dev->caps.num_mgms + dev->dev->caps.num_amgms;
props->max_mcast_qp_attach = dev->dev->caps.num_qp_per_mgm;
props->max_total_mcast_qp_attach = props->max_mcast_qp_attach *
@@ -168,9 +168,9 @@ static int mlx4_ib_query_port(struct ib_device *ibdev, u8 port,
props->state = out_mad->data[32] & 0xf;
props->phys_state = out_mad->data[33] >> 4;
props->port_cap_flags = be32_to_cpup((__be32 *) (out_mad->data + 20));
- props->gid_tbl_len = to_mdev(ibdev)->dev->caps.gid_table_len;
+ props->gid_tbl_len = to_mdev(ibdev)->dev->caps.gid_table_len[port];
props->max_msg_sz = 0x80000000;
- props->pkey_tbl_len = to_mdev(ibdev)->dev->caps.pkey_table_len;
+ props->pkey_tbl_len = to_mdev(ibdev)->dev->caps.pkey_table_len[port];
props->bad_pkey_cntr = be16_to_cpup((__be16 *) (out_mad->data + 46));
props->qkey_viol_cntr = be16_to_cpup((__be16 *) (out_mad->data + 48));
props->active_width = out_mad->data[31] & 0xf;
@@ -280,8 +280,14 @@ static int mlx4_SET_PORT(struct mlx4_ib_dev *dev, u8 port, int reset_qkey_viols,
return PTR_ERR(mailbox);
memset(mailbox->buf, 0, 256);
- *(u8 *) mailbox->buf = !!reset_qkey_viols << 6;
- ((__be32 *) mailbox->buf)[2] = cpu_to_be32(cap_mask);
+
+ if (dev->dev->flags & MLX4_FLAG_OLD_PORT_CMDS) {
+ *(u8 *) mailbox->buf = !!reset_qkey_viols << 6;
+ ((__be32 *) mailbox->buf)[2] = cpu_to_be32(cap_mask);
+ } else {
+ ((u8 *) mailbox->buf)[3] = !!reset_qkey_viols;
+ ((__be32 *) mailbox->buf)[1] = cpu_to_be32(cap_mask);
+ }
err = mlx4_cmd(dev->dev, mailbox->dma, port, 0, MLX4_CMD_SET_PORT,
MLX4_CMD_TIME_CLASS_B);
diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h
index 93dac71..24ccadd 100644
--- a/drivers/infiniband/hw/mlx4/mlx4_ib.h
+++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h
@@ -95,7 +95,8 @@ struct mlx4_ib_mr {
struct mlx4_ib_wq {
u64 *wrid;
spinlock_t lock;
- int max;
+ int wqe_cnt;
+ int max_post;
int max_gs;
int offset;
int wqe_shift;
@@ -113,6 +114,7 @@ struct mlx4_ib_qp {
u32 doorbell_qpn;
__be32 sq_signal_bits;
+ int sq_spare_wqes;
struct mlx4_ib_wq sq;
struct ib_umem *umem;
@@ -123,6 +125,7 @@ struct mlx4_ib_qp {
u8 alt_port;
u8 atomic_rd_en;
u8 resp_depth;
+ u8 sq_no_prefetch;
u8 state;
};
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 5c6d054..f8a1a08 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -109,6 +109,20 @@ static void *get_send_wqe(struct mlx4_ib_qp *qp, int n)
return get_wqe(qp, qp->sq.offset + (n << qp->sq.wqe_shift));
}
+/*
+ * Stamp a SQ WQE so that it is invalid if prefetched by marking the
+ * first four bytes of every 64 byte chunk with 0xffffffff, except for
+ * the very first chunk of the WQE.
+ */
+static void stamp_send_wqe(struct mlx4_ib_qp *qp, int n)
+{
+ u32 *wqe = get_send_wqe(qp, n);
+ int i;
+
+ for (i = 16; i < 1 << (qp->sq.wqe_shift - 2); i += 16)
+ wqe[i] = 0xffffffff;
+}
+
static void mlx4_ib_qp_event(struct mlx4_qp *qp, enum mlx4_event type)
{
struct ib_event event;
@@ -178,6 +192,8 @@ static int send_wqe_overhead(enum ib_qp_type type)
case IB_QPT_GSI:
return sizeof (struct mlx4_wqe_ctrl_seg) +
ALIGN(MLX4_IB_UD_HEADER_SIZE +
+ DIV_ROUND_UP(MLX4_IB_UD_HEADER_SIZE,
+ MLX4_INLINE_ALIGN) *
sizeof (struct mlx4_wqe_inline_seg),
sizeof (struct mlx4_wqe_data_seg)) +
ALIGN(4 +
@@ -201,18 +217,18 @@ static int set_rq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
if (cap->max_recv_wr)
return -EINVAL;
- qp->rq.max = qp->rq.max_gs = 0;
+ qp->rq.wqe_cnt = qp->rq.max_gs = 0;
} else {
/* HW requires >= 1 RQ entry with >= 1 gather entry */
if (is_user && (!cap->max_recv_wr || !cap->max_recv_sge))
return -EINVAL;
- qp->rq.max = roundup_pow_of_two(max(1, cap->max_recv_wr));
- qp->rq.max_gs = roundup_pow_of_two(max(1, cap->max_recv_sge));
+ qp->rq.wqe_cnt = roundup_pow_of_two(max(1U, cap->max_recv_wr));
+ qp->rq.max_gs = roundup_pow_of_two(max(1U, cap->max_recv_sge));
qp->rq.wqe_shift = ilog2(qp->rq.max_gs * sizeof (struct mlx4_wqe_data_seg));
}
- cap->max_recv_wr = qp->rq.max;
+ cap->max_recv_wr = qp->rq.max_post = qp->rq.wqe_cnt;
cap->max_recv_sge = qp->rq.max_gs;
return 0;
@@ -236,8 +252,6 @@ static int set_kernel_sq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
cap->max_send_sge + 2 > dev->dev->caps.max_sq_sg)
return -EINVAL;
- qp->sq.max = cap->max_send_wr ? roundup_pow_of_two(cap->max_send_wr) : 1;
-
qp->sq.wqe_shift = ilog2(roundup_pow_of_two(max(cap->max_send_sge *
sizeof (struct mlx4_wqe_data_seg),
cap->max_inline_data +
@@ -246,20 +260,27 @@ static int set_kernel_sq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
qp->sq.max_gs = ((1 << qp->sq.wqe_shift) - send_wqe_overhead(type)) /
sizeof (struct mlx4_wqe_data_seg);
- qp->buf_size = (qp->rq.max << qp->rq.wqe_shift) +
- (qp->sq.max << qp->sq.wqe_shift);
+ /*
+ * We need to leave 2 KB + 1 WQE of headroom in the SQ to
+ * allow HW to prefetch.
+ */
+ qp->sq_spare_wqes = (2048 >> qp->sq.wqe_shift) + 1;
+ qp->sq.wqe_cnt = roundup_pow_of_two(cap->max_send_wr + qp->sq_spare_wqes);
+
+ qp->buf_size = (qp->rq.wqe_cnt << qp->rq.wqe_shift) +
+ (qp->sq.wqe_cnt << qp->sq.wqe_shift);
if (qp->rq.wqe_shift > qp->sq.wqe_shift) {
qp->rq.offset = 0;
- qp->sq.offset = qp->rq.max << qp->rq.wqe_shift;
+ qp->sq.offset = qp->rq.wqe_cnt << qp->rq.wqe_shift;
} else {
- qp->rq.offset = qp->sq.max << qp->sq.wqe_shift;
+ qp->rq.offset = qp->sq.wqe_cnt << qp->sq.wqe_shift;
qp->sq.offset = 0;
}
- cap->max_send_wr = qp->sq.max;
- cap->max_send_sge = qp->sq.max_gs;
- cap->max_inline_data = (1 << qp->sq.wqe_shift) - send_wqe_overhead(type) -
- sizeof (struct mlx4_wqe_inline_seg);
+ cap->max_send_wr = qp->sq.max_post = qp->sq.wqe_cnt - qp->sq_spare_wqes;
+ cap->max_send_sge = qp->sq.max_gs;
+ /* We don't support inline sends for kernel QPs (yet) */
+ cap->max_inline_data = 0;
return 0;
}
@@ -267,11 +288,11 @@ static int set_kernel_sq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
static int set_user_sq_size(struct mlx4_ib_qp *qp,
struct mlx4_ib_create_qp *ucmd)
{
- qp->sq.max = 1 << ucmd->log_sq_bb_count;
+ qp->sq.wqe_cnt = 1 << ucmd->log_sq_bb_count;
qp->sq.wqe_shift = ucmd->log_sq_stride;
- qp->buf_size = (qp->rq.max << qp->rq.wqe_shift) +
- (qp->sq.max << qp->sq.wqe_shift);
+ qp->buf_size = (qp->rq.wqe_cnt << qp->rq.wqe_shift) +
+ (qp->sq.wqe_cnt << qp->sq.wqe_shift);
return 0;
}
@@ -307,6 +328,8 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
goto err;
}
+ qp->sq_no_prefetch = ucmd.sq_no_prefetch;
+
err = set_user_sq_size(qp, &ucmd);
if (err)
goto err;
@@ -334,6 +357,8 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
goto err_mtt;
}
} else {
+ qp->sq_no_prefetch = 0;
+
err = set_kernel_sq_size(dev, &init_attr->cap, init_attr->qp_type, qp);
if (err)
goto err;
@@ -360,16 +385,13 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
if (err)
goto err_mtt;
- qp->sq.wrid = kmalloc(qp->sq.max * sizeof (u64), GFP_KERNEL);
- qp->rq.wrid = kmalloc(qp->rq.max * sizeof (u64), GFP_KERNEL);
+ qp->sq.wrid = kmalloc(qp->sq.wqe_cnt * sizeof (u64), GFP_KERNEL);
+ qp->rq.wrid = kmalloc(qp->rq.wqe_cnt * sizeof (u64), GFP_KERNEL);
if (!qp->sq.wrid || !qp->rq.wrid) {
err = -ENOMEM;
goto err_wrid;
}
-
- /* We don't support inline sends for kernel QPs (yet) */
- init_attr->cap.max_inline_data = 0;
}
err = mlx4_qp_alloc(dev->dev, sqpn, &qp->mqp);
@@ -583,24 +605,6 @@ int mlx4_ib_destroy_qp(struct ib_qp *qp)
return 0;
}
-static void init_port(struct mlx4_ib_dev *dev, int port)
-{
- struct mlx4_init_port_param param;
- int err;
-
- memset(¶m, 0, sizeof param);
-
- param.port_width_cap = dev->dev->caps.port_width_cap;
- param.vl_cap = dev->dev->caps.vl_cap;
- param.mtu = ib_mtu_enum_to_int(dev->dev->caps.mtu_cap);
- param.max_gid = dev->dev->caps.gid_table_len;
- param.max_pkey = dev->dev->caps.pkey_table_len;
-
- err = mlx4_INIT_PORT(dev->dev, ¶m, port);
- if (err)
- printk(KERN_WARNING "INIT_PORT failed, return code %d.\n", err);
-}
-
static int to_mlx4_st(enum ib_qp_type type)
{
switch (type) {
@@ -674,9 +678,9 @@ static int mlx4_set_path(struct mlx4_ib_dev *dev, const struct ib_ah_attr *ah,
path->counter_index = 0xff;
if (ah->ah_flags & IB_AH_GRH) {
- if (ah->grh.sgid_index >= dev->dev->caps.gid_table_len) {
+ if (ah->grh.sgid_index >= dev->dev->caps.gid_table_len[port]) {
printk(KERN_ERR "sgid_index (%u) too large. max is %d\n",
- ah->grh.sgid_index, dev->dev->caps.gid_table_len - 1);
+ ah->grh.sgid_index, dev->dev->caps.gid_table_len[port] - 1);
return -1;
}
@@ -743,14 +747,17 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
context->mtu_msgmax = (attr->path_mtu << 5) | 31;
}
- if (qp->rq.max)
- context->rq_size_stride = ilog2(qp->rq.max) << 3;
+ if (qp->rq.wqe_cnt)
+ context->rq_size_stride = ilog2(qp->rq.wqe_cnt) << 3;
context->rq_size_stride |= qp->rq.wqe_shift - 4;
- if (qp->sq.max)
- context->sq_size_stride = ilog2(qp->sq.max) << 3;
+ if (qp->sq.wqe_cnt)
+ context->sq_size_stride = ilog2(qp->sq.wqe_cnt) << 3;
context->sq_size_stride |= qp->sq.wqe_shift - 4;
+ if (cur_state == IB_QPS_RESET && new_state == IB_QPS_INIT)
+ context->sq_size_stride |= !!qp->sq_no_prefetch << 7;
+
if (qp->ibqp.uobject)
context->usr_page = cpu_to_be32(to_mucontext(ibqp->uobject->context)->uar.index);
else
@@ -789,13 +796,14 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
}
if (attr_mask & IB_QP_ALT_PATH) {
- if (attr->alt_pkey_index >= dev->dev->caps.pkey_table_len)
- return -EINVAL;
-
if (attr->alt_port_num == 0 ||
attr->alt_port_num > dev->dev->caps.num_ports)
return -EINVAL;
+ if (attr->alt_pkey_index >=
+ dev->dev->caps.pkey_table_len[attr->alt_port_num])
+ return -EINVAL;
+
if (mlx4_set_path(dev, &attr->alt_ah_attr, &context->alt_path,
attr->alt_port_num))
return -EINVAL;
@@ -884,16 +892,19 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
/*
* Before passing a kernel QP to the HW, make sure that the
- * ownership bits of the send queue are set so that the
- * hardware doesn't start processing stale work requests.
+ * ownership bits of the send queue are set and the SQ
+ * headroom is stamped so that the hardware doesn't start
+ * processing stale work requests.
*/
if (!ibqp->uobject && cur_state == IB_QPS_RESET && new_state == IB_QPS_INIT) {
struct mlx4_wqe_ctrl_seg *ctrl;
int i;
- for (i = 0; i < qp->sq.max; ++i) {
+ for (i = 0; i < qp->sq.wqe_cnt; ++i) {
ctrl = get_send_wqe(qp, i);
ctrl->owner_opcode = cpu_to_be32(1 << 31);
+
+ stamp_send_wqe(qp, i);
}
}
@@ -923,7 +934,9 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
*/
if (is_qp0(dev, qp)) {
if (cur_state != IB_QPS_RTR && new_state == IB_QPS_RTR)
- init_port(dev, qp->port);
+ if (mlx4_INIT_PORT(dev->dev, qp->port))
+ printk(KERN_WARNING "INIT_PORT failed for port %d\n",
+ qp->port);
if (cur_state != IB_QPS_RESET && cur_state != IB_QPS_ERR &&
(new_state == IB_QPS_RESET || new_state == IB_QPS_ERR))
@@ -986,16 +999,17 @@ int mlx4_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
if (!ib_modify_qp_is_ok(cur_state, new_state, ibqp->qp_type, attr_mask))
goto out;
- if ((attr_mask & IB_QP_PKEY_INDEX) &&
- attr->pkey_index >= dev->dev->caps.pkey_table_len) {
- goto out;
- }
-
if ((attr_mask & IB_QP_PORT) &&
(attr->port_num == 0 || attr->port_num > dev->dev->caps.num_ports)) {
goto out;
}
+ if (attr_mask & IB_QP_PKEY_INDEX) {
+ int p = attr_mask & IB_QP_PORT ? attr->port_num : qp->port;
+ if (attr->pkey_index >= dev->dev->caps.pkey_table_len[p])
+ goto out;
+ }
+
if (attr_mask & IB_QP_MAX_QP_RD_ATOMIC &&
attr->max_rd_atomic > dev->dev->caps.max_qp_init_rdma) {
goto out;
@@ -1037,6 +1051,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
u16 pkey;
int send_size;
int header_size;
+ int spc;
int i;
send_size = 0;
@@ -1112,10 +1127,43 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
printk("\n");
}
- inl->byte_count = cpu_to_be32(1 << 31 | header_size);
- memcpy(inl + 1, sqp->header_buf, header_size);
+ /*
+ * Inline data segments may not cross a 64 byte boundary. If
+ * our UD header is bigger than the space available up to the
+ * next 64 byte boundary in the WQE, use two inline data
+ * segments to hold the UD header.
+ */
+ spc = MLX4_INLINE_ALIGN -
+ ((unsigned long) (inl + 1) & (MLX4_INLINE_ALIGN - 1));
+ if (header_size <= spc) {
+ inl->byte_count = cpu_to_be32(1 << 31 | header_size);
+ memcpy(inl + 1, sqp->header_buf, header_size);
+ i = 1;
+ } else {
+ inl->byte_count = cpu_to_be32(1 << 31 | spc);
+ memcpy(inl + 1, sqp->header_buf, spc);
- return ALIGN(sizeof (struct mlx4_wqe_inline_seg) + header_size, 16);
+ inl = (void *) (inl + 1) + spc;
+ memcpy(inl + 1, sqp->header_buf + spc, header_size - spc);
+ /*
+ * Need a barrier here to make sure all the data is
+ * visible before the byte_count field is set.
+ * Otherwise the HCA prefetcher could grab the 64-byte
+ * chunk with this inline segment and get a valid (!=
+ * 0xffffffff) byte count but stale data, and end up
+ * processing generating a packet with bad headers.
+ *
+ * The first inline segment's byte_count field doesn't
+ * need a barrier, because it comes after a
+ * control/MLX segment and therefore is at an offset
+ * of 16 mod 64.
+ */
+ wmb();
+ inl->byte_count = cpu_to_be32(1 << 31 | (header_size - spc));
+ i = 2;
+ }
+
+ return ALIGN(i * sizeof (struct mlx4_wqe_inline_seg) + header_size, 16);
}
static int mlx4_wq_overflow(struct mlx4_ib_wq *wq, int nreq, struct ib_cq *ib_cq)
@@ -1124,7 +1172,7 @@ static int mlx4_wq_overflow(struct mlx4_ib_wq *wq, int nreq, struct ib_cq *ib_cq
struct mlx4_ib_cq *cq;
cur = wq->head - wq->tail;
- if (likely(cur + nreq < wq->max))
+ if (likely(cur + nreq < wq->max_post))
return 0;
cq = to_mcq(ib_cq);
@@ -1132,7 +1180,7 @@ static int mlx4_wq_overflow(struct mlx4_ib_wq *wq, int nreq, struct ib_cq *ib_cq
cur = wq->head - wq->tail;
spin_unlock(&cq->lock);
- return cur + nreq >= wq->max;
+ return cur + nreq >= wq->max_post;
}
int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
@@ -1165,8 +1213,8 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
goto out;
}
- ctrl = wqe = get_send_wqe(qp, ind & (qp->sq.max - 1));
- qp->sq.wrid[ind & (qp->sq.max - 1)] = wr->wr_id;
+ ctrl = wqe = get_send_wqe(qp, ind & (qp->sq.wqe_cnt - 1));
+ qp->sq.wrid[ind & (qp->sq.wqe_cnt - 1)] = wr->wr_id;
ctrl->srcrb_flags =
(wr->send_flags & IB_SEND_SIGNALED ?
@@ -1301,7 +1349,16 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
}
ctrl->owner_opcode = mlx4_ib_opcode[wr->opcode] |
- (ind & qp->sq.max ? cpu_to_be32(1 << 31) : 0);
+ (ind & qp->sq.wqe_cnt ? cpu_to_be32(1 << 31) : 0);
+
+ /*
+ * We can improve latency by not stamping the last
+ * send queue WQE until after ringing the doorbell, so
+ * only stamp here if there are still more WQEs to post.
+ */
+ if (wr->next)
+ stamp_send_wqe(qp, (ind + qp->sq_spare_wqes) &
+ (qp->sq.wqe_cnt - 1));
++ind;
}
@@ -1324,6 +1381,9 @@ out:
* and reach the HCA out of order.
*/
mmiowb();
+
+ stamp_send_wqe(qp, (ind + qp->sq_spare_wqes - 1) &
+ (qp->sq.wqe_cnt - 1));
}
spin_unlock_irqrestore(&qp->rq.lock, flags);
@@ -1344,7 +1404,7 @@ int mlx4_ib_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *wr,
spin_lock_irqsave(&qp->rq.lock, flags);
- ind = qp->rq.head & (qp->rq.max - 1);
+ ind = qp->rq.head & (qp->rq.wqe_cnt - 1);
for (nreq = 0; wr; ++nreq, wr = wr->next) {
if (mlx4_wq_overflow(&qp->rq, nreq, qp->ibqp.send_cq)) {
@@ -1375,7 +1435,7 @@ int mlx4_ib_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *wr,
qp->rq.wrid[ind] = wr->wr_id;
- ind = (ind + 1) & (qp->rq.max - 1);
+ ind = (ind + 1) & (qp->rq.wqe_cnt - 1);
}
out:
diff --git a/drivers/infiniband/hw/mlx4/user.h b/drivers/infiniband/hw/mlx4/user.h
index 88c72d5..e2d11be 100644
--- a/drivers/infiniband/hw/mlx4/user.h
+++ b/drivers/infiniband/hw/mlx4/user.h
@@ -39,7 +39,7 @@
* Increment this value if any changes that break userspace ABI
* compatibility are made.
*/
-#define MLX4_IB_UVERBS_ABI_VERSION 2
+#define MLX4_IB_UVERBS_ABI_VERSION 3
/*
* Make sure that all structs defined in this file remain laid out so
@@ -87,9 +87,10 @@ struct mlx4_ib_create_srq_resp {
struct mlx4_ib_create_qp {
__u64 buf_addr;
__u64 db_addr;
- __u8 log_sq_bb_count;
- __u8 log_sq_stride;
- __u8 reserved[6];
+ __u8 log_sq_bb_count;
+ __u8 log_sq_stride;
+ __u8 sq_no_prefetch;
+ __u8 reserved[5];
};
#endif /* MLX4_IB_USER_H */
diff --git a/drivers/net/mlx4/fw.c b/drivers/net/mlx4/fw.c
index e7ca118..d2b0653 100644
--- a/drivers/net/mlx4/fw.c
+++ b/drivers/net/mlx4/fw.c
@@ -38,7 +38,9 @@
#include "icm.h"
enum {
- MLX4_COMMAND_INTERFACE_REV = 1
+ MLX4_COMMAND_INTERFACE_MIN_REV = 2,
+ MLX4_COMMAND_INTERFACE_MAX_REV = 3,
+ MLX4_COMMAND_INTERFACE_NEW_PORT_CMDS = 3,
};
extern void __buggy_use_of_MLX4_GET(void);
@@ -107,6 +109,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
u16 size;
u16 stat_rate;
int err;
+ int i;
#define QUERY_DEV_CAP_OUT_SIZE 0x100
#define QUERY_DEV_CAP_MAX_SRQ_SZ_OFFSET 0x10
@@ -176,7 +179,6 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
err = mlx4_cmd_box(dev, 0, mailbox->dma, 0, 0, MLX4_CMD_QUERY_DEV_CAP,
MLX4_CMD_TIME_CLASS_A);
-
if (err)
goto out;
@@ -216,18 +218,10 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
dev_cap->max_rdma_global = 1 << (field & 0x3f);
MLX4_GET(field, outbox, QUERY_DEV_CAP_ACK_DELAY_OFFSET);
dev_cap->local_ca_ack_delay = field & 0x1f;
- MLX4_GET(field, outbox, QUERY_DEV_CAP_MTU_WIDTH_OFFSET);
- dev_cap->max_mtu = field >> 4;
- dev_cap->max_port_width = field & 0xf;
MLX4_GET(field, outbox, QUERY_DEV_CAP_VL_PORT_OFFSET);
- dev_cap->max_vl = field >> 4;
dev_cap->num_ports = field & 0xf;
- MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_GID_OFFSET);
- dev_cap->max_gids = 1 << (field & 0xf);
MLX4_GET(stat_rate, outbox, QUERY_DEV_CAP_RATE_SUPPORT_OFFSET);
dev_cap->stat_rate_support = stat_rate;
- MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_PKEY_OFFSET);
- dev_cap->max_pkeys = 1 << (field & 0xf);
MLX4_GET(dev_cap->flags, outbox, QUERY_DEV_CAP_FLAGS_OFFSET);
MLX4_GET(field, outbox, QUERY_DEV_CAP_RSVD_UAR_OFFSET);
dev_cap->reserved_uars = field >> 4;
@@ -304,6 +298,42 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
MLX4_GET(dev_cap->max_icm_sz, outbox,
QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET);
+ if (dev->flags & MLX4_FLAG_OLD_PORT_CMDS) {
+ for (i = 1; i <= dev_cap->num_ports; ++i) {
+ MLX4_GET(field, outbox, QUERY_DEV_CAP_VL_PORT_OFFSET);
+ dev_cap->max_vl[i] = field >> 4;
+ MLX4_GET(field, outbox, QUERY_DEV_CAP_MTU_WIDTH_OFFSET);
+ dev_cap->max_mtu[i] = field >> 4;
+ dev_cap->max_port_width[i] = field & 0xf;
+ MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_GID_OFFSET);
+ dev_cap->max_gids[i] = 1 << (field & 0xf);
+ MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_PKEY_OFFSET);
+ dev_cap->max_pkeys[i] = 1 << (field & 0xf);
+ }
+ } else {
+#define QUERY_PORT_MTU_OFFSET 0x01
+#define QUERY_PORT_WIDTH_OFFSET 0x06
+#define QUERY_PORT_MAX_GID_PKEY_OFFSET 0x07
+#define QUERY_PORT_MAX_VL_OFFSET 0x0b
+
+ for (i = 1; i <= dev_cap->num_ports; ++i) {
+ err = mlx4_cmd_box(dev, 0, mailbox->dma, i, 0, MLX4_CMD_QUERY_PORT,
+ MLX4_CMD_TIME_CLASS_B);
+ if (err)
+ goto out;
+
+ MLX4_GET(field, outbox, QUERY_PORT_MTU_OFFSET);
+ dev_cap->max_mtu[i] = field & 0xf;
+ MLX4_GET(field, outbox, QUERY_PORT_WIDTH_OFFSET);
+ dev_cap->max_port_width[i] = field & 0xf;
+ MLX4_GET(field, outbox, QUERY_PORT_MAX_GID_PKEY_OFFSET);
+ dev_cap->max_gids[i] = 1 << (field >> 4);
+ dev_cap->max_pkeys[i] = 1 << (field & 0xf);
+ MLX4_GET(field, outbox, QUERY_PORT_MAX_VL_OFFSET);
+ dev_cap->max_vl[i] = field & 0xf;
+ }
+ }
+
if (dev_cap->bmme_flags & 1)
mlx4_dbg(dev, "Base MM extensions: yes "
"(flags %d, rsvd L_Key %08x)\n",
@@ -338,8 +368,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
mlx4_dbg(dev, "Max CQEs: %d, max WQEs: %d, max SRQ WQEs: %d\n",
dev_cap->max_cq_sz, dev_cap->max_qp_sz, dev_cap->max_srq_sz);
mlx4_dbg(dev, "Local CA ACK delay: %d, max MTU: %d, port width cap: %d\n",
- dev_cap->local_ca_ack_delay, 128 << dev_cap->max_mtu,
- dev_cap->max_port_width);
+ dev_cap->local_ca_ack_delay, 128 << dev_cap->max_mtu[1],
+ dev_cap->max_port_width[1]);
mlx4_dbg(dev, "Max SQ desc size: %d, max SQ S/G: %d\n",
dev_cap->max_sq_desc_sz, dev_cap->max_sq_sg);
mlx4_dbg(dev, "Max RQ desc size: %d, max RQ S/G: %d\n",
@@ -491,7 +521,8 @@ int mlx4_QUERY_FW(struct mlx4_dev *dev)
((fw_ver & 0x0000ffffull) << 16);
MLX4_GET(cmd_if_rev, outbox, QUERY_FW_CMD_IF_REV_OFFSET);
- if (cmd_if_rev != MLX4_COMMAND_INTERFACE_REV) {
+ if (cmd_if_rev < MLX4_COMMAND_INTERFACE_MIN_REV ||
+ cmd_if_rev > MLX4_COMMAND_INTERFACE_MAX_REV) {
mlx4_err(dev, "Installed FW has unsupported "
"command interface revision %d.\n",
cmd_if_rev);
@@ -499,12 +530,15 @@ int mlx4_QUERY_FW(struct mlx4_dev *dev)
(int) (dev->caps.fw_ver >> 32),
(int) (dev->caps.fw_ver >> 16) & 0xffff,
(int) dev->caps.fw_ver & 0xffff);
- mlx4_err(dev, "This driver version supports only revision %d.\n",
- MLX4_COMMAND_INTERFACE_REV);
+ mlx4_err(dev, "This driver version supports only revisions %d to %d.\n",
+ MLX4_COMMAND_INTERFACE_MIN_REV, MLX4_COMMAND_INTERFACE_MAX_REV);
err = -ENODEV;
goto out;
}
+ if (cmd_if_rev < MLX4_COMMAND_INTERFACE_NEW_PORT_CMDS)
+ dev->flags |= MLX4_FLAG_OLD_PORT_CMDS;
+
MLX4_GET(lg, outbox, QUERY_FW_MAX_CMD_OFFSET);
cmd->max_cmds = 1 << lg;
@@ -708,13 +742,15 @@ int mlx4_INIT_HCA(struct mlx4_dev *dev, struct mlx4_init_hca_param *param)
return err;
}
-int mlx4_INIT_PORT(struct mlx4_dev *dev, struct mlx4_init_port_param *param, int port)
+int mlx4_INIT_PORT(struct mlx4_dev *dev, int port)
{
struct mlx4_cmd_mailbox *mailbox;
u32 *inbox;
int err;
u32 flags;
+ u16 field;
+ if (dev->flags & MLX4_FLAG_OLD_PORT_CMDS) {
#define INIT_PORT_IN_SIZE 256
#define INIT_PORT_FLAGS_OFFSET 0x00
#define INIT_PORT_FLAG_SIG (1 << 18)
@@ -729,32 +765,32 @@ int mlx4_INIT_PORT(struct mlx4_dev *dev, struct mlx4_init_port_param *param, int
#define INIT_PORT_NODE_GUID_OFFSET 0x18
#define INIT_PORT_SI_GUID_OFFSET 0x20
- mailbox = mlx4_alloc_cmd_mailbox(dev);
- if (IS_ERR(mailbox))
- return PTR_ERR(mailbox);
- inbox = mailbox->buf;
+ mailbox = mlx4_alloc_cmd_mailbox(dev);
+ if (IS_ERR(mailbox))
+ return PTR_ERR(mailbox);
+ inbox = mailbox->buf;
- memset(inbox, 0, INIT_PORT_IN_SIZE);
+ memset(inbox, 0, INIT_PORT_IN_SIZE);
- flags = 0;
- flags |= param->set_guid0 ? INIT_PORT_FLAG_G0 : 0;
- flags |= param->set_node_guid ? INIT_PORT_FLAG_NG : 0;
- flags |= param->set_si_guid ? INIT_PORT_FLAG_SIG : 0;
- flags |= (param->vl_cap & 0xf) << INIT_PORT_VL_SHIFT;
- flags |= (param->port_width_cap & 0xf) << INIT_PORT_PORT_WIDTH_SHIFT;
- MLX4_PUT(inbox, flags, INIT_PORT_FLAGS_OFFSET);
+ flags = 0;
+ flags |= (dev->caps.vl_cap[port] & 0xf) << INIT_PORT_VL_SHIFT;
+ flags |= (dev->caps.port_width_cap[port] & 0xf) << INIT_PORT_PORT_WIDTH_SHIFT;
+ MLX4_PUT(inbox, flags, INIT_PORT_FLAGS_OFFSET);
- MLX4_PUT(inbox, param->mtu, INIT_PORT_MTU_OFFSET);
- MLX4_PUT(inbox, param->max_gid, INIT_PORT_MAX_GID_OFFSET);
- MLX4_PUT(inbox, param->max_pkey, INIT_PORT_MAX_PKEY_OFFSET);
- MLX4_PUT(inbox, param->guid0, INIT_PORT_GUID0_OFFSET);
- MLX4_PUT(inbox, param->node_guid, INIT_PORT_NODE_GUID_OFFSET);
- MLX4_PUT(inbox, param->si_guid, INIT_PORT_SI_GUID_OFFSET);
+ field = 128 << dev->caps.mtu_cap[port];
+ MLX4_PUT(inbox, field, INIT_PORT_MTU_OFFSET);
+ field = dev->caps.gid_table_len[port];
+ MLX4_PUT(inbox, field, INIT_PORT_MAX_GID_OFFSET);
+ field = dev->caps.pkey_table_len[port];
+ MLX4_PUT(inbox, field, INIT_PORT_MAX_PKEY_OFFSET);
- err = mlx4_cmd(dev, mailbox->dma, port, 0, MLX4_CMD_INIT_PORT,
- MLX4_CMD_TIME_CLASS_A);
+ err = mlx4_cmd(dev, mailbox->dma, port, 0, MLX4_CMD_INIT_PORT,
+ MLX4_CMD_TIME_CLASS_A);
- mlx4_free_cmd_mailbox(dev, mailbox);
+ mlx4_free_cmd_mailbox(dev, mailbox);
+ } else
+ err = mlx4_cmd(dev, 0, port, 0, MLX4_CMD_INIT_PORT,
+ MLX4_CMD_TIME_CLASS_A);
return err;
}
diff --git a/drivers/net/mlx4/fw.h b/drivers/net/mlx4/fw.h
index 2616fa5..296254a 100644
--- a/drivers/net/mlx4/fw.h
+++ b/drivers/net/mlx4/fw.h
@@ -59,13 +59,13 @@ struct mlx4_dev_cap {
int max_responder_per_qp;
int max_rdma_global;
int local_ca_ack_delay;
- int max_mtu;
- int max_port_width;
- int max_vl;
int num_ports;
- int max_gids;
+ int max_mtu[MLX4_MAX_PORTS + 1];
+ int max_port_width[MLX4_MAX_PORTS + 1];
+ int max_vl[MLX4_MAX_PORTS + 1];
+ int max_gids[MLX4_MAX_PORTS + 1];
+ int max_pkeys[MLX4_MAX_PORTS + 1];
u16 stat_rate_support;
- int max_pkeys;
u32 flags;
int reserved_uars;
int uar_size;
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index d417293..41eafeb 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -88,6 +88,7 @@ static struct mlx4_profile default_profile = {
static int __devinit mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
{
int err;
+ int i;
err = mlx4_QUERY_DEV_CAP(dev, dev_cap);
if (err) {
@@ -117,11 +118,15 @@ static int __devinit mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev
}
dev->caps.num_ports = dev_cap->num_ports;
+ for (i = 1; i <= dev->caps.num_ports; ++i) {
+ dev->caps.vl_cap[i] = dev_cap->max_vl[i];
+ dev->caps.mtu_cap[i] = dev_cap->max_mtu[i];
+ dev->caps.gid_table_len[i] = dev_cap->max_gids[i];
+ dev->caps.pkey_table_len[i] = dev_cap->max_pkeys[i];
+ dev->caps.port_width_cap[i] = dev_cap->max_port_width[i];
+ }
+
dev->caps.num_uars = dev_cap->uar_size / PAGE_SIZE;
- dev->caps.vl_cap = dev_cap->max_vl;
- dev->caps.mtu_cap = dev_cap->max_mtu;
- dev->caps.gid_table_len = dev_cap->max_gids;
- dev->caps.pkey_table_len = dev_cap->max_pkeys;
dev->caps.local_ca_ack_delay = dev_cap->local_ca_ack_delay;
dev->caps.bf_reg_size = dev_cap->bf_reg_size;
dev->caps.bf_regs_per_page = dev_cap->bf_regs_per_page;
@@ -148,7 +153,6 @@ static int __devinit mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev
dev->caps.reserved_mrws = dev_cap->reserved_mrws;
dev->caps.reserved_uars = dev_cap->reserved_uars;
dev->caps.reserved_pds = dev_cap->reserved_pds;
- dev->caps.port_width_cap = dev_cap->max_port_width;
dev->caps.mtt_entry_sz = MLX4_MTT_ENTRY_PER_SEG * dev_cap->mtt_entry_sz;
dev->caps.page_size_cap = ~(u32) (dev_cap->min_page_sz - 1);
dev->caps.flags = dev_cap->flags;
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h
index 4fb552d..7d1eaa9 100644
--- a/include/linux/mlx4/cmd.h
+++ b/include/linux/mlx4/cmd.h
@@ -54,6 +54,7 @@ enum {
MLX4_CMD_INIT_PORT = 0x9,
MLX4_CMD_CLOSE_PORT = 0xa,
MLX4_CMD_QUERY_HCA = 0xb,
+ MLX4_CMD_QUERY_PORT = 0x43,
MLX4_CMD_SET_PORT = 0xc,
MLX4_CMD_ACCESS_DDR = 0x2e,
MLX4_CMD_MAP_ICM = 0xffa,
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index 8c5f8fd..b372f59 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -41,6 +41,7 @@
enum {
MLX4_FLAG_MSI_X = 1 << 0,
+ MLX4_FLAG_OLD_PORT_CMDS = 1 << 1,
};
enum {
@@ -131,10 +132,10 @@ enum {
struct mlx4_caps {
u64 fw_ver;
int num_ports;
- int vl_cap;
- int mtu_cap;
- int gid_table_len;
- int pkey_table_len;
+ int vl_cap[MLX4_MAX_PORTS + 1];
+ int mtu_cap[MLX4_MAX_PORTS + 1];
+ int gid_table_len[MLX4_MAX_PORTS + 1];
+ int pkey_table_len[MLX4_MAX_PORTS + 1];
int local_ca_ack_delay;
int num_uars;
int bf_reg_size;
@@ -174,7 +175,7 @@ struct mlx4_caps {
u32 page_size_cap;
u32 flags;
u16 stat_rate_support;
- u8 port_width_cap;
+ u8 port_width_cap[MLX4_MAX_PORTS + 1];
};
struct mlx4_buf_list {
@@ -322,7 +323,7 @@ int mlx4_srq_alloc(struct mlx4_dev *dev, u32 pdn, struct mlx4_mtt *mtt,
void mlx4_srq_free(struct mlx4_dev *dev, struct mlx4_srq *srq);
int mlx4_srq_arm(struct mlx4_dev *dev, struct mlx4_srq *srq, int limit_watermark);
-int mlx4_INIT_PORT(struct mlx4_dev *dev, struct mlx4_init_port_param *param, int port);
+int mlx4_INIT_PORT(struct mlx4_dev *dev, int port);
int mlx4_CLOSE_PORT(struct mlx4_dev *dev, int port);
int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16]);
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h
index 9eeb61a..10c57d2 100644
--- a/include/linux/mlx4/qp.h
+++ b/include/linux/mlx4/qp.h
@@ -269,6 +269,10 @@ struct mlx4_wqe_data_seg {
__be64 addr;
};
+enum {
+ MLX4_INLINE_ALIGN = 64,
+};
+
struct mlx4_wqe_inline_seg {
__be32 byte_count;
};
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-06-08 14:22 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-06-08 14:22 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a bunch of fixes to the new mlx4 driver, and one fix for
port assignment by the RDMA CM:
Eli Cohen (1):
mlx4_core: Fix CQ context layout
Jack Morgenstein (2):
mlx4_core: Don't set MTT address in dMPT entries with PA set
IB/mlx4: Fix zeroing of rnr_retry value in ib_modify_qp()
Roland Dreier (5):
mlx4_core: Initialize ctx_list and ctx_lock earlier
mlx4_core: Free catastrophic error MSI-X interrupt with correct dev_id
IB/mthca, mlx4_core: Fix typo in comment
mlx4_core: Check firmware command interface revision
IB/mlx4: Make sure RQ allocation is always valid
Sean Hefty (1):
RDMA/cma: Fix initialization of next_port
drivers/infiniband/core/cma.c | 4 +-
drivers/infiniband/hw/mlx4/qp.c | 33 ++++++++++++++++++++----------
drivers/infiniband/hw/mthca/mthca_cmd.c | 2 +-
drivers/net/mlx4/cq.c | 2 +-
drivers/net/mlx4/eq.c | 4 ++-
drivers/net/mlx4/fw.c | 27 ++++++++++++++++++++++--
drivers/net/mlx4/intf.c | 3 --
drivers/net/mlx4/main.c | 2 +
drivers/net/mlx4/mr.c | 8 ++++--
9 files changed, 60 insertions(+), 25 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 2eb52b7..32a0e66 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -2773,8 +2773,8 @@ static int cma_init(void)
int ret;
get_random_bytes(&next_port, sizeof next_port);
- next_port = (next_port % (sysctl_local_port_range[1] -
- sysctl_local_port_range[0])) +
+ next_port = ((unsigned int) next_port %
+ (sysctl_local_port_range[1] - sysctl_local_port_range[0])) +
sysctl_local_port_range[0];
cma_wq = create_singlethread_workqueue("rdma_cm");
if (!cma_wq)
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index dc137de..5c6d054 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -189,18 +189,28 @@ static int send_wqe_overhead(enum ib_qp_type type)
}
static int set_rq_size(struct mlx4_ib_dev *dev, struct ib_qp_cap *cap,
- struct mlx4_ib_qp *qp)
+ int is_user, int has_srq, struct mlx4_ib_qp *qp)
{
/* Sanity check RQ size before proceeding */
if (cap->max_recv_wr > dev->dev->caps.max_wqes ||
cap->max_recv_sge > dev->dev->caps.max_rq_sg)
return -EINVAL;
- qp->rq.max = cap->max_recv_wr ? roundup_pow_of_two(cap->max_recv_wr) : 0;
+ if (has_srq) {
+ /* QPs attached to an SRQ should have no RQ */
+ if (cap->max_recv_wr)
+ return -EINVAL;
+
+ qp->rq.max = qp->rq.max_gs = 0;
+ } else {
+ /* HW requires >= 1 RQ entry with >= 1 gather entry */
+ if (is_user && (!cap->max_recv_wr || !cap->max_recv_sge))
+ return -EINVAL;
- qp->rq.wqe_shift = ilog2(roundup_pow_of_two(cap->max_recv_sge *
- sizeof (struct mlx4_wqe_data_seg)));
- qp->rq.max_gs = (1 << qp->rq.wqe_shift) / sizeof (struct mlx4_wqe_data_seg);
+ qp->rq.max = roundup_pow_of_two(max(1, cap->max_recv_wr));
+ qp->rq.max_gs = roundup_pow_of_two(max(1, cap->max_recv_sge));
+ qp->rq.wqe_shift = ilog2(qp->rq.max_gs * sizeof (struct mlx4_wqe_data_seg));
+ }
cap->max_recv_wr = qp->rq.max;
cap->max_recv_sge = qp->rq.max_gs;
@@ -285,7 +295,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
qp->sq.head = 0;
qp->sq.tail = 0;
- err = set_rq_size(dev, &init_attr->cap, qp);
+ err = set_rq_size(dev, &init_attr->cap, !!pd->uobject, !!init_attr->srq, qp);
if (err)
goto err;
@@ -762,11 +772,6 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
optpar |= MLX4_QP_OPTPAR_PKEY_INDEX;
}
- if (attr_mask & IB_QP_RNR_RETRY) {
- context->params1 |= cpu_to_be32(attr->rnr_retry << 13);
- optpar |= MLX4_QP_OPTPAR_RNR_RETRY;
- }
-
if (attr_mask & IB_QP_AV) {
if (mlx4_set_path(dev, &attr->ah_attr, &context->pri_path,
attr_mask & IB_QP_PORT ? attr->port_num : qp->port)) {
@@ -802,6 +807,12 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
context->pd = cpu_to_be32(to_mpd(ibqp->pd)->pdn);
context->params1 = cpu_to_be32(MLX4_IB_ACK_REQ_FREQ << 28);
+
+ if (attr_mask & IB_QP_RNR_RETRY) {
+ context->params1 |= cpu_to_be32(attr->rnr_retry << 13);
+ optpar |= MLX4_QP_OPTPAR_RNR_RETRY;
+ }
+
if (attr_mask & IB_QP_RETRY_CNT) {
context->params1 |= cpu_to_be32(attr->retry_cnt << 16);
optpar |= MLX4_QP_OPTPAR_RETRY_COUNT;
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c
index 3810252..f40558d 100644
--- a/drivers/infiniband/hw/mthca/mthca_cmd.c
+++ b/drivers/infiniband/hw/mthca/mthca_cmd.c
@@ -772,7 +772,7 @@ int mthca_QUERY_FW(struct mthca_dev *dev, u8 *status)
MTHCA_GET(dev->fw_ver, outbox, QUERY_FW_VER_OFFSET);
/*
- * FW subminor version is at more signifant bits than minor
+ * FW subminor version is at more significant bits than minor
* version, so swap here.
*/
dev->fw_ver = (dev->fw_ver & 0xffff00000000ull) |
diff --git a/drivers/net/mlx4/cq.c b/drivers/net/mlx4/cq.c
index 437d78a..39253d0 100644
--- a/drivers/net/mlx4/cq.c
+++ b/drivers/net/mlx4/cq.c
@@ -61,7 +61,7 @@ struct mlx4_cq_context {
__be32 solicit_producer_index;
__be32 consumer_index;
__be32 producer_index;
- u8 reserved6[2];
+ u32 reserved6[2];
__be64 db_rec_addr;
};
diff --git a/drivers/net/mlx4/eq.c b/drivers/net/mlx4/eq.c
index 0f11adb..27a82ce 100644
--- a/drivers/net/mlx4/eq.c
+++ b/drivers/net/mlx4/eq.c
@@ -490,9 +490,11 @@ static void mlx4_free_irqs(struct mlx4_dev *dev)
if (eq_table->have_irq)
free_irq(dev->pdev->irq, dev);
- for (i = 0; i < MLX4_NUM_EQ; ++i)
+ for (i = 0; i < MLX4_EQ_CATAS; ++i)
if (eq_table->eq[i].have_irq)
free_irq(eq_table->eq[i].irq, eq_table->eq + i);
+ if (eq_table->eq[MLX4_EQ_CATAS].have_irq)
+ free_irq(eq_table->eq[MLX4_EQ_CATAS].irq, dev);
}
static int __devinit mlx4_map_clr_int(struct mlx4_dev *dev)
diff --git a/drivers/net/mlx4/fw.c b/drivers/net/mlx4/fw.c
index cfa5cc0..e7ca118 100644
--- a/drivers/net/mlx4/fw.c
+++ b/drivers/net/mlx4/fw.c
@@ -37,6 +37,10 @@
#include "fw.h"
#include "icm.h"
+enum {
+ MLX4_COMMAND_INTERFACE_REV = 1
+};
+
extern void __buggy_use_of_MLX4_GET(void);
extern void __buggy_use_of_MLX4_PUT(void);
@@ -452,10 +456,12 @@ int mlx4_QUERY_FW(struct mlx4_dev *dev)
u32 *outbox;
int err = 0;
u64 fw_ver;
+ u16 cmd_if_rev;
u8 lg;
#define QUERY_FW_OUT_SIZE 0x100
#define QUERY_FW_VER_OFFSET 0x00
+#define QUERY_FW_CMD_IF_REV_OFFSET 0x0a
#define QUERY_FW_MAX_CMD_OFFSET 0x0f
#define QUERY_FW_ERR_START_OFFSET 0x30
#define QUERY_FW_ERR_SIZE_OFFSET 0x38
@@ -477,21 +483,36 @@ int mlx4_QUERY_FW(struct mlx4_dev *dev)
MLX4_GET(fw_ver, outbox, QUERY_FW_VER_OFFSET);
/*
- * FW subminor version is at more signifant bits than minor
+ * FW subminor version is at more significant bits than minor
* version, so swap here.
*/
dev->caps.fw_ver = (fw_ver & 0xffff00000000ull) |
((fw_ver & 0xffff0000ull) >> 16) |
((fw_ver & 0x0000ffffull) << 16);
+ MLX4_GET(cmd_if_rev, outbox, QUERY_FW_CMD_IF_REV_OFFSET);
+ if (cmd_if_rev != MLX4_COMMAND_INTERFACE_REV) {
+ mlx4_err(dev, "Installed FW has unsupported "
+ "command interface revision %d.\n",
+ cmd_if_rev);
+ mlx4_err(dev, "(Installed FW version is %d.%d.%03d)\n",
+ (int) (dev->caps.fw_ver >> 32),
+ (int) (dev->caps.fw_ver >> 16) & 0xffff,
+ (int) dev->caps.fw_ver & 0xffff);
+ mlx4_err(dev, "This driver version supports only revision %d.\n",
+ MLX4_COMMAND_INTERFACE_REV);
+ err = -ENODEV;
+ goto out;
+ }
+
MLX4_GET(lg, outbox, QUERY_FW_MAX_CMD_OFFSET);
cmd->max_cmds = 1 << lg;
- mlx4_dbg(dev, "FW version %d.%d.%03d, max commands %d\n",
+ mlx4_dbg(dev, "FW version %d.%d.%03d (cmd intf rev %d), max commands %d\n",
(int) (dev->caps.fw_ver >> 32),
(int) (dev->caps.fw_ver >> 16) & 0xffff,
(int) dev->caps.fw_ver & 0xffff,
- cmd->max_cmds);
+ cmd_if_rev, cmd->max_cmds);
MLX4_GET(fw->catas_offset, outbox, QUERY_FW_ERR_START_OFFSET);
MLX4_GET(fw->catas_size, outbox, QUERY_FW_ERR_SIZE_OFFSET);
diff --git a/drivers/net/mlx4/intf.c b/drivers/net/mlx4/intf.c
index 65854f9..9ae951b 100644
--- a/drivers/net/mlx4/intf.c
+++ b/drivers/net/mlx4/intf.c
@@ -135,9 +135,6 @@ int mlx4_register_device(struct mlx4_dev *dev)
struct mlx4_priv *priv = mlx4_priv(dev);
struct mlx4_interface *intf;
- INIT_LIST_HEAD(&priv->ctx_list);
- spin_lock_init(&priv->ctx_lock);
-
mutex_lock(&intf_mutex);
list_add_tail(&priv->dev_list, &dev_list);
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 20b8c0d..d417293 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -787,6 +787,8 @@ static int __devinit mlx4_init_one(struct pci_dev *pdev,
dev = &priv->dev;
dev->pdev = pdev;
+ INIT_LIST_HEAD(&priv->ctx_list);
+ spin_lock_init(&priv->ctx_lock);
/*
* Now reset the HCA before we touch the PCI capabilities or
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c
index b33864d..d0808fa 100644
--- a/drivers/net/mlx4/mr.c
+++ b/drivers/net/mlx4/mr.c
@@ -324,15 +324,17 @@ int mlx4_mr_enable(struct mlx4_dev *dev, struct mlx4_mr *mr)
MLX4_MPT_FLAG_MIO |
MLX4_MPT_FLAG_REGION |
mr->access);
- if (mr->mtt.order < 0)
- mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_PHYSICAL);
mpt_entry->key = cpu_to_be32(key_to_hw_index(mr->key));
mpt_entry->pd = cpu_to_be32(mr->pd);
mpt_entry->start = cpu_to_be64(mr->iova);
mpt_entry->length = cpu_to_be64(mr->size);
mpt_entry->entity_size = cpu_to_be32(mr->mtt.page_shift);
- mpt_entry->mtt_seg = cpu_to_be64(mlx4_mtt_addr(dev, &mr->mtt));
+ if (mr->mtt.order < 0) {
+ mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_PHYSICAL);
+ mpt_entry->mtt_seg = 0;
+ } else
+ mpt_entry->mtt_seg = cpu_to_be64(mlx4_mtt_addr(dev, &mr->mtt));
err = mlx4_SW2HW_MPT(dev, mailbox,
key_to_hw_index(mr->key) & (dev->caps.num_mpts - 1));
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-05-29 23:20 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-05-29 23:20 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few more nicely balanced ("55 insertions(+), 55
deletions(-)") 2.6.22-rc3 fixes, mostly for IPoIB connected mode:
Michael S. Tsirkin (2):
IB/mthca: Fix handling of send CQE with error for QPs connected to SRQ
IPoIB/cm: Fix performance regression on Mellanox
Roland Dreier (1):
IB/mlx4: Fix last allocated object tracking in bitmap allocator
Sean Hefty (1):
IB/cm: Fix stale connection detection
drivers/infiniband/core/cm.c | 25 ++++++-----
drivers/infiniband/hw/mthca/mthca_qp.c | 6 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 3 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 74 +++++++++++++++----------------
drivers/net/mlx4/alloc.c | 2 +-
5 files changed, 55 insertions(+), 55 deletions(-)
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index e840434..40c004a 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -1297,26 +1297,29 @@ static struct cm_id_private * cm_match_req(struct cm_work *work,
req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad;
- /* Check for duplicate REQ and stale connections. */
+ /* Check for possible duplicate REQ. */
spin_lock_irqsave(&cm.lock, flags);
timewait_info = cm_insert_remote_id(cm_id_priv->timewait_info);
- if (!timewait_info)
- timewait_info = cm_insert_remote_qpn(cm_id_priv->timewait_info);
-
if (timewait_info) {
cur_cm_id_priv = cm_get_id(timewait_info->work.local_id,
timewait_info->work.remote_id);
- cm_cleanup_timewait(cm_id_priv->timewait_info);
spin_unlock_irqrestore(&cm.lock, flags);
if (cur_cm_id_priv) {
cm_dup_req_handler(work, cur_cm_id_priv);
cm_deref_id(cur_cm_id_priv);
- } else
- cm_issue_rej(work->port, work->mad_recv_wc,
- IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REQ,
- NULL, 0);
- listen_cm_id_priv = NULL;
- goto out;
+ }
+ return NULL;
+ }
+
+ /* Check for stale connections. */
+ timewait_info = cm_insert_remote_qpn(cm_id_priv->timewait_info);
+ if (timewait_info) {
+ cm_cleanup_timewait(cm_id_priv->timewait_info);
+ spin_unlock_irqrestore(&cm.lock, flags);
+ cm_issue_rej(work->port, work->mad_recv_wc,
+ IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REQ,
+ NULL, 0);
+ return NULL;
}
/* Find matching listen request. */
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index 0276649..eef415b 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -2284,10 +2284,10 @@ void mthca_free_err_wqe(struct mthca_dev *dev, struct mthca_qp *qp, int is_send,
struct mthca_next_seg *next;
/*
- * For SRQs, all WQEs generate a CQE, so we're always at the
- * end of the doorbell chain.
+ * For SRQs, all receive WQEs generate a CQE, so we're always
+ * at the end of the doorbell chain.
*/
- if (qp->ibqp.srq) {
+ if (qp->ibqp.srq && !is_send) {
*new_wqe = 0;
return;
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 158759e..285c143 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -156,7 +156,7 @@ struct ipoib_cm_data {
* - and then invoke a Destroy QP or Reset QP.
*
* We use the second option and wait for a completion on the
- * rx_drain_qp before destroying QPs attached to our SRQ.
+ * same CQ before destroying QPs attached to our SRQ.
*/
enum ipoib_cm_state {
@@ -199,7 +199,6 @@ struct ipoib_cm_dev_priv {
struct ib_srq *srq;
struct ipoib_cm_rx_buf *srq_ring;
struct ib_cm_id *id;
- struct ib_qp *rx_drain_qp; /* generates WR described in 10.3.1 */
struct list_head passive_ids; /* state: LIVE */
struct list_head rx_error_list; /* state: ERROR */
struct list_head rx_flush_list; /* state: FLUSH, drain not started */
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index f133b56..076a0bb 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -69,8 +69,9 @@ static struct ib_qp_attr ipoib_cm_err_attr = {
#define IPOIB_CM_RX_DRAIN_WRID 0x7fffffff
-static struct ib_recv_wr ipoib_cm_rx_drain_wr = {
- .wr_id = IPOIB_CM_RX_DRAIN_WRID
+static struct ib_send_wr ipoib_cm_rx_drain_wr = {
+ .wr_id = IPOIB_CM_RX_DRAIN_WRID,
+ .opcode = IB_WR_SEND,
};
static int ipoib_cm_tx_handler(struct ib_cm_id *cm_id,
@@ -163,16 +164,22 @@ partial_error:
static void ipoib_cm_start_rx_drain(struct ipoib_dev_priv* priv)
{
- struct ib_recv_wr *bad_wr;
+ struct ib_send_wr *bad_wr;
+ struct ipoib_cm_rx *p;
- /* rx_drain_qp send queue depth is 1, so
+ /* We only reserved 1 extra slot in CQ for drain WRs, so
* make sure we have at most 1 outstanding WR. */
if (list_empty(&priv->cm.rx_flush_list) ||
!list_empty(&priv->cm.rx_drain_list))
return;
- if (ib_post_recv(priv->cm.rx_drain_qp, &ipoib_cm_rx_drain_wr, &bad_wr))
- ipoib_warn(priv, "failed to post rx_drain wr\n");
+ /*
+ * QPs on flush list are error state. This way, a "flush
+ * error" WC will be immediately generated for each WR we post.
+ */
+ p = list_entry(priv->cm.rx_flush_list.next, typeof(*p), list);
+ if (ib_post_send(p->qp, &ipoib_cm_rx_drain_wr, &bad_wr))
+ ipoib_warn(priv, "failed to post drain wr\n");
list_splice_init(&priv->cm.rx_flush_list, &priv->cm.rx_drain_list);
}
@@ -199,10 +206,10 @@ static struct ib_qp *ipoib_cm_create_rx_qp(struct net_device *dev,
struct ipoib_dev_priv *priv = netdev_priv(dev);
struct ib_qp_init_attr attr = {
.event_handler = ipoib_cm_rx_event_handler,
- .send_cq = priv->cq, /* does not matter, we never send anything */
+ .send_cq = priv->cq, /* For drain WR */
.recv_cq = priv->cq,
.srq = priv->cm.srq,
- .cap.max_send_wr = 1, /* FIXME: 0 Seems not to work */
+ .cap.max_send_wr = 1, /* For drain WR */
.cap.max_send_sge = 1, /* FIXME: 0 Seems not to work */
.sq_sig_type = IB_SIGNAL_ALL_WR,
.qp_type = IB_QPT_RC,
@@ -242,6 +249,27 @@ static int ipoib_cm_modify_rx_qp(struct net_device *dev,
ipoib_warn(priv, "failed to modify QP to RTR: %d\n", ret);
return ret;
}
+
+ /*
+ * Current Mellanox HCA firmware won't generate completions
+ * with error for drain WRs unless the QP has been moved to
+ * RTS first. This work-around leaves a window where a QP has
+ * moved to error asynchronously, but this will eventually get
+ * fixed in firmware, so let's not error out if modify QP
+ * fails.
+ */
+ qp_attr.qp_state = IB_QPS_RTS;
+ ret = ib_cm_init_qp_attr(cm_id, &qp_attr, &qp_attr_mask);
+ if (ret) {
+ ipoib_warn(priv, "failed to init QP attr for RTS: %d\n", ret);
+ return 0;
+ }
+ ret = ib_modify_qp(qp, &qp_attr, qp_attr_mask);
+ if (ret) {
+ ipoib_warn(priv, "failed to modify QP to RTS: %d\n", ret);
+ return 0;
+ }
+
return 0;
}
@@ -623,38 +651,11 @@ static void ipoib_cm_tx_completion(struct ib_cq *cq, void *tx_ptr)
int ipoib_cm_dev_open(struct net_device *dev)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
- struct ib_qp_init_attr qp_init_attr = {
- .send_cq = priv->cq, /* does not matter, we never send anything */
- .recv_cq = priv->cq,
- .cap.max_send_wr = 1, /* FIXME: 0 Seems not to work */
- .cap.max_send_sge = 1, /* FIXME: 0 Seems not to work */
- .cap.max_recv_wr = 1,
- .cap.max_recv_sge = 1, /* FIXME: 0 Seems not to work */
- .sq_sig_type = IB_SIGNAL_ALL_WR,
- .qp_type = IB_QPT_UC,
- };
int ret;
if (!IPOIB_CM_SUPPORTED(dev->dev_addr))
return 0;
- priv->cm.rx_drain_qp = ib_create_qp(priv->pd, &qp_init_attr);
- if (IS_ERR(priv->cm.rx_drain_qp)) {
- printk(KERN_WARNING "%s: failed to create CM ID\n", priv->ca->name);
- ret = PTR_ERR(priv->cm.rx_drain_qp);
- return ret;
- }
-
- /*
- * We put the QP in error state directly. This way, a "flush
- * error" WC will be immediately generated for each WR we post.
- */
- ret = ib_modify_qp(priv->cm.rx_drain_qp, &ipoib_cm_err_attr, IB_QP_STATE);
- if (ret) {
- ipoib_warn(priv, "failed to modify drain QP to error: %d\n", ret);
- goto err_qp;
- }
-
priv->cm.id = ib_create_cm_id(priv->ca, ipoib_cm_rx_handler, dev);
if (IS_ERR(priv->cm.id)) {
printk(KERN_WARNING "%s: failed to create CM ID\n", priv->ca->name);
@@ -676,8 +677,6 @@ err_listen:
ib_destroy_cm_id(priv->cm.id);
err_cm:
priv->cm.id = NULL;
-err_qp:
- ib_destroy_qp(priv->cm.rx_drain_qp);
return ret;
}
@@ -740,7 +739,6 @@ void ipoib_cm_dev_stop(struct net_device *dev)
kfree(p);
}
- ib_destroy_qp(priv->cm.rx_drain_qp);
cancel_delayed_work(&priv->cm.stale_task);
}
diff --git a/drivers/net/mlx4/alloc.c b/drivers/net/mlx4/alloc.c
index dfbd580..f8d63d3 100644
--- a/drivers/net/mlx4/alloc.c
+++ b/drivers/net/mlx4/alloc.c
@@ -51,8 +51,8 @@ u32 mlx4_bitmap_alloc(struct mlx4_bitmap *bitmap)
if (obj < bitmap->max) {
set_bit(obj, bitmap->table);
+ bitmap->last = (obj + 1) & (bitmap->max - 1);
obj |= bitmap->top;
- bitmap->last = obj + 1;
} else
obj = -1;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-05-25 22:06 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-05-25 22:06 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few more 2.6.22-rc2 fixes:
Eli Cohen (1):
IB/mlx4: Initialize send queue entry ownership bits
Michael S. Tsirkin (2):
IPoIB/cm: Fix timeout check in ipoib_cm_dev_stop()
IPoIB/cm: Drain cq in ipoib_cm_dev_stop()
Roland Dreier (1):
IB/mlx4: Don't allocate RQ doorbell if using SRQ
Stefan Roscher (1):
IB/ehca: Fix number of send WRs reported for new QP
drivers/infiniband/hw/ehca/hcp_if.c | 2 +-
drivers/infiniband/hw/mlx4/qp.c | 59 +++++++++++++++++++-----------
drivers/infiniband/ulp/ipoib/ipoib.h | 1 +
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 3 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 31 ++++++++++------
5 files changed, 60 insertions(+), 36 deletions(-)
diff --git a/drivers/infiniband/hw/ehca/hcp_if.c b/drivers/infiniband/hw/ehca/hcp_if.c
index 7f0beec..5766ae3 100644
--- a/drivers/infiniband/hw/ehca/hcp_if.c
+++ b/drivers/infiniband/hw/ehca/hcp_if.c
@@ -331,7 +331,7 @@ u64 hipz_h_alloc_resource_qp(const struct ipz_adapter_handle adapter_handle,
0);
qp->ipz_qp_handle.handle = outs[0];
qp->real_qp_num = (u32)outs[1];
- parms->act_nr_send_sges =
+ parms->act_nr_send_wqes =
(u16)EHCA_BMASK_GET(H_ALL_RES_QP_ACT_OUTST_SEND_WR, outs[2]);
parms->act_nr_recv_wqes =
(u16)EHCA_BMASK_GET(H_ALL_RES_QP_ACT_OUTST_RECV_WR, outs[2]);
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index a824bc5..dc137de 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -270,9 +270,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
struct ib_qp_init_attr *init_attr,
struct ib_udata *udata, int sqpn, struct mlx4_ib_qp *qp)
{
- struct mlx4_wqe_ctrl_seg *ctrl;
int err;
- int i;
mutex_init(&qp->mutex);
spin_lock_init(&qp->sq.lock);
@@ -319,20 +317,24 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
if (err)
goto err_mtt;
- err = mlx4_ib_db_map_user(to_mucontext(pd->uobject->context),
- ucmd.db_addr, &qp->db);
- if (err)
- goto err_mtt;
+ if (!init_attr->srq) {
+ err = mlx4_ib_db_map_user(to_mucontext(pd->uobject->context),
+ ucmd.db_addr, &qp->db);
+ if (err)
+ goto err_mtt;
+ }
} else {
err = set_kernel_sq_size(dev, &init_attr->cap, init_attr->qp_type, qp);
if (err)
goto err;
- err = mlx4_ib_db_alloc(dev, &qp->db, 0);
- if (err)
- goto err;
+ if (!init_attr->srq) {
+ err = mlx4_ib_db_alloc(dev, &qp->db, 0);
+ if (err)
+ goto err;
- *qp->db.db = 0;
+ *qp->db.db = 0;
+ }
if (mlx4_buf_alloc(dev->dev, qp->buf_size, PAGE_SIZE * 2, &qp->buf)) {
err = -ENOMEM;
@@ -348,11 +350,6 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
if (err)
goto err_mtt;
- for (i = 0; i < qp->sq.max; ++i) {
- ctrl = get_send_wqe(qp, i);
- ctrl->owner_opcode = cpu_to_be32(1 << 31);
- }
-
qp->sq.wrid = kmalloc(qp->sq.max * sizeof (u64), GFP_KERNEL);
qp->rq.wrid = kmalloc(qp->rq.max * sizeof (u64), GFP_KERNEL);
@@ -386,7 +383,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
return 0;
err_wrid:
- if (pd->uobject)
+ if (pd->uobject && !init_attr->srq)
mlx4_ib_db_unmap_user(to_mucontext(pd->uobject->context), &qp->db);
else {
kfree(qp->sq.wrid);
@@ -403,7 +400,7 @@ err_buf:
mlx4_buf_free(dev->dev, qp->buf_size, &qp->buf);
err_db:
- if (!pd->uobject)
+ if (!pd->uobject && !init_attr->srq)
mlx4_ib_db_free(dev, &qp->db);
err:
@@ -481,14 +478,16 @@ static void destroy_qp_common(struct mlx4_ib_dev *dev, struct mlx4_ib_qp *qp,
mlx4_mtt_cleanup(dev->dev, &qp->mtt);
if (is_user) {
- mlx4_ib_db_unmap_user(to_mucontext(qp->ibqp.uobject->context),
- &qp->db);
+ if (!qp->ibqp.srq)
+ mlx4_ib_db_unmap_user(to_mucontext(qp->ibqp.uobject->context),
+ &qp->db);
ib_umem_release(qp->umem);
} else {
kfree(qp->sq.wrid);
kfree(qp->rq.wrid);
mlx4_buf_free(dev->dev, qp->buf_size, &qp->buf);
- mlx4_ib_db_free(dev, &qp->db);
+ if (!qp->ibqp.srq)
+ mlx4_ib_db_free(dev, &qp->db);
}
}
@@ -852,7 +851,7 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
if (ibqp->srq)
context->srqn = cpu_to_be32(1 << 24 | to_msrq(ibqp->srq)->msrq.srqn);
- if (cur_state == IB_QPS_RESET && new_state == IB_QPS_INIT)
+ if (!ibqp->srq && cur_state == IB_QPS_RESET && new_state == IB_QPS_INIT)
context->db_rec_addr = cpu_to_be64(qp->db.dma);
if (cur_state == IB_QPS_INIT &&
@@ -872,6 +871,21 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
else
sqd_event = 0;
+ /*
+ * Before passing a kernel QP to the HW, make sure that the
+ * ownership bits of the send queue are set so that the
+ * hardware doesn't start processing stale work requests.
+ */
+ if (!ibqp->uobject && cur_state == IB_QPS_RESET && new_state == IB_QPS_INIT) {
+ struct mlx4_wqe_ctrl_seg *ctrl;
+ int i;
+
+ for (i = 0; i < qp->sq.max; ++i) {
+ ctrl = get_send_wqe(qp, i);
+ ctrl->owner_opcode = cpu_to_be32(1 << 31);
+ }
+ }
+
err = mlx4_qp_modify(dev->dev, &qp->mtt, to_mlx4_state(cur_state),
to_mlx4_state(new_state), context, optpar,
sqd_event, &qp->mqp);
@@ -919,7 +933,8 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp,
qp->rq.tail = 0;
qp->sq.head = 0;
qp->sq.tail = 0;
- *qp->db.db = 0;
+ if (!ibqp->srq)
+ *qp->db.db = 0;
}
out:
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index a0b3782..158759e 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -429,6 +429,7 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey);
void ipoib_pkey_poll(struct work_struct *work);
int ipoib_pkey_dev_delay_open(struct net_device *dev);
+void ipoib_drain_cq(struct net_device *dev);
#ifdef CONFIG_INFINIBAND_IPOIB_CM
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index ffec794..f133b56 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -713,7 +713,7 @@ void ipoib_cm_dev_stop(struct net_device *dev)
while (!list_empty(&priv->cm.rx_error_list) ||
!list_empty(&priv->cm.rx_flush_list) ||
!list_empty(&priv->cm.rx_drain_list)) {
- if (!time_after(jiffies, begin + 5 * HZ)) {
+ if (time_after(jiffies, begin + 5 * HZ)) {
ipoib_warn(priv, "RX drain timing out\n");
/*
@@ -726,6 +726,7 @@ void ipoib_cm_dev_stop(struct net_device *dev)
}
spin_unlock_irq(&priv->lock);
msleep(1);
+ ipoib_drain_cq(dev);
spin_lock_irq(&priv->lock);
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index c1aad06..8404f05 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -550,13 +550,30 @@ static int recvs_pending(struct net_device *dev)
return pending;
}
+void ipoib_drain_cq(struct net_device *dev)
+{
+ struct ipoib_dev_priv *priv = netdev_priv(dev);
+ int i, n;
+ do {
+ n = ib_poll_cq(priv->cq, IPOIB_NUM_WC, priv->ibwc);
+ for (i = 0; i < n; ++i) {
+ if (priv->ibwc[i].wr_id & IPOIB_CM_OP_SRQ)
+ ipoib_cm_handle_rx_wc(dev, priv->ibwc + i);
+ else if (priv->ibwc[i].wr_id & IPOIB_OP_RECV)
+ ipoib_ib_handle_rx_wc(dev, priv->ibwc + i);
+ else
+ ipoib_ib_handle_tx_wc(dev, priv->ibwc + i);
+ }
+ } while (n == IPOIB_NUM_WC);
+}
+
int ipoib_ib_dev_stop(struct net_device *dev, int flush)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
struct ib_qp_attr qp_attr;
unsigned long begin;
struct ipoib_tx_buf *tx_req;
- int i, n;
+ int i;
clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags);
netif_poll_disable(dev);
@@ -611,17 +628,7 @@ int ipoib_ib_dev_stop(struct net_device *dev, int flush)
goto timeout;
}
- do {
- n = ib_poll_cq(priv->cq, IPOIB_NUM_WC, priv->ibwc);
- for (i = 0; i < n; ++i) {
- if (priv->ibwc[i].wr_id & IPOIB_CM_OP_SRQ)
- ipoib_cm_handle_rx_wc(dev, priv->ibwc + i);
- else if (priv->ibwc[i].wr_id & IPOIB_OP_RECV)
- ipoib_ib_handle_rx_wc(dev, priv->ibwc + i);
- else
- ipoib_ib_handle_tx_wc(dev, priv->ibwc + i);
- }
- } while (n == IPOIB_NUM_WC);
+ ipoib_drain_cq(dev);
msleep(1);
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-05-21 20:51 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-05-21 20:51 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the following post 2.6.22-rc2 fixes. (This batch is
bigger than I would like, but I think it's all legitimately post-rc2
material: we've had some fixes for fairly serious problems cooking for
a while, and those fixes involve largish patches. The rest is either
trivial stuff or fixes for the just-merged mlx4 driver)
Ali Ayoub (1):
IB/mthca: Fix use-after-free on device restart
Eli Cohen (3):
IB/core: Free umem when mm is already gone
IB/mlx4: Fix check of max_qp_dest_rdma in modify QP
IB/mlx4: Pass send queue sizes from userspace to kernel
Hoang-Nam Nguyen (1):
IB/ehca: Return proper error code if register_mr fails
Michael S. Tsirkin (5):
IB/mthca: Fix RESET to ERROR transition
IB/mlx4: Fix RESET to RESET and RESET to ERROR transitions
IB/ipoib: Fix typos in error messages
IPoIB/cm: Fix SRQ WR leak
IB/cm: Improve local id allocation
Roland Dreier (6):
IB/ipath: Fix potential deadlock with multicast spinlocks
IB/core: Use start_port() and end_port()
IB/mlx4: Set GRH:HopLimit when sending globally routed MADs
mlx4_core: Fix array overrun in dump_dev_cap_flags()
IB/mlx4: Fix check of opcode in mlx4_ib_post_send()
IB/mlx4: Check if SRQ is full when posting receive
Rolf Manderscheid (1):
IB/mthca: Set GRH:HopLimit when building MLX headers
Yosef Etigin (2):
IB/core: Add helpers for uncached GID and P_Key searches
IPoIB: Handle P_Key table reordering
drivers/infiniband/core/cm.c | 4 +-
drivers/infiniband/core/device.c | 135 ++++++++++++++-
drivers/infiniband/core/umem.c | 4 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 7 +-
drivers/infiniband/hw/ipath/ipath_verbs_mcast.c | 16 +-
drivers/infiniband/hw/mlx4/qp.c | 181 ++++++++++++++------
drivers/infiniband/hw/mlx4/srq.c | 6 +
drivers/infiniband/hw/mlx4/user.h | 5 +-
drivers/infiniband/hw/mthca/mthca_av.c | 1 +
drivers/infiniband/hw/mthca/mthca_main.c | 4 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 158 +++++++++++-------
drivers/infiniband/ulp/ipoib/ipoib.h | 49 +++++-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 203 +++++++++++++++++++----
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 87 ++++++++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 7 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 40 ++---
drivers/net/mlx4/fw.c | 2 +-
include/rdma/ib_verbs.h | 8 +
19 files changed, 697 insertions(+), 222 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-05-14 21:18 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-05-14 21:18 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get the following post 2.6.22-rc1 fixes:
Arthur Jones (1):
IB/ipath: Shadow the gpio_mask register
Hoang-Nam Nguyen (1):
IB/ehca: Fix AQP0/1 QP number
Jack Morgenstein (1):
IB/mlx4: Fix uninitialized spinlock for 32-bit archs
Joachim Fenkes (4):
IB/ehca: Correctly set GRH mask bit in ehca_modify_qp()
IB/ehca: Remove _irqsave, move #ifdef
IB/ehca: Beautify sysfs attribute code and fix compiler warnings
IB/ehca: Disable scaling code by default, bump version number
Michael S. Tsirkin (3):
IB/mthca: Fix posting >255 recv WRs for Tavor
IB/mthca: Set cleaned CQEs back to HW ownership when cleaning CQ
IPoIB/cm: Optimize stale connection detection
Paul Mundt (1):
net: Trivial MLX4_DEBUG dependency fix.
Roland Dreier (1):
mlx4_core: Remove unused doorbell_lock
Sean Hefty (3):
RDMA/cma: Simplify device removal handling code
RDMA/cma: Fix synchronization with device removal in cma_iw_handler
RDMA/cma: Add check to validate that cm_id is bound to a device
Stefan Roscher (1):
IB/ehca: Serialize hypervisor calls in ehca_register_mr()
drivers/infiniband/core/cma.c | 106 +++++++++++++++------------
drivers/infiniband/hw/ehca/ehca_classes.h | 1 +
drivers/infiniband/hw/ehca/ehca_irq.c | 7 +-
drivers/infiniband/hw/ehca/ehca_main.c | 94 +++++++++++-------------
drivers/infiniband/hw/ehca/ehca_qp.c | 17 +++--
drivers/infiniband/hw/ehca/hcp_if.c | 13 +++-
drivers/infiniband/hw/ipath/ipath_iba6120.c | 7 +-
drivers/infiniband/hw/ipath/ipath_intr.c | 7 +-
drivers/infiniband/hw/ipath/ipath_kernel.h | 2 +
drivers/infiniband/hw/ipath/ipath_verbs.c | 12 ++--
drivers/infiniband/hw/mlx4/main.c | 1 +
drivers/infiniband/hw/mthca/mthca_cq.c | 4 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 1 +
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 11 ++-
drivers/net/Kconfig | 1 +
drivers/net/mlx4/main.c | 2 -
drivers/net/mlx4/mlx4.h | 1 -
17 files changed, 154 insertions(+), 133 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-05-09 1:06 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-05-09 1:06 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will merge the mlx4 drivers for new Mellanox adapters:
Roland Dreier (3):
IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules
IB: Put rlimit accounting struct in struct ib_umem
IB/mlx4: Add a driver Mellanox ConnectX InfiniBand adapters
drivers/infiniband/Kconfig | 7 +
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/Makefile | 4 +-
drivers/infiniband/core/device.c | 2 +
drivers/infiniband/core/{uverbs_mem.c => umem.c} | 153 ++-
drivers/infiniband/core/uverbs.h | 6 +-
drivers/infiniband/core/uverbs_cmd.c | 60 +-
drivers/infiniband/core/uverbs_main.c | 11 +-
drivers/infiniband/hw/amso1100/c2_provider.c | 42 +-
drivers/infiniband/hw/amso1100/c2_provider.h | 1 +
drivers/infiniband/hw/cxgb3/iwch_provider.c | 28 +-
drivers/infiniband/hw/cxgb3/iwch_provider.h | 1 +
drivers/infiniband/hw/ehca/ehca_classes.h | 1 +
drivers/infiniband/hw/ehca/ehca_iverbs.h | 3 +-
drivers/infiniband/hw/ehca/ehca_mrmw.c | 69 +-
drivers/infiniband/hw/ipath/ipath_mr.c | 38 +-
drivers/infiniband/hw/ipath/ipath_verbs.h | 5 +-
drivers/infiniband/hw/mlx4/Kconfig | 9 +
drivers/infiniband/hw/mlx4/Makefile | 3 +
drivers/infiniband/hw/mlx4/ah.c | 100 ++
drivers/infiniband/hw/mlx4/cq.c | 525 +++++++++
drivers/infiniband/hw/mlx4/doorbell.c | 216 ++++
drivers/infiniband/hw/mlx4/mad.c | 339 ++++++
drivers/infiniband/hw/mlx4/main.c | 651 +++++++++++
drivers/infiniband/hw/mlx4/mlx4_ib.h | 285 +++++
drivers/infiniband/hw/mlx4/mr.c | 184 +++
drivers/infiniband/hw/mlx4/qp.c | 1294 ++++++++++++++++++++++
drivers/infiniband/hw/mlx4/srq.c | 334 ++++++
drivers/infiniband/hw/mlx4/user.h | 92 ++
drivers/infiniband/hw/mthca/mthca_provider.c | 38 +-
drivers/infiniband/hw/mthca/mthca_provider.h | 1 +
drivers/net/Kconfig | 14 +
drivers/net/Makefile | 1 +
drivers/net/mlx4/Makefile | 4 +
drivers/net/mlx4/alloc.c | 179 +++
drivers/net/mlx4/catas.c | 70 ++
drivers/net/mlx4/cmd.c | 429 +++++++
drivers/net/mlx4/cq.c | 254 +++++
drivers/net/mlx4/eq.c | 696 ++++++++++++
drivers/net/mlx4/fw.c | 775 +++++++++++++
drivers/net/mlx4/fw.h | 167 +++
drivers/net/mlx4/icm.c | 379 +++++++
drivers/net/mlx4/icm.h | 135 +++
drivers/net/mlx4/intf.c | 165 +++
drivers/net/mlx4/main.c | 936 ++++++++++++++++
drivers/net/mlx4/mcg.c | 380 +++++++
drivers/net/mlx4/mlx4.h | 348 ++++++
drivers/net/mlx4/mr.c | 479 ++++++++
drivers/net/mlx4/pd.c | 102 ++
drivers/net/mlx4/profile.c | 238 ++++
drivers/net/mlx4/qp.c | 280 +++++
drivers/net/mlx4/reset.c | 181 +++
drivers/net/mlx4/srq.c | 227 ++++
include/linux/mlx4/cmd.h | 178 +++
include/linux/mlx4/cq.h | 123 ++
include/linux/mlx4/device.h | 331 ++++++
include/linux/mlx4/doorbell.h | 97 ++
include/linux/mlx4/driver.h | 59 +
include/linux/mlx4/qp.h | 288 +++++
include/linux/mlx4/srq.h | 42 +
include/rdma/ib_umem.h | 81 ++
include/rdma/ib_verbs.h | 28 +-
62 files changed, 11951 insertions(+), 218 deletions(-)
rename drivers/infiniband/core/{uverbs_mem.c => umem.c} (59%)
create mode 100644 drivers/infiniband/hw/mlx4/Kconfig
create mode 100644 drivers/infiniband/hw/mlx4/Makefile
create mode 100644 drivers/infiniband/hw/mlx4/ah.c
create mode 100644 drivers/infiniband/hw/mlx4/cq.c
create mode 100644 drivers/infiniband/hw/mlx4/doorbell.c
create mode 100644 drivers/infiniband/hw/mlx4/mad.c
create mode 100644 drivers/infiniband/hw/mlx4/main.c
create mode 100644 drivers/infiniband/hw/mlx4/mlx4_ib.h
create mode 100644 drivers/infiniband/hw/mlx4/mr.c
create mode 100644 drivers/infiniband/hw/mlx4/qp.c
create mode 100644 drivers/infiniband/hw/mlx4/srq.c
create mode 100644 drivers/infiniband/hw/mlx4/user.h
create mode 100644 drivers/net/mlx4/Makefile
create mode 100644 drivers/net/mlx4/alloc.c
create mode 100644 drivers/net/mlx4/catas.c
create mode 100644 drivers/net/mlx4/cmd.c
create mode 100644 drivers/net/mlx4/cq.c
create mode 100644 drivers/net/mlx4/eq.c
create mode 100644 drivers/net/mlx4/fw.c
create mode 100644 drivers/net/mlx4/fw.h
create mode 100644 drivers/net/mlx4/icm.c
create mode 100644 drivers/net/mlx4/icm.h
create mode 100644 drivers/net/mlx4/intf.c
create mode 100644 drivers/net/mlx4/main.c
create mode 100644 drivers/net/mlx4/mcg.c
create mode 100644 drivers/net/mlx4/mlx4.h
create mode 100644 drivers/net/mlx4/mr.c
create mode 100644 drivers/net/mlx4/pd.c
create mode 100644 drivers/net/mlx4/profile.c
create mode 100644 drivers/net/mlx4/qp.c
create mode 100644 drivers/net/mlx4/reset.c
create mode 100644 drivers/net/mlx4/srq.c
create mode 100644 include/linux/mlx4/cmd.h
create mode 100644 include/linux/mlx4/cq.h
create mode 100644 include/linux/mlx4/device.h
create mode 100644 include/linux/mlx4/doorbell.h
create mode 100644 include/linux/mlx4/driver.h
create mode 100644 include/linux/mlx4/qp.h
create mode 100644 include/linux/mlx4/srq.h
create mode 100644 include/rdma/ib_umem.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-05-07 4:19 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-05-07 4:19 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This is the second batch of merges for 2.6.22 -- mostly fixes, but
also the conversion of IPoIB to use NAPI:
Ishai Rabinovitz (1):
IB/srp: Add orig_dgid sysfs attribute to scsi_host
Michael S. Tsirkin (4):
IB/mthca: Work around kernel QP starvation
IPoIB/cm: Fix error handling in ipoib_cm_dev_open()
IPoIB/cm: Don't crash if remote side uses one QP for both directions
IB: Add CQ comp_vector support
Ralph Campbell (4):
IB/ipath: Don't call spin_lock_irq() from interrupt context
IB/ipath: Don't put QP in timeout queue if waiting to send
IB/ipath: Fix two more spin lock problems
IB/ipath: Fix a race condition when generating ACKs
Robert Walsh (1):
IB/ipath: Don't corrupt pending mmap list when unmapped objects are freed
Roland Dreier (4):
IB/srp: Set proc_name
IB/fmr_pool: Add prefix to all printks
IB: Return "maybe missed event" hint from ib_req_notify_cq()
IPoIB: Convert to NAPI
Steve Wise (4):
RDMA/cxgb3: Fix TERM codes
RDMA/cxgb3: Fail qp creation if the requested max_inline is too large
RDMA/cxgb3: Initialize cpu_idx field in cpl_close_listserv_req message
RDMA/cxgb3: Support for new abort logic
drivers/infiniband/core/fmr_pool.c | 32 +++++----
drivers/infiniband/core/mad.c | 2 +-
drivers/infiniband/core/uverbs_cmd.c | 1 +
drivers/infiniband/core/uverbs_main.c | 2 +-
drivers/infiniband/core/verbs.c | 4 +-
drivers/infiniband/hw/amso1100/c2.h | 2 +-
drivers/infiniband/hw/amso1100/c2_cq.c | 16 ++++-
drivers/infiniband/hw/amso1100/c2_provider.c | 3 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 3 +
drivers/infiniband/hw/cxgb3/cxio_wr.h | 1 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 19 ++++++
drivers/infiniband/hw/cxgb3/iwch_cm.h | 6 ++
drivers/infiniband/hw/cxgb3/iwch_provider.c | 14 +++-
drivers/infiniband/hw/cxgb3/iwch_qp.c | 69 +++++++++++---------
drivers/infiniband/hw/ehca/ehca_cq.c | 2 +-
drivers/infiniband/hw/ehca/ehca_iverbs.h | 4 +-
drivers/infiniband/hw/ehca/ehca_main.c | 3 +-
drivers/infiniband/hw/ehca/ehca_reqs.c | 14 +++-
drivers/infiniband/hw/ehca/ipz_pt_fn.h | 8 ++
drivers/infiniband/hw/ipath/ipath_cq.c | 68 ++++++++++----------
drivers/infiniband/hw/ipath/ipath_mmap.c | 64 +++++++++++++++++--
drivers/infiniband/hw/ipath/ipath_qp.c | 52 +++++++++------
drivers/infiniband/hw/ipath/ipath_rc.c | 55 ++++++++--------
drivers/infiniband/hw/ipath/ipath_srq.c | 55 ++++++++--------
drivers/infiniband/hw/ipath/ipath_verbs.c | 4 +
drivers/infiniband/hw/ipath/ipath_verbs.h | 24 +++++--
drivers/infiniband/hw/mthca/mthca_cq.c | 12 ++--
drivers/infiniband/hw/mthca/mthca_dev.h | 4 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 2 +
drivers/infiniband/hw/mthca/mthca_qp.c | 13 ++++
drivers/infiniband/ulp/ipoib/ipoib.h | 1 +
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 14 +++--
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 89 ++++++++++++++++++++------
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 2 +-
drivers/infiniband/ulp/iser/iser_verbs.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 27 +++++++-
drivers/infiniband/ulp/srp/ib_srp.h | 1 +
drivers/net/cxgb3/version.h | 4 +-
include/rdma/ib_verbs.h | 47 +++++++++++---
40 files changed, 508 insertions(+), 239 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-04-26 18:42 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-04-26 18:42 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This is the first batch of merges for 2.6.22 -- mostly ipath driver fixes:
Arthur Jones (2):
IB/ipath: Call free_irq() on chip specific initialization failure
IB/ipath: Force PIOAvail update entry point
Bryan O'Sullivan (17):
IB/ipath: Add ability to set and clear IB local loopback
IB/ipath: Fix user memory region creation when IOMMU present
IB/ipath: Definitions of two RXE parity err bits were reversed
IB/ipath: Fix up some debug messages
IB/ipath: Change packet problems vs chip errors handling and reporting
IB/ipath: Fix bad argument to clear_bit()
IB/ipath: Fix CQ flushing when QP is modified to error state
IB/ipath: Remove unused ipath_read_kreg64_port()
IB/ipath: Fix calculation for number of kernel PIO buffers
IB/ipath: Discard multicast packets without a GRH
IB/ipath: Print better error messages if kernel is misconfigured
IB/ipath: Improve handling and reporting of parity errors
IB/ipath: On unrecoverable errors, force link down, LEDs off
IB/ipath: Prevent random program use of diags interface
IB/ipath: Disable IB link earlier in shutdown sequence
IB/ipath: Don't allow QPs 0 and 1 to be opened multiple times
IB/ipath: Fix unit selection when all CPU affinity bits set
Hal Rosenstock (3):
IB/umad: Fix declaration of dev_map[]
IB/mad: Change SMI to use enums rather than magic return codes
IB/umad: Clarify documentation of transaction ID
Joachim Fenkes (2):
IB/ehca: Implement modify_port
IB: Set class_dev->dev in core for nice device symlink
Mark Debbage (1):
IB/ipath: Allow receive ports mapped into userspace to be shared
Michael Albaugh (1):
IB/ipath: Fix driver crash (in interrupt or during unload) after chip reset
Ralph Campbell (8):
IB/ipath: Don't initialize port memory for subports
IB/ipath: Fix SRQ limit event causing dropped CQ entry
IB/ipath: NMI cpu lockup if local loopback used
IB/ipath: Support larger IB_QP_MAX_DEST_RD_ATOMIC and IB_QP_MAX_QP_RD_ATOMIC
IB/ipath: Fix QP error completion queue entries
IB/ipath: Fix PSN update for RC retries
IB/ipath: Fix port sharing on powerpc
IB/ipath: Fix RDMA reads of length zero and error handling
Robert Walsh (4):
IB/ipath: Check reserved memory keys
IB/ipath: Remove duplicate stuff from ipath_verbs.h
IB/ipath: Check that a UD work request's address handle is valid
IB/ipath: Fix WC format drift between user and kernel space
Roland Dreier (6):
IB: Remove reference to obsolete CONFIG_IPATH_CORE
IPoIB: Remove pointless opcode field from debugging output
IB/mthca: Update HCA firmware revisions
IB/mthca: Fix mthca_write_mtt() on HCAs with hidden memory
IB/mthca: Simplify CQ cleaning in mthca_free_qp()
IPoIB/cm: spin_lock_irqsave() -> spin_lock_irq() replacements
Sean Hefty (5):
RDMA/ucma: Simplify ucma_get_event()
IB/ucm: Simplify ib_ucm_event()
IB/sa: Set src_path_bits correctly in ib_init_ah_from_path()
IB/ipoib: Use ib_init_ah_from_path to initialize ah_attr
IB/umad: Implement GRH handling for sent/received MADs
Documentation/infiniband/user_mad.txt | 8 +
drivers/Makefile | 1 -
drivers/infiniband/core/mad.c | 34 +-
drivers/infiniband/core/sa_query.c | 24 +-
drivers/infiniband/core/smi.c | 86 ++--
drivers/infiniband/core/smi.h | 34 +-
drivers/infiniband/core/sysfs.c | 1 +
drivers/infiniband/core/ucm.c | 23 +-
drivers/infiniband/core/ucma.c | 22 +-
drivers/infiniband/core/user_mad.c | 20 +-
drivers/infiniband/hw/amso1100/c2_provider.c | 1 -
drivers/infiniband/hw/cxgb3/iwch_provider.c | 1 -
drivers/infiniband/hw/ehca/ehca_classes.h | 1 +
drivers/infiniband/hw/ehca/ehca_hca.c | 55 ++-
drivers/infiniband/hw/ehca/ehca_main.c | 1 +
drivers/infiniband/hw/ehca/hcp_if.c | 24 +
drivers/infiniband/hw/ehca/hcp_if.h | 4 +
drivers/infiniband/hw/ipath/ipath_common.h | 23 +-
drivers/infiniband/hw/ipath/ipath_cq.c | 38 +-
drivers/infiniband/hw/ipath/ipath_debug.h | 1 +
drivers/infiniband/hw/ipath/ipath_diag.c | 11 +-
drivers/infiniband/hw/ipath/ipath_driver.c | 123 +++--
drivers/infiniband/hw/ipath/ipath_eeprom.c | 4 +
drivers/infiniband/hw/ipath/ipath_file_ops.c | 287 +++++----
drivers/infiniband/hw/ipath/ipath_iba6110.c | 152 +++--
drivers/infiniband/hw/ipath/ipath_iba6120.c | 73 ++-
drivers/infiniband/hw/ipath/ipath_init_chip.c | 86 ++-
drivers/infiniband/hw/ipath/ipath_intr.c | 100 ++-
drivers/infiniband/hw/ipath/ipath_kernel.h | 10 +-
drivers/infiniband/hw/ipath/ipath_keys.c | 14 +-
drivers/infiniband/hw/ipath/ipath_mr.c | 12 +-
drivers/infiniband/hw/ipath/ipath_qp.c | 133 +++--
drivers/infiniband/hw/ipath/ipath_rc.c | 920 ++++++++++++++-----------
drivers/infiniband/hw/ipath/ipath_registers.h | 22 +-
drivers/infiniband/hw/ipath/ipath_ruc.c | 63 +-
drivers/infiniband/hw/ipath/ipath_stats.c | 16 +-
drivers/infiniband/hw/ipath/ipath_uc.c | 6 +-
drivers/infiniband/hw/ipath/ipath_ud.c | 8 +-
drivers/infiniband/hw/ipath/ipath_verbs.c | 15 +-
drivers/infiniband/hw/ipath/ipath_verbs.h | 57 +-
drivers/infiniband/hw/mthca/mthca_main.c | 10 +-
drivers/infiniband/hw/mthca/mthca_mr.c | 6 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 1 -
drivers/infiniband/hw/mthca/mthca_qp.c | 7 +-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 64 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 8 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 12 +-
47 files changed, 1620 insertions(+), 1002 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-04-16 21:16 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-04-16 21:16 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a one-liner that fixes data corruption seen with storage
over iSER:
Michael S. Tsirkin (1):
IB/mthca: Fix data corruption after FMR unmap on Sinai
drivers/infiniband/hw/mthca/mthca_mr.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
index fdb576d..ee561c5 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
@@ -835,6 +835,7 @@ void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
key = arbel_key_to_hw_index(fmr->ibmr.lkey);
key &= dev->limits.num_mpts - 1;
+ key = adjust_key(dev, key);
fmr->ibmr.lkey = fmr->ibmr.rkey = arbel_hw_index_to_key(key);
fmr->maps = 0;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-04-12 17:52 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-04-12 17:52 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general, Jeff Garzik
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will fix up some problems with drivers/infiniband/hw/cxgb3 caused
by a change to drivers/net/cxgb3 that you just pulled.
Steve Wise (1):
RDMA/cxgb3: Add set_tcb_rpl_handler
drivers/infiniband/hw/cxgb3/iwch_cm.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index d0ed1d3..2d2de9b 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -2026,6 +2026,17 @@ static int sched(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
return 0;
}
+static int set_tcb_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
+{
+ struct cpl_set_tcb_rpl *rpl = cplhdr(skb);
+
+ if (rpl->status != CPL_ERR_NONE) {
+ printk(KERN_ERR MOD "Unexpected SET_TCB_RPL status %u "
+ "for tid %u\n", rpl->status, GET_TID(rpl));
+ }
+ return CPL_RET_BUF_DONE;
+}
+
int __init iwch_cm_init(void)
{
skb_queue_head_init(&rxq);
@@ -2053,6 +2064,7 @@ int __init iwch_cm_init(void)
t3c_handlers[CPL_ABORT_REQ_RSS] = sched;
t3c_handlers[CPL_RDMA_TERMINATE] = sched;
t3c_handlers[CPL_RDMA_EC_STATUS] = sched;
+ t3c_handlers[CPL_SET_TCB_RPL] = set_tcb_rpl;
/*
* These are the real handlers that are called from a
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-04-10 17:43 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-04-10 17:43 UTC (permalink / raw)
To: torvalds, linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will two small post-rc6 fixes for crasher bugs:
Erez Zilber (1):
IB/iser: Don't defer connection failure notification to workqueue
Michael S. Tsirkin (1):
IPoIB/cm: Fix DMA direction typo
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +-
drivers/infiniband/ulp/iser/iscsi_iser.h | 1 -
drivers/infiniband/ulp/iser/iser_verbs.c | 40 ++++++++++++------------------
3 files changed, 17 insertions(+), 26 deletions(-)
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index e70492d..2b242a4 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -131,7 +131,7 @@ static struct sk_buff *ipoib_cm_alloc_rx_skb(struct net_device *dev, int id, int
skb_fill_page_desc(skb, i, page, 0, PAGE_SIZE);
mapping[i + 1] = ib_dma_map_page(priv->ca, skb_shinfo(skb)->frags[i].page,
- 0, PAGE_SIZE, DMA_TO_DEVICE);
+ 0, PAGE_SIZE, DMA_FROM_DEVICE);
if (unlikely(ib_dma_mapping_error(priv->ca, mapping[i + 1])))
goto partial_error;
}
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h
index cae8c96..8960196 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.h
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.h
@@ -245,7 +245,6 @@ struct iser_conn {
wait_queue_head_t wait; /* waitq for conn/disconn */
atomic_t post_recv_buf_count; /* posted rx count */
atomic_t post_send_buf_count; /* posted tx count */
- struct work_struct comperror_work; /* conn term sleepable ctx*/
char name[ISER_OBJECT_NAME_SIZE];
struct iser_page_vec *page_vec; /* represents SG to fmr maps*
* maps serialized as tx is*/
diff --git a/drivers/infiniband/ulp/iser/iser_verbs.c b/drivers/infiniband/ulp/iser/iser_verbs.c
index 693b770..1fc9674 100644
--- a/drivers/infiniband/ulp/iser/iser_verbs.c
+++ b/drivers/infiniband/ulp/iser/iser_verbs.c
@@ -48,7 +48,6 @@
static void iser_cq_tasklet_fn(unsigned long data);
static void iser_cq_callback(struct ib_cq *cq, void *cq_context);
-static void iser_comp_error_worker(struct work_struct *work);
static void iser_cq_event_callback(struct ib_event *cause, void *context)
{
@@ -480,7 +479,6 @@ int iser_conn_init(struct iser_conn **ibconn)
init_waitqueue_head(&ib_conn->wait);
atomic_set(&ib_conn->post_recv_buf_count, 0);
atomic_set(&ib_conn->post_send_buf_count, 0);
- INIT_WORK(&ib_conn->comperror_work, iser_comp_error_worker);
INIT_LIST_HEAD(&ib_conn->conn_list);
spin_lock_init(&ib_conn->lock);
@@ -753,26 +751,6 @@ int iser_post_send(struct iser_desc *tx_desc)
return ret_val;
}
-static void iser_comp_error_worker(struct work_struct *work)
-{
- struct iser_conn *ib_conn =
- container_of(work, struct iser_conn, comperror_work);
-
- /* getting here when the state is UP means that the conn is being *
- * terminated asynchronously from the iSCSI layer's perspective. */
- if (iser_conn_state_comp_exch(ib_conn, ISER_CONN_UP,
- ISER_CONN_TERMINATING))
- iscsi_conn_failure(ib_conn->iser_conn->iscsi_conn,
- ISCSI_ERR_CONN_FAILED);
-
- /* complete the termination process if disconnect event was delivered *
- * note there are no more non completed posts to the QP */
- if (ib_conn->disc_evt_flag) {
- ib_conn->state = ISER_CONN_DOWN;
- wake_up_interruptible(&ib_conn->wait);
- }
-}
-
static void iser_handle_comp_error(struct iser_desc *desc)
{
struct iser_dto *dto = &desc->dto;
@@ -791,8 +769,22 @@ static void iser_handle_comp_error(struct iser_desc *desc)
}
if (atomic_read(&ib_conn->post_recv_buf_count) == 0 &&
- atomic_read(&ib_conn->post_send_buf_count) == 0)
- schedule_work(&ib_conn->comperror_work);
+ atomic_read(&ib_conn->post_send_buf_count) == 0) {
+ /* getting here when the state is UP means that the conn is *
+ * being terminated asynchronously from the iSCSI layer's *
+ * perspective. */
+ if (iser_conn_state_comp_exch(ib_conn, ISER_CONN_UP,
+ ISER_CONN_TERMINATING))
+ iscsi_conn_failure(ib_conn->iser_conn->iscsi_conn,
+ ISCSI_ERR_CONN_FAILED);
+
+ /* complete the termination process if disconnect event was delivered *
+ * note there are no more non completed posts to the QP */
+ if (ib_conn->disc_evt_flag) {
+ ib_conn->state = ISER_CONN_DOWN;
+ wake_up_interruptible(&ib_conn->wait);
+ }
+ }
}
static void iser_cq_tasklet_fn(unsigned long data)
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-03-28 17:25 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-03-28 17:25 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get a few small post-rc5 fixes. I still have one more fix
to send that I am still reviewing -- I should be able to send it Thursday.
Erez Zilber (1):
IB/iser: Handle aborting a command after it is sent
Michael S. Tsirkin (1):
IB/mthca: Fix thinko in init_mr_table()
Steve Wise (1):
RDMA/cxgb3: Fix resource leak in cxio_hal_init_ctrl_qp()
drivers/infiniband/hw/cxgb3/cxio_hal.c | 12 ++++++++----
drivers/infiniband/hw/mthca/mthca_mr.c | 4 ++--
drivers/infiniband/ulp/iser/iser_initiator.c | 17 +++++++++--------
3 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c
index 818cf1a..f5e9aee 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.c
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c
@@ -498,9 +498,9 @@ static int cxio_hal_init_ctrl_qp(struct cxio_rdev *rdev_p)
u64 sge_cmd, ctx0, ctx1;
u64 base_addr;
struct t3_modify_qp_wr *wqe;
- struct sk_buff *skb = alloc_skb(sizeof(*wqe), GFP_KERNEL);
-
+ struct sk_buff *skb;
+ skb = alloc_skb(sizeof(*wqe), GFP_KERNEL);
if (!skb) {
PDBG("%s alloc_skb failed\n", __FUNCTION__);
return -ENOMEM;
@@ -508,7 +508,7 @@ static int cxio_hal_init_ctrl_qp(struct cxio_rdev *rdev_p)
err = cxio_hal_init_ctrl_cq(rdev_p);
if (err) {
PDBG("%s err %d initializing ctrl_cq\n", __FUNCTION__, err);
- return err;
+ goto err;
}
rdev_p->ctrl_qp.workq = dma_alloc_coherent(
&(rdev_p->rnic_info.pdev->dev),
@@ -518,7 +518,8 @@ static int cxio_hal_init_ctrl_qp(struct cxio_rdev *rdev_p)
GFP_KERNEL);
if (!rdev_p->ctrl_qp.workq) {
PDBG("%s dma_alloc_coherent failed\n", __FUNCTION__);
- return -ENOMEM;
+ err = -ENOMEM;
+ goto err;
}
pci_unmap_addr_set(&rdev_p->ctrl_qp, mapping,
rdev_p->ctrl_qp.dma_addr);
@@ -556,6 +557,9 @@ static int cxio_hal_init_ctrl_qp(struct cxio_rdev *rdev_p)
rdev_p->ctrl_qp.workq, 1 << T3_CTRL_QP_SIZE_LOG2);
skb->priority = CPL_PRIORITY_CONTROL;
return (cxgb3_ofld_send(rdev_p->t3cdev_p, skb));
+err:
+ kfree_skb(skb);
+ return err;
}
static int cxio_hal_destroy_ctrl_qp(struct cxio_rdev *rdev_p)
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
index 8e4846b..fdb576d 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
@@ -881,8 +881,8 @@ int mthca_init_mr_table(struct mthca_dev *dev)
}
mpts = mtts = 1 << i;
} else {
- mpts = dev->limits.num_mtt_segs;
- mtts = dev->limits.num_mpts;
+ mtts = dev->limits.num_mtt_segs;
+ mpts = dev->limits.num_mpts;
}
if (!mthca_is_memfree(dev) &&
diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
index 89e3728..278fcbc 100644
--- a/drivers/infiniband/ulp/iser/iser_initiator.c
+++ b/drivers/infiniband/ulp/iser/iser_initiator.c
@@ -658,6 +658,7 @@ void iser_ctask_rdma_finalize(struct iscsi_iser_cmd_task *iser_ctask)
{
int deferred;
int is_rdma_aligned = 1;
+ struct iser_regd_buf *regd;
/* if we were reading, copy back to unaligned sglist,
* anyway dma_unmap and free the copy
@@ -672,20 +673,20 @@ void iser_ctask_rdma_finalize(struct iscsi_iser_cmd_task *iser_ctask)
}
if (iser_ctask->dir[ISER_DIR_IN]) {
- deferred = iser_regd_buff_release
- (&iser_ctask->rdma_regd[ISER_DIR_IN]);
+ regd = &iser_ctask->rdma_regd[ISER_DIR_IN];
+ deferred = iser_regd_buff_release(regd);
if (deferred) {
- iser_err("References remain for BUF-IN rdma reg\n");
- BUG();
+ iser_err("%d references remain for BUF-IN rdma reg\n",
+ atomic_read(®d->ref_count));
}
}
if (iser_ctask->dir[ISER_DIR_OUT]) {
- deferred = iser_regd_buff_release
- (&iser_ctask->rdma_regd[ISER_DIR_OUT]);
+ regd = &iser_ctask->rdma_regd[ISER_DIR_OUT];
+ deferred = iser_regd_buff_release(regd);
if (deferred) {
- iser_err("References remain for BUF-OUT rdma reg\n");
- BUG();
+ iser_err("%d references remain for BUF-OUT rdma reg\n",
+ atomic_read(®d->ref_count));
}
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-03-22 21:39 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-03-22 21:39 UTC (permalink / raw)
To: torvalds; +Cc: general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get various small post-rc4 fixes:
Bryan O'Sullivan (1):
IB/ipath: check return value of lookup_one_len
Joachim Fenkes (1):
IB/ehca: Make scaling code work without CPU hotplug
Michael S. Tsirkin (3):
IPoIB/cm: Fix reaping of stale connections
IPoIB: Fix use-after-free in path_rec_completion()
IB/ipoib: Fix thinko in packet length checks
Sean Hefty (1):
IPoIB: Fix race in detaching from mcast group before attaching
Steve Wise (1):
RDMA/cxgb3: Handle build_phys_page_list() failure in iwch_reregister_phys_mem()
drivers/infiniband/hw/cxgb3/iwch_provider.c | 5 ++++-
drivers/infiniband/hw/ehca/ehca_irq.c | 8 ++++++++
drivers/infiniband/hw/ipath/ipath_fs.c | 16 +++++++++++++++-
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 4 ++--
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 4 ++--
drivers/infiniband/ulp/ipoib/ipoib_main.c | 4 ++--
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 6 +++---
7 files changed, 36 insertions(+), 11 deletions(-)
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index f2774ae..24e0df0 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -545,11 +545,14 @@ static int iwch_reregister_phys_mem(struct ib_mr *mr,
php = to_iwch_pd(pd);
if (mr_rereg_mask & IB_MR_REREG_ACCESS)
mh.attr.perms = iwch_ib_to_tpt_access(acc);
- if (mr_rereg_mask & IB_MR_REREG_TRANS)
+ if (mr_rereg_mask & IB_MR_REREG_TRANS) {
ret = build_phys_page_list(buffer_list, num_phys_buf,
iova_start,
&total_size, &npages,
&shift, &page_list);
+ if (ret)
+ return ret;
+ }
ret = iwch_reregister_mem(rhp, php, &mh, shift, page_list, npages);
kfree(page_list);
diff --git a/drivers/infiniband/hw/ehca/ehca_irq.c b/drivers/infiniband/hw/ehca/ehca_irq.c
index 20f36bf..f284be1 100644
--- a/drivers/infiniband/hw/ehca/ehca_irq.c
+++ b/drivers/infiniband/hw/ehca/ehca_irq.c
@@ -66,7 +66,9 @@
static void queue_comp_task(struct ehca_cq *__cq);
static struct ehca_comp_pool* pool;
+#ifdef CONFIG_HOTPLUG_CPU
static struct notifier_block comp_pool_callback_nb;
+#endif
static inline void comp_event_callback(struct ehca_cq *cq)
{
@@ -733,6 +735,7 @@ static void take_over_work(struct ehca_comp_pool *pool,
}
+#ifdef CONFIG_HOTPLUG_CPU
static int comp_pool_callback(struct notifier_block *nfb,
unsigned long action,
void *hcpu)
@@ -775,6 +778,7 @@ static int comp_pool_callback(struct notifier_block *nfb,
return NOTIFY_OK;
}
+#endif
int ehca_create_comp_pool(void)
{
@@ -805,9 +809,11 @@ int ehca_create_comp_pool(void)
}
}
+#ifdef CONFIG_HOTPLUG_CPU
comp_pool_callback_nb.notifier_call = comp_pool_callback;
comp_pool_callback_nb.priority =0;
register_cpu_notifier(&comp_pool_callback_nb);
+#endif
printk(KERN_INFO "eHCA scaling code enabled\n");
@@ -821,7 +827,9 @@ void ehca_destroy_comp_pool(void)
if (!ehca_scaling_code)
return;
+#ifdef CONFIG_HOTPLUG_CPU
unregister_cpu_notifier(&comp_pool_callback_nb);
+#endif
for (i = 0; i < NR_CPUS; i++) {
if (cpu_online(i))
diff --git a/drivers/infiniband/hw/ipath/ipath_fs.c b/drivers/infiniband/hw/ipath/ipath_fs.c
index 5b40a84..ed55979 100644
--- a/drivers/infiniband/hw/ipath/ipath_fs.c
+++ b/drivers/infiniband/hw/ipath/ipath_fs.c
@@ -451,12 +451,18 @@ bail:
return ret;
}
-static void remove_file(struct dentry *parent, char *name)
+static int remove_file(struct dentry *parent, char *name)
{
struct dentry *tmp;
+ int ret;
tmp = lookup_one_len(name, parent, strlen(name));
+ if (IS_ERR(tmp)) {
+ ret = PTR_ERR(tmp);
+ goto bail;
+ }
+
spin_lock(&dcache_lock);
spin_lock(&tmp->d_lock);
if (!(d_unhashed(tmp) && tmp->d_inode)) {
@@ -469,6 +475,14 @@ static void remove_file(struct dentry *parent, char *name)
spin_unlock(&tmp->d_lock);
spin_unlock(&dcache_lock);
}
+
+ ret = 0;
+bail:
+ /*
+ * We don't expect clients to care about the return value, but
+ * it's there if they need it.
+ */
+ return ret;
}
static int remove_device_files(struct super_block *sb,
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 3484e8b..e70492d 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -452,7 +452,7 @@ void ipoib_cm_send(struct net_device *dev, struct sk_buff *skb, struct ipoib_cm_
skb->len, tx->mtu);
++priv->stats.tx_dropped;
++priv->stats.tx_errors;
- ipoib_cm_skb_too_long(dev, skb, tx->mtu - INFINIBAND_ALEN);
+ ipoib_cm_skb_too_long(dev, skb, tx->mtu - IPOIB_ENCAP_LEN);
return;
}
@@ -1095,7 +1095,7 @@ static void ipoib_cm_stale_task(struct work_struct *work)
/* List if sorted by LRU, start from tail,
* stop when we see a recently used entry */
p = list_entry(priv->cm.passive_ids.prev, typeof(*p), list);
- if (time_after_eq(jiffies, p->jiffies + IPOIB_CM_RX_TIMEOUT))
+ if (time_before_eq(jiffies, p->jiffies + IPOIB_CM_RX_TIMEOUT))
break;
list_del_init(&p->list);
spin_unlock_irqrestore(&priv->lock, flags);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index f2aa923..ba0ee5c 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -328,9 +328,9 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb,
struct ipoib_tx_buf *tx_req;
u64 addr;
- if (unlikely(skb->len > priv->mcast_mtu + INFINIBAND_ALEN)) {
+ if (unlikely(skb->len > priv->mcast_mtu + IPOIB_ENCAP_LEN)) {
ipoib_warn(priv, "packet len %d (> %d) too long to send, dropping\n",
- skb->len, priv->mcast_mtu + INFINIBAND_ALEN);
+ skb->len, priv->mcast_mtu + IPOIB_ENCAP_LEN);
++priv->stats.tx_dropped;
++priv->stats.tx_errors;
ipoib_cm_skb_too_long(dev, skb, priv->mcast_mtu);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index f9dbc6f..0741c6d 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -380,7 +380,7 @@ static void path_rec_completion(int status,
struct net_device *dev = path->dev;
struct ipoib_dev_priv *priv = netdev_priv(dev);
struct ipoib_ah *ah = NULL;
- struct ipoib_neigh *neigh;
+ struct ipoib_neigh *neigh, *tn;
struct sk_buff_head skqueue;
struct sk_buff *skb;
unsigned long flags;
@@ -418,7 +418,7 @@ static void path_rec_completion(int status,
while ((skb = __skb_dequeue(&path->queue)))
__skb_queue_tail(&skqueue, skb);
- list_for_each_entry(neigh, &path->neigh_list, list) {
+ list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) {
kref_get(&path->ah->ref);
neigh->ah = path->ah;
memcpy(&neigh->dgid.raw, &path->pathrec.dgid.raw,
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index 56c87a8..54fbead 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -644,6 +644,9 @@ static int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast)
struct ipoib_dev_priv *priv = netdev_priv(dev);
int ret = 0;
+ if (test_and_clear_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags))
+ ib_sa_free_multicast(mcast->mc);
+
if (test_and_clear_bit(IPOIB_MCAST_FLAG_ATTACHED, &mcast->flags)) {
ipoib_dbg_mcast(priv, "leaving MGID " IPOIB_GID_FMT "\n",
IPOIB_GID_ARG(mcast->mcmember.mgid));
@@ -655,9 +658,6 @@ static int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast)
ipoib_warn(priv, "ipoib_mcast_detach failed (result = %d)\n", ret);
}
- if (test_and_clear_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags))
- ib_sa_free_multicast(mcast->mc);
-
return 0;
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-03-08 23:50 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-03-08 23:50 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get various post-rc3 fixes:
David Miller (1):
RDMA/cxgb3: Fix build on sparc64
Hoang-Nam Nguyen (1):
IB/ehca: Fix sync between completion handler and destroy cq
Roland Dreier (2):
IPoIB: Only handle async events for one port
IB/mthca: Fix error path in mthca_alloc_memfree()
Sean Hefty (2):
RDMA/cma: Initialize rdma_bind_list in cma_alloc_any_port()
RDMA/ucma: Avoid sending reject if backlog is full
Shirley Ma (1):
IPoIB: Turn on interface's carrier after broadcast group is joined
Steve Wise (8):
RDMA/cxgb3: Start ep timer on a MPA reject
RDMA/cxgb3: Don't use mm after it's freed in iwch_mmap()
RDMA/cxgb3: Fixes for "normal close" failures
RDMA/cxgb3: Move QP to error on destroy if the state is IDLE
RDMA/cxgb3: Stop EP timer when MPA exchange is aborted by peer
RDMA/cxgb3: Squelch logging AE errors
RDMA/cxgb3: Don't reuse skbs that are non-linear or cloned
RDMA/cxgb3: Fix MR permission problems
drivers/infiniband/core/cma.c | 2 +-
drivers/infiniband/core/ucma.c | 2 +-
drivers/infiniband/hw/cxgb3/cxio_hal.c | 1 +
drivers/infiniband/hw/cxgb3/iwch_cm.c | 19 ++++---
drivers/infiniband/hw/cxgb3/iwch_ev.c | 12 ++--
drivers/infiniband/hw/cxgb3/iwch_provider.c | 40 +++++-----------
drivers/infiniband/hw/cxgb3/iwch_provider.h | 33 +++++--------
drivers/infiniband/hw/cxgb3/iwch_qp.c | 2 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 6 ++-
drivers/infiniband/hw/ehca/ehca_cq.c | 16 ++++++-
drivers/infiniband/hw/ehca/ehca_irq.c | 59 ++++++++++++++++--------
drivers/infiniband/hw/ehca/ehca_main.c | 4 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 10 ++--
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 5 ++-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 13 +++--
15 files changed, 122 insertions(+), 102 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index d441815..fde92ce 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -1821,7 +1821,7 @@ static int cma_alloc_port(struct idr *ps, struct rdma_id_private *id_priv,
struct rdma_bind_list *bind_list;
int port, ret;
- bind_list = kmalloc(sizeof *bind_list, GFP_KERNEL);
+ bind_list = kzalloc(sizeof *bind_list, GFP_KERNEL);
if (!bind_list)
return -ENOMEM;
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
index b516b93..c859134 100644
--- a/drivers/infiniband/core/ucma.c
+++ b/drivers/infiniband/core/ucma.c
@@ -266,7 +266,7 @@ static int ucma_event_handler(struct rdma_cm_id *cm_id,
mutex_lock(&ctx->file->mut);
if (event->event == RDMA_CM_EVENT_CONNECT_REQUEST) {
if (!ctx->backlog) {
- ret = -EDQUOT;
+ ret = -ENOMEM;
kfree(uevent);
goto out;
}
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c
index d737c73..818cf1a 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.c
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c
@@ -36,6 +36,7 @@
#include <linux/sched.h>
#include <linux/spinlock.h>
#include <linux/pci.h>
+#include <linux/dma-mapping.h>
#include "cxio_resource.h"
#include "cxio_hal.h"
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index b21fde8..d0ed1d3 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -305,8 +305,7 @@ static int status2errno(int status)
*/
static struct sk_buff *get_skb(struct sk_buff *skb, int len, gfp_t gfp)
{
- if (skb) {
- BUG_ON(skb_cloned(skb));
+ if (skb && !skb_is_nonlinear(skb) && !skb_cloned(skb)) {
skb_trim(skb, 0);
skb_get(skb);
} else {
@@ -1415,6 +1414,7 @@ static int peer_close(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
wake_up(&ep->com.waitq);
break;
case FPDU_MODE:
+ start_ep_timer(ep);
__state_set(&ep->com, CLOSING);
attrs.next_state = IWCH_QP_STATE_CLOSING;
iwch_modify_qp(ep->com.qp->rhp, ep->com.qp,
@@ -1425,7 +1425,6 @@ static int peer_close(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
disconnect = 0;
break;
case CLOSING:
- start_ep_timer(ep);
__state_set(&ep->com, MORIBUND);
disconnect = 0;
break;
@@ -1487,8 +1486,10 @@ static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
case CONNECTING:
break;
case MPA_REQ_WAIT:
+ stop_ep_timer(ep);
break;
case MPA_REQ_SENT:
+ stop_ep_timer(ep);
connect_reply_upcall(ep, -ECONNRESET);
break;
case MPA_REP_SENT:
@@ -1507,9 +1508,10 @@ static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
get_ep(&ep->com);
break;
case MORIBUND:
+ case CLOSING:
stop_ep_timer(ep);
+ /*FALLTHROUGH*/
case FPDU_MODE:
- case CLOSING:
if (ep->com.cm_id && ep->com.qp) {
attrs.next_state = IWCH_QP_STATE_ERROR;
ret = iwch_modify_qp(ep->com.qp->rhp,
@@ -1570,7 +1572,6 @@ static int close_con_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
spin_lock_irqsave(&ep->com.lock, flags);
switch (ep->com.state) {
case CLOSING:
- start_ep_timer(ep);
__state_set(&ep->com, MORIBUND);
break;
case MORIBUND:
@@ -1586,6 +1587,8 @@ static int close_con_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
__state_set(&ep->com, DEAD);
release = 1;
break;
+ case ABORTING:
+ break;
case DEAD:
default:
BUG_ON(1);
@@ -1659,6 +1662,7 @@ static void ep_timeout(unsigned long arg)
break;
case MPA_REQ_WAIT:
break;
+ case CLOSING:
case MORIBUND:
if (ep->com.cm_id && ep->com.qp) {
attrs.next_state = IWCH_QP_STATE_ERROR;
@@ -1687,12 +1691,11 @@ int iwch_reject_cr(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
return -ECONNRESET;
}
BUG_ON(state_read(&ep->com) != MPA_REQ_RCVD);
- state_set(&ep->com, CLOSING);
if (mpa_rev == 0)
abort_connection(ep, NULL, GFP_KERNEL);
else {
err = send_mpa_reject(ep, pdata, pdata_len);
- err = send_halfclose(ep, GFP_KERNEL);
+ err = iwch_ep_disconnect(ep, 0, GFP_KERNEL);
}
return 0;
}
@@ -1957,11 +1960,11 @@ int iwch_ep_disconnect(struct iwch_ep *ep, int abrupt, gfp_t gfp)
case MPA_REQ_RCVD:
case MPA_REP_SENT:
case FPDU_MODE:
+ start_ep_timer(ep);
ep->com.state = CLOSING;
close = 1;
break;
case CLOSING:
- start_ep_timer(ep);
ep->com.state = MORIBUND;
close = 1;
break;
diff --git a/drivers/infiniband/hw/cxgb3/iwch_ev.c b/drivers/infiniband/hw/cxgb3/iwch_ev.c
index 54362af..b406766 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_ev.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_ev.c
@@ -47,12 +47,6 @@ static void post_qp_event(struct iwch_dev *rnicp, struct iwch_cq *chp,
struct iwch_qp_attributes attrs;
struct iwch_qp *qhp;
- printk(KERN_ERR "%s - AE qpid 0x%x opcode %d status 0x%x "
- "type %d wrid.hi 0x%x wrid.lo 0x%x \n", __FUNCTION__,
- CQE_QPID(rsp_msg->cqe), CQE_OPCODE(rsp_msg->cqe),
- CQE_STATUS(rsp_msg->cqe), CQE_TYPE(rsp_msg->cqe),
- CQE_WRID_HI(rsp_msg->cqe), CQE_WRID_LOW(rsp_msg->cqe));
-
spin_lock(&rnicp->lock);
qhp = get_qhp(rnicp, CQE_QPID(rsp_msg->cqe));
@@ -73,6 +67,12 @@ static void post_qp_event(struct iwch_dev *rnicp, struct iwch_cq *chp,
return;
}
+ printk(KERN_ERR "%s - AE qpid 0x%x opcode %d status 0x%x "
+ "type %d wrid.hi 0x%x wrid.lo 0x%x \n", __FUNCTION__,
+ CQE_QPID(rsp_msg->cqe), CQE_OPCODE(rsp_msg->cqe),
+ CQE_STATUS(rsp_msg->cqe), CQE_TYPE(rsp_msg->cqe),
+ CQE_WRID_HI(rsp_msg->cqe), CQE_WRID_LOW(rsp_msg->cqe));
+
atomic_inc(&qhp->refcnt);
spin_unlock(&rnicp->lock);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index 9947a14..f2774ae 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -331,6 +331,7 @@ static int iwch_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
int ret = 0;
struct iwch_mm_entry *mm;
struct iwch_ucontext *ucontext;
+ u64 addr;
PDBG("%s pgoff 0x%lx key 0x%x len %d\n", __FUNCTION__, vma->vm_pgoff,
key, len);
@@ -345,10 +346,11 @@ static int iwch_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
mm = remove_mmap(ucontext, key, len);
if (!mm)
return -EINVAL;
+ addr = mm->addr;
kfree(mm);
- if ((mm->addr >= rdev_p->rnic_info.udbell_physbase) &&
- (mm->addr < (rdev_p->rnic_info.udbell_physbase +
+ if ((addr >= rdev_p->rnic_info.udbell_physbase) &&
+ (addr < (rdev_p->rnic_info.udbell_physbase +
rdev_p->rnic_info.udbell_len))) {
/*
@@ -362,7 +364,7 @@ static int iwch_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
vma->vm_flags |= VM_DONTCOPY | VM_DONTEXPAND;
vma->vm_flags &= ~VM_MAYREAD;
ret = io_remap_pfn_range(vma, vma->vm_start,
- mm->addr >> PAGE_SHIFT,
+ addr >> PAGE_SHIFT,
len, vma->vm_page_prot);
} else {
@@ -370,7 +372,7 @@ static int iwch_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
* Map WQ or CQ contig dma memory...
*/
ret = remap_pfn_range(vma, vma->vm_start,
- mm->addr >> PAGE_SHIFT,
+ addr >> PAGE_SHIFT,
len, vma->vm_page_prot);
}
@@ -463,9 +465,6 @@ static struct ib_mr *iwch_register_phys_mem(struct ib_pd *pd,
php = to_iwch_pd(pd);
rhp = php->rhp;
- acc = iwch_convert_access(acc);
-
-
mhp = kzalloc(sizeof(*mhp), GFP_KERNEL);
if (!mhp)
return ERR_PTR(-ENOMEM);
@@ -491,12 +490,7 @@ static struct ib_mr *iwch_register_phys_mem(struct ib_pd *pd,
mhp->attr.pdid = php->pdid;
mhp->attr.zbva = 0;
- /* NOTE: TPT perms are backwards from BIND WR perms! */
- mhp->attr.perms = (acc & 0x1) << 3;
- mhp->attr.perms |= (acc & 0x2) << 1;
- mhp->attr.perms |= (acc & 0x4) >> 1;
- mhp->attr.perms |= (acc & 0x8) >> 3;
-
+ mhp->attr.perms = iwch_ib_to_tpt_access(acc);
mhp->attr.va_fbo = *iova_start;
mhp->attr.page_size = shift - 12;
@@ -525,7 +519,6 @@ static int iwch_reregister_phys_mem(struct ib_mr *mr,
struct iwch_mr mh, *mhp;
struct iwch_pd *php;
struct iwch_dev *rhp;
- int new_acc;
__be64 *page_list = NULL;
int shift = 0;
u64 total_size;
@@ -546,14 +539,12 @@ static int iwch_reregister_phys_mem(struct ib_mr *mr,
if (rhp != php->rhp)
return -EINVAL;
- new_acc = mhp->attr.perms;
-
memcpy(&mh, mhp, sizeof *mhp);
if (mr_rereg_mask & IB_MR_REREG_PD)
php = to_iwch_pd(pd);
if (mr_rereg_mask & IB_MR_REREG_ACCESS)
- mh.attr.perms = iwch_convert_access(acc);
+ mh.attr.perms = iwch_ib_to_tpt_access(acc);
if (mr_rereg_mask & IB_MR_REREG_TRANS)
ret = build_phys_page_list(buffer_list, num_phys_buf,
iova_start,
@@ -568,7 +559,7 @@ static int iwch_reregister_phys_mem(struct ib_mr *mr,
if (mr_rereg_mask & IB_MR_REREG_PD)
mhp->attr.pdid = php->pdid;
if (mr_rereg_mask & IB_MR_REREG_ACCESS)
- mhp->attr.perms = acc;
+ mhp->attr.perms = iwch_ib_to_tpt_access(acc);
if (mr_rereg_mask & IB_MR_REREG_TRANS) {
mhp->attr.zbva = 0;
mhp->attr.va_fbo = *iova_start;
@@ -613,8 +604,6 @@ static struct ib_mr *iwch_reg_user_mr(struct ib_pd *pd, struct ib_umem *region,
goto err;
}
- acc = iwch_convert_access(acc);
-
i = n = 0;
list_for_each_entry(chunk, ®ion->chunk_list, list)
@@ -630,10 +619,7 @@ static struct ib_mr *iwch_reg_user_mr(struct ib_pd *pd, struct ib_umem *region,
mhp->rhp = rhp;
mhp->attr.pdid = php->pdid;
mhp->attr.zbva = 0;
- mhp->attr.perms = (acc & 0x1) << 3;
- mhp->attr.perms |= (acc & 0x2) << 1;
- mhp->attr.perms |= (acc & 0x4) >> 1;
- mhp->attr.perms |= (acc & 0x8) >> 3;
+ mhp->attr.perms = iwch_ib_to_tpt_access(acc);
mhp->attr.va_fbo = region->virt_base;
mhp->attr.page_size = shift - 12;
mhp->attr.len = (u32) region->length;
@@ -736,10 +722,8 @@ static int iwch_destroy_qp(struct ib_qp *ib_qp)
qhp = to_iwch_qp(ib_qp);
rhp = qhp->rhp;
- if (qhp->attr.state == IWCH_QP_STATE_RTS) {
- attrs.next_state = IWCH_QP_STATE_ERROR;
- iwch_modify_qp(rhp, qhp, IWCH_QP_ATTR_NEXT_STATE, &attrs, 0);
- }
+ attrs.next_state = IWCH_QP_STATE_ERROR;
+ iwch_modify_qp(rhp, qhp, IWCH_QP_ATTR_NEXT_STATE, &attrs, 0);
wait_event(qhp->wait, !qhp->ep);
remove_handle(rhp, &rhp->qpidr, qhp->wq.qpid);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.h b/drivers/infiniband/hw/cxgb3/iwch_provider.h
index de0fe1b..93bcc56 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.h
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.h
@@ -286,27 +286,20 @@ static inline int iwch_convert_state(enum ib_qp_state ib_state)
}
}
-enum iwch_mem_perms {
- IWCH_MEM_ACCESS_LOCAL_READ = 1 << 0,
- IWCH_MEM_ACCESS_LOCAL_WRITE = 1 << 1,
- IWCH_MEM_ACCESS_REMOTE_READ = 1 << 2,
- IWCH_MEM_ACCESS_REMOTE_WRITE = 1 << 3,
- IWCH_MEM_ACCESS_ATOMICS = 1 << 4,
- IWCH_MEM_ACCESS_BINDING = 1 << 5,
- IWCH_MEM_ACCESS_LOCAL =
- (IWCH_MEM_ACCESS_LOCAL_READ | IWCH_MEM_ACCESS_LOCAL_WRITE),
- IWCH_MEM_ACCESS_REMOTE =
- (IWCH_MEM_ACCESS_REMOTE_WRITE | IWCH_MEM_ACCESS_REMOTE_READ)
- /* cannot go beyond 1 << 31 */
-} __attribute__ ((packed));
-
-static inline u32 iwch_convert_access(int acc)
+static inline u32 iwch_ib_to_tpt_access(int acc)
{
- return (acc & IB_ACCESS_REMOTE_WRITE ? IWCH_MEM_ACCESS_REMOTE_WRITE : 0)
- | (acc & IB_ACCESS_REMOTE_READ ? IWCH_MEM_ACCESS_REMOTE_READ : 0) |
- (acc & IB_ACCESS_LOCAL_WRITE ? IWCH_MEM_ACCESS_LOCAL_WRITE : 0) |
- (acc & IB_ACCESS_MW_BIND ? IWCH_MEM_ACCESS_BINDING : 0) |
- IWCH_MEM_ACCESS_LOCAL_READ;
+ return (acc & IB_ACCESS_REMOTE_WRITE ? TPT_REMOTE_WRITE : 0) |
+ (acc & IB_ACCESS_REMOTE_READ ? TPT_REMOTE_READ : 0) |
+ (acc & IB_ACCESS_LOCAL_WRITE ? TPT_LOCAL_WRITE : 0) |
+ TPT_LOCAL_READ;
+}
+
+static inline u32 iwch_ib_to_mwbind_access(int acc)
+{
+ return (acc & IB_ACCESS_REMOTE_WRITE ? T3_MEM_ACCESS_REM_WRITE : 0) |
+ (acc & IB_ACCESS_REMOTE_READ ? T3_MEM_ACCESS_REM_READ : 0) |
+ (acc & IB_ACCESS_LOCAL_WRITE ? T3_MEM_ACCESS_LOCAL_WRITE : 0) |
+ T3_MEM_ACCESS_LOCAL_READ;
}
enum iwch_mmid_state {
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c
index 9ea00cc..0a472c9 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_qp.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c
@@ -439,7 +439,7 @@ int iwch_bind_mw(struct ib_qp *qp,
wqe->bind.type = T3_VA_BASED_TO;
/* TBD: check perms */
- wqe->bind.perms = iwch_convert_access(mw_bind->mw_access_flags);
+ wqe->bind.perms = iwch_ib_to_mwbind_access(mw_bind->mw_access_flags);
wqe->bind.mr_stag = cpu_to_be32(mw_bind->mr->lkey);
wqe->bind.mw_stag = cpu_to_be32(mw->rkey);
wqe->bind.mw_len = cpu_to_be32(mw_bind->length);
diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h
index 40404c9..82ded44 100644
--- a/drivers/infiniband/hw/ehca/ehca_classes.h
+++ b/drivers/infiniband/hw/ehca/ehca_classes.h
@@ -52,6 +52,8 @@ struct ehca_mw;
struct ehca_pd;
struct ehca_av;
+#include <linux/wait.h>
+
#include <rdma/ib_verbs.h>
#include <rdma/ib_user_verbs.h>
@@ -153,7 +155,9 @@ struct ehca_cq {
spinlock_t cb_lock;
struct hlist_head qp_hashtab[QP_HASHTAB_LEN];
struct list_head entry;
- u32 nr_callbacks;
+ u32 nr_callbacks; /* #events assigned to cpu by scaling code */
+ u32 nr_events; /* #events seen */
+ wait_queue_head_t wait_completion;
spinlock_t task_lock;
u32 ownpid;
/* mmap counter for resources mapped into user space */
diff --git a/drivers/infiniband/hw/ehca/ehca_cq.c b/drivers/infiniband/hw/ehca/ehca_cq.c
index 6ebfa27..e2cdc1a 100644
--- a/drivers/infiniband/hw/ehca/ehca_cq.c
+++ b/drivers/infiniband/hw/ehca/ehca_cq.c
@@ -146,6 +146,7 @@ struct ib_cq *ehca_create_cq(struct ib_device *device, int cqe,
spin_lock_init(&my_cq->spinlock);
spin_lock_init(&my_cq->cb_lock);
spin_lock_init(&my_cq->task_lock);
+ init_waitqueue_head(&my_cq->wait_completion);
my_cq->ownpid = current->tgid;
cq = &my_cq->ib_cq;
@@ -302,6 +303,16 @@ create_cq_exit1:
return cq;
}
+static int get_cq_nr_events(struct ehca_cq *my_cq)
+{
+ int ret;
+ unsigned long flags;
+ spin_lock_irqsave(&ehca_cq_idr_lock, flags);
+ ret = my_cq->nr_events;
+ spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
+ return ret;
+}
+
int ehca_destroy_cq(struct ib_cq *cq)
{
u64 h_ret;
@@ -329,10 +340,11 @@ int ehca_destroy_cq(struct ib_cq *cq)
}
spin_lock_irqsave(&ehca_cq_idr_lock, flags);
- while (my_cq->nr_callbacks) {
+ while (my_cq->nr_events) {
spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
- yield();
+ wait_event(my_cq->wait_completion, !get_cq_nr_events(my_cq));
spin_lock_irqsave(&ehca_cq_idr_lock, flags);
+ /* recheck nr_events to assure no cqe has just arrived */
}
idr_remove(&ehca_cq_idr, my_cq->token);
diff --git a/drivers/infiniband/hw/ehca/ehca_irq.c b/drivers/infiniband/hw/ehca/ehca_irq.c
index 3ec53c6..20f36bf 100644
--- a/drivers/infiniband/hw/ehca/ehca_irq.c
+++ b/drivers/infiniband/hw/ehca/ehca_irq.c
@@ -404,10 +404,11 @@ static inline void process_eqe(struct ehca_shca *shca, struct ehca_eqe *eqe)
u32 token;
unsigned long flags;
struct ehca_cq *cq;
+
eqe_value = eqe->entry;
ehca_dbg(&shca->ib_device, "eqe_value=%lx", eqe_value);
if (EHCA_BMASK_GET(EQE_COMPLETION_EVENT, eqe_value)) {
- ehca_dbg(&shca->ib_device, "... completion event");
+ ehca_dbg(&shca->ib_device, "Got completion event");
token = EHCA_BMASK_GET(EQE_CQ_TOKEN, eqe_value);
spin_lock_irqsave(&ehca_cq_idr_lock, flags);
cq = idr_find(&ehca_cq_idr, token);
@@ -419,16 +420,20 @@ static inline void process_eqe(struct ehca_shca *shca, struct ehca_eqe *eqe)
return;
}
reset_eq_pending(cq);
- if (ehca_scaling_code) {
+ cq->nr_events++;
+ spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
+ if (ehca_scaling_code)
queue_comp_task(cq);
- spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
- } else {
- spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
+ else {
comp_event_callback(cq);
+ spin_lock_irqsave(&ehca_cq_idr_lock, flags);
+ cq->nr_events--;
+ if (!cq->nr_events)
+ wake_up(&cq->wait_completion);
+ spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
}
} else {
- ehca_dbg(&shca->ib_device,
- "Got non completion event");
+ ehca_dbg(&shca->ib_device, "Got non completion event");
parse_identifier(shca, eqe_value);
}
}
@@ -478,6 +483,7 @@ void ehca_process_eq(struct ehca_shca *shca, int is_irq)
"token=%x", token);
continue;
}
+ eqe_cache[eqe_cnt].cq->nr_events++;
spin_unlock(&ehca_cq_idr_lock);
} else
eqe_cache[eqe_cnt].cq = NULL;
@@ -504,12 +510,18 @@ void ehca_process_eq(struct ehca_shca *shca, int is_irq)
/* call completion handler for cached eqes */
for (i = 0; i < eqe_cnt; i++)
if (eq->eqe_cache[i].cq) {
- if (ehca_scaling_code) {
- spin_lock(&ehca_cq_idr_lock);
+ if (ehca_scaling_code)
queue_comp_task(eq->eqe_cache[i].cq);
- spin_unlock(&ehca_cq_idr_lock);
- } else
- comp_event_callback(eq->eqe_cache[i].cq);
+ else {
+ struct ehca_cq *cq = eq->eqe_cache[i].cq;
+ comp_event_callback(cq);
+ spin_lock_irqsave(&ehca_cq_idr_lock, flags);
+ cq->nr_events--;
+ if (!cq->nr_events)
+ wake_up(&cq->wait_completion);
+ spin_unlock_irqrestore(&ehca_cq_idr_lock,
+ flags);
+ }
} else {
ehca_dbg(&shca->ib_device, "Got non completion event");
parse_identifier(shca, eq->eqe_cache[i].eqe->entry);
@@ -523,7 +535,6 @@ void ehca_process_eq(struct ehca_shca *shca, int is_irq)
if (!eqe)
break;
process_eqe(shca, eqe);
- eqe_cnt++;
} while (1);
unlock_irq_spinlock:
@@ -567,8 +578,7 @@ static void __queue_comp_task(struct ehca_cq *__cq,
list_add_tail(&__cq->entry, &cct->cq_list);
cct->cq_jobs++;
wake_up(&cct->wait_queue);
- }
- else
+ } else
__cq->nr_callbacks++;
spin_unlock(&__cq->task_lock);
@@ -577,18 +587,21 @@ static void __queue_comp_task(struct ehca_cq *__cq,
static void queue_comp_task(struct ehca_cq *__cq)
{
- int cpu;
int cpu_id;
struct ehca_cpu_comp_task *cct;
+ int cq_jobs;
+ unsigned long flags;
- cpu = get_cpu();
cpu_id = find_next_online_cpu(pool);
BUG_ON(!cpu_online(cpu_id));
cct = per_cpu_ptr(pool->cpu_comp_tasks, cpu_id);
BUG_ON(!cct);
- if (cct->cq_jobs > 0) {
+ spin_lock_irqsave(&cct->task_lock, flags);
+ cq_jobs = cct->cq_jobs;
+ spin_unlock_irqrestore(&cct->task_lock, flags);
+ if (cq_jobs > 0) {
cpu_id = find_next_online_cpu(pool);
cct = per_cpu_ptr(pool->cpu_comp_tasks, cpu_id);
BUG_ON(!cct);
@@ -608,11 +621,17 @@ static void run_comp_task(struct ehca_cpu_comp_task* cct)
cq = list_entry(cct->cq_list.next, struct ehca_cq, entry);
spin_unlock_irqrestore(&cct->task_lock, flags);
comp_event_callback(cq);
- spin_lock_irqsave(&cct->task_lock, flags);
+ spin_lock_irqsave(&ehca_cq_idr_lock, flags);
+ cq->nr_events--;
+ if (!cq->nr_events)
+ wake_up(&cq->wait_completion);
+ spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
+
+ spin_lock_irqsave(&cct->task_lock, flags);
spin_lock(&cq->task_lock);
cq->nr_callbacks--;
- if (cq->nr_callbacks == 0) {
+ if (!cq->nr_callbacks) {
list_del_init(cct->cq_list.next);
cct->cq_jobs--;
}
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index c183512..059da96 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -52,7 +52,7 @@
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Christoph Raisch <raisch@de.ibm.com>");
MODULE_DESCRIPTION("IBM eServer HCA InfiniBand Device Driver");
-MODULE_VERSION("SVNEHCA_0021");
+MODULE_VERSION("SVNEHCA_0022");
int ehca_open_aqp1 = 0;
int ehca_debug_level = 0;
@@ -810,7 +810,7 @@ int __init ehca_module_init(void)
int ret;
printk(KERN_INFO "eHCA Infiniband Device Driver "
- "(Rel.: SVNEHCA_0021)\n");
+ "(Rel.: SVNEHCA_0022)\n");
idr_init(&ehca_qp_idr);
idr_init(&ehca_cq_idr);
spin_lock_init(&ehca_qp_idr_lock);
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index 71dc84b..1c6b63a 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -1088,21 +1088,21 @@ static void mthca_unmap_memfree(struct mthca_dev *dev,
static int mthca_alloc_memfree(struct mthca_dev *dev,
struct mthca_qp *qp)
{
- int ret = 0;
-
if (mthca_is_memfree(dev)) {
qp->rq.db_index = mthca_alloc_db(dev, MTHCA_DB_TYPE_RQ,
qp->qpn, &qp->rq.db);
if (qp->rq.db_index < 0)
- return ret;
+ return -ENOMEM;
qp->sq.db_index = mthca_alloc_db(dev, MTHCA_DB_TYPE_SQ,
qp->qpn, &qp->sq.db);
- if (qp->sq.db_index < 0)
+ if (qp->sq.db_index < 0) {
mthca_free_db(dev, MTHCA_DB_TYPE_RQ, qp->rq.db_index);
+ return -ENOMEM;
+ }
}
- return ret;
+ return 0;
}
static void mthca_free_memfree(struct mthca_dev *dev,
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index bb2e3d5..56c87a8 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -407,6 +407,10 @@ static int ipoib_mcast_join_complete(int status,
queue_delayed_work(ipoib_workqueue,
&priv->mcast_task, 0);
mutex_unlock(&mcast_mutex);
+
+ if (mcast == priv->broadcast)
+ netif_carrier_on(dev);
+
return 0;
}
@@ -594,7 +598,6 @@ void ipoib_mcast_join_task(struct work_struct *work)
ipoib_dbg_mcast(priv, "successfully joined all multicast groups\n");
clear_bit(IPOIB_MCAST_RUN, &priv->flags);
- netif_carrier_on(dev);
}
int ipoib_mcast_start_thread(struct net_device *dev)
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
index 3cb551b..7f3ec20 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
@@ -259,12 +259,13 @@ void ipoib_event(struct ib_event_handler *handler,
struct ipoib_dev_priv *priv =
container_of(handler, struct ipoib_dev_priv, event_handler);
- if (record->event == IB_EVENT_PORT_ERR ||
- record->event == IB_EVENT_PKEY_CHANGE ||
- record->event == IB_EVENT_PORT_ACTIVE ||
- record->event == IB_EVENT_LID_CHANGE ||
- record->event == IB_EVENT_SM_CHANGE ||
- record->event == IB_EVENT_CLIENT_REREGISTER) {
+ if ((record->event == IB_EVENT_PORT_ERR ||
+ record->event == IB_EVENT_PKEY_CHANGE ||
+ record->event == IB_EVENT_PORT_ACTIVE ||
+ record->event == IB_EVENT_LID_CHANGE ||
+ record->event == IB_EVENT_SM_CHANGE ||
+ record->event == IB_EVENT_CLIENT_REREGISTER) &&
+ record->element.port_num == priv->port) {
ipoib_dbg(priv, "Port state change event\n");
queue_work(ipoib_workqueue, &priv->flush_task);
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-02-26 21:05 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-02-26 21:05 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will get various post-rc1 cleanups and fixes:
Adrian Bunk (2):
IB/mthca: Make 2 functions static
RDMA/cxgb3: cleanups
Michael S. Tsirkin (1):
IPoIB/cm: Improve small message bandwidth
Roland Dreier (3):
IPoIB: Remove unused local_rate tracking
IB/uverbs: Return correct error for invalid PD in register MR
IPoIB: Correct debugging output when path record lookup fails
Sean Hefty (4):
IB/core: Set hop limit in ib_init_ah_from_wc correctly
RDMA/cma: Request reversible paths only
IB/cm: Remove ca_guid from cm_device structure
RDMA/cma: Remove unused node_guid from cma_device structure
Steve Wise (1):
RDMA/cxgb3: Stop the EP Timer on BAD CLOSE
drivers/infiniband/core/cm.c | 10 ++---
drivers/infiniband/core/cma.c | 6 ++--
drivers/infiniband/core/uverbs_cmd.c | 4 ++-
drivers/infiniband/core/verbs.c | 2 +-
drivers/infiniband/hw/cxgb3/Makefile | 1 -
drivers/infiniband/hw/cxgb3/cxio_hal.c | 31 +++++-----------
drivers/infiniband/hw/cxgb3/cxio_hal.h | 5 ---
drivers/infiniband/hw/cxgb3/cxio_resource.c | 14 +------
drivers/infiniband/hw/cxgb3/iwch_cm.c | 6 ++--
drivers/infiniband/hw/cxgb3/iwch_provider.c | 2 +-
drivers/infiniband/hw/cxgb3/iwch_provider.h | 1 -
drivers/infiniband/hw/cxgb3/iwch_qp.c | 29 +++++++--------
drivers/infiniband/hw/mthca/mthca_mr.c | 10 +++--
drivers/infiniband/ulp/ipoib/ipoib.h | 1 -
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 46 ++++++++++++++----------
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 8 ++---
17 files changed, 76 insertions(+), 102 deletions(-)
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index d446998..842cd0b 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -88,7 +88,6 @@ struct cm_port {
struct cm_device {
struct list_head list;
struct ib_device *device;
- __be64 ca_guid;
struct cm_port port[0];
};
@@ -739,8 +738,8 @@ retest:
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg);
spin_unlock_irqrestore(&cm_id_priv->lock, flags);
ib_send_cm_rej(cm_id, IB_CM_REJ_TIMEOUT,
- &cm_id_priv->av.port->cm_dev->ca_guid,
- sizeof cm_id_priv->av.port->cm_dev->ca_guid,
+ &cm_id_priv->id.device->node_guid,
+ sizeof cm_id_priv->id.device->node_guid,
NULL, 0);
break;
case IB_CM_REQ_RCVD:
@@ -883,7 +882,7 @@ static void cm_format_req(struct cm_req_msg *req_msg,
req_msg->local_comm_id = cm_id_priv->id.local_id;
req_msg->service_id = param->service_id;
- req_msg->local_ca_guid = cm_id_priv->av.port->cm_dev->ca_guid;
+ req_msg->local_ca_guid = cm_id_priv->id.device->node_guid;
cm_req_set_local_qpn(req_msg, cpu_to_be32(param->qp_num));
cm_req_set_resp_res(req_msg, param->responder_resources);
cm_req_set_init_depth(req_msg, param->initiator_depth);
@@ -1442,7 +1441,7 @@ static void cm_format_rep(struct cm_rep_msg *rep_msg,
cm_rep_set_flow_ctrl(rep_msg, param->flow_control);
cm_rep_set_rnr_retry_count(rep_msg, param->rnr_retry_count);
cm_rep_set_srq(rep_msg, param->srq);
- rep_msg->local_ca_guid = cm_id_priv->av.port->cm_dev->ca_guid;
+ rep_msg->local_ca_guid = cm_id_priv->id.device->node_guid;
if (param->private_data && param->private_data_len)
memcpy(rep_msg->private_data, param->private_data,
@@ -3385,7 +3384,6 @@ static void cm_add_one(struct ib_device *device)
return;
cm_dev->device = device;
- cm_dev->ca_guid = device->node_guid;
set_bit(IB_MGMT_METHOD_SEND, reg_req.method_mask);
for (i = 1; i <= device->phys_port_cnt; i++) {
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index f8d69b3..d441815 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -77,7 +77,6 @@ static int next_port;
struct cma_device {
struct list_head list;
struct ib_device *device;
- __be64 node_guid;
struct completion comp;
atomic_t refcount;
struct list_head id_list;
@@ -1492,11 +1491,13 @@ static int cma_query_ib_route(struct rdma_id_private *id_priv, int timeout_ms,
ib_addr_get_dgid(addr, &path_rec.dgid);
path_rec.pkey = cpu_to_be16(ib_addr_get_pkey(addr));
path_rec.numb_path = 1;
+ path_rec.reversible = 1;
id_priv->query_id = ib_sa_path_rec_get(&sa_client, id_priv->id.device,
id_priv->id.port_num, &path_rec,
IB_SA_PATH_REC_DGID | IB_SA_PATH_REC_SGID |
- IB_SA_PATH_REC_PKEY | IB_SA_PATH_REC_NUMB_PATH,
+ IB_SA_PATH_REC_PKEY | IB_SA_PATH_REC_NUMB_PATH |
+ IB_SA_PATH_REC_REVERSIBLE,
timeout_ms, GFP_KERNEL,
cma_query_handler, work, &id_priv->query);
@@ -2672,7 +2673,6 @@ static void cma_add_one(struct ib_device *device)
return;
cma_dev->device = device;
- cma_dev->node_guid = device->node_guid;
init_completion(&cma_dev->comp);
atomic_set(&cma_dev->refcount, 1);
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index df1efbc..4fd75af 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -622,8 +622,10 @@ ssize_t ib_uverbs_reg_mr(struct ib_uverbs_file *file,
obj->umem.virt_base = cmd.hca_va;
pd = idr_read_pd(cmd.pd_handle, file->ucontext);
- if (!pd)
+ if (!pd) {
+ ret = -EINVAL;
goto err_release;
+ }
mr = pd->device->reg_user_mr(pd, &obj->umem, cmd.access_flags, &udata);
if (IS_ERR(mr)) {
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index 8b5dd36..ccdf93d 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -167,7 +167,7 @@ int ib_init_ah_from_wc(struct ib_device *device, u8 port_num, struct ib_wc *wc,
ah_attr->grh.sgid_index = (u8) gid_index;
flow_class = be32_to_cpu(grh->version_tclass_flow);
ah_attr->grh.flow_label = flow_class & 0xFFFFF;
- ah_attr->grh.hop_limit = grh->hop_limit;
+ ah_attr->grh.hop_limit = 0xFF;
ah_attr->grh.traffic_class = (flow_class >> 20) & 0xFF;
}
return 0;
diff --git a/drivers/infiniband/hw/cxgb3/Makefile b/drivers/infiniband/hw/cxgb3/Makefile
index 0e110f3..36b9898 100644
--- a/drivers/infiniband/hw/cxgb3/Makefile
+++ b/drivers/infiniband/hw/cxgb3/Makefile
@@ -8,5 +8,4 @@ iw_cxgb3-y := iwch_cm.o iwch_ev.o iwch_cq.o iwch_qp.o iwch_mem.o \
ifdef CONFIG_INFINIBAND_CXGB3_DEBUG
EXTRA_CFLAGS += -DDEBUG
-iw_cxgb3-y += cxio_dbg.o
endif
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c
index 114ac3b..d737c73 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.c
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c
@@ -45,7 +45,7 @@
static LIST_HEAD(rdev_list);
static cxio_hal_ev_callback_func_t cxio_ev_cb = NULL;
-static inline struct cxio_rdev *cxio_hal_find_rdev_by_name(char *dev_name)
+static struct cxio_rdev *cxio_hal_find_rdev_by_name(char *dev_name)
{
struct cxio_rdev *rdev;
@@ -55,8 +55,7 @@ static inline struct cxio_rdev *cxio_hal_find_rdev_by_name(char *dev_name)
return NULL;
}
-static inline struct cxio_rdev *cxio_hal_find_rdev_by_t3cdev(struct t3cdev
- *tdev)
+static struct cxio_rdev *cxio_hal_find_rdev_by_t3cdev(struct t3cdev *tdev)
{
struct cxio_rdev *rdev;
@@ -118,7 +117,7 @@ int cxio_hal_cq_op(struct cxio_rdev *rdev_p, struct t3_cq *cq,
return 0;
}
-static inline int cxio_hal_clear_cq_ctx(struct cxio_rdev *rdev_p, u32 cqid)
+static int cxio_hal_clear_cq_ctx(struct cxio_rdev *rdev_p, u32 cqid)
{
struct rdma_cq_setup setup;
setup.id = cqid;
@@ -130,7 +129,7 @@ static inline int cxio_hal_clear_cq_ctx(struct cxio_rdev *rdev_p, u32 cqid)
return (rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_CQ_SETUP, &setup));
}
-int cxio_hal_clear_qp_ctx(struct cxio_rdev *rdev_p, u32 qpid)
+static int cxio_hal_clear_qp_ctx(struct cxio_rdev *rdev_p, u32 qpid)
{
u64 sge_cmd;
struct t3_modify_qp_wr *wqe;
@@ -425,7 +424,7 @@ void cxio_flush_hw_cq(struct t3_cq *cq)
}
}
-static inline int cqe_completes_wr(struct t3_cqe *cqe, struct t3_wq *wq)
+static int cqe_completes_wr(struct t3_cqe *cqe, struct t3_wq *wq)
{
if (CQE_OPCODE(*cqe) == T3_TERMINATE)
return 0;
@@ -760,17 +759,6 @@ ret:
return err;
}
-/* IN : stag key, pdid, pbl_size
- * Out: stag index, actaul pbl_size, and pbl_addr allocated.
- */
-int cxio_allocate_stag(struct cxio_rdev *rdev_p, u32 * stag, u32 pdid,
- enum tpt_mem_perm perm, u32 * pbl_size, u32 * pbl_addr)
-{
- *stag = T3_STAG_UNSET;
- return (__cxio_tpt_op(rdev_p, 0, stag, 0, pdid, TPT_NON_SHARED_MR,
- perm, 0, 0ULL, 0, 0, NULL, pbl_size, pbl_addr));
-}
-
int cxio_register_phys_mem(struct cxio_rdev *rdev_p, u32 *stag, u32 pdid,
enum tpt_mem_perm perm, u32 zbva, u64 to, u32 len,
u8 page_size, __be64 *pbl, u32 *pbl_size,
@@ -1029,7 +1017,7 @@ void __exit cxio_hal_exit(void)
cxio_hal_destroy_rhdl_resource();
}
-static inline void flush_completed_wrs(struct t3_wq *wq, struct t3_cq *cq)
+static void flush_completed_wrs(struct t3_wq *wq, struct t3_cq *cq)
{
struct t3_swsq *sqp;
__u32 ptr = wq->sq_rptr;
@@ -1058,9 +1046,8 @@ static inline void flush_completed_wrs(struct t3_wq *wq, struct t3_cq *cq)
break;
}
-static inline void create_read_req_cqe(struct t3_wq *wq,
- struct t3_cqe *hw_cqe,
- struct t3_cqe *read_cqe)
+static void create_read_req_cqe(struct t3_wq *wq, struct t3_cqe *hw_cqe,
+ struct t3_cqe *read_cqe)
{
read_cqe->u.scqe.wrid_hi = wq->oldest_read->sq_wptr;
read_cqe->len = wq->oldest_read->read_len;
@@ -1073,7 +1060,7 @@ static inline void create_read_req_cqe(struct t3_wq *wq,
/*
* Return a ptr to the next read wr in the SWSQ or NULL.
*/
-static inline void advance_oldest_read(struct t3_wq *wq)
+static void advance_oldest_read(struct t3_wq *wq)
{
u32 rptr = wq->oldest_read - wq->sq + 1;
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.h b/drivers/infiniband/hw/cxgb3/cxio_hal.h
index 8ab04a7..99543d6 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.h
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.h
@@ -143,7 +143,6 @@ int cxio_rdev_open(struct cxio_rdev *rdev);
void cxio_rdev_close(struct cxio_rdev *rdev);
int cxio_hal_cq_op(struct cxio_rdev *rdev, struct t3_cq *cq,
enum t3_cq_opcode op, u32 credit);
-int cxio_hal_clear_qp_ctx(struct cxio_rdev *rdev, u32 qpid);
int cxio_create_cq(struct cxio_rdev *rdev, struct t3_cq *cq);
int cxio_destroy_cq(struct cxio_rdev *rdev, struct t3_cq *cq);
int cxio_resize_cq(struct cxio_rdev *rdev, struct t3_cq *cq);
@@ -154,8 +153,6 @@ int cxio_create_qp(struct cxio_rdev *rdev, u32 kernel_domain, struct t3_wq *wq,
int cxio_destroy_qp(struct cxio_rdev *rdev, struct t3_wq *wq,
struct cxio_ucontext *uctx);
int cxio_peek_cq(struct t3_wq *wr, struct t3_cq *cq, int opcode);
-int cxio_allocate_stag(struct cxio_rdev *rdev, u32 * stag, u32 pdid,
- enum tpt_mem_perm perm, u32 * pbl_size, u32 * pbl_addr);
int cxio_register_phys_mem(struct cxio_rdev *rdev, u32 * stag, u32 pdid,
enum tpt_mem_perm perm, u32 zbva, u64 to, u32 len,
u8 page_size, __be64 *pbl, u32 *pbl_size,
@@ -171,8 +168,6 @@ int cxio_deallocate_window(struct cxio_rdev *rdev, u32 stag);
int cxio_rdma_init(struct cxio_rdev *rdev, struct t3_rdma_init_attr *attr);
void cxio_register_ev_cb(cxio_hal_ev_callback_func_t ev_cb);
void cxio_unregister_ev_cb(cxio_hal_ev_callback_func_t ev_cb);
-u32 cxio_hal_get_rhdl(void);
-void cxio_hal_put_rhdl(u32 rhdl);
u32 cxio_hal_get_pdid(struct cxio_hal_resource *rscp);
void cxio_hal_put_pdid(struct cxio_hal_resource *rscp, u32 pdid);
int __init cxio_hal_init(void);
diff --git a/drivers/infiniband/hw/cxgb3/cxio_resource.c b/drivers/infiniband/hw/cxgb3/cxio_resource.c
index 65bf577..d3095ae 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_resource.c
+++ b/drivers/infiniband/hw/cxgb3/cxio_resource.c
@@ -179,7 +179,7 @@ tpt_err:
/*
* returns 0 if no resource available
*/
-static inline u32 cxio_hal_get_resource(struct kfifo *fifo)
+static u32 cxio_hal_get_resource(struct kfifo *fifo)
{
u32 entry;
if (kfifo_get(fifo, (unsigned char *) &entry, sizeof(u32)))
@@ -188,21 +188,11 @@ static inline u32 cxio_hal_get_resource(struct kfifo *fifo)
return 0; /* fifo emptry */
}
-static inline void cxio_hal_put_resource(struct kfifo *fifo, u32 entry)
+static void cxio_hal_put_resource(struct kfifo *fifo, u32 entry)
{
BUG_ON(kfifo_put(fifo, (unsigned char *) &entry, sizeof(u32)) == 0);
}
-u32 cxio_hal_get_rhdl(void)
-{
- return cxio_hal_get_resource(rhdl_fifo);
-}
-
-void cxio_hal_put_rhdl(u32 rhdl)
-{
- cxio_hal_put_resource(rhdl_fifo, rhdl);
-}
-
u32 cxio_hal_get_stag(struct cxio_hal_resource *rscp)
{
return cxio_hal_get_resource(rscp->tpt_fifo);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index e5442e3..b21fde8 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -209,8 +209,7 @@ static enum iwch_ep_state state_read(struct iwch_ep_common *epc)
return state;
}
-static inline void __state_set(struct iwch_ep_common *epc,
- enum iwch_ep_state new)
+static void __state_set(struct iwch_ep_common *epc, enum iwch_ep_state new)
{
epc->state = new;
}
@@ -1459,7 +1458,7 @@ static int peer_close(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
/*
* Returns whether an ABORT_REQ_RSS message is a negative advice.
*/
-static inline int is_neg_adv_abort(unsigned int status)
+static int is_neg_adv_abort(unsigned int status)
{
return status == CPL_ERR_RTX_NEG_ADVICE ||
status == CPL_ERR_PERSIST_NEG_ADVICE;
@@ -1635,6 +1634,7 @@ static int ec_status(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
printk(KERN_ERR MOD "%s BAD CLOSE - Aborting tid %u\n",
__FUNCTION__, ep->hwtid);
+ stop_ep_timer(ep);
attrs.next_state = IWCH_QP_STATE_ERROR;
iwch_modify_qp(ep->com.qp->rhp,
ep->com.qp, IWCH_QP_ATTR_NEXT_STATE,
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
index 2aef122..9947a14 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
@@ -948,7 +948,7 @@ void iwch_qp_rem_ref(struct ib_qp *qp)
wake_up(&(to_iwch_qp(qp)->wait));
}
-struct ib_qp *iwch_get_qp(struct ib_device *dev, int qpn)
+static struct ib_qp *iwch_get_qp(struct ib_device *dev, int qpn)
{
PDBG("%s ib_dev %p qpn 0x%x\n", __FUNCTION__, dev, qpn);
return (struct ib_qp *)get_qhp(to_iwch_dev(dev), qpn);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.h b/drivers/infiniband/hw/cxgb3/iwch_provider.h
index 2af3e93..de0fe1b 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_provider.h
+++ b/drivers/infiniband/hw/cxgb3/iwch_provider.h
@@ -178,7 +178,6 @@ static inline struct iwch_qp *to_iwch_qp(struct ib_qp *ibqp)
void iwch_qp_add_ref(struct ib_qp *qp);
void iwch_qp_rem_ref(struct ib_qp *qp);
-struct ib_qp *iwch_get_qp(struct ib_device *dev, int qpn);
struct iwch_ucontext {
struct ib_ucontext ibucontext;
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c
index 4dda2f6..9ea00cc 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_qp.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c
@@ -36,8 +36,8 @@
#define NO_SUPPORT -1
-static inline int iwch_build_rdma_send(union t3_wr *wqe, struct ib_send_wr *wr,
- u8 * flit_cnt)
+static int iwch_build_rdma_send(union t3_wr *wqe, struct ib_send_wr *wr,
+ u8 * flit_cnt)
{
int i;
u32 plen;
@@ -96,8 +96,8 @@ static inline int iwch_build_rdma_send(union t3_wr *wqe, struct ib_send_wr *wr,
return 0;
}
-static inline int iwch_build_rdma_write(union t3_wr *wqe, struct ib_send_wr *wr,
- u8 *flit_cnt)
+static int iwch_build_rdma_write(union t3_wr *wqe, struct ib_send_wr *wr,
+ u8 *flit_cnt)
{
int i;
u32 plen;
@@ -137,8 +137,8 @@ static inline int iwch_build_rdma_write(union t3_wr *wqe, struct ib_send_wr *wr,
return 0;
}
-static inline int iwch_build_rdma_read(union t3_wr *wqe, struct ib_send_wr *wr,
- u8 *flit_cnt)
+static int iwch_build_rdma_read(union t3_wr *wqe, struct ib_send_wr *wr,
+ u8 *flit_cnt)
{
if (wr->num_sge > 1)
return -EINVAL;
@@ -158,9 +158,8 @@ static inline int iwch_build_rdma_read(union t3_wr *wqe, struct ib_send_wr *wr,
/*
* TBD: this is going to be moved to firmware. Missing pdid/qpid check for now.
*/
-static inline int iwch_sgl2pbl_map(struct iwch_dev *rhp,
- struct ib_sge *sg_list, u32 num_sgle,
- u32 * pbl_addr, u8 * page_size)
+static int iwch_sgl2pbl_map(struct iwch_dev *rhp, struct ib_sge *sg_list,
+ u32 num_sgle, u32 * pbl_addr, u8 * page_size)
{
int i;
struct iwch_mr *mhp;
@@ -206,9 +205,8 @@ static inline int iwch_sgl2pbl_map(struct iwch_dev *rhp,
return 0;
}
-static inline int iwch_build_rdma_recv(struct iwch_dev *rhp,
- union t3_wr *wqe,
- struct ib_recv_wr *wr)
+static int iwch_build_rdma_recv(struct iwch_dev *rhp, union t3_wr *wqe,
+ struct ib_recv_wr *wr)
{
int i, err = 0;
u32 pbl_addr[4];
@@ -473,8 +471,7 @@ int iwch_bind_mw(struct ib_qp *qp,
return err;
}
-static inline void build_term_codes(int t3err, u8 *layer_type, u8 *ecode,
- int tagged)
+static void build_term_codes(int t3err, u8 *layer_type, u8 *ecode, int tagged)
{
switch (t3err) {
case TPT_ERR_STAG:
@@ -672,7 +669,7 @@ static void __flush_qp(struct iwch_qp *qhp, unsigned long *flag)
spin_lock_irqsave(&qhp->lock, *flag);
}
-static inline void flush_qp(struct iwch_qp *qhp, unsigned long *flag)
+static void flush_qp(struct iwch_qp *qhp, unsigned long *flag)
{
if (t3b_device(qhp->rhp))
cxio_set_wq_in_error(&qhp->wq);
@@ -684,7 +681,7 @@ static inline void flush_qp(struct iwch_qp *qhp, unsigned long *flag)
/*
* Return non zero if at least one RECV was pre-posted.
*/
-static inline int rqes_posted(struct iwch_qp *qhp)
+static int rqes_posted(struct iwch_qp *qhp)
{
return fw_riwrh_opcode((struct fw_riwrh *)qhp->wq.queue) == T3_WR_RCV;
}
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
index 6037dd3..8e4846b 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
@@ -310,8 +310,9 @@ int mthca_write_mtt_size(struct mthca_dev *dev)
return mthca_is_memfree(dev) ? (PAGE_SIZE / sizeof (u64)) : 0x7ffffff;
}
-void mthca_tavor_write_mtt_seg(struct mthca_dev *dev, struct mthca_mtt *mtt,
- int start_index, u64 *buffer_list, int list_len)
+static void mthca_tavor_write_mtt_seg(struct mthca_dev *dev,
+ struct mthca_mtt *mtt, int start_index,
+ u64 *buffer_list, int list_len)
{
u64 __iomem *mtts;
int i;
@@ -323,8 +324,9 @@ void mthca_tavor_write_mtt_seg(struct mthca_dev *dev, struct mthca_mtt *mtt,
mtts + i);
}
-void mthca_arbel_write_mtt_seg(struct mthca_dev *dev, struct mthca_mtt *mtt,
- int start_index, u64 *buffer_list, int list_len)
+static void mthca_arbel_write_mtt_seg(struct mthca_dev *dev,
+ struct mthca_mtt *mtt, int start_index,
+ u64 *buffer_list, int list_len)
{
__be64 *mtts;
dma_addr_t dma_handle;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 2594db2..fd55826 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -219,7 +219,6 @@ struct ipoib_dev_priv {
union ib_gid local_gid;
u16 local_lid;
- u8 local_rate;
unsigned int admin_mtu;
unsigned int mcast_mtu;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 4d59682..3484e8b 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -65,14 +65,14 @@ struct ipoib_cm_id {
static int ipoib_cm_tx_handler(struct ib_cm_id *cm_id,
struct ib_cm_event *event);
-static void ipoib_cm_dma_unmap_rx(struct ipoib_dev_priv *priv,
+static void ipoib_cm_dma_unmap_rx(struct ipoib_dev_priv *priv, int frags,
u64 mapping[IPOIB_CM_RX_SG])
{
int i;
ib_dma_unmap_single(priv->ca, mapping[0], IPOIB_CM_HEAD_SIZE, DMA_FROM_DEVICE);
- for (i = 0; i < IPOIB_CM_RX_SG - 1; ++i)
+ for (i = 0; i < frags; ++i)
ib_dma_unmap_single(priv->ca, mapping[i + 1], PAGE_SIZE, DMA_FROM_DEVICE);
}
@@ -90,7 +90,8 @@ static int ipoib_cm_post_receive(struct net_device *dev, int id)
ret = ib_post_srq_recv(priv->cm.srq, &priv->cm.rx_wr, &bad_wr);
if (unlikely(ret)) {
ipoib_warn(priv, "post srq failed for buf %d (%d)\n", id, ret);
- ipoib_cm_dma_unmap_rx(priv, priv->cm.srq_ring[id].mapping);
+ ipoib_cm_dma_unmap_rx(priv, IPOIB_CM_RX_SG - 1,
+ priv->cm.srq_ring[id].mapping);
dev_kfree_skb_any(priv->cm.srq_ring[id].skb);
priv->cm.srq_ring[id].skb = NULL;
}
@@ -98,8 +99,8 @@ static int ipoib_cm_post_receive(struct net_device *dev, int id)
return ret;
}
-static int ipoib_cm_alloc_rx_skb(struct net_device *dev, int id,
- u64 mapping[IPOIB_CM_RX_SG])
+static struct sk_buff *ipoib_cm_alloc_rx_skb(struct net_device *dev, int id, int frags,
+ u64 mapping[IPOIB_CM_RX_SG])
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
struct sk_buff *skb;
@@ -107,7 +108,7 @@ static int ipoib_cm_alloc_rx_skb(struct net_device *dev, int id,
skb = dev_alloc_skb(IPOIB_CM_HEAD_SIZE + 12);
if (unlikely(!skb))
- return -ENOMEM;
+ return NULL;
/*
* IPoIB adds a 4 byte header. So we need 12 more bytes to align the
@@ -119,10 +120,10 @@ static int ipoib_cm_alloc_rx_skb(struct net_device *dev, int id,
DMA_FROM_DEVICE);
if (unlikely(ib_dma_mapping_error(priv->ca, mapping[0]))) {
dev_kfree_skb_any(skb);
- return -EIO;
+ return NULL;
}
- for (i = 0; i < IPOIB_CM_RX_SG - 1; i++) {
+ for (i = 0; i < frags; i++) {
struct page *page = alloc_page(GFP_ATOMIC);
if (!page)
@@ -136,7 +137,7 @@ static int ipoib_cm_alloc_rx_skb(struct net_device *dev, int id,
}
priv->cm.srq_ring[id].skb = skb;
- return 0;
+ return skb;
partial_error:
@@ -146,7 +147,7 @@ partial_error:
ib_dma_unmap_single(priv->ca, mapping[i + 1], PAGE_SIZE, DMA_FROM_DEVICE);
dev_kfree_skb_any(skb);
- return -ENOMEM;
+ return NULL;
}
static struct ib_qp *ipoib_cm_create_rx_qp(struct net_device *dev,
@@ -309,7 +310,7 @@ static int ipoib_cm_rx_handler(struct ib_cm_id *cm_id,
}
/* Adjust length of skb with fragments to match received data */
static void skb_put_frags(struct sk_buff *skb, unsigned int hdr_space,
- unsigned int length)
+ unsigned int length, struct sk_buff *toskb)
{
int i, num_frags;
unsigned int size;
@@ -326,7 +327,7 @@ static void skb_put_frags(struct sk_buff *skb, unsigned int hdr_space,
if (length == 0) {
/* don't need this page */
- __free_page(frag->page);
+ skb_fill_page_desc(toskb, i, frag->page, 0, PAGE_SIZE);
--skb_shinfo(skb)->nr_frags;
} else {
size = min(length, (unsigned) PAGE_SIZE);
@@ -344,10 +345,11 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
{
struct ipoib_dev_priv *priv = netdev_priv(dev);
unsigned int wr_id = wc->wr_id & ~IPOIB_CM_OP_SRQ;
- struct sk_buff *skb;
+ struct sk_buff *skb, *newskb;
struct ipoib_cm_rx *p;
unsigned long flags;
u64 mapping[IPOIB_CM_RX_SG];
+ int frags;
ipoib_dbg_data(priv, "cm recv completion: id %d, op %d, status: %d\n",
wr_id, wc->opcode, wc->status);
@@ -383,7 +385,11 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
}
}
- if (unlikely(ipoib_cm_alloc_rx_skb(dev, wr_id, mapping))) {
+ frags = PAGE_ALIGN(wc->byte_len - min(wc->byte_len,
+ (unsigned)IPOIB_CM_HEAD_SIZE)) / PAGE_SIZE;
+
+ newskb = ipoib_cm_alloc_rx_skb(dev, wr_id, frags, mapping);
+ if (unlikely(!newskb)) {
/*
* If we can't allocate a new RX buffer, dump
* this packet and reuse the old buffer.
@@ -393,13 +399,13 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
goto repost;
}
- ipoib_cm_dma_unmap_rx(priv, priv->cm.srq_ring[wr_id].mapping);
- memcpy(priv->cm.srq_ring[wr_id].mapping, mapping, sizeof mapping);
+ ipoib_cm_dma_unmap_rx(priv, frags, priv->cm.srq_ring[wr_id].mapping);
+ memcpy(priv->cm.srq_ring[wr_id].mapping, mapping, (frags + 1) * sizeof *mapping);
ipoib_dbg_data(priv, "received %d bytes, SLID 0x%04x\n",
wc->byte_len, wc->slid);
- skb_put_frags(skb, IPOIB_CM_HEAD_SIZE, wc->byte_len);
+ skb_put_frags(skb, IPOIB_CM_HEAD_SIZE, wc->byte_len, newskb);
skb->protocol = ((struct ipoib_header *) skb->data)->proto;
skb->mac.raw = skb->data;
@@ -1193,7 +1199,8 @@ int ipoib_cm_dev_init(struct net_device *dev)
priv->cm.rx_wr.num_sge = IPOIB_CM_RX_SG;
for (i = 0; i < ipoib_recvq_size; ++i) {
- if (ipoib_cm_alloc_rx_skb(dev, i, priv->cm.srq_ring[i].mapping)) {
+ if (!ipoib_cm_alloc_rx_skb(dev, i, IPOIB_CM_RX_SG - 1,
+ priv->cm.srq_ring[i].mapping)) {
ipoib_warn(priv, "failed to allocate receive buffer %d\n", i);
ipoib_cm_dev_cleanup(dev);
return -ENOMEM;
@@ -1228,7 +1235,8 @@ void ipoib_cm_dev_cleanup(struct net_device *dev)
return;
for (i = 0; i < ipoib_recvq_size; ++i)
if (priv->cm.srq_ring[i].skb) {
- ipoib_cm_dma_unmap_rx(priv, priv->cm.srq_ring[i].mapping);
+ ipoib_cm_dma_unmap_rx(priv, IPOIB_CM_RX_SG - 1,
+ priv->cm.srq_ring[i].mapping);
dev_kfree_skb_any(priv->cm.srq_ring[i].skb);
priv->cm.srq_ring[i].skb = NULL;
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 18d27fd..f9dbc6f 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -385,7 +385,7 @@ static void path_rec_completion(int status,
struct sk_buff *skb;
unsigned long flags;
- if (pathrec)
+ if (!status)
ipoib_dbg(priv, "PathRec LID 0x%04x for GID " IPOIB_GID_FMT "\n",
be16_to_cpu(pathrec->dlid), IPOIB_GID_ARG(pathrec->dgid));
else
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index b303ce6..bb2e3d5 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -527,11 +527,9 @@ void ipoib_mcast_join_task(struct work_struct *work)
{
struct ib_port_attr attr;
- if (!ib_query_port(priv->ca, priv->port, &attr)) {
- priv->local_lid = attr.lid;
- priv->local_rate = attr.active_speed *
- ib_width_enum_to_int(attr.active_width);
- } else
+ if (!ib_query_port(priv->ca, priv->port, &attr))
+ priv->local_lid = attr.lid;
+ else
ipoib_warn(priv, "ib_query_port failed\n");
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-02-16 23:48 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-02-16 23:48 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This adds IB multicast tracking, to allow userspace to use multicast
groups in a sane way, an ehca interrupt handling fixup, and a few
other minor things. I don't think there is anything major left, so we
should be good for 2.6.21-rc1 after this pull.
Dotan Barak (1):
IB/mthca: Allow the QP state transition RESET->RESET
Hoang-Nam Nguyen (4):
IB/ehca: Rework irq handler
IB/ehca: Fix race condition/locking issues in scaling code
IB/ehca: Allow en/disabling scaling code via module parameter
IB/ehca: Change query_port() to return LINK_UP instead UNKNOWN
Michael S. Tsirkin (1):
IPoIB: CM error handling thinko fix
Roland Dreier (5):
IB/mthca: Fix allocation of ICM chunks in coherent memory
IPoIB: Only allow root to change between datagram and connected mode
IB/core: Fix sparse warnings about shadowed declarations
IB/ipath: Make ipath_map_sg() static
IB/core: Set static rate in ib_init_ah_from_path()
Sean Hefty (2):
IB/sa: Track multicast join/leave requests
RDMA/cma: Add multicast communication support
Steve Wise (3):
RDMA/iwcm: iw_cm_id destruction race fixes
RDMA/cxgb3: Fail posts synchronously when in TERMINATE state
RDMA/cxgb3: Remove Open Grid Computing copyrights in iw_cxgb3 driver
drivers/infiniband/core/Makefile | 2 +-
drivers/infiniband/core/cma.c | 359 +++++++++--
drivers/infiniband/core/fmr_pool.c | 4 +-
drivers/infiniband/core/iwcm.c | 47 +-
drivers/infiniband/core/multicast.c | 837 ++++++++++++++++++++++++
drivers/infiniband/core/sa.h | 66 ++
drivers/infiniband/core/sa_query.c | 30 +-
drivers/infiniband/core/sysfs.c | 2 -
drivers/infiniband/core/ucma.c | 204 ++++++-
drivers/infiniband/hw/cxgb3/cxio_dbg.c | 1 -
drivers/infiniband/hw/cxgb3/cxio_hal.c | 1 -
drivers/infiniband/hw/cxgb3/cxio_hal.h | 1 -
drivers/infiniband/hw/cxgb3/cxio_resource.c | 1 -
drivers/infiniband/hw/cxgb3/cxio_resource.h | 1 -
drivers/infiniband/hw/cxgb3/cxio_wr.h | 1 -
drivers/infiniband/hw/cxgb3/iwch.c | 1 -
drivers/infiniband/hw/cxgb3/iwch.h | 1 -
drivers/infiniband/hw/cxgb3/iwch_cm.c | 1 -
drivers/infiniband/hw/cxgb3/iwch_cm.h | 1 -
drivers/infiniband/hw/cxgb3/iwch_cq.c | 1 -
drivers/infiniband/hw/cxgb3/iwch_ev.c | 1 -
drivers/infiniband/hw/cxgb3/iwch_mem.c | 1 -
drivers/infiniband/hw/cxgb3/iwch_provider.c | 1 -
drivers/infiniband/hw/cxgb3/iwch_provider.h | 1 -
drivers/infiniband/hw/cxgb3/iwch_qp.c | 3 +-
drivers/infiniband/hw/cxgb3/iwch_user.h | 1 -
drivers/infiniband/hw/ehca/Kconfig | 8 -
drivers/infiniband/hw/ehca/ehca_classes.h | 19 +-
drivers/infiniband/hw/ehca/ehca_eq.c | 1 +
drivers/infiniband/hw/ehca/ehca_hca.c | 3 +
drivers/infiniband/hw/ehca/ehca_irq.c | 307 +++++----
drivers/infiniband/hw/ehca/ehca_irq.h | 1 +
drivers/infiniband/hw/ehca/ehca_main.c | 32 +-
drivers/infiniband/hw/ehca/ipz_pt_fn.h | 11 +-
drivers/infiniband/hw/ipath/ipath_dma.c | 4 +-
drivers/infiniband/hw/mthca/mthca_memfree.c | 4 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 5 +
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 195 ++----
include/rdma/ib_addr.h | 6 +
include/rdma/ib_sa.h | 159 ++---
include/rdma/rdma_cm.h | 21 +-
include/rdma/rdma_cm_ib.h | 4 +-
include/rdma/rdma_user_cm.h | 13 +-
44 files changed, 1889 insertions(+), 478 deletions(-)
create mode 100644 drivers/infiniband/core/multicast.c
create mode 100644 drivers/infiniband/core/sa.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-02-13 0:18 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-02-13 0:18 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will add the new cxgb3 RDMA driver for Chelsio T3 NICs, as well
as IPoIB connected mode and various other smaller changes:
Ahmed S. Darwish (1):
IB/core: Use ARRAY_SIZE macro for mandatory_table
Akinobu Mita (1):
IB/ehca: Fix memleak on module unloading
David Howells (1):
IB/mthca: Work around gcc bug on sparc64
Michael S. Tsirkin (6):
IPoIB: Connected mode experimental support
IB/mthca: Fix reserved MTTs calculation on mem-free HCAs
IB/mthca: Give reserved MTTs a separate cache line
IB/mthca: Fix access to MTT and MPT tables on non-cache-coherent CPUs
IB/mthca: Merge MR and FMR space on 64-bit systems
IB/mthca: Always fill MTTs from CPU
Roland Dreier (1):
IB/mthca: Use correct structure size in call to memset()
Sean Hefty (2):
RDMA/cma: Increment port number after close to avoid re-use
IB: Remove redundant "_wq" from workqueue names
Steve Wise (1):
RDMA/cxgb3: Add driver for Chelsio T3 RNIC
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/Makefile | 1 +
drivers/infiniband/core/addr.c | 2 +-
drivers/infiniband/core/cma.c | 68 +-
drivers/infiniband/core/device.c | 3 +-
drivers/infiniband/hw/cxgb3/Kconfig | 27 +
drivers/infiniband/hw/cxgb3/Makefile | 12 +
drivers/infiniband/hw/cxgb3/cxio_dbg.c | 207 +++
drivers/infiniband/hw/cxgb3/cxio_hal.c | 1280 +++++++++++++++
drivers/infiniband/hw/cxgb3/cxio_hal.h | 201 +++
drivers/infiniband/hw/cxgb3/cxio_resource.c | 331 ++++
drivers/infiniband/hw/cxgb3/cxio_resource.h | 70 +
drivers/infiniband/hw/cxgb3/cxio_wr.h | 685 ++++++++
drivers/infiniband/hw/cxgb3/iwch.c | 189 +++
drivers/infiniband/hw/cxgb3/iwch.h | 177 ++
drivers/infiniband/hw/cxgb3/iwch_cm.c | 2081 ++++++++++++++++++++++++
drivers/infiniband/hw/cxgb3/iwch_cm.h | 223 +++
drivers/infiniband/hw/cxgb3/iwch_cq.c | 225 +++
drivers/infiniband/hw/cxgb3/iwch_ev.c | 231 +++
drivers/infiniband/hw/cxgb3/iwch_mem.c | 172 ++
drivers/infiniband/hw/cxgb3/iwch_provider.c | 1203 ++++++++++++++
drivers/infiniband/hw/cxgb3/iwch_provider.h | 367 +++++
drivers/infiniband/hw/cxgb3/iwch_qp.c | 1007 ++++++++++++
drivers/infiniband/hw/cxgb3/iwch_user.h | 67 +
drivers/infiniband/hw/cxgb3/tcb.h | 632 +++++++
drivers/infiniband/hw/ehca/ehca_irq.c | 2 +
drivers/infiniband/hw/mthca/mthca_cmd.c | 6 +-
drivers/infiniband/hw/mthca/mthca_dev.h | 2 +
drivers/infiniband/hw/mthca/mthca_main.c | 40 +-
drivers/infiniband/hw/mthca/mthca_memfree.c | 127 ++-
drivers/infiniband/hw/mthca/mthca_memfree.h | 9 +-
drivers/infiniband/hw/mthca/mthca_mr.c | 110 ++-
drivers/infiniband/hw/mthca/mthca_profile.c | 2 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 14 +-
drivers/infiniband/hw/mthca/mthca_provider.h | 1 +
drivers/infiniband/hw/mthca/mthca_qp.c | 2 +-
drivers/infiniband/hw/mthca/mthca_srq.c | 9 +-
drivers/infiniband/ulp/ipoib/Kconfig | 16 +-
drivers/infiniband/ulp/ipoib/Makefile | 1 +
drivers/infiniband/ulp/ipoib/ipoib.h | 215 +++
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 1237 ++++++++++++++
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 29 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 63 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 40 +-
drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 2 +
46 files changed, 11279 insertions(+), 114 deletions(-)
create mode 100644 drivers/infiniband/hw/cxgb3/Kconfig
create mode 100644 drivers/infiniband/hw/cxgb3/Makefile
create mode 100644 drivers/infiniband/hw/cxgb3/cxio_dbg.c
create mode 100644 drivers/infiniband/hw/cxgb3/cxio_hal.c
create mode 100644 drivers/infiniband/hw/cxgb3/cxio_hal.h
create mode 100644 drivers/infiniband/hw/cxgb3/cxio_resource.c
create mode 100644 drivers/infiniband/hw/cxgb3/cxio_resource.h
create mode 100644 drivers/infiniband/hw/cxgb3/cxio_wr.h
create mode 100644 drivers/infiniband/hw/cxgb3/iwch.c
create mode 100644 drivers/infiniband/hw/cxgb3/iwch.h
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_cm.c
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_cm.h
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_cq.c
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_ev.c
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_mem.c
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_provider.c
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_provider.h
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_qp.c
create mode 100644 drivers/infiniband/hw/cxgb3/iwch_user.h
create mode 100644 drivers/infiniband/hw/cxgb3/tcb.h
create mode 100644 drivers/infiniband/ulp/ipoib/ipoib_cm.c
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-02-05 10:15 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-02-05 10:15 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This is my first merge for 2.6.21:
Hoang-Nam Nguyen (2):
IB/ehca: Remove use of do_mmap()
IB/ehca: Remove obsolete prototypes
Ishai Rabinovitz (1):
IB/srp: Don't wait for response when QP is in error state.
Jason Gunthorpe (1):
IB: Make sure struct ib_user_mad.data is aligned
Michael S. Tsirkin (2):
IB: Include <linux/kref.h> explicitly in <rdma/ib_verbs.h>
IB: Return qp pointer as part of ib_wc
Steve Wise (1):
RDMA/addr: Handle ethernet neighbour updates during route resolution
drivers/infiniband/core/addr.c | 3 +-
drivers/infiniband/core/mad.c | 11 +-
drivers/infiniband/core/uverbs_cmd.c | 2 +-
drivers/infiniband/hw/amso1100/c2_cq.c | 2 +-
drivers/infiniband/hw/ehca/ehca_classes.h | 29 +--
drivers/infiniband/hw/ehca/ehca_cq.c | 65 ++----
drivers/infiniband/hw/ehca/ehca_iverbs.h | 8 -
drivers/infiniband/hw/ehca/ehca_main.c | 6 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 78 +-----
drivers/infiniband/hw/ehca/ehca_reqs.c | 2 +-
drivers/infiniband/hw/ehca/ehca_uverbs.c | 395 ++++++++++++-----------------
drivers/infiniband/hw/ipath/ipath_qp.c | 2 +-
drivers/infiniband/hw/ipath/ipath_rc.c | 8 +-
drivers/infiniband/hw/ipath/ipath_ruc.c | 8 +-
drivers/infiniband/hw/ipath/ipath_uc.c | 4 +-
drivers/infiniband/hw/ipath/ipath_ud.c | 8 +-
drivers/infiniband/hw/mthca/mthca_cmd.c | 2 +-
drivers/infiniband/hw/mthca/mthca_cq.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 7 +
drivers/infiniband/ulp/srp/ib_srp.h | 1 +
include/rdma/ib_user_mad.h | 2 +-
include/rdma/ib_verbs.h | 3 +-
22 files changed, 243 insertions(+), 405 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-01-23 15:10 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-01-23 15:10 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will pick up three small fixes:
Hoang-Nam Nguyen (2):
IB/ehca: Fix improper use of yield() with spinlock held
IB/ehca: Fix mismatched spin_unlock in irq handler
Ishai Rabinovitz (1):
IB/srp: Check match_strdup() return
drivers/infiniband/hw/ehca/ehca_cq.c | 5 ++++-
drivers/infiniband/hw/ehca/ehca_irq.c | 3 ++-
drivers/infiniband/ulp/srp/ib_srp.c | 20 ++++++++++++++++++++
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/hw/ehca/ehca_cq.c b/drivers/infiniband/hw/ehca/ehca_cq.c
index 93995b6..6074c89 100644
--- a/drivers/infiniband/hw/ehca/ehca_cq.c
+++ b/drivers/infiniband/hw/ehca/ehca_cq.c
@@ -344,8 +344,11 @@ int ehca_destroy_cq(struct ib_cq *cq)
unsigned long flags;
spin_lock_irqsave(&ehca_cq_idr_lock, flags);
- while (my_cq->nr_callbacks)
+ while (my_cq->nr_callbacks) {
+ spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
yield();
+ spin_lock_irqsave(&ehca_cq_idr_lock, flags);
+ }
idr_remove(&ehca_cq_idr, my_cq->token);
spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
diff --git a/drivers/infiniband/hw/ehca/ehca_irq.c b/drivers/infiniband/hw/ehca/ehca_irq.c
index e7209af..c069be8 100644
--- a/drivers/infiniband/hw/ehca/ehca_irq.c
+++ b/drivers/infiniband/hw/ehca/ehca_irq.c
@@ -440,7 +440,8 @@ void ehca_tasklet_eq(unsigned long data)
cq = idr_find(&ehca_cq_idr, token);
if (cq == NULL) {
- spin_unlock(&ehca_cq_idr_lock);
+ spin_unlock_irqrestore(&ehca_cq_idr_lock,
+ flags);
break;
}
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index cdecbf5..72611fd 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -1621,18 +1621,30 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
switch (token) {
case SRP_OPT_ID_EXT:
p = match_strdup(args);
+ if (!p) {
+ ret = -ENOMEM;
+ goto out;
+ }
target->id_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
kfree(p);
break;
case SRP_OPT_IOC_GUID:
p = match_strdup(args);
+ if (!p) {
+ ret = -ENOMEM;
+ goto out;
+ }
target->ioc_guid = cpu_to_be64(simple_strtoull(p, NULL, 16));
kfree(p);
break;
case SRP_OPT_DGID:
p = match_strdup(args);
+ if (!p) {
+ ret = -ENOMEM;
+ goto out;
+ }
if (strlen(p) != 32) {
printk(KERN_WARNING PFX "bad dest GID parameter '%s'\n", p);
kfree(p);
@@ -1656,6 +1668,10 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
case SRP_OPT_SERVICE_ID:
p = match_strdup(args);
+ if (!p) {
+ ret = -ENOMEM;
+ goto out;
+ }
target->service_id = cpu_to_be64(simple_strtoull(p, NULL, 16));
kfree(p);
break;
@@ -1693,6 +1709,10 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
case SRP_OPT_INITIATOR_EXT:
p = match_strdup(args);
+ if (!p) {
+ ret = -ENOMEM;
+ goto out;
+ }
target->initiator_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
kfree(p);
break;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-01-09 22:18 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-01-09 22:18 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This includes the small patches from my previous pull request that you
seem to have dropped, plus two more fixes:
Dotan Barak (1):
IB/mthca: Don't execute QUERY_QP firmware command for QP in RESET state
Erez Zilber (1):
IB/iser: Return error code when PDUs may not be sent
Hoang-Nam Nguyen (1):
IB/ehca: Use proper GFP_ flags for get_zeroed_page()
Jack Morgenstein (1):
IB/mthca: Fix PRM compliance problem in atomic-send completions
Michael S. Tsirkin (1):
IB/mthca: Fix off-by-one in FMR handling on memfree
Sean Hefty (2):
RDMA/ucma: Fix struct ucma_event leak when backlog is full
RDMA/ucma: Don't report events with invalid user context
Steve Wise (1):
RDMA/iwcm: iWARP connection timeouts shouldn't be reported as rejects
drivers/infiniband/core/cma.c | 17 ++++++++++++++---
drivers/infiniband/core/ucma.c | 11 +++++++++++
drivers/infiniband/hw/ehca/ehca_hca.c | 8 ++++----
drivers/infiniband/hw/ehca/ehca_irq.c | 2 +-
drivers/infiniband/hw/ehca/ehca_iverbs.h | 4 ++--
drivers/infiniband/hw/ehca/ehca_main.c | 10 +++++-----
drivers/infiniband/hw/ehca/ehca_mrmw.c | 4 ++--
drivers/infiniband/hw/ehca/ehca_qp.c | 4 ++--
drivers/infiniband/hw/mthca/mthca_cq.c | 8 ++++++--
drivers/infiniband/hw/mthca/mthca_memfree.c | 2 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 26 +++++++++++++++++---------
drivers/infiniband/ulp/iser/iscsi_iser.c | 4 ++--
drivers/infiniband/ulp/iser/iser_initiator.c | 26 ++++++++++++--------------
13 files changed, 79 insertions(+), 47 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 533193d..9e0ab04 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -1088,10 +1088,21 @@ static int cma_iw_handler(struct iw_cm_id *iw_id, struct iw_cm_event *iw_event)
*sin = iw_event->local_addr;
sin = (struct sockaddr_in *) &id_priv->id.route.addr.dst_addr;
*sin = iw_event->remote_addr;
- if (iw_event->status)
- event.event = RDMA_CM_EVENT_REJECTED;
- else
+ switch (iw_event->status) {
+ case 0:
event.event = RDMA_CM_EVENT_ESTABLISHED;
+ break;
+ case -ECONNRESET:
+ case -ECONNREFUSED:
+ event.event = RDMA_CM_EVENT_REJECTED;
+ break;
+ case -ETIMEDOUT:
+ event.event = RDMA_CM_EVENT_UNREACHABLE;
+ break;
+ default:
+ event.event = RDMA_CM_EVENT_CONNECT_ERROR;
+ break;
+ }
break;
case IW_CM_EVENT_ESTABLISHED:
event.event = RDMA_CM_EVENT_ESTABLISHED;
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
index 81a5cdc..e2e8d32 100644
--- a/drivers/infiniband/core/ucma.c
+++ b/drivers/infiniband/core/ucma.c
@@ -209,10 +209,21 @@ static int ucma_event_handler(struct rdma_cm_id *cm_id,
if (event->event == RDMA_CM_EVENT_CONNECT_REQUEST) {
if (!ctx->backlog) {
ret = -EDQUOT;
+ kfree(uevent);
goto out;
}
ctx->backlog--;
+ } else if (!ctx->uid) {
+ /*
+ * We ignore events for new connections until userspace has set
+ * their context. This can only happen if an error occurs on a
+ * new connection before the user accepts it. This is okay,
+ * since the accept will just fail later.
+ */
+ kfree(uevent);
+ goto out;
}
+
list_add_tail(&uevent->list, &ctx->file->event_list);
wake_up_interruptible(&ctx->file->poll_wait);
out:
diff --git a/drivers/infiniband/hw/ehca/ehca_hca.c b/drivers/infiniband/hw/ehca/ehca_hca.c
index e1b618c..b7be950 100644
--- a/drivers/infiniband/hw/ehca/ehca_hca.c
+++ b/drivers/infiniband/hw/ehca/ehca_hca.c
@@ -50,7 +50,7 @@ int ehca_query_device(struct ib_device *ibdev, struct ib_device_attr *props)
ib_device);
struct hipz_query_hca *rblock;
- rblock = ehca_alloc_fw_ctrlblock();
+ rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -110,7 +110,7 @@ int ehca_query_port(struct ib_device *ibdev,
ib_device);
struct hipz_query_port *rblock;
- rblock = ehca_alloc_fw_ctrlblock();
+ rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -179,7 +179,7 @@ int ehca_query_pkey(struct ib_device *ibdev, u8 port, u16 index, u16 *pkey)
return -EINVAL;
}
- rblock = ehca_alloc_fw_ctrlblock();
+ rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -212,7 +212,7 @@ int ehca_query_gid(struct ib_device *ibdev, u8 port,
return -EINVAL;
}
- rblock = ehca_alloc_fw_ctrlblock();
+ rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
diff --git a/drivers/infiniband/hw/ehca/ehca_irq.c b/drivers/infiniband/hw/ehca/ehca_irq.c
index c3ea746..e7209af 100644
--- a/drivers/infiniband/hw/ehca/ehca_irq.c
+++ b/drivers/infiniband/hw/ehca/ehca_irq.c
@@ -138,7 +138,7 @@ int ehca_error_data(struct ehca_shca *shca, void *data,
u64 *rblock;
unsigned long block_count;
- rblock = ehca_alloc_fw_ctrlblock();
+ rblock = ehca_alloc_fw_ctrlblock(GFP_ATOMIC);
if (!rblock) {
ehca_err(&shca->ib_device, "Cannot allocate rblock memory.");
ret = -ENOMEM;
diff --git a/drivers/infiniband/hw/ehca/ehca_iverbs.h b/drivers/infiniband/hw/ehca/ehca_iverbs.h
index 3720e30..cd7789f 100644
--- a/drivers/infiniband/hw/ehca/ehca_iverbs.h
+++ b/drivers/infiniband/hw/ehca/ehca_iverbs.h
@@ -180,10 +180,10 @@ int ehca_mmap_register(u64 physical,void **mapped,
int ehca_munmap(unsigned long addr, size_t len);
#ifdef CONFIG_PPC_64K_PAGES
-void *ehca_alloc_fw_ctrlblock(void);
+void *ehca_alloc_fw_ctrlblock(gfp_t flags);
void ehca_free_fw_ctrlblock(void *ptr);
#else
-#define ehca_alloc_fw_ctrlblock() ((void *) get_zeroed_page(GFP_KERNEL))
+#define ehca_alloc_fw_ctrlblock(flags) ((void *) get_zeroed_page(flags))
#define ehca_free_fw_ctrlblock(ptr) free_page((unsigned long)(ptr))
#endif
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index cc47e4c..6574fbb 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -106,9 +106,9 @@ static struct timer_list poll_eqs_timer;
#ifdef CONFIG_PPC_64K_PAGES
static struct kmem_cache *ctblk_cache = NULL;
-void *ehca_alloc_fw_ctrlblock(void)
+void *ehca_alloc_fw_ctrlblock(gfp_t flags)
{
- void *ret = kmem_cache_zalloc(ctblk_cache, GFP_KERNEL);
+ void *ret = kmem_cache_zalloc(ctblk_cache, flags);
if (!ret)
ehca_gen_err("Out of memory for ctblk");
return ret;
@@ -206,7 +206,7 @@ int ehca_sense_attributes(struct ehca_shca *shca)
u64 h_ret;
struct hipz_query_hca *rblock;
- rblock = ehca_alloc_fw_ctrlblock();
+ rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!rblock) {
ehca_gen_err("Cannot allocate rblock memory.");
return -ENOMEM;
@@ -258,7 +258,7 @@ static int init_node_guid(struct ehca_shca *shca)
int ret = 0;
struct hipz_query_hca *rblock;
- rblock = ehca_alloc_fw_ctrlblock();
+ rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -469,7 +469,7 @@ static ssize_t ehca_show_##name(struct device *dev, \
\
shca = dev->driver_data; \
\
- rblock = ehca_alloc_fw_ctrlblock(); \
+ rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL); \
if (!rblock) { \
dev_err(dev, "Can't allocate rblock memory."); \
return 0; \
diff --git a/drivers/infiniband/hw/ehca/ehca_mrmw.c b/drivers/infiniband/hw/ehca/ehca_mrmw.c
index 0a5e221..cfb362a 100644
--- a/drivers/infiniband/hw/ehca/ehca_mrmw.c
+++ b/drivers/infiniband/hw/ehca/ehca_mrmw.c
@@ -1013,7 +1013,7 @@ int ehca_reg_mr_rpages(struct ehca_shca *shca,
u32 i;
u64 *kpage;
- kpage = ehca_alloc_fw_ctrlblock();
+ kpage = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!kpage) {
ehca_err(&shca->ib_device, "kpage alloc failed");
ret = -ENOMEM;
@@ -1124,7 +1124,7 @@ inline int ehca_rereg_mr_rereg1(struct ehca_shca *shca,
ehca_mrmw_map_acl(acl, &hipz_acl);
ehca_mrmw_set_pgsize_hipz_acl(&hipz_acl);
- kpage = ehca_alloc_fw_ctrlblock();
+ kpage = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!kpage) {
ehca_err(&shca->ib_device, "kpage alloc failed");
ret = -ENOMEM;
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index c6c9cef..34b8555 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -807,7 +807,7 @@ static int internal_modify_qp(struct ib_qp *ibqp,
unsigned long spl_flags = 0;
/* do query_qp to obtain current attr values */
- mqpcb = ehca_alloc_fw_ctrlblock();
+ mqpcb = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!mqpcb) {
ehca_err(ibqp->device, "Could not get zeroed page for mqpcb "
"ehca_qp=%p qp_num=%x ", my_qp, ibqp->qp_num);
@@ -1273,7 +1273,7 @@ int ehca_query_qp(struct ib_qp *qp,
return -EINVAL;
}
- qpcb = ehca_alloc_fw_ctrlblock();
+ qpcb = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
if (!qpcb) {
ehca_err(qp->device,"Out of memory for qpcb "
"ehca_qp=%p qp_num=%x", my_qp, qp->qp_num);
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
index 283d50b..1159c8a 100644
--- a/drivers/infiniband/hw/mthca/mthca_cq.c
+++ b/drivers/infiniband/hw/mthca/mthca_cq.c
@@ -54,6 +54,10 @@ enum {
MTHCA_CQ_ENTRY_SIZE = 0x20
};
+enum {
+ MTHCA_ATOMIC_BYTE_LEN = 8
+};
+
/*
* Must be packed because start is 64 bits but only aligned to 32 bits.
*/
@@ -599,11 +603,11 @@ static inline int mthca_poll_one(struct mthca_dev *dev,
break;
case MTHCA_OPCODE_ATOMIC_CS:
entry->opcode = IB_WC_COMP_SWAP;
- entry->byte_len = be32_to_cpu(cqe->byte_cnt);
+ entry->byte_len = MTHCA_ATOMIC_BYTE_LEN;
break;
case MTHCA_OPCODE_ATOMIC_FA:
entry->opcode = IB_WC_FETCH_ADD;
- entry->byte_len = be32_to_cpu(cqe->byte_cnt);
+ entry->byte_len = MTHCA_ATOMIC_BYTE_LEN;
break;
case MTHCA_OPCODE_BIND_MW:
entry->opcode = IB_WC_BIND_MW;
diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniband/hw/mthca/mthca_memfree.c
index 15cc2f6..6b19645 100644
--- a/drivers/infiniband/hw/mthca/mthca_memfree.c
+++ b/drivers/infiniband/hw/mthca/mthca_memfree.c
@@ -232,7 +232,7 @@ void *mthca_table_find(struct mthca_icm_table *table, int obj)
list_for_each_entry(chunk, &icm->chunk_list, list) {
for (i = 0; i < chunk->npages; ++i) {
- if (chunk->mem[i].length >= offset) {
+ if (chunk->mem[i].length > offset) {
page = chunk->mem[i].page;
goto out;
}
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index d844a25..5f5214c 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -429,13 +429,18 @@ int mthca_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr_m
{
struct mthca_dev *dev = to_mdev(ibqp->device);
struct mthca_qp *qp = to_mqp(ibqp);
- int err;
- struct mthca_mailbox *mailbox;
+ int err = 0;
+ struct mthca_mailbox *mailbox = NULL;
struct mthca_qp_param *qp_param;
struct mthca_qp_context *context;
int mthca_state;
u8 status;
+ if (qp->state == IB_QPS_RESET) {
+ qp_attr->qp_state = IB_QPS_RESET;
+ goto done;
+ }
+
mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL);
if (IS_ERR(mailbox))
return PTR_ERR(mailbox);
@@ -454,7 +459,6 @@ int mthca_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr_m
mthca_state = be32_to_cpu(context->flags) >> 28;
qp_attr->qp_state = to_ib_qp_state(mthca_state);
- qp_attr->cur_qp_state = qp_attr->qp_state;
qp_attr->path_mtu = context->mtu_msgmax >> 5;
qp_attr->path_mig_state =
to_ib_mig_state((be32_to_cpu(context->flags) >> 11) & 0x3);
@@ -464,11 +468,6 @@ int mthca_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr_m
qp_attr->dest_qp_num = be32_to_cpu(context->remote_qpn) & 0xffffff;
qp_attr->qp_access_flags =
to_ib_qp_access_flags(be32_to_cpu(context->params2));
- qp_attr->cap.max_send_wr = qp->sq.max;
- qp_attr->cap.max_recv_wr = qp->rq.max;
- qp_attr->cap.max_send_sge = qp->sq.max_gs;
- qp_attr->cap.max_recv_sge = qp->rq.max_gs;
- qp_attr->cap.max_inline_data = qp->max_inline_data;
if (qp->transport == RC || qp->transport == UC) {
to_ib_ah_attr(dev, &qp_attr->ah_attr, &context->pri_path);
@@ -495,7 +494,16 @@ int mthca_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr_m
qp_attr->retry_cnt = (be32_to_cpu(context->params1) >> 16) & 0x7;
qp_attr->rnr_retry = context->pri_path.rnr_retry >> 5;
qp_attr->alt_timeout = context->alt_path.ackto >> 3;
- qp_init_attr->cap = qp_attr->cap;
+
+done:
+ qp_attr->cur_qp_state = qp_attr->qp_state;
+ qp_attr->cap.max_send_wr = qp->sq.max;
+ qp_attr->cap.max_recv_wr = qp->rq.max;
+ qp_attr->cap.max_send_sge = qp->sq.max_gs;
+ qp_attr->cap.max_recv_sge = qp->rq.max_gs;
+ qp_attr->cap.max_inline_data = qp->max_inline_data;
+
+ qp_init_attr->cap = qp_attr->cap;
out:
mthca_free_mailbox(dev, mailbox);
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
index 9b2041e..dd221ed 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -177,7 +177,7 @@ iscsi_iser_mtask_xmit(struct iscsi_conn *conn,
* - if yes, the mtask is recycled at iscsi_complete_pdu
* - if no, the mtask is recycled at iser_snd_completion
*/
- if (error && error != -EAGAIN)
+ if (error && error != -ENOBUFS)
iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
return error;
@@ -241,7 +241,7 @@ iscsi_iser_ctask_xmit(struct iscsi_conn *conn,
error = iscsi_iser_ctask_xmit_unsol_data(conn, ctask);
iscsi_iser_ctask_xmit_exit:
- if (error && error != -EAGAIN)
+ if (error && error != -ENOBUFS)
iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
return error;
}
diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
index e73c87b..0a7d1ab 100644
--- a/drivers/infiniband/ulp/iser/iser_initiator.c
+++ b/drivers/infiniband/ulp/iser/iser_initiator.c
@@ -304,18 +304,14 @@ int iser_conn_set_full_featured_mode(struct iscsi_conn *conn)
static int
iser_check_xmit(struct iscsi_conn *conn, void *task)
{
- int rc = 0;
struct iscsi_iser_conn *iser_conn = conn->dd_data;
- write_lock_bh(conn->recv_lock);
if (atomic_read(&iser_conn->ib_conn->post_send_buf_count) ==
ISER_QP_MAX_REQ_DTOS) {
- iser_dbg("%ld can't xmit task %p, suspending tx\n",jiffies,task);
- set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
- rc = -EAGAIN;
+ iser_dbg("%ld can't xmit task %p\n",jiffies,task);
+ return -ENOBUFS;
}
- write_unlock_bh(conn->recv_lock);
- return rc;
+ return 0;
}
@@ -340,7 +336,7 @@ int iser_send_command(struct iscsi_conn *conn,
return -EPERM;
}
if (iser_check_xmit(conn, ctask))
- return -EAGAIN;
+ return -ENOBUFS;
edtl = ntohl(hdr->data_length);
@@ -426,7 +422,7 @@ int iser_send_data_out(struct iscsi_conn *conn,
}
if (iser_check_xmit(conn, ctask))
- return -EAGAIN;
+ return -ENOBUFS;
itt = ntohl(hdr->itt);
data_seg_len = ntoh24(hdr->dlength);
@@ -498,7 +494,7 @@ int iser_send_control(struct iscsi_conn *conn,
}
if (iser_check_xmit(conn,mtask))
- return -EAGAIN;
+ return -ENOBUFS;
/* build the tx desc regd header and add it to the tx desc dto */
mdesc->type = ISCSI_TX_CONTROL;
@@ -605,6 +601,7 @@ void iser_snd_completion(struct iser_desc *tx_desc)
struct iscsi_iser_conn *iser_conn = ib_conn->iser_conn;
struct iscsi_conn *conn = iser_conn->iscsi_conn;
struct iscsi_mgmt_task *mtask;
+ int resume_tx = 0;
iser_dbg("Initiator, Data sent dto=0x%p\n", dto);
@@ -613,15 +610,16 @@ void iser_snd_completion(struct iser_desc *tx_desc)
if (tx_desc->type == ISCSI_TX_DATAOUT)
kmem_cache_free(ig.desc_cache, tx_desc);
+ if (atomic_read(&iser_conn->ib_conn->post_send_buf_count) ==
+ ISER_QP_MAX_REQ_DTOS)
+ resume_tx = 1;
+
atomic_dec(&ib_conn->post_send_buf_count);
- write_lock(conn->recv_lock);
- if (conn->suspend_tx) {
+ if (resume_tx) {
iser_dbg("%ld resuming tx\n",jiffies);
- clear_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
scsi_queue_work(conn->session->host, &conn->xmitwork);
}
- write_unlock(conn->recv_lock);
if (tx_desc->type == ISCSI_TX_CONTROL) {
/* this arithmetic is legal by libiscsi dd_data allocation */
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2007-01-08 4:29 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2007-01-08 4:29 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
A few small fixes here and there:
Erez Zilber (1):
IB/iser: Return error code when PDUs may not be sent
Jack Morgenstein (1):
IB/mthca: Fix PRM compliance problem in atomic-send completions
Michael S. Tsirkin (1):
IB/mthca: Fix off-by-one in FMR handling on memfree
Sean Hefty (2):
RDMA/ucma: Fix struct ucma_event leak when backlog is full
RDMA/ucma: Don't report events with invalid user context
Steve Wise (1):
RDMA/iwcm: iWARP connection timeouts shouldn't be reported as rejects
drivers/infiniband/core/cma.c | 17 ++++++++++++++---
drivers/infiniband/core/ucma.c | 11 +++++++++++
drivers/infiniband/hw/mthca/mthca_cq.c | 8 ++++++--
drivers/infiniband/hw/mthca/mthca_memfree.c | 2 +-
drivers/infiniband/ulp/iser/iscsi_iser.c | 4 ++--
drivers/infiniband/ulp/iser/iser_initiator.c | 26 ++++++++++++--------------
6 files changed, 46 insertions(+), 22 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 533193d..9e0ab04 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -1088,10 +1088,21 @@ static int cma_iw_handler(struct iw_cm_id *iw_id, struct iw_cm_event *iw_event)
*sin = iw_event->local_addr;
sin = (struct sockaddr_in *) &id_priv->id.route.addr.dst_addr;
*sin = iw_event->remote_addr;
- if (iw_event->status)
- event.event = RDMA_CM_EVENT_REJECTED;
- else
+ switch (iw_event->status) {
+ case 0:
event.event = RDMA_CM_EVENT_ESTABLISHED;
+ break;
+ case -ECONNRESET:
+ case -ECONNREFUSED:
+ event.event = RDMA_CM_EVENT_REJECTED;
+ break;
+ case -ETIMEDOUT:
+ event.event = RDMA_CM_EVENT_UNREACHABLE;
+ break;
+ default:
+ event.event = RDMA_CM_EVENT_CONNECT_ERROR;
+ break;
+ }
break;
case IW_CM_EVENT_ESTABLISHED:
event.event = RDMA_CM_EVENT_ESTABLISHED;
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
index 81a5cdc..e2e8d32 100644
--- a/drivers/infiniband/core/ucma.c
+++ b/drivers/infiniband/core/ucma.c
@@ -209,10 +209,21 @@ static int ucma_event_handler(struct rdma_cm_id *cm_id,
if (event->event == RDMA_CM_EVENT_CONNECT_REQUEST) {
if (!ctx->backlog) {
ret = -EDQUOT;
+ kfree(uevent);
goto out;
}
ctx->backlog--;
+ } else if (!ctx->uid) {
+ /*
+ * We ignore events for new connections until userspace has set
+ * their context. This can only happen if an error occurs on a
+ * new connection before the user accepts it. This is okay,
+ * since the accept will just fail later.
+ */
+ kfree(uevent);
+ goto out;
}
+
list_add_tail(&uevent->list, &ctx->file->event_list);
wake_up_interruptible(&ctx->file->poll_wait);
out:
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
index 283d50b..1159c8a 100644
--- a/drivers/infiniband/hw/mthca/mthca_cq.c
+++ b/drivers/infiniband/hw/mthca/mthca_cq.c
@@ -54,6 +54,10 @@ enum {
MTHCA_CQ_ENTRY_SIZE = 0x20
};
+enum {
+ MTHCA_ATOMIC_BYTE_LEN = 8
+};
+
/*
* Must be packed because start is 64 bits but only aligned to 32 bits.
*/
@@ -599,11 +603,11 @@ static inline int mthca_poll_one(struct mthca_dev *dev,
break;
case MTHCA_OPCODE_ATOMIC_CS:
entry->opcode = IB_WC_COMP_SWAP;
- entry->byte_len = be32_to_cpu(cqe->byte_cnt);
+ entry->byte_len = MTHCA_ATOMIC_BYTE_LEN;
break;
case MTHCA_OPCODE_ATOMIC_FA:
entry->opcode = IB_WC_FETCH_ADD;
- entry->byte_len = be32_to_cpu(cqe->byte_cnt);
+ entry->byte_len = MTHCA_ATOMIC_BYTE_LEN;
break;
case MTHCA_OPCODE_BIND_MW:
entry->opcode = IB_WC_BIND_MW;
diff --git a/drivers/infiniband/hw/mthca/mthca_memfree.c b/drivers/infiniband/hw/mthca/mthca_memfree.c
index 15cc2f6..6b19645 100644
--- a/drivers/infiniband/hw/mthca/mthca_memfree.c
+++ b/drivers/infiniband/hw/mthca/mthca_memfree.c
@@ -232,7 +232,7 @@ void *mthca_table_find(struct mthca_icm_table *table, int obj)
list_for_each_entry(chunk, &icm->chunk_list, list) {
for (i = 0; i < chunk->npages; ++i) {
- if (chunk->mem[i].length >= offset) {
+ if (chunk->mem[i].length > offset) {
page = chunk->mem[i].page;
goto out;
}
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
index 9b2041e..dd221ed 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -177,7 +177,7 @@ iscsi_iser_mtask_xmit(struct iscsi_conn *conn,
* - if yes, the mtask is recycled at iscsi_complete_pdu
* - if no, the mtask is recycled at iser_snd_completion
*/
- if (error && error != -EAGAIN)
+ if (error && error != -ENOBUFS)
iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
return error;
@@ -241,7 +241,7 @@ iscsi_iser_ctask_xmit(struct iscsi_conn *conn,
error = iscsi_iser_ctask_xmit_unsol_data(conn, ctask);
iscsi_iser_ctask_xmit_exit:
- if (error && error != -EAGAIN)
+ if (error && error != -ENOBUFS)
iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
return error;
}
diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
index e73c87b..0a7d1ab 100644
--- a/drivers/infiniband/ulp/iser/iser_initiator.c
+++ b/drivers/infiniband/ulp/iser/iser_initiator.c
@@ -304,18 +304,14 @@ int iser_conn_set_full_featured_mode(struct iscsi_conn *conn)
static int
iser_check_xmit(struct iscsi_conn *conn, void *task)
{
- int rc = 0;
struct iscsi_iser_conn *iser_conn = conn->dd_data;
- write_lock_bh(conn->recv_lock);
if (atomic_read(&iser_conn->ib_conn->post_send_buf_count) ==
ISER_QP_MAX_REQ_DTOS) {
- iser_dbg("%ld can't xmit task %p, suspending tx\n",jiffies,task);
- set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
- rc = -EAGAIN;
+ iser_dbg("%ld can't xmit task %p\n",jiffies,task);
+ return -ENOBUFS;
}
- write_unlock_bh(conn->recv_lock);
- return rc;
+ return 0;
}
@@ -340,7 +336,7 @@ int iser_send_command(struct iscsi_conn *conn,
return -EPERM;
}
if (iser_check_xmit(conn, ctask))
- return -EAGAIN;
+ return -ENOBUFS;
edtl = ntohl(hdr->data_length);
@@ -426,7 +422,7 @@ int iser_send_data_out(struct iscsi_conn *conn,
}
if (iser_check_xmit(conn, ctask))
- return -EAGAIN;
+ return -ENOBUFS;
itt = ntohl(hdr->itt);
data_seg_len = ntoh24(hdr->dlength);
@@ -498,7 +494,7 @@ int iser_send_control(struct iscsi_conn *conn,
}
if (iser_check_xmit(conn,mtask))
- return -EAGAIN;
+ return -ENOBUFS;
/* build the tx desc regd header and add it to the tx desc dto */
mdesc->type = ISCSI_TX_CONTROL;
@@ -605,6 +601,7 @@ void iser_snd_completion(struct iser_desc *tx_desc)
struct iscsi_iser_conn *iser_conn = ib_conn->iser_conn;
struct iscsi_conn *conn = iser_conn->iscsi_conn;
struct iscsi_mgmt_task *mtask;
+ int resume_tx = 0;
iser_dbg("Initiator, Data sent dto=0x%p\n", dto);
@@ -613,15 +610,16 @@ void iser_snd_completion(struct iser_desc *tx_desc)
if (tx_desc->type == ISCSI_TX_DATAOUT)
kmem_cache_free(ig.desc_cache, tx_desc);
+ if (atomic_read(&iser_conn->ib_conn->post_send_buf_count) ==
+ ISER_QP_MAX_REQ_DTOS)
+ resume_tx = 1;
+
atomic_dec(&ib_conn->post_send_buf_count);
- write_lock(conn->recv_lock);
- if (conn->suspend_tx) {
+ if (resume_tx) {
iser_dbg("%ld resuming tx\n",jiffies);
- clear_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
scsi_queue_work(conn->session->host, &conn->xmitwork);
}
- write_unlock(conn->recv_lock);
if (tx_desc->type == ISCSI_TX_CONTROL) {
/* this arithmetic is legal by libiscsi dd_data allocation */
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-12-16 4:57 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-12-16 4:57 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
A couple of fixes for semi-nasty bugs on 32-bit architectures, plus
one small mthca driver update:
Leonid Arsh (1):
IB/mthca: Add HCA profile module parameters
Roland Dreier (3):
IB: Fix ib_dma_alloc_coherent() wrapper
IB/srp: Fix FMR mapping for 32-bit kernels and addresses above 4G
IB/mthca: Use DEFINE_MUTEX() instead of mutex_init()
drivers/infiniband/hw/mthca/mthca_main.c | 113 +++++++++++++++++++++++++----
drivers/infiniband/ulp/srp/ib_srp.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.h | 2 +-
include/rdma/ib_verbs.h | 9 ++-
4 files changed, 107 insertions(+), 19 deletions(-)
diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c
index 0491ec7..44bc6cc 100644
--- a/drivers/infiniband/hw/mthca/mthca_main.c
+++ b/drivers/infiniband/hw/mthca/mthca_main.c
@@ -80,24 +80,61 @@ static int tune_pci = 0;
module_param(tune_pci, int, 0444);
MODULE_PARM_DESC(tune_pci, "increase PCI burst from the default set by BIOS if nonzero");
-struct mutex mthca_device_mutex;
+DEFINE_MUTEX(mthca_device_mutex);
+
+#define MTHCA_DEFAULT_NUM_QP (1 << 16)
+#define MTHCA_DEFAULT_RDB_PER_QP (1 << 2)
+#define MTHCA_DEFAULT_NUM_CQ (1 << 16)
+#define MTHCA_DEFAULT_NUM_MCG (1 << 13)
+#define MTHCA_DEFAULT_NUM_MPT (1 << 17)
+#define MTHCA_DEFAULT_NUM_MTT (1 << 20)
+#define MTHCA_DEFAULT_NUM_UDAV (1 << 15)
+#define MTHCA_DEFAULT_NUM_RESERVED_MTTS (1 << 18)
+#define MTHCA_DEFAULT_NUM_UARC_SIZE (1 << 18)
+
+static struct mthca_profile hca_profile = {
+ .num_qp = MTHCA_DEFAULT_NUM_QP,
+ .rdb_per_qp = MTHCA_DEFAULT_RDB_PER_QP,
+ .num_cq = MTHCA_DEFAULT_NUM_CQ,
+ .num_mcg = MTHCA_DEFAULT_NUM_MCG,
+ .num_mpt = MTHCA_DEFAULT_NUM_MPT,
+ .num_mtt = MTHCA_DEFAULT_NUM_MTT,
+ .num_udav = MTHCA_DEFAULT_NUM_UDAV, /* Tavor only */
+ .fmr_reserved_mtts = MTHCA_DEFAULT_NUM_RESERVED_MTTS, /* Tavor only */
+ .uarc_size = MTHCA_DEFAULT_NUM_UARC_SIZE, /* Arbel only */
+};
+
+module_param_named(num_qp, hca_profile.num_qp, int, 0444);
+MODULE_PARM_DESC(num_qp, "maximum number of QPs per HCA");
+
+module_param_named(rdb_per_qp, hca_profile.rdb_per_qp, int, 0444);
+MODULE_PARM_DESC(rdb_per_qp, "number of RDB buffers per QP");
+
+module_param_named(num_cq, hca_profile.num_cq, int, 0444);
+MODULE_PARM_DESC(num_cq, "maximum number of CQs per HCA");
+
+module_param_named(num_mcg, hca_profile.num_mcg, int, 0444);
+MODULE_PARM_DESC(num_mcg, "maximum number of multicast groups per HCA");
+
+module_param_named(num_mpt, hca_profile.num_mpt, int, 0444);
+MODULE_PARM_DESC(num_mpt,
+ "maximum number of memory protection table entries per HCA");
+
+module_param_named(num_mtt, hca_profile.num_mtt, int, 0444);
+MODULE_PARM_DESC(num_mtt,
+ "maximum number of memory translation table segments per HCA");
+
+module_param_named(num_udav, hca_profile.num_udav, int, 0444);
+MODULE_PARM_DESC(num_udav, "maximum number of UD address vectors per HCA");
+
+module_param_named(fmr_reserved_mtts, hca_profile.fmr_reserved_mtts, int, 0444);
+MODULE_PARM_DESC(fmr_reserved_mtts,
+ "number of memory translation table segments reserved for FMR");
static const char mthca_version[] __devinitdata =
DRV_NAME ": Mellanox InfiniBand HCA driver v"
DRV_VERSION " (" DRV_RELDATE ")\n";
-static struct mthca_profile default_profile = {
- .num_qp = 1 << 16,
- .rdb_per_qp = 4,
- .num_cq = 1 << 16,
- .num_mcg = 1 << 13,
- .num_mpt = 1 << 17,
- .num_mtt = 1 << 20,
- .num_udav = 1 << 15, /* Tavor only */
- .fmr_reserved_mtts = 1 << 18, /* Tavor only */
- .uarc_size = 1 << 18, /* Arbel only */
-};
-
static int mthca_tune_pci(struct mthca_dev *mdev)
{
int cap;
@@ -303,7 +340,7 @@ static int mthca_init_tavor(struct mthca_dev *mdev)
goto err_disable;
}
- profile = default_profile;
+ profile = hca_profile;
profile.num_uar = dev_lim.uar_size / PAGE_SIZE;
profile.uarc_size = 0;
if (mdev->mthca_flags & MTHCA_FLAG_SRQ)
@@ -621,7 +658,7 @@ static int mthca_init_arbel(struct mthca_dev *mdev)
goto err_stop_fw;
}
- profile = default_profile;
+ profile = hca_profile;
profile.num_uar = dev_lim.uar_size / PAGE_SIZE;
profile.num_udav = 0;
if (mdev->mthca_flags & MTHCA_FLAG_SRQ)
@@ -1278,11 +1315,55 @@ static struct pci_driver mthca_driver = {
.remove = __devexit_p(mthca_remove_one)
};
+static void __init __mthca_check_profile_val(const char *name, int *pval,
+ int pval_default)
+{
+ /* value must be positive and power of 2 */
+ int old_pval = *pval;
+
+ if (old_pval <= 0)
+ *pval = pval_default;
+ else
+ *pval = roundup_pow_of_two(old_pval);
+
+ if (old_pval != *pval) {
+ printk(KERN_WARNING PFX "Invalid value %d for %s in module parameter.\n",
+ old_pval, name);
+ printk(KERN_WARNING PFX "Corrected %s to %d.\n", name, *pval);
+ }
+}
+
+#define mthca_check_profile_val(name, default) \
+ __mthca_check_profile_val(#name, &hca_profile.name, default)
+
+static void __init mthca_validate_profile(void)
+{
+ mthca_check_profile_val(num_qp, MTHCA_DEFAULT_NUM_QP);
+ mthca_check_profile_val(rdb_per_qp, MTHCA_DEFAULT_RDB_PER_QP);
+ mthca_check_profile_val(num_cq, MTHCA_DEFAULT_NUM_CQ);
+ mthca_check_profile_val(num_mcg, MTHCA_DEFAULT_NUM_MCG);
+ mthca_check_profile_val(num_mpt, MTHCA_DEFAULT_NUM_MPT);
+ mthca_check_profile_val(num_mtt, MTHCA_DEFAULT_NUM_MTT);
+ mthca_check_profile_val(num_udav, MTHCA_DEFAULT_NUM_UDAV);
+ mthca_check_profile_val(fmr_reserved_mtts, MTHCA_DEFAULT_NUM_RESERVED_MTTS);
+
+ if (hca_profile.fmr_reserved_mtts >= hca_profile.num_mtt) {
+ printk(KERN_WARNING PFX "Invalid fmr_reserved_mtts module parameter %d.\n",
+ hca_profile.fmr_reserved_mtts);
+ printk(KERN_WARNING PFX "(Must be smaller than num_mtt %d)\n",
+ hca_profile.num_mtt);
+ hca_profile.fmr_reserved_mtts = hca_profile.num_mtt / 2;
+ printk(KERN_WARNING PFX "Corrected fmr_reserved_mtts to %d.\n",
+ hca_profile.fmr_reserved_mtts);
+ }
+}
+
static int __init mthca_init(void)
{
int ret;
- mutex_init(&mthca_device_mutex);
+ mthca_validate_profile();
+
ret = mthca_catas_init();
if (ret)
return ret;
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index e9b6a6f..cdecbf5 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -1898,7 +1898,7 @@ static void srp_add_one(struct ib_device *device)
*/
srp_dev->fmr_page_shift = max(9, ffs(dev_attr->page_size_cap) - 1);
srp_dev->fmr_page_size = 1 << srp_dev->fmr_page_shift;
- srp_dev->fmr_page_mask = ~((unsigned long) srp_dev->fmr_page_size - 1);
+ srp_dev->fmr_page_mask = ~((u64) srp_dev->fmr_page_size - 1);
INIT_LIST_HEAD(&srp_dev->dev_list);
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h
index 868a540..c217723 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.h
+++ b/drivers/infiniband/ulp/srp/ib_srp.h
@@ -87,7 +87,7 @@ struct srp_device {
struct ib_fmr_pool *fmr_pool;
int fmr_page_shift;
int fmr_page_size;
- unsigned long fmr_page_mask;
+ u64 fmr_page_mask;
};
struct srp_host {
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 3c2e105..0bfa332 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -1639,7 +1639,14 @@ static inline void *ib_dma_alloc_coherent(struct ib_device *dev,
{
if (dev->dma_ops)
return dev->dma_ops->alloc_coherent(dev, size, dma_handle, flag);
- return dma_alloc_coherent(dev->dma_device, size, dma_handle, flag);
+ else {
+ dma_addr_t handle;
+ void *ret;
+
+ ret = dma_alloc_coherent(dev->dma_device, size, &handle, flag);
+ *dma_handle = handle;
+ return ret;
+ }
}
/**
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-11-29 23:37 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-11-29 23:37 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This is the first batch of post-2.6.19 fixes:
Arne Redlich (1):
IB/srp: Increase supported CDB size
Dotan Barak (1):
RDMA/cm: Remove setting local write as part of QP access flags
Eric Sesterhenn (1):
IB: kmemdup() cleanup
Hoang-Nam Nguyen (1):
IB/ehca: Use WQE offset instead of WQE addr for pending work reqs
Jack Morgenstein (1):
IB/mthca: Fix initial SRQ logsize for mem-free HCAs
Krishna Kumar (11):
RDMA/cma: Optimize cma_bind_loopback() to check for empty list
RDMA/cma: Remove redundant check in cma_add_one
RDMA/addr: Use time_after_eq() instead of time_after() in queue_req()
RDMA/cma: Rewrite cma_req_handler() to encapsulate common code
RDMA/iwcm: Fix memory corruption bug in cm_work_handler()
RDMA/iwcm: Fix memory leak
RDMA/iwcm: Remove unnecessary initializations
RDMA/iwcm: Remove unnecessary function argument
RDMA/iwcm: Fix comment for iwcm_deref_id() to match code
RDMA/amso1100: Prevent deadlock in destroy QP
RDMA/addr: Fix some cancellation problems in process_req()
Michael S. Tsirkin (2):
IPoIB: Fix skb leak when freeing neighbour
IB/ucm: Fix deadlock in cleanup
Roland Dreier (5):
IB/mthca: Fix section mismatches
RDMA/amso1100: Fix section mismatches
IB/ipath: Fix typo in pma_counter_select subscript
IB: Convert kmem_cache_t -> struct kmem_cache
RDMA/addr: list_move() cleanups
Sean Hefty (1):
IB/cm: Fix automatic path migration support
Vu Pham (1):
IB/srp: Fix memory leak on reconnect
drivers/infiniband/core/addr.c | 19 ++--
drivers/infiniband/core/cm.c | 121 ++++++++++++++++++------
drivers/infiniband/core/cma.c | 49 ++++------
drivers/infiniband/core/iwcm.c | 43 +++++----
drivers/infiniband/core/mad.c | 2 +-
drivers/infiniband/core/ucm.c | 20 ++--
drivers/infiniband/hw/amso1100/c2.h | 2 +-
drivers/infiniband/hw/amso1100/c2_qp.c | 36 ++++++--
drivers/infiniband/hw/amso1100/c2_rnic.c | 4 +-
drivers/infiniband/hw/ehca/ehca_main.c | 4 +-
drivers/infiniband/hw/ehca/ehca_qp.c | 22 ++---
drivers/infiniband/hw/ehca/ipz_pt_fn.c | 13 +++
drivers/infiniband/hw/ehca/ipz_pt_fn.h | 15 +++
drivers/infiniband/hw/ipath/ipath_verbs.c | 2 +-
drivers/infiniband/hw/mthca/mthca_av.c | 3 +-
drivers/infiniband/hw/mthca/mthca_cq.c | 3 +-
drivers/infiniband/hw/mthca/mthca_eq.c | 21 ++--
drivers/infiniband/hw/mthca/mthca_mad.c | 2 +-
drivers/infiniband/hw/mthca/mthca_main.c | 29 +++---
drivers/infiniband/hw/mthca/mthca_mcg.c | 3 +-
drivers/infiniband/hw/mthca/mthca_mr.c | 5 +-
drivers/infiniband/hw/mthca/mthca_pd.c | 3 +-
drivers/infiniband/hw/mthca/mthca_provider.c | 3 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 3 +-
drivers/infiniband/hw/mthca/mthca_srq.c | 4 +-
drivers/infiniband/ulp/ipoib/ipoib.h | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 19 +++-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 2 +-
drivers/infiniband/ulp/iser/iscsi_iser.h | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 11 ++-
include/rdma/ib_cm.h | 16 +++-
include/rdma/ib_user_cm.h | 7 +-
32 files changed, 297 insertions(+), 193 deletions(-)
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index e11187e..7767a11 100644
--- a/drivers/infiniband/core/addr.c
+++ b/drivers/infiniband/core/addr.c
@@ -139,7 +139,7 @@ static void queue_req(struct addr_req *r
mutex_lock(&lock);
list_for_each_entry_reverse(temp_req, &req_list, list) {
- if (time_after(req->timeout, temp_req->timeout))
+ if (time_after_eq(req->timeout, temp_req->timeout))
break;
}
@@ -225,19 +225,17 @@ static void process_req(void *data)
mutex_lock(&lock);
list_for_each_entry_safe(req, temp_req, &req_list, list) {
- if (req->status) {
+ if (req->status == -ENODATA) {
src_in = (struct sockaddr_in *) &req->src_addr;
dst_in = (struct sockaddr_in *) &req->dst_addr;
req->status = addr_resolve_remote(src_in, dst_in,
req->addr);
+ if (req->status && time_after_eq(jiffies, req->timeout))
+ req->status = -ETIMEDOUT;
+ else if (req->status == -ENODATA)
+ continue;
}
- if (req->status && time_after(jiffies, req->timeout))
- req->status = -ETIMEDOUT;
- else if (req->status == -ENODATA)
- continue;
-
- list_del(&req->list);
- list_add_tail(&req->list, &done_list);
+ list_move_tail(&req->list, &done_list);
}
if (!list_empty(&req_list)) {
@@ -347,8 +345,7 @@ void rdma_addr_cancel(struct rdma_dev_ad
if (req->addr == addr) {
req->status = -ECANCELED;
req->timeout = jiffies;
- list_del(&req->list);
- list_add(&req->list, &req_list);
+ list_move(&req->list, &req_list);
set_timeout(req->timeout);
break;
}
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index 25b1018..e5dc453 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -147,12 +147,12 @@ struct cm_id_private {
__be32 rq_psn;
int timeout_ms;
enum ib_mtu path_mtu;
+ __be16 pkey;
u8 private_data_len;
u8 max_cm_retries;
u8 peer_to_peer;
u8 responder_resources;
u8 initiator_depth;
- u8 local_ack_timeout;
u8 retry_count;
u8 rnr_retry_count;
u8 service_timeout;
@@ -240,11 +240,10 @@ static void * cm_copy_private_data(const
if (!private_data || !private_data_len)
return NULL;
- data = kmalloc(private_data_len, GFP_KERNEL);
+ data = kmemdup(private_data, private_data_len, GFP_KERNEL);
if (!data)
return ERR_PTR(-ENOMEM);
- memcpy(data, private_data, private_data_len);
return data;
}
@@ -691,7 +690,7 @@ static void cm_enter_timewait(struct cm_
* timewait before notifying the user that we've exited timewait.
*/
cm_id_priv->id.state = IB_CM_TIMEWAIT;
- wait_time = cm_convert_to_ms(cm_id_priv->local_ack_timeout);
+ wait_time = cm_convert_to_ms(cm_id_priv->av.packet_life_time + 1);
queue_delayed_work(cm.wq, &cm_id_priv->timewait_info->work.work,
msecs_to_jiffies(wait_time));
cm_id_priv->timewait_info = NULL;
@@ -1010,6 +1009,7 @@ int ib_send_cm_req(struct ib_cm_id *cm_i
cm_id_priv->responder_resources = param->responder_resources;
cm_id_priv->retry_count = param->retry_count;
cm_id_priv->path_mtu = param->primary_path->mtu;
+ cm_id_priv->pkey = param->primary_path->pkey;
cm_id_priv->qp_type = param->qp_type;
ret = cm_alloc_msg(cm_id_priv, &cm_id_priv->msg);
@@ -1024,8 +1024,6 @@ int ib_send_cm_req(struct ib_cm_id *cm_i
cm_id_priv->local_qpn = cm_req_get_local_qpn(req_msg);
cm_id_priv->rq_psn = cm_req_get_starting_psn(req_msg);
- cm_id_priv->local_ack_timeout =
- cm_req_get_primary_local_ack_timeout(req_msg);
spin_lock_irqsave(&cm_id_priv->lock, flags);
ret = ib_post_send_mad(cm_id_priv->msg, NULL);
@@ -1410,9 +1408,8 @@ static int cm_req_handler(struct cm_work
cm_id_priv->initiator_depth = cm_req_get_resp_res(req_msg);
cm_id_priv->responder_resources = cm_req_get_init_depth(req_msg);
cm_id_priv->path_mtu = cm_req_get_path_mtu(req_msg);
+ cm_id_priv->pkey = req_msg->pkey;
cm_id_priv->sq_psn = cm_req_get_starting_psn(req_msg);
- cm_id_priv->local_ack_timeout =
- cm_req_get_primary_local_ack_timeout(req_msg);
cm_id_priv->retry_count = cm_req_get_retry_count(req_msg);
cm_id_priv->rnr_retry_count = cm_req_get_rnr_retry_count(req_msg);
cm_id_priv->qp_type = cm_req_get_qp_type(req_msg);
@@ -1716,7 +1713,7 @@ static int cm_establish_handler(struct c
unsigned long flags;
int ret;
- /* See comment in ib_cm_establish about lookup. */
+ /* See comment in cm_establish about lookup. */
cm_id_priv = cm_acquire_id(work->local_id, work->remote_id);
if (!cm_id_priv)
return -EINVAL;
@@ -2402,11 +2399,16 @@ int ib_send_cm_lap(struct ib_cm_id *cm_i
cm_id_priv = container_of(cm_id, struct cm_id_private, id);
spin_lock_irqsave(&cm_id_priv->lock, flags);
if (cm_id->state != IB_CM_ESTABLISHED ||
- cm_id->lap_state != IB_CM_LAP_IDLE) {
+ (cm_id->lap_state != IB_CM_LAP_UNINIT &&
+ cm_id->lap_state != IB_CM_LAP_IDLE)) {
ret = -EINVAL;
goto out;
}
+ ret = cm_init_av_by_path(alternate_path, &cm_id_priv->alt_av);
+ if (ret)
+ goto out;
+
ret = cm_alloc_msg(cm_id_priv, &msg);
if (ret)
goto out;
@@ -2431,7 +2433,8 @@ out: spin_unlock_irqrestore(&cm_id_priv-
}
EXPORT_SYMBOL(ib_send_cm_lap);
-static void cm_format_path_from_lap(struct ib_sa_path_rec *path,
+static void cm_format_path_from_lap(struct cm_id_private *cm_id_priv,
+ struct ib_sa_path_rec *path,
struct cm_lap_msg *lap_msg)
{
memset(path, 0, sizeof *path);
@@ -2443,10 +2446,10 @@ static void cm_format_path_from_lap(stru
path->hop_limit = lap_msg->alt_hop_limit;
path->traffic_class = cm_lap_get_traffic_class(lap_msg);
path->reversible = 1;
- /* pkey is same as in REQ */
+ path->pkey = cm_id_priv->pkey;
path->sl = cm_lap_get_sl(lap_msg);
path->mtu_selector = IB_SA_EQ;
- /* mtu is same as in REQ */
+ path->mtu = cm_id_priv->path_mtu;
path->rate_selector = IB_SA_EQ;
path->rate = cm_lap_get_packet_rate(lap_msg);
path->packet_life_time_selector = IB_SA_EQ;
@@ -2472,7 +2475,7 @@ static int cm_lap_handler(struct cm_work
param = &work->cm_event.param.lap_rcvd;
param->alternate_path = &work->path[0];
- cm_format_path_from_lap(param->alternate_path, lap_msg);
+ cm_format_path_from_lap(cm_id_priv, param->alternate_path, lap_msg);
work->cm_event.private_data = &lap_msg->private_data;
spin_lock_irqsave(&cm_id_priv->lock, flags);
@@ -2480,6 +2483,7 @@ static int cm_lap_handler(struct cm_work
goto unlock;
switch (cm_id_priv->id.lap_state) {
+ case IB_CM_LAP_UNINIT:
case IB_CM_LAP_IDLE:
break;
case IB_CM_MRA_LAP_SENT:
@@ -2502,6 +2506,10 @@ static int cm_lap_handler(struct cm_work
cm_id_priv->id.lap_state = IB_CM_LAP_RCVD;
cm_id_priv->tid = lap_msg->hdr.tid;
+ cm_init_av_for_response(work->port, work->mad_recv_wc->wc,
+ work->mad_recv_wc->recv_buf.grh,
+ &cm_id_priv->av);
+ cm_init_av_by_path(param->alternate_path, &cm_id_priv->alt_av);
ret = atomic_inc_and_test(&cm_id_priv->work_count);
if (!ret)
list_add_tail(&work->list, &cm_id_priv->work_list);
@@ -3040,7 +3048,7 @@ static void cm_work_handler(void *data)
cm_free_work(work);
}
-int ib_cm_establish(struct ib_cm_id *cm_id)
+static int cm_establish(struct ib_cm_id *cm_id)
{
struct cm_id_private *cm_id_priv;
struct cm_work *work;
@@ -3088,7 +3096,44 @@ int ib_cm_establish(struct ib_cm_id *cm_
out:
return ret;
}
-EXPORT_SYMBOL(ib_cm_establish);
+
+static int cm_migrate(struct ib_cm_id *cm_id)
+{
+ struct cm_id_private *cm_id_priv;
+ unsigned long flags;
+ int ret = 0;
+
+ cm_id_priv = container_of(cm_id, struct cm_id_private, id);
+ spin_lock_irqsave(&cm_id_priv->lock, flags);
+ if (cm_id->state == IB_CM_ESTABLISHED &&
+ (cm_id->lap_state == IB_CM_LAP_UNINIT ||
+ cm_id->lap_state == IB_CM_LAP_IDLE)) {
+ cm_id->lap_state = IB_CM_LAP_IDLE;
+ cm_id_priv->av = cm_id_priv->alt_av;
+ } else
+ ret = -EINVAL;
+ spin_unlock_irqrestore(&cm_id_priv->lock, flags);
+
+ return ret;
+}
+
+int ib_cm_notify(struct ib_cm_id *cm_id, enum ib_event_type event)
+{
+ int ret;
+
+ switch (event) {
+ case IB_EVENT_COMM_EST:
+ ret = cm_establish(cm_id);
+ break;
+ case IB_EVENT_PATH_MIG:
+ ret = cm_migrate(cm_id);
+ break;
+ default:
+ ret = -EINVAL;
+ }
+ return ret;
+}
+EXPORT_SYMBOL(ib_cm_notify);
static void cm_recv_handler(struct ib_mad_agent *mad_agent,
struct ib_mad_recv_wc *mad_recv_wc)
@@ -3173,8 +3218,7 @@ static int cm_init_qp_init_attr(struct c
case IB_CM_ESTABLISHED:
*qp_attr_mask = IB_QP_STATE | IB_QP_ACCESS_FLAGS |
IB_QP_PKEY_INDEX | IB_QP_PORT;
- qp_attr->qp_access_flags = IB_ACCESS_LOCAL_WRITE |
- IB_ACCESS_REMOTE_WRITE;
+ qp_attr->qp_access_flags = IB_ACCESS_REMOTE_WRITE;
if (cm_id_priv->responder_resources)
qp_attr->qp_access_flags |= IB_ACCESS_REMOTE_READ |
IB_ACCESS_REMOTE_ATOMIC;
@@ -3222,6 +3266,9 @@ static int cm_init_qp_rtr_attr(struct cm
if (cm_id_priv->alt_av.ah_attr.dlid) {
*qp_attr_mask |= IB_QP_ALT_PATH;
qp_attr->alt_port_num = cm_id_priv->alt_av.port->port_num;
+ qp_attr->alt_pkey_index = cm_id_priv->alt_av.pkey_index;
+ qp_attr->alt_timeout =
+ cm_id_priv->alt_av.packet_life_time + 1;
qp_attr->alt_ah_attr = cm_id_priv->alt_av.ah_attr;
}
ret = 0;
@@ -3248,19 +3295,31 @@ static int cm_init_qp_rts_attr(struct cm
case IB_CM_REP_SENT:
case IB_CM_MRA_REP_RCVD:
case IB_CM_ESTABLISHED:
- *qp_attr_mask = IB_QP_STATE | IB_QP_SQ_PSN;
- qp_attr->sq_psn = be32_to_cpu(cm_id_priv->sq_psn);
- if (cm_id_priv->qp_type == IB_QPT_RC) {
- *qp_attr_mask |= IB_QP_TIMEOUT | IB_QP_RETRY_CNT |
- IB_QP_RNR_RETRY |
- IB_QP_MAX_QP_RD_ATOMIC;
- qp_attr->timeout = cm_id_priv->local_ack_timeout;
- qp_attr->retry_cnt = cm_id_priv->retry_count;
- qp_attr->rnr_retry = cm_id_priv->rnr_retry_count;
- qp_attr->max_rd_atomic = cm_id_priv->initiator_depth;
- }
- if (cm_id_priv->alt_av.ah_attr.dlid) {
- *qp_attr_mask |= IB_QP_PATH_MIG_STATE;
+ if (cm_id_priv->id.lap_state == IB_CM_LAP_UNINIT) {
+ *qp_attr_mask = IB_QP_STATE | IB_QP_SQ_PSN;
+ qp_attr->sq_psn = be32_to_cpu(cm_id_priv->sq_psn);
+ if (cm_id_priv->qp_type == IB_QPT_RC) {
+ *qp_attr_mask |= IB_QP_TIMEOUT | IB_QP_RETRY_CNT |
+ IB_QP_RNR_RETRY |
+ IB_QP_MAX_QP_RD_ATOMIC;
+ qp_attr->timeout =
+ cm_id_priv->av.packet_life_time + 1;
+ qp_attr->retry_cnt = cm_id_priv->retry_count;
+ qp_attr->rnr_retry = cm_id_priv->rnr_retry_count;
+ qp_attr->max_rd_atomic =
+ cm_id_priv->initiator_depth;
+ }
+ if (cm_id_priv->alt_av.ah_attr.dlid) {
+ *qp_attr_mask |= IB_QP_PATH_MIG_STATE;
+ qp_attr->path_mig_state = IB_MIG_REARM;
+ }
+ } else {
+ *qp_attr_mask = IB_QP_ALT_PATH | IB_QP_PATH_MIG_STATE;
+ qp_attr->alt_port_num = cm_id_priv->alt_av.port->port_num;
+ qp_attr->alt_pkey_index = cm_id_priv->alt_av.pkey_index;
+ qp_attr->alt_timeout =
+ cm_id_priv->alt_av.packet_life_time + 1;
+ qp_attr->alt_ah_attr = cm_id_priv->alt_av.ah_attr;
qp_attr->path_mig_state = IB_MIG_REARM;
}
ret = 0;
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 845090b..cf48f26 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -344,7 +344,7 @@ static int cma_init_ib_qp(struct rdma_id
return ret;
qp_attr.qp_state = IB_QPS_INIT;
- qp_attr.qp_access_flags = IB_ACCESS_LOCAL_WRITE;
+ qp_attr.qp_access_flags = 0;
qp_attr.port_num = id_priv->id.port_num;
return ib_modify_qp(qp, &qp_attr, IB_QP_STATE | IB_QP_ACCESS_FLAGS |
IB_QP_PKEY_INDEX | IB_QP_PORT);
@@ -935,13 +935,8 @@ static int cma_req_handler(struct ib_cm_
mutex_lock(&lock);
ret = cma_acquire_dev(conn_id);
mutex_unlock(&lock);
- if (ret) {
- ret = -ENODEV;
- cma_exch(conn_id, CMA_DESTROYING);
- cma_release_remove(conn_id);
- rdma_destroy_id(&conn_id->id);
- goto out;
- }
+ if (ret)
+ goto release_conn_id;
conn_id->cm_id.ib = cm_id;
cm_id->context = conn_id;
@@ -951,13 +946,17 @@ static int cma_req_handler(struct ib_cm_
ret = cma_notify_user(conn_id, RDMA_CM_EVENT_CONNECT_REQUEST, 0,
ib_event->private_data + offset,
IB_CM_REQ_PRIVATE_DATA_SIZE - offset);
- if (ret) {
- /* Destroy the CM ID by returning a non-zero value. */
- conn_id->cm_id.ib = NULL;
- cma_exch(conn_id, CMA_DESTROYING);
- cma_release_remove(conn_id);
- rdma_destroy_id(&conn_id->id);
- }
+ if (!ret)
+ goto out;
+
+ /* Destroy the CM ID by returning a non-zero value. */
+ conn_id->cm_id.ib = NULL;
+
+release_conn_id:
+ cma_exch(conn_id, CMA_DESTROYING);
+ cma_release_remove(conn_id);
+ rdma_destroy_id(&conn_id->id);
+
out:
cma_release_remove(listen_id);
return ret;
@@ -1481,19 +1480,18 @@ static int cma_bind_loopback(struct rdma
u8 p;
mutex_lock(&lock);
+ if (list_empty(&dev_list)) {
+ ret = -ENODEV;
+ goto out;
+ }
list_for_each_entry(cma_dev, &dev_list, list)
for (p = 1; p <= cma_dev->device->phys_port_cnt; ++p)
- if (!ib_query_port (cma_dev->device, p, &port_attr) &&
+ if (!ib_query_port(cma_dev->device, p, &port_attr) &&
port_attr.state == IB_PORT_ACTIVE)
goto port_found;
- if (!list_empty(&dev_list)) {
- p = 1;
- cma_dev = list_entry(dev_list.next, struct cma_device, list);
- } else {
- ret = -ENODEV;
- goto out;
- }
+ p = 1;
+ cma_dev = list_entry(dev_list.next, struct cma_device, list);
port_found:
ret = ib_get_cached_gid(cma_dev->device, p, 0, &gid);
@@ -2123,8 +2121,6 @@ static void cma_add_one(struct ib_device
cma_dev->device = device;
cma_dev->node_guid = device->node_guid;
- if (!cma_dev->node_guid)
- goto err;
init_completion(&cma_dev->comp);
atomic_set(&cma_dev->refcount, 1);
@@ -2136,9 +2132,6 @@ static void cma_add_one(struct ib_device
list_for_each_entry(id_priv, &listen_any_list, list)
cma_listen_on_dev(id_priv, cma_dev);
mutex_unlock(&lock);
- return;
-err:
- kfree(cma_dev);
}
static int cma_remove_id_dev(struct rdma_id_private *id_priv)
diff --git a/drivers/infiniband/core/iwcm.c b/drivers/infiniband/core/iwcm.c
index c3fb304..cf797d7 100644
--- a/drivers/infiniband/core/iwcm.c
+++ b/drivers/infiniband/core/iwcm.c
@@ -80,7 +80,7 @@ struct iwcm_work {
* 1) in the event upcall, cm_event_handler(), for a listening cm_id. If
* the backlog is exceeded, then no more connection request events will
* be processed. cm_event_handler() returns -ENOMEM in this case. Its up
- * to the provider to reject the connectino request.
+ * to the provider to reject the connection request.
* 2) in the connection request workqueue handler, cm_conn_req_handler().
* If work elements cannot be allocated for the new connect request cm_id,
* then IWCM will call the provider reject method. This is ok since
@@ -131,26 +131,25 @@ static int alloc_work_entries(struct iwc
}
/*
- * Save private data from incoming connection requests in the
- * cm_id_priv so the low level driver doesn't have to. Adjust
+ * Save private data from incoming connection requests to
+ * iw_cm_event, so the low level driver doesn't have to. Adjust
* the event ptr to point to the local copy.
*/
-static int copy_private_data(struct iwcm_id_private *cm_id_priv,
- struct iw_cm_event *event)
+static int copy_private_data(struct iw_cm_event *event)
{
void *p;
- p = kmalloc(event->private_data_len, GFP_ATOMIC);
+ p = kmemdup(event->private_data, event->private_data_len, GFP_ATOMIC);
if (!p)
return -ENOMEM;
- memcpy(p, event->private_data, event->private_data_len);
event->private_data = p;
return 0;
}
/*
- * Release a reference on cm_id. If the last reference is being removed
- * and iw_destroy_cm_id is waiting, wake up the waiting thread.
+ * Release a reference on cm_id. If the last reference is being
+ * released, enable the waiting thread (in iw_destroy_cm_id) to
+ * get woken up, and return 1 if a thread is already waiting.
*/
static int iwcm_deref_id(struct iwcm_id_private *cm_id_priv)
{
@@ -243,7 +242,7 @@ static int iwcm_modify_qp_sqd(struct ib_
/*
* CM_ID <-- CLOSING
*
- * Block if a passive or active connection is currenlty being processed. Then
+ * Block if a passive or active connection is currently being processed. Then
* process the event as follows:
* - If we are ESTABLISHED, move to CLOSING and modify the QP state
* based on the abrupt flag
@@ -408,7 +407,7 @@ int iw_cm_listen(struct iw_cm_id *cm_id,
{
struct iwcm_id_private *cm_id_priv;
unsigned long flags;
- int ret = 0;
+ int ret;
cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
@@ -535,7 +534,7 @@ EXPORT_SYMBOL(iw_cm_accept);
int iw_cm_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param)
{
struct iwcm_id_private *cm_id_priv;
- int ret = 0;
+ int ret;
unsigned long flags;
struct ib_qp *qp;
@@ -620,7 +619,7 @@ static void cm_conn_req_handler(struct i
spin_lock_irqsave(&listen_id_priv->lock, flags);
if (listen_id_priv->state != IW_CM_STATE_LISTEN) {
spin_unlock_irqrestore(&listen_id_priv->lock, flags);
- return;
+ goto out;
}
spin_unlock_irqrestore(&listen_id_priv->lock, flags);
@@ -629,7 +628,7 @@ static void cm_conn_req_handler(struct i
listen_id_priv->id.context);
/* If the cm_id could not be created, ignore the request */
if (IS_ERR(cm_id))
- return;
+ goto out;
cm_id->provider_data = iw_event->provider_data;
cm_id->local_addr = iw_event->local_addr;
@@ -642,7 +641,7 @@ static void cm_conn_req_handler(struct i
if (ret) {
iw_cm_reject(cm_id, NULL, 0);
iw_destroy_cm_id(cm_id);
- return;
+ goto out;
}
/* Call the client CM handler */
@@ -654,6 +653,7 @@ static void cm_conn_req_handler(struct i
kfree(cm_id);
}
+out:
if (iw_event->private_data_len)
kfree(iw_event->private_data);
}
@@ -674,7 +674,7 @@ static int cm_conn_est_handler(struct iw
struct iw_cm_event *iw_event)
{
unsigned long flags;
- int ret = 0;
+ int ret;
spin_lock_irqsave(&cm_id_priv->lock, flags);
@@ -704,7 +704,7 @@ static int cm_conn_rep_handler(struct iw
struct iw_cm_event *iw_event)
{
unsigned long flags;
- int ret = 0;
+ int ret;
spin_lock_irqsave(&cm_id_priv->lock, flags);
/*
@@ -830,7 +830,8 @@ static int process_event(struct iwcm_id_
*/
static void cm_work_handler(void *arg)
{
- struct iwcm_work *work = arg, lwork;
+ struct iwcm_work *work = arg;
+ struct iw_cm_event levent;
struct iwcm_id_private *cm_id_priv = work->cm_id;
unsigned long flags;
int empty;
@@ -843,11 +844,11 @@ static void cm_work_handler(void *arg)
struct iwcm_work, list);
list_del_init(&work->list);
empty = list_empty(&cm_id_priv->work_list);
- lwork = *work;
+ levent = work->event;
put_work(work);
spin_unlock_irqrestore(&cm_id_priv->lock, flags);
- ret = process_event(cm_id_priv, &work->event);
+ ret = process_event(cm_id_priv, &levent);
if (ret) {
set_bit(IWCM_F_CALLBACK_DESTROY, &cm_id_priv->flags);
destroy_cm_id(&cm_id_priv->id);
@@ -906,7 +907,7 @@ static int cm_event_handler(struct iw_cm
if ((work->event.event == IW_CM_EVENT_CONNECT_REQUEST ||
work->event.event == IW_CM_EVENT_CONNECT_REPLY) &&
work->event.private_data_len) {
- ret = copy_private_data(cm_id_priv, &work->event);
+ ret = copy_private_data(&work->event);
if (ret) {
put_work(work);
goto out;
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index a72bcea..3f9c162 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -46,7 +46,7 @@ MODULE_DESCRIPTION("kernel IB MAD API");
MODULE_AUTHOR("Hal Rosenstock");
MODULE_AUTHOR("Sean Hefty");
-static kmem_cache_t *ib_mad_cache;
+static struct kmem_cache *ib_mad_cache;
static struct list_head ib_mad_port_list;
static u32 ib_mad_client_id = 0;
diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c
index ad4f4d5..f15220a 100644
--- a/drivers/infiniband/core/ucm.c
+++ b/drivers/infiniband/core/ucm.c
@@ -161,12 +161,14 @@ static void ib_ucm_cleanup_events(struct
struct ib_ucm_event, ctx_list);
list_del(&uevent->file_list);
list_del(&uevent->ctx_list);
+ mutex_unlock(&ctx->file->file_mutex);
/* clear incoming connections. */
if (ib_ucm_new_cm_id(uevent->resp.event))
ib_destroy_cm_id(uevent->cm_id);
kfree(uevent);
+ mutex_lock(&ctx->file->file_mutex);
}
mutex_unlock(&ctx->file->file_mutex);
}
@@ -328,20 +330,18 @@ static int ib_ucm_event_process(struct i
}
if (uvt->data_len) {
- uvt->data = kmalloc(uvt->data_len, GFP_KERNEL);
+ uvt->data = kmemdup(evt->private_data, uvt->data_len, GFP_KERNEL);
if (!uvt->data)
goto err1;
- memcpy(uvt->data, evt->private_data, uvt->data_len);
uvt->resp.present |= IB_UCM_PRES_DATA;
}
if (uvt->info_len) {
- uvt->info = kmalloc(uvt->info_len, GFP_KERNEL);
+ uvt->info = kmemdup(info, uvt->info_len, GFP_KERNEL);
if (!uvt->info)
goto err2;
- memcpy(uvt->info, info, uvt->info_len);
uvt->resp.present |= IB_UCM_PRES_INFO;
}
return 0;
@@ -685,11 +685,11 @@ out:
return result;
}
-static ssize_t ib_ucm_establish(struct ib_ucm_file *file,
- const char __user *inbuf,
- int in_len, int out_len)
+static ssize_t ib_ucm_notify(struct ib_ucm_file *file,
+ const char __user *inbuf,
+ int in_len, int out_len)
{
- struct ib_ucm_establish cmd;
+ struct ib_ucm_notify cmd;
struct ib_ucm_context *ctx;
int result;
@@ -700,7 +700,7 @@ static ssize_t ib_ucm_establish(struct i
if (IS_ERR(ctx))
return PTR_ERR(ctx);
- result = ib_cm_establish(ctx->cm_id);
+ result = ib_cm_notify(ctx->cm_id, (enum ib_event_type) cmd.event);
ib_ucm_ctx_put(ctx);
return result;
}
@@ -1107,7 +1107,7 @@ static ssize_t (*ucm_cmd_table[])(struct
[IB_USER_CM_CMD_DESTROY_ID] = ib_ucm_destroy_id,
[IB_USER_CM_CMD_ATTR_ID] = ib_ucm_attr_id,
[IB_USER_CM_CMD_LISTEN] = ib_ucm_listen,
- [IB_USER_CM_CMD_ESTABLISH] = ib_ucm_establish,
+ [IB_USER_CM_CMD_NOTIFY] = ib_ucm_notify,
[IB_USER_CM_CMD_SEND_REQ] = ib_ucm_send_req,
[IB_USER_CM_CMD_SEND_REP] = ib_ucm_send_rep,
[IB_USER_CM_CMD_SEND_RTU] = ib_ucm_send_rtu,
diff --git a/drivers/infiniband/hw/amso1100/c2.h b/drivers/infiniband/hw/amso1100/c2.h
index 1b17dcd..04a9db5 100644
--- a/drivers/infiniband/hw/amso1100/c2.h
+++ b/drivers/infiniband/hw/amso1100/c2.h
@@ -302,7 +302,7 @@ struct c2_dev {
unsigned long pa; /* PA device memory */
void **qptr_array;
- kmem_cache_t *host_msg_cache;
+ struct kmem_cache *host_msg_cache;
struct list_head cca_link; /* adapter list */
struct list_head eh_wakeup_list; /* event wakeup list */
diff --git a/drivers/infiniband/hw/amso1100/c2_qp.c b/drivers/infiniband/hw/amso1100/c2_qp.c
index 5bcf697..179d005 100644
--- a/drivers/infiniband/hw/amso1100/c2_qp.c
+++ b/drivers/infiniband/hw/amso1100/c2_qp.c
@@ -564,6 +564,32 @@ int c2_alloc_qp(struct c2_dev *c2dev,
return err;
}
+static inline void c2_lock_cqs(struct c2_cq *send_cq, struct c2_cq *recv_cq)
+{
+ if (send_cq == recv_cq)
+ spin_lock_irq(&send_cq->lock);
+ else if (send_cq > recv_cq) {
+ spin_lock_irq(&send_cq->lock);
+ spin_lock_nested(&recv_cq->lock, SINGLE_DEPTH_NESTING);
+ } else {
+ spin_lock_irq(&recv_cq->lock);
+ spin_lock_nested(&send_cq->lock, SINGLE_DEPTH_NESTING);
+ }
+}
+
+static inline void c2_unlock_cqs(struct c2_cq *send_cq, struct c2_cq *recv_cq)
+{
+ if (send_cq == recv_cq)
+ spin_unlock_irq(&send_cq->lock);
+ else if (send_cq > recv_cq) {
+ spin_unlock(&recv_cq->lock);
+ spin_unlock_irq(&send_cq->lock);
+ } else {
+ spin_unlock(&send_cq->lock);
+ spin_unlock_irq(&recv_cq->lock);
+ }
+}
+
void c2_free_qp(struct c2_dev *c2dev, struct c2_qp *qp)
{
struct c2_cq *send_cq;
@@ -576,15 +602,9 @@ void c2_free_qp(struct c2_dev *c2dev, st
* Lock CQs here, so that CQ polling code can do QP lookup
* without taking a lock.
*/
- spin_lock_irq(&send_cq->lock);
- if (send_cq != recv_cq)
- spin_lock(&recv_cq->lock);
-
+ c2_lock_cqs(send_cq, recv_cq);
c2_free_qpn(c2dev, qp->qpn);
-
- if (send_cq != recv_cq)
- spin_unlock(&recv_cq->lock);
- spin_unlock_irq(&send_cq->lock);
+ c2_unlock_cqs(send_cq, recv_cq);
/*
* Destory qp in the rnic...
diff --git a/drivers/infiniband/hw/amso1100/c2_rnic.c b/drivers/infiniband/hw/amso1100/c2_rnic.c
index 623dc95..1687c51 100644
--- a/drivers/infiniband/hw/amso1100/c2_rnic.c
+++ b/drivers/infiniband/hw/amso1100/c2_rnic.c
@@ -441,7 +441,7 @@ static int c2_rnic_close(struct c2_dev *
* involves initalizing the various limits and resouce pools that
* comprise the RNIC instance.
*/
-int c2_rnic_init(struct c2_dev *c2dev)
+int __devinit c2_rnic_init(struct c2_dev *c2dev)
{
int err;
u32 qsize, msgsize;
@@ -611,7 +611,7 @@ int c2_rnic_init(struct c2_dev *c2dev)
/*
* Called by c2_remove to cleanup the RNIC resources.
*/
-void c2_rnic_term(struct c2_dev *c2dev)
+void __devexit c2_rnic_term(struct c2_dev *c2dev)
{
/* Close the open adapter instance */
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index 01f5aa9..3d1c1c5 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -52,7 +52,7 @@ #include "hcp_if.h"
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Christoph Raisch <raisch@de.ibm.com>");
MODULE_DESCRIPTION("IBM eServer HCA InfiniBand Device Driver");
-MODULE_VERSION("SVNEHCA_0018");
+MODULE_VERSION("SVNEHCA_0019");
int ehca_open_aqp1 = 0;
int ehca_debug_level = 0;
@@ -790,7 +790,7 @@ int __init ehca_module_init(void)
int ret;
printk(KERN_INFO "eHCA Infiniband Device Driver "
- "(Rel.: SVNEHCA_0018)\n");
+ "(Rel.: SVNEHCA_0019)\n");
idr_init(&ehca_qp_idr);
idr_init(&ehca_cq_idr);
spin_lock_init(&ehca_qp_idr_lock);
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index cf3e50e..8682aa5 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -732,8 +732,7 @@ static int prepare_sqe_rts(struct ehca_q
u64 h_ret;
struct ipz_queue *squeue;
void *bad_send_wqe_p, *bad_send_wqe_v;
- void *squeue_start_p, *squeue_end_p;
- void *squeue_start_v, *squeue_end_v;
+ u64 q_ofs;
struct ehca_wqe *wqe;
int qp_num = my_qp->ib_qp.qp_num;
@@ -755,26 +754,23 @@ static int prepare_sqe_rts(struct ehca_q
if (ehca_debug_level)
ehca_dmp(bad_send_wqe_v, 32, "qp_num=%x bad_wqe", qp_num);
squeue = &my_qp->ipz_squeue;
- squeue_start_p = (void*)virt_to_abs(ipz_qeit_calc(squeue, 0L));
- squeue_end_p = squeue_start_p+squeue->queue_length;
- squeue_start_v = abs_to_virt((u64)squeue_start_p);
- squeue_end_v = abs_to_virt((u64)squeue_end_p);
- ehca_dbg(&shca->ib_device, "qp_num=%x squeue_start_v=%p squeue_end_v=%p",
- qp_num, squeue_start_v, squeue_end_v);
+ if (ipz_queue_abs_to_offset(squeue, (u64)bad_send_wqe_p, &q_ofs)) {
+ ehca_err(&shca->ib_device, "failed to get wqe offset qp_num=%x"
+ " bad_send_wqe_p=%p", qp_num, bad_send_wqe_p);
+ return -EFAULT;
+ }
/* loop sets wqe's purge bit */
- wqe = (struct ehca_wqe*)bad_send_wqe_v;
+ wqe = (struct ehca_wqe*)ipz_qeit_calc(squeue, q_ofs);
*bad_wqe_cnt = 0;
while (wqe->optype != 0xff && wqe->wqef != 0xff) {
if (ehca_debug_level)
ehca_dmp(wqe, 32, "qp_num=%x wqe", qp_num);
wqe->nr_of_data_seg = 0; /* suppress data access */
wqe->wqef = WQEF_PURGE; /* WQE to be purged */
- wqe = (struct ehca_wqe*)((u8*)wqe+squeue->qe_size);
+ q_ofs = ipz_queue_advance_offset(squeue, q_ofs);
+ wqe = (struct ehca_wqe*)ipz_qeit_calc(squeue, q_ofs);
*bad_wqe_cnt = (*bad_wqe_cnt)+1;
- if ((void*)wqe >= squeue_end_v) {
- wqe = squeue_start_v;
- }
}
/*
* bad wqe will be reprocessed and ignored when pol_cq() is called,
diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.c b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
index e028ff1..bf7a400 100644
--- a/drivers/infiniband/hw/ehca/ipz_pt_fn.c
+++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.c
@@ -70,6 +70,19 @@ void *ipz_qeit_eq_get_inc(struct ipz_que
return ret;
}
+int ipz_queue_abs_to_offset(struct ipz_queue *queue, u64 addr, u64 *q_offset)
+{
+ int i;
+ for (i = 0; i < queue->queue_length / queue->pagesize; i++) {
+ u64 page = (u64)virt_to_abs(queue->queue_pages[i]);
+ if (addr >= page && addr < page + queue->pagesize) {
+ *q_offset = addr - page + i * queue->pagesize;
+ return 0;
+ }
+ }
+ return -EINVAL;
+}
+
int ipz_queue_ctor(struct ipz_queue *queue,
const u32 nr_of_pages,
const u32 pagesize, const u32 qe_size, const u32 nr_of_sg)
diff --git a/drivers/infiniband/hw/ehca/ipz_pt_fn.h b/drivers/infiniband/hw/ehca/ipz_pt_fn.h
index 2f13509..dc3bda2 100644
--- a/drivers/infiniband/hw/ehca/ipz_pt_fn.h
+++ b/drivers/infiniband/hw/ehca/ipz_pt_fn.h
@@ -150,6 +150,21 @@ static inline void *ipz_qeit_reset(struc
return ipz_qeit_get(queue);
}
+/*
+ * return the q_offset corresponding to an absolute address
+ */
+int ipz_queue_abs_to_offset(struct ipz_queue *queue, u64 addr, u64 *q_offset);
+
+/*
+ * return the next queue offset. don't modify the queue.
+ */
+static inline u64 ipz_queue_advance_offset(struct ipz_queue *queue, u64 offset)
+{
+ offset += queue->qe_size;
+ if (offset >= queue->queue_length) offset = 0;
+ return offset;
+}
+
/* struct generic page table */
struct ipz_pt {
u64 entries[EHCA_PT_ENTRIES];
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c
index a545610..acdee33 100644
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c
@@ -1487,7 +1487,7 @@ int ipath_register_ib_device(struct ipat
idev->pma_counter_select[1] = IB_PMA_PORT_RCV_DATA;
idev->pma_counter_select[2] = IB_PMA_PORT_XMIT_PKTS;
idev->pma_counter_select[3] = IB_PMA_PORT_RCV_PKTS;
- idev->pma_counter_select[5] = IB_PMA_PORT_XMIT_WAIT;
+ idev->pma_counter_select[4] = IB_PMA_PORT_XMIT_WAIT;
idev->link_width_enabled = 3; /* 1x or 4x */
/* Snapshot current HW counters to "clear" them. */
diff --git a/drivers/infiniband/hw/mthca/mthca_av.c b/drivers/infiniband/hw/mthca/mthca_av.c
index 6959945..57cdc1b 100644
--- a/drivers/infiniband/hw/mthca/mthca_av.c
+++ b/drivers/infiniband/hw/mthca/mthca_av.c
@@ -33,7 +33,6 @@
* $Id: mthca_av.c 1349 2004-12-16 21:09:43Z roland $
*/
-#include <linux/init.h>
#include <linux/string.h>
#include <linux/slab.h>
@@ -323,7 +322,7 @@ int mthca_ah_query(struct ib_ah *ibah, s
return 0;
}
-int __devinit mthca_init_av_table(struct mthca_dev *dev)
+int mthca_init_av_table(struct mthca_dev *dev)
{
int err;
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
index 149b369..283d50b 100644
--- a/drivers/infiniband/hw/mthca/mthca_cq.c
+++ b/drivers/infiniband/hw/mthca/mthca_cq.c
@@ -36,7 +36,6 @@
* $Id: mthca_cq.c 1369 2004-12-20 16:17:07Z roland $
*/
-#include <linux/init.h>
#include <linux/hardirq.h>
#include <asm/io.h>
@@ -970,7 +969,7 @@ void mthca_free_cq(struct mthca_dev *dev
mthca_free_mailbox(dev, mailbox);
}
-int __devinit mthca_init_cq_table(struct mthca_dev *dev)
+int mthca_init_cq_table(struct mthca_dev *dev)
{
int err;
diff --git a/drivers/infiniband/hw/mthca/mthca_eq.c b/drivers/infiniband/hw/mthca/mthca_eq.c
index e284e06..8ec9fa1 100644
--- a/drivers/infiniband/hw/mthca/mthca_eq.c
+++ b/drivers/infiniband/hw/mthca/mthca_eq.c
@@ -33,7 +33,6 @@
* $Id: mthca_eq.c 1382 2004-12-24 02:21:02Z roland $
*/
-#include <linux/init.h>
#include <linux/errno.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
@@ -479,10 +478,10 @@ static irqreturn_t mthca_arbel_msi_x_int
return IRQ_HANDLED;
}
-static int __devinit mthca_create_eq(struct mthca_dev *dev,
- int nent,
- u8 intr,
- struct mthca_eq *eq)
+static int mthca_create_eq(struct mthca_dev *dev,
+ int nent,
+ u8 intr,
+ struct mthca_eq *eq)
{
int npages;
u64 *dma_list = NULL;
@@ -664,9 +663,9 @@ static void mthca_free_irqs(struct mthca
dev->eq_table.eq + i);
}
-static int __devinit mthca_map_reg(struct mthca_dev *dev,
- unsigned long offset, unsigned long size,
- void __iomem **map)
+static int mthca_map_reg(struct mthca_dev *dev,
+ unsigned long offset, unsigned long size,
+ void __iomem **map)
{
unsigned long base = pci_resource_start(dev->pdev, 0);
@@ -691,7 +690,7 @@ static void mthca_unmap_reg(struct mthca
iounmap(map);
}
-static int __devinit mthca_map_eq_regs(struct mthca_dev *dev)
+static int mthca_map_eq_regs(struct mthca_dev *dev)
{
if (mthca_is_memfree(dev)) {
/*
@@ -781,7 +780,7 @@ static void mthca_unmap_eq_regs(struct m
}
}
-int __devinit mthca_map_eq_icm(struct mthca_dev *dev, u64 icm_virt)
+int mthca_map_eq_icm(struct mthca_dev *dev, u64 icm_virt)
{
int ret;
u8 status;
@@ -825,7 +824,7 @@ void mthca_unmap_eq_icm(struct mthca_dev
__free_page(dev->eq_table.icm_page);
}
-int __devinit mthca_init_eq_table(struct mthca_dev *dev)
+int mthca_init_eq_table(struct mthca_dev *dev)
{
int err;
u8 status;
diff --git a/drivers/infiniband/hw/mthca/mthca_mad.c b/drivers/infiniband/hw/mthca/mthca_mad.c
index 45e106f..acfa41d 100644
--- a/drivers/infiniband/hw/mthca/mthca_mad.c
+++ b/drivers/infiniband/hw/mthca/mthca_mad.c
@@ -317,7 +317,7 @@ err:
return ret;
}
-void __devexit mthca_free_agents(struct mthca_dev *dev)
+void mthca_free_agents(struct mthca_dev *dev)
{
struct ib_mad_agent *agent;
int p, q;
diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c
index 47ea021..0491ec7 100644
--- a/drivers/infiniband/hw/mthca/mthca_main.c
+++ b/drivers/infiniband/hw/mthca/mthca_main.c
@@ -98,7 +98,7 @@ static struct mthca_profile default_prof
.uarc_size = 1 << 18, /* Arbel only */
};
-static int __devinit mthca_tune_pci(struct mthca_dev *mdev)
+static int mthca_tune_pci(struct mthca_dev *mdev)
{
int cap;
u16 val;
@@ -143,7 +143,7 @@ static int __devinit mthca_tune_pci(stru
return 0;
}
-static int __devinit mthca_dev_lim(struct mthca_dev *mdev, struct mthca_dev_lim *dev_lim)
+static int mthca_dev_lim(struct mthca_dev *mdev, struct mthca_dev_lim *dev_lim)
{
int err;
u8 status;
@@ -255,7 +255,7 @@ static int __devinit mthca_dev_lim(struc
return 0;
}
-static int __devinit mthca_init_tavor(struct mthca_dev *mdev)
+static int mthca_init_tavor(struct mthca_dev *mdev)
{
u8 status;
int err;
@@ -333,7 +333,7 @@ err_disable:
return err;
}
-static int __devinit mthca_load_fw(struct mthca_dev *mdev)
+static int mthca_load_fw(struct mthca_dev *mdev)
{
u8 status;
int err;
@@ -379,10 +379,10 @@ err_free:
return err;
}
-static int __devinit mthca_init_icm(struct mthca_dev *mdev,
- struct mthca_dev_lim *dev_lim,
- struct mthca_init_hca_param *init_hca,
- u64 icm_size)
+static int mthca_init_icm(struct mthca_dev *mdev,
+ struct mthca_dev_lim *dev_lim,
+ struct mthca_init_hca_param *init_hca,
+ u64 icm_size)
{
u64 aux_pages;
u8 status;
@@ -575,7 +575,7 @@ static void mthca_free_icms(struct mthca
mthca_free_icm(mdev, mdev->fw.arbel.aux_icm);
}
-static int __devinit mthca_init_arbel(struct mthca_dev *mdev)
+static int mthca_init_arbel(struct mthca_dev *mdev)
{
struct mthca_dev_lim dev_lim;
struct mthca_profile profile;
@@ -683,7 +683,7 @@ static void mthca_close_hca(struct mthca
mthca_SYS_DIS(mdev, &status);
}
-static int __devinit mthca_init_hca(struct mthca_dev *mdev)
+static int mthca_init_hca(struct mthca_dev *mdev)
{
u8 status;
int err;
@@ -720,7 +720,7 @@ err_close:
return err;
}
-static int __devinit mthca_setup_hca(struct mthca_dev *dev)
+static int mthca_setup_hca(struct mthca_dev *dev)
{
int err;
u8 status;
@@ -875,8 +875,7 @@ err_uar_table_free:
return err;
}
-static int __devinit mthca_request_regions(struct pci_dev *pdev,
- int ddr_hidden)
+static int mthca_request_regions(struct pci_dev *pdev, int ddr_hidden)
{
int err;
@@ -928,7 +927,7 @@ static void mthca_release_regions(struct
MTHCA_HCR_SIZE);
}
-static int __devinit mthca_enable_msi_x(struct mthca_dev *mdev)
+static int mthca_enable_msi_x(struct mthca_dev *mdev)
{
struct msix_entry entries[3];
int err;
@@ -1213,7 +1212,7 @@ int __mthca_restart_one(struct pci_dev *
}
static int __devinit mthca_init_one(struct pci_dev *pdev,
- const struct pci_device_id *id)
+ const struct pci_device_id *id)
{
static int mthca_version_printed = 0;
int ret;
diff --git a/drivers/infiniband/hw/mthca/mthca_mcg.c b/drivers/infiniband/hw/mthca/mthca_mcg.c
index 47ca8a9..a8ad072 100644
--- a/drivers/infiniband/hw/mthca/mthca_mcg.c
+++ b/drivers/infiniband/hw/mthca/mthca_mcg.c
@@ -32,7 +32,6 @@
* $Id: mthca_mcg.c 1349 2004-12-16 21:09:43Z roland $
*/
-#include <linux/init.h>
#include <linux/string.h>
#include <linux/slab.h>
@@ -371,7 +370,7 @@ int mthca_multicast_detach(struct ib_qp
return err;
}
-int __devinit mthca_init_mcg_table(struct mthca_dev *dev)
+int mthca_init_mcg_table(struct mthca_dev *dev)
{
int err;
int table_size = dev->limits.num_mgms + dev->limits.num_amgms;
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
index a486dec..f71ffa8 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
@@ -34,7 +34,6 @@
*/
#include <linux/slab.h>
-#include <linux/init.h>
#include <linux/errno.h>
#include "mthca_dev.h"
@@ -135,7 +134,7 @@ static void mthca_buddy_free(struct mthc
spin_unlock(&buddy->lock);
}
-static int __devinit mthca_buddy_init(struct mthca_buddy *buddy, int max_order)
+static int mthca_buddy_init(struct mthca_buddy *buddy, int max_order)
{
int i, s;
@@ -759,7 +758,7 @@ void mthca_arbel_fmr_unmap(struct mthca_
*(u8 *) fmr->mem.arbel.mpt = MTHCA_MPT_STATUS_SW;
}
-int __devinit mthca_init_mr_table(struct mthca_dev *dev)
+int mthca_init_mr_table(struct mthca_dev *dev)
{
unsigned long addr;
int err, i;
diff --git a/drivers/infiniband/hw/mthca/mthca_pd.c b/drivers/infiniband/hw/mthca/mthca_pd.c
index 59df516..c1e9507 100644
--- a/drivers/infiniband/hw/mthca/mthca_pd.c
+++ b/drivers/infiniband/hw/mthca/mthca_pd.c
@@ -34,7 +34,6 @@
* $Id: mthca_pd.c 1349 2004-12-16 21:09:43Z roland $
*/
-#include <linux/init.h>
#include <linux/errno.h>
#include "mthca_dev.h"
@@ -69,7 +68,7 @@ void mthca_pd_free(struct mthca_dev *dev
mthca_free(&dev->pd_table.alloc, pd->pd_num);
}
-int __devinit mthca_init_pd_table(struct mthca_dev *dev)
+int mthca_init_pd_table(struct mthca_dev *dev)
{
return mthca_alloc_init(&dev->pd_table.alloc,
dev->limits.num_pds,
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
index fc67f78..21422a3 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -1100,11 +1100,10 @@ static struct ib_fmr *mthca_alloc_fmr(st
struct mthca_fmr *fmr;
int err;
- fmr = kmalloc(sizeof *fmr, GFP_KERNEL);
+ fmr = kmemdup(fmr_attr, sizeof *fmr, GFP_KERNEL);
if (!fmr)
return ERR_PTR(-ENOMEM);
- memcpy(&fmr->attr, fmr_attr, sizeof *fmr_attr);
err = mthca_fmr_alloc(to_mdev(pd->device), to_mpd(pd)->pd_num,
convert_access(mr_access_flags), fmr);
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index 6a7822e..33e3ba7 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -35,7 +35,6 @@
* $Id: mthca_qp.c 1355 2004-12-17 15:23:43Z roland $
*/
-#include <linux/init.h>
#include <linux/string.h>
#include <linux/slab.h>
@@ -2241,7 +2240,7 @@ void mthca_free_err_wqe(struct mthca_dev
*new_wqe = 0;
}
-int __devinit mthca_init_qp_table(struct mthca_dev *dev)
+int mthca_init_qp_table(struct mthca_dev *dev)
{
int err;
u8 status;
diff --git a/drivers/infiniband/hw/mthca/mthca_srq.c b/drivers/infiniband/hw/mthca/mthca_srq.c
index f5d7677..34d2c47 100644
--- a/drivers/infiniband/hw/mthca/mthca_srq.c
+++ b/drivers/infiniband/hw/mthca/mthca_srq.c
@@ -120,7 +120,7 @@ static void mthca_arbel_init_srq_context
memset(context, 0, sizeof *context);
- logsize = long_log2(srq->max) + srq->wqe_shift;
+ logsize = long_log2(srq->max);
context->state_logsize_srqn = cpu_to_be32(logsize << 24 | srq->srqn);
context->lkey = cpu_to_be32(srq->mr.ibmr.lkey);
context->db_index = cpu_to_be32(srq->db_index);
@@ -715,7 +715,7 @@ int mthca_max_srq_sge(struct mthca_dev *
sizeof (struct mthca_data_seg));
}
-int __devinit mthca_init_srq_table(struct mthca_dev *dev)
+int mthca_init_srq_table(struct mthca_dev *dev)
{
int err;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 0b8a79d..f2b6185 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -233,7 +233,7 @@ static inline struct ipoib_neigh **to_ip
}
struct ipoib_neigh *ipoib_neigh_alloc(struct neighbour *neigh);
-void ipoib_neigh_free(struct ipoib_neigh *neigh);
+void ipoib_neigh_free(struct net_device *dev, struct ipoib_neigh *neigh);
extern struct workqueue_struct *ipoib_workqueue;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 85522da..5ba3154 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -264,7 +264,7 @@ static void path_free(struct net_device
if (neigh->ah)
ipoib_put_ah(neigh->ah);
- ipoib_neigh_free(neigh);
+ ipoib_neigh_free(dev, neigh);
}
spin_unlock_irqrestore(&priv->lock, flags);
@@ -525,10 +525,11 @@ static void neigh_add_path(struct sk_buf
ipoib_send(dev, skb, path->ah, IPOIB_QPN(skb->dst->neighbour->ha));
} else {
neigh->ah = NULL;
- __skb_queue_tail(&neigh->queue, skb);
if (!path->query && path_rec_start(dev, path))
goto err_list;
+
+ __skb_queue_tail(&neigh->queue, skb);
}
spin_unlock(&priv->lock);
@@ -538,7 +539,7 @@ err_list:
list_del(&neigh->list);
err_path:
- ipoib_neigh_free(neigh);
+ ipoib_neigh_free(dev, neigh);
++priv->stats.tx_dropped;
dev_kfree_skb_any(skb);
@@ -655,7 +656,7 @@ static int ipoib_start_xmit(struct sk_bu
*/
ipoib_put_ah(neigh->ah);
list_del(&neigh->list);
- ipoib_neigh_free(neigh);
+ ipoib_neigh_free(dev, neigh);
spin_unlock(&priv->lock);
ipoib_path_lookup(skb, dev);
goto out;
@@ -786,7 +787,7 @@ static void ipoib_neigh_destructor(struc
if (neigh->ah)
ah = neigh->ah;
list_del(&neigh->list);
- ipoib_neigh_free(neigh);
+ ipoib_neigh_free(n->dev, neigh);
}
spin_unlock_irqrestore(&priv->lock, flags);
@@ -809,9 +810,15 @@ struct ipoib_neigh *ipoib_neigh_alloc(st
return neigh;
}
-void ipoib_neigh_free(struct ipoib_neigh *neigh)
+void ipoib_neigh_free(struct net_device *dev, struct ipoib_neigh *neigh)
{
+ struct ipoib_dev_priv *priv = netdev_priv(dev);
+ struct sk_buff *skb;
*to_ipoib_neigh(neigh->neighbour) = NULL;
+ while ((skb = __skb_dequeue(&neigh->queue))) {
+ ++priv->stats.tx_dropped;
+ dev_kfree_skb_any(skb);
+ }
kfree(neigh);
}
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index 3faa182..d282d65 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -114,7 +114,7 @@ static void ipoib_mcast_free(struct ipoi
*/
if (neigh->ah)
ipoib_put_ah(neigh->ah);
- ipoib_neigh_free(neigh);
+ ipoib_neigh_free(dev, neigh);
}
spin_unlock_irqrestore(&priv->lock, flags);
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.h b/drivers/infiniband/ulp/iser/iscsi_iser.h
index 9c53916..234e5b0 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.h
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.h
@@ -283,7 +283,7 @@ struct iser_global {
struct mutex connlist_mutex;
struct list_head connlist; /* all iSER IB connections */
- kmem_cache_t *desc_cache;
+ struct kmem_cache *desc_cache;
};
extern struct iser_global ig;
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 4b09147..64ab5fc 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -1176,9 +1176,11 @@ static int srp_cm_handler(struct ib_cm_i
break;
}
- target->status = srp_alloc_iu_bufs(target);
- if (target->status)
- break;
+ if (!target->rx_ring[0]) {
+ target->status = srp_alloc_iu_bufs(target);
+ if (target->status)
+ break;
+ }
qp_attr = kmalloc(sizeof *qp_attr, GFP_KERNEL);
if (!qp_attr) {
@@ -1716,7 +1718,8 @@ static ssize_t srp_create_target(struct
if (!target_host)
return -ENOMEM;
- target_host->max_lun = SRP_MAX_LUN;
+ target_host->max_lun = SRP_MAX_LUN;
+ target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb;
target = host_to_target(target_host);
diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h
index c9b4738..5c07017 100644
--- a/include/rdma/ib_cm.h
+++ b/include/rdma/ib_cm.h
@@ -60,6 +60,7 @@ enum ib_cm_state {
};
enum ib_cm_lap_state {
+ IB_CM_LAP_UNINIT,
IB_CM_LAP_IDLE,
IB_CM_LAP_SENT,
IB_CM_LAP_RCVD,
@@ -443,13 +444,20 @@ int ib_send_cm_drep(struct ib_cm_id *cm_
u8 private_data_len);
/**
- * ib_cm_establish - Forces a connection state to established.
+ * ib_cm_notify - Notifies the CM of an event reported to the consumer.
* @cm_id: Connection identifier to transition to established.
+ * @event: Type of event.
*
- * This routine should be invoked by users who receive messages on a
- * connected QP before an RTU has been received.
+ * This routine should be invoked by users to notify the CM of relevant
+ * communication events. Events that should be reported to the CM and
+ * when to report them are:
+ *
+ * IB_EVENT_COMM_EST - Used when a message is received on a connected
+ * QP before an RTU has been received.
+ * IB_EVENT_PATH_MIG - Notifies the CM that the connection has failed over
+ * to the alternate path.
*/
-int ib_cm_establish(struct ib_cm_id *cm_id);
+int ib_cm_notify(struct ib_cm_id *cm_id, enum ib_event_type event);
/**
* ib_send_cm_rej - Sends a connection rejection message to the
diff --git a/include/rdma/ib_user_cm.h b/include/rdma/ib_user_cm.h
index 066c20b..37650af 100644
--- a/include/rdma/ib_user_cm.h
+++ b/include/rdma/ib_user_cm.h
@@ -38,7 +38,7 @@ #define IB_USER_CM_H
#include <rdma/ib_user_sa.h>
-#define IB_USER_CM_ABI_VERSION 4
+#define IB_USER_CM_ABI_VERSION 5
enum {
IB_USER_CM_CMD_CREATE_ID,
@@ -46,7 +46,7 @@ enum {
IB_USER_CM_CMD_ATTR_ID,
IB_USER_CM_CMD_LISTEN,
- IB_USER_CM_CMD_ESTABLISH,
+ IB_USER_CM_CMD_NOTIFY,
IB_USER_CM_CMD_SEND_REQ,
IB_USER_CM_CMD_SEND_REP,
@@ -117,8 +117,9 @@ struct ib_ucm_listen {
__u32 reserved;
};
-struct ib_ucm_establish {
+struct ib_ucm_notify {
__u32 id;
+ __u32 event;
};
struct ib_ucm_private_data {
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-11-20 18:44 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-11-20 18:44 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This includes one small fixes for 2.6.19-rc6:
Michael S. Tsirkin (1):
IPoIB: Clear high octet in QP number
drivers/infiniband/ulp/ipoib/ipoib_main.c | 15 +++++++--------
1 files changed, 7 insertions(+), 8 deletions(-)
commit 073ae841d6a5098f7c6e17fc1f329350d950d1ce
Author: Michael S. Tsirkin <mst@mellanox.co.il>
Date: Thu Nov 16 10:59:12 2006 +0200
IPoIB: Clear high octet in QP number
IPoIB assumes that high (reserved) octet in the hardware address is 0,
and copies it into the QPN. This violates RFC 4391 (which requires
that the high 8 bits are ignored on receive), and will result in an
invalid QPN being used when interoperating with IPoIB connected mode.
Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 1eaf00e..85522da 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -49,6 +49,8 @@ #include <linux/in.h>
#include <net/dst.h>
+#define IPOIB_QPN(ha) (be32_to_cpup((__be32 *) ha) & 0xffffff)
+
MODULE_AUTHOR("Roland Dreier");
MODULE_DESCRIPTION("IP-over-InfiniBand net driver");
MODULE_LICENSE("Dual BSD/GPL");
@@ -520,8 +522,7 @@ static void neigh_add_path(struct sk_buf
memcpy(&neigh->dgid.raw, &path->pathrec.dgid.raw,
sizeof(union ib_gid));
- ipoib_send(dev, skb, path->ah,
- be32_to_cpup((__be32 *) skb->dst->neighbour->ha));
+ ipoib_send(dev, skb, path->ah, IPOIB_QPN(skb->dst->neighbour->ha));
} else {
neigh->ah = NULL;
__skb_queue_tail(&neigh->queue, skb);
@@ -599,8 +600,7 @@ static void unicast_arp_send(struct sk_b
ipoib_dbg(priv, "Send unicast ARP to %04x\n",
be16_to_cpu(path->pathrec.dlid));
- ipoib_send(dev, skb, path->ah,
- be32_to_cpup((__be32 *) phdr->hwaddr));
+ ipoib_send(dev, skb, path->ah, IPOIB_QPN(phdr->hwaddr));
} else if ((path->query || !path_rec_start(dev, path)) &&
skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
/* put pseudoheader back on for next time */
@@ -661,8 +661,7 @@ static int ipoib_start_xmit(struct sk_bu
goto out;
}
- ipoib_send(dev, skb, neigh->ah,
- be32_to_cpup((__be32 *) skb->dst->neighbour->ha));
+ ipoib_send(dev, skb, neigh->ah, IPOIB_QPN(skb->dst->neighbour->ha));
goto out;
}
@@ -694,7 +693,7 @@ static int ipoib_start_xmit(struct sk_bu
IPOIB_GID_FMT "\n",
skb->dst ? "neigh" : "dst",
be16_to_cpup((__be16 *) skb->data),
- be32_to_cpup((__be32 *) phdr->hwaddr),
+ IPOIB_QPN(phdr->hwaddr),
IPOIB_GID_RAW_ARG(phdr->hwaddr + 4));
dev_kfree_skb_any(skb);
++priv->stats.tx_dropped;
@@ -777,7 +776,7 @@ static void ipoib_neigh_destructor(struc
ipoib_dbg(priv,
"neigh_destructor for %06x " IPOIB_GID_FMT "\n",
- be32_to_cpup((__be32 *) n->ha),
+ IPOIB_QPN(n->ha),
IPOIB_GID_RAW_ARG(n->ha + 4));
spin_lock_irqsave(&priv->lock, flags);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-11-13 17:42 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-11-13 17:42 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This includes various small fixes for 2.6.19-rc6:
Hoang-Nam Nguyen (3):
IB/ehca: Assure 4K alignment for firmware control blocks
IB/ehca: Use named constant for max mtu
IB/ehca: Activate scaling code by default
Jean Delvare (1):
RDMA/amso1100: Fix && typo
Roland Dreier (1):
IB/mad: Fix race between cancel and receive completion
Tom Tucker (1):
RDMA/amso1100: Fix unitialized pseudo_netdev accessed in c2_register_device
drivers/infiniband/core/mad.c | 2 +-
drivers/infiniband/hw/amso1100/c2.c | 3 +-
drivers/infiniband/hw/amso1100/c2_provider.c | 39 +++++++++---------
drivers/infiniband/hw/amso1100/c2_rnic.c | 4 +-
drivers/infiniband/hw/ehca/Kconfig | 1 +
drivers/infiniband/hw/ehca/ehca_av.c | 5 +-
drivers/infiniband/hw/ehca/ehca_hca.c | 17 ++++----
drivers/infiniband/hw/ehca/ehca_irq.c | 17 ++++----
drivers/infiniband/hw/ehca/ehca_iverbs.h | 8 ++++
drivers/infiniband/hw/ehca/ehca_main.c | 56 +++++++++++++++++++++----
drivers/infiniband/hw/ehca/ehca_mrmw.c | 8 ++--
drivers/infiniband/hw/ehca/ehca_qp.c | 10 ++--
drivers/infiniband/hw/ehca/hipz_hw.h | 2 +
13 files changed, 111 insertions(+), 61 deletions(-)
The full log and patch is below:
commit 39798695b4bcc7b145f8910ca56195808d3a7637
Author: Roland Dreier <rolandd@cisco.com>
Date: Mon Nov 13 09:38:07 2006 -0800
IB/mad: Fix race between cancel and receive completion
When ib_cancel_mad() is called, it puts the canceled send on a list
and schedules a "flushed" callback from process context. However,
this leaves a window where a receive completion could be processed
before the send is fully flushed.
This is fine, except that ib_find_send_mad() will find the MAD and
return it to the receive processing, which results in the sender
getting both a successful receive and a "flushed" send completion for
the same request. Understandably, this confuses the sender, which is
expecting only one of these two callbacks, and leads to grief such as
a use-after-free in IPoIB.
Fix this by changing ib_find_send_mad() to return a send struct only
if the status is still successful (and not "flushed"). The search of
the send_list already had this check, so this patch just adds the same
check to the search of the wait_list.
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit b26c791e9ca3365616d40836000285931ca033d0
Author: Jean Delvare <khali@linux-fr.org>
Date: Thu Nov 9 21:02:26 2006 +0100
RDMA/amso1100: Fix && typo
Fix the AMSO1100 firmware version computation, which was broken
due to "&&" being used where "&" should have.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit 2ffcab6ae44b02679229ca1852526d0a6e062dd2
Author: Tom Tucker <tom@opengridcomputing.com>
Date: Wed Nov 8 14:23:22 2006 -0600
RDMA/amso1100: Fix unitialized pseudo_netdev accessed in c2_register_device
Rework some load-time error handling: c2_register_device() leaked when
it failed, and the function that called it didn't check the return code.
Signed-off-by: Tom Tucker <tom@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit f2c238a0c5e155acd49752c5fb93fb8d8534232b
Author: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Date: Sun Nov 5 21:42:20 2006 +0100
IB/ehca: Activate scaling code by default
Change ehca's Kconfig to activates scaling code as default. After
several measurements we saw that this feature prevents dropped packets
(UD) in stress situation. Thus, enabling it helps to improve ehca's
bandwidth through IPoIB.
Signed-off-by: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit c58121143f87930621c1a6fa9683b6862f2b42c9
Author: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Date: Sun Nov 5 21:42:56 2006 +0100
IB/ehca: Use named constant for max mtu
Define and use a constant EHCA_MAX_MTU instead hardcoded value.
Signed-off-by: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit 7e28db5d8ff63b1cabc221c5cb84a5f45752f1c2
Author: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Date: Tue Nov 7 00:56:39 2006 +0100
IB/ehca: Assure 4K alignment for firmware control blocks
Assure 4K alignment for firmware control blocks in 64K page mode,
because kzalloc()'s result address might not be 4K aligned if 64K
pages are enabled. Thus, we introduce wrappers called
ehca_{alloc,free}_fw_ctrlblock(), which use a slab cache for objects
with 4K length and 4K alignment in order to alloc/free firmware
control blocks in 64K page mode. In 4K page mode those wrappers just
are defines of get_zeroed_page() and free_page().
Signed-off-by: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit 39798695b4bcc7b145f8910ca56195808d3a7637
Author: Roland Dreier <rolandd@cisco.com>
Date: Mon Nov 13 09:38:07 2006 -0800
IB/mad: Fix race between cancel and receive completion
When ib_cancel_mad() is called, it puts the canceled send on a list
and schedules a "flushed" callback from process context. However,
this leaves a window where a receive completion could be processed
before the send is fully flushed.
This is fine, except that ib_find_send_mad() will find the MAD and
return it to the receive processing, which results in the sender
getting both a successful receive and a "flushed" send completion for
the same request. Understandably, this confuses the sender, which is
expecting only one of these two callbacks, and leads to grief such as
a use-after-free in IPoIB.
Fix this by changing ib_find_send_mad() to return a send struct only
if the status is still successful (and not "flushed"). The search of
the send_list already had this check, so this patch just adds the same
check to the search of the wait_list.
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit b26c791e9ca3365616d40836000285931ca033d0
Author: Jean Delvare <khali@linux-fr.org>
Date: Thu Nov 9 21:02:26 2006 +0100
RDMA/amso1100: Fix && typo
Fix the AMSO1100 firmware version computation, which was broken
due to "&&" being used where "&" should have.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit 2ffcab6ae44b02679229ca1852526d0a6e062dd2
Author: Tom Tucker <tom@opengridcomputing.com>
Date: Wed Nov 8 14:23:22 2006 -0600
RDMA/amso1100: Fix unitialized pseudo_netdev accessed in c2_register_device
Rework some load-time error handling: c2_register_device() leaked when
it failed, and the function that called it didn't check the return code.
Signed-off-by: Tom Tucker <tom@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit f2c238a0c5e155acd49752c5fb93fb8d8534232b
Author: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Date: Sun Nov 5 21:42:20 2006 +0100
IB/ehca: Activate scaling code by default
Change ehca's Kconfig to activates scaling code as default. After
several measurements we saw that this feature prevents dropped packets
(UD) in stress situation. Thus, enabling it helps to improve ehca's
bandwidth through IPoIB.
Signed-off-by: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit c58121143f87930621c1a6fa9683b6862f2b42c9
Author: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Date: Sun Nov 5 21:42:56 2006 +0100
IB/ehca: Use named constant for max mtu
Define and use a constant EHCA_MAX_MTU instead hardcoded value.
Signed-off-by: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
commit 7e28db5d8ff63b1cabc221c5cb84a5f45752f1c2
Author: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Date: Tue Nov 7 00:56:39 2006 +0100
IB/ehca: Assure 4K alignment for firmware control blocks
Assure 4K alignment for firmware control blocks in 64K page mode,
because kzalloc()'s result address might not be 4K aligned if 64K
pages are enabled. Thus, we introduce wrappers called
ehca_{alloc,free}_fw_ctrlblock(), which use a slab cache for objects
with 4K length and 4K alignment in order to alloc/free firmware
control blocks in 64K page mode. In 4K page mode those wrappers just
are defines of get_zeroed_page() and free_page().
Signed-off-by: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index 493f4c6..a72bcea 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -1750,7 +1750,7 @@ ib_find_send_mad(struct ib_mad_agent_pri
*/
(is_direct(wc->recv_buf.mad->mad_hdr.mgmt_class) ||
rcv_has_same_gid(mad_agent_priv, wr, wc)))
- return wr;
+ return (wr->status == IB_WC_SUCCESS) ? wr : NULL;
}
/*
diff --git a/drivers/infiniband/hw/amso1100/c2.c b/drivers/infiniband/hw/amso1100/c2.c
index 9e7bd94..27fe242 100644
--- a/drivers/infiniband/hw/amso1100/c2.c
+++ b/drivers/infiniband/hw/amso1100/c2.c
@@ -1155,7 +1155,8 @@ static int __devinit c2_probe(struct pci
goto bail10;
}
- c2_register_device(c2dev);
+ if (c2_register_device(c2dev))
+ goto bail10;
return 0;
diff --git a/drivers/infiniband/hw/amso1100/c2_provider.c b/drivers/infiniband/hw/amso1100/c2_provider.c
index da98d9f..fef9727 100644
--- a/drivers/infiniband/hw/amso1100/c2_provider.c
+++ b/drivers/infiniband/hw/amso1100/c2_provider.c
@@ -757,20 +757,17 @@ #endif
int c2_register_device(struct c2_dev *dev)
{
- int ret;
+ int ret = -ENOMEM;
int i;
/* Register pseudo network device */
dev->pseudo_netdev = c2_pseudo_netdev_init(dev);
- if (dev->pseudo_netdev) {
- ret = register_netdev(dev->pseudo_netdev);
- if (ret) {
- printk(KERN_ERR PFX
- "Unable to register netdev, ret = %d\n", ret);
- free_netdev(dev->pseudo_netdev);
- return ret;
- }
- }
+ if (!dev->pseudo_netdev)
+ goto out3;
+
+ ret = register_netdev(dev->pseudo_netdev);
+ if (ret)
+ goto out2;
pr_debug("%s:%u\n", __FUNCTION__, __LINE__);
strlcpy(dev->ibdev.name, "amso%d", IB_DEVICE_NAME_MAX);
@@ -848,21 +845,25 @@ int c2_register_device(struct c2_dev *de
ret = ib_register_device(&dev->ibdev);
if (ret)
- return ret;
+ goto out1;
for (i = 0; i < ARRAY_SIZE(c2_class_attributes); ++i) {
ret = class_device_create_file(&dev->ibdev.class_dev,
c2_class_attributes[i]);
- if (ret) {
- unregister_netdev(dev->pseudo_netdev);
- free_netdev(dev->pseudo_netdev);
- ib_unregister_device(&dev->ibdev);
- return ret;
- }
+ if (ret)
+ goto out0;
}
+ goto out3;
- pr_debug("%s:%u\n", __FUNCTION__, __LINE__);
- return 0;
+out0:
+ ib_unregister_device(&dev->ibdev);
+out1:
+ unregister_netdev(dev->pseudo_netdev);
+out2:
+ free_netdev(dev->pseudo_netdev);
+out3:
+ pr_debug("%s:%u ret=%d\n", __FUNCTION__, __LINE__, ret);
+ return ret;
}
void c2_unregister_device(struct c2_dev *dev)
diff --git a/drivers/infiniband/hw/amso1100/c2_rnic.c b/drivers/infiniband/hw/amso1100/c2_rnic.c
index 21d9612..623dc95 100644
--- a/drivers/infiniband/hw/amso1100/c2_rnic.c
+++ b/drivers/infiniband/hw/amso1100/c2_rnic.c
@@ -157,8 +157,8 @@ static int c2_rnic_query(struct c2_dev *
props->fw_ver =
((u64)be32_to_cpu(reply->fw_ver_major) << 32) |
- ((be32_to_cpu(reply->fw_ver_minor) && 0xFFFF) << 16) |
- (be32_to_cpu(reply->fw_ver_patch) && 0xFFFF);
+ ((be32_to_cpu(reply->fw_ver_minor) & 0xFFFF) << 16) |
+ (be32_to_cpu(reply->fw_ver_patch) & 0xFFFF);
memcpy(&props->sys_image_guid, c2dev->netdev->dev_addr, 6);
props->max_mr_size = 0xFFFFFFFF;
props->page_size_cap = ~(C2_MIN_PAGESIZE-1);
diff --git a/drivers/infiniband/hw/ehca/Kconfig b/drivers/infiniband/hw/ehca/Kconfig
index 922389b..727b10d 100644
--- a/drivers/infiniband/hw/ehca/Kconfig
+++ b/drivers/infiniband/hw/ehca/Kconfig
@@ -10,6 +10,7 @@ config INFINIBAND_EHCA
config INFINIBAND_EHCA_SCALING
bool "Scaling support (EXPERIMENTAL)"
depends on IBMEBUS && INFINIBAND_EHCA && HOTPLUG_CPU && EXPERIMENTAL
+ default y
---help---
eHCA scaling support schedules the CQ callbacks to different CPUs.
diff --git a/drivers/infiniband/hw/ehca/ehca_av.c b/drivers/infiniband/hw/ehca/ehca_av.c
index 3bac197..214e2fd 100644
--- a/drivers/infiniband/hw/ehca/ehca_av.c
+++ b/drivers/infiniband/hw/ehca/ehca_av.c
@@ -118,8 +118,7 @@ struct ib_ah *ehca_create_ah(struct ib_p
}
memcpy(&av->av.grh.word_1, &gid, sizeof(gid));
}
- /* for the time being we use a hard coded PMTU of 2048 Bytes */
- av->av.pmtu = 4;
+ av->av.pmtu = EHCA_MAX_MTU;
/* dgid comes in grh.word_3 */
memcpy(&av->av.grh.word_3, &ah_attr->grh.dgid,
@@ -193,7 +192,7 @@ int ehca_modify_ah(struct ib_ah *ah, str
memcpy(&new_ehca_av.grh.word_1, &gid, sizeof(gid));
}
- new_ehca_av.pmtu = 4; /* see also comment in create_ah() */
+ new_ehca_av.pmtu = EHCA_MAX_MTU;
memcpy(&new_ehca_av.grh.word_3, &ah_attr->grh.dgid,
sizeof(ah_attr->grh.dgid));
diff --git a/drivers/infiniband/hw/ehca/ehca_hca.c b/drivers/infiniband/hw/ehca/ehca_hca.c
index 5eae6ac..e1b618c 100644
--- a/drivers/infiniband/hw/ehca/ehca_hca.c
+++ b/drivers/infiniband/hw/ehca/ehca_hca.c
@@ -40,6 +40,7 @@
*/
#include "ehca_tools.h"
+#include "ehca_iverbs.h"
#include "hcp_if.h"
int ehca_query_device(struct ib_device *ibdev, struct ib_device_attr *props)
@@ -49,7 +50,7 @@ int ehca_query_device(struct ib_device *
ib_device);
struct hipz_query_hca *rblock;
- rblock = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ rblock = ehca_alloc_fw_ctrlblock();
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -96,7 +97,7 @@ int ehca_query_device(struct ib_device *
= min_t(int, rblock->max_total_mcast_qp_attach, INT_MAX);
query_device1:
- kfree(rblock);
+ ehca_free_fw_ctrlblock(rblock);
return ret;
}
@@ -109,7 +110,7 @@ int ehca_query_port(struct ib_device *ib
ib_device);
struct hipz_query_port *rblock;
- rblock = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ rblock = ehca_alloc_fw_ctrlblock();
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -162,7 +163,7 @@ int ehca_query_port(struct ib_device *ib
props->active_speed = 0x1;
query_port1:
- kfree(rblock);
+ ehca_free_fw_ctrlblock(rblock);
return ret;
}
@@ -178,7 +179,7 @@ int ehca_query_pkey(struct ib_device *ib
return -EINVAL;
}
- rblock = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ rblock = ehca_alloc_fw_ctrlblock();
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -193,7 +194,7 @@ int ehca_query_pkey(struct ib_device *ib
memcpy(pkey, &rblock->pkey_entries + index, sizeof(u16));
query_pkey1:
- kfree(rblock);
+ ehca_free_fw_ctrlblock(rblock);
return ret;
}
@@ -211,7 +212,7 @@ int ehca_query_gid(struct ib_device *ibd
return -EINVAL;
}
- rblock = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ rblock = ehca_alloc_fw_ctrlblock();
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -227,7 +228,7 @@ int ehca_query_gid(struct ib_device *ibd
memcpy(&gid->raw[8], &rblock->guid_entries[index], sizeof(u64));
query_gid1:
- kfree(rblock);
+ ehca_free_fw_ctrlblock(rblock);
return ret;
}
diff --git a/drivers/infiniband/hw/ehca/ehca_irq.c b/drivers/infiniband/hw/ehca/ehca_irq.c
index 048cc44..c3ea746 100644
--- a/drivers/infiniband/hw/ehca/ehca_irq.c
+++ b/drivers/infiniband/hw/ehca/ehca_irq.c
@@ -45,6 +45,7 @@ #include "ehca_iverbs.h"
#include "ehca_tools.h"
#include "hcp_if.h"
#include "hipz_fns.h"
+#include "ipz_pt_fn.h"
#define EQE_COMPLETION_EVENT EHCA_BMASK_IBM(1,1)
#define EQE_CQ_QP_NUMBER EHCA_BMASK_IBM(8,31)
@@ -137,38 +138,36 @@ int ehca_error_data(struct ehca_shca *sh
u64 *rblock;
unsigned long block_count;
- rblock = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ rblock = ehca_alloc_fw_ctrlblock();
if (!rblock) {
ehca_err(&shca->ib_device, "Cannot allocate rblock memory.");
ret = -ENOMEM;
goto error_data1;
}
+ /* rblock must be 4K aligned and should be 4K large */
ret = hipz_h_error_data(shca->ipz_hca_handle,
resource,
rblock,
&block_count);
- if (ret == H_R_STATE) {
+ if (ret == H_R_STATE)
ehca_err(&shca->ib_device,
"No error data is available: %lx.", resource);
- }
else if (ret == H_SUCCESS) {
int length;
length = EHCA_BMASK_GET(ERROR_DATA_LENGTH, rblock[0]);
- if (length > PAGE_SIZE)
- length = PAGE_SIZE;
+ if (length > EHCA_PAGESIZE)
+ length = EHCA_PAGESIZE;
print_error_data(shca, data, rblock, length);
- }
- else {
+ } else
ehca_err(&shca->ib_device,
"Error data could not be fetched: %lx", resource);
- }
- kfree(rblock);
+ ehca_free_fw_ctrlblock(rblock);
error_data1:
return ret;
diff --git a/drivers/infiniband/hw/ehca/ehca_iverbs.h b/drivers/infiniband/hw/ehca/ehca_iverbs.h
index 319c39d..3720e30 100644
--- a/drivers/infiniband/hw/ehca/ehca_iverbs.h
+++ b/drivers/infiniband/hw/ehca/ehca_iverbs.h
@@ -179,4 +179,12 @@ int ehca_mmap_register(u64 physical,void
int ehca_munmap(unsigned long addr, size_t len);
+#ifdef CONFIG_PPC_64K_PAGES
+void *ehca_alloc_fw_ctrlblock(void);
+void ehca_free_fw_ctrlblock(void *ptr);
+#else
+#define ehca_alloc_fw_ctrlblock() ((void *) get_zeroed_page(GFP_KERNEL))
+#define ehca_free_fw_ctrlblock(ptr) free_page((unsigned long)(ptr))
+#endif
+
#endif
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index 024d511..01f5aa9 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -40,6 +40,9 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#ifdef CONFIG_PPC_64K_PAGES
+#include <linux/slab.h>
+#endif
#include "ehca_classes.h"
#include "ehca_iverbs.h"
#include "ehca_mrmw.h"
@@ -49,7 +52,7 @@ #include "hcp_if.h"
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Christoph Raisch <raisch@de.ibm.com>");
MODULE_DESCRIPTION("IBM eServer HCA InfiniBand Device Driver");
-MODULE_VERSION("SVNEHCA_0017");
+MODULE_VERSION("SVNEHCA_0018");
int ehca_open_aqp1 = 0;
int ehca_debug_level = 0;
@@ -94,11 +97,31 @@ spinlock_t ehca_cq_idr_lock;
DEFINE_IDR(ehca_qp_idr);
DEFINE_IDR(ehca_cq_idr);
+
static struct list_head shca_list; /* list of all registered ehcas */
static spinlock_t shca_list_lock;
static struct timer_list poll_eqs_timer;
+#ifdef CONFIG_PPC_64K_PAGES
+static struct kmem_cache *ctblk_cache = NULL;
+
+void *ehca_alloc_fw_ctrlblock(void)
+{
+ void *ret = kmem_cache_zalloc(ctblk_cache, SLAB_KERNEL);
+ if (!ret)
+ ehca_gen_err("Out of memory for ctblk");
+ return ret;
+}
+
+void ehca_free_fw_ctrlblock(void *ptr)
+{
+ if (ptr)
+ kmem_cache_free(ctblk_cache, ptr);
+
+}
+#endif
+
static int ehca_create_slab_caches(void)
{
int ret;
@@ -133,6 +156,17 @@ static int ehca_create_slab_caches(void)
goto create_slab_caches5;
}
+#ifdef CONFIG_PPC_64K_PAGES
+ ctblk_cache = kmem_cache_create("ehca_cache_ctblk",
+ EHCA_PAGESIZE, H_CB_ALIGNMENT,
+ SLAB_HWCACHE_ALIGN,
+ NULL, NULL);
+ if (!ctblk_cache) {
+ ehca_gen_err("Cannot create ctblk SLAB cache.");
+ ehca_cleanup_mrmw_cache();
+ goto create_slab_caches5;
+ }
+#endif
return 0;
create_slab_caches5:
@@ -157,6 +191,10 @@ static void ehca_destroy_slab_caches(voi
ehca_cleanup_qp_cache();
ehca_cleanup_cq_cache();
ehca_cleanup_pd_cache();
+#ifdef CONFIG_PPC_64K_PAGES
+ if (ctblk_cache)
+ kmem_cache_destroy(ctblk_cache);
+#endif
}
#define EHCA_HCAAVER EHCA_BMASK_IBM(32,39)
@@ -168,7 +206,7 @@ int ehca_sense_attributes(struct ehca_sh
u64 h_ret;
struct hipz_query_hca *rblock;
- rblock = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ rblock = ehca_alloc_fw_ctrlblock();
if (!rblock) {
ehca_gen_err("Cannot allocate rblock memory.");
return -ENOMEM;
@@ -211,7 +249,7 @@ int ehca_sense_attributes(struct ehca_sh
shca->sport[1].rate = IB_RATE_30_GBPS;
num_ports1:
- kfree(rblock);
+ ehca_free_fw_ctrlblock(rblock);
return ret;
}
@@ -220,7 +258,7 @@ static int init_node_guid(struct ehca_sh
int ret = 0;
struct hipz_query_hca *rblock;
- rblock = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ rblock = ehca_alloc_fw_ctrlblock();
if (!rblock) {
ehca_err(&shca->ib_device, "Can't allocate rblock memory.");
return -ENOMEM;
@@ -235,7 +273,7 @@ static int init_node_guid(struct ehca_sh
memcpy(&shca->ib_device.node_guid, &rblock->node_guid, sizeof(u64));
init_node_guid1:
- kfree(rblock);
+ ehca_free_fw_ctrlblock(rblock);
return ret;
}
@@ -431,7 +469,7 @@ static ssize_t ehca_show_##name(struct
\
shca = dev->driver_data; \
\
- rblock = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); \
+ rblock = ehca_alloc_fw_ctrlblock(); \
if (!rblock) { \
dev_err(dev, "Can't allocate rblock memory."); \
return 0; \
@@ -439,12 +477,12 @@ static ssize_t ehca_show_##name(struct
\
if (hipz_h_query_hca(shca->ipz_hca_handle, rblock) != H_SUCCESS) { \
dev_err(dev, "Can't query device properties"); \
- kfree(rblock); \
+ ehca_free_fw_ctrlblock(rblock); \
return 0; \
} \
\
data = rblock->name; \
- kfree(rblock); \
+ ehca_free_fw_ctrlblock(rblock); \
\
if ((strcmp(#name, "num_ports") == 0) && (ehca_nr_ports == 1)) \
return snprintf(buf, 256, "1\n"); \
@@ -752,7 +790,7 @@ int __init ehca_module_init(void)
int ret;
printk(KERN_INFO "eHCA Infiniband Device Driver "
- "(Rel.: SVNEHCA_0017)\n");
+ "(Rel.: SVNEHCA_0018)\n");
idr_init(&ehca_qp_idr);
idr_init(&ehca_cq_idr);
spin_lock_init(&ehca_qp_idr_lock);
diff --git a/drivers/infiniband/hw/ehca/ehca_mrmw.c b/drivers/infiniband/hw/ehca/ehca_mrmw.c
index 5ca6544..abce676 100644
--- a/drivers/infiniband/hw/ehca/ehca_mrmw.c
+++ b/drivers/infiniband/hw/ehca/ehca_mrmw.c
@@ -1013,7 +1013,7 @@ int ehca_reg_mr_rpages(struct ehca_shca
u32 i;
u64 *kpage;
- kpage = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ kpage = ehca_alloc_fw_ctrlblock();
if (!kpage) {
ehca_err(&shca->ib_device, "kpage alloc failed");
ret = -ENOMEM;
@@ -1092,7 +1092,7 @@ int ehca_reg_mr_rpages(struct ehca_shca
ehca_reg_mr_rpages_exit1:
- kfree(kpage);
+ ehca_free_fw_ctrlblock(kpage);
ehca_reg_mr_rpages_exit0:
if (ret)
ehca_err(&shca->ib_device, "ret=%x shca=%p e_mr=%p pginfo=%p "
@@ -1124,7 +1124,7 @@ inline int ehca_rereg_mr_rereg1(struct e
ehca_mrmw_map_acl(acl, &hipz_acl);
ehca_mrmw_set_pgsize_hipz_acl(&hipz_acl);
- kpage = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ kpage = ehca_alloc_fw_ctrlblock();
if (!kpage) {
ehca_err(&shca->ib_device, "kpage alloc failed");
ret = -ENOMEM;
@@ -1181,7 +1181,7 @@ inline int ehca_rereg_mr_rereg1(struct e
}
ehca_rereg_mr_rereg1_exit1:
- kfree(kpage);
+ ehca_free_fw_ctrlblock(kpage);
ehca_rereg_mr_rereg1_exit0:
if ( ret && (ret != -EAGAIN) )
ehca_err(&shca->ib_device, "ret=%x lkey=%x rkey=%x "
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index 4394123..cf3e50e 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
@@ -811,8 +811,8 @@ static int internal_modify_qp(struct ib_
unsigned long spl_flags = 0;
/* do query_qp to obtain current attr values */
- mqpcb = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
- if (mqpcb == NULL) {
+ mqpcb = ehca_alloc_fw_ctrlblock();
+ if (!mqpcb) {
ehca_err(ibqp->device, "Could not get zeroed page for mqpcb "
"ehca_qp=%p qp_num=%x ", my_qp, ibqp->qp_num);
return -ENOMEM;
@@ -1225,7 +1225,7 @@ modify_qp_exit2:
}
modify_qp_exit1:
- kfree(mqpcb);
+ ehca_free_fw_ctrlblock(mqpcb);
return ret;
}
@@ -1277,7 +1277,7 @@ int ehca_query_qp(struct ib_qp *qp,
return -EINVAL;
}
- qpcb = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL );
+ qpcb = ehca_alloc_fw_ctrlblock();
if (!qpcb) {
ehca_err(qp->device,"Out of memory for qpcb "
"ehca_qp=%p qp_num=%x", my_qp, qp->qp_num);
@@ -1401,7 +1401,7 @@ int ehca_query_qp(struct ib_qp *qp,
ehca_dmp(qpcb, 4*70, "qp_num=%x", qp->qp_num);
query_qp_exit1:
- kfree(qpcb);
+ ehca_free_fw_ctrlblock(qpcb);
return ret;
}
diff --git a/drivers/infiniband/hw/ehca/hipz_hw.h b/drivers/infiniband/hw/ehca/hipz_hw.h
index 3fc92b0..fad9136 100644
--- a/drivers/infiniband/hw/ehca/hipz_hw.h
+++ b/drivers/infiniband/hw/ehca/hipz_hw.h
@@ -45,6 +45,8 @@ #define __HIPZ_HW_H__
#include "ehca_tools.h"
+#define EHCA_MAX_MTU 4
+
/* QP Table Entry Memory Map */
struct hipz_qptemm {
u64 qpx_hcr;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-11-02 22:28 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-11-02 22:28 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This includes various fixes for 2.6.19-rc5:
Erez Zilber (1):
IB/iser: Start connection after enabling iSER
Jack Morgenstein (1):
IB/uverbs: Return sq_draining value in query_qp response
Krishna Kumar (1):
RDMA/cma: rdma_bind_addr() leaks a cma_dev reference count
Michael S. Tsirkin (1):
IB/mthca: Fix MAD extended header format for MAD_IFC firmware command
Paul Mackerras (1):
IB/ehca: Fix eHCA driver compilation for uniprocessor
Sean Hefty (1):
RDMA/addr: Use client registration to fix module unload race
Steve Wise (2):
IB/amso1100: Use dma_alloc_coherent() instead of kmalloc/dma_map_single
IB/amso1100: Fix incorrect pr_debug()
drivers/infiniband/core/addr.c | 28 ++++++++++++++-
drivers/infiniband/core/cma.c | 31 +++++++++++-----
drivers/infiniband/core/uverbs_cmd.c | 2 +-
drivers/infiniband/hw/amso1100/c2_alloc.c | 13 +++----
drivers/infiniband/hw/amso1100/c2_cq.c | 18 +++------
drivers/infiniband/hw/amso1100/c2_rnic.c | 56 ++++++++++++-----------------
drivers/infiniband/hw/ehca/ehca_tools.h | 1 +
drivers/infiniband/hw/mthca/mthca_cmd.c | 14 ++++----
drivers/infiniband/ulp/iser/iscsi_iser.c | 4 +-
include/rdma/ib_addr.h | 20 ++++++++++-
include/rdma/ib_user_verbs.h | 2 +-
11 files changed, 114 insertions(+), 75 deletions(-)
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index 60d3fbd..e11187e 100644
--- a/drivers/infiniband/core/addr.c
+++ b/drivers/infiniband/core/addr.c
@@ -47,6 +47,7 @@ struct addr_req {
struct sockaddr src_addr;
struct sockaddr dst_addr;
struct rdma_dev_addr *addr;
+ struct rdma_addr_client *client;
void *context;
void (*callback)(int status, struct sockaddr *src_addr,
struct rdma_dev_addr *addr, void *context);
@@ -61,6 +62,26 @@ static LIST_HEAD(req_list);
static DECLARE_WORK(work, process_req, NULL);
static struct workqueue_struct *addr_wq;
+void rdma_addr_register_client(struct rdma_addr_client *client)
+{
+ atomic_set(&client->refcount, 1);
+ init_completion(&client->comp);
+}
+EXPORT_SYMBOL(rdma_addr_register_client);
+
+static inline void put_client(struct rdma_addr_client *client)
+{
+ if (atomic_dec_and_test(&client->refcount))
+ complete(&client->comp);
+}
+
+void rdma_addr_unregister_client(struct rdma_addr_client *client)
+{
+ put_client(client);
+ wait_for_completion(&client->comp);
+}
+EXPORT_SYMBOL(rdma_addr_unregister_client);
+
int rdma_copy_addr(struct rdma_dev_addr *dev_addr, struct net_device *dev,
const unsigned char *dst_dev_addr)
{
@@ -229,6 +250,7 @@ static void process_req(void *data)
list_del(&req->list);
req->callback(req->status, &req->src_addr, req->addr,
req->context);
+ put_client(req->client);
kfree(req);
}
}
@@ -264,7 +286,8 @@ static int addr_resolve_local(struct soc
return ret;
}
-int rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr,
+int rdma_resolve_ip(struct rdma_addr_client *client,
+ struct sockaddr *src_addr, struct sockaddr *dst_addr,
struct rdma_dev_addr *addr, int timeout_ms,
void (*callback)(int status, struct sockaddr *src_addr,
struct rdma_dev_addr *addr, void *context),
@@ -285,6 +308,8 @@ int rdma_resolve_ip(struct sockaddr *src
req->addr = addr;
req->callback = callback;
req->context = context;
+ req->client = client;
+ atomic_inc(&client->refcount);
src_in = (struct sockaddr_in *) &req->src_addr;
dst_in = (struct sockaddr_in *) &req->dst_addr;
@@ -305,6 +330,7 @@ int rdma_resolve_ip(struct sockaddr *src
break;
default:
ret = req->status;
+ atomic_dec(&client->refcount);
kfree(req);
break;
}
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 9ae4f3a..845090b 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -63,6 +63,7 @@ static struct ib_client cma_client = {
};
static struct ib_sa_client sa_client;
+static struct rdma_addr_client addr_client;
static LIST_HEAD(dev_list);
static LIST_HEAD(listen_any_list);
static DEFINE_MUTEX(lock);
@@ -1625,8 +1626,8 @@ int rdma_resolve_addr(struct rdma_cm_id
if (cma_any_addr(dst_addr))
ret = cma_resolve_loopback(id_priv);
else
- ret = rdma_resolve_ip(&id->route.addr.src_addr, dst_addr,
- &id->route.addr.dev_addr,
+ ret = rdma_resolve_ip(&addr_client, &id->route.addr.src_addr,
+ dst_addr, &id->route.addr.dev_addr,
timeout_ms, addr_handler, id_priv);
if (ret)
goto err;
@@ -1762,22 +1763,29 @@ int rdma_bind_addr(struct rdma_cm_id *id
if (!cma_any_addr(addr)) {
ret = rdma_translate_ip(addr, &id->route.addr.dev_addr);
- if (!ret) {
- mutex_lock(&lock);
- ret = cma_acquire_dev(id_priv);
- mutex_unlock(&lock);
- }
if (ret)
- goto err;
+ goto err1;
+
+ mutex_lock(&lock);
+ ret = cma_acquire_dev(id_priv);
+ mutex_unlock(&lock);
+ if (ret)
+ goto err1;
}
memcpy(&id->route.addr.src_addr, addr, ip_addr_size(addr));
ret = cma_get_port(id_priv);
if (ret)
- goto err;
+ goto err2;
return 0;
-err:
+err2:
+ if (!cma_any_addr(addr)) {
+ mutex_lock(&lock);
+ cma_detach_from_dev(id_priv);
+ mutex_unlock(&lock);
+ }
+err1:
cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_IDLE);
return ret;
}
@@ -2210,6 +2218,7 @@ static int cma_init(void)
return -ENOMEM;
ib_sa_register_client(&sa_client);
+ rdma_addr_register_client(&addr_client);
ret = ib_register_client(&cma_client);
if (ret)
@@ -2217,6 +2226,7 @@ static int cma_init(void)
return 0;
err:
+ rdma_addr_unregister_client(&addr_client);
ib_sa_unregister_client(&sa_client);
destroy_workqueue(cma_wq);
return ret;
@@ -2225,6 +2235,7 @@ err:
static void cma_cleanup(void)
{
ib_unregister_client(&cma_client);
+ rdma_addr_unregister_client(&addr_client);
ib_sa_unregister_client(&sa_client);
destroy_workqueue(cma_wq);
idr_destroy(&sdp_ps);
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index b72c7f6..743247e 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -1214,7 +1214,7 @@ ssize_t ib_uverbs_query_qp(struct ib_uve
resp.qp_access_flags = attr->qp_access_flags;
resp.pkey_index = attr->pkey_index;
resp.alt_pkey_index = attr->alt_pkey_index;
- resp.en_sqd_async_notify = attr->en_sqd_async_notify;
+ resp.sq_draining = attr->sq_draining;
resp.max_rd_atomic = attr->max_rd_atomic;
resp.max_dest_rd_atomic = attr->max_dest_rd_atomic;
resp.min_rnr_timer = attr->min_rnr_timer;
diff --git a/drivers/infiniband/hw/amso1100/c2_alloc.c b/drivers/infiniband/hw/amso1100/c2_alloc.c
index 028a60b..0315f99 100644
--- a/drivers/infiniband/hw/amso1100/c2_alloc.c
+++ b/drivers/infiniband/hw/amso1100/c2_alloc.c
@@ -42,13 +42,14 @@ static int c2_alloc_mqsp_chunk(struct c2
{
int i;
struct sp_chunk *new_head;
+ dma_addr_t dma_addr;
- new_head = (struct sp_chunk *) __get_free_page(gfp_mask);
+ new_head = dma_alloc_coherent(&c2dev->pcidev->dev, PAGE_SIZE,
+ &dma_addr, gfp_mask);
if (new_head == NULL)
return -ENOMEM;
- new_head->dma_addr = dma_map_single(c2dev->ibdev.dma_device, new_head,
- PAGE_SIZE, DMA_FROM_DEVICE);
+ new_head->dma_addr = dma_addr;
pci_unmap_addr_set(new_head, mapping, new_head->dma_addr);
new_head->next = NULL;
@@ -80,10 +81,8 @@ void c2_free_mqsp_pool(struct c2_dev *c2
while (root) {
next = root->next;
- dma_unmap_single(c2dev->ibdev.dma_device,
- pci_unmap_addr(root, mapping), PAGE_SIZE,
- DMA_FROM_DEVICE);
- __free_page((struct page *) root);
+ dma_free_coherent(&c2dev->pcidev->dev, PAGE_SIZE, root,
+ pci_unmap_addr(root, mapping));
root = next;
}
}
diff --git a/drivers/infiniband/hw/amso1100/c2_cq.c b/drivers/infiniband/hw/amso1100/c2_cq.c
index 9d7bcc5..05c9154 100644
--- a/drivers/infiniband/hw/amso1100/c2_cq.c
+++ b/drivers/infiniband/hw/amso1100/c2_cq.c
@@ -246,20 +246,17 @@ int c2_arm_cq(struct ib_cq *ibcq, enum i
static void c2_free_cq_buf(struct c2_dev *c2dev, struct c2_mq *mq)
{
-
- dma_unmap_single(c2dev->ibdev.dma_device, pci_unmap_addr(mq, mapping),
- mq->q_size * mq->msg_size, DMA_FROM_DEVICE);
- free_pages((unsigned long) mq->msg_pool.host,
- get_order(mq->q_size * mq->msg_size));
+ dma_free_coherent(&c2dev->pcidev->dev, mq->q_size * mq->msg_size,
+ mq->msg_pool.host, pci_unmap_addr(mq, mapping));
}
static int c2_alloc_cq_buf(struct c2_dev *c2dev, struct c2_mq *mq, int q_size,
int msg_size)
{
- unsigned long pool_start;
+ u8 *pool_start;
- pool_start = __get_free_pages(GFP_KERNEL,
- get_order(q_size * msg_size));
+ pool_start = dma_alloc_coherent(&c2dev->pcidev->dev, q_size * msg_size,
+ &mq->host_dma, GFP_KERNEL);
if (!pool_start)
return -ENOMEM;
@@ -267,13 +264,10 @@ static int c2_alloc_cq_buf(struct c2_dev
0, /* index (currently unknown) */
q_size,
msg_size,
- (u8 *) pool_start,
+ pool_start,
NULL, /* peer (currently unknown) */
C2_MQ_HOST_TARGET);
- mq->host_dma = dma_map_single(c2dev->ibdev.dma_device,
- (void *)pool_start,
- q_size * msg_size, DMA_FROM_DEVICE);
pci_unmap_addr_set(mq, mapping, mq->host_dma);
return 0;
diff --git a/drivers/infiniband/hw/amso1100/c2_rnic.c b/drivers/infiniband/hw/amso1100/c2_rnic.c
index 30409e1..21d9612 100644
--- a/drivers/infiniband/hw/amso1100/c2_rnic.c
+++ b/drivers/infiniband/hw/amso1100/c2_rnic.c
@@ -517,14 +517,12 @@ int c2_rnic_init(struct c2_dev *c2dev)
/* Initialize the Verbs Reply Queue */
qsize = be32_to_cpu(readl(mmio_regs + C2_REGS_Q1_QSIZE));
msgsize = be32_to_cpu(readl(mmio_regs + C2_REGS_Q1_MSGSIZE));
- q1_pages = kmalloc(qsize * msgsize, GFP_KERNEL);
+ q1_pages = dma_alloc_coherent(&c2dev->pcidev->dev, qsize * msgsize,
+ &c2dev->rep_vq.host_dma, GFP_KERNEL);
if (!q1_pages) {
err = -ENOMEM;
goto bail1;
}
- c2dev->rep_vq.host_dma = dma_map_single(c2dev->ibdev.dma_device,
- (void *)q1_pages, qsize * msgsize,
- DMA_FROM_DEVICE);
pci_unmap_addr_set(&c2dev->rep_vq, mapping, c2dev->rep_vq.host_dma);
pr_debug("%s rep_vq va %p dma %llx\n", __FUNCTION__, q1_pages,
(unsigned long long) c2dev->rep_vq.host_dma);
@@ -540,17 +538,15 @@ int c2_rnic_init(struct c2_dev *c2dev)
/* Initialize the Asynchronus Event Queue */
qsize = be32_to_cpu(readl(mmio_regs + C2_REGS_Q2_QSIZE));
msgsize = be32_to_cpu(readl(mmio_regs + C2_REGS_Q2_MSGSIZE));
- q2_pages = kmalloc(qsize * msgsize, GFP_KERNEL);
+ q2_pages = dma_alloc_coherent(&c2dev->pcidev->dev, qsize * msgsize,
+ &c2dev->aeq.host_dma, GFP_KERNEL);
if (!q2_pages) {
err = -ENOMEM;
goto bail2;
}
- c2dev->aeq.host_dma = dma_map_single(c2dev->ibdev.dma_device,
- (void *)q2_pages, qsize * msgsize,
- DMA_FROM_DEVICE);
pci_unmap_addr_set(&c2dev->aeq, mapping, c2dev->aeq.host_dma);
- pr_debug("%s aeq va %p dma %llx\n", __FUNCTION__, q1_pages,
- (unsigned long long) c2dev->rep_vq.host_dma);
+ pr_debug("%s aeq va %p dma %llx\n", __FUNCTION__, q2_pages,
+ (unsigned long long) c2dev->aeq.host_dma);
c2_mq_rep_init(&c2dev->aeq,
2,
qsize,
@@ -597,17 +593,13 @@ int c2_rnic_init(struct c2_dev *c2dev)
bail4:
vq_term(c2dev);
bail3:
- dma_unmap_single(c2dev->ibdev.dma_device,
- pci_unmap_addr(&c2dev->aeq, mapping),
- c2dev->aeq.q_size * c2dev->aeq.msg_size,
- DMA_FROM_DEVICE);
- kfree(q2_pages);
+ dma_free_coherent(&c2dev->pcidev->dev,
+ c2dev->aeq.q_size * c2dev->aeq.msg_size,
+ q2_pages, pci_unmap_addr(&c2dev->aeq, mapping));
bail2:
- dma_unmap_single(c2dev->ibdev.dma_device,
- pci_unmap_addr(&c2dev->rep_vq, mapping),
- c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
- DMA_FROM_DEVICE);
- kfree(q1_pages);
+ dma_free_coherent(&c2dev->pcidev->dev,
+ c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
+ q1_pages, pci_unmap_addr(&c2dev->rep_vq, mapping));
bail1:
c2_free_mqsp_pool(c2dev, c2dev->kern_mqsp_pool);
bail0:
@@ -640,19 +632,17 @@ void c2_rnic_term(struct c2_dev *c2dev)
/* Free the verbs request allocator */
vq_term(c2dev);
- /* Unmap and free the asynchronus event queue */
- dma_unmap_single(c2dev->ibdev.dma_device,
- pci_unmap_addr(&c2dev->aeq, mapping),
- c2dev->aeq.q_size * c2dev->aeq.msg_size,
- DMA_FROM_DEVICE);
- kfree(c2dev->aeq.msg_pool.host);
-
- /* Unmap and free the verbs reply queue */
- dma_unmap_single(c2dev->ibdev.dma_device,
- pci_unmap_addr(&c2dev->rep_vq, mapping),
- c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
- DMA_FROM_DEVICE);
- kfree(c2dev->rep_vq.msg_pool.host);
+ /* Free the asynchronus event queue */
+ dma_free_coherent(&c2dev->pcidev->dev,
+ c2dev->aeq.q_size * c2dev->aeq.msg_size,
+ c2dev->aeq.msg_pool.host,
+ pci_unmap_addr(&c2dev->aeq, mapping));
+
+ /* Free the verbs reply queue */
+ dma_free_coherent(&c2dev->pcidev->dev,
+ c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
+ c2dev->rep_vq.msg_pool.host,
+ pci_unmap_addr(&c2dev->rep_vq, mapping));
/* Free the MQ shared pointer pool */
c2_free_mqsp_pool(c2dev, c2dev->kern_mqsp_pool);
diff --git a/drivers/infiniband/hw/ehca/ehca_tools.h b/drivers/infiniband/hw/ehca/ehca_tools.h
index 809da3e..973c4b5 100644
--- a/drivers/infiniband/hw/ehca/ehca_tools.h
+++ b/drivers/infiniband/hw/ehca/ehca_tools.h
@@ -63,6 +63,7 @@ #include <asm/abs_addr.h>
#include <asm/ibmebus.h>
#include <asm/io.h>
#include <asm/pgtable.h>
+#include <asm/hvcall.h>
extern int ehca_debug_level;
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c
index 99a94d7..768df72 100644
--- a/drivers/infiniband/hw/mthca/mthca_cmd.c
+++ b/drivers/infiniband/hw/mthca/mthca_cmd.c
@@ -1820,11 +1820,11 @@ int mthca_MAD_IFC(struct mthca_dev *dev,
#define MAD_IFC_BOX_SIZE 0x400
#define MAD_IFC_MY_QPN_OFFSET 0x100
-#define MAD_IFC_RQPN_OFFSET 0x104
-#define MAD_IFC_SL_OFFSET 0x108
-#define MAD_IFC_G_PATH_OFFSET 0x109
-#define MAD_IFC_RLID_OFFSET 0x10a
-#define MAD_IFC_PKEY_OFFSET 0x10e
+#define MAD_IFC_RQPN_OFFSET 0x108
+#define MAD_IFC_SL_OFFSET 0x10c
+#define MAD_IFC_G_PATH_OFFSET 0x10d
+#define MAD_IFC_RLID_OFFSET 0x10e
+#define MAD_IFC_PKEY_OFFSET 0x112
#define MAD_IFC_GRH_OFFSET 0x140
inmailbox = mthca_alloc_mailbox(dev, GFP_KERNEL);
@@ -1862,7 +1862,7 @@ #define MAD_IFC_GRH_OFFSET 0x140
val = in_wc->dlid_path_bits |
(in_wc->wc_flags & IB_WC_GRH ? 0x80 : 0);
- MTHCA_PUT(inbox, val, MAD_IFC_GRH_OFFSET);
+ MTHCA_PUT(inbox, val, MAD_IFC_G_PATH_OFFSET);
MTHCA_PUT(inbox, in_wc->slid, MAD_IFC_RLID_OFFSET);
MTHCA_PUT(inbox, in_wc->pkey_index, MAD_IFC_PKEY_OFFSET);
@@ -1870,7 +1870,7 @@ #define MAD_IFC_GRH_OFFSET 0x140
if (in_grh)
memcpy(inbox + MAD_IFC_GRH_OFFSET, in_grh, 40);
- op_modifier |= 0x10;
+ op_modifier |= 0x4;
in_modifier |= in_wc->slid << 16;
}
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
index eb6f98d..9b2041e 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -363,11 +363,11 @@ iscsi_iser_conn_start(struct iscsi_cls_c
struct iscsi_conn *conn = cls_conn->dd_data;
int err;
- err = iscsi_conn_start(cls_conn);
+ err = iser_conn_set_full_featured_mode(conn);
if (err)
return err;
- return iser_conn_set_full_featured_mode(conn);
+ return iscsi_conn_start(cls_conn);
}
static struct iscsi_transport iscsi_iser_transport;
diff --git a/include/rdma/ib_addr.h b/include/rdma/ib_addr.h
index 81b6230..c094e50 100644
--- a/include/rdma/ib_addr.h
+++ b/include/rdma/ib_addr.h
@@ -36,6 +36,22 @@ #include <linux/netdevice.h>
#include <linux/socket.h>
#include <rdma/ib_verbs.h>
+struct rdma_addr_client {
+ atomic_t refcount;
+ struct completion comp;
+};
+
+/**
+ * rdma_addr_register_client - Register an address client.
+ */
+void rdma_addr_register_client(struct rdma_addr_client *client);
+
+/**
+ * rdma_addr_unregister_client - Deregister an address client.
+ * @client: Client object to deregister.
+ */
+void rdma_addr_unregister_client(struct rdma_addr_client *client);
+
struct rdma_dev_addr {
unsigned char src_dev_addr[MAX_ADDR_LEN];
unsigned char dst_dev_addr[MAX_ADDR_LEN];
@@ -52,6 +68,7 @@ int rdma_translate_ip(struct sockaddr *a
/**
* rdma_resolve_ip - Resolve source and destination IP addresses to
* RDMA hardware addresses.
+ * @client: Address client associated with request.
* @src_addr: An optional source address to use in the resolution. If a
* source address is not provided, a usable address will be returned via
* the callback.
@@ -64,7 +81,8 @@ int rdma_translate_ip(struct sockaddr *a
* or been canceled. A status of 0 indicates success.
* @context: User-specified context associated with the call.
*/
-int rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr,
+int rdma_resolve_ip(struct rdma_addr_client *client,
+ struct sockaddr *src_addr, struct sockaddr *dst_addr,
struct rdma_dev_addr *addr, int timeout_ms,
void (*callback)(int status, struct sockaddr *src_addr,
struct rdma_dev_addr *addr, void *context),
diff --git a/include/rdma/ib_user_verbs.h b/include/rdma/ib_user_verbs.h
index db1b814..64a721f 100644
--- a/include/rdma/ib_user_verbs.h
+++ b/include/rdma/ib_user_verbs.h
@@ -458,7 +458,7 @@ struct ib_uverbs_query_qp_resp {
__u8 cur_qp_state;
__u8 path_mtu;
__u8 path_mig_state;
- __u8 en_sqd_async_notify;
+ __u8 sq_draining;
__u8 max_rd_atomic;
__u8 max_dest_rd_atomic;
__u8 min_rnr_timer;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-10-17 21:44 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-10-17 21:44 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This includes various fixes found since 2.6.19-rc2:
Adrian Bunk:
RDMA/amso1100: Fix a NULL dereference in error path
Arthur Kepner:
IB/mthca: Use mmiowb after doorbell ring
Henrik Kretzschmar:
RDMA/amso1100: pci_module_init() conversion
Robert Walsh:
IB/ipath: Initialize diagpkt file on device init only
drivers/infiniband/hw/amso1100/c2.c | 2 -
drivers/infiniband/hw/amso1100/c2_rnic.c | 4 +-
drivers/infiniband/hw/ipath/ipath_diag.c | 65 ++++++++++++++++------------
drivers/infiniband/hw/ipath/ipath_driver.c | 10 ----
drivers/infiniband/hw/ipath/ipath_kernel.h | 3 -
drivers/infiniband/hw/mthca/mthca_cq.c | 7 +++
drivers/infiniband/hw/mthca/mthca_qp.c | 19 ++++++++
drivers/infiniband/hw/mthca/mthca_srq.c | 8 +++
8 files changed, 75 insertions(+), 43 deletions(-)
diff --git a/drivers/infiniband/hw/amso1100/c2.c b/drivers/infiniband/hw/amso1100/c2.c
index dc1ebea..9e7bd94 100644
--- a/drivers/infiniband/hw/amso1100/c2.c
+++ b/drivers/infiniband/hw/amso1100/c2.c
@@ -1243,7 +1243,7 @@ static struct pci_driver c2_pci_driver =
static int __init c2_init_module(void)
{
- return pci_module_init(&c2_pci_driver);
+ return pci_register_driver(&c2_pci_driver);
}
static void __exit c2_exit_module(void)
diff --git a/drivers/infiniband/hw/amso1100/c2_rnic.c b/drivers/infiniband/hw/amso1100/c2_rnic.c
index e37c568..30409e1 100644
--- a/drivers/infiniband/hw/amso1100/c2_rnic.c
+++ b/drivers/infiniband/hw/amso1100/c2_rnic.c
@@ -150,8 +150,8 @@ static int c2_rnic_query(struct c2_dev *
(struct c2wr_rnic_query_rep *) (unsigned long) (vq_req->reply_msg);
if (!reply)
err = -ENOMEM;
-
- err = c2_errno(reply);
+ else
+ err = c2_errno(reply);
if (err)
goto bail2;
diff --git a/drivers/infiniband/hw/ipath/ipath_diag.c b/drivers/infiniband/hw/ipath/ipath_diag.c
index 29958b6..28c087b 100644
--- a/drivers/infiniband/hw/ipath/ipath_diag.c
+++ b/drivers/infiniband/hw/ipath/ipath_diag.c
@@ -67,19 +67,54 @@ static struct file_operations diag_file_
.release = ipath_diag_release
};
+static ssize_t ipath_diagpkt_write(struct file *fp,
+ const char __user *data,
+ size_t count, loff_t *off);
+
+static struct file_operations diagpkt_file_ops = {
+ .owner = THIS_MODULE,
+ .write = ipath_diagpkt_write,
+};
+
+static atomic_t diagpkt_count = ATOMIC_INIT(0);
+static struct cdev *diagpkt_cdev;
+static struct class_device *diagpkt_class_dev;
+
int ipath_diag_add(struct ipath_devdata *dd)
{
char name[16];
+ int ret = 0;
+
+ if (atomic_inc_return(&diagpkt_count) == 1) {
+ ret = ipath_cdev_init(IPATH_DIAGPKT_MINOR,
+ "ipath_diagpkt", &diagpkt_file_ops,
+ &diagpkt_cdev, &diagpkt_class_dev);
+
+ if (ret) {
+ ipath_dev_err(dd, "Couldn't create ipath_diagpkt "
+ "device: %d", ret);
+ goto done;
+ }
+ }
snprintf(name, sizeof(name), "ipath_diag%d", dd->ipath_unit);
- return ipath_cdev_init(IPATH_DIAG_MINOR_BASE + dd->ipath_unit, name,
- &diag_file_ops, &dd->diag_cdev,
- &dd->diag_class_dev);
+ ret = ipath_cdev_init(IPATH_DIAG_MINOR_BASE + dd->ipath_unit, name,
+ &diag_file_ops, &dd->diag_cdev,
+ &dd->diag_class_dev);
+ if (ret)
+ ipath_dev_err(dd, "Couldn't create %s device: %d",
+ name, ret);
+
+done:
+ return ret;
}
void ipath_diag_remove(struct ipath_devdata *dd)
{
+ if (atomic_dec_and_test(&diagpkt_count))
+ ipath_cdev_cleanup(&diagpkt_cdev, &diagpkt_class_dev);
+
ipath_cdev_cleanup(&dd->diag_cdev, &dd->diag_class_dev);
}
@@ -275,30 +310,6 @@ bail:
return ret;
}
-static ssize_t ipath_diagpkt_write(struct file *fp,
- const char __user *data,
- size_t count, loff_t *off);
-
-static struct file_operations diagpkt_file_ops = {
- .owner = THIS_MODULE,
- .write = ipath_diagpkt_write,
-};
-
-static struct cdev *diagpkt_cdev;
-static struct class_device *diagpkt_class_dev;
-
-int __init ipath_diagpkt_add(void)
-{
- return ipath_cdev_init(IPATH_DIAGPKT_MINOR,
- "ipath_diagpkt", &diagpkt_file_ops,
- &diagpkt_cdev, &diagpkt_class_dev);
-}
-
-void __exit ipath_diagpkt_remove(void)
-{
- ipath_cdev_cleanup(&diagpkt_cdev, &diagpkt_class_dev);
-}
-
/**
* ipath_diagpkt_write - write an IB packet
* @fp: the diag data device file pointer
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index 12cefa6..b4ffaa7 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -2005,18 +2005,8 @@ static int __init infinipath_init(void)
goto bail_group;
}
- ret = ipath_diagpkt_add();
- if (ret < 0) {
- printk(KERN_ERR IPATH_DRV_NAME ": Unable to create "
- "diag data device: error %d\n", -ret);
- goto bail_ipathfs;
- }
-
goto bail;
-bail_ipathfs:
- ipath_exit_ipathfs();
-
bail_group:
ipath_driver_remove_group(&ipath_driver.driver);
diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h
index 7c43669..06d5020 100644
--- a/drivers/infiniband/hw/ipath/ipath_kernel.h
+++ b/drivers/infiniband/hw/ipath/ipath_kernel.h
@@ -869,9 +869,6 @@ int ipath_device_create_group(struct dev
void ipath_device_remove_group(struct device *, struct ipath_devdata *);
int ipath_expose_reset(struct device *);
-int ipath_diagpkt_add(void);
-void ipath_diagpkt_remove(void);
-
int ipath_init_ipathfs(void);
void ipath_exit_ipathfs(void);
int ipathfs_add_device(struct ipath_devdata *);
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
index e393681..149b369 100644
--- a/drivers/infiniband/hw/mthca/mthca_cq.c
+++ b/drivers/infiniband/hw/mthca/mthca_cq.c
@@ -39,6 +39,8 @@
#include <linux/init.h>
#include <linux/hardirq.h>
+#include <asm/io.h>
+
#include <rdma/ib_pack.h>
#include "mthca_dev.h"
@@ -210,6 +212,11 @@ static inline void update_cons_index(str
mthca_write64(doorbell,
dev->kar + MTHCA_CQ_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
+ /*
+ * Make sure doorbells don't leak out of CQ spinlock
+ * and reach the HCA out of order:
+ */
+ mmiowb();
}
}
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index 5e5c58b..6a7822e 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -39,6 +39,8 @@ #include <linux/init.h>
#include <linux/string.h>
#include <linux/slab.h>
+#include <asm/io.h>
+
#include <rdma/ib_verbs.h>
#include <rdma/ib_cache.h>
#include <rdma/ib_pack.h>
@@ -1732,6 +1734,11 @@ out:
mthca_write64(doorbell,
dev->kar + MTHCA_SEND_DOORBELL,
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
+ /*
+ * Make sure doorbells don't leak out of SQ spinlock
+ * and reach the HCA out of order:
+ */
+ mmiowb();
}
qp->sq.next_ind = ind;
@@ -1851,6 +1858,12 @@ out:
qp->rq.next_ind = ind;
qp->rq.head += nreq;
+ /*
+ * Make sure doorbells don't leak out of RQ spinlock and reach
+ * the HCA out of order:
+ */
+ mmiowb();
+
spin_unlock_irqrestore(&qp->rq.lock, flags);
return err;
}
@@ -2112,6 +2125,12 @@ out:
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
+ /*
+ * Make sure doorbells don't leak out of SQ spinlock and reach
+ * the HCA out of order:
+ */
+ mmiowb();
+
spin_unlock_irqrestore(&qp->sq.lock, flags);
return err;
}
diff --git a/drivers/infiniband/hw/mthca/mthca_srq.c b/drivers/infiniband/hw/mthca/mthca_srq.c
index 92a72f5..f5d7677 100644
--- a/drivers/infiniband/hw/mthca/mthca_srq.c
+++ b/drivers/infiniband/hw/mthca/mthca_srq.c
@@ -35,6 +35,8 @@
#include <linux/slab.h>
#include <linux/string.h>
+#include <asm/io.h>
+
#include "mthca_dev.h"
#include "mthca_cmd.h"
#include "mthca_memfree.h"
@@ -595,6 +597,12 @@ int mthca_tavor_post_srq_recv(struct ib_
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
}
+ /*
+ * Make sure doorbells don't leak out of SRQ spinlock and
+ * reach the HCA out of order:
+ */
+ mmiowb();
+
spin_unlock_irqrestore(&srq->lock, flags);
return err;
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-10-10 21:03 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-10-10 21:03 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This includes various fixes found since 2.6.19-rc1:
Ishai Rabinovitz:
IB/srp: Remove redundant memset()
IB/srp: Enable multiple connections to the same target
Jack Morgenstein:
IB/mthca: Query port fix
Michael S. Tsirkin:
IB/mthca: Fix off-by-one in mthca SRQ creation
Roland Dreier:
RDMA/amso1100: Fix build with debugging off
IPoIB: Check for DMA mapping error for TX packets
Sean Hefty:
IB/cm: Fix timewait crash after module unload
IB/cm: Send DREP in response to unmatched DREQ
Tom Tucker:
RDMA/amso1100: Add spinlocks to serialize ib_post_send/ib_post_recv
drivers/infiniband/core/cm.c | 84 ++++++++++++++++++++------
drivers/infiniband/hw/amso1100/c2_ae.c | 2 -
drivers/infiniband/hw/amso1100/c2_qp.c | 16 ++++-
drivers/infiniband/hw/mthca/mthca_provider.c | 2 +
drivers/infiniband/hw/mthca/mthca_srq.c | 6 +-
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 5 ++
drivers/infiniband/ulp/srp/ib_srp.c | 27 +++++---
drivers/infiniband/ulp/srp/ib_srp.h | 2 -
8 files changed, 106 insertions(+), 38 deletions(-)
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index f35fcc4..25b1018 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -75,6 +75,7 @@ static struct ib_cm {
struct rb_root remote_sidr_table;
struct idr local_id_table;
__be32 random_id_operand;
+ struct list_head timewait_list;
struct workqueue_struct *wq;
} cm;
@@ -112,6 +113,7 @@ struct cm_work {
struct cm_timewait_info {
struct cm_work work; /* Must be first. */
+ struct list_head list;
struct rb_node remote_qp_node;
struct rb_node remote_id_node;
__be64 remote_ca_guid;
@@ -647,13 +649,6 @@ static inline int cm_convert_to_ms(int i
static void cm_cleanup_timewait(struct cm_timewait_info *timewait_info)
{
- unsigned long flags;
-
- if (!timewait_info->inserted_remote_id &&
- !timewait_info->inserted_remote_qp)
- return;
-
- spin_lock_irqsave(&cm.lock, flags);
if (timewait_info->inserted_remote_id) {
rb_erase(&timewait_info->remote_id_node, &cm.remote_id_table);
timewait_info->inserted_remote_id = 0;
@@ -663,7 +658,6 @@ static void cm_cleanup_timewait(struct c
rb_erase(&timewait_info->remote_qp_node, &cm.remote_qp_table);
timewait_info->inserted_remote_qp = 0;
}
- spin_unlock_irqrestore(&cm.lock, flags);
}
static struct cm_timewait_info * cm_create_timewait_info(__be32 local_id)
@@ -684,8 +678,12 @@ static struct cm_timewait_info * cm_crea
static void cm_enter_timewait(struct cm_id_private *cm_id_priv)
{
int wait_time;
+ unsigned long flags;
+ spin_lock_irqsave(&cm.lock, flags);
cm_cleanup_timewait(cm_id_priv->timewait_info);
+ list_add_tail(&cm_id_priv->timewait_info->list, &cm.timewait_list);
+ spin_unlock_irqrestore(&cm.lock, flags);
/*
* The cm_id could be destroyed by the user before we exit timewait.
@@ -701,9 +699,13 @@ static void cm_enter_timewait(struct cm_
static void cm_reset_to_idle(struct cm_id_private *cm_id_priv)
{
+ unsigned long flags;
+
cm_id_priv->id.state = IB_CM_IDLE;
if (cm_id_priv->timewait_info) {
+ spin_lock_irqsave(&cm.lock, flags);
cm_cleanup_timewait(cm_id_priv->timewait_info);
+ spin_unlock_irqrestore(&cm.lock, flags);
kfree(cm_id_priv->timewait_info);
cm_id_priv->timewait_info = NULL;
}
@@ -1307,6 +1309,7 @@ static struct cm_id_private * cm_match_r
if (timewait_info) {
cur_cm_id_priv = cm_get_id(timewait_info->work.local_id,
timewait_info->work.remote_id);
+ cm_cleanup_timewait(cm_id_priv->timewait_info);
spin_unlock_irqrestore(&cm.lock, flags);
if (cur_cm_id_priv) {
cm_dup_req_handler(work, cur_cm_id_priv);
@@ -1315,7 +1318,8 @@ static struct cm_id_private * cm_match_r
cm_issue_rej(work->port, work->mad_recv_wc,
IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REQ,
NULL, 0);
- goto error;
+ listen_cm_id_priv = NULL;
+ goto out;
}
/* Find matching listen request. */
@@ -1323,21 +1327,20 @@ static struct cm_id_private * cm_match_r
req_msg->service_id,
req_msg->private_data);
if (!listen_cm_id_priv) {
+ cm_cleanup_timewait(cm_id_priv->timewait_info);
spin_unlock_irqrestore(&cm.lock, flags);
cm_issue_rej(work->port, work->mad_recv_wc,
IB_CM_REJ_INVALID_SERVICE_ID, CM_MSG_RESPONSE_REQ,
NULL, 0);
- goto error;
+ goto out;
}
atomic_inc(&listen_cm_id_priv->refcount);
atomic_inc(&cm_id_priv->refcount);
cm_id_priv->id.state = IB_CM_REQ_RCVD;
atomic_inc(&cm_id_priv->work_count);
spin_unlock_irqrestore(&cm.lock, flags);
+out:
return listen_cm_id_priv;
-
-error: cm_cleanup_timewait(cm_id_priv->timewait_info);
- return NULL;
}
static int cm_req_handler(struct cm_work *work)
@@ -1899,6 +1902,32 @@ out: spin_unlock_irqrestore(&cm_id_priv-
}
EXPORT_SYMBOL(ib_send_cm_drep);
+static int cm_issue_drep(struct cm_port *port,
+ struct ib_mad_recv_wc *mad_recv_wc)
+{
+ struct ib_mad_send_buf *msg = NULL;
+ struct cm_dreq_msg *dreq_msg;
+ struct cm_drep_msg *drep_msg;
+ int ret;
+
+ ret = cm_alloc_response_msg(port, mad_recv_wc, &msg);
+ if (ret)
+ return ret;
+
+ dreq_msg = (struct cm_dreq_msg *) mad_recv_wc->recv_buf.mad;
+ drep_msg = (struct cm_drep_msg *) msg->mad;
+
+ cm_format_mad_hdr(&drep_msg->hdr, CM_DREP_ATTR_ID, dreq_msg->hdr.tid);
+ drep_msg->remote_comm_id = dreq_msg->local_comm_id;
+ drep_msg->local_comm_id = dreq_msg->remote_comm_id;
+
+ ret = ib_post_send_mad(msg, NULL);
+ if (ret)
+ cm_free_msg(msg);
+
+ return ret;
+}
+
static int cm_dreq_handler(struct cm_work *work)
{
struct cm_id_private *cm_id_priv;
@@ -1910,8 +1939,10 @@ static int cm_dreq_handler(struct cm_wor
dreq_msg = (struct cm_dreq_msg *)work->mad_recv_wc->recv_buf.mad;
cm_id_priv = cm_acquire_id(dreq_msg->remote_comm_id,
dreq_msg->local_comm_id);
- if (!cm_id_priv)
+ if (!cm_id_priv) {
+ cm_issue_drep(work->port, work->mad_recv_wc);
return -EINVAL;
+ }
work->cm_event.private_data = &dreq_msg->private_data;
@@ -2601,28 +2632,29 @@ static int cm_timewait_handler(struct cm
{
struct cm_timewait_info *timewait_info;
struct cm_id_private *cm_id_priv;
- unsigned long flags;
int ret;
timewait_info = (struct cm_timewait_info *)work;
- cm_cleanup_timewait(timewait_info);
+ spin_lock_irq(&cm.lock);
+ list_del(&timewait_info->list);
+ spin_unlock_irq(&cm.lock);
cm_id_priv = cm_acquire_id(timewait_info->work.local_id,
timewait_info->work.remote_id);
if (!cm_id_priv)
return -EINVAL;
- spin_lock_irqsave(&cm_id_priv->lock, flags);
+ spin_lock_irq(&cm_id_priv->lock);
if (cm_id_priv->id.state != IB_CM_TIMEWAIT ||
cm_id_priv->remote_qpn != timewait_info->remote_qpn) {
- spin_unlock_irqrestore(&cm_id_priv->lock, flags);
+ spin_unlock_irq(&cm_id_priv->lock);
goto out;
}
cm_id_priv->id.state = IB_CM_IDLE;
ret = atomic_inc_and_test(&cm_id_priv->work_count);
if (!ret)
list_add_tail(&work->list, &cm_id_priv->work_list);
- spin_unlock_irqrestore(&cm_id_priv->lock, flags);
+ spin_unlock_irq(&cm_id_priv->lock);
if (ret)
cm_process_work(cm_id_priv, work);
@@ -3374,6 +3406,7 @@ static int __init ib_cm_init(void)
idr_init(&cm.local_id_table);
get_random_bytes(&cm.random_id_operand, sizeof cm.random_id_operand);
idr_pre_get(&cm.local_id_table, GFP_KERNEL);
+ INIT_LIST_HEAD(&cm.timewait_list);
cm.wq = create_workqueue("ib_cm");
if (!cm.wq)
@@ -3391,7 +3424,20 @@ error:
static void __exit ib_cm_cleanup(void)
{
+ struct cm_timewait_info *timewait_info, *tmp;
+
+ spin_lock_irq(&cm.lock);
+ list_for_each_entry(timewait_info, &cm.timewait_list, list)
+ cancel_delayed_work(&timewait_info->work.work);
+ spin_unlock_irq(&cm.lock);
+
destroy_workqueue(cm.wq);
+
+ list_for_each_entry_safe(timewait_info, tmp, &cm.timewait_list, list) {
+ list_del(&timewait_info->list);
+ kfree(timewait_info);
+ }
+
ib_unregister_client(&cm_client);
idr_destroy(&cm.local_id_table);
}
diff --git a/drivers/infiniband/hw/amso1100/c2_ae.c b/drivers/infiniband/hw/amso1100/c2_ae.c
index 3aae497..a31439b 100644
--- a/drivers/infiniband/hw/amso1100/c2_ae.c
+++ b/drivers/infiniband/hw/amso1100/c2_ae.c
@@ -66,7 +66,6 @@ static int c2_convert_cm_status(u32 c2_s
}
}
-#ifdef DEBUG
static const char* to_event_str(int event)
{
static const char* event_str[] = {
@@ -144,7 +143,6 @@ static const char *to_qp_state_str(int s
return "<invalid QP state>";
};
}
-#endif
void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)
{
diff --git a/drivers/infiniband/hw/amso1100/c2_qp.c b/drivers/infiniband/hw/amso1100/c2_qp.c
index 1226113..5bcf697 100644
--- a/drivers/infiniband/hw/amso1100/c2_qp.c
+++ b/drivers/infiniband/hw/amso1100/c2_qp.c
@@ -35,6 +35,8 @@
*
*/
+#include <linux/delay.h>
+
#include "c2.h"
#include "c2_vq.h"
#include "c2_status.h"
@@ -705,10 +707,8 @@ static inline void c2_activity(struct c2
* cannot get on the bus and the card and system hang in a
* deadlock -- thus the need for this code. [TOT]
*/
- while (readl(c2dev->regs + PCI_BAR0_ADAPTER_HINT) & 0x80000000) {
- set_current_state(TASK_UNINTERRUPTIBLE);
- schedule_timeout(0);
- }
+ while (readl(c2dev->regs + PCI_BAR0_ADAPTER_HINT) & 0x80000000)
+ udelay(10);
__raw_writel(C2_HINT_MAKE(mq_index, shared),
c2dev->regs + PCI_BAR0_ADAPTER_HINT);
@@ -766,6 +766,7 @@ int c2_post_send(struct ib_qp *ibqp, str
struct c2_dev *c2dev = to_c2dev(ibqp->device);
struct c2_qp *qp = to_c2qp(ibqp);
union c2wr wr;
+ unsigned long lock_flags;
int err = 0;
u32 flags;
@@ -881,8 +882,10 @@ int c2_post_send(struct ib_qp *ibqp, str
/*
* Post the puppy!
*/
+ spin_lock_irqsave(&qp->lock, lock_flags);
err = qp_wr_post(&qp->sq_mq, &wr, qp, msg_size);
if (err) {
+ spin_unlock_irqrestore(&qp->lock, lock_flags);
break;
}
@@ -890,6 +893,7 @@ int c2_post_send(struct ib_qp *ibqp, str
* Enqueue mq index to activity FIFO.
*/
c2_activity(c2dev, qp->sq_mq.index, qp->sq_mq.hint_count);
+ spin_unlock_irqrestore(&qp->lock, lock_flags);
ib_wr = ib_wr->next;
}
@@ -905,6 +909,7 @@ int c2_post_receive(struct ib_qp *ibqp,
struct c2_dev *c2dev = to_c2dev(ibqp->device);
struct c2_qp *qp = to_c2qp(ibqp);
union c2wr wr;
+ unsigned long lock_flags;
int err = 0;
if (qp->state > IB_QPS_RTS)
@@ -945,8 +950,10 @@ int c2_post_receive(struct ib_qp *ibqp,
break;
}
+ spin_lock_irqsave(&qp->lock, lock_flags);
err = qp_wr_post(&qp->rq_mq, &wr, qp, qp->rq_mq.msg_size);
if (err) {
+ spin_unlock_irqrestore(&qp->lock, lock_flags);
break;
}
@@ -954,6 +961,7 @@ int c2_post_receive(struct ib_qp *ibqp,
* Enqueue mq index to activity FIFO
*/
c2_activity(c2dev, qp->rq_mq.index, qp->rq_mq.hint_count);
+ spin_unlock_irqrestore(&qp->lock, lock_flags);
ib_wr = ib_wr->next;
}
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
index 981fe2e..fc67f78 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -179,6 +179,8 @@ static int mthca_query_port(struct ib_de
props->max_mtu = out_mad->data[41] & 0xf;
props->active_mtu = out_mad->data[36] >> 4;
props->subnet_timeout = out_mad->data[51] & 0x1f;
+ props->max_vl_num = out_mad->data[37] >> 4;
+ props->init_type_reply = out_mad->data[41] >> 4;
out:
kfree(in_mad);
diff --git a/drivers/infiniband/hw/mthca/mthca_srq.c b/drivers/infiniband/hw/mthca/mthca_srq.c
index 0f316c8..92a72f5 100644
--- a/drivers/infiniband/hw/mthca/mthca_srq.c
+++ b/drivers/infiniband/hw/mthca/mthca_srq.c
@@ -201,6 +201,8 @@ int mthca_alloc_srq(struct mthca_dev *de
if (mthca_is_memfree(dev))
srq->max = roundup_pow_of_two(srq->max + 1);
+ else
+ srq->max = srq->max + 1;
ds = max(64UL,
roundup_pow_of_two(sizeof (struct mthca_next_seg) +
@@ -277,7 +279,7 @@ int mthca_alloc_srq(struct mthca_dev *de
srq->first_free = 0;
srq->last_free = srq->max - 1;
- attr->max_wr = (mthca_is_memfree(dev)) ? srq->max - 1 : srq->max;
+ attr->max_wr = srq->max - 1;
attr->max_sge = srq->max_gs;
return 0;
@@ -413,7 +415,7 @@ int mthca_query_srq(struct ib_srq *ibsrq
srq_attr->srq_limit = be16_to_cpu(tavor_ctx->limit_watermark);
}
- srq_attr->max_wr = (mthca_is_memfree(dev)) ? srq->max - 1 : srq->max;
+ srq_attr->max_wr = srq->max - 1;
srq_attr->max_sge = srq->max_gs;
out:
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index f426a69..8bf5e9e 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -355,6 +355,11 @@ void ipoib_send(struct net_device *dev,
tx_req->skb = skb;
addr = dma_map_single(priv->ca->dma_device, skb->data, skb->len,
DMA_TO_DEVICE);
+ if (unlikely(dma_mapping_error(addr))) {
+ ++priv->stats.tx_errors;
+ dev_kfree_skb_any(skb);
+ return;
+ }
pci_unmap_addr_set(tx_req, mapping, addr);
if (unlikely(post_send(priv, priv->tx_head & (ipoib_sendq_size - 1),
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 44b9e5b..4b09147 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -343,29 +343,32 @@ static int srp_send_req(struct srp_targe
*/
if (target->io_class == SRP_REV10_IB_IO_CLASS) {
memcpy(req->priv.initiator_port_id,
- target->srp_host->initiator_port_id + 8, 8);
+ &target->path.sgid.global.interface_id, 8);
memcpy(req->priv.initiator_port_id + 8,
- target->srp_host->initiator_port_id, 8);
+ &target->initiator_ext, 8);
memcpy(req->priv.target_port_id, &target->ioc_guid, 8);
memcpy(req->priv.target_port_id + 8, &target->id_ext, 8);
} else {
memcpy(req->priv.initiator_port_id,
- target->srp_host->initiator_port_id, 16);
+ &target->initiator_ext, 8);
+ memcpy(req->priv.initiator_port_id + 8,
+ &target->path.sgid.global.interface_id, 8);
memcpy(req->priv.target_port_id, &target->id_ext, 8);
memcpy(req->priv.target_port_id + 8, &target->ioc_guid, 8);
}
/*
* Topspin/Cisco SRP targets will reject our login unless we
- * zero out the first 8 bytes of our initiator port ID. The
- * second 8 bytes must be our local node GUID, but we always
- * use that anyway.
+ * zero out the first 8 bytes of our initiator port ID and set
+ * the second 8 bytes to the local node GUID.
*/
if (topspin_workarounds && !memcmp(&target->ioc_guid, topspin_oui, 3)) {
printk(KERN_DEBUG PFX "Topspin/Cisco initiator port ID workaround "
"activated for target GUID %016llx\n",
(unsigned long long) be64_to_cpu(target->ioc_guid));
memset(req->priv.initiator_port_id, 0, 8);
+ memcpy(req->priv.initiator_port_id + 8,
+ &target->srp_host->dev->dev->node_guid, 8);
}
status = ib_send_cm_req(target->cm_id, &req->param);
@@ -1553,6 +1556,7 @@ enum {
SRP_OPT_MAX_SECT = 1 << 5,
SRP_OPT_MAX_CMD_PER_LUN = 1 << 6,
SRP_OPT_IO_CLASS = 1 << 7,
+ SRP_OPT_INITIATOR_EXT = 1 << 8,
SRP_OPT_ALL = (SRP_OPT_ID_EXT |
SRP_OPT_IOC_GUID |
SRP_OPT_DGID |
@@ -1569,6 +1573,7 @@ static match_table_t srp_opt_tokens = {
{ SRP_OPT_MAX_SECT, "max_sect=%d" },
{ SRP_OPT_MAX_CMD_PER_LUN, "max_cmd_per_lun=%d" },
{ SRP_OPT_IO_CLASS, "io_class=%x" },
+ { SRP_OPT_INITIATOR_EXT, "initiator_ext=%s" },
{ SRP_OPT_ERR, NULL }
};
@@ -1668,6 +1673,12 @@ static int srp_parse_options(const char
target->io_class = token;
break;
+ case SRP_OPT_INITIATOR_EXT:
+ p = match_strdup(args);
+ target->initiator_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
+ kfree(p);
+ break;
+
default:
printk(KERN_WARNING PFX "unknown parameter or missing value "
"'%s' in target creation request\n", p);
@@ -1708,7 +1719,6 @@ static ssize_t srp_create_target(struct
target_host->max_lun = SRP_MAX_LUN;
target = host_to_target(target_host);
- memset(target, 0, sizeof *target);
target->io_class = SRP_REV16A_IB_IO_CLASS;
target->scsi_host = target_host;
@@ -1815,9 +1825,6 @@ static struct srp_host *srp_add_port(str
host->dev = device;
host->port = port;
- host->initiator_port_id[7] = port;
- memcpy(host->initiator_port_id + 8, &device->dev->node_guid, 8);
-
host->class_dev.class = &srp_class;
host->class_dev.dev = device->dev->dma_device;
snprintf(host->class_dev.class_id, BUS_ID_SIZE, "srp-%s-%d",
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h
index 5b581fb..d4e35ef 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.h
+++ b/drivers/infiniband/ulp/srp/ib_srp.h
@@ -91,7 +91,6 @@ struct srp_device {
};
struct srp_host {
- u8 initiator_port_id[16];
struct srp_device *dev;
u8 port;
struct class_device class_dev;
@@ -122,6 +121,7 @@ struct srp_target_port {
__be64 id_ext;
__be64 ioc_guid;
__be64 service_id;
+ __be64 initiator_ext;
u16 io_class;
struct srp_host *srp_host;
struct Scsi_Host *scsi_host;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-10-02 21:57 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-10-02 21:57 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
We're through the bulk of our 2.6.19 merge, but this will get some
fixes for drivers and the RDMA CM:
Hoang-Nam Nguyen:
IB/ehca: Fix device registration
IB/ehca: Tweak trace message format
Krishna Kumar:
RDMA/cma: Fix leak of cm_ids in case of failures
RDMA/cma: Fix device removal race
RDMA/cma: Eliminate unnecessary remove_list
RDMA/cma: Optimize error handling
Ralph Campbell:
IB/ipath: Fix RDMA reads
Sean Hefty:
RDMA/cma: Set status correctly on route resolution error
drivers/infiniband/core/cma.c | 47 +++++++++++++++----------
drivers/infiniband/hw/ehca/ehca_main.c | 36 ++++++++++---------
drivers/infiniband/hw/ehca/ehca_tools.h | 2 +
drivers/infiniband/hw/ipath/ipath_rc.c | 59 +++++++++++++++++--------------
4 files changed, 80 insertions(+), 64 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 1178bd4..9ae4f3a 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -874,23 +874,25 @@ static struct rdma_id_private *cma_new_i
__u16 port;
u8 ip_ver;
+ if (cma_get_net_info(ib_event->private_data, listen_id->ps,
+ &ip_ver, &port, &src, &dst))
+ goto err;
+
id = rdma_create_id(listen_id->event_handler, listen_id->context,
listen_id->ps);
if (IS_ERR(id))
- return NULL;
+ goto err;
+
+ cma_save_net_info(&id->route.addr, &listen_id->route.addr,
+ ip_ver, port, src, dst);
rt = &id->route;
rt->num_paths = ib_event->param.req_rcvd.alternate_path ? 2 : 1;
- rt->path_rec = kmalloc(sizeof *rt->path_rec * rt->num_paths, GFP_KERNEL);
+ rt->path_rec = kmalloc(sizeof *rt->path_rec * rt->num_paths,
+ GFP_KERNEL);
if (!rt->path_rec)
- goto err;
+ goto destroy_id;
- if (cma_get_net_info(ib_event->private_data, listen_id->ps,
- &ip_ver, &port, &src, &dst))
- goto err;
-
- cma_save_net_info(&id->route.addr, &listen_id->route.addr,
- ip_ver, port, src, dst);
rt->path_rec[0] = *ib_event->param.req_rcvd.primary_path;
if (rt->num_paths == 2)
rt->path_rec[1] = *ib_event->param.req_rcvd.alternate_path;
@@ -903,8 +905,10 @@ static struct rdma_id_private *cma_new_i
id_priv = container_of(id, struct rdma_id_private, id);
id_priv->state = CMA_CONNECT;
return id_priv;
-err:
+
+destroy_id:
rdma_destroy_id(id);
+err:
return NULL;
}
@@ -932,6 +936,7 @@ static int cma_req_handler(struct ib_cm_
mutex_unlock(&lock);
if (ret) {
ret = -ENODEV;
+ cma_exch(conn_id, CMA_DESTROYING);
cma_release_remove(conn_id);
rdma_destroy_id(&conn_id->id);
goto out;
@@ -1307,6 +1312,7 @@ static void cma_query_handler(int status
work->old_state = CMA_ROUTE_QUERY;
work->new_state = CMA_ADDR_RESOLVED;
work->event.event = RDMA_CM_EVENT_ROUTE_ERROR;
+ work->event.status = status;
}
queue_work(cma_wq, &work->work);
@@ -1862,6 +1868,11 @@ static int cma_connect_ib(struct rdma_id
ret = ib_send_cm_req(id_priv->cm_id.ib, &req);
out:
+ if (ret && !IS_ERR(id_priv->cm_id.ib)) {
+ ib_destroy_cm_id(id_priv->cm_id.ib);
+ id_priv->cm_id.ib = NULL;
+ }
+
kfree(private_data);
return ret;
}
@@ -1889,10 +1900,8 @@ static int cma_connect_iw(struct rdma_id
cm_id->remote_addr = *sin;
ret = cma_modify_qp_rtr(&id_priv->id);
- if (ret) {
- iw_destroy_cm_id(cm_id);
- return ret;
- }
+ if (ret)
+ goto out;
iw_param.ord = conn_param->initiator_depth;
iw_param.ird = conn_param->responder_resources;
@@ -1904,6 +1913,10 @@ static int cma_connect_iw(struct rdma_id
iw_param.qpn = conn_param->qp_num;
ret = iw_cm_connect(cm_id, &iw_param);
out:
+ if (ret && !IS_ERR(cm_id)) {
+ iw_destroy_cm_id(cm_id);
+ id_priv->cm_id.iw = NULL;
+ }
return ret;
}
@@ -2142,12 +2155,9 @@ static int cma_remove_id_dev(struct rdma
static void cma_process_remove(struct cma_device *cma_dev)
{
- struct list_head remove_list;
struct rdma_id_private *id_priv;
int ret;
- INIT_LIST_HEAD(&remove_list);
-
mutex_lock(&lock);
while (!list_empty(&cma_dev->id_list)) {
id_priv = list_entry(cma_dev->id_list.next,
@@ -2158,8 +2168,7 @@ static void cma_process_remove(struct cm
continue;
}
- list_del(&id_priv->list);
- list_add_tail(&id_priv->list, &remove_list);
+ list_del_init(&id_priv->list);
atomic_inc(&id_priv->refcount);
mutex_unlock(&lock);
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index 2380994..024d511 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
@@ -49,7 +49,7 @@ #include "hcp_if.h"
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Christoph Raisch <raisch@de.ibm.com>");
MODULE_DESCRIPTION("IBM eServer HCA InfiniBand Device Driver");
-MODULE_VERSION("SVNEHCA_0016");
+MODULE_VERSION("SVNEHCA_0017");
int ehca_open_aqp1 = 0;
int ehca_debug_level = 0;
@@ -239,7 +239,7 @@ init_node_guid1:
return ret;
}
-int ehca_register_device(struct ehca_shca *shca)
+int ehca_init_device(struct ehca_shca *shca)
{
int ret;
@@ -317,11 +317,6 @@ int ehca_register_device(struct ehca_shc
/* shca->ib_device.process_mad = ehca_process_mad; */
shca->ib_device.mmap = ehca_mmap;
- ret = ib_register_device(&shca->ib_device);
- if (ret)
- ehca_err(&shca->ib_device,
- "ib_register_device() failed ret=%x", ret);
-
return ret;
}
@@ -561,9 +556,9 @@ static int __devinit ehca_probe(struct i
goto probe1;
}
- ret = ehca_register_device(shca);
+ ret = ehca_init_device(shca);
if (ret) {
- ehca_gen_err("Cannot register Infiniband device");
+ ehca_gen_err("Cannot init ehca device struct");
goto probe1;
}
@@ -571,7 +566,7 @@ static int __devinit ehca_probe(struct i
ret = ehca_create_eq(shca, &shca->eq, EHCA_EQ, 2048);
if (ret) {
ehca_err(&shca->ib_device, "Cannot create EQ.");
- goto probe2;
+ goto probe1;
}
ret = ehca_create_eq(shca, &shca->neq, EHCA_NEQ, 513);
@@ -600,6 +595,13 @@ static int __devinit ehca_probe(struct i
goto probe5;
}
+ ret = ib_register_device(&shca->ib_device);
+ if (ret) {
+ ehca_err(&shca->ib_device,
+ "ib_register_device() failed ret=%x", ret);
+ goto probe6;
+ }
+
/* create AQP1 for port 1 */
if (ehca_open_aqp1 == 1) {
shca->sport[0].port_state = IB_PORT_DOWN;
@@ -607,7 +609,7 @@ static int __devinit ehca_probe(struct i
if (ret) {
ehca_err(&shca->ib_device,
"Cannot create AQP1 for port 1.");
- goto probe6;
+ goto probe7;
}
}
@@ -618,7 +620,7 @@ static int __devinit ehca_probe(struct i
if (ret) {
ehca_err(&shca->ib_device,
"Cannot create AQP1 for port 2.");
- goto probe7;
+ goto probe8;
}
}
@@ -630,12 +632,15 @@ static int __devinit ehca_probe(struct i
return 0;
-probe7:
+probe8:
ret = ehca_destroy_aqp1(&shca->sport[0]);
if (ret)
ehca_err(&shca->ib_device,
"Cannot destroy AQP1 for port 1. ret=%x", ret);
+probe7:
+ ib_unregister_device(&shca->ib_device);
+
probe6:
ret = ehca_dereg_internal_maxmr(shca);
if (ret)
@@ -660,9 +665,6 @@ probe3:
ehca_err(&shca->ib_device,
"Cannot destroy EQ. ret=%x", ret);
-probe2:
- ib_unregister_device(&shca->ib_device);
-
probe1:
ib_dealloc_device(&shca->ib_device);
@@ -750,7 +752,7 @@ int __init ehca_module_init(void)
int ret;
printk(KERN_INFO "eHCA Infiniband Device Driver "
- "(Rel.: SVNEHCA_0016)\n");
+ "(Rel.: SVNEHCA_0017)\n");
idr_init(&ehca_qp_idr);
idr_init(&ehca_cq_idr);
spin_lock_init(&ehca_qp_idr_lock);
diff --git a/drivers/infiniband/hw/ehca/ehca_tools.h b/drivers/infiniband/hw/ehca/ehca_tools.h
index 9f56bb8..809da3e 100644
--- a/drivers/infiniband/hw/ehca/ehca_tools.h
+++ b/drivers/infiniband/hw/ehca/ehca_tools.h
@@ -117,7 +117,7 @@ #define ehca_dmp(adr, len, format, args.
unsigned int l = (unsigned int)(len); \
unsigned char *deb = (unsigned char*)(adr); \
for (x = 0; x < l; x += 16) { \
- printk("EHCA_DMP:%s" format \
+ printk("EHCA_DMP:%s " format \
" adr=%p ofs=%04x %016lx %016lx\n", \
__FUNCTION__, ##args, deb, x, \
*((u64 *)&deb[0]), *((u64 *)&deb[8])); \
diff --git a/drivers/infiniband/hw/ipath/ipath_rc.c b/drivers/infiniband/hw/ipath/ipath_rc.c
index a504cf6..ce60387 100644
--- a/drivers/infiniband/hw/ipath/ipath_rc.c
+++ b/drivers/infiniband/hw/ipath/ipath_rc.c
@@ -241,10 +241,7 @@ int ipath_make_rc_req(struct ipath_qp *q
* original work request since we may need to resend
* it.
*/
- qp->s_sge.sge = wqe->sg_list[0];
- qp->s_sge.sg_list = wqe->sg_list + 1;
- qp->s_sge.num_sge = wqe->wr.num_sge;
- qp->s_len = len = wqe->length;
+ len = wqe->length;
ss = &qp->s_sge;
bth2 = 0;
switch (wqe->wr.opcode) {
@@ -368,14 +365,23 @@ int ipath_make_rc_req(struct ipath_qp *q
default:
goto done;
}
+ qp->s_sge.sge = wqe->sg_list[0];
+ qp->s_sge.sg_list = wqe->sg_list + 1;
+ qp->s_sge.num_sge = wqe->wr.num_sge;
+ qp->s_len = wqe->length;
if (newreq) {
qp->s_tail++;
if (qp->s_tail >= qp->s_size)
qp->s_tail = 0;
}
- bth2 |= qp->s_psn++ & IPATH_PSN_MASK;
- if ((int)(qp->s_psn - qp->s_next_psn) > 0)
- qp->s_next_psn = qp->s_psn;
+ bth2 |= qp->s_psn & IPATH_PSN_MASK;
+ if (wqe->wr.opcode == IB_WR_RDMA_READ)
+ qp->s_psn = wqe->lpsn + 1;
+ else {
+ qp->s_psn++;
+ if ((int)(qp->s_psn - qp->s_next_psn) > 0)
+ qp->s_next_psn = qp->s_psn;
+ }
/*
* Put the QP on the pending list so lost ACKs will cause
* a retry. More than one request can be pending so the
@@ -690,13 +696,6 @@ void ipath_restart_rc(struct ipath_qp *q
struct ipath_swqe *wqe = get_swqe_ptr(qp, qp->s_last);
struct ipath_ibdev *dev;
- /*
- * If there are no requests pending, we are done.
- */
- if (ipath_cmp24(psn, qp->s_next_psn) >= 0 ||
- qp->s_last == qp->s_tail)
- goto done;
-
if (qp->s_retry == 0) {
wc->wr_id = wqe->wr.wr_id;
wc->status = IB_WC_RETRY_EXC_ERR;
@@ -731,8 +730,6 @@ void ipath_restart_rc(struct ipath_qp *q
dev->n_rc_resends += (int)qp->s_psn - (int)psn;
reset_psn(qp, psn);
-
-done:
tasklet_hi_schedule(&qp->s_task);
bail:
@@ -765,6 +762,7 @@ static int do_rc_ack(struct ipath_qp *qp
struct ib_wc wc;
struct ipath_swqe *wqe;
int ret = 0;
+ u32 ack_psn;
/*
* Remove the QP from the timeout queue (or RNR timeout queue).
@@ -777,26 +775,26 @@ static int do_rc_ack(struct ipath_qp *qp
list_del_init(&qp->timerwait);
spin_unlock(&dev->pending_lock);
+ /* Nothing is pending to ACK/NAK. */
+ if (unlikely(qp->s_last == qp->s_tail))
+ goto bail;
+
/*
* Note that NAKs implicitly ACK outstanding SEND and RDMA write
* requests and implicitly NAK RDMA read and atomic requests issued
* before the NAK'ed request. The MSN won't include the NAK'ed
* request but will include an ACK'ed request(s).
*/
+ ack_psn = psn;
+ if (aeth >> 29)
+ ack_psn--;
wqe = get_swqe_ptr(qp, qp->s_last);
- /* Nothing is pending to ACK/NAK. */
- if (qp->s_last == qp->s_tail)
- goto bail;
-
/*
* The MSN might be for a later WQE than the PSN indicates so
* only complete WQEs that the PSN finishes.
*/
- while (ipath_cmp24(psn, wqe->lpsn) >= 0) {
- /* If we are ACKing a WQE, the MSN should be >= the SSN. */
- if (ipath_cmp24(aeth, wqe->ssn) < 0)
- break;
+ while (ipath_cmp24(ack_psn, wqe->lpsn) >= 0) {
/*
* If this request is a RDMA read or atomic, and the ACK is
* for a later operation, this ACK NAKs the RDMA read or
@@ -807,7 +805,8 @@ static int do_rc_ack(struct ipath_qp *qp
* is sent but before the response is received.
*/
if ((wqe->wr.opcode == IB_WR_RDMA_READ &&
- opcode != OP(RDMA_READ_RESPONSE_LAST)) ||
+ (opcode != OP(RDMA_READ_RESPONSE_LAST) ||
+ ipath_cmp24(ack_psn, wqe->lpsn) != 0)) ||
((wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP ||
wqe->wr.opcode == IB_WR_ATOMIC_FETCH_AND_ADD) &&
(opcode != OP(ATOMIC_ACKNOWLEDGE) ||
@@ -825,6 +824,10 @@ static int do_rc_ack(struct ipath_qp *qp
*/
goto bail;
}
+ if (wqe->wr.opcode == IB_WR_RDMA_READ ||
+ wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP ||
+ wqe->wr.opcode == IB_WR_ATOMIC_FETCH_AND_ADD)
+ tasklet_hi_schedule(&qp->s_task);
/* Post a send completion queue entry if requested. */
if (!test_bit(IPATH_S_SIGNAL_REQ_WR, &qp->s_flags) ||
(wqe->wr.send_flags & IB_SEND_SIGNALED)) {
@@ -1055,7 +1058,8 @@ static inline void ipath_rc_rcv_resp(str
/* no AETH, no ACK */
if (unlikely(ipath_cmp24(psn, qp->s_last_psn + 1))) {
dev->n_rdma_seq++;
- ipath_restart_rc(qp, qp->s_last_psn + 1, &wc);
+ if (qp->s_last != qp->s_tail)
+ ipath_restart_rc(qp, qp->s_last_psn + 1, &wc);
goto ack_done;
}
rdma_read:
@@ -1091,7 +1095,8 @@ static inline void ipath_rc_rcv_resp(str
/* ACKs READ req. */
if (unlikely(ipath_cmp24(psn, qp->s_last_psn + 1))) {
dev->n_rdma_seq++;
- ipath_restart_rc(qp, qp->s_last_psn + 1, &wc);
+ if (qp->s_last != qp->s_tail)
+ ipath_restart_rc(qp, qp->s_last_psn + 1, &wc);
goto ack_done;
}
/* FALLTHROUGH */
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] Please pull infiniband.git
@ 2006-09-28 18:20 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-09-28 18:20 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This will merge:
- ipath updates
- iSER updates
- a few of amso1100 Coverity fixes and warning cleanups
Bryan O'Sullivan:
IB/ipath: Limit # of packets sent without an ACK received
IB/ipath: Fix memory leak if allocation fails
IB/ipath: Driver support for userspace sharing of HW contexts
IB/ipath: Support revision 2 InfiniPath PCIE devices
IB/ipath: Unregister from IB core early
IB/ipath: Clean up handling of GUID 0
IB/ipath: Lock and count allocated CQs properly
IB/ipath: Count SRQs properly
IB/ipath: Only allow complete writes to flash
IB/ipath: RC and UC should validate SLID and DLID
IB/ipath: Ensure that PD of MR matches PD of QP checking the Rkey
IB/ipath: Print more informative parity error messages
IB/ipath: Fix compiler warnings and errors on non-x86_64 systems
IB/ipath: Fix mismatch in shifts and masks for printing debug info
IB/ipath: Support multiple simultaneous devices of different types
IB/ipath: Drop unnecessary "(void *)" casts
IB/ipath: Improved support for PowerPC
IB/ipath: Flush RWQEs if access error or invalid error seen
IB/ipath: Call mtrr_del with correct arguments
IB/ipath: Clean up module exit code
IB/ipath: Change HT CRC message to indicate how to resolve problem
IB/ipath: Fix and recover TXE piobuf and PBC parity errors
IB/ipath: Fix EEPROM read when driver is compiled with -Os
IB/ipath: Set CPU affinity early
IB/ipath: Support new PCIE device, QLE7142
IB/ipath: Fix races with ib_resize_cq()
IB/ipath: Fix lockdep error upon "ifconfig ibN down"
Erez Zilber:
IB/iser: Have iSER data transaction object point to iSER conn
IB/iser: DMA unmap unaligned for RDMA data before touching it
IB/iser: Fix the description of iSER in Kconfig
Eric Sesterhenn:
RDMA/amso1100: Fix error path in c2_llp_accept()
Roland Dreier:
RDMA/amso1100: Fix compile warnings
RDMA/amso1100: Fix memory leak in c2_reg_phys_mr()
drivers/infiniband/hw/amso1100/c2_ae.c | 2
drivers/infiniband/hw/amso1100/c2_alloc.c | 2
drivers/infiniband/hw/amso1100/c2_cm.c | 15
drivers/infiniband/hw/amso1100/c2_provider.c | 8
drivers/infiniband/hw/amso1100/c2_rnic.c | 4
drivers/infiniband/hw/ipath/ipath_common.h | 54 +
drivers/infiniband/hw/ipath/ipath_cq.c | 48 +
drivers/infiniband/hw/ipath/ipath_driver.c | 359 ++++-----
drivers/infiniband/hw/ipath/ipath_eeprom.c | 17
drivers/infiniband/hw/ipath/ipath_file_ops.c | 974 ++++++++++++++++++------
drivers/infiniband/hw/ipath/ipath_fs.c | 9
drivers/infiniband/hw/ipath/ipath_iba6110.c | 132 ++-
drivers/infiniband/hw/ipath/ipath_iba6120.c | 263 ++++--
drivers/infiniband/hw/ipath/ipath_init_chip.c | 56 +
drivers/infiniband/hw/ipath/ipath_intr.c | 280 +++++--
drivers/infiniband/hw/ipath/ipath_kernel.h | 116 +++
drivers/infiniband/hw/ipath/ipath_keys.c | 12
drivers/infiniband/hw/ipath/ipath_mad.c | 16
drivers/infiniband/hw/ipath/ipath_mr.c | 3
drivers/infiniband/hw/ipath/ipath_qp.c | 16
drivers/infiniband/hw/ipath/ipath_rc.c | 77 +-
drivers/infiniband/hw/ipath/ipath_registers.h | 40 +
drivers/infiniband/hw/ipath/ipath_ruc.c | 14
drivers/infiniband/hw/ipath/ipath_srq.c | 23 -
drivers/infiniband/hw/ipath/ipath_sysfs.c | 21 -
drivers/infiniband/hw/ipath/ipath_uc.c | 6
drivers/infiniband/hw/ipath/ipath_ud.c | 6
drivers/infiniband/hw/ipath/ipath_user_pages.c | 56 +
drivers/infiniband/hw/ipath/ipath_verbs.c | 43 +
drivers/infiniband/hw/ipath/ipath_verbs.h | 18
drivers/infiniband/hw/ipath/ipath_wc_ppc64.c | 20
drivers/infiniband/hw/ipath/ipath_wc_x86_64.c | 13
drivers/infiniband/ulp/iser/Kconfig | 13
drivers/infiniband/ulp/iser/iscsi_iser.c | 2
drivers/infiniband/ulp/iser/iscsi_iser.h | 9
drivers/infiniband/ulp/iser/iser_initiator.c | 60 -
drivers/infiniband/ulp/iser/iser_memory.c | 42 +
drivers/infiniband/ulp/iser/iser_verbs.c | 8
38 files changed, 1973 insertions(+), 884 deletions(-)
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-09-22 22:37 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-09-22 22:37 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, netdev, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree has:
- Add support for iWARP (RDMA over IP)
- Add amso1100 driver for Ammasso 1100 iWARP adapters
- Add ehca driver for IBM GX InfiniBand adapters
- ipath fixes
- lots of other smaller stuff
Bryan O'Sullivan:
IB/ipath: More changes to support InfiniPath on PowerPC 970 systems
IB/ipath: lock resource limit counters correctly
IB/ipath: fix for crash on module unload, if cfgports < portcnt
IB/ipath: fix handling of kpiobufs
IB/ipath: drop requirement that PIO buffers be mmaped write-only
IB/ipath: merge ipath_core and ib_ipath drivers
IB/ipath: simplify layering code
IB/ipath: simplify debugging code after ipath_core and ib_ipath merger
IB/ipath: remove stale references to userspace SMA
IB/ipath: trivial cleanups
IB/ipath: add new minor device to allow sending of diag packets
IB/ipath: do not allow use of CQ entries with invalid counts
IB/ipath: account for attached QPs correctly
IB/ipath: support new QLogic product naming scheme
IB/ipath: add serial number to hardware freeze error message
IB/ipath: be more strict about testing the modify QP verb
IB/ipath: validate path_mig_state properly
IB/ipath: put a limit on the number of QPs that can be created
IB/ipath: handle sq_sig_all field correctly
IB/ipath: allow SMA to be disabled
IB/ipath: fix return value from ipath_poll
IB/ipath: control receive polarity inversion
Dotan Barak:
IPoIB: Remove unused include of vmalloc.h
Eli Cohen:
IPoIB: Rejoin all multicast groups after a port event
IPoIB: Add some likely/unlikely annotations in hot path
Erez Zilber:
IB/iser: fix a check of SG alignment for RDMA
IB/iser: Limit the max size of a scsi command
IB/iser: make FMR "page size" be 4K and not PAGE_SIZE
IB/iser: fix some debug prints
IB/iser: Do not use FMR for a single dma entry sg
Heiko J Schick:
IB/ehca: Add driver for IBM eHCA InfiniBand adapters
Ishai Rabinovitz:
IB/srp: Add port/device attributes
Jack Morgenstein:
IB/mthca: Fix lid used for sending traps
IB/mthca: Fix default static rate returned for Tavor in AV
IB/mthca: Return port number for unconnected QPs in query_qp
IB/mthca: Return correct number of bits for static rate in query_qp
IB/mthca: Recover from catastrophic errors
James Lentini:
IB/mthca: Include the header we really want
IB/mad: Remove unused includes
Krishna Kumar:
IB: Fix typo in kerneldoc for ib_set_client_data()
Michael S. Tsirkin:
IB/mthca: Don't use privileged UAR for kernel access
IB/ipoib: Fix flush/start xmit race (from code review)
IB/sa: Require SA registration
IB/cm: Do not track remote QPN in timewait state
IB/sa: fix ib_sa_selector names
Or Gerlitz:
RDMA/cma: Document rdma_destroy_id() function
RDMA/cma: Document rdma_accept() error handling
Ralph Campbell:
IB/uverbs: Allow resize CQ operation to return driver-specific data
IB/uverbs: Pass userspace data to modify_srq and modify_qp methods
IB/ipath: Performance improvements via mmap of queues
Roland Dreier:
IB/uverbs: Use idr_read_cq() where appropriate
IB/uverbs: Fix lockdep warning when QP is created with 2 CQs
IB: Whitespace fixes
IPoIB: Refactor completion handling
IB/mthca: Simplify calls to mthca_cq_clean()
IB/iser: INFINIBAND_ISER depends on INET
IPoIB: Create MCGs with all attributes required by RFC
Sean Hefty:
IB/cm: Enable atomics along with RDMA reads
IB/cm: Use correct reject code for invalid GID
IB/mad: Add support for dual-sided RMPP transfers.
IB/cm: Randomize starting comm ID
RDMA/cma: Protect against adding device during destruction
Tom Tucker:
RDMA: iWARP Connection Manager.
RDMA: iWARP Core Changes.
RDMA/amso1100: Add driver for Ammasso 1100 RNIC
MAINTAINERS | 16
drivers/infiniband/Kconfig | 4
drivers/infiniband/Makefile | 4
drivers/infiniband/core/Makefile | 4
drivers/infiniband/core/addr.c | 22
drivers/infiniband/core/cache.c | 5
drivers/infiniband/core/cm.c | 66 -
drivers/infiniband/core/cma.c | 403 +++-
drivers/infiniband/core/device.c | 6
drivers/infiniband/core/iwcm.c | 1019 +++++++++
drivers/infiniband/core/iwcm.h | 62 +
drivers/infiniband/core/mad.c | 19
drivers/infiniband/core/mad_priv.h | 1
drivers/infiniband/core/mad_rmpp.c | 94 +
drivers/infiniband/core/sa_query.c | 67 +
drivers/infiniband/core/smi.c | 16
drivers/infiniband/core/sysfs.c | 13
drivers/infiniband/core/ucm.c | 9
drivers/infiniband/core/user_mad.c | 7
drivers/infiniband/core/uverbs_cmd.c | 64 -
drivers/infiniband/core/verbs.c | 21
drivers/infiniband/hw/amso1100/Kbuild | 8
drivers/infiniband/hw/amso1100/Kconfig | 15
drivers/infiniband/hw/amso1100/c2.c | 1255 ++++++++++++
drivers/infiniband/hw/amso1100/c2.h | 551 +++++
drivers/infiniband/hw/amso1100/c2_ae.c | 321 +++
drivers/infiniband/hw/amso1100/c2_ae.h | 108 +
drivers/infiniband/hw/amso1100/c2_alloc.c | 144 +
drivers/infiniband/hw/amso1100/c2_cm.c | 452 ++++
drivers/infiniband/hw/amso1100/c2_cq.c | 433 ++++
drivers/infiniband/hw/amso1100/c2_intr.c | 209 ++
drivers/infiniband/hw/amso1100/c2_mm.c | 375 +++
drivers/infiniband/hw/amso1100/c2_mq.c | 174 ++
drivers/infiniband/hw/amso1100/c2_mq.h | 106 +
drivers/infiniband/hw/amso1100/c2_pd.c | 89 +
drivers/infiniband/hw/amso1100/c2_provider.c | 869 ++++++++
drivers/infiniband/hw/amso1100/c2_provider.h | 181 ++
drivers/infiniband/hw/amso1100/c2_qp.c | 975 +++++++++
drivers/infiniband/hw/amso1100/c2_rnic.c | 663 ++++++
drivers/infiniband/hw/amso1100/c2_status.h | 158 +
drivers/infiniband/hw/amso1100/c2_user.h | 82 +
drivers/infiniband/hw/amso1100/c2_vq.c | 260 ++
drivers/infiniband/hw/amso1100/c2_vq.h | 63 +
drivers/infiniband/hw/amso1100/c2_wr.h | 1520 ++++++++++++++
drivers/infiniband/hw/ehca/Kconfig | 16
drivers/infiniband/hw/ehca/Makefile | 16
drivers/infiniband/hw/ehca/ehca_av.c | 271 +++
drivers/infiniband/hw/ehca/ehca_classes.h | 346 +++
drivers/infiniband/hw/ehca/ehca_classes_pSeries.h | 236 ++
drivers/infiniband/hw/ehca/ehca_cq.c | 427 ++++
drivers/infiniband/hw/ehca/ehca_eq.c | 185 ++
drivers/infiniband/hw/ehca/ehca_hca.c | 241 ++
drivers/infiniband/hw/ehca/ehca_irq.c | 762 +++++++
drivers/infiniband/hw/ehca/ehca_irq.h | 77 +
drivers/infiniband/hw/ehca/ehca_iverbs.h | 182 ++
drivers/infiniband/hw/ehca/ehca_main.c | 818 ++++++++
drivers/infiniband/hw/ehca/ehca_mcast.c | 131 +
drivers/infiniband/hw/ehca/ehca_mrmw.c | 2261 +++++++++++++++++++++
drivers/infiniband/hw/ehca/ehca_mrmw.h | 140 +
drivers/infiniband/hw/ehca/ehca_pd.c | 114 +
drivers/infiniband/hw/ehca/ehca_qes.h | 259 ++
drivers/infiniband/hw/ehca/ehca_qp.c | 1507 ++++++++++++++
drivers/infiniband/hw/ehca/ehca_reqs.c | 653 ++++++
drivers/infiniband/hw/ehca/ehca_sqp.c | 111 +
drivers/infiniband/hw/ehca/ehca_tools.h | 172 ++
drivers/infiniband/hw/ehca/ehca_uverbs.c | 392 ++++
drivers/infiniband/hw/ehca/hcp_if.c | 874 ++++++++
drivers/infiniband/hw/ehca/hcp_if.h | 261 ++
drivers/infiniband/hw/ehca/hcp_phyp.c | 80 +
drivers/infiniband/hw/ehca/hcp_phyp.h | 90 +
drivers/infiniband/hw/ehca/hipz_fns.h | 68 +
drivers/infiniband/hw/ehca/hipz_fns_core.h | 100 +
drivers/infiniband/hw/ehca/hipz_hw.h | 388 ++++
drivers/infiniband/hw/ehca/ipz_pt_fn.c | 149 +
drivers/infiniband/hw/ehca/ipz_pt_fn.h | 247 ++
drivers/infiniband/hw/ipath/Kconfig | 21
drivers/infiniband/hw/ipath/Makefile | 29
drivers/infiniband/hw/ipath/ipath_common.h | 19
drivers/infiniband/hw/ipath/ipath_cq.c | 183 +-
drivers/infiniband/hw/ipath/ipath_debug.h | 2
drivers/infiniband/hw/ipath/ipath_diag.c | 154 +
drivers/infiniband/hw/ipath/ipath_driver.c | 349 ++-
drivers/infiniband/hw/ipath/ipath_file_ops.c | 35
drivers/infiniband/hw/ipath/ipath_fs.c | 4
drivers/infiniband/hw/ipath/ipath_ht400.c | 1603 ---------------
drivers/infiniband/hw/ipath/ipath_iba6110.c | 1612 +++++++++++++++
drivers/infiniband/hw/ipath/ipath_iba6120.c | 1264 ++++++++++++
drivers/infiniband/hw/ipath/ipath_init_chip.c | 21
drivers/infiniband/hw/ipath/ipath_intr.c | 24
drivers/infiniband/hw/ipath/ipath_kernel.h | 57 -
drivers/infiniband/hw/ipath/ipath_keys.c | 3
drivers/infiniband/hw/ipath/ipath_layer.c | 1179 -----------
drivers/infiniband/hw/ipath/ipath_layer.h | 115 -
drivers/infiniband/hw/ipath/ipath_mad.c | 339 +++
drivers/infiniband/hw/ipath/ipath_mmap.c | 122 +
drivers/infiniband/hw/ipath/ipath_mr.c | 12
drivers/infiniband/hw/ipath/ipath_pe800.c | 1254 ------------
drivers/infiniband/hw/ipath/ipath_qp.c | 242 ++
drivers/infiniband/hw/ipath/ipath_rc.c | 9
drivers/infiniband/hw/ipath/ipath_registers.h | 7
drivers/infiniband/hw/ipath/ipath_ruc.c | 160 +
drivers/infiniband/hw/ipath/ipath_srq.c | 244 +-
drivers/infiniband/hw/ipath/ipath_stats.c | 27
drivers/infiniband/hw/ipath/ipath_sysfs.c | 41
drivers/infiniband/hw/ipath/ipath_uc.c | 5
drivers/infiniband/hw/ipath/ipath_ud.c | 182 +-
drivers/infiniband/hw/ipath/ipath_verbs.c | 687 +++++-
drivers/infiniband/hw/ipath/ipath_verbs.h | 252 ++
drivers/infiniband/hw/ipath/ipath_verbs_mcast.c | 7
drivers/infiniband/hw/ipath/ipath_wc_ppc64.c | 52
drivers/infiniband/hw/ipath/verbs_debug.h | 108 -
drivers/infiniband/hw/mthca/mthca_av.c | 2
drivers/infiniband/hw/mthca/mthca_catas.c | 62 +
drivers/infiniband/hw/mthca/mthca_cmd.c | 2
drivers/infiniband/hw/mthca/mthca_cq.c | 10
drivers/infiniband/hw/mthca/mthca_dev.h | 12
drivers/infiniband/hw/mthca/mthca_mad.c | 2
drivers/infiniband/hw/mthca/mthca_main.c | 88 +
drivers/infiniband/hw/mthca/mthca_provider.c | 2
drivers/infiniband/hw/mthca/mthca_qp.c | 20
drivers/infiniband/hw/mthca/mthca_srq.c | 2
drivers/infiniband/hw/mthca/mthca_uar.c | 2
drivers/infiniband/ulp/ipoib/ipoib.h | 2
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 194 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 37
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 34
drivers/infiniband/ulp/iser/Kconfig | 2
drivers/infiniband/ulp/iser/iscsi_iser.c | 1
drivers/infiniband/ulp/iser/iscsi_iser.h | 7
drivers/infiniband/ulp/iser/iser_memory.c | 80 +
drivers/infiniband/ulp/iser/iser_verbs.c | 10
drivers/infiniband/ulp/srp/ib_srp.c | 43
include/rdma/ib_addr.h | 17
include/rdma/ib_sa.h | 45
include/rdma/ib_user_verbs.h | 2
include/rdma/ib_verbs.h | 31
include/rdma/iw_cm.h | 258 ++
include/rdma/rdma_cm.h | 12
138 files changed, 28416 insertions(+), 5494 deletions(-)
create mode 100644 drivers/infiniband/core/iwcm.c
create mode 100644 drivers/infiniband/core/iwcm.h
create mode 100644 drivers/infiniband/hw/amso1100/Kbuild
create mode 100644 drivers/infiniband/hw/amso1100/Kconfig
create mode 100644 drivers/infiniband/hw/amso1100/c2.c
create mode 100644 drivers/infiniband/hw/amso1100/c2.h
create mode 100644 drivers/infiniband/hw/amso1100/c2_ae.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_ae.h
create mode 100644 drivers/infiniband/hw/amso1100/c2_alloc.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_cm.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_cq.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_intr.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_mm.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_mq.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_mq.h
create mode 100644 drivers/infiniband/hw/amso1100/c2_pd.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_provider.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_provider.h
create mode 100644 drivers/infiniband/hw/amso1100/c2_qp.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_rnic.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_status.h
create mode 100644 drivers/infiniband/hw/amso1100/c2_user.h
create mode 100644 drivers/infiniband/hw/amso1100/c2_vq.c
create mode 100644 drivers/infiniband/hw/amso1100/c2_vq.h
create mode 100644 drivers/infiniband/hw/amso1100/c2_wr.h
create mode 100644 drivers/infiniband/hw/ehca/Kconfig
create mode 100644 drivers/infiniband/hw/ehca/Makefile
create mode 100644 drivers/infiniband/hw/ehca/ehca_av.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_classes.h
create mode 100644 drivers/infiniband/hw/ehca/ehca_classes_pSeries.h
create mode 100644 drivers/infiniband/hw/ehca/ehca_cq.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_eq.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_hca.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_irq.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_irq.h
create mode 100644 drivers/infiniband/hw/ehca/ehca_iverbs.h
create mode 100644 drivers/infiniband/hw/ehca/ehca_main.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_mcast.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_mrmw.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_mrmw.h
create mode 100644 drivers/infiniband/hw/ehca/ehca_pd.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_qes.h
create mode 100644 drivers/infiniband/hw/ehca/ehca_qp.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_reqs.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_sqp.c
create mode 100644 drivers/infiniband/hw/ehca/ehca_tools.h
create mode 100644 drivers/infiniband/hw/ehca/ehca_uverbs.c
create mode 100644 drivers/infiniband/hw/ehca/hcp_if.c
create mode 100644 drivers/infiniband/hw/ehca/hcp_if.h
create mode 100644 drivers/infiniband/hw/ehca/hcp_phyp.c
create mode 100644 drivers/infiniband/hw/ehca/hcp_phyp.h
create mode 100644 drivers/infiniband/hw/ehca/hipz_fns.h
create mode 100644 drivers/infiniband/hw/ehca/hipz_fns_core.h
create mode 100644 drivers/infiniband/hw/ehca/hipz_hw.h
create mode 100644 drivers/infiniband/hw/ehca/ipz_pt_fn.c
create mode 100644 drivers/infiniband/hw/ehca/ipz_pt_fn.h
delete mode 100644 drivers/infiniband/hw/ipath/ipath_ht400.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_iba6110.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_iba6120.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_mmap.c
delete mode 100644 drivers/infiniband/hw/ipath/ipath_pe800.c
create mode 100644 drivers/infiniband/hw/ipath/ipath_wc_ppc64.c
delete mode 100644 drivers/infiniband/hw/ipath/verbs_debug.h
create mode 100644 include/rdma/iw_cm.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-09-14 20:59 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-09-14 20:59 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This contains a few last-minute fixes -- a couple of one-liners, and a
panic fix that turns out to be pure deletions:
Eli Cohen:
IPoIB: Retry failed send-only multicast group joins
Ishai Rabinovitz:
IB/srp: Don't schedule reconnect from srp
Michael S. Tsirkin:
RDMA/cma: Increase the IB CM retry count in CMA
drivers/infiniband/core/cma.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 1 +
drivers/infiniband/ulp/srp/ib_srp.c | 14 --------------
3 files changed, 2 insertions(+), 15 deletions(-)
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index d6f99d5..5d625a8 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -49,7 +49,7 @@ MODULE_DESCRIPTION("Generic RDMA CM Agen
MODULE_LICENSE("Dual BSD/GPL");
#define CMA_CM_RESPONSE_TIMEOUT 20
-#define CMA_MAX_CM_RETRIES 3
+#define CMA_MAX_CM_RETRIES 15
static void cma_add_one(struct ib_device *device);
static void cma_remove_one(struct ib_device *device);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index b5e6a7b..ec356ce 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -326,6 +326,7 @@ ipoib_mcast_sendonly_join_complete(int s
/* Clear the busy flag so we try again */
clear_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags);
+ mcast->query = NULL;
}
complete(&mcast->done);
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 8257d5a..fd8344c 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -799,13 +799,6 @@ static void srp_process_rsp(struct srp_t
spin_unlock_irqrestore(target->scsi_host->host_lock, flags);
}
-static void srp_reconnect_work(void *target_ptr)
-{
- struct srp_target_port *target = target_ptr;
-
- srp_reconnect_target(target);
-}
-
static void srp_handle_recv(struct srp_target_port *target, struct ib_wc *wc)
{
struct srp_iu *iu;
@@ -858,7 +851,6 @@ static void srp_completion(struct ib_cq
{
struct srp_target_port *target = target_ptr;
struct ib_wc wc;
- unsigned long flags;
ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
while (ib_poll_cq(cq, 1, &wc) > 0) {
@@ -866,10 +858,6 @@ static void srp_completion(struct ib_cq
printk(KERN_ERR PFX "failed %s status %d\n",
wc.wr_id & SRP_OP_RECV ? "receive" : "send",
wc.status);
- spin_lock_irqsave(target->scsi_host->host_lock, flags);
- if (target->state == SRP_TARGET_LIVE)
- schedule_work(&target->work);
- spin_unlock_irqrestore(target->scsi_host->host_lock, flags);
break;
}
@@ -1705,8 +1693,6 @@ static ssize_t srp_create_target(struct
target->scsi_host = target_host;
target->srp_host = host;
- INIT_WORK(&target->work, srp_reconnect_work, target);
-
INIT_LIST_HEAD(&target->free_reqs);
INIT_LIST_HEAD(&target->req_queue);
for (i = 0; i < SRP_SQ_SIZE; ++i) {
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-09-01 0:29 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-09-01 0:29 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
to get a fix for a locking bug found by lockdep:
Roland Dreier:
IB/mthca: Use IRQ safe locks to protect allocation bitmaps
drivers/infiniband/hw/mthca/mthca_allocator.c | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/infiniband/hw/mthca/mthca_allocator.c b/drivers/infiniband/hw/mthca/mthca_allocator.c
index 25157f5..f930e55 100644
--- a/drivers/infiniband/hw/mthca/mthca_allocator.c
+++ b/drivers/infiniband/hw/mthca/mthca_allocator.c
@@ -41,9 +41,11 @@ #include "mthca_dev.h"
/* Trivial bitmap-based allocator */
u32 mthca_alloc(struct mthca_alloc *alloc)
{
+ unsigned long flags;
u32 obj;
- spin_lock(&alloc->lock);
+ spin_lock_irqsave(&alloc->lock, flags);
+
obj = find_next_zero_bit(alloc->table, alloc->max, alloc->last);
if (obj >= alloc->max) {
alloc->top = (alloc->top + alloc->max) & alloc->mask;
@@ -56,19 +58,24 @@ u32 mthca_alloc(struct mthca_alloc *allo
} else
obj = -1;
- spin_unlock(&alloc->lock);
+ spin_unlock_irqrestore(&alloc->lock, flags);
return obj;
}
void mthca_free(struct mthca_alloc *alloc, u32 obj)
{
+ unsigned long flags;
+
obj &= alloc->max - 1;
- spin_lock(&alloc->lock);
+
+ spin_lock_irqsave(&alloc->lock, flags);
+
clear_bit(obj, alloc->table);
alloc->last = min(alloc->last, obj);
alloc->top = (alloc->top + alloc->max) & alloc->mask;
- spin_unlock(&alloc->lock);
+
+ spin_unlock_irqrestore(&alloc->lock, flags);
}
int mthca_alloc_init(struct mthca_alloc *alloc, u32 num, u32 mask,
^ permalink raw reply related [flat|nested] 223+ messages in thread
* Re: [GIT PULL] please pull infiniband.git
2006-08-23 23:25 Roland Dreier
@ 2006-08-24 1:09 ` Greg KH
0 siblings, 0 replies; 223+ messages in thread
From: Greg KH @ 2006-08-24 1:09 UTC (permalink / raw)
To: Roland Dreier; +Cc: openib-general, linux-kernel
On Wed, Aug 23, 2006 at 04:25:38PM -0700, Roland Dreier wrote:
> Greg, please pull from
>
> master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
>
> This tree is also available from kernel.org mirrors at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Pulled from, and pushed out.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-08-23 23:25 Roland Dreier
2006-08-24 1:09 ` Greg KH
0 siblings, 1 reply; 223+ messages in thread
From: Roland Dreier @ 2006-08-23 23:25 UTC (permalink / raw)
To: greg; +Cc: openib-general, linux-kernel
Greg, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
to get a few fixes for the 2.6.18 tree:
Jack Morgenstein:
IB/core: Fix SM LID/LID change with client reregister set
Michael S. Tsirkin:
IB/mthca: Make fence flag work for send work requests
IB/mthca: Update HCA firmware revisions
Roland Dreier:
IB/mthca: Fix potential AB-BA deadlock with CQ locks
IB/mthca: No userspace SRQs if HCA doesn't have SRQ support
drivers/infiniband/core/cache.c | 3 +
drivers/infiniband/core/sa_query.c | 3 +
drivers/infiniband/hw/mthca/mthca_main.c | 6 +--
drivers/infiniband/hw/mthca/mthca_provider.c | 11 +++--
drivers/infiniband/hw/mthca/mthca_provider.h | 4 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 54 +++++++++++++++++++-------
6 files changed, 55 insertions(+), 26 deletions(-)
diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
index e05ca2c..75313ad 100644
--- a/drivers/infiniband/core/cache.c
+++ b/drivers/infiniband/core/cache.c
@@ -301,7 +301,8 @@ static void ib_cache_event(struct ib_eve
event->event == IB_EVENT_PORT_ACTIVE ||
event->event == IB_EVENT_LID_CHANGE ||
event->event == IB_EVENT_PKEY_CHANGE ||
- event->event == IB_EVENT_SM_CHANGE) {
+ event->event == IB_EVENT_SM_CHANGE ||
+ event->event == IB_EVENT_CLIENT_REREGISTER) {
work = kmalloc(sizeof *work, GFP_ATOMIC);
if (work) {
INIT_WORK(&work->work, ib_cache_task, work);
diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
index aeda484..d6b8422 100644
--- a/drivers/infiniband/core/sa_query.c
+++ b/drivers/infiniband/core/sa_query.c
@@ -405,7 +405,8 @@ static void ib_sa_event(struct ib_event_
event->event == IB_EVENT_PORT_ACTIVE ||
event->event == IB_EVENT_LID_CHANGE ||
event->event == IB_EVENT_PKEY_CHANGE ||
- event->event == IB_EVENT_SM_CHANGE) {
+ event->event == IB_EVENT_SM_CHANGE ||
+ event->event == IB_EVENT_CLIENT_REREGISTER) {
struct ib_sa_device *sa_dev;
sa_dev = container_of(handler, typeof(*sa_dev), event_handler);
diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c
index 557cde3..7b82c19 100644
--- a/drivers/infiniband/hw/mthca/mthca_main.c
+++ b/drivers/infiniband/hw/mthca/mthca_main.c
@@ -967,12 +967,12 @@ static struct {
} mthca_hca_table[] = {
[TAVOR] = { .latest_fw = MTHCA_FW_VER(3, 4, 0),
.flags = 0 },
- [ARBEL_COMPAT] = { .latest_fw = MTHCA_FW_VER(4, 7, 400),
+ [ARBEL_COMPAT] = { .latest_fw = MTHCA_FW_VER(4, 7, 600),
.flags = MTHCA_FLAG_PCIE },
- [ARBEL_NATIVE] = { .latest_fw = MTHCA_FW_VER(5, 1, 0),
+ [ARBEL_NATIVE] = { .latest_fw = MTHCA_FW_VER(5, 1, 400),
.flags = MTHCA_FLAG_MEMFREE |
MTHCA_FLAG_PCIE },
- [SINAI] = { .latest_fw = MTHCA_FW_VER(1, 0, 800),
+ [SINAI] = { .latest_fw = MTHCA_FW_VER(1, 1, 0),
.flags = MTHCA_FLAG_MEMFREE |
MTHCA_FLAG_PCIE |
MTHCA_FLAG_SINAI_OPT }
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
index 230ae21..265b1d1 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -1287,11 +1287,7 @@ int mthca_register_device(struct mthca_d
(1ull << IB_USER_VERBS_CMD_MODIFY_QP) |
(1ull << IB_USER_VERBS_CMD_DESTROY_QP) |
(1ull << IB_USER_VERBS_CMD_ATTACH_MCAST) |
- (1ull << IB_USER_VERBS_CMD_DETACH_MCAST) |
- (1ull << IB_USER_VERBS_CMD_CREATE_SRQ) |
- (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ) |
- (1ull << IB_USER_VERBS_CMD_QUERY_SRQ) |
- (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ);
+ (1ull << IB_USER_VERBS_CMD_DETACH_MCAST);
dev->ib_dev.node_type = IB_NODE_CA;
dev->ib_dev.phys_port_cnt = dev->limits.num_ports;
dev->ib_dev.dma_device = &dev->pdev->dev;
@@ -1316,6 +1312,11 @@ int mthca_register_device(struct mthca_d
dev->ib_dev.modify_srq = mthca_modify_srq;
dev->ib_dev.query_srq = mthca_query_srq;
dev->ib_dev.destroy_srq = mthca_destroy_srq;
+ dev->ib_dev.uverbs_cmd_mask |=
+ (1ull << IB_USER_VERBS_CMD_CREATE_SRQ) |
+ (1ull << IB_USER_VERBS_CMD_MODIFY_SRQ) |
+ (1ull << IB_USER_VERBS_CMD_QUERY_SRQ) |
+ (1ull << IB_USER_VERBS_CMD_DESTROY_SRQ);
if (mthca_is_memfree(dev))
dev->ib_dev.post_srq_recv = mthca_arbel_post_srq_recv;
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.h b/drivers/infiniband/hw/mthca/mthca_provider.h
index 8de2887..9a5bece 100644
--- a/drivers/infiniband/hw/mthca/mthca_provider.h
+++ b/drivers/infiniband/hw/mthca/mthca_provider.h
@@ -136,8 +136,8 @@ struct mthca_ah {
* We have one global lock that protects dev->cq/qp_table. Each
* struct mthca_cq/qp also has its own lock. An individual qp lock
* may be taken inside of an individual cq lock. Both cqs attached to
- * a qp may be locked, with the send cq locked first. No other
- * nesting should be done.
+ * a qp may be locked, with the cq with the lower cqn locked first.
+ * No other nesting should be done.
*
* Each struct mthca_cq/qp also has an ref count, protected by the
* corresponding table lock. The pointer from the cq/qp_table to the
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index cd8b672..2e8f6f3 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -99,6 +99,10 @@ enum {
MTHCA_QP_BIT_RSC = 1 << 3
};
+enum {
+ MTHCA_SEND_DOORBELL_FENCE = 1 << 5
+};
+
struct mthca_qp_path {
__be32 port_pkey;
u8 rnr_retry;
@@ -1259,6 +1263,32 @@ int mthca_alloc_qp(struct mthca_dev *dev
return 0;
}
+static void mthca_lock_cqs(struct mthca_cq *send_cq, struct mthca_cq *recv_cq)
+{
+ if (send_cq == recv_cq)
+ spin_lock_irq(&send_cq->lock);
+ else if (send_cq->cqn < recv_cq->cqn) {
+ spin_lock_irq(&send_cq->lock);
+ spin_lock_nested(&recv_cq->lock, SINGLE_DEPTH_NESTING);
+ } else {
+ spin_lock_irq(&recv_cq->lock);
+ spin_lock_nested(&send_cq->lock, SINGLE_DEPTH_NESTING);
+ }
+}
+
+static void mthca_unlock_cqs(struct mthca_cq *send_cq, struct mthca_cq *recv_cq)
+{
+ if (send_cq == recv_cq)
+ spin_unlock_irq(&send_cq->lock);
+ else if (send_cq->cqn < recv_cq->cqn) {
+ spin_unlock(&recv_cq->lock);
+ spin_unlock_irq(&send_cq->lock);
+ } else {
+ spin_unlock(&send_cq->lock);
+ spin_unlock_irq(&recv_cq->lock);
+ }
+}
+
int mthca_alloc_sqp(struct mthca_dev *dev,
struct mthca_pd *pd,
struct mthca_cq *send_cq,
@@ -1311,17 +1341,13 @@ int mthca_alloc_sqp(struct mthca_dev *de
* Lock CQs here, so that CQ polling code can do QP lookup
* without taking a lock.
*/
- spin_lock_irq(&send_cq->lock);
- if (send_cq != recv_cq)
- spin_lock(&recv_cq->lock);
+ mthca_lock_cqs(send_cq, recv_cq);
spin_lock(&dev->qp_table.lock);
mthca_array_clear(&dev->qp_table.qp, mqpn);
spin_unlock(&dev->qp_table.lock);
- if (send_cq != recv_cq)
- spin_unlock(&recv_cq->lock);
- spin_unlock_irq(&send_cq->lock);
+ mthca_unlock_cqs(send_cq, recv_cq);
err_out:
dma_free_coherent(&dev->pdev->dev, sqp->header_buf_size,
@@ -1355,9 +1381,7 @@ void mthca_free_qp(struct mthca_dev *dev
* Lock CQs here, so that CQ polling code can do QP lookup
* without taking a lock.
*/
- spin_lock_irq(&send_cq->lock);
- if (send_cq != recv_cq)
- spin_lock(&recv_cq->lock);
+ mthca_lock_cqs(send_cq, recv_cq);
spin_lock(&dev->qp_table.lock);
mthca_array_clear(&dev->qp_table.qp,
@@ -1365,9 +1389,7 @@ void mthca_free_qp(struct mthca_dev *dev
--qp->refcount;
spin_unlock(&dev->qp_table.lock);
- if (send_cq != recv_cq)
- spin_unlock(&recv_cq->lock);
- spin_unlock_irq(&send_cq->lock);
+ mthca_unlock_cqs(send_cq, recv_cq);
wait_event(qp->wait, !get_qp_refcount(dev, qp));
@@ -1502,7 +1524,7 @@ int mthca_tavor_post_send(struct ib_qp *
int i;
int size;
int size0 = 0;
- u32 f0 = 0;
+ u32 f0;
int ind;
u8 op0 = 0;
@@ -1686,6 +1708,8 @@ int mthca_tavor_post_send(struct ib_qp *
if (!size0) {
size0 = size;
op0 = mthca_opcode[wr->opcode];
+ f0 = wr->send_flags & IB_SEND_FENCE ?
+ MTHCA_SEND_DOORBELL_FENCE : 0;
}
++ind;
@@ -1843,7 +1867,7 @@ int mthca_arbel_post_send(struct ib_qp *
int i;
int size;
int size0 = 0;
- u32 f0 = 0;
+ u32 f0;
int ind;
u8 op0 = 0;
@@ -2051,6 +2075,8 @@ int mthca_arbel_post_send(struct ib_qp *
if (!size0) {
size0 = size;
op0 = mthca_opcode[wr->opcode];
+ f0 = wr->send_flags & IB_SEND_FENCE ?
+ MTHCA_SEND_DOORBELL_FENCE : 0;
}
++ind;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-08-03 18:07 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-08-03 18:07 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
to get a few fixes:
Ishai Rabinovitz:
IB/srp: Fix crash in srp_reconnect_target
IB/srp: Work around data corruption bug on Mellanox targets
Jack Morgenstein:
IB/uverbs: Avoid a crash on device hot remove
Michael S. Tsirkin:
IB/mthca: Fix mthca_array_clear() thinko
Or Gerlitz:
IB/ipoib: Remove broken link from Kconfig and documentation
Roland Dreier:
IB/mthca: Clean up mthca array index mask
Sean Hefty:
IB/cm: Fix error handling in ib_send_cm_req
Documentation/infiniband/ipoib.txt | 2 --
drivers/infiniband/core/cm.c | 4 +++-
drivers/infiniband/core/uverbs.h | 2 ++
drivers/infiniband/core/uverbs_main.c | 8 +++++++-
drivers/infiniband/hw/mthca/mthca_allocator.c | 15 ++++++++-------
drivers/infiniband/ulp/ipoib/Kconfig | 3 +--
drivers/infiniband/ulp/srp/ib_srp.c | 19 +++++++++++++++++--
7 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/Documentation/infiniband/ipoib.txt b/Documentation/infiniband/ipoib.txt
index 1870355..864ff32 100644
--- a/Documentation/infiniband/ipoib.txt
+++ b/Documentation/infiniband/ipoib.txt
@@ -51,8 +51,6 @@ Debugging Information
References
- IETF IP over InfiniBand (ipoib) Working Group
- http://ietf.org/html.charters/ipoib-charter.html
Transmission of IP over InfiniBand (IPoIB) (RFC 4391)
http://ietf.org/rfc/rfc4391.txt
IP over InfiniBand (IPoIB) Architecture (RFC 4392)
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index f85c97f..0de335b 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -975,8 +975,10 @@ int ib_send_cm_req(struct ib_cm_id *cm_i
cm_id_priv->timewait_info = cm_create_timewait_info(cm_id_priv->
id.local_id);
- if (IS_ERR(cm_id_priv->timewait_info))
+ if (IS_ERR(cm_id_priv->timewait_info)) {
+ ret = PTR_ERR(cm_id_priv->timewait_info);
goto out;
+ }
ret = cm_init_av_by_path(param->primary_path, &cm_id_priv->av);
if (ret)
diff --git a/drivers/infiniband/core/uverbs.h b/drivers/infiniband/core/uverbs.h
index bb9bee5..102a59c 100644
--- a/drivers/infiniband/core/uverbs.h
+++ b/drivers/infiniband/core/uverbs.h
@@ -42,6 +42,7 @@ #define UVERBS_H
#include <linux/kref.h>
#include <linux/idr.h>
#include <linux/mutex.h>
+#include <linux/completion.h>
#include <rdma/ib_verbs.h>
#include <rdma/ib_user_verbs.h>
@@ -69,6 +70,7 @@ #include <rdma/ib_user_verbs.h>
struct ib_uverbs_device {
struct kref ref;
+ struct completion comp;
int devnum;
struct cdev *dev;
struct class_device *class_dev;
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
index e725ccc..4e16314 100644
--- a/drivers/infiniband/core/uverbs_main.c
+++ b/drivers/infiniband/core/uverbs_main.c
@@ -122,7 +122,7 @@ static void ib_uverbs_release_dev(struct
struct ib_uverbs_device *dev =
container_of(ref, struct ib_uverbs_device, ref);
- kfree(dev);
+ complete(&dev->comp);
}
void ib_uverbs_release_ucq(struct ib_uverbs_file *file,
@@ -740,6 +740,7 @@ static void ib_uverbs_add_one(struct ib_
return;
kref_init(&uverbs_dev->ref);
+ init_completion(&uverbs_dev->comp);
spin_lock(&map_lock);
uverbs_dev->devnum = find_first_zero_bit(dev_map, IB_UVERBS_MAX_DEVICES);
@@ -793,6 +794,8 @@ err_cdev:
err:
kref_put(&uverbs_dev->ref, ib_uverbs_release_dev);
+ wait_for_completion(&uverbs_dev->comp);
+ kfree(uverbs_dev);
return;
}
@@ -812,7 +815,10 @@ static void ib_uverbs_remove_one(struct
spin_unlock(&map_lock);
clear_bit(uverbs_dev->devnum, dev_map);
+
kref_put(&uverbs_dev->ref, ib_uverbs_release_dev);
+ wait_for_completion(&uverbs_dev->comp);
+ kfree(uverbs_dev);
}
static int uverbs_event_get_sb(struct file_system_type *fs_type, int flags,
diff --git a/drivers/infiniband/hw/mthca/mthca_allocator.c b/drivers/infiniband/hw/mthca/mthca_allocator.c
index 9ba3211..25157f5 100644
--- a/drivers/infiniband/hw/mthca/mthca_allocator.c
+++ b/drivers/infiniband/hw/mthca/mthca_allocator.c
@@ -108,14 +108,15 @@ void mthca_alloc_cleanup(struct mthca_al
* serialize access to the array.
*/
+#define MTHCA_ARRAY_MASK (PAGE_SIZE / sizeof (void *) - 1)
+
void *mthca_array_get(struct mthca_array *array, int index)
{
int p = (index * sizeof (void *)) >> PAGE_SHIFT;
- if (array->page_list[p].page) {
- int i = index & (PAGE_SIZE / sizeof (void *) - 1);
- return array->page_list[p].page[i];
- } else
+ if (array->page_list[p].page)
+ return array->page_list[p].page[index & MTHCA_ARRAY_MASK];
+ else
return NULL;
}
@@ -130,8 +131,7 @@ int mthca_array_set(struct mthca_array *
if (!array->page_list[p].page)
return -ENOMEM;
- array->page_list[p].page[index & (PAGE_SIZE / sizeof (void *) - 1)] =
- value;
+ array->page_list[p].page[index & MTHCA_ARRAY_MASK] = value;
++array->page_list[p].used;
return 0;
@@ -144,7 +144,8 @@ void mthca_array_clear(struct mthca_arra
if (--array->page_list[p].used == 0) {
free_page((unsigned long) array->page_list[p].page);
array->page_list[p].page = NULL;
- }
+ } else
+ array->page_list[p].page[index & MTHCA_ARRAY_MASK] = NULL;
if (array->page_list[p].used < 0)
pr_debug("Array %p index %d page %d with ref count %d < 0\n",
diff --git a/drivers/infiniband/ulp/ipoib/Kconfig b/drivers/infiniband/ulp/ipoib/Kconfig
index 13d6d01..d74653d 100644
--- a/drivers/infiniband/ulp/ipoib/Kconfig
+++ b/drivers/infiniband/ulp/ipoib/Kconfig
@@ -6,8 +6,7 @@ config INFINIBAND_IPOIB
transports IP packets over InfiniBand so you can use your IB
device as a fancy NIC.
- The IPoIB protocol is defined by the IETF ipoib working
- group: <http://www.ietf.org/html.charters/ipoib-charter.html>.
+ See Documentation/infiniband/ipoib.txt for more information
config INFINIBAND_IPOIB_DEBUG
bool "IP-over-InfiniBand debugging" if EMBEDDED
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 8f472e7..8257d5a 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -77,6 +77,14 @@ MODULE_PARM_DESC(topspin_workarounds,
static const u8 topspin_oui[3] = { 0x00, 0x05, 0xad };
+static int mellanox_workarounds = 1;
+
+module_param(mellanox_workarounds, int, 0444);
+MODULE_PARM_DESC(mellanox_workarounds,
+ "Enable workarounds for Mellanox SRP target bugs if != 0");
+
+static const u8 mellanox_oui[3] = { 0x00, 0x02, 0xc9 };
+
static void srp_add_one(struct ib_device *device);
static void srp_remove_one(struct ib_device *device);
static void srp_completion(struct ib_cq *cq, void *target_ptr);
@@ -526,8 +534,10 @@ static int srp_reconnect_target(struct s
while (ib_poll_cq(target->cq, 1, &wc) > 0)
; /* nothing */
+ spin_lock_irq(target->scsi_host->host_lock);
list_for_each_entry_safe(req, tmp, &target->req_queue, list)
srp_reset_req(target, req);
+ spin_unlock_irq(target->scsi_host->host_lock);
target->rx_head = 0;
target->tx_head = 0;
@@ -567,7 +577,7 @@ err:
return ret;
}
-static int srp_map_fmr(struct srp_device *dev, struct scatterlist *scat,
+static int srp_map_fmr(struct srp_target_port *target, struct scatterlist *scat,
int sg_cnt, struct srp_request *req,
struct srp_direct_buf *buf)
{
@@ -577,10 +587,15 @@ static int srp_map_fmr(struct srp_device
int page_cnt;
int i, j;
int ret;
+ struct srp_device *dev = target->srp_host->dev;
if (!dev->fmr_pool)
return -ENODEV;
+ if ((sg_dma_address(&scat[0]) & ~dev->fmr_page_mask) &&
+ mellanox_workarounds && !memcmp(&target->ioc_guid, mellanox_oui, 3))
+ return -EINVAL;
+
len = page_cnt = 0;
for (i = 0; i < sg_cnt; ++i) {
if (sg_dma_address(&scat[i]) & ~dev->fmr_page_mask) {
@@ -683,7 +698,7 @@ static int srp_map_data(struct scsi_cmnd
buf->va = cpu_to_be64(sg_dma_address(scat));
buf->key = cpu_to_be32(target->srp_host->dev->mr->rkey);
buf->len = cpu_to_be32(sg_dma_len(scat));
- } else if (srp_map_fmr(target->srp_host->dev, scat, count, req,
+ } else if (srp_map_fmr(target, scat, count, req,
(void *) cmd->add_data)) {
/*
* FMR mapping failed, and the scatterlist has more
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-07-24 16:50 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-07-24 16:50 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
to get a few fixes:
Dotan Barak:
IB/mthca: Fix SRQ limit event range check
Michael S. Tsirkin:
IB/uverbs: Fix unlocking in error paths
IB/ipoib: Fix packet loss after hardware address update
Or Gerlitz:
IB/ipoib: Fix oops with ipoib_debug_mcast set
Ralph Campbell:
IB/ipath: Fix a data corruption
IB/ipath: Fix ib_ipath driver to work with SRP
IB/ipath: ipath_skip_sge() can break if num_sge > 1
Roland Dreier:
IB/uverbs: Fix lockdep warnings
IB/mthca: Initialize max_cmds before debug code prints it
Sean Hefty:
IB/mad: Validate MADs for spec compliance
drivers/infiniband/core/mad.c | 22 +++---
drivers/infiniband/core/user_mad.c | 87 +++++++++++++++++++++---
drivers/infiniband/core/uverbs_cmd.c | 42 ++++++++----
drivers/infiniband/hw/ipath/ipath_driver.c | 76 ++++++++++-----------
drivers/infiniband/hw/ipath/ipath_keys.c | 15 ++++
drivers/infiniband/hw/ipath/ipath_verbs.c | 5 -
drivers/infiniband/hw/mthca/mthca_cmd.c | 5 +
drivers/infiniband/hw/mthca/mthca_srq.c | 3 +
drivers/infiniband/ulp/ipoib/ipoib.h | 1
drivers/infiniband/ulp/ipoib/ipoib_main.c | 23 ++++++
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 8 +-
include/rdma/ib_mad.h | 7 ++
12 files changed, 209 insertions(+), 85 deletions(-)
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index 5ed4dab..1c3cfbb 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -167,6 +167,15 @@ static int is_vendor_method_in_use(
return 0;
}
+int ib_response_mad(struct ib_mad *mad)
+{
+ return ((mad->mad_hdr.method & IB_MGMT_METHOD_RESP) ||
+ (mad->mad_hdr.method == IB_MGMT_METHOD_TRAP_REPRESS) ||
+ ((mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_BM) &&
+ (mad->mad_hdr.attr_mod & IB_BM_ATTR_MOD_RESP)));
+}
+EXPORT_SYMBOL(ib_response_mad);
+
/*
* ib_register_mad_agent - Register to send/receive MADs
*/
@@ -570,13 +579,6 @@ int ib_unregister_mad_agent(struct ib_ma
}
EXPORT_SYMBOL(ib_unregister_mad_agent);
-static inline int response_mad(struct ib_mad *mad)
-{
- /* Trap represses are responses although response bit is reset */
- return ((mad->mad_hdr.method == IB_MGMT_METHOD_TRAP_REPRESS) ||
- (mad->mad_hdr.method & IB_MGMT_METHOD_RESP));
-}
-
static void dequeue_mad(struct ib_mad_list_head *mad_list)
{
struct ib_mad_queue *mad_queue;
@@ -723,7 +725,7 @@ static int handle_outgoing_dr_smp(struct
switch (ret)
{
case IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_REPLY:
- if (response_mad(&mad_priv->mad.mad) &&
+ if (ib_response_mad(&mad_priv->mad.mad) &&
mad_agent_priv->agent.recv_handler) {
local->mad_priv = mad_priv;
local->recv_mad_agent = mad_agent_priv;
@@ -1551,7 +1553,7 @@ find_mad_agent(struct ib_mad_port_privat
unsigned long flags;
spin_lock_irqsave(&port_priv->reg_lock, flags);
- if (response_mad(mad)) {
+ if (ib_response_mad(mad)) {
u32 hi_tid;
struct ib_mad_agent_private *entry;
@@ -1799,7 +1801,7 @@ static void ib_mad_complete_recv(struct
}
/* Complete corresponding request */
- if (response_mad(mad_recv_wc->recv_buf.mad)) {
+ if (ib_response_mad(mad_recv_wc->recv_buf.mad)) {
spin_lock_irqsave(&mad_agent_priv->lock, flags);
mad_send_wr = ib_find_send_mad(mad_agent_priv, mad_recv_wc);
if (!mad_send_wr) {
diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c
index afe70a5..1273f88 100644
--- a/drivers/infiniband/core/user_mad.c
+++ b/drivers/infiniband/core/user_mad.c
@@ -112,8 +112,10 @@ struct ib_umad_device {
struct ib_umad_file {
struct ib_umad_port *port;
struct list_head recv_list;
+ struct list_head send_list;
struct list_head port_list;
spinlock_t recv_lock;
+ spinlock_t send_lock;
wait_queue_head_t recv_wait;
struct ib_mad_agent *agent[IB_UMAD_MAX_AGENTS];
int agents_dead;
@@ -177,12 +179,21 @@ static int queue_packet(struct ib_umad_f
return ret;
}
+static void dequeue_send(struct ib_umad_file *file,
+ struct ib_umad_packet *packet)
+ {
+ spin_lock_irq(&file->send_lock);
+ list_del(&packet->list);
+ spin_unlock_irq(&file->send_lock);
+ }
+
static void send_handler(struct ib_mad_agent *agent,
struct ib_mad_send_wc *send_wc)
{
struct ib_umad_file *file = agent->context;
struct ib_umad_packet *packet = send_wc->send_buf->context[0];
+ dequeue_send(file, packet);
ib_destroy_ah(packet->msg->ah);
ib_free_send_mad(packet->msg);
@@ -370,6 +381,51 @@ static int copy_rmpp_mad(struct ib_mad_s
return 0;
}
+static int same_destination(struct ib_user_mad_hdr *hdr1,
+ struct ib_user_mad_hdr *hdr2)
+{
+ if (!hdr1->grh_present && !hdr2->grh_present)
+ return (hdr1->lid == hdr2->lid);
+
+ if (hdr1->grh_present && hdr2->grh_present)
+ return !memcmp(hdr1->gid, hdr2->gid, 16);
+
+ return 0;
+}
+
+static int is_duplicate(struct ib_umad_file *file,
+ struct ib_umad_packet *packet)
+{
+ struct ib_umad_packet *sent_packet;
+ struct ib_mad_hdr *sent_hdr, *hdr;
+
+ hdr = (struct ib_mad_hdr *) packet->mad.data;
+ list_for_each_entry(sent_packet, &file->send_list, list) {
+ sent_hdr = (struct ib_mad_hdr *) sent_packet->mad.data;
+
+ if ((hdr->tid != sent_hdr->tid) ||
+ (hdr->mgmt_class != sent_hdr->mgmt_class))
+ continue;
+
+ /*
+ * No need to be overly clever here. If two new operations have
+ * the same TID, reject the second as a duplicate. This is more
+ * restrictive than required by the spec.
+ */
+ if (!ib_response_mad((struct ib_mad *) hdr)) {
+ if (!ib_response_mad((struct ib_mad *) sent_hdr))
+ return 1;
+ continue;
+ } else if (!ib_response_mad((struct ib_mad *) sent_hdr))
+ continue;
+
+ if (same_destination(&packet->mad.hdr, &sent_packet->mad.hdr))
+ return 1;
+ }
+
+ return 0;
+}
+
static ssize_t ib_umad_write(struct file *filp, const char __user *buf,
size_t count, loff_t *pos)
{
@@ -379,7 +435,6 @@ static ssize_t ib_umad_write(struct file
struct ib_ah_attr ah_attr;
struct ib_ah *ah;
struct ib_rmpp_mad *rmpp_mad;
- u8 method;
__be64 *tid;
int ret, data_len, hdr_len, copy_offset, rmpp_active;
@@ -473,28 +528,36 @@ static ssize_t ib_umad_write(struct file
}
/*
- * If userspace is generating a request that will generate a
- * response, we need to make sure the high-order part of the
- * transaction ID matches the agent being used to send the
- * MAD.
+ * Set the high-order part of the transaction ID to make MADs from
+ * different agents unique, and allow routing responses back to the
+ * original requestor.
*/
- method = ((struct ib_mad_hdr *) packet->msg->mad)->method;
-
- if (!(method & IB_MGMT_METHOD_RESP) &&
- method != IB_MGMT_METHOD_TRAP_REPRESS &&
- method != IB_MGMT_METHOD_SEND) {
+ if (!ib_response_mad(packet->msg->mad)) {
tid = &((struct ib_mad_hdr *) packet->msg->mad)->tid;
*tid = cpu_to_be64(((u64) agent->hi_tid) << 32 |
(be64_to_cpup(tid) & 0xffffffff));
+ rmpp_mad->mad_hdr.tid = *tid;
+ }
+
+ spin_lock_irq(&file->send_lock);
+ ret = is_duplicate(file, packet);
+ if (!ret)
+ list_add_tail(&packet->list, &file->send_list);
+ spin_unlock_irq(&file->send_lock);
+ if (ret) {
+ ret = -EINVAL;
+ goto err_msg;
}
ret = ib_post_send_mad(packet->msg, NULL);
if (ret)
- goto err_msg;
+ goto err_send;
up_read(&file->port->mutex);
return count;
+err_send:
+ dequeue_send(file, packet);
err_msg:
ib_free_send_mad(packet->msg);
err_ah:
@@ -657,7 +720,9 @@ static int ib_umad_open(struct inode *in
}
spin_lock_init(&file->recv_lock);
+ spin_lock_init(&file->send_lock);
INIT_LIST_HEAD(&file->recv_list);
+ INIT_LIST_HEAD(&file->send_list);
init_waitqueue_head(&file->recv_wait);
file->port = port;
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index bdf5d50..30923eb 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -42,6 +42,13 @@ #include <asm/uaccess.h>
#include "uverbs.h"
+static struct lock_class_key pd_lock_key;
+static struct lock_class_key mr_lock_key;
+static struct lock_class_key cq_lock_key;
+static struct lock_class_key qp_lock_key;
+static struct lock_class_key ah_lock_key;
+static struct lock_class_key srq_lock_key;
+
#define INIT_UDATA(udata, ibuf, obuf, ilen, olen) \
do { \
(udata)->inbuf = (void __user *) (ibuf); \
@@ -76,12 +83,13 @@ #define INIT_UDATA(udata, ibuf, obuf, il
*/
static void init_uobj(struct ib_uobject *uobj, u64 user_handle,
- struct ib_ucontext *context)
+ struct ib_ucontext *context, struct lock_class_key *key)
{
uobj->user_handle = user_handle;
uobj->context = context;
kref_init(&uobj->ref);
init_rwsem(&uobj->mutex);
+ lockdep_set_class(&uobj->mutex, key);
uobj->live = 0;
}
@@ -470,7 +478,7 @@ ssize_t ib_uverbs_alloc_pd(struct ib_uve
if (!uobj)
return -ENOMEM;
- init_uobj(uobj, 0, file->ucontext);
+ init_uobj(uobj, 0, file->ucontext, &pd_lock_key);
down_write(&uobj->mutex);
pd = file->device->ib_dev->alloc_pd(file->device->ib_dev,
@@ -591,7 +599,7 @@ ssize_t ib_uverbs_reg_mr(struct ib_uverb
if (!obj)
return -ENOMEM;
- init_uobj(&obj->uobject, 0, file->ucontext);
+ init_uobj(&obj->uobject, 0, file->ucontext, &mr_lock_key);
down_write(&obj->uobject.mutex);
/*
@@ -770,7 +778,7 @@ ssize_t ib_uverbs_create_cq(struct ib_uv
if (!obj)
return -ENOMEM;
- init_uobj(&obj->uobject, cmd.user_handle, file->ucontext);
+ init_uobj(&obj->uobject, cmd.user_handle, file->ucontext, &cq_lock_key);
down_write(&obj->uobject.mutex);
if (cmd.comp_channel >= 0) {
@@ -1051,13 +1059,14 @@ ssize_t ib_uverbs_create_qp(struct ib_uv
if (!obj)
return -ENOMEM;
- init_uobj(&obj->uevent.uobject, cmd.user_handle, file->ucontext);
+ init_uobj(&obj->uevent.uobject, cmd.user_handle, file->ucontext, &qp_lock_key);
down_write(&obj->uevent.uobject.mutex);
+ srq = cmd.is_srq ? idr_read_srq(cmd.srq_handle, file->ucontext) : NULL;
pd = idr_read_pd(cmd.pd_handle, file->ucontext);
scq = idr_read_cq(cmd.send_cq_handle, file->ucontext);
- rcq = idr_read_cq(cmd.recv_cq_handle, file->ucontext);
- srq = cmd.is_srq ? idr_read_srq(cmd.srq_handle, file->ucontext) : NULL;
+ rcq = cmd.recv_cq_handle == cmd.send_cq_handle ?
+ scq : idr_read_cq(cmd.recv_cq_handle, file->ucontext);
if (!pd || !scq || !rcq || (cmd.is_srq && !srq)) {
ret = -EINVAL;
@@ -1125,7 +1134,8 @@ ssize_t ib_uverbs_create_qp(struct ib_uv
put_pd_read(pd);
put_cq_read(scq);
- put_cq_read(rcq);
+ if (rcq != scq)
+ put_cq_read(rcq);
if (srq)
put_srq_read(srq);
@@ -1150,7 +1160,7 @@ err_put:
put_pd_read(pd);
if (scq)
put_cq_read(scq);
- if (rcq)
+ if (rcq && rcq != scq)
put_cq_read(rcq);
if (srq)
put_srq_read(srq);
@@ -1751,7 +1761,7 @@ ssize_t ib_uverbs_create_ah(struct ib_uv
if (!uobj)
return -ENOMEM;
- init_uobj(uobj, cmd.user_handle, file->ucontext);
+ init_uobj(uobj, cmd.user_handle, file->ucontext, &ah_lock_key);
down_write(&uobj->mutex);
pd = idr_read_pd(cmd.pd_handle, file->ucontext);
@@ -1775,7 +1785,7 @@ ssize_t ib_uverbs_create_ah(struct ib_uv
ah = ib_create_ah(pd, &attr);
if (IS_ERR(ah)) {
ret = PTR_ERR(ah);
- goto err;
+ goto err_put;
}
ah->uobject = uobj;
@@ -1811,6 +1821,9 @@ err_copy:
err_destroy:
ib_destroy_ah(ah);
+err_put:
+ put_pd_read(pd);
+
err:
put_uobj_write(uobj);
return ret;
@@ -1963,7 +1976,7 @@ ssize_t ib_uverbs_create_srq(struct ib_u
if (!obj)
return -ENOMEM;
- init_uobj(&obj->uobject, cmd.user_handle, file->ucontext);
+ init_uobj(&obj->uobject, cmd.user_handle, file->ucontext, &srq_lock_key);
down_write(&obj->uobject.mutex);
pd = idr_read_pd(cmd.pd_handle, file->ucontext);
@@ -1984,7 +1997,7 @@ ssize_t ib_uverbs_create_srq(struct ib_u
srq = pd->device->create_srq(pd, &attr, &udata);
if (IS_ERR(srq)) {
ret = PTR_ERR(srq);
- goto err;
+ goto err_put;
}
srq->device = pd->device;
@@ -2029,6 +2042,9 @@ err_copy:
err_destroy:
ib_destroy_srq(srq);
+err_put:
+ put_pd_read(pd);
+
err:
put_uobj_write(&obj->uobject);
return ret;
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index 823131d..f98518d 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -859,6 +859,38 @@ static void ipath_rcv_layer(struct ipath
__ipath_layer_rcv_lid(dd, hdr);
}
+static void ipath_rcv_hdrerr(struct ipath_devdata *dd,
+ u32 eflags,
+ u32 l,
+ u32 etail,
+ u64 *rc)
+{
+ char emsg[128];
+ struct ipath_message_header *hdr;
+
+ get_rhf_errstring(eflags, emsg, sizeof emsg);
+ hdr = (struct ipath_message_header *)&rc[1];
+ ipath_cdbg(PKT, "RHFerrs %x hdrqtail=%x typ=%u "
+ "tlen=%x opcode=%x egridx=%x: %s\n",
+ eflags, l,
+ ipath_hdrget_rcv_type((__le32 *) rc),
+ ipath_hdrget_length_in_bytes((__le32 *) rc),
+ be32_to_cpu(hdr->bth[0]) >> 24,
+ etail, emsg);
+
+ /* Count local link integrity errors. */
+ if (eflags & (INFINIPATH_RHF_H_ICRCERR | INFINIPATH_RHF_H_VCRCERR)) {
+ u8 n = (dd->ipath_ibcctrl >>
+ INFINIPATH_IBCC_PHYERRTHRESHOLD_SHIFT) &
+ INFINIPATH_IBCC_PHYERRTHRESHOLD_MASK;
+
+ if (++dd->ipath_lli_counter > n) {
+ dd->ipath_lli_counter = 0;
+ dd->ipath_lli_errors++;
+ }
+ }
+}
+
/*
* ipath_kreceive - receive a packet
* @dd: the infinipath device
@@ -875,7 +907,6 @@ void ipath_kreceive(struct ipath_devdata
struct ipath_message_header *hdr;
u32 eflags, i, etype, tlen, pkttot = 0, updegr=0, reloop=0;
static u64 totcalls; /* stats, may eventually remove */
- char emsg[128];
if (!dd->ipath_hdrqtailptr) {
ipath_dev_err(dd,
@@ -938,26 +969,9 @@ reloop:
"%x\n", etype);
}
- if (eflags & ~(INFINIPATH_RHF_H_TIDERR |
- INFINIPATH_RHF_H_IHDRERR)) {
- get_rhf_errstring(eflags, emsg, sizeof emsg);
- ipath_cdbg(PKT, "RHFerrs %x hdrqtail=%x typ=%u "
- "tlen=%x opcode=%x egridx=%x: %s\n",
- eflags, l, etype, tlen, bthbytes[0],
- ipath_hdrget_index((__le32 *) rc), emsg);
- /* Count local link integrity errors. */
- if (eflags & (INFINIPATH_RHF_H_ICRCERR |
- INFINIPATH_RHF_H_VCRCERR)) {
- u8 n = (dd->ipath_ibcctrl >>
- INFINIPATH_IBCC_PHYERRTHRESHOLD_SHIFT) &
- INFINIPATH_IBCC_PHYERRTHRESHOLD_MASK;
-
- if (++dd->ipath_lli_counter > n) {
- dd->ipath_lli_counter = 0;
- dd->ipath_lli_errors++;
- }
- }
- } else if (etype == RCVHQ_RCV_TYPE_NON_KD) {
+ if (unlikely(eflags))
+ ipath_rcv_hdrerr(dd, eflags, l, etail, rc);
+ else if (etype == RCVHQ_RCV_TYPE_NON_KD) {
int ret = __ipath_verbs_rcv(dd, rc + 1,
ebuf, tlen);
if (ret == -ENODEV)
@@ -981,25 +995,7 @@ reloop:
else if (etype == RCVHQ_RCV_TYPE_EXPECTED)
ipath_dbg("Bug: Expected TID, opcode %x; ignored\n",
be32_to_cpu(hdr->bth[0]) & 0xff);
- else if (eflags & (INFINIPATH_RHF_H_TIDERR |
- INFINIPATH_RHF_H_IHDRERR)) {
- /*
- * This is a type 3 packet, only the LRH is in the
- * rcvhdrq, the rest of the header is in the eager
- * buffer.
- */
- u8 opcode;
- if (ebuf) {
- bthbytes = (u8 *) ebuf;
- opcode = *bthbytes;
- }
- else
- opcode = 0;
- get_rhf_errstring(eflags, emsg, sizeof emsg);
- ipath_dbg("Err %x (%s), opcode %x, egrbuf %x, "
- "len %x\n", eflags, emsg, opcode, etail,
- tlen);
- } else {
+ else {
/*
* error packet, type of error unknown.
* Probably type 3, but we don't know, so don't
diff --git a/drivers/infiniband/hw/ipath/ipath_keys.c b/drivers/infiniband/hw/ipath/ipath_keys.c
index 46773c6..a5ca279 100644
--- a/drivers/infiniband/hw/ipath/ipath_keys.c
+++ b/drivers/infiniband/hw/ipath/ipath_keys.c
@@ -197,6 +197,21 @@ int ipath_rkey_ok(struct ipath_ibdev *de
size_t off;
int ret;
+ /*
+ * We use RKEY == zero for physical addresses
+ * (see ipath_get_dma_mr).
+ */
+ if (rkey == 0) {
+ sge->mr = NULL;
+ sge->vaddr = phys_to_virt(vaddr);
+ sge->length = len;
+ sge->sge_length = len;
+ ss->sg_list = NULL;
+ ss->num_sge = 1;
+ ret = 1;
+ goto bail;
+ }
+
mr = rkt->table[(rkey >> (32 - ib_ipath_lkey_table_size))];
if (unlikely(mr == NULL || mr->lkey != rkey)) {
ret = 0;
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c
index 56ac336..d70a9b6 100644
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c
@@ -191,10 +191,6 @@ void ipath_skip_sge(struct ipath_sge_sta
{
struct ipath_sge *sge = &ss->sge;
- while (length > sge->sge_length) {
- length -= sge->sge_length;
- ss->sge = *ss->sg_list++;
- }
while (length) {
u32 len = sge->length;
@@ -627,6 +623,7 @@ static int ipath_query_device(struct ib_
props->device_cap_flags = IB_DEVICE_BAD_PKEY_CNTR |
IB_DEVICE_BAD_QKEY_CNTR | IB_DEVICE_SHUTDOWN_PORT |
IB_DEVICE_SYS_IMAGE_GUID;
+ props->page_size_cap = PAGE_SIZE;
props->vendor_id = ipath_layer_get_vendorid(dev->dd);
props->vendor_part_id = ipath_layer_get_deviceid(dev->dd);
props->hw_ver = ipath_layer_get_pcirev(dev->dd);
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c
index d0f7731..deabc14 100644
--- a/drivers/infiniband/hw/mthca/mthca_cmd.c
+++ b/drivers/infiniband/hw/mthca/mthca_cmd.c
@@ -778,11 +778,12 @@ #define QUERY_FW_EQ_SET_CI_BASE_OFFSET 0
((dev->fw_ver & 0xffff0000ull) >> 16) |
((dev->fw_ver & 0x0000ffffull) << 16);
+ MTHCA_GET(lg, outbox, QUERY_FW_MAX_CMD_OFFSET);
+ dev->cmd.max_cmds = 1 << lg;
+
mthca_dbg(dev, "FW version %012llx, max commands %d\n",
(unsigned long long) dev->fw_ver, dev->cmd.max_cmds);
- MTHCA_GET(lg, outbox, QUERY_FW_MAX_CMD_OFFSET);
- dev->cmd.max_cmds = 1 << lg;
MTHCA_GET(dev->catas_err.addr, outbox, QUERY_FW_ERR_START_OFFSET);
MTHCA_GET(dev->catas_err.size, outbox, QUERY_FW_ERR_SIZE_OFFSET);
diff --git a/drivers/infiniband/hw/mthca/mthca_srq.c b/drivers/infiniband/hw/mthca/mthca_srq.c
index fab417c..b60a9d7 100644
--- a/drivers/infiniband/hw/mthca/mthca_srq.c
+++ b/drivers/infiniband/hw/mthca/mthca_srq.c
@@ -370,7 +370,8 @@ int mthca_modify_srq(struct ib_srq *ibsr
return -EINVAL;
if (attr_mask & IB_SRQ_LIMIT) {
- if (attr->srq_limit > srq->max)
+ u32 max_wr = mthca_is_memfree(dev) ? srq->max - 1 : srq->max;
+ if (attr->srq_limit > max_wr)
return -EINVAL;
mutex_lock(&srq->mutex);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h
index 3f89f5e..474aa21 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -212,6 +212,7 @@ struct ipoib_path {
struct ipoib_neigh {
struct ipoib_ah *ah;
+ union ib_gid dgid;
struct sk_buff_head queue;
struct neighbour *neighbour;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 1c6ea1c..cf71d2a 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -404,6 +404,8 @@ static void path_rec_completion(int stat
list_for_each_entry(neigh, &path->neigh_list, list) {
kref_get(&path->ah->ref);
neigh->ah = path->ah;
+ memcpy(&neigh->dgid.raw, &path->pathrec.dgid.raw,
+ sizeof(union ib_gid));
while ((skb = __skb_dequeue(&neigh->queue)))
__skb_queue_tail(&skqueue, skb);
@@ -510,6 +512,8 @@ static void neigh_add_path(struct sk_buf
if (path->ah) {
kref_get(&path->ah->ref);
neigh->ah = path->ah;
+ memcpy(&neigh->dgid.raw, &path->pathrec.dgid.raw,
+ sizeof(union ib_gid));
ipoib_send(dev, skb, path->ah,
be32_to_cpup((__be32 *) skb->dst->neighbour->ha));
@@ -633,6 +637,25 @@ static int ipoib_start_xmit(struct sk_bu
neigh = *to_ipoib_neigh(skb->dst->neighbour);
if (likely(neigh->ah)) {
+ if (unlikely(memcmp(&neigh->dgid.raw,
+ skb->dst->neighbour->ha + 4,
+ sizeof(union ib_gid)))) {
+ spin_lock(&priv->lock);
+ /*
+ * It's safe to call ipoib_put_ah() inside
+ * priv->lock here, because we know that
+ * path->ah will always hold one more reference,
+ * so ipoib_put_ah() will never do more than
+ * decrement the ref count.
+ */
+ ipoib_put_ah(neigh->ah);
+ list_del(&neigh->list);
+ ipoib_neigh_free(neigh);
+ spin_unlock(&priv->lock);
+ ipoib_path_lookup(skb, dev);
+ goto out;
+ }
+
ipoib_send(dev, skb, neigh->ah,
be32_to_cpup((__be32 *) skb->dst->neighbour->ha));
goto out;
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
index ab40488..b5e6a7b 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -264,6 +264,10 @@ static int ipoib_mcast_join_finish(struc
if (!ah) {
ipoib_warn(priv, "ib_address_create failed\n");
} else {
+ spin_lock_irq(&priv->lock);
+ mcast->ah = ah;
+ spin_unlock_irq(&priv->lock);
+
ipoib_dbg_mcast(priv, "MGID " IPOIB_GID_FMT
" AV %p, LID 0x%04x, SL %d\n",
IPOIB_GID_ARG(mcast->mcmember.mgid),
@@ -271,10 +275,6 @@ static int ipoib_mcast_join_finish(struc
be16_to_cpu(mcast->mcmember.mlid),
mcast->mcmember.sl);
}
-
- spin_lock_irq(&priv->lock);
- mcast->ah = ah;
- spin_unlock_irq(&priv->lock);
}
/* actually send any queued packets */
diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h
index 5ff7755..585d28e 100644
--- a/include/rdma/ib_mad.h
+++ b/include/rdma/ib_mad.h
@@ -75,6 +75,7 @@ #define IB_MGMT_METHOD_REPORT_RESP 0x86
#define IB_MGMT_METHOD_TRAP_REPRESS 0x07
#define IB_MGMT_METHOD_RESP 0x80
+#define IB_BM_ATTR_MOD_RESP cpu_to_be32(1)
#define IB_MGMT_MAX_METHODS 128
@@ -247,6 +248,12 @@ struct ib_mad_send_buf {
};
/**
+ * ib_response_mad - Returns if the specified MAD has been generated in
+ * response to a sent request or trap.
+ */
+int ib_response_mad(struct ib_mad *mad);
+
+/**
* ib_get_rmpp_resptime - Returns the RMPP response time.
* @rmpp_hdr: An RMPP header.
*/
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-06-22 16:22 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-06-22 16:22 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This is mostly merging the new iSER (iSCSI over RDMA transport) initiator:
Krishna Kumar:
IB/uverbs: Don't free wr list when it's known to be empty
Or Gerlitz:
IB/iser: iSCSI iSER transport provider header file
IB/iser: iSCSI iSER transport provider high level code
IB/iser: iSER initiator iSCSI PDU and TX/RX
IB/iser: iSER RDMA CM (CMA) and IB verbs interaction
IB/iser: iSER handling of memory for RDMA
IB/iser: iSER Kconfig and Makefile
Roland Dreier:
IB/uverbs: Remove unnecessary list_del()s
drivers/infiniband/Kconfig | 2
drivers/infiniband/Makefile | 1
drivers/infiniband/core/uverbs_cmd.c | 2
drivers/infiniband/core/uverbs_main.c | 6
drivers/infiniband/ulp/iser/Kconfig | 11
drivers/infiniband/ulp/iser/Makefile | 4
drivers/infiniband/ulp/iser/iscsi_iser.c | 790 +++++++++++++++++++++++++
drivers/infiniband/ulp/iser/iscsi_iser.h | 354 +++++++++++
drivers/infiniband/ulp/iser/iser_initiator.c | 738 +++++++++++++++++++++++
drivers/infiniband/ulp/iser/iser_memory.c | 401 +++++++++++++
drivers/infiniband/ulp/iser/iser_verbs.c | 827 ++++++++++++++++++++++++++
drivers/scsi/Makefile | 1
12 files changed, 3130 insertions(+), 7 deletions(-)
create mode 100644 drivers/infiniband/ulp/iser/Kconfig
create mode 100644 drivers/infiniband/ulp/iser/Makefile
create mode 100644 drivers/infiniband/ulp/iser/iscsi_iser.c
create mode 100644 drivers/infiniband/ulp/iser/iscsi_iser.h
create mode 100644 drivers/infiniband/ulp/iser/iser_initiator.c
create mode 100644 drivers/infiniband/ulp/iser/iser_memory.c
create mode 100644 drivers/infiniband/ulp/iser/iser_verbs.c
^ permalink raw reply [flat|nested] 223+ messages in thread
* [GIT PULL] please pull infiniband.git
@ 2006-06-18 11:49 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-06-18 11:49 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
Opening the floodgates for 2.6.18:
Ganapathi CH:
IB/uverbs: Release lock on error path
Ishai Rabinovitz:
IB/srp: Clean up loop in srp_remove_one()
IB/srp: Handle DREQ events from CM
IB/srp: Factor out common request reset code
Jack Morgenstein:
IB: Add caching of ports' LMC
IB/mad: Check GID/LID when matching requests
IPoIB: Fix kernel unaligned access on ia64
Leonid Arsh:
IB: Add client reregister event type
IPoIB: Handle client reregister events
IB: Move struct port_info from ipath to <rdma/ib_smi.h>
IB/mthca: Add client reregister event generation
Matthew Wilcox:
IB/srp: Use SCAN_WILD_CARD from SCSI headers
IB/srp: Get rid of unneeded use of list_for_each_entry_safe()
IB/srp: Change target_mutex to a spinlock
Michael S. Tsirkin:
IB/mthca: restore missing PCI registers after reset
IB/mthca: memfree completion with error FW bug workaround
IB/mthca: Remove dead code
IB/cm: remove unneeded flush_workqueue
Or Gerlitz:
IB/mthca: Fill in max_map_per_fmr device attribute
IB/fmr: Use device's max_map_map_per_fmr attribute in FMR pool.
Ramachandra K:
[SCSI] srp.h: Add I/O Class values
IB/srp: Support SRP rev. 10 targets
Roland Dreier:
IB/srp: Use FMRs to map gather/scatter lists
IB/mthca: Convert FW commands to use wait_for_completion_timeout()
IB: Make needlessly global ib_mad_cache static
IPoIB: Mention RFC numbers in documentation
IB/srp: Get rid of "Target has req_lim 0" messages
IPoIB: Avoid using stale last_send counter when reaping AHs
IB/ipath: Add client reregister event generation
IB/uverbs: Don't decrement usecnt on error paths
IB/uverbs: Factor out common idr code
IB/mthca: Fix memory leak on modify_qp error paths
IB/mthca: Make all device methods truly reentrant
IB/uverbs: Don't serialize with ib_uverbs_idr_mutex
Sean Hefty:
IB: common handling for marshalling parameters to/from userspace
IB/cm: Match connection requests based on private data
[NET]: Export ip_dev_find()
IB: address translation to map IP toIB addresses (GIDs)
IB: IP address based RDMA connection manager
IB/ucm: convert semaphore to mutex
IB/ucm: Get rid of duplicate P_Key parameter
IB: Add ib_init_ah_from_wc()
IB/sa: Add ib_init_ah_from_path()
IB/cm: Use address handle helpers
Vu Pham:
IB/srp: Allow cmd_per_lun to be set per target port
IB/srp: Allow sg_tablesize to be adjusted
Documentation/infiniband/ipoib.txt | 12
drivers/infiniband/Kconfig | 5
drivers/infiniband/core/Makefile | 11
drivers/infiniband/core/addr.c | 367 +++++
drivers/infiniband/core/cache.c | 30
drivers/infiniband/core/cm.c | 119 +
drivers/infiniband/core/cma.c | 1927 ++++++++++++++++++++++++
drivers/infiniband/core/fmr_pool.c | 30
drivers/infiniband/core/mad.c | 97 +
drivers/infiniband/core/mad_priv.h | 2
drivers/infiniband/core/sa_query.c | 31
drivers/infiniband/core/ucm.c | 183 +-
drivers/infiniband/core/uverbs.h | 4
drivers/infiniband/core/uverbs_cmd.c | 971 +++++++-----
drivers/infiniband/core/uverbs_main.c | 35
drivers/infiniband/core/uverbs_marshall.c | 138 ++
drivers/infiniband/core/verbs.c | 44 -
drivers/infiniband/hw/ipath/ipath_mad.c | 42 -
drivers/infiniband/hw/mthca/mthca_cmd.c | 23
drivers/infiniband/hw/mthca/mthca_cq.c | 12
drivers/infiniband/hw/mthca/mthca_eq.c | 4
drivers/infiniband/hw/mthca/mthca_mad.c | 14
drivers/infiniband/hw/mthca/mthca_provider.c | 33
drivers/infiniband/hw/mthca/mthca_provider.h | 3
drivers/infiniband/hw/mthca/mthca_qp.c | 40
drivers/infiniband/hw/mthca/mthca_reset.c | 59 +
drivers/infiniband/hw/mthca/mthca_srq.c | 5
drivers/infiniband/ulp/ipoib/ipoib.h | 34
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 27
drivers/infiniband/ulp/ipoib/ipoib_main.c | 28
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 11
drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 3
drivers/infiniband/ulp/srp/ib_srp.c | 482 ++++--
drivers/infiniband/ulp/srp/ib_srp.h | 33
include/rdma/ib_addr.h | 114 +
include/rdma/ib_cache.h | 13
include/rdma/ib_cm.h | 26
include/rdma/ib_marshall.h | 50 +
include/rdma/ib_sa.h | 7
include/rdma/ib_smi.h | 36
include/rdma/ib_user_cm.h | 86 -
include/rdma/ib_user_sa.h | 60 +
include/rdma/ib_user_verbs.h | 80 +
include/rdma/ib_verbs.h | 22
include/rdma/rdma_cm.h | 256 +++
include/rdma/rdma_cm_ib.h | 47 +
include/scsi/srp.h | 5
net/ipv4/fib_frontend.c | 1
48 files changed, 4590 insertions(+), 1072 deletions(-)
create mode 100644 drivers/infiniband/core/addr.c
create mode 100644 drivers/infiniband/core/cma.c
create mode 100644 drivers/infiniband/core/uverbs_marshall.c
create mode 100644 include/rdma/ib_addr.h
create mode 100644 include/rdma/ib_marshall.h
create mode 100644 include/rdma/ib_user_sa.h
create mode 100644 include/rdma/rdma_cm.h
create mode 100644 include/rdma/rdma_cm_ib.h
^ permalink raw reply [flat|nested] 223+ messages in thread
* [git pull] please pull infiniband.git
@ 2006-06-13 18:19 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-06-13 18:19 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This has a couple of mthca driver bug fixes:
Michael S. Tsirkin:
IB/mthca: restore missing PCI registers after reset
IB/mthca: memfree completion with error FW bug workaround
drivers/infiniband/hw/mthca/mthca_cq.c | 11 +++++
drivers/infiniband/hw/mthca/mthca_reset.c | 59 +++++++++++++++++++++++++++++
2 files changed, 69 insertions(+), 1 deletions(-)
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
index 205854e..87a8f11 100644
--- a/drivers/infiniband/hw/mthca/mthca_cq.c
+++ b/drivers/infiniband/hw/mthca/mthca_cq.c
@@ -540,8 +540,17 @@ static inline int mthca_poll_one(struct
entry->wr_id = srq->wrid[wqe_index];
mthca_free_srq_wqe(srq, wqe);
} else {
+ s32 wqe;
wq = &(*cur_qp)->rq;
- wqe_index = be32_to_cpu(cqe->wqe) >> wq->wqe_shift;
+ wqe = be32_to_cpu(cqe->wqe);
+ wqe_index = wqe >> wq->wqe_shift;
+ /*
+ * WQE addr == base - 1 might be reported in receive completion
+ * with error instead of (rq size - 1) by Sinai FW 1.0.800 and
+ * Arbel FW 5.1.400. This bug should be fixed in later FW revs.
+ */
+ if (unlikely(wqe_index < 0))
+ wqe_index = wq->max - 1;
entry->wr_id = (*cur_qp)->wrid[wqe_index];
}
diff --git a/drivers/infiniband/hw/mthca/mthca_reset.c b/drivers/infiniband/hw/mthca/mthca_reset.c
index df5e494..f4fddd5 100644
--- a/drivers/infiniband/hw/mthca/mthca_reset.c
+++ b/drivers/infiniband/hw/mthca/mthca_reset.c
@@ -49,6 +49,12 @@ int mthca_reset(struct mthca_dev *mdev)
u32 *hca_header = NULL;
u32 *bridge_header = NULL;
struct pci_dev *bridge = NULL;
+ int bridge_pcix_cap = 0;
+ int hca_pcie_cap = 0;
+ int hca_pcix_cap = 0;
+
+ u16 devctl;
+ u16 linkctl;
#define MTHCA_RESET_OFFSET 0xf0010
#define MTHCA_RESET_VALUE swab32(1)
@@ -110,6 +116,9 @@ #define MTHCA_RESET_VALUE swab32(1)
}
}
+ hca_pcix_cap = pci_find_capability(mdev->pdev, PCI_CAP_ID_PCIX);
+ hca_pcie_cap = pci_find_capability(mdev->pdev, PCI_CAP_ID_EXP);
+
if (bridge) {
bridge_header = kmalloc(256, GFP_KERNEL);
if (!bridge_header) {
@@ -129,6 +138,13 @@ #define MTHCA_RESET_VALUE swab32(1)
goto out;
}
}
+ bridge_pcix_cap = pci_find_capability(bridge, PCI_CAP_ID_PCIX);
+ if (!bridge_pcix_cap) {
+ err = -ENODEV;
+ mthca_err(mdev, "Couldn't locate HCA bridge "
+ "PCI-X capability, aborting.\n");
+ goto out;
+ }
}
/* actually hit reset */
@@ -178,6 +194,20 @@ #define MTHCA_RESET_VALUE swab32(1)
good:
/* Now restore the PCI headers */
if (bridge) {
+ if (pci_write_config_dword(bridge, bridge_pcix_cap + 0x8,
+ bridge_header[(bridge_pcix_cap + 0x8) / 4])) {
+ err = -ENODEV;
+ mthca_err(mdev, "Couldn't restore HCA bridge Upstream "
+ "split transaction control, aborting.\n");
+ goto out;
+ }
+ if (pci_write_config_dword(bridge, bridge_pcix_cap + 0xc,
+ bridge_header[(bridge_pcix_cap + 0xc) / 4])) {
+ err = -ENODEV;
+ mthca_err(mdev, "Couldn't restore HCA bridge Downstream "
+ "split transaction control, aborting.\n");
+ goto out;
+ }
/*
* Bridge control register is at 0x3e, so we'll
* naturally restore it last in this loop.
@@ -203,6 +233,35 @@ good:
}
}
+ if (hca_pcix_cap) {
+ if (pci_write_config_dword(mdev->pdev, hca_pcix_cap,
+ hca_header[hca_pcix_cap / 4])) {
+ err = -ENODEV;
+ mthca_err(mdev, "Couldn't restore HCA PCI-X "
+ "command register, aborting.\n");
+ goto out;
+ }
+ }
+
+ if (hca_pcie_cap) {
+ devctl = hca_header[(hca_pcie_cap + PCI_EXP_DEVCTL) / 4];
+ if (pci_write_config_word(mdev->pdev, hca_pcie_cap + PCI_EXP_DEVCTL,
+ devctl)) {
+ err = -ENODEV;
+ mthca_err(mdev, "Couldn't restore HCA PCI Express "
+ "Device Control register, aborting.\n");
+ goto out;
+ }
+ linkctl = hca_header[(hca_pcie_cap + PCI_EXP_LNKCTL) / 4];
+ if (pci_write_config_word(mdev->pdev, hca_pcie_cap + PCI_EXP_LNKCTL,
+ linkctl)) {
+ err = -ENODEV;
+ mthca_err(mdev, "Couldn't restore HCA PCI Express "
+ "Link control register, aborting.\n");
+ goto out;
+ }
+ }
+
for (i = 0; i < 16; ++i) {
if (i * 4 == PCI_COMMAND)
continue;
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [git pull] please pull infiniband.git
@ 2006-06-05 17:21 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-06-05 17:21 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This has a one-line bug fix:
Eli Cohen:
IPoIB: Fix AH leak at interface down
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index a54da42..8406839 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -275,6 +275,7 @@ static void ipoib_ib_handle_wc(struct ne
spin_lock_irqsave(&priv->tx_lock, flags);
++priv->tx_tail;
if (netif_queue_stopped(dev) &&
+ test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags) &&
priv->tx_head - priv->tx_tail <= ipoib_sendq_size >> 1)
netif_wake_queue(dev);
spin_unlock_irqrestore(&priv->tx_lock, flags);
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [git pull] please pull infiniband.git
@ 2006-05-26 0:09 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-05-26 0:09 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree has one bug fix (really the second half of a fix for a bug
that appeared two different places):
Michael S. Tsirkin:
IB/mthca: Fix posting lists of 256 receive requests to SRQ for Tavor
drivers/infiniband/hw/mthca/mthca_srq.c | 41 ++++++++++++++++---------------
1 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/drivers/infiniband/hw/mthca/mthca_srq.c b/drivers/infiniband/hw/mthca/mthca_srq.c
index 1ea4332..b292fef 100644
--- a/drivers/infiniband/hw/mthca/mthca_srq.c
+++ b/drivers/infiniband/hw/mthca/mthca_srq.c
@@ -490,26 +490,7 @@ int mthca_tavor_post_srq_recv(struct ib_
first_ind = srq->first_free;
- for (nreq = 0; wr; ++nreq, wr = wr->next) {
- if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) {
- nreq = 0;
-
- doorbell[0] = cpu_to_be32(first_ind << srq->wqe_shift);
- doorbell[1] = cpu_to_be32(srq->srqn << 8);
-
- /*
- * Make sure that descriptors are written
- * before doorbell is rung.
- */
- wmb();
-
- mthca_write64(doorbell,
- dev->kar + MTHCA_RECEIVE_DOORBELL,
- MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
-
- first_ind = srq->first_free;
- }
-
+ for (nreq = 0; wr; wr = wr->next) {
ind = srq->first_free;
if (ind < 0) {
@@ -569,6 +550,26 @@ int mthca_tavor_post_srq_recv(struct ib_
srq->wrid[ind] = wr->wr_id;
srq->first_free = next_ind;
+
+ ++nreq;
+ if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) {
+ nreq = 0;
+
+ doorbell[0] = cpu_to_be32(first_ind << srq->wqe_shift);
+ doorbell[1] = cpu_to_be32(srq->srqn << 8);
+
+ /*
+ * Make sure that descriptors are written
+ * before doorbell is rung.
+ */
+ wmb();
+
+ mthca_write64(doorbell,
+ dev->kar + MTHCA_RECEIVE_DOORBELL,
+ MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
+
+ first_ind = srq->first_free;
+ }
}
if (likely(nreq)) {
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [git pull] please pull infiniband.git
@ 2006-05-23 21:05 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-05-23 21:05 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This contains fixes for the new ipath driver. The changes are a
little bit bigger than I would prefer at this stage in the release
cycle, but since the ipath driver is new in 2.6.17, there's no risk of
regressions against 2.6.16 ;)
Bryan O'Sullivan:
IB/ipath: fix spinlock recursion bug
IB/ipath: don't modify QP if changes fail
IB/ipath: fix reporting of driver version to userspace
IB/ipath: replace uses of LIST_POISON
IB/ipath: fix NULL dereference during cleanup
IB/ipath: enable GPIO interrupt on HT-460
IB/ipath: enable PE800 receive interrupts on user ports
IB/ipath: register as IB device owner
IB/ipath: fix null deref during rdma ops
IB/ipath: deref correct pointer when using kernel SMA
drivers/infiniband/hw/ipath/ipath_driver.c | 22 ++++-----
drivers/infiniband/hw/ipath/ipath_eeprom.c | 7 +--
drivers/infiniband/hw/ipath/ipath_file_ops.c | 6 ++
drivers/infiniband/hw/ipath/ipath_ht400.c | 21 +++++++-
drivers/infiniband/hw/ipath/ipath_init_chip.c | 1
drivers/infiniband/hw/ipath/ipath_kernel.h | 2 -
drivers/infiniband/hw/ipath/ipath_keys.c | 6 --
drivers/infiniband/hw/ipath/ipath_layer.c | 12 +++--
drivers/infiniband/hw/ipath/ipath_pe800.c | 2 +
drivers/infiniband/hw/ipath/ipath_qp.c | 64 +++++++++++++------------
drivers/infiniband/hw/ipath/ipath_rc.c | 15 +++---
drivers/infiniband/hw/ipath/ipath_ruc.c | 2 -
drivers/infiniband/hw/ipath/ipath_verbs.c | 7 ++-
13 files changed, 92 insertions(+), 75 deletions(-)
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index 3697eda..dddcdae 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -1905,19 +1905,19 @@ static void __exit infinipath_cleanup(vo
} else
ipath_dbg("irq is 0, not doing free_irq "
"for unit %u\n", dd->ipath_unit);
- dd->pcidev = NULL;
- }
- /*
- * we check for NULL here, because it's outside the kregbase
- * check, and we need to call it after the free_irq. Thus
- * it's possible that the function pointers were never
- * initialized.
- */
- if (dd->ipath_f_cleanup)
- /* clean up chip-specific stuff */
- dd->ipath_f_cleanup(dd);
+ /*
+ * we check for NULL here, because it's outside
+ * the kregbase check, and we need to call it
+ * after the free_irq. Thus it's possible that
+ * the function pointers were never initialized.
+ */
+ if (dd->ipath_f_cleanup)
+ /* clean up chip-specific stuff */
+ dd->ipath_f_cleanup(dd);
+ dd->pcidev = NULL;
+ }
spin_lock_irqsave(&ipath_devs_lock, flags);
}
diff --git a/drivers/infiniband/hw/ipath/ipath_eeprom.c b/drivers/infiniband/hw/ipath/ipath_eeprom.c
index f11a900..a2f1cea 100644
--- a/drivers/infiniband/hw/ipath/ipath_eeprom.c
+++ b/drivers/infiniband/hw/ipath/ipath_eeprom.c
@@ -505,11 +505,10 @@ static u8 flash_csum(struct ipath_flash
* ipath_get_guid - get the GUID from the i2c device
* @dd: the infinipath device
*
- * When we add the multi-chip support, we will probably have to add
- * the ability to use the number of guids field, and get the guid from
- * the first chip's flash, to use for all of them.
+ * We have the capability to use the ipath_nguid field, and get
+ * the guid from the first chip's flash, to use for all of them.
*/
-void ipath_get_guid(struct ipath_devdata *dd)
+void ipath_get_eeprom_info(struct ipath_devdata *dd)
{
void *buf;
struct ipath_flash *ifp;
diff --git a/drivers/infiniband/hw/ipath/ipath_file_ops.c b/drivers/infiniband/hw/ipath/ipath_file_ops.c
index c347191..ada267e 100644
--- a/drivers/infiniband/hw/ipath/ipath_file_ops.c
+++ b/drivers/infiniband/hw/ipath/ipath_file_ops.c
@@ -139,7 +139,7 @@ static int ipath_get_base_info(struct ip
kinfo->spi_piosize = dd->ipath_ibmaxlen;
kinfo->spi_mtu = dd->ipath_ibmaxlen; /* maxlen, not ibmtu */
kinfo->spi_port = pd->port_port;
- kinfo->spi_sw_version = IPATH_USER_SWVERSION;
+ kinfo->spi_sw_version = IPATH_KERN_SWVERSION;
kinfo->spi_hw_version = dd->ipath_revision;
if (copy_to_user(ubase, kinfo, sizeof(*kinfo)))
@@ -1224,6 +1224,10 @@ static unsigned int ipath_poll(struct fi
if (tail == head) {
set_bit(IPATH_PORT_WAITING_RCV, &pd->port_flag);
+ if(dd->ipath_rhdrhead_intr_off) /* arm rcv interrupt */
+ (void)ipath_write_ureg(dd, ur_rcvhdrhead,
+ dd->ipath_rhdrhead_intr_off
+ | head, pd->port_port);
poll_wait(fp, &pd->port_wait, pt);
if (test_bit(IPATH_PORT_WAITING_RCV, &pd->port_flag)) {
diff --git a/drivers/infiniband/hw/ipath/ipath_ht400.c b/drivers/infiniband/hw/ipath/ipath_ht400.c
index 4652435..fac0a2b 100644
--- a/drivers/infiniband/hw/ipath/ipath_ht400.c
+++ b/drivers/infiniband/hw/ipath/ipath_ht400.c
@@ -607,7 +607,12 @@ static int ipath_ht_boardname(struct ipa
case 4: /* Ponderosa is one of the bringup boards */
n = "Ponderosa";
break;
- case 5: /* HT-460 original production board */
+ case 5:
+ /*
+ * HT-460 original production board; two production levels, with
+ * different serial number ranges. See ipath_ht_early_init() for
+ * case where we enable IPATH_GPIO_INTR for later serial # range.
+ */
n = "InfiniPath_HT-460";
break;
case 6:
@@ -642,7 +647,7 @@ static int ipath_ht_boardname(struct ipa
if (n)
snprintf(name, namelen, "%s", n);
- if (dd->ipath_majrev != 3 || dd->ipath_minrev != 2) {
+ if (dd->ipath_majrev != 3 || (dd->ipath_minrev < 2 || dd->ipath_minrev > 3)) {
/*
* This version of the driver only supports the HT-400
* Rev 3.2
@@ -1520,6 +1525,18 @@ static int ipath_ht_early_init(struct ip
*/
ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl,
INFINIPATH_S_ABORT);
+
+ ipath_get_eeprom_info(dd);
+ if(dd->ipath_boardrev == 5 && dd->ipath_serial[0] == '1' &&
+ dd->ipath_serial[1] == '2' && dd->ipath_serial[2] == '8') {
+ /*
+ * Later production HT-460 has same changes as HT-465, so
+ * can use GPIO interrupts. They have serial #'s starting
+ * with 128, rather than 112.
+ */
+ dd->ipath_flags |= IPATH_GPIO_INTR;
+ dd->ipath_flags &= ~IPATH_POLL_RX_INTR;
+ }
return 0;
}
diff --git a/drivers/infiniband/hw/ipath/ipath_init_chip.c b/drivers/infiniband/hw/ipath/ipath_init_chip.c
index 16f640e..dc83250 100644
--- a/drivers/infiniband/hw/ipath/ipath_init_chip.c
+++ b/drivers/infiniband/hw/ipath/ipath_init_chip.c
@@ -879,7 +879,6 @@ int ipath_init_chip(struct ipath_devdata
done:
if (!ret) {
- ipath_get_guid(dd);
*dd->ipath_statusp |= IPATH_STATUS_CHIP_PRESENT;
if (!dd->ipath_f_intrsetup(dd)) {
/* now we can enable all interrupts from the chip */
diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h
index e6507f8..5d92d57 100644
--- a/drivers/infiniband/hw/ipath/ipath_kernel.h
+++ b/drivers/infiniband/hw/ipath/ipath_kernel.h
@@ -650,7 +650,7 @@ u32 __iomem *ipath_getpiobuf(struct ipat
void ipath_init_pe800_funcs(struct ipath_devdata *);
/* init HT-400-specific func */
void ipath_init_ht400_funcs(struct ipath_devdata *);
-void ipath_get_guid(struct ipath_devdata *);
+void ipath_get_eeprom_info(struct ipath_devdata *);
u64 ipath_snap_cntr(struct ipath_devdata *, ipath_creg);
/*
diff --git a/drivers/infiniband/hw/ipath/ipath_keys.c b/drivers/infiniband/hw/ipath/ipath_keys.c
index aa33b0e..5ae8761 100644
--- a/drivers/infiniband/hw/ipath/ipath_keys.c
+++ b/drivers/infiniband/hw/ipath/ipath_keys.c
@@ -136,9 +136,7 @@ int ipath_lkey_ok(struct ipath_lkey_tabl
ret = 1;
goto bail;
}
- spin_lock(&rkt->lock);
mr = rkt->table[(sge->lkey >> (32 - ib_ipath_lkey_table_size))];
- spin_unlock(&rkt->lock);
if (unlikely(mr == NULL || mr->lkey != sge->lkey)) {
ret = 0;
goto bail;
@@ -184,8 +182,6 @@ bail:
* @acc: access flags
*
* Return 1 if successful, otherwise 0.
- *
- * The QP r_rq.lock should be held.
*/
int ipath_rkey_ok(struct ipath_ibdev *dev, struct ipath_sge_state *ss,
u32 len, u64 vaddr, u32 rkey, int acc)
@@ -196,9 +192,7 @@ int ipath_rkey_ok(struct ipath_ibdev *de
size_t off;
int ret;
- spin_lock(&rkt->lock);
mr = rkt->table[(rkey >> (32 - ib_ipath_lkey_table_size))];
- spin_unlock(&rkt->lock);
if (unlikely(mr == NULL || mr->lkey != rkey)) {
ret = 0;
goto bail;
diff --git a/drivers/infiniband/hw/ipath/ipath_layer.c b/drivers/infiniband/hw/ipath/ipath_layer.c
index 9cb5258..9ec4ac7 100644
--- a/drivers/infiniband/hw/ipath/ipath_layer.c
+++ b/drivers/infiniband/hw/ipath/ipath_layer.c
@@ -872,12 +872,13 @@ static void copy_io(u32 __iomem *piobuf,
update_sge(ss, len);
length -= len;
}
+ /* Update address before sending packet. */
+ update_sge(ss, length);
/* must flush early everything before trigger word */
ipath_flush_wc();
__raw_writel(last, piobuf);
/* be sure trigger word is written */
ipath_flush_wc();
- update_sge(ss, length);
}
/**
@@ -943,17 +944,18 @@ int ipath_verbs_send(struct ipath_devdat
if (likely(ss->num_sge == 1 && len <= ss->sge.length &&
!((unsigned long)ss->sge.vaddr & (sizeof(u32) - 1)))) {
u32 w;
+ u32 *addr = (u32 *) ss->sge.vaddr;
+ /* Update address before sending packet. */
+ update_sge(ss, len);
/* Need to round up for the last dword in the packet. */
w = (len + 3) >> 2;
- __iowrite32_copy(piobuf, ss->sge.vaddr, w - 1);
+ __iowrite32_copy(piobuf, addr, w - 1);
/* must flush early everything before trigger word */
ipath_flush_wc();
- __raw_writel(((u32 *) ss->sge.vaddr)[w - 1],
- piobuf + w - 1);
+ __raw_writel(addr[w - 1], piobuf + w - 1);
/* be sure trigger word is written */
ipath_flush_wc();
- update_sge(ss, len);
ret = 0;
goto bail;
}
diff --git a/drivers/infiniband/hw/ipath/ipath_pe800.c b/drivers/infiniband/hw/ipath/ipath_pe800.c
index 6318067..02e8c75 100644
--- a/drivers/infiniband/hw/ipath/ipath_pe800.c
+++ b/drivers/infiniband/hw/ipath/ipath_pe800.c
@@ -1180,6 +1180,8 @@ static int ipath_pe_early_init(struct ip
*/
dd->ipath_rhdrhead_intr_off = 1ULL<<32;
+ ipath_get_eeprom_info(dd);
+
return 0;
}
diff --git a/drivers/infiniband/hw/ipath/ipath_qp.c b/drivers/infiniband/hw/ipath/ipath_qp.c
index 1889071..9f8855d 100644
--- a/drivers/infiniband/hw/ipath/ipath_qp.c
+++ b/drivers/infiniband/hw/ipath/ipath_qp.c
@@ -375,10 +375,10 @@ static void ipath_error_qp(struct ipath_
spin_lock(&dev->pending_lock);
/* XXX What if its already removed by the timeout code? */
- if (qp->timerwait.next != LIST_POISON1)
- list_del(&qp->timerwait);
- if (qp->piowait.next != LIST_POISON1)
- list_del(&qp->piowait);
+ if (!list_empty(&qp->timerwait))
+ list_del_init(&qp->timerwait);
+ if (!list_empty(&qp->piowait))
+ list_del_init(&qp->piowait);
spin_unlock(&dev->pending_lock);
wc.status = IB_WC_WR_FLUSH_ERR;
@@ -427,6 +427,7 @@ static void ipath_error_qp(struct ipath_
int ipath_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
int attr_mask)
{
+ struct ipath_ibdev *dev = to_idev(ibqp->device);
struct ipath_qp *qp = to_iqp(ibqp);
enum ib_qp_state cur_state, new_state;
unsigned long flags;
@@ -443,6 +444,19 @@ int ipath_modify_qp(struct ib_qp *ibqp,
attr_mask))
goto inval;
+ if (attr_mask & IB_QP_AV)
+ if (attr->ah_attr.dlid == 0 ||
+ attr->ah_attr.dlid >= IPS_MULTICAST_LID_BASE)
+ goto inval;
+
+ if (attr_mask & IB_QP_PKEY_INDEX)
+ if (attr->pkey_index >= ipath_layer_get_npkeys(dev->dd))
+ goto inval;
+
+ if (attr_mask & IB_QP_MIN_RNR_TIMER)
+ if (attr->min_rnr_timer > 31)
+ goto inval;
+
switch (new_state) {
case IB_QPS_RESET:
ipath_reset_qp(qp);
@@ -457,13 +471,8 @@ int ipath_modify_qp(struct ib_qp *ibqp,
}
- if (attr_mask & IB_QP_PKEY_INDEX) {
- struct ipath_ibdev *dev = to_idev(ibqp->device);
-
- if (attr->pkey_index >= ipath_layer_get_npkeys(dev->dd))
- goto inval;
+ if (attr_mask & IB_QP_PKEY_INDEX)
qp->s_pkey_index = attr->pkey_index;
- }
if (attr_mask & IB_QP_DEST_QPN)
qp->remote_qpn = attr->dest_qp_num;
@@ -479,12 +488,8 @@ int ipath_modify_qp(struct ib_qp *ibqp,
if (attr_mask & IB_QP_ACCESS_FLAGS)
qp->qp_access_flags = attr->qp_access_flags;
- if (attr_mask & IB_QP_AV) {
- if (attr->ah_attr.dlid == 0 ||
- attr->ah_attr.dlid >= IPS_MULTICAST_LID_BASE)
- goto inval;
+ if (attr_mask & IB_QP_AV)
qp->remote_ah_attr = attr->ah_attr;
- }
if (attr_mask & IB_QP_PATH_MTU)
qp->path_mtu = attr->path_mtu;
@@ -499,11 +504,8 @@ int ipath_modify_qp(struct ib_qp *ibqp,
qp->s_rnr_retry_cnt = qp->s_rnr_retry;
}
- if (attr_mask & IB_QP_MIN_RNR_TIMER) {
- if (attr->min_rnr_timer > 31)
- goto inval;
+ if (attr_mask & IB_QP_MIN_RNR_TIMER)
qp->s_min_rnr_timer = attr->min_rnr_timer;
- }
if (attr_mask & IB_QP_QKEY)
qp->qkey = attr->qkey;
@@ -710,10 +712,8 @@ struct ib_qp *ipath_create_qp(struct ib_
init_attr->qp_type == IB_QPT_RC ?
ipath_do_rc_send : ipath_do_uc_send,
(unsigned long)qp);
- qp->piowait.next = LIST_POISON1;
- qp->piowait.prev = LIST_POISON2;
- qp->timerwait.next = LIST_POISON1;
- qp->timerwait.prev = LIST_POISON2;
+ INIT_LIST_HEAD(&qp->piowait);
+ INIT_LIST_HEAD(&qp->timerwait);
qp->state = IB_QPS_RESET;
qp->s_wq = swq;
qp->s_size = init_attr->cap.max_send_wr + 1;
@@ -734,7 +734,7 @@ struct ib_qp *ipath_create_qp(struct ib_
ipath_reset_qp(qp);
/* Tell the core driver that the kernel SMA is present. */
- if (qp->ibqp.qp_type == IB_QPT_SMI)
+ if (init_attr->qp_type == IB_QPT_SMI)
ipath_layer_set_verbs_flags(dev->dd,
IPATH_VERBS_KERNEL_SMA);
break;
@@ -783,10 +783,10 @@ int ipath_destroy_qp(struct ib_qp *ibqp)
/* Make sure the QP isn't on the timeout list. */
spin_lock_irqsave(&dev->pending_lock, flags);
- if (qp->timerwait.next != LIST_POISON1)
- list_del(&qp->timerwait);
- if (qp->piowait.next != LIST_POISON1)
- list_del(&qp->piowait);
+ if (!list_empty(&qp->timerwait))
+ list_del_init(&qp->timerwait);
+ if (!list_empty(&qp->piowait))
+ list_del_init(&qp->piowait);
spin_unlock_irqrestore(&dev->pending_lock, flags);
/*
@@ -855,10 +855,10 @@ void ipath_sqerror_qp(struct ipath_qp *q
spin_lock(&dev->pending_lock);
/* XXX What if its already removed by the timeout code? */
- if (qp->timerwait.next != LIST_POISON1)
- list_del(&qp->timerwait);
- if (qp->piowait.next != LIST_POISON1)
- list_del(&qp->piowait);
+ if (!list_empty(&qp->timerwait))
+ list_del_init(&qp->timerwait);
+ if (!list_empty(&qp->piowait))
+ list_del_init(&qp->piowait);
spin_unlock(&dev->pending_lock);
ipath_cq_enter(to_icq(qp->ibqp.send_cq), wc, 1);
diff --git a/drivers/infiniband/hw/ipath/ipath_rc.c b/drivers/infiniband/hw/ipath/ipath_rc.c
index a4055ca..493b182 100644
--- a/drivers/infiniband/hw/ipath/ipath_rc.c
+++ b/drivers/infiniband/hw/ipath/ipath_rc.c
@@ -57,7 +57,7 @@ static void ipath_init_restart(struct ip
qp->s_len = wqe->length - len;
dev = to_idev(qp->ibqp.device);
spin_lock(&dev->pending_lock);
- if (qp->timerwait.next == LIST_POISON1)
+ if (list_empty(&qp->timerwait))
list_add_tail(&qp->timerwait,
&dev->pending[dev->pending_index]);
spin_unlock(&dev->pending_lock);
@@ -356,7 +356,7 @@ static inline int ipath_make_rc_req(stru
if ((int)(qp->s_psn - qp->s_next_psn) > 0)
qp->s_next_psn = qp->s_psn;
spin_lock(&dev->pending_lock);
- if (qp->timerwait.next == LIST_POISON1)
+ if (list_empty(&qp->timerwait))
list_add_tail(&qp->timerwait,
&dev->pending[dev->pending_index]);
spin_unlock(&dev->pending_lock);
@@ -726,8 +726,8 @@ void ipath_restart_rc(struct ipath_qp *q
*/
dev = to_idev(qp->ibqp.device);
spin_lock(&dev->pending_lock);
- if (qp->timerwait.next != LIST_POISON1)
- list_del(&qp->timerwait);
+ if (!list_empty(&qp->timerwait))
+ list_del_init(&qp->timerwait);
spin_unlock(&dev->pending_lock);
if (wqe->wr.opcode == IB_WR_RDMA_READ)
@@ -886,8 +886,8 @@ static int do_rc_ack(struct ipath_qp *qp
* just won't find anything to restart if we ACK everything.
*/
spin_lock(&dev->pending_lock);
- if (qp->timerwait.next != LIST_POISON1)
- list_del(&qp->timerwait);
+ if (!list_empty(&qp->timerwait))
+ list_del_init(&qp->timerwait);
spin_unlock(&dev->pending_lock);
/*
@@ -1194,8 +1194,7 @@ static inline void ipath_rc_rcv_resp(str
IB_WR_RDMA_READ))
goto ack_done;
spin_lock(&dev->pending_lock);
- if (qp->s_rnr_timeout == 0 &&
- qp->timerwait.next != LIST_POISON1)
+ if (qp->s_rnr_timeout == 0 && !list_empty(&qp->timerwait))
list_move_tail(&qp->timerwait,
&dev->pending[dev->pending_index]);
spin_unlock(&dev->pending_lock);
diff --git a/drivers/infiniband/hw/ipath/ipath_ruc.c b/drivers/infiniband/hw/ipath/ipath_ruc.c
index eb81424..d38f4f3 100644
--- a/drivers/infiniband/hw/ipath/ipath_ruc.c
+++ b/drivers/infiniband/hw/ipath/ipath_ruc.c
@@ -435,7 +435,7 @@ void ipath_no_bufs_available(struct ipat
unsigned long flags;
spin_lock_irqsave(&dev->pending_lock, flags);
- if (qp->piowait.next == LIST_POISON1)
+ if (list_empty(&qp->piowait))
list_add_tail(&qp->piowait, &dev->piowait);
spin_unlock_irqrestore(&dev->pending_lock, flags);
/*
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c
index cb9e387..28fdbda 100644
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c
@@ -464,7 +464,7 @@ static void ipath_ib_timer(void *arg)
last = &dev->pending[dev->pending_index];
while (!list_empty(last)) {
qp = list_entry(last->next, struct ipath_qp, timerwait);
- list_del(&qp->timerwait);
+ list_del_init(&qp->timerwait);
qp->timer_next = resend;
resend = qp;
atomic_inc(&qp->refcount);
@@ -474,7 +474,7 @@ static void ipath_ib_timer(void *arg)
qp = list_entry(last->next, struct ipath_qp, timerwait);
if (--qp->s_rnr_timeout == 0) {
do {
- list_del(&qp->timerwait);
+ list_del_init(&qp->timerwait);
tasklet_hi_schedule(&qp->s_task);
if (list_empty(last))
break;
@@ -554,7 +554,7 @@ static int ipath_ib_piobufavail(void *ar
while (!list_empty(&dev->piowait)) {
qp = list_entry(dev->piowait.next, struct ipath_qp,
piowait);
- list_del(&qp->piowait);
+ list_del_init(&qp->piowait);
tasklet_hi_schedule(&qp->s_task);
}
spin_unlock_irqrestore(&dev->pending_lock, flags);
@@ -951,6 +951,7 @@ static void *ipath_register_ib_device(in
idev->dd = dd;
strlcpy(dev->name, "ipath%d", IB_DEVICE_NAME_MAX);
+ dev->owner = THIS_MODULE;
dev->node_guid = ipath_layer_get_guid(dd);
dev->uverbs_abi_ver = IPATH_UVERBS_ABI_VERSION;
dev->uverbs_cmd_mask =
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [git pull] Please pull infiniband.git
@ 2006-05-18 19:33 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-05-18 19:33 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, openib-general
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
The changes and patch are:
Ishai Rabinovitz:
IB/srp: Complete correct SCSI commands on device reset
Michael S. Tsirkin:
IB/mthca: Fix posting lists of 256 receive requests for Tavor
Roland Dreier:
IB/mthca: Make fw_cmd_doorbell default to 0
IB/srp: Don't wait for disconnection if sending DREQ fails
IB/srp: Get rid of extra scsi_host_put()s if reconnection fails
IB/uverbs: Don't leak ref to mm on error path
drivers/infiniband/core/uverbs_mem.c | 4 +++-
drivers/infiniband/hw/mthca/mthca_cmd.c | 2 +-
drivers/infiniband/hw/mthca/mthca_qp.c | 35 ++++++++++++++++---------------
drivers/infiniband/ulp/srp/ib_srp.c | 10 ++++-----
4 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/drivers/infiniband/core/uverbs_mem.c b/drivers/infiniband/core/uverbs_mem.c
index 36a32c3..efe147d 100644
--- a/drivers/infiniband/core/uverbs_mem.c
+++ b/drivers/infiniband/core/uverbs_mem.c
@@ -211,8 +211,10 @@ void ib_umem_release_on_close(struct ib_
*/
work = kmalloc(sizeof *work, GFP_KERNEL);
- if (!work)
+ if (!work) {
+ mmput(mm);
return;
+ }
INIT_WORK(&work->work, ib_umem_account, work);
work->mm = mm;
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c
index 1985b5d..798e13e 100644
--- a/drivers/infiniband/hw/mthca/mthca_cmd.c
+++ b/drivers/infiniband/hw/mthca/mthca_cmd.c
@@ -182,7 +182,7 @@ struct mthca_cmd_context {
u8 status;
};
-static int fw_cmd_doorbell = 1;
+static int fw_cmd_doorbell = 0;
module_param(fw_cmd_doorbell, int, 0644);
MODULE_PARM_DESC(fw_cmd_doorbell, "post FW commands through doorbell page if nonzero "
"(and supported by FW)");
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c
index 19765f6..07c13be 100644
--- a/drivers/infiniband/hw/mthca/mthca_qp.c
+++ b/drivers/infiniband/hw/mthca/mthca_qp.c
@@ -1727,23 +1727,7 @@ int mthca_tavor_post_receive(struct ib_q
ind = qp->rq.next_ind;
- for (nreq = 0; wr; ++nreq, wr = wr->next) {
- if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) {
- nreq = 0;
-
- doorbell[0] = cpu_to_be32((qp->rq.next_ind << qp->rq.wqe_shift) | size0);
- doorbell[1] = cpu_to_be32(qp->qpn << 8);
-
- wmb();
-
- mthca_write64(doorbell,
- dev->kar + MTHCA_RECEIVE_DOORBELL,
- MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
-
- qp->rq.head += MTHCA_TAVOR_MAX_WQES_PER_RECV_DB;
- size0 = 0;
- }
-
+ for (nreq = 0; wr; wr = wr->next) {
if (mthca_wq_overflow(&qp->rq, nreq, qp->ibqp.recv_cq)) {
mthca_err(dev, "RQ %06x full (%u head, %u tail,"
" %d max, %d nreq)\n", qp->qpn,
@@ -1797,6 +1781,23 @@ int mthca_tavor_post_receive(struct ib_q
++ind;
if (unlikely(ind >= qp->rq.max))
ind -= qp->rq.max;
+
+ ++nreq;
+ if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) {
+ nreq = 0;
+
+ doorbell[0] = cpu_to_be32((qp->rq.next_ind << qp->rq.wqe_shift) | size0);
+ doorbell[1] = cpu_to_be32(qp->qpn << 8);
+
+ wmb();
+
+ mthca_write64(doorbell,
+ dev->kar + MTHCA_RECEIVE_DOORBELL,
+ MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
+
+ qp->rq.head += MTHCA_TAVOR_MAX_WQES_PER_RECV_DB;
+ size0 = 0;
+ }
}
out:
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index c32ce43..9cbdffa 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -340,7 +340,10 @@ static void srp_disconnect_target(struct
/* XXX should send SRP_I_LOGOUT request */
init_completion(&target->done);
- ib_send_cm_dreq(target->cm_id, NULL, 0);
+ if (ib_send_cm_dreq(target->cm_id, NULL, 0)) {
+ printk(KERN_DEBUG PFX "Sending CM DREQ failed\n");
+ return;
+ }
wait_for_completion(&target->done);
}
@@ -351,7 +354,6 @@ static void srp_remove_work(void *target
spin_lock_irq(target->scsi_host->host_lock);
if (target->state != SRP_TARGET_DEAD) {
spin_unlock_irq(target->scsi_host->host_lock);
- scsi_host_put(target->scsi_host);
return;
}
target->state = SRP_TARGET_REMOVED;
@@ -365,8 +367,6 @@ static void srp_remove_work(void *target
ib_destroy_cm_id(target->cm_id);
srp_free_target_ib(target);
scsi_host_put(target->scsi_host);
- /* And another put to really free the target port... */
- scsi_host_put(target->scsi_host);
}
static int srp_connect_target(struct srp_target_port *target)
@@ -1241,7 +1241,7 @@ static int srp_reset_device(struct scsi_
list_for_each_entry_safe(req, tmp, &target->req_queue, list)
if (req->scmnd->device == scmnd->device) {
req->scmnd->result = DID_RESET << 16;
- scmnd->scsi_done(scmnd);
+ req->scmnd->scsi_done(req->scmnd);
srp_remove_req(target, req);
}
^ permalink raw reply related [flat|nested] 223+ messages in thread
* [git pull] Please pull infiniband.git
@ 2006-05-12 22:07 Roland Dreier
0 siblings, 0 replies; 223+ messages in thread
From: Roland Dreier @ 2006-05-12 22:07 UTC (permalink / raw)
To: torvalds; +Cc: openib-general, linux-kernel
Linus, please pull from
master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
This tree is also available from kernel.org mirrors at:
git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus
The changes and patch are:
Roland Dreier:
IB/ipath: Properly terminate PCI ID table
Sean Hefty:
IB: refcount race fixes
drivers/infiniband/core/cm.c | 12 ++++---
drivers/infiniband/core/mad.c | 47 +++++++++++++++-------------
drivers/infiniband/core/mad_priv.h | 5 ++-
drivers/infiniband/core/mad_rmpp.c | 20 ++++++------
drivers/infiniband/core/ucm.c | 12 ++++---
drivers/infiniband/hw/ipath/ipath_driver.c | 7 ++--
6 files changed, 55 insertions(+), 48 deletions(-)
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index 7cfedb8..86fee43 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -34,6 +34,8 @@
*
* $Id: cm.c 2821 2005-07-08 17:07:28Z sean.hefty $
*/
+
+#include <linux/completion.h>
#include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/idr.h>
@@ -122,7 +124,7 @@ struct cm_id_private {
struct rb_node service_node;
struct rb_node sidr_id_node;
spinlock_t lock; /* Do not acquire inside cm.lock */
- wait_queue_head_t wait;
+ struct completion comp;
atomic_t refcount;
struct ib_mad_send_buf *msg;
@@ -159,7 +161,7 @@ static void cm_work_handler(void *data);
static inline void cm_deref_id(struct cm_id_private *cm_id_priv)
{
if (atomic_dec_and_test(&cm_id_priv->refcount))
- wake_up(&cm_id_priv->wait);
+ complete(&cm_id_priv->comp);
}
static int cm_alloc_msg(struct cm_id_private *cm_id_priv,
@@ -559,7 +561,7 @@ struct ib_cm_id *ib_create_cm_id(struct
goto error;
spin_lock_init(&cm_id_priv->lock);
- init_waitqueue_head(&cm_id_priv->wait);
+ init_completion(&cm_id_priv->comp);
INIT_LIST_HEAD(&cm_id_priv->work_list);
atomic_set(&cm_id_priv->work_count, -1);
atomic_set(&cm_id_priv->refcount, 1);
@@ -724,8 +726,8 @@ retest:
}
cm_free_id(cm_id->local_id);
- atomic_dec(&cm_id_priv->refcount);
- wait_event(cm_id_priv->wait, !atomic_read(&cm_id_priv->refcount));
+ cm_deref_id(cm_id_priv);
+ wait_for_completion(&cm_id_priv->comp);
while ((work = cm_dequeue_work(cm_id_priv)) != NULL)
cm_free_work(work);
if (cm_id_priv->private_data && cm_id_priv->private_data_len)
diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index 469b692..5ad41a6 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -352,7 +352,7 @@ struct ib_mad_agent *ib_register_mad_age
INIT_WORK(&mad_agent_priv->local_work, local_completions,
mad_agent_priv);
atomic_set(&mad_agent_priv->refcount, 1);
- init_waitqueue_head(&mad_agent_priv->wait);
+ init_completion(&mad_agent_priv->comp);
return &mad_agent_priv->agent;
@@ -467,7 +467,7 @@ struct ib_mad_agent *ib_register_mad_sno
mad_snoop_priv->agent.qp = port_priv->qp_info[qpn].qp;
mad_snoop_priv->agent.port_num = port_num;
mad_snoop_priv->mad_snoop_flags = mad_snoop_flags;
- init_waitqueue_head(&mad_snoop_priv->wait);
+ init_completion(&mad_snoop_priv->comp);
mad_snoop_priv->snoop_index = register_snoop_agent(
&port_priv->qp_info[qpn],
mad_snoop_priv);
@@ -486,6 +486,18 @@ error1:
}
EXPORT_SYMBOL(ib_register_mad_snoop);
+static inline void deref_mad_agent(struct ib_mad_agent_private *mad_agent_priv)
+{
+ if (atomic_dec_and_test(&mad_agent_priv->refcount))
+ complete(&mad_agent_priv->comp);
+}
+
+static inline void deref_snoop_agent(struct ib_mad_snoop_private *mad_snoop_priv)
+{
+ if (atomic_dec_and_test(&mad_snoop_priv->refcount))
+ complete(&mad_snoop_priv->comp);
+}
+
static void unregister_mad_agent(struct ib_mad_agent_private *mad_agent_priv)
{
struct ib_mad_port_private *port_priv;
@@ -509,9 +521,8 @@ static void unregister_mad_agent(struct
flush_workqueue(port_priv->wq);
ib_cancel_rmpp_recvs(mad_agent_priv);
- atomic_dec(&mad_agent_priv->refcount);
- wait_event(mad_agent_priv->wait,
- !atomic_read(&mad_agent_priv->refcount));
+ deref_mad_agent(mad_agent_priv);
+ wait_for_completion(&mad_agent_priv->comp);
kfree(mad_agent_priv->reg_req);
ib_dereg_mr(mad_agent_priv->agent.mr);
@@ -529,9 +540,8 @@ static void unregister_mad_snoop(struct
atomic_dec(&qp_info->snoop_count);
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
- atomic_dec(&mad_snoop_priv->refcount);
- wait_event(mad_snoop_priv->wait,
- !atomic_read(&mad_snoop_priv->refcount));
+ deref_snoop_agent(mad_snoop_priv);
+ wait_for_completion(&mad_snoop_priv->comp);
kfree(mad_snoop_priv);
}
@@ -600,8 +610,7 @@ static void snoop_send(struct ib_mad_qp_
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
mad_snoop_priv->agent.snoop_handler(&mad_snoop_priv->agent,
send_buf, mad_send_wc);
- if (atomic_dec_and_test(&mad_snoop_priv->refcount))
- wake_up(&mad_snoop_priv->wait);
+ deref_snoop_agent(mad_snoop_priv);
spin_lock_irqsave(&qp_info->snoop_lock, flags);
}
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
@@ -626,8 +635,7 @@ static void snoop_recv(struct ib_mad_qp_
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
mad_snoop_priv->agent.recv_handler(&mad_snoop_priv->agent,
mad_recv_wc);
- if (atomic_dec_and_test(&mad_snoop_priv->refcount))
- wake_up(&mad_snoop_priv->wait);
+ deref_snoop_agent(mad_snoop_priv);
spin_lock_irqsave(&qp_info->snoop_lock, flags);
}
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
@@ -968,8 +976,7 @@ void ib_free_send_mad(struct ib_mad_send
free_send_rmpp_list(mad_send_wr);
kfree(send_buf->mad);
- if (atomic_dec_and_test(&mad_agent_priv->refcount))
- wake_up(&mad_agent_priv->wait);
+ deref_mad_agent(mad_agent_priv);
}
EXPORT_SYMBOL(ib_free_send_mad);
@@ -1757,8 +1764,7 @@ static void ib_mad_complete_recv(struct
mad_recv_wc = ib_process_rmpp_recv_wc(mad_agent_priv,
mad_recv_wc);
if (!mad_recv_wc) {
- if (atomic_dec_and_test(&mad_agent_priv->refcount))
- wake_up(&mad_agent_priv->wait);
+ deref_mad_agent(mad_agent_priv);
return;
}
}
@@ -1770,8 +1776,7 @@ static void ib_mad_complete_recv(struct
if (!mad_send_wr) {
spin_unlock_irqrestore(&mad_agent_priv->lock, flags);
ib_free_recv_mad(mad_recv_wc);
- if (atomic_dec_and_test(&mad_agent_priv->refcount))
- wake_up(&mad_agent_priv->wait);
+ deref_mad_agent(mad_agent_priv);
return;
}
ib_mark_mad_done(mad_send_wr);
@@ -1790,8 +1795,7 @@ static void ib_mad_complete_recv(struct
} else {
mad_agent_priv->agent.recv_handler(&mad_agent_priv->agent,
mad_recv_wc);
- if (atomic_dec_and_test(&mad_agent_priv->refcount))
- wake_up(&mad_agent_priv->wait);
+ deref_mad_agent(mad_agent_priv);
}
}
@@ -2021,8 +2025,7 @@ void ib_mad_complete_send_wr(struct ib_m
mad_send_wc);
/* Release reference on agent taken when sending */
- if (atomic_dec_and_test(&mad_agent_priv->refcount))
- wake_up(&mad_agent_priv->wait);
+ deref_mad_agent(mad_agent_priv);
return;
done:
spin_unlock_irqrestore(&mad_agent_priv->lock, flags);
diff --git a/drivers/infiniband/core/mad_priv.h b/drivers/infiniband/core/mad_priv.h
index 6c9c133..b4fa28d 100644
--- a/drivers/infiniband/core/mad_priv.h
+++ b/drivers/infiniband/core/mad_priv.h
@@ -37,6 +37,7 @@
#ifndef __IB_MAD_PRIV_H__
#define __IB_MAD_PRIV_H__
+#include <linux/completion.h>
#include <linux/pci.h>
#include <linux/kthread.h>
#include <linux/workqueue.h>
@@ -108,7 +109,7 @@ struct ib_mad_agent_private {
struct list_head rmpp_list;
atomic_t refcount;
- wait_queue_head_t wait;
+ struct completion comp;
};
struct ib_mad_snoop_private {
@@ -117,7 +118,7 @@ struct ib_mad_snoop_private {
int snoop_index;
int mad_snoop_flags;
atomic_t refcount;
- wait_queue_head_t wait;
+ struct completion comp;
};
struct ib_mad_send_wr_private {
diff --git a/drivers/infiniband/core/mad_rmpp.c b/drivers/infiniband/core/mad_rmpp.c
index dfd4e58..d4704e0 100644
--- a/drivers/infiniband/core/mad_rmpp.c
+++ b/drivers/infiniband/core/mad_rmpp.c
@@ -49,7 +49,7 @@ struct mad_rmpp_recv {
struct list_head list;
struct work_struct timeout_work;
struct work_struct cleanup_work;
- wait_queue_head_t wait;
+ struct completion comp;
enum rmpp_state state;
spinlock_t lock;
atomic_t refcount;
@@ -69,10 +69,16 @@ struct mad_rmpp_recv {
u8 method;
};
+static inline void deref_rmpp_recv(struct mad_rmpp_recv *rmpp_recv)
+{
+ if (atomic_dec_and_test(&rmpp_recv->refcount))
+ complete(&rmpp_recv->comp);
+}
+
static void destroy_rmpp_recv(struct mad_rmpp_recv *rmpp_recv)
{
- atomic_dec(&rmpp_recv->refcount);
- wait_event(rmpp_recv->wait, !atomic_read(&rmpp_recv->refcount));
+ deref_rmpp_recv(rmpp_recv);
+ wait_for_completion(&rmpp_recv->comp);
ib_destroy_ah(rmpp_recv->ah);
kfree(rmpp_recv);
}
@@ -253,7 +259,7 @@ create_rmpp_recv(struct ib_mad_agent_pri
goto error;
rmpp_recv->agent = agent;
- init_waitqueue_head(&rmpp_recv->wait);
+ init_completion(&rmpp_recv->comp);
INIT_WORK(&rmpp_recv->timeout_work, recv_timeout_handler, rmpp_recv);
INIT_WORK(&rmpp_recv->cleanup_work, recv_cleanup_handler, rmpp_recv);
spin_lock_init(&rmpp_recv->lock);
@@ -279,12 +285,6 @@ error: kfree(rmpp_recv);
return NULL;
}
-static inline void deref_rmpp_recv(struct mad_rmpp_recv *rmpp_recv)
-{
- if (atomic_dec_and_test(&rmpp_recv->refcount))
- wake_up(&rmpp_recv->wait);
-}
-
static struct mad_rmpp_recv *
find_rmpp_recv(struct ib_mad_agent_private *agent,
struct ib_mad_recv_wc *mad_recv_wc)
diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c
index f6a0596..9164a09 100644
--- a/drivers/infiniband/core/ucm.c
+++ b/drivers/infiniband/core/ucm.c
@@ -32,6 +32,8 @@
*
* $Id: ucm.c 2594 2005-06-13 19:46:02Z libor $
*/
+
+#include <linux/completion.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/module.h>
@@ -72,7 +74,7 @@ struct ib_ucm_file {
struct ib_ucm_context {
int id;
- wait_queue_head_t wait;
+ struct completion comp;
atomic_t ref;
int events_reported;
@@ -138,7 +140,7 @@ static struct ib_ucm_context *ib_ucm_ctx
static void ib_ucm_ctx_put(struct ib_ucm_context *ctx)
{
if (atomic_dec_and_test(&ctx->ref))
- wake_up(&ctx->wait);
+ complete(&ctx->comp);
}
static inline int ib_ucm_new_cm_id(int event)
@@ -178,7 +180,7 @@ static struct ib_ucm_context *ib_ucm_ctx
return NULL;
atomic_set(&ctx->ref, 1);
- init_waitqueue_head(&ctx->wait);
+ init_completion(&ctx->comp);
ctx->file = file;
INIT_LIST_HEAD(&ctx->events);
@@ -586,8 +588,8 @@ static ssize_t ib_ucm_destroy_id(struct
if (IS_ERR(ctx))
return PTR_ERR(ctx);
- atomic_dec(&ctx->ref);
- wait_event(ctx->wait, !atomic_read(&ctx->ref));
+ ib_ucm_ctx_put(ctx);
+ wait_for_completion(&ctx->comp);
/* No new events will be generated after destroying the cm_id. */
ib_destroy_cm_id(ctx->cm_id);
diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index 398add4..3697eda 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -116,10 +116,9 @@ #define PCI_DEVICE_ID_INFINIPATH_HT 0xd
#define PCI_DEVICE_ID_INFINIPATH_PE800 0x10
static const struct pci_device_id ipath_pci_tbl[] = {
- {PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE,
- PCI_DEVICE_ID_INFINIPATH_HT)},
- {PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE,
- PCI_DEVICE_ID_INFINIPATH_PE800)},
+ { PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE, PCI_DEVICE_ID_INFINIPATH_HT) },
+ { PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE, PCI_DEVICE_ID_INFINIPATH_PE800) },
+ { 0, }
};
MODULE_DEVICE_TABLE(pci, ipath_pci_tbl);
^ permalink raw reply related [flat|nested] 223+ messages in thread
end of thread, other threads:[~2015-04-22 17:08 UTC | newest]
Thread overview: 223+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-25 16:42 [GIT PULL] please pull infiniband.git Roland Dreier
2013-04-05 15:56 ` David Woodhouse
-- strict thread matches above, loose matches on Subject: below --
2015-04-22 17:08 Roland Dreier
2015-04-02 17:27 Roland Dreier
2015-02-20 17:08 Roland Dreier
2015-02-06 21:19 Roland Dreier
2015-02-07 15:58 ` Yann Droneaud
2015-02-03 21:42 Roland Dreier
2014-12-19 0:03 Roland Dreier
2014-10-16 22:52 Roland Dreier
2014-10-20 23:28 ` Doug Ledford
2014-11-02 20:06 ` Dave Airlie
2014-11-03 7:15 ` Eli Cohen
2014-11-03 7:58 ` Sagi Grimberg
2014-09-23 21:58 Roland Dreier
2014-09-27 21:19 ` Or Gerlitz
2014-08-14 16:05 Roland Dreier
2014-07-18 20:40 Roland Dreier
2014-06-10 17:14 Roland Dreier
2014-05-02 0:09 Roland Dreier
2014-04-18 18:40 Roland Dreier
2014-04-03 15:54 Roland Dreier
2014-02-14 17:51 Roland Dreier
2014-01-24 19:43 Roland Dreier
2013-12-23 17:24 Roland Dreier
2013-11-18 18:40 Roland Dreier
2013-11-19 17:25 ` Or Gerlitz
2013-10-22 17:22 Roland Dreier
2013-10-14 18:16 Roland Dreier
2013-10-15 0:52 ` Linus Torvalds
2013-10-15 17:48 ` Roland Dreier
2013-09-04 17:03 Roland Dreier
2013-09-05 0:31 ` Stephen Rothwell
2013-09-05 16:42 ` Linus Torvalds
2013-09-05 16:43 ` David Miller
2013-08-02 16:12 Roland Dreier
2013-07-11 23:52 Roland Dreier
2013-07-09 17:36 Roland Dreier
2013-07-10 14:35 ` Sebastian Riemer
2013-07-10 14:38 ` Roland Dreier
2013-07-10 15:34 ` Bart Van Assche
2013-06-07 22:28 Roland Dreier
2013-05-08 21:20 Roland Dreier
2013-02-26 17:41 Roland Dreier
2013-02-07 1:15 Roland Dreier
2012-12-21 21:42 Roland Dreier
2012-12-11 5:59 Roland Dreier
2012-12-14 9:56 ` Roland Dreier
2012-12-14 15:36 ` Linus Torvalds
2012-12-14 23:57 ` Roland Dreier
2012-10-26 19:55 Roland Dreier
2012-10-05 2:20 Roland Dreier
2012-10-02 16:08 Roland Dreier
2012-09-17 15:57 Roland Dreier
2012-08-17 18:38 Roland Dreier
2012-07-23 16:17 Roland Dreier
2012-06-24 12:09 Roland Dreier
2012-06-25 14:11 ` Tziporet Koren
2012-05-21 1:14 Roland Dreier
2012-05-21 2:05 ` Stephen Rothwell
2012-05-21 2:35 ` Roland Dreier
2012-05-21 3:39 ` Stephen Rothwell
2012-05-21 16:07 ` Roland Dreier
2012-06-06 17:44 ` Roland Dreier
2012-04-26 17:39 Roland Dreier
2012-04-12 23:45 Roland Dreier
2012-04-11 20:07 Roland Dreier
2012-03-19 17:11 Roland Dreier
2012-03-26 21:04 ` Tziporet Koren
2012-03-26 21:13 ` Roland Dreier
2012-03-27 16:33 ` Tziporet Koren
2012-02-25 2:32 Roland Dreier
2012-02-07 17:34 Roland Dreier
2012-02-01 6:36 Roland Dreier
2012-01-06 17:38 Roland Dreier
2011-12-19 17:39 Roland Dreier
2011-11-30 17:50 Roland Dreier
2011-11-04 18:26 Roland Dreier
2011-11-01 16:54 Roland Dreier
2011-08-18 15:54 Roland Dreier
2011-07-22 19:08 Roland Dreier
2011-06-21 16:18 Roland Dreier
2011-05-26 16:46 Roland Dreier
2011-05-19 18:17 Roland Dreier
2011-03-25 19:07 Roland Dreier
2011-03-23 17:47 Roland Dreier
2011-03-23 18:15 ` Roland Dreier
2011-03-15 18:01 Roland Dreier
2011-02-17 22:26 Roland Dreier
2011-02-03 18:05 Roland Dreier
2011-01-17 21:55 Roland Dreier
2011-01-25 16:23 ` Tziporet Koren
2011-01-11 18:38 Roland Dreier
2010-12-13 21:53 Roland Dreier
2010-12-02 18:57 Roland Dreier
2010-10-26 20:52 Roland Dreier
2010-10-26 23:17 ` Roland Dreier
2010-09-27 16:31 Roland Dreier
2010-09-08 21:45 Roland Dreier
2010-08-09 22:44 Roland Dreier
2010-08-05 21:37 [GIT PULL] Please " Roland Dreier
2010-07-08 16:12 [GIT PULL] please " Roland Dreier
2010-05-27 22:18 Roland Dreier
2010-05-25 16:58 Roland Dreier
2010-05-18 3:37 Roland Dreier
2010-04-09 16:13 Roland Dreier
2010-03-12 18:56 Roland Dreier
2010-03-02 7:56 Roland Dreier
2010-03-02 11:52 ` Tziporet Koren
2010-02-10 20:03 Roland Dreier
2010-01-07 19:30 Roland Dreier
2009-12-16 7:41 Roland Dreier
2009-10-28 18:07 Roland Dreier
2009-10-09 17:08 Roland Dreier
2009-09-24 19:45 Roland Dreier
2009-09-11 4:23 Roland Dreier
2009-07-14 18:48 Roland Dreier
2009-06-23 17:39 Roland Dreier
2009-06-14 20:47 Roland Dreier
2009-05-13 22:18 Roland Dreier
2009-04-28 23:03 Roland Dreier
2009-04-09 21:58 Roland Dreier
2009-03-25 4:05 Roland Dreier
2009-01-16 23:07 Roland Dreier
2009-01-13 3:40 Roland Dreier
2008-12-30 23:38 Roland Dreier
2008-12-25 15:21 Roland Dreier
2008-12-01 18:16 Roland Dreier
2008-11-04 21:37 Roland Dreier
2008-10-23 4:37 Roland Dreier
2008-10-10 0:48 Roland Dreier
2008-09-17 16:40 Roland Dreier
2008-08-19 22:03 Roland Dreier
2008-08-12 20:55 Roland Dreier
2008-08-07 21:15 Roland Dreier
2008-07-26 21:02 Roland Dreier
2008-07-24 15:41 Roland Dreier
2008-07-15 6:51 Roland Dreier
2008-07-08 21:41 Roland Dreier
2008-06-23 19:23 Roland Dreier
2008-06-18 22:38 Roland Dreier
2008-06-09 20:10 Roland Dreier
2008-06-06 18:26 Roland Dreier
2008-05-23 17:57 Roland Dreier
2008-05-07 19:17 Roland Dreier
2008-05-05 23:00 Roland Dreier
2008-05-01 3:46 Roland Dreier
2008-04-29 20:57 Roland Dreier
2008-04-22 1:26 Roland Dreier
2008-04-17 14:53 Roland Dreier
2008-04-19 8:16 ` Ingo Molnar
2008-03-21 21:02 Roland Dreier
2008-03-13 20:15 Roland Dreier
2008-03-11 4:33 Roland Dreier
2008-02-29 22:06 Roland Dreier
2008-02-27 0:27 Roland Dreier
2008-02-19 18:51 Roland Dreier
2008-02-18 20:35 Roland Dreier
2008-02-14 23:31 Roland Dreier
2008-02-11 22:25 Roland Dreier
2008-02-08 23:16 Roland Dreier
2008-02-05 4:49 Roland Dreier
2008-01-16 22:46 Roland Dreier
2008-01-08 20:25 Roland Dreier
2007-12-13 17:39 Roland Dreier
2007-12-01 4:03 Roland Dreier
2007-11-27 6:21 Roland Dreier
2007-11-14 16:23 Roland Dreier
2007-10-30 22:17 Roland Dreier
2007-10-23 16:30 Roland Dreier
2007-09-23 20:06 Roland Dreier
2007-07-30 20:18 Roland Dreier
2007-07-21 4:56 Roland Dreier
2007-07-18 22:52 Roland Dreier
2007-07-12 23:07 Roland Dreier
2007-07-03 3:50 Roland Dreier
2007-06-22 16:26 Roland Dreier
2007-06-18 15:49 Roland Dreier
2007-06-08 14:22 Roland Dreier
2007-05-29 23:20 Roland Dreier
2007-05-25 22:06 Roland Dreier
2007-05-21 20:51 Roland Dreier
2007-05-14 21:18 Roland Dreier
2007-05-09 1:06 Roland Dreier
2007-05-07 4:19 Roland Dreier
2007-04-26 18:42 Roland Dreier
2007-04-16 21:16 Roland Dreier
2007-04-12 17:52 Roland Dreier
2007-04-10 17:43 Roland Dreier
2007-03-28 17:25 Roland Dreier
2007-03-22 21:39 Roland Dreier
2007-03-08 23:50 Roland Dreier
2007-02-26 21:05 Roland Dreier
2007-02-16 23:48 Roland Dreier
2007-02-13 0:18 Roland Dreier
2007-02-05 10:15 Roland Dreier
2007-01-23 15:10 Roland Dreier
2007-01-09 22:18 Roland Dreier
2007-01-08 4:29 Roland Dreier
2006-12-16 4:57 Roland Dreier
2006-11-29 23:37 Roland Dreier
2006-11-20 18:44 Roland Dreier
2006-11-13 17:42 Roland Dreier
2006-11-02 22:28 Roland Dreier
2006-10-17 21:44 Roland Dreier
2006-10-10 21:03 Roland Dreier
2006-10-02 21:57 Roland Dreier
2006-09-28 18:20 [GIT PULL] Please " Roland Dreier
2006-09-22 22:37 [GIT PULL] please " Roland Dreier
2006-09-14 20:59 Roland Dreier
2006-09-01 0:29 Roland Dreier
2006-08-23 23:25 Roland Dreier
2006-08-24 1:09 ` Greg KH
2006-08-03 18:07 Roland Dreier
2006-07-24 16:50 Roland Dreier
2006-06-22 16:22 Roland Dreier
2006-06-18 11:49 Roland Dreier
2006-06-13 18:19 [git pull] " Roland Dreier
2006-06-05 17:21 Roland Dreier
2006-05-26 0:09 Roland Dreier
2006-05-23 21:05 Roland Dreier
2006-05-18 19:33 [git pull] Please " Roland Dreier
2006-05-12 22:07 Roland Dreier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).