* [Bug 176901] New: Running ib_rdma_bw over rxe loopback triggers a kernel oops
From: bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r @ 2016-10-06 23:23 UTC (permalink / raw)
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
https://bugzilla.kernel.org/show_bug.cgi?id=176901
Bug ID: 176901
Summary: Running ib_rdma_bw over rxe loopback triggers a kernel
oops
Product: Drivers
Version: 2.5
Kernel Version: v4.8.0
Hardware: All
OS: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: Infiniband/RDMA
Assignee: drivers_infiniband-rdma-ztI5WcYan/vQLgFONoPN62D2FQJk+8+b@public.gmane.org
Reporter: bvanassche-HInyCGIudOg@public.gmane.org
Regression: No
After I ran the following commands in a virtual machine:
modprobe rdma_rxe
rxe_cfg add eth0
modprobe ib_uverbs
ib_send_bw &
ib_send_bw 192.168.123.238
the following output appeared on the system console:
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<ffffffff81023060>] check_addr+0x30/0x60
PGD 39751067 PUD 30689067 PMD 0
Oops: 0000 [#1] SMP
Modules linked in: ib_uverbs ib_srp(O) scsi_transport_srp(O) scst_local(O)
iscsi_scst(O) ib_srpt(O) scst_vdisk(O) scst(O) libcrc32c dlm configfs rdma_rxe
ip6_udp_tunnel udp_tunnel crct10dif_pclmul crc32_pclmul ghash_clmulni_intel
aesni_intel aes_x86_64 glue_helper lrw gf128mul ablk_helper cryptd
virtio_console virtio_balloon serio_raw virtio_rng i2c_piix4 acpi_cpufreq
button iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ext4 jbd2 mbcache
virtio_net virtio_blk psmouse drm_kms_helper syscopyarea sysfillrect sysimgblt
fb_sys_fops ttm virtio_pci drm floppy [last unloaded: scsi_transport_srp]
CPU: 3 PID: 2941 Comm: ib_send_bw Tainted: G O 4.8.0-debug+ #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
rel-1.9.1-0-gb3ef39f-prebuilt.qemu-project.org 04/01/2014
task: ffff8800388fa7c0 task.stack: ffff88002cdd8000
RIP: 0010:[<ffffffff81023060>] [<ffffffff81023060>] check_addr+0x30/0x60
RSP: 0018:ffff88002cddbb78 EFLAGS: 00010246
RAX: 0000000000000000 RBX: 0000000087654321 RCX: 0000000000001000
RDX: 00000000042a1000 RSI: ffff88003294cac8 RDI: ffffffff819b7189
RBP: ffff88002cddbba8 R08: 0000000000000000 R09: ffff88003294cac8
R10: 0000000000000001 R11: 0000000000000020 R12: 0000000000000000
R13: 0000000000000020 R14: ffff88003294cac8 R15: ffff8800393e6fc8
FS: 00007fea71eaf740(0000) GS:ffff88003fd80000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000000 CR3: 000000003bc65000 CR4: 00000000001406e0
Stack:
ffffffff81023188 ffff880039a34050 ffff88003941f188 ffff880033b2f000
ffffffff81c222a0 0000000000000000 ffff88002cddbc20 ffffffff814f5fca
ffff88003294cac8 ffff8800393e6fc8 ffff880000000020 0000000000000020
Call Trace:
[<ffffffff81023188>] ? nommu_map_sg+0x88/0xf0
[<ffffffff814f5fca>] ib_umem_get+0x4ea/0x520
[<ffffffffa02418e1>] rxe_mem_init_user+0x41/0x2d0 [rdma_rxe]
[<ffffffff810acabd>] ? trace_hardirqs_on+0xd/0x10
[<ffffffffa023eb2c>] rxe_reg_user_mr+0x9c/0x150 [rdma_rxe]
[<ffffffffa03463b6>] ib_uverbs_reg_mr+0x146/0x330 [ib_uverbs]
[<ffffffffa03414fd>] ib_uverbs_write+0x1fd/0x460 [ib_uverbs]
[<ffffffffa03413b0>] ? ib_uverbs_write+0xb0/0x460 [ib_uverbs]
[<ffffffff81647f42>] ? _raw_spin_unlock+0x22/0x30
[<ffffffff8115630a>] ? handle_mm_fault+0x61a/0x12e0
[<ffffffff811ab823>] __vfs_write+0x23/0x120
[<ffffffff811ac6f9>] ? rw_verify_area+0x49/0xb0
[<ffffffff811ac943>] vfs_write+0xb3/0x1b0
[<ffffffff810aca28>] ? trace_hardirqs_on_caller+0x128/0x1b0
[<ffffffff811adc54>] SyS_write+0x44/0xa0
[<ffffffff816486c0>] entry_SYSCALL_64_fastpath+0x23/0xc1
Code: 48 8b 86 38 03 00 00 48 85 c0 74 1f 4c 8b 00 48 8d 74 0a ff b8 01 00 00
00 4c 39 c6 76 33 b8 fe ff ff ff 49 39 c0 77 13 31 c0 c3 <4c> 8b 04 25 00 00 00
00 eb e9 b8 01 00 00 00 c3 55 48 89 fe 48
RIP [<ffffffff81023060>] check_addr+0x30/0x60
RSP <ffff88002cddbb78>
CR2: 0000000000000000
--
You are receiving this mail because:
You are watching the assignee of the bug.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [Bug 176901] New: Running ib_rdma_bw over rxe loopback triggers a kernel oops
From: Parav Pandit @ 2016-10-07 3:28 UTC (permalink / raw)
To: bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <bug-176901-11804-3bo0kxnWaOQUvHkbgXJLS5sdmw4N0Rt+2LY78lusg7I@public.gmane.org/>
This bug is fixed with my patch [1] and Doug ack also about merging fix.
[1] https://patchwork.kernel.org/patch/9354863/
On Fri, Oct 7, 2016 at 4:53 AM, <bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public.gmane.org> wrote:
> https://bugzilla.kernel.org/show_bug.cgi?id=176901
>
> Bug ID: 176901
> Summary: Running ib_rdma_bw over rxe loopback triggers a kernel
> oops
> Product: Drivers
> Version: 2.5
> Kernel Version: v4.8.0
> Hardware: All
> OS: Linux
> Tree: Mainline
> Status: NEW
> Severity: normal
> Priority: P1
> Component: Infiniband/RDMA
> Assignee: drivers_infiniband-rdma-ztI5WcYan/vQLgFONoPN62D2FQJk+8+b@public.gmane.org
> Reporter: bvanassche-HInyCGIudOg@public.gmane.org
> Regression: No
>
> After I ran the following commands in a virtual machine:
>
> modprobe rdma_rxe
> rxe_cfg add eth0
> modprobe ib_uverbs
> ib_send_bw &
> ib_send_bw 192.168.123.238
>
> the following output appeared on the system console:
>
> BUG: unable to handle kernel NULL pointer dereference at (null)
> IP: [<ffffffff81023060>] check_addr+0x30/0x60
> PGD 39751067 PUD 30689067 PMD 0
> Oops: 0000 [#1] SMP
> Modules linked in: ib_uverbs ib_srp(O) scsi_transport_srp(O) scst_local(O)
> iscsi_scst(O) ib_srpt(O) scst_vdisk(O) scst(O) libcrc32c dlm configfs rdma_rxe
> ip6_udp_tunnel udp_tunnel crct10dif_pclmul crc32_pclmul ghash_clmulni_intel
> aesni_intel aes_x86_64 glue_helper lrw gf128mul ablk_helper cryptd
> virtio_console virtio_balloon serio_raw virtio_rng i2c_piix4 acpi_cpufreq
> button iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ext4 jbd2 mbcache
> virtio_net virtio_blk psmouse drm_kms_helper syscopyarea sysfillrect sysimgblt
> fb_sys_fops ttm virtio_pci drm floppy [last unloaded: scsi_transport_srp]
> CPU: 3 PID: 2941 Comm: ib_send_bw Tainted: G O 4.8.0-debug+ #2
> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
> rel-1.9.1-0-gb3ef39f-prebuilt.qemu-project.org 04/01/2014
> task: ffff8800388fa7c0 task.stack: ffff88002cdd8000
> RIP: 0010:[<ffffffff81023060>] [<ffffffff81023060>] check_addr+0x30/0x60
> RSP: 0018:ffff88002cddbb78 EFLAGS: 00010246
> RAX: 0000000000000000 RBX: 0000000087654321 RCX: 0000000000001000
> RDX: 00000000042a1000 RSI: ffff88003294cac8 RDI: ffffffff819b7189
> RBP: ffff88002cddbba8 R08: 0000000000000000 R09: ffff88003294cac8
> R10: 0000000000000001 R11: 0000000000000020 R12: 0000000000000000
> R13: 0000000000000020 R14: ffff88003294cac8 R15: ffff8800393e6fc8
> FS: 00007fea71eaf740(0000) GS:ffff88003fd80000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 0000000000000000 CR3: 000000003bc65000 CR4: 00000000001406e0
> Stack:
> ffffffff81023188 ffff880039a34050 ffff88003941f188 ffff880033b2f000
> ffffffff81c222a0 0000000000000000 ffff88002cddbc20 ffffffff814f5fca
> ffff88003294cac8 ffff8800393e6fc8 ffff880000000020 0000000000000020
> Call Trace:
> [<ffffffff81023188>] ? nommu_map_sg+0x88/0xf0
> [<ffffffff814f5fca>] ib_umem_get+0x4ea/0x520
> [<ffffffffa02418e1>] rxe_mem_init_user+0x41/0x2d0 [rdma_rxe]
> [<ffffffff810acabd>] ? trace_hardirqs_on+0xd/0x10
> [<ffffffffa023eb2c>] rxe_reg_user_mr+0x9c/0x150 [rdma_rxe]
> [<ffffffffa03463b6>] ib_uverbs_reg_mr+0x146/0x330 [ib_uverbs]
> [<ffffffffa03414fd>] ib_uverbs_write+0x1fd/0x460 [ib_uverbs]
> [<ffffffffa03413b0>] ? ib_uverbs_write+0xb0/0x460 [ib_uverbs]
> [<ffffffff81647f42>] ? _raw_spin_unlock+0x22/0x30
> [<ffffffff8115630a>] ? handle_mm_fault+0x61a/0x12e0
> [<ffffffff811ab823>] __vfs_write+0x23/0x120
> [<ffffffff811ac6f9>] ? rw_verify_area+0x49/0xb0
> [<ffffffff811ac943>] vfs_write+0xb3/0x1b0
> [<ffffffff810aca28>] ? trace_hardirqs_on_caller+0x128/0x1b0
> [<ffffffff811adc54>] SyS_write+0x44/0xa0
> [<ffffffff816486c0>] entry_SYSCALL_64_fastpath+0x23/0xc1
> Code: 48 8b 86 38 03 00 00 48 85 c0 74 1f 4c 8b 00 48 8d 74 0a ff b8 01 00 00
> 00 4c 39 c6 76 33 b8 fe ff ff ff 49 39 c0 77 13 31 c0 c3 <4c> 8b 04 25 00 00 00
> 00 eb e9 b8 01 00 00 00 c3 55 48 89 fe 48
> RIP [<ffffffff81023060>] check_addr+0x30/0x60
> RSP <ffff88002cddbb78>
> CR2: 0000000000000000
>
> --
> You are receiving this mail because:
> You are watching the assignee of the bug.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* RE: [PATCH qedr 04/10] qedr: Add support for PD,PKEY and CQ verbs
From: Elior, Ariel @ 2016-10-07 10:47 UTC (permalink / raw)
To: Leon Romanovsky, dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: Elior, Ariel, Kalderon, Michal, Mintz, Yuval, Borundia, Rajesh,
linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Amrani, Ram
In-Reply-To: <20161006133357.GP9282-2ukJVAZIZ/Y@public.gmane.org>
> > @@ -66,6 +85,12 @@ struct rdma_cqe_common {
> > struct regpair qp_handle;
> > __le16 reserved1[7];
> > u8 flags;
> > +#define RDMA_CQE_COMMON_TOGGLE_BIT_MASK 0x1
> > +#define RDMA_CQE_COMMON_TOGGLE_BIT_SHIFT 0
> > +#define RDMA_CQE_COMMON_TYPE_MASK 0x3
> > +#define RDMA_CQE_COMMON_TYPE_SHIFT 1
> > +#define RDMA_CQE_COMMON_RESERVED2_MASK 0x1F
> > +#define RDMA_CQE_COMMON_RESERVED2_SHIFT 3
> > u8 status;
>
> It is VERY uncommon to mix defines and structs together.
> Please don't do it, it confuses a lot and doesn't help to
> readability/debug.
Hi Leon,
Firstly, thanks for investing your time in reviewing our driver.
As for mixed defines and structures, far from being very uncommon, they are
actually ubiquitous throughout the kernel and are used by the foremost
developers (Dave Miller, Linus, Jeff Kirsher).
In infiniband tree alone, at least three drivers employ this:
drivers/infiniband/hw/ocrdma/ocrdma_sli.h line 1900
drivers/infiniband/hw/mthca/mthca_user.h line 68
drivers/infiniband/hw/cxgb3/cxio_hal.h line 116
In the net subsystem, it is even more widely used (~14k places), including
mellanox and intel drivers, as well as our bnx2x and qed* drivers and many
others. A few examples can be seen under:
drivers/net/ethernet/mellanox/mlx4/en_port.h line 94
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h line 345
drivers/net/ethernet/mellanox/mlx4/fw.c line 2759
drivers/net/ethernet/intel/ixgbe/ixgbe.h line 623 (Jeff Kirsher)
drivers/net/ethernet/broadcom/tg3.h line 2540 (Dave Miller)
ixgbe.h uses this exactly like we do in the code you cited.
In other kernel cornerstones:
fs/ext4/ext4.h line 1287 (Linus)
include/net/sock.h line 312 (Dave)
I don't think there are grounds for objecting to this style. We'll take care
of the rest of your comments.
Thanks,
Ariel
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH rdma-core 01/17] Update Intel lists in MAINTAINERS
From: Dalessandro, Dennis @ 2016-10-07 11:42 UTC (permalink / raw)
To: jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org,
linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
In-Reply-To: <1475787103-13283-2-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
On Thu, 2016-10-06 at 14:51 -0600, Jason Gunthorpe wrote:
> Try again to get this information right.
>
> Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
> ---
Acked-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
^ permalink raw reply
* Re: [PATCH rdma-core 00/17] Fixes, flattening and packaging
From: Leon Romanovsky @ 2016-10-07 14:05 UTC (permalink / raw)
To: Jason Gunthorpe; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1475787103-13283-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 28205 bytes --]
On Thu, Oct 06, 2016 at 02:51:26PM -0600, Jason Gunthorpe wrote:
> This is mostly a grab bag of the finished work left in my tree:
>
> - Missed items for the last merge
> - Fix a few mistakes in the earlier patches and build system
> - Final rename of directories to make the tree shallower (eg eliminate src/, add providers/)
> - RPM and DEB packaging
Jason,
Can you please add all patches from ML too to this pull request, so they
apply cleanly?
Thanks.
>
> See
>
> https://github.com/linux-rdma/rdma-core/pull/13
>
> Jason Gunthorpe (17):
> Update Intel lists in MAINTAINERS
> Update COPYING to reflect recent cxgb4 merge
> Update comment in cxbg* drivers
> Remove missed auto* related files
> rdmacm: Drop SONAME in rspreload
> umad: Use symlinks instead of a NROFF .so directive
> verbs: Remove -fno-strict-aliasing
> Move providers into providers/
> iwpmd: Flatten iwpmd/src into iwpmd/
> srp_deamon: Flatten srp_daemon/src,etc into srp_daemon/
> ibcm: Flatten libibcm/src,include into libibcm/
> umad: Flatten libibumad/src,include into libibumad/
> verbs: Flatten libibverbs/src,include into libibverbs/
> rdmacm: Flatten librdmacm/src,include into librdmacm/
> Combined RPM Spec file
> srp_daemon: Add the debian initscripts as an option
> Debian Packaging
>
> CMakeLists.txt | 41 ++-
> COPYING.md | 7 +-
> Documentation/versioning.md | 20 ++
> MAINTAINERS | 26 +-
> buildlib/ninja-wrapper | 16 ++
> debian/changelog | 5 +
> debian/compat | 1 +
> debian/control | 299 +++++++++++++++++++++
> debian/ibacm.install | 10 +
> debian/ibverbs-providers.install | 7 +
> debian/ibverbs-utils.install | 16 ++
> debian/iwpmd.install | 7 +
> debian/libibcm-dev.install | 3 +
> debian/libibcm1.install | 1 +
> debian/libibcm1.symbols | 23 ++
> debian/libibumad-dev.install | 3 +
> debian/libibumad3.install | 2 +
> debian/libibumad3.symbols | 38 +++
> debian/libibverbs-dev.install | 12 +
> debian/libibverbs1.install | 1 +
> debian/libibverbs1.postinst | 10 +
> debian/libibverbs1.symbols | 134 +++++++++
> debian/librdmacm-dev.install | 57 ++++
> debian/librdmacm1.install | 2 +
> debian/librdmacm1.symbols | 64 +++++
> debian/rdmacm-utils.install | 24 ++
> debian/rules | 99 +++++++
> debian/srptools.default | 14 +
> debian/srptools.init | 89 ++++++
> debian/srptools.install | 8 +
> iwpmd/CMakeLists.txt | 17 ++
> iwpmd/{src => }/iwarp_pm.h | 0
> iwpmd/{src => }/iwarp_pm_common.c | 0
> iwpmd/{src => }/iwarp_pm_helper.c | 0
> iwpmd/{src => }/iwarp_pm_server.c | 0
> iwpmd/{src => }/iwpm_netlink.h | 0
> iwpmd/src/.dirstamp | 0
> iwpmd/src/CMakeLists.txt | 16 --
> libcxgb4/COPYING | 29 --
> libibcm/{src => }/CMakeLists.txt | 4 +-
> libibcm/{src => }/cm.c | 0
> libibcm/{include/infiniband => }/cm.h | 0
> libibcm/{include/infiniband => }/cm_abi.h | 0
> libibcm/{src => }/libibcm.map | 0
> libibumad/CMakeLists.txt | 16 ++
> libibumad/gen_chlog.sh | 67 -----
> libibumad/{src => }/libibumad.map | 0
> libibumad/libibumad.ver | 9 -
> libibumad/man/CMakeLists.txt | 8 +-
> libibumad/man/umad_attribute_str.3 | 3 -
> libibumad/man/umad_mad_status_str.3 | 3 -
> libibumad/man/umad_method_str.3 | 3 -
> libibumad/src/CMakeLists.txt | 16 --
> libibumad/{src => }/sysfs.c | 0
> libibumad/{src => }/umad.c | 0
> libibumad/{include/infiniband => }/umad.h | 0
> libibumad/{include/infiniband => }/umad_cm.h | 0
> libibumad/{include/infiniband => }/umad_sa.h | 0
> libibumad/{include/infiniband => }/umad_sm.h | 0
> libibumad/{src => }/umad_str.c | 0
> libibumad/{include/infiniband => }/umad_str.h | 0
> libibumad/{include/infiniband => }/umad_types.h | 0
> libibverbs/{src => }/CMakeLists.txt | 18 +-
> libibverbs/{include/infiniband => }/arch.h | 0
> libibverbs/{src => }/cmd.c | 0
> libibverbs/{src => }/compat-1_0.c | 0
> libibverbs/{src => }/device.c | 0
> libibverbs/{include/infiniband => }/driver.h | 0
> libibverbs/{src => }/enum_strs.c | 0
> libibverbs/examples/CMakeLists.txt | 2 -
> libibverbs/examples/pingpong.c | 9 +-
> libibverbs/{src => }/ibverbs.h | 0
> libibverbs/{src => }/init.c | 0
> libibverbs/{include/infiniband => }/kern-abi.h | 0
> libibverbs/{src => }/libibverbs.map | 0
> libibverbs/{src => }/marshall.c | 0
> libibverbs/{include/infiniband => }/marshall.h | 0
> libibverbs/{src => }/memory.c | 0
> libibverbs/{src => }/neigh.c | 0
> libibverbs/{src => }/neigh.h | 0
> libibverbs/{src => }/nl1_compat.h | 0
> libibverbs/{include/infiniband => }/opcode.h | 0
> libibverbs/{include/infiniband => }/sa-kern-abi.h | 0
> libibverbs/{include/infiniband => }/sa.h | 0
> libibverbs/{src => }/sysfs.c | 0
> libibverbs/{src => }/verbs.c | 0
> libibverbs/{include/infiniband => }/verbs.h | 0
> libipathverbs/src/CMakeLists.txt | 4 -
> librdmacm/{src => }/CMakeLists.txt | 14 +-
> librdmacm/{src => }/acm.c | 0
> librdmacm/{src => }/addrinfo.c | 0
> librdmacm/{src => }/cma.c | 0
> librdmacm/{src => }/cma.h | 0
> librdmacm/{include/infiniband => }/ib.h | 0
> librdmacm/{src => }/indexer.c | 0
> librdmacm/{src => }/indexer.h | 0
> librdmacm/{src => }/librdmacm.map | 0
> librdmacm/{src => }/librspreload.map | 0
> librdmacm/{src => }/preload.c | 0
> librdmacm/{include/rdma => }/rdma_cma.h | 0
> librdmacm/{include/rdma => }/rdma_cma_abi.h | 0
> librdmacm/{include/rdma => }/rdma_verbs.h | 0
> librdmacm/{src => }/rsocket.c | 0
> librdmacm/{include/rdma => }/rsocket.h | 0
> librxe/src/CMakeLists.txt | 3 -
> {libcxgb3/src => providers/cxgb3}/CMakeLists.txt | 0
> {libcxgb3/src => providers/cxgb3}/cq.c | 0
> {libcxgb3/src => providers/cxgb3}/cxio_wr.h | 3 +-
> .../src => providers/cxgb3}/firmware_exports.h | 0
> {libcxgb3/src => providers/cxgb3}/iwch-abi.h | 0
> {libcxgb3/src => providers/cxgb3}/iwch.c | 0
> {libcxgb3/src => providers/cxgb3}/iwch.h | 0
> {libcxgb3/src => providers/cxgb3}/qp.c | 0
> {libcxgb3/src => providers/cxgb3}/verbs.c | 0
> {libcxgb4/src => providers/cxgb4}/CMakeLists.txt | 0
> {libcxgb4/src => providers/cxgb4}/cq.c | 0
> {libcxgb4/src => providers/cxgb4}/cxgb4-abi.h | 0
> {libcxgb4/src => providers/cxgb4}/dev.c | 0
> {libcxgb4/src => providers/cxgb4}/libcxgb4.h | 0
> {libcxgb4/src => providers/cxgb4}/qp.c | 0
> {libcxgb4/src => providers/cxgb4}/t4.h | 3 +-
> {libcxgb4/src => providers/cxgb4}/t4_chip_type.h | 0
> {libcxgb4/src => providers/cxgb4}/t4_pci_id_tbl.h | 0
> {libcxgb4/src => providers/cxgb4}/t4_regs.h | 0
> {libcxgb4/src => providers/cxgb4}/t4fw_api.h | 0
> {libcxgb4/src => providers/cxgb4}/t4fw_ri_api.h | 0
> {libcxgb4/src => providers/cxgb4}/verbs.c | 0
> .../src => providers/hfi1verbs}/CMakeLists.txt | 0
> .../src => providers/hfi1verbs}/hfi-abi.h | 0
> .../src => providers/hfi1verbs}/hfiverbs.c | 0
> .../src => providers/hfi1verbs}/hfiverbs.h | 0
> {libhfi1verbs/src => providers/hfi1verbs}/verbs.c | 0
> {libi40iw/src => providers/i40iw}/CMakeLists.txt | 0
> {libi40iw/src => providers/i40iw}/i40e_devids.h | 0
> {libi40iw/src => providers/i40iw}/i40iw-abi.h | 0
> {libi40iw/src => providers/i40iw}/i40iw_d.h | 0
> {libi40iw/src => providers/i40iw}/i40iw_osdep.h | 0
> {libi40iw/src => providers/i40iw}/i40iw_register.h | 0
> {libi40iw/src => providers/i40iw}/i40iw_status.h | 0
> {libi40iw/src => providers/i40iw}/i40iw_uk.c | 0
> {libi40iw/src => providers/i40iw}/i40iw_umain.c | 0
> {libi40iw/src => providers/i40iw}/i40iw_umain.h | 0
> {libi40iw/src => providers/i40iw}/i40iw_user.h | 0
> {libi40iw/src => providers/i40iw}/i40iw_uverbs.c | 0
> .../ipathverbs}/CMakeLists.txt | 5 +
> {libipathverbs => providers/ipathverbs}/COPYING | 0
> .../ipathverbs}/dracut_check | 0
> .../ipathverbs}/dracut_install | 0
> .../ipathverbs}/dracut_kmod | 0
> .../src => providers/ipathverbs}/ipath-abi.h | 0
> .../src => providers/ipathverbs}/ipathverbs.c | 0
> .../src => providers/ipathverbs}/ipathverbs.h | 0
> .../ipathverbs}/truescale-serdes.cmds | 0
> .../ipathverbs}/truescale.conf.in | 0
> .../src => providers/ipathverbs}/verbs.c | 0
> {libmlx4/src => providers/mlx4}/CMakeLists.txt | 0
> {libmlx4 => providers/mlx4}/COPYING | 0
> {libmlx4/src => providers/mlx4}/buf.c | 0
> {libmlx4/src => providers/mlx4}/cq.c | 0
> {libmlx4/src => providers/mlx4}/dbrec.c | 0
> {libmlx4/src => providers/mlx4}/doorbell.h | 0
> {libmlx4/src => providers/mlx4}/mlx4-abi.h | 0
> {libmlx4/src => providers/mlx4}/mlx4.c | 0
> {libmlx4/src => providers/mlx4}/mlx4.h | 0
> {libmlx4/src => providers/mlx4}/mmio.h | 0
> {libmlx4/src => providers/mlx4}/qp.c | 0
> {libmlx4/src => providers/mlx4}/srq.c | 0
> {libmlx4/src => providers/mlx4}/verbs.c | 0
> {libmlx4/src => providers/mlx4}/wqe.h | 0
> {libmlx5/src => providers/mlx5}/CMakeLists.txt | 0
> {libmlx5/src => providers/mlx5}/bitmap.h | 0
> {libmlx5/src => providers/mlx5}/buf.c | 0
> {libmlx5/src => providers/mlx5}/cq.c | 0
> {libmlx5/src => providers/mlx5}/dbrec.c | 0
> {libmlx5/src => providers/mlx5}/doorbell.h | 0
> {libmlx5/src => providers/mlx5}/mlx5-abi.h | 0
> {libmlx5/src => providers/mlx5}/mlx5.c | 0
> {libmlx5/src => providers/mlx5}/mlx5.h | 0
> {libmlx5/src => providers/mlx5}/qp.c | 0
> {libmlx5/src => providers/mlx5}/srq.c | 0
> {libmlx5/src => providers/mlx5}/verbs.c | 0
> {libmlx5/src => providers/mlx5}/wqe.h | 0
> {libmthca/src => providers/mthca}/CMakeLists.txt | 0
> {libmthca/src => providers/mthca}/ah.c | 0
> {libmthca/src => providers/mthca}/buf.c | 0
> {libmthca/src => providers/mthca}/cq.c | 0
> {libmthca/src => providers/mthca}/doorbell.h | 0
> {libmthca/src => providers/mthca}/memfree.c | 0
> {libmthca/src => providers/mthca}/mthca-abi.h | 0
> {libmthca/src => providers/mthca}/mthca.c | 0
> {libmthca/src => providers/mthca}/mthca.h | 0
> {libmthca/src => providers/mthca}/qp.c | 0
> {libmthca/src => providers/mthca}/srq.c | 0
> {libmthca/src => providers/mthca}/verbs.c | 0
> {libmthca/src => providers/mthca}/wqe.h | 0
> {libnes/src => providers/nes}/CMakeLists.txt | 0
> {libnes/src => providers/nes}/nes-abi.h | 0
> {libnes/src => providers/nes}/nes_umain.c | 0
> {libnes/src => providers/nes}/nes_umain.h | 0
> {libnes/src => providers/nes}/nes_uverbs.c | 0
> {libocrdma/src => providers/ocrdma}/CMakeLists.txt | 0
> {libocrdma => providers/ocrdma}/Changelog | 0
> {libocrdma/src => providers/ocrdma}/ocrdma_abi.h | 0
> {libocrdma/src => providers/ocrdma}/ocrdma_main.c | 0
> {libocrdma/src => providers/ocrdma}/ocrdma_main.h | 0
> {libocrdma/src => providers/ocrdma}/ocrdma_verbs.c | 0
> {librxe => providers/rxe}/CMakeLists.txt | 3 +
> {librxe => providers/rxe}/man/CMakeLists.txt | 0
> {librxe => providers/rxe}/man/rxe.7 | 0
> {librxe => providers/rxe}/man/rxe_cfg.8 | 0
> {librxe/src => providers/rxe}/rxe-abi.h | 0
> {librxe/src => providers/rxe}/rxe.c | 0
> {librxe/src => providers/rxe}/rxe.h | 0
> {librxe => providers/rxe}/rxe_cfg | 0
> {librxe/src => providers/rxe}/rxe_queue.h | 0
> rdma-core.spec | 123 +++++++++
> srp_daemon/CMakeLists.txt | 50 ++++
> srp_daemon/{man => }/ibsrpdm.1 | 0
> srp_daemon/{srp_daemon => }/logrotate-srp_daemon | 0
> srp_daemon/man/CMakeLists.txt | 4 -
> .../{srp_daemon => }/rsyslog-srp_daemon.conf | 0
> srp_daemon/{man => }/srp_daemon.1.in | 0
> srp_daemon/{srp_daemon => }/srp_daemon.c | 0
> srp_daemon/{srp_daemon => }/srp_daemon.conf | 0
> srp_daemon/{srp_daemon => }/srp_daemon.h | 0
> srp_daemon/{srp_daemon => }/srp_daemon.sh.in | 0
> srp_daemon/srp_daemon/CMakeLists.txt | 34 ---
> srp_daemon/{srp_daemon => }/srp_handle_traps.c | 0
> srp_daemon/{srp_daemon => }/srp_ib_types.h | 0
> srp_daemon/{srp_daemon => }/srp_sync.c | 0
> srp_daemon/{srp_daemon => }/srpd.in | 0
> 231 files changed, 1243 insertions(+), 262 deletions(-)
> create mode 100644 buildlib/ninja-wrapper
> create mode 100644 debian/changelog
> create mode 100644 debian/compat
> create mode 100644 debian/control
> create mode 100644 debian/ibacm.install
> create mode 100644 debian/ibverbs-providers.install
> create mode 100644 debian/ibverbs-utils.install
> create mode 100644 debian/iwpmd.install
> create mode 100644 debian/libibcm-dev.install
> create mode 100644 debian/libibcm1.install
> create mode 100644 debian/libibcm1.symbols
> create mode 100644 debian/libibumad-dev.install
> create mode 100644 debian/libibumad3.install
> create mode 100644 debian/libibumad3.symbols
> create mode 100644 debian/libibverbs-dev.install
> create mode 100644 debian/libibverbs1.install
> create mode 100644 debian/libibverbs1.postinst
> create mode 100644 debian/libibverbs1.symbols
> create mode 100644 debian/librdmacm-dev.install
> create mode 100644 debian/librdmacm1.install
> create mode 100644 debian/librdmacm1.symbols
> create mode 100644 debian/rdmacm-utils.install
> create mode 100755 debian/rules
> create mode 100644 debian/srptools.default
> create mode 100644 debian/srptools.init
> create mode 100644 debian/srptools.install
> rename iwpmd/{src => }/iwarp_pm.h (100%)
> rename iwpmd/{src => }/iwarp_pm_common.c (100%)
> rename iwpmd/{src => }/iwarp_pm_helper.c (100%)
> rename iwpmd/{src => }/iwarp_pm_server.c (100%)
> rename iwpmd/{src => }/iwpm_netlink.h (100%)
> delete mode 100644 iwpmd/src/.dirstamp
> delete mode 100644 iwpmd/src/CMakeLists.txt
> delete mode 100644 libcxgb4/COPYING
> rename libibcm/{src => }/CMakeLists.txt (74%)
> rename libibcm/{src => }/cm.c (100%)
> rename libibcm/{include/infiniband => }/cm.h (100%)
> rename libibcm/{include/infiniband => }/cm_abi.h (100%)
> rename libibcm/{src => }/libibcm.map (100%)
> create mode 100644 libibumad/CMakeLists.txt
> delete mode 100755 libibumad/gen_chlog.sh
> rename libibumad/{src => }/libibumad.map (100%)
> delete mode 100644 libibumad/libibumad.ver
> delete mode 100644 libibumad/man/umad_attribute_str.3
> delete mode 100644 libibumad/man/umad_mad_status_str.3
> delete mode 100644 libibumad/man/umad_method_str.3
> delete mode 100644 libibumad/src/CMakeLists.txt
> rename libibumad/{src => }/sysfs.c (100%)
> rename libibumad/{src => }/umad.c (100%)
> rename libibumad/{include/infiniband => }/umad.h (100%)
> rename libibumad/{include/infiniband => }/umad_cm.h (100%)
> rename libibumad/{include/infiniband => }/umad_sa.h (100%)
> rename libibumad/{include/infiniband => }/umad_sm.h (100%)
> rename libibumad/{src => }/umad_str.c (100%)
> rename libibumad/{include/infiniband => }/umad_str.h (100%)
> rename libibumad/{include/infiniband => }/umad_types.h (100%)
> rename libibverbs/{src => }/CMakeLists.txt (56%)
> rename libibverbs/{include/infiniband => }/arch.h (100%)
> rename libibverbs/{src => }/cmd.c (100%)
> rename libibverbs/{src => }/compat-1_0.c (100%)
> rename libibverbs/{src => }/device.c (100%)
> rename libibverbs/{include/infiniband => }/driver.h (100%)
> rename libibverbs/{src => }/enum_strs.c (100%)
> rename libibverbs/{src => }/ibverbs.h (100%)
> rename libibverbs/{src => }/init.c (100%)
> rename libibverbs/{include/infiniband => }/kern-abi.h (100%)
> rename libibverbs/{src => }/libibverbs.map (100%)
> rename libibverbs/{src => }/marshall.c (100%)
> rename libibverbs/{include/infiniband => }/marshall.h (100%)
> rename libibverbs/{src => }/memory.c (100%)
> rename libibverbs/{src => }/neigh.c (100%)
> rename libibverbs/{src => }/neigh.h (100%)
> rename libibverbs/{src => }/nl1_compat.h (100%)
> rename libibverbs/{include/infiniband => }/opcode.h (100%)
> rename libibverbs/{include/infiniband => }/sa-kern-abi.h (100%)
> rename libibverbs/{include/infiniband => }/sa.h (100%)
> rename libibverbs/{src => }/sysfs.c (100%)
> rename libibverbs/{src => }/verbs.c (100%)
> rename libibverbs/{include/infiniband => }/verbs.h (100%)
> delete mode 100644 libipathverbs/src/CMakeLists.txt
> rename librdmacm/{src => }/CMakeLists.txt (81%)
> rename librdmacm/{src => }/acm.c (100%)
> rename librdmacm/{src => }/addrinfo.c (100%)
> rename librdmacm/{src => }/cma.c (100%)
> rename librdmacm/{src => }/cma.h (100%)
> rename librdmacm/{include/infiniband => }/ib.h (100%)
> rename librdmacm/{src => }/indexer.c (100%)
> rename librdmacm/{src => }/indexer.h (100%)
> rename librdmacm/{src => }/librdmacm.map (100%)
> rename librdmacm/{src => }/librspreload.map (100%)
> rename librdmacm/{src => }/preload.c (100%)
> rename librdmacm/{include/rdma => }/rdma_cma.h (100%)
> rename librdmacm/{include/rdma => }/rdma_cma_abi.h (100%)
> rename librdmacm/{include/rdma => }/rdma_verbs.h (100%)
> rename librdmacm/{src => }/rsocket.c (100%)
> rename librdmacm/{include/rdma => }/rsocket.h (100%)
> delete mode 100644 librxe/src/CMakeLists.txt
> rename {libcxgb3/src => providers/cxgb3}/CMakeLists.txt (100%)
> rename {libcxgb3/src => providers/cxgb3}/cq.c (100%)
> rename {libcxgb3/src => providers/cxgb3}/cxio_wr.h (99%)
> rename {libcxgb3/src => providers/cxgb3}/firmware_exports.h (100%)
> rename {libcxgb3/src => providers/cxgb3}/iwch-abi.h (100%)
> rename {libcxgb3/src => providers/cxgb3}/iwch.c (100%)
> rename {libcxgb3/src => providers/cxgb3}/iwch.h (100%)
> rename {libcxgb3/src => providers/cxgb3}/qp.c (100%)
> rename {libcxgb3/src => providers/cxgb3}/verbs.c (100%)
> rename {libcxgb4/src => providers/cxgb4}/CMakeLists.txt (100%)
> rename {libcxgb4/src => providers/cxgb4}/cq.c (100%)
> rename {libcxgb4/src => providers/cxgb4}/cxgb4-abi.h (100%)
> rename {libcxgb4/src => providers/cxgb4}/dev.c (100%)
> rename {libcxgb4/src => providers/cxgb4}/libcxgb4.h (100%)
> rename {libcxgb4/src => providers/cxgb4}/qp.c (100%)
> rename {libcxgb4/src => providers/cxgb4}/t4.h (99%)
> rename {libcxgb4/src => providers/cxgb4}/t4_chip_type.h (100%)
> rename {libcxgb4/src => providers/cxgb4}/t4_pci_id_tbl.h (100%)
> rename {libcxgb4/src => providers/cxgb4}/t4_regs.h (100%)
> rename {libcxgb4/src => providers/cxgb4}/t4fw_api.h (100%)
> rename {libcxgb4/src => providers/cxgb4}/t4fw_ri_api.h (100%)
> rename {libcxgb4/src => providers/cxgb4}/verbs.c (100%)
> rename {libhfi1verbs/src => providers/hfi1verbs}/CMakeLists.txt (100%)
> rename {libhfi1verbs/src => providers/hfi1verbs}/hfi-abi.h (100%)
> rename {libhfi1verbs/src => providers/hfi1verbs}/hfiverbs.c (100%)
> rename {libhfi1verbs/src => providers/hfi1verbs}/hfiverbs.h (100%)
> rename {libhfi1verbs/src => providers/hfi1verbs}/verbs.c (100%)
> rename {libi40iw/src => providers/i40iw}/CMakeLists.txt (100%)
> rename {libi40iw/src => providers/i40iw}/i40e_devids.h (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw-abi.h (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_d.h (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_osdep.h (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_register.h (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_status.h (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_uk.c (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_umain.c (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_umain.h (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_user.h (100%)
> rename {libi40iw/src => providers/i40iw}/i40iw_uverbs.c (100%)
> rename {libipathverbs => providers/ipathverbs}/CMakeLists.txt (84%)
> rename {libipathverbs => providers/ipathverbs}/COPYING (100%)
> rename {libipathverbs => providers/ipathverbs}/dracut_check (100%)
> rename {libipathverbs => providers/ipathverbs}/dracut_install (100%)
> rename {libipathverbs => providers/ipathverbs}/dracut_kmod (100%)
> rename {libipathverbs/src => providers/ipathverbs}/ipath-abi.h (100%)
> rename {libipathverbs/src => providers/ipathverbs}/ipathverbs.c (100%)
> rename {libipathverbs/src => providers/ipathverbs}/ipathverbs.h (100%)
> rename {libipathverbs => providers/ipathverbs}/truescale-serdes.cmds (100%)
> rename {libipathverbs => providers/ipathverbs}/truescale.conf.in (100%)
> rename {libipathverbs/src => providers/ipathverbs}/verbs.c (100%)
> rename {libmlx4/src => providers/mlx4}/CMakeLists.txt (100%)
> rename {libmlx4 => providers/mlx4}/COPYING (100%)
> rename {libmlx4/src => providers/mlx4}/buf.c (100%)
> rename {libmlx4/src => providers/mlx4}/cq.c (100%)
> rename {libmlx4/src => providers/mlx4}/dbrec.c (100%)
> rename {libmlx4/src => providers/mlx4}/doorbell.h (100%)
> rename {libmlx4/src => providers/mlx4}/mlx4-abi.h (100%)
> rename {libmlx4/src => providers/mlx4}/mlx4.c (100%)
> rename {libmlx4/src => providers/mlx4}/mlx4.h (100%)
> rename {libmlx4/src => providers/mlx4}/mmio.h (100%)
> rename {libmlx4/src => providers/mlx4}/qp.c (100%)
> rename {libmlx4/src => providers/mlx4}/srq.c (100%)
> rename {libmlx4/src => providers/mlx4}/verbs.c (100%)
> rename {libmlx4/src => providers/mlx4}/wqe.h (100%)
> rename {libmlx5/src => providers/mlx5}/CMakeLists.txt (100%)
> rename {libmlx5/src => providers/mlx5}/bitmap.h (100%)
> rename {libmlx5/src => providers/mlx5}/buf.c (100%)
> rename {libmlx5/src => providers/mlx5}/cq.c (100%)
> rename {libmlx5/src => providers/mlx5}/dbrec.c (100%)
> rename {libmlx5/src => providers/mlx5}/doorbell.h (100%)
> rename {libmlx5/src => providers/mlx5}/mlx5-abi.h (100%)
> rename {libmlx5/src => providers/mlx5}/mlx5.c (100%)
> rename {libmlx5/src => providers/mlx5}/mlx5.h (100%)
> rename {libmlx5/src => providers/mlx5}/qp.c (100%)
> rename {libmlx5/src => providers/mlx5}/srq.c (100%)
> rename {libmlx5/src => providers/mlx5}/verbs.c (100%)
> rename {libmlx5/src => providers/mlx5}/wqe.h (100%)
> rename {libmthca/src => providers/mthca}/CMakeLists.txt (100%)
> rename {libmthca/src => providers/mthca}/ah.c (100%)
> rename {libmthca/src => providers/mthca}/buf.c (100%)
> rename {libmthca/src => providers/mthca}/cq.c (100%)
> rename {libmthca/src => providers/mthca}/doorbell.h (100%)
> rename {libmthca/src => providers/mthca}/memfree.c (100%)
> rename {libmthca/src => providers/mthca}/mthca-abi.h (100%)
> rename {libmthca/src => providers/mthca}/mthca.c (100%)
> rename {libmthca/src => providers/mthca}/mthca.h (100%)
> rename {libmthca/src => providers/mthca}/qp.c (100%)
> rename {libmthca/src => providers/mthca}/srq.c (100%)
> rename {libmthca/src => providers/mthca}/verbs.c (100%)
> rename {libmthca/src => providers/mthca}/wqe.h (100%)
> rename {libnes/src => providers/nes}/CMakeLists.txt (100%)
> rename {libnes/src => providers/nes}/nes-abi.h (100%)
> rename {libnes/src => providers/nes}/nes_umain.c (100%)
> rename {libnes/src => providers/nes}/nes_umain.h (100%)
> rename {libnes/src => providers/nes}/nes_uverbs.c (100%)
> rename {libocrdma/src => providers/ocrdma}/CMakeLists.txt (100%)
> rename {libocrdma => providers/ocrdma}/Changelog (100%)
> rename {libocrdma/src => providers/ocrdma}/ocrdma_abi.h (100%)
> rename {libocrdma/src => providers/ocrdma}/ocrdma_main.c (100%)
> rename {libocrdma/src => providers/ocrdma}/ocrdma_main.h (100%)
> rename {libocrdma/src => providers/ocrdma}/ocrdma_verbs.c (100%)
> rename {librxe => providers/rxe}/CMakeLists.txt (84%)
> rename {librxe => providers/rxe}/man/CMakeLists.txt (100%)
> rename {librxe => providers/rxe}/man/rxe.7 (100%)
> rename {librxe => providers/rxe}/man/rxe_cfg.8 (100%)
> rename {librxe/src => providers/rxe}/rxe-abi.h (100%)
> rename {librxe/src => providers/rxe}/rxe.c (100%)
> rename {librxe/src => providers/rxe}/rxe.h (100%)
> rename {librxe => providers/rxe}/rxe_cfg (100%)
> rename {librxe/src => providers/rxe}/rxe_queue.h (100%)
> create mode 100644 rdma-core.spec
> create mode 100644 srp_daemon/CMakeLists.txt
> rename srp_daemon/{man => }/ibsrpdm.1 (100%)
> rename srp_daemon/{srp_daemon => }/logrotate-srp_daemon (100%)
> delete mode 100644 srp_daemon/man/CMakeLists.txt
> rename srp_daemon/{srp_daemon => }/rsyslog-srp_daemon.conf (100%)
> rename srp_daemon/{man => }/srp_daemon.1.in (100%)
> rename srp_daemon/{srp_daemon => }/srp_daemon.c (100%)
> rename srp_daemon/{srp_daemon => }/srp_daemon.conf (100%)
> rename srp_daemon/{srp_daemon => }/srp_daemon.h (100%)
> rename srp_daemon/{srp_daemon => }/srp_daemon.sh.in (100%)
> delete mode 100644 srp_daemon/srp_daemon/CMakeLists.txt
> rename srp_daemon/{srp_daemon => }/srp_handle_traps.c (100%)
> rename srp_daemon/{srp_daemon => }/srp_ib_types.h (100%)
> rename srp_daemon/{srp_daemon => }/srp_sync.c (100%)
> rename srp_daemon/{srp_daemon => }/srpd.in (100%)
>
> --
> 2.1.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply
* Re: [PATCH qedr 04/10] qedr: Add support for PD,PKEY and CQ verbs
From: Leon Romanovsky @ 2016-10-07 14:24 UTC (permalink / raw)
To: Elior, Ariel
Cc: dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
Kalderon, Michal, Mintz, Yuval, Borundia, Rajesh,
linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Amrani, Ram
In-Reply-To: <CY1PR0701MB1337AC7B933E917765C3EBC990C60-UpKza+2NMNLi6bjPjkn3FE5OhdzP3rhOnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 2577 bytes --]
On Fri, Oct 07, 2016 at 10:47:18AM +0000, Elior, Ariel wrote:
> > > @@ -66,6 +85,12 @@ struct rdma_cqe_common {
> > > struct regpair qp_handle;
> > > __le16 reserved1[7];
> > > u8 flags;
> > > +#define RDMA_CQE_COMMON_TOGGLE_BIT_MASK 0x1
> > > +#define RDMA_CQE_COMMON_TOGGLE_BIT_SHIFT 0
> > > +#define RDMA_CQE_COMMON_TYPE_MASK 0x3
> > > +#define RDMA_CQE_COMMON_TYPE_SHIFT 1
> > > +#define RDMA_CQE_COMMON_RESERVED2_MASK 0x1F
> > > +#define RDMA_CQE_COMMON_RESERVED2_SHIFT 3
> > > u8 status;
> >
> > It is VERY uncommon to mix defines and structs together.
> > Please don't do it, it confuses a lot and doesn't help to
> > readability/debug.
>
> Hi Leon,
> Firstly, thanks for investing your time in reviewing our driver.
> As for mixed defines and structures, far from being very uncommon, they are
> actually ubiquitous throughout the kernel and are used by the foremost
> developers (Dave Miller, Linus, Jeff Kirsher).
Net subsystem is very different from other kernel community.
For example, this article from LWN [1] - "Coding-style exceptionalism"
talks about it.
>
> In infiniband tree alone, at least three drivers employ this:
> drivers/infiniband/hw/ocrdma/ocrdma_sli.h line 1900
> drivers/infiniband/hw/mthca/mthca_user.h line 68
> drivers/infiniband/hw/cxgb3/cxio_hal.h line 116
All of them are copy-paste from pre-historic era.
>
> In the net subsystem, it is even more widely used (~14k places), including
> mellanox and intel drivers, as well as our bnx2x and qed* drivers and many
> others. A few examples can be seen under:
> drivers/net/ethernet/mellanox/mlx4/en_port.h line 94
> drivers/net/ethernet/mellanox/mlx4/mlx4_en.h line 345
> drivers/net/ethernet/mellanox/mlx4/fw.c line 2759
Thanks for pointing it.
We will fix it.
> drivers/net/ethernet/intel/ixgbe/ixgbe.h line 623 (Jeff Kirsher)
> drivers/net/ethernet/broadcom/tg3.h line 2540 (Dave Miller)
> ixgbe.h uses this exactly like we do in the code you cited.
>
> In other kernel cornerstones:
> fs/ext4/ext4.h line 1287 (Linus)
1. From git blame, this define was added in 2010 !!!!
2. It has totally different meaning from your code - to mark the
position in the structure.
> include/net/sock.h line 312 (Dave)
Net is a bad example.
>
> I don't think there are grounds for objecting to this style. We'll take care
> of the rest of your comments.
As you wish, at the end it will be Doug's decision, if he wants to see
driver submitted in 2016 in different coding style from rest of the subsystem.
[1] https://lwn.net/Articles/694755/
>
> Thanks,
> Ariel
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply
* Re: [PATCH rdma-next 00/10] Hardware tag matching support
From: Leon Romanovsky @ 2016-10-07 14:56 UTC (permalink / raw)
To: dledford-H+wXaHxf7aLQT0dZR+AlfA; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1472382050-25908-1-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 5872 bytes --]
On Sun, Aug 28, 2016 at 02:00:40PM +0300, Leon Romanovsky wrote:
> Message Passing Interface (MPI) is a communication protocol that is
> widely used for exchange of messages among processes in high-performance
> computing (HPC) systems. Messages sent from a sending process to a
> destination process are marked with an identifying label, referred to as
> a tag. Destination processes post buffers in local memory that are
> similarly marked with tags. When a message is received by the receiver
> (i.e., the host computer on which the destination process is running),
> the message is stored in a buffer whose tag matches the message tag. The
> process of finding a buffer with a matching tag for the received packet
> is called tag matching.
>
> There are two protocols that are generally used to send messages over
> MPI: The "Eager Protocol" is best suited to small messages that are
> simply sent to the destination process and received in an appropriate
> matching buffer. The "Rendezvous Protocol" is better suited to large
> messages. In Rendezvous, when the sender process has a large message to
> send, it first sends a small message to the destination process
> announcing its intention to send the large message. This small message
> is referred to as an RTS (ready to send) message. The RTS includes the
> message tag and buffer address in the sender. The destination process
> matches the RTS to a posted receive buffer, or posts such a buffer if
> one does not already exist. Once a matching receive buffer has been
> posted at the destination process side, the receiver initiates a remote
> direct memory access (RDMA) read request to read the data from the
> buffer address listed by the sender in the RTS message.
>
> MPI tag matching, when performed in software by a host processor, can
> consume substantial host resources, thus detracting from the performance
> of the actual software applications that are using MPI for
> communications. One possible solution is to offload the entire tag
> matching process to a peripheral hardware device, such as a network
> interface controller (NIC). In this case, the software application using
> MPI will post a set of buffers in a memory of the host processor and
> will pass the entire list of tags associated with the buffers to the
> NIC. In large-scale networks, however, the NIC may be required to
> simultaneously support many communicating processes and contexts
> (referred to in MPI parlance as "ranks" and "communicators,"
> respectively). NIC access to and matching of the large lists of tags
> involved in such a scenario can itself become a bottleneck. The NIC must
> also be able to handle "unexpected" traffic, for which buffers and tags
> have not yet been posted, which may also degrade performance.
>
> When the NIC receives a message over the network from one of the peer
> processes, and the message contains a label in accordance with the
> protocol, the NIC compares the label to the labels in the part of the
> list that was pushed to the NIC. Upon finding a match to the label, the
> NIC writes data conveyed in the message to the buffer in the memory that
> is associated with this label and submits a notification to the software
> process. The notification serves two purposes: both to indicate to the
> software process that the label has been consumed, so that the process
> will update the list of the labels posted to the NIC; and to inform the
> software process that the data are available in the buffer. In some
> cases (such as when the NIC retrieves the data from the remote node by
> RDMA), the NIC may submit two notifications, in the form of completion
> reports, of which the first informs the software process of the
> consumption of the label and the second announces availability of the
> data.
>
> This patch series adds to Mellanox ConnectX HCA driver support of
> tag matching. It introduces new hardware object eXtended shared Receive
> Queue (XRQ), which follows SRQ semantics with addition of extended
> receive buffers topologies and offloads. This series adds tag matching
> topology and rendezvouz offload.
>
> Available in the "topic/xrq" topic branch of this git repo:
> git://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git
>
> Or for browsing:
> https://git.kernel.org/cgit/linux/kernel/git/leon/linux-rdma.git/log/?h=topic/xrq
Hi Doug,
For any reasons, I don't see this patch set in your tree. Did I miss it?
Thanks
>
> Thanks,
> Artemy & Leon
>
> Artemy Kovalyov (10):
> IB/core: Add XRQ capabilities
> IB/core: Make CQ separate part of SRQ context
> IB/core: Add new SRQ type IB_SRQT_TAG_MATCHING
> IB/uverbs: Expose tag matching capabilties to UAPI
> IB/uverbs: Expose XRQ capabilities
> IB/uverbs: Add XRQ creation parameter to UAPI
> IB/uverbs: Add new SRQ type IB_SRQT_TAG_MATCHING
> IB/mlx5: Fill XRQ capabilities
> net/mlx5: Add XRQ support
> IB/mlx5: Support IB_SRQT_TAG_MATCHING
>
> drivers/infiniband/core/uverbs_cmd.c | 31 +++++-
> drivers/infiniband/core/verbs.c | 16 +--
> drivers/infiniband/hw/mlx5/main.c | 21 +++-
> drivers/infiniband/hw/mlx5/mlx5_ib.h | 6 ++
> drivers/infiniband/hw/mlx5/srq.c | 15 ++-
> drivers/net/ethernet/mellanox/mlx5/core/srq.c | 150 ++++++++++++++++++++++++--
> include/linux/mlx5/driver.h | 1 +
> include/linux/mlx5/srq.h | 5 +
> include/rdma/ib_verbs.h | 61 +++++++++--
> include/uapi/rdma/ib_user_verbs.h | 36 ++++++-
> 10 files changed, 307 insertions(+), 35 deletions(-)
>
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply
* RE: [PATCH rdma-next 00/10] Hardware tag matching support
From: Hefty, Sean @ 2016-10-07 16:47 UTC (permalink / raw)
To: Leon Romanovsky, dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
In-Reply-To: <20161007145620.GV9282-2ukJVAZIZ/Y@public.gmane.org>
> For any reasons, I don't see this patch set in your tree. Did I miss
> it?
>
> Thanks
>
> >
> > Thanks,
> > Artemy & Leon
> >
> > Artemy Kovalyov (10):
> > IB/core: Add XRQ capabilities
> > IB/core: Make CQ separate part of SRQ context
> > IB/core: Add new SRQ type IB_SRQT_TAG_MATCHING
> > IB/uverbs: Expose tag matching capabilties to UAPI
> > IB/uverbs: Expose XRQ capabilities
> > IB/uverbs: Add XRQ creation parameter to UAPI
> > IB/uverbs: Add new SRQ type IB_SRQT_TAG_MATCHING
> > IB/mlx5: Fill XRQ capabilities
> > net/mlx5: Add XRQ support
> > IB/mlx5: Support IB_SRQT_TAG_MATCHING
I was out when these were submitted, so this may have been answered. These patches change the uABI. Have the changes been vetted out by the IBTA or some other standards (I'm using that term loosely) organization?
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [Bug 176901] New: Running ib_rdma_bw over rxe loopback triggers a kernel oops
From: Bart Van Assche @ 2016-10-07 16:49 UTC (permalink / raw)
To: Parav Pandit; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <CAG53R5X-=b1RFR87ieL4e=ANTV0JfjO6qm8_AdXWeudQQ17oSA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On 10/06/16 20:28, Parav Pandit wrote:
> On Fri, Oct 7, 2016 at 4:53 AM, <bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public.gmane.org> wrote:
>> https://bugzilla.kernel.org/show_bug.cgi?id=176901
> This bug is fixed with my patch [1] and Doug ack also about merging fix.
>
> [1] https://patchwork.kernel.org/patch/9354863/
Hello Parav,
Thank you for the feedback. Do you perhaps know which branch Doug will
send to Linus? I haven't found any post-v4.8 rxe changes in Doug's
for-4.9-good branch:
$ git log --format=oneline v4.8..dledford/k.o/for-4.9-good
drivers/infiniband/sw include/uapi/rdma/*rxe*
60747ef4d173c2747bf7f0377fb22846cb422195 Merge
git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Something else I was wondering about is whether or not the rdma_rxe
driver should allow being attached to a bridge interface? Apparently the
rdma_rxe driver allows attaching to both the non-bridged and the bridged
interfaces, resulting in duplicate GIDs:
# modprobe rdma_rxe
# brctl addbr virbr0
# brctl addif virbr0 eth1
# rxe_cfg add eth1
# rxe_cfg add virbr0
# rxe_cfg
Name Link Driver Speed NMTU IPv4_addr RDEV RMTU
eth0 yes virtio_net 1500 192.168.1.123
eth1 no virtio_net 1500 rxe0
virbr0 no bridge 1500 rxe1
# (cd /sys/class/infiniband && grep -aH '' */ports/*/gids/0)
rxe0/ports/1/gids/0:fe80:0000:0000:0000:5054:00ff:fefd:2e4e
rxe1/ports/1/gids/0:fe80:0000:0000:0000:5054:00ff:fefd:2e4e
Should it ever be allowed that two different ports have the same GID?
Thanks,
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH rdma-core 00/17] Fixes, flattening and packaging
From: Doug Ledford @ 2016-10-07 17:07 UTC (permalink / raw)
To: Jason Gunthorpe, linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1475787103-13283-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
[-- Attachment #1.1: Type: text/plain, Size: 1431 bytes --]
On 10/6/2016 4:51 PM, Jason Gunthorpe wrote:
> This is mostly a grab bag of the finished work left in my tree:
>
> - Missed items for the last merge
> - Fix a few mistakes in the earlier patches and build system
> - Final rename of directories to make the tree shallower (eg eliminate src/, add providers/)
> - RPM and DEB packaging
>
> See
>
> https://github.com/linux-rdma/rdma-core/pull/13
>
> Jason Gunthorpe (17):
> Update Intel lists in MAINTAINERS
> Update COPYING to reflect recent cxgb4 merge
> Update comment in cxbg* drivers
> Remove missed auto* related files
> rdmacm: Drop SONAME in rspreload
> umad: Use symlinks instead of a NROFF .so directive
> verbs: Remove -fno-strict-aliasing
> Move providers into providers/
> iwpmd: Flatten iwpmd/src into iwpmd/
> srp_deamon: Flatten srp_daemon/src,etc into srp_daemon/
> ibcm: Flatten libibcm/src,include into libibcm/
> umad: Flatten libibumad/src,include into libibumad/
> verbs: Flatten libibverbs/src,include into libibverbs/
> rdmacm: Flatten librdmacm/src,include into librdmacm/
> Combined RPM Spec file
> srp_daemon: Add the debian initscripts as an option
> Debian Packaging
Thanks Jason, series (including the addition of adding Steve Wise to the
Maintainers file for iwpmd) applied.
--
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
GPG Key ID: 0E572FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
^ permalink raw reply
* Re: [Bug 176901] New: Running ib_rdma_bw over rxe loopback triggers a kernel oops
From: Doug Ledford @ 2016-10-07 17:12 UTC (permalink / raw)
To: Bart Van Assche, Parav Pandit; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <9822c558-91d0-8d6a-8f64-07949d9fdaf7-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
[-- Attachment #1.1: Type: text/plain, Size: 2755 bytes --]
On 10/7/2016 12:49 PM, Bart Van Assche wrote:
> On 10/06/16 20:28, Parav Pandit wrote:
>> On Fri, Oct 7, 2016 at 4:53 AM, <bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public.gmane.org>
>> wrote:
>>> https://bugzilla.kernel.org/show_bug.cgi?id=176901
>> This bug is fixed with my patch [1] and Doug ack also about merging fix.
>>
>> [1] https://patchwork.kernel.org/patch/9354863/
>
> Hello Parav,
>
> Thank you for the feedback. Do you perhaps know which branch Doug will
> send to Linus? I haven't found any post-v4.8 rxe changes in Doug's
> for-4.9-good branch:
I had to rebase my k.o/for-4.9 branch. So, k.o/for-4.9 became
k.o/for-4.9-bad (which has Parav's patches in it), and I made a new
k.o/for-4.9-good that does not have Parav's patches in it. I then had
to add Parav's patches to my k.o/for-4.9-hfi1 branch (I know, that makes
no sense, but bear with me). The issue is that the k.o/for-4.9-hfi1
branch needed a very late 4.7-rc base (4.7-rc7 I think) in order for the
hfi1 patches to apply cleanly. I put Parav's patches into my for-4.9
branch originally, but when I did a merge test with Linus tree, I found
that one of them in particular conflicts with patches that were also
late in the 4.7-rc cycle. By putting Parav's patches into the hfi1
branch, I can resolve that conflict myself and will be able to send a
clean pull request of just the rxe patches to Linus. So, long story
short, pull my k.o/for-4.9-hfi1 branch and test against it.
> $ git log --format=oneline v4.8..dledford/k.o/for-4.9-good
> drivers/infiniband/sw include/uapi/rdma/*rxe*
> 60747ef4d173c2747bf7f0377fb22846cb422195 Merge
> git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
>
> Something else I was wondering about is whether or not the rdma_rxe
> driver should allow being attached to a bridge interface? Apparently the
> rdma_rxe driver allows attaching to both the non-bridged and the bridged
> interfaces, resulting in duplicate GIDs:
>
> # modprobe rdma_rxe
> # brctl addbr virbr0
> # brctl addif virbr0 eth1
> # rxe_cfg add eth1
> # rxe_cfg add virbr0
> # rxe_cfg
> Name Link Driver Speed NMTU IPv4_addr RDEV RMTU
> eth0 yes virtio_net 1500 192.168.1.123
> eth1 no virtio_net 1500 rxe0
> virbr0 no bridge 1500 rxe1
> # (cd /sys/class/infiniband && grep -aH '' */ports/*/gids/0)
> rxe0/ports/1/gids/0:fe80:0000:0000:0000:5054:00ff:fefd:2e4e
> rxe1/ports/1/gids/0:fe80:0000:0000:0000:5054:00ff:fefd:2e4e
>
> Should it ever be allowed that two different ports have the same GID?
--
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
GPG Key ID: 0E572FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
^ permalink raw reply
* Re: [PATCH rdma-core 00/17] Fixes, flattening and packaging
From: Jason Gunthorpe @ 2016-10-07 18:05 UTC (permalink / raw)
To: Leon Romanovsky
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA, Christoph Hellwig, Sean Hefty
In-Reply-To: <20161007140551.GT9282-2ukJVAZIZ/Y@public.gmane.org>
On Fri, Oct 07, 2016 at 05:05:51PM +0300, Leon Romanovsky wrote:
> Can you please add all patches from ML too to this pull request, so they
> apply cleanly?
git am -3 had no problem with the patches.
https://github.com/linux-rdma/rdma-core/pull/15
Someone will have to update patchworks, when will you have access to
handle the list patches?
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH rdma-core 00/17] Fixes, flattening and packaging
From: Leon Romanovsky @ 2016-10-07 18:34 UTC (permalink / raw)
To: Jason Gunthorpe
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA, Christoph Hellwig, Sean Hefty
In-Reply-To: <20161007180527.GA27537-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 690 bytes --]
On Fri, Oct 07, 2016 at 12:05:27PM -0600, Jason Gunthorpe wrote:
> On Fri, Oct 07, 2016 at 05:05:51PM +0300, Leon Romanovsky wrote:
>
> > Can you please add all patches from ML too to this pull request, so they
> > apply cleanly?
>
> git am -3 had no problem with the patches.
>
> https://github.com/linux-rdma/rdma-core/pull/15
>
> Someone will have to update patchworks, when will you have access to
> handle the list patches?
Thanks Jason and Doug.
>
> Jason
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply
* [PATCH 0/5 for rdma-core] Five rxe_cfg patches
From: Bart Van Assche @ 2016-10-07 18:37 UTC (permalink / raw)
To: Doug Ledford, Jason Gunthorpe; +Cc: Moni Shoua, linux-rdma
Hello Doug, Jason and Moni,
These five patches is what I came up with after having had a look at the
rxe_cfg source code. It would be appreciated if these patches would be
considered for inclusion in the rdma-core repository. The filenames of
these patches are:
0001-rxe_cfg-Use-Perl-functions-instead-of-parsing-the-ou.patch
0002-rxe_cfg-Initialize-rxe_mtu-even-if-ibv_definfo-fails.patch
0003-rxe_cfg-Do-not-suppress-stderr.patch
0004-rxe_cfg-Remove-dead-code-from-show_module_status.patch
0005-rxe_cfg-Use-printf-instead-of-using-a-loop.patch
Thanks,
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCH 1/5] rxe_cfg: Use Perl functions instead of parsing the output of shell commands
From: Bart Van Assche @ 2016-10-07 18:38 UTC (permalink / raw)
To: Doug Ledford, Jason Gunthorpe; +Cc: Moni Shoua, linux-rdma
In-Reply-To: <bf5dba39-7e14-23ee-4aa1-2a276d629fe9-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
Signed-off-by: Bart Van Assche <bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
---
providers/rxe/rxe_cfg | 67 ++++++++++++++++++++++++---------------------------
1 file changed, 31 insertions(+), 36 deletions(-)
diff --git a/providers/rxe/rxe_cfg b/providers/rxe/rxe_cfg
index 6783dc78c340..0310d25bad91 100755
--- a/providers/rxe/rxe_cfg
+++ b/providers/rxe/rxe_cfg
@@ -35,6 +35,7 @@
use warnings;
use strict;
+use File::Basename;
use Getopt::Long;
use Switch;
@@ -67,20 +68,25 @@ my @mlx4_port;
my @mlx4_ether;
my @roce_list;
+# Read a file and return its contents as a string.
+sub read_file {
+ my $filename = shift;
+ my $result = "";
+
+ if (open(FILE, $filename)) {
+ $result = <FILE>;
+ close FILE;
+ }
+ return $result;
+}
+
#get mapping between rxe and eth devices
sub get_names {
- return if (!(-e "/sys/class/infiniband"));
-
- my @list;
- my $rxe;
- my $eth;
my $i = 0;
- @list = `ls /sys/class/infiniband | grep rxe $z`;
- foreach $rxe (@list) {
- chomp($rxe);
-
- $eth = `cat /sys/class/infiniband/$rxe/parent $z`;
+ foreach my $rxe (glob("/sys/class/infiniband/rxe*")) {
+ $rxe = basename($rxe);
+ my $eth = read_file("/sys/class/infiniband/$rxe/parent");
chomp($eth);
if (($eth =~ /[\w]+[\d]/)
@@ -98,25 +104,13 @@ sub get_names {
# get list of Mellanox RoCE ports
sub get_mlx4_list {
- return if (!(-e "/sys/class/infiniband"));
-
- my @list;
- my $mlx4;
- my @ports;
- my $port;
- my $link;
my $i = 0;
- @list = `ls /sys/class/infiniband | grep mlx4_ $z`;
- foreach $mlx4 (@list) {
- chomp($mlx4);
- chdir("/sys/class/infiniband/$mlx4/ports");
-
- @ports = `ls $z`;
- foreach $port (@ports) {
- chomp($port);
-
- $link= `cat $port/link_layer $z`;
+ foreach my $mlx4 (glob("/sys/class/infiniband/mlx4_*")) {
+ $mlx4 = basename($mlx4);
+ foreach my $port (glob("/sys/class/infiniband/$mlx4/ports/*")) {
+ $port = basename($port);
+ my $link = read_file("$port/link_layer");
chomp($link);
if ($link =~ "Ethernet") {
@@ -141,10 +135,10 @@ sub get_dev_info {
get_mlx4_list();
my @my_eth_list = ();
- my @my_eth_devs = `ls /sys/class/net`;
- foreach my $my_eth_dev (@my_eth_devs) {
- chomp($my_eth_dev);
- my $my_dev_type = `cat /sys/class/net/${my_eth_dev}/type`;
+ foreach my $my_eth_dev (glob("/sys/class/net/*")) {
+ $my_eth_dev = basename($my_eth_dev);
+ my $my_dev_type = read_file("/sys/class/net/${my_eth_dev}/type");
+ chomp($my_dev_type);
if ($my_dev_type == "1") {
push(@my_eth_list, "$my_eth_dev");
}
@@ -378,11 +372,11 @@ sub do_status {
# read file containing list of ethernet devices into a list
sub populate_persistence {
- my @lines = `cat $persistence_file $z`;
- my $line;
my $i = 0;
- foreach $line (@lines) {
+ open FILE, $persistence_file;
+ while(<FILE>) {
+ my $line = $_;
chomp($line);
$line =~ s/^\s+//g;
if ($line =~ /[\w]+[\d]/) {
@@ -394,6 +388,7 @@ sub populate_persistence {
}
}
}
+ close FILE;
$num_persistent = $i;
}
@@ -604,7 +599,7 @@ sub do_debug {
}
}
- my $current = `cat $debugfile $z`;
+ my $current = read_file($debugfile);
chomp($current);
if ($current > 0) {
print "Debug is ON ($current)\n";
@@ -681,7 +676,7 @@ sub main {
}
# create persistence file if necessary
- `mkdir -p $persistence_path $z`;
+ mkdir -p $persistence_path;
if (!(-e $persistence_file)) {
`touch $persistence_file $z`;
}
--
2.10.0
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related
* [PATCH 2/5] rxe_cfg: Initialize $rxe_mtu even if ibv_definfo fails
From: Bart Van Assche @ 2016-10-07 18:38 UTC (permalink / raw)
To: Doug Ledford, Jason Gunthorpe; +Cc: Moni Shoua, linux-rdma
In-Reply-To: <bf5dba39-7e14-23ee-4aa1-2a276d629fe9-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
This patch avoids that the following error message is printed if
ibv_devinfo fails:
Use of uninitialized value $rmtu in string at /usr/local/bin/rxe_cfg line 364.
Signed-off-by: Bart Van Assche <bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
---
providers/rxe/rxe_cfg | 1 +
1 file changed, 1 insertion(+)
diff --git a/providers/rxe/rxe_cfg b/providers/rxe/rxe_cfg
index 0310d25bad91..1e6a5db2f2b8 100755
--- a/providers/rxe/rxe_cfg
+++ b/providers/rxe/rxe_cfg
@@ -220,6 +220,7 @@ sub get_dev_info {
$rxe_mtu{$rxe} = $line;
}
}
+ $rxe_mtu{$rxe} = "(?)" if (!$rxe_mtu{$rxe});
}
}
--
2.10.0
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related
* [PATCH 3/5] rxe_cfg: Do not suppress stderr
From: Bart Van Assche @ 2016-10-07 18:39 UTC (permalink / raw)
To: Doug Ledford, Jason Gunthorpe; +Cc: Moni Shoua, linux-rdma
In-Reply-To: <bf5dba39-7e14-23ee-4aa1-2a276d629fe9-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
Suppressing stderr if stdout is already redirected is wrong. Hence
do not suppress stderr. If e.g. the ib_uverbs kernel module is not
loaded, without this patch no error messages are printed. With this
patch applied the following is printed:
Failed to get IB devices list: Function not implemented
Signed-off-by: Bart Van Assche <bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
---
providers/rxe/rxe_cfg | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/providers/rxe/rxe_cfg b/providers/rxe/rxe_cfg
index 1e6a5db2f2b8..a4e9c0407a8b 100755
--- a/providers/rxe/rxe_cfg
+++ b/providers/rxe/rxe_cfg
@@ -39,7 +39,6 @@ use File::Basename;
use Getopt::Long;
use Switch;
-my $z = "2>/dev/null";
my $help = 0;
my $no_persist = 0;
my $debug = 0;
@@ -150,7 +149,7 @@ sub get_dev_info {
$eth_list[$i++] = $eth;
- @lines = `ethtool -i $eth $z`;
+ @lines = `ethtool -i $eth`;
foreach $line (@lines) {
chomp($line);
@@ -171,7 +170,7 @@ sub get_dev_info {
$link_state{$eth} = "";
$link_speed{$eth} = "";
- @lines = `ethtool $eth $z`;
+ @lines = `ethtool $eth`;
foreach $line (@lines) {
chomp($line);
@@ -190,7 +189,7 @@ sub get_dev_info {
$ipv4_addr{$eth} = " ";
$eth_mtu{$eth} = "";
- @lines = `ifconfig $eth $z`;
+ @lines = `ifconfig $eth`;
foreach $line (@lines) {
# get IP address
if ($line =~ /inet addr/) {
@@ -211,7 +210,7 @@ sub get_dev_info {
# get rxe mtu
foreach my $rxe (@rxe_array) {
- @lines = `ibv_devinfo -d $rxe $z`;
+ @lines = `ibv_devinfo -d $rxe`;
foreach $line (@lines) {
if ($line =~ "active_mtu") {
$line =~ s/^\s+active_mtu:\s+//g;
@@ -494,7 +493,7 @@ sub get_devinfo {
my $rxe = $_[0];
my $cmd = "ibv_devinfo -d $rxe";
- return `$cmd $z`;
+ return `$cmd`;
}
# allow unsupported modules to load in SLES11 if allowed
@@ -679,7 +678,7 @@ sub main {
# create persistence file if necessary
mkdir -p $persistence_path;
if (!(-e $persistence_file)) {
- `touch $persistence_file $z`;
+ `touch $persistence_file`;
}
# Get full context of the configuration
--
2.10.0
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related
* [PATCH 4/5] rxe_cfg: Remove dead code from show_module_status()
From: Bart Van Assche @ 2016-10-07 18:39 UTC (permalink / raw)
To: Doug Ledford, Jason Gunthorpe; +Cc: Moni Shoua, linux-rdma
In-Reply-To: <bf5dba39-7e14-23ee-4aa1-2a276d629fe9-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
Signed-off-by: Bart Van Assche <bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
---
providers/rxe/rxe_cfg | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
diff --git a/providers/rxe/rxe_cfg b/providers/rxe/rxe_cfg
index a4e9c0407a8b..0a3dcf16957c 100755
--- a/providers/rxe/rxe_cfg
+++ b/providers/rxe/rxe_cfg
@@ -300,23 +300,7 @@ sub check_module_status {
# print driver load status and ethertype for rdma_rxe and rdma_rxe_net
sub show_module_status {
- my $rxe_loaded = 1;
-
- if (!(-e $sys)) {
- $rxe_loaded = 0;
- }
-
- if ($rxe_loaded) {
- return 0;
- }
- elsif (!$rxe_loaded) {
- print "rxe modules not loaded\n";
- return 1;
- }
- else {
- print "Configuration does not make sense\n";
- return 1;
- }
+ print "rdma_rxe module not loaded\n" if (!(-e $sys));
}
# print rxe status
--
2.10.0
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related
* [PATCH 5/5] rxe_cfg: Use printf() instead of using a loop
From: Bart Van Assche @ 2016-10-07 18:39 UTC (permalink / raw)
To: Doug Ledford, Jason Gunthorpe; +Cc: Moni Shoua, linux-rdma
In-Reply-To: <bf5dba39-7e14-23ee-4aa1-2a276d629fe9-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
Signed-off-by: Bart Van Assche <bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
---
providers/rxe/rxe_cfg | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/providers/rxe/rxe_cfg b/providers/rxe/rxe_cfg
index 0a3dcf16957c..6c414fbda6fd 100755
--- a/providers/rxe/rxe_cfg
+++ b/providers/rxe/rxe_cfg
@@ -241,7 +241,6 @@ sub status_print {
my @flen = ();
my $num_fields = 0;
my $i;
- my $j;
my $pad;
my $line;
@@ -281,9 +280,7 @@ sub status_print {
else {
print " ";
}
- for ($j = 0; $j < $pad; $j++) {
- print " ";
- }
+ printf("%*s", $pad, "");
}
print "\n";
}
--
2.10.0
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related
* Re: [PATCH 0/5 for rdma-core] Five rxe_cfg patches
From: Jason Gunthorpe @ 2016-10-07 19:02 UTC (permalink / raw)
To: Bart Van Assche; +Cc: Doug Ledford, Moni Shoua, linux-rdma
In-Reply-To: <bf5dba39-7e14-23ee-4aa1-2a276d629fe9-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
On Fri, Oct 07, 2016 at 11:37:43AM -0700, Bart Van Assche wrote:
> Hello Doug, Jason and Moni,
>
> These five patches is what I came up with after having had a look at the
> rxe_cfg source code. It would be appreciated if these patches would be
> considered for inclusion in the rdma-core repository. The filenames of these
> patches are:
Thanks Bart, it would be best in Moni looks at these when he returns,
but nothing seemed off to my uneducated eye.
While you are looking at this could you also look at the use of
/var/rxe in that script?
That is not a FHS path, so it needs to be something else, and the
script should probably pass through substitution to pick up the right
path, whatever that is.. Based on the name sounds like /var/cache or
/var/lib ?
Thanks,
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCH V2] i40iw: Add Quality of Service support
From: Henry Orosco @ 2016-10-07 20:47 UTC (permalink / raw)
To: dledford-H+wXaHxf7aLQT0dZR+AlfA
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA,
e1000-rdma-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, Henry Orosco
Add support for QoS on QPs. Upon device initialization,
a map is created from user priority to queue set
handles. On QP creation, use ToS to look up the queue
set handle for use with the QP.
Signed-off-by: Faisal Latif <faisal.latif-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Signed-off-by: Shiraz Saleem <shiraz.saleem-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Signed-off-by: Henry Orosco <henry.orosco-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
V2: Fix i40iw_cm.c and i40iw_ctrl.c mode to 100644
drivers/infiniband/hw/i40iw/i40iw.h | 9 ++
drivers/infiniband/hw/i40iw/i40iw_cm.c | 30 +++++-
drivers/infiniband/hw/i40iw/i40iw_cm.h | 2 +-
drivers/infiniband/hw/i40iw/i40iw_ctrl.c | 151 +++++++++++++++++++++++++++++-
drivers/infiniband/hw/i40iw/i40iw_d.h | 2 +
drivers/infiniband/hw/i40iw/i40iw_hw.c | 25 ++---
drivers/infiniband/hw/i40iw/i40iw_main.c | 64 +++++++++++--
drivers/infiniband/hw/i40iw/i40iw_osdep.h | 2 +
drivers/infiniband/hw/i40iw/i40iw_p.h | 2 +
drivers/infiniband/hw/i40iw/i40iw_puda.c | 3 +-
drivers/infiniband/hw/i40iw/i40iw_type.h | 18 +++-
drivers/infiniband/hw/i40iw/i40iw_utils.c | 45 +++++++++
drivers/infiniband/hw/i40iw/i40iw_verbs.c | 6 +-
13 files changed, 323 insertions(+), 36 deletions(-)
diff --git a/drivers/infiniband/hw/i40iw/i40iw.h b/drivers/infiniband/hw/i40iw/i40iw.h
index b738acd..d39ce0a 100644
--- a/drivers/infiniband/hw/i40iw/i40iw.h
+++ b/drivers/infiniband/hw/i40iw/i40iw.h
@@ -210,6 +210,12 @@ struct i40iw_msix_vector {
u32 ceq_id;
};
+struct l2params_work {
+ struct work_struct work;
+ struct i40iw_device *iwdev;
+ struct i40iw_l2params l2params;
+};
+
#define I40IW_MSIX_TABLE_SIZE 65
struct virtchnl_work {
@@ -514,6 +520,9 @@ void i40iw_add_pdusecount(struct i40iw_pd *iwpd);
void i40iw_hw_modify_qp(struct i40iw_device *iwdev, struct i40iw_qp *iwqp,
struct i40iw_modify_qp_info *info, bool wait);
+void i40iw_qp_suspend_resume(struct i40iw_sc_dev *dev,
+ struct i40iw_sc_qp *qp,
+ bool suspend);
enum i40iw_status_code i40iw_manage_qhash(struct i40iw_device *iwdev,
struct i40iw_cm_info *cminfo,
enum i40iw_quad_entry_type etype,
diff --git a/drivers/infiniband/hw/i40iw/i40iw_cm.c b/drivers/infiniband/hw/i40iw/i40iw_cm.c
index c490f8d..06fd9ae 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_cm.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_cm.c
@@ -221,6 +221,7 @@ static void i40iw_get_addr_info(struct i40iw_cm_node *cm_node,
memcpy(cm_info->rem_addr, cm_node->rem_addr, sizeof(cm_info->rem_addr));
cm_info->loc_port = cm_node->loc_port;
cm_info->rem_port = cm_node->rem_port;
+ cm_info->user_pri = cm_node->user_pri;
}
/**
@@ -396,6 +397,7 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node,
u32 opts_len = 0;
u32 pd_len = 0;
u32 hdr_len = 0;
+ u16 vtag;
sqbuf = i40iw_puda_get_bufpool(dev->ilq);
if (!sqbuf)
@@ -445,7 +447,8 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node,
ether_addr_copy(ethh->h_source, cm_node->loc_mac);
if (cm_node->vlan_id < VLAN_TAG_PRESENT) {
((struct vlan_ethhdr *)ethh)->h_vlan_proto = htons(ETH_P_8021Q);
- ((struct vlan_ethhdr *)ethh)->h_vlan_TCI = htons(cm_node->vlan_id);
+ vtag = (cm_node->user_pri << VLAN_PRIO_SHIFT) | cm_node->vlan_id;
+ ((struct vlan_ethhdr *)ethh)->h_vlan_TCI = htons(vtag);
((struct vlan_ethhdr *)ethh)->h_vlan_encapsulated_proto = htons(ETH_P_IP);
} else {
@@ -474,7 +477,8 @@ static struct i40iw_puda_buf *i40iw_form_cm_frame(struct i40iw_cm_node *cm_node,
ether_addr_copy(ethh->h_source, cm_node->loc_mac);
if (cm_node->vlan_id < VLAN_TAG_PRESENT) {
((struct vlan_ethhdr *)ethh)->h_vlan_proto = htons(ETH_P_8021Q);
- ((struct vlan_ethhdr *)ethh)->h_vlan_TCI = htons(cm_node->vlan_id);
+ vtag = (cm_node->user_pri << VLAN_PRIO_SHIFT) | cm_node->vlan_id;
+ ((struct vlan_ethhdr *)ethh)->h_vlan_TCI = htons(vtag);
((struct vlan_ethhdr *)ethh)->h_vlan_encapsulated_proto = htons(ETH_P_IPV6);
} else {
ethh->h_proto = htons(ETH_P_IPV6);
@@ -1880,6 +1884,7 @@ static int i40iw_dec_refcnt_listen(struct i40iw_cm_core *cm_core,
nfo.loc_port = listener->loc_port;
nfo.ipv4 = listener->ipv4;
nfo.vlan_id = listener->vlan_id;
+ nfo.user_pri = listener->user_pri;
if (!list_empty(&listener->child_listen_list)) {
i40iw_del_multiple_qhash(listener->iwdev, &nfo, listener);
@@ -2138,6 +2143,11 @@ static struct i40iw_cm_node *i40iw_make_cm_node(
/* set our node specific transport info */
cm_node->ipv4 = cm_info->ipv4;
cm_node->vlan_id = cm_info->vlan_id;
+ if ((cm_node->vlan_id == I40IW_NO_VLAN) && iwdev->dcb)
+ cm_node->vlan_id = 0;
+ cm_node->user_pri = cm_info->user_pri;
+ if (listener)
+ cm_node->user_pri = listener->user_pri;
memcpy(cm_node->loc_addr, cm_info->loc_addr, sizeof(cm_node->loc_addr));
memcpy(cm_node->rem_addr, cm_info->rem_addr, sizeof(cm_node->rem_addr));
cm_node->loc_port = cm_info->loc_port;
@@ -3055,6 +3065,7 @@ void i40iw_receive_ilq(struct i40iw_sc_dev *dev, struct i40iw_puda_buf *rbuf)
struct i40iw_device *iwdev = (struct i40iw_device *)dev->back_dev;
struct i40iw_cm_core *cm_core = &iwdev->cm_core;
struct vlan_ethhdr *ethh;
+ u16 vtag;
/* if vlan, then maclen = 18 else 14 */
iph = (struct iphdr *)rbuf->iph;
@@ -3068,7 +3079,9 @@ void i40iw_receive_ilq(struct i40iw_sc_dev *dev, struct i40iw_puda_buf *rbuf)
ethh = (struct vlan_ethhdr *)rbuf->mem.va;
if (ethh->h_vlan_proto == htons(ETH_P_8021Q)) {
- cm_info.vlan_id = ntohs(ethh->h_vlan_TCI) & VLAN_VID_MASK;
+ vtag = ntohs(ethh->h_vlan_TCI);
+ cm_info.user_pri = (vtag & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
+ cm_info.vlan_id = vtag & VLAN_VID_MASK;
i40iw_debug(cm_core->dev,
I40IW_DEBUG_CM,
"%s vlan_id=%d\n",
@@ -3309,6 +3322,8 @@ static void i40iw_cm_init_tsa_conn(struct i40iw_qp *iwqp,
ctx_info->tcp_info_valid = true;
ctx_info->iwarp_info_valid = true;
+ ctx_info->add_to_qoslist = true;
+ ctx_info->user_pri = cm_node->user_pri;
i40iw_init_tcp_ctx(cm_node, &tcp_info, iwqp);
if (cm_node->snd_mark_en) {
@@ -3326,6 +3341,7 @@ static void i40iw_cm_init_tsa_conn(struct i40iw_qp *iwqp,
/* once tcp_info is set, no need to do it again */
ctx_info->tcp_info_valid = false;
ctx_info->iwarp_info_valid = false;
+ ctx_info->add_to_qoslist = false;
}
/**
@@ -3779,6 +3795,9 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
i40iw_netdev_vlan_ipv6(cm_info.loc_addr, &cm_info.vlan_id, NULL);
}
cm_info.cm_id = cm_id;
+ cm_info.user_pri = rt_tos2priority(cm_id->tos);
+ i40iw_debug(&iwdev->sc_dev, I40IW_DEBUG_DCB, "%s TOS:[%d] UP:[%d]\n",
+ __func__, cm_id->tos, cm_info.user_pri);
if ((cm_info.ipv4 && (laddr->sin_addr.s_addr != raddr->sin_addr.s_addr)) ||
(!cm_info.ipv4 && memcmp(laddr6->sin6_addr.in6_u.u6_addr32,
raddr6->sin6_addr.in6_u.u6_addr32,
@@ -3924,6 +3943,11 @@ int i40iw_create_listen(struct iw_cm_id *cm_id, int backlog)
cm_id->provider_data = cm_listen_node;
+ cm_listen_node->user_pri = rt_tos2priority(cm_id->tos);
+ cm_info.user_pri = cm_listen_node->user_pri;
+ i40iw_debug(&iwdev->sc_dev, I40IW_DEBUG_DCB, "%s TOS:[%d] UP:[%d]\n",
+ __func__, cm_id->tos, cm_listen_node->user_pri);
+
if (!cm_listen_node->reused_node) {
if (wildcard) {
if (cm_info.ipv4)
diff --git a/drivers/infiniband/hw/i40iw/i40iw_cm.h b/drivers/infiniband/hw/i40iw/i40iw_cm.h
index e9046d9..945ed26 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_cm.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_cm.h
@@ -368,7 +368,7 @@ struct i40iw_cm_info {
u32 rem_addr[4];
u16 vlan_id;
int backlog;
- u16 user_pri;
+ u8 user_pri;
bool ipv4;
};
diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
index 2c4b4d0..31c4a0c 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
@@ -223,6 +223,133 @@ static enum i40iw_status_code i40iw_sc_parse_fpm_query_buf(
}
/**
+ * i40iw_fill_qos_list - Change all unknown qs handles to available ones
+ * @qs_list: list of qs_handles to be fixed with valid qs_handles
+ */
+static void i40iw_fill_qos_list(u16 *qs_list)
+{
+ u16 qshandle = qs_list[0];
+ int i;
+
+ for (i = 0; i < I40IW_MAX_USER_PRIORITY; i++) {
+ if (qs_list[i] == QS_HANDLE_UNKNOWN)
+ qs_list[i] = qshandle;
+ else
+ qshandle = qs_list[i];
+ }
+}
+
+/**
+ * i40iw_qp_from_entry - Given entry, get to the qp structure
+ * @entry: Points to list of qp structure
+ */
+static struct i40iw_sc_qp *i40iw_qp_from_entry(struct list_head *entry)
+{
+ if (!entry)
+ return NULL;
+
+ return (struct i40iw_sc_qp *)((char *)entry - offsetof(struct i40iw_sc_qp, list));
+}
+
+/**
+ * i40iw_get_qp - get the next qp from the list given current qp
+ * @head: Listhead of qp's
+ * @qp: current qp
+ */
+static struct i40iw_sc_qp *i40iw_get_qp(struct list_head *head, struct i40iw_sc_qp *qp)
+{
+ struct list_head *entry = NULL;
+ struct list_head *lastentry;
+
+ if (list_empty(head))
+ return NULL;
+
+ if (!qp) {
+ entry = head->next;
+ } else {
+ lastentry = &qp->list;
+ entry = (lastentry != head) ? lastentry->next : NULL;
+ }
+
+ return i40iw_qp_from_entry(entry);
+}
+
+/**
+ * i40iw_change_l2params - given the new l2 parameters, change all qp
+ * @dev: IWARP device pointer
+ * @l2params: New paramaters from l2
+ */
+void i40iw_change_l2params(struct i40iw_sc_dev *dev, struct i40iw_l2params *l2params)
+{
+ struct i40iw_sc_qp *qp = NULL;
+ bool qs_handle_change = false;
+ bool mss_change = false;
+ unsigned long flags;
+ u16 qs_handle;
+ int i;
+
+ if (dev->mss != l2params->mss) {
+ mss_change = true;
+ dev->mss = l2params->mss;
+ }
+
+ i40iw_fill_qos_list(l2params->qs_handle_list);
+ for (i = 0; i < I40IW_MAX_USER_PRIORITY; i++) {
+ qs_handle = l2params->qs_handle_list[i];
+ if (dev->qos[i].qs_handle != qs_handle)
+ qs_handle_change = true;
+ else if (!mss_change)
+ continue; /* no MSS nor qs handle change */
+ spin_lock_irqsave(&dev->qos[i].lock, flags);
+ qp = i40iw_get_qp(&dev->qos[i].qplist, qp);
+ while (qp) {
+ if (mss_change)
+ i40iw_qp_mss_modify(dev, qp);
+ if (qs_handle_change) {
+ qp->qs_handle = qs_handle;
+ /* issue cqp suspend command */
+ i40iw_qp_suspend_resume(dev, qp, true);
+ }
+ qp = i40iw_get_qp(&dev->qos[i].qplist, qp);
+ }
+ spin_unlock_irqrestore(&dev->qos[i].lock, flags);
+ dev->qos[i].qs_handle = qs_handle;
+ }
+}
+
+/**
+ * i40iw_qp_rem_qos - remove qp from qos lists during destroy qp
+ * @dev: IWARP device pointer
+ * @qp: qp to be removed from qos
+ */
+static void i40iw_qp_rem_qos(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp)
+{
+ unsigned long flags;
+
+ if (!qp->on_qoslist)
+ return;
+ spin_lock_irqsave(&dev->qos[qp->user_pri].lock, flags);
+ list_del(&qp->list);
+ spin_unlock_irqrestore(&dev->qos[qp->user_pri].lock, flags);
+}
+
+/**
+ * i40iw_qp_add_qos - called during setctx fot qp to be added to qos
+ * @dev: IWARP device pointer
+ * @qp: qp to be added to qos
+ */
+void i40iw_qp_add_qos(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&dev->qos[qp->user_pri].lock, flags);
+ qp->qs_handle = dev->qos[qp->user_pri].qs_handle;
+ list_add(&qp->list, &dev->qos[qp->user_pri].qplist);
+ qp->on_qoslist = true;
+ spin_unlock_irqrestore(&dev->qos[qp->user_pri].lock, flags);
+}
+
+/**
* i40iw_sc_pd_init - initialize sc pd struct
* @dev: sc device struct
* @pd: sc pd ptr
@@ -1082,7 +1209,7 @@ static enum i40iw_status_code i40iw_sc_manage_qhash_table_entry(
LS_64(info->dest_ip[2], I40IW_CQPSQ_QHASH_ADDR2) |
LS_64(info->dest_ip[3], I40IW_CQPSQ_QHASH_ADDR3));
}
- qw2 = LS_64(cqp->dev->qs_handle, I40IW_CQPSQ_QHASH_QS_HANDLE);
+ qw2 = LS_64(cqp->dev->qos[info->user_pri].qs_handle, I40IW_CQPSQ_QHASH_QS_HANDLE);
if (info->vlan_valid)
qw2 |= LS_64(info->vlan_id, I40IW_CQPSQ_QHASH_VLANID);
set_64bit_val(wqe, 16, qw2);
@@ -2151,7 +2278,7 @@ static enum i40iw_status_code i40iw_sc_qp_init(struct i40iw_sc_qp *qp,
qp->rq_tph_en = info->rq_tph_en;
qp->rcv_tph_en = info->rcv_tph_en;
qp->xmit_tph_en = info->xmit_tph_en;
- qp->qs_handle = qp->pd->dev->qs_handle;
+ qp->qs_handle = qp->pd->dev->qos[qp->user_pri].qs_handle;
qp->exception_lan_queue = qp->pd->dev->exception_lan_queue;
return 0;
@@ -2296,6 +2423,7 @@ static enum i40iw_status_code i40iw_sc_qp_destroy(
struct i40iw_sc_cqp *cqp;
u64 header;
+ i40iw_qp_rem_qos(qp->pd->dev, qp);
cqp = qp->pd->dev->cqp;
wqe = i40iw_sc_cqp_get_next_send_wqe(cqp, scratch);
if (!wqe)
@@ -2447,6 +2575,12 @@ static enum i40iw_status_code i40iw_sc_qp_setctx(
iw = info->iwarp_info;
tcp = info->tcp_info;
+ if (info->add_to_qoslist) {
+ qp->user_pri = info->user_pri;
+ i40iw_qp_add_qos(qp->pd->dev, qp);
+ i40iw_debug(qp->dev, I40IW_DEBUG_DCB, "%s qp[%d] UP[%d] qset[%d]\n",
+ __func__, qp->qp_uk.qp_id, qp->user_pri, qp->qs_handle);
+ }
qw0 = LS_64(qp->qp_uk.rq_wqe_size, I40IWQPC_RQWQESIZE) |
LS_64(info->err_rq_idx_valid, I40IWQPC_ERR_RQ_IDX_VALID) |
LS_64(qp->rcv_tph_en, I40IWQPC_RCVTPHEN) |
@@ -3959,7 +4093,7 @@ enum i40iw_status_code i40iw_process_cqp_cmd(struct i40iw_sc_dev *dev,
struct cqp_commands_info *pcmdinfo)
{
enum i40iw_status_code status = 0;
- unsigned long flags;
+ unsigned long flags;
spin_lock_irqsave(&dev->cqp_lock, flags);
if (list_empty(&dev->cqp_cmd_head) && !i40iw_ring_full(dev->cqp))
@@ -3978,7 +4112,7 @@ enum i40iw_status_code i40iw_process_bh(struct i40iw_sc_dev *dev)
{
enum i40iw_status_code status = 0;
struct cqp_commands_info *pcmdinfo;
- unsigned long flags;
+ unsigned long flags;
spin_lock_irqsave(&dev->cqp_lock, flags);
while (!list_empty(&dev->cqp_cmd_head) && !i40iw_ring_full(dev->cqp)) {
@@ -4742,6 +4876,7 @@ enum i40iw_status_code i40iw_device_init(struct i40iw_sc_dev *dev,
u16 hmc_fcn = 0;
enum i40iw_status_code ret_code = 0;
u8 db_size;
+ int i;
spin_lock_init(&dev->cqp_lock);
INIT_LIST_HEAD(&dev->cqp_cmd_head); /* for the cqp commands backlog. */
@@ -4757,7 +4892,13 @@ enum i40iw_status_code i40iw_device_init(struct i40iw_sc_dev *dev,
return ret_code;
}
dev->hmc_fn_id = info->hmc_fn_id;
- dev->qs_handle = info->qs_handle;
+ i40iw_fill_qos_list(info->l2params.qs_handle_list);
+ for (i = 0; i < I40IW_MAX_USER_PRIORITY; i++) {
+ dev->qos[i].qs_handle = info->l2params.qs_handle_list[i];
+ i40iw_debug(dev, I40IW_DEBUG_DCB, "qset[%d]: %d\n", i, dev->qos[i].qs_handle);
+ spin_lock_init(&dev->qos[i].lock);
+ INIT_LIST_HEAD(&dev->qos[i].qplist);
+ }
dev->exception_lan_queue = info->exception_lan_queue;
dev->is_pf = info->is_pf;
diff --git a/drivers/infiniband/hw/i40iw/i40iw_d.h b/drivers/infiniband/hw/i40iw/i40iw_d.h
index 2fac1db..e184c0e 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_d.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_d.h
@@ -74,6 +74,8 @@
#define RS_32_1(val, bits) (u32)(val >> bits)
#define I40E_HI_DWORD(x) ((u32)((((x) >> 16) >> 16) & 0xFFFFFFFF))
+#define QS_HANDLE_UNKNOWN 0xffff
+
#define LS_64(val, field) (((u64)val << field ## _SHIFT) & (field ## _MASK))
#define RS_64(val, field) ((u64)(val & field ## _MASK) >> field ## _SHIFT)
diff --git a/drivers/infiniband/hw/i40iw/i40iw_hw.c b/drivers/infiniband/hw/i40iw/i40iw_hw.c
index 3ee0cad..4a7619f 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_hw.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_hw.c
@@ -358,6 +358,9 @@ void i40iw_process_aeq(struct i40iw_device *iwdev)
continue;
i40iw_cm_disconn(iwqp);
break;
+ case I40IW_AE_QP_SUSPEND_COMPLETE:
+ i40iw_qp_suspend_resume(dev, &iwqp->sc_qp, false);
+ break;
case I40IW_AE_TERMINATE_SENT:
i40iw_terminate_send_fin(qp);
break;
@@ -403,19 +406,18 @@ void i40iw_process_aeq(struct i40iw_device *iwdev)
case I40IW_AE_LCE_CQ_CATASTROPHIC:
case I40IW_AE_UDA_XMIT_DGRAM_TOO_LONG:
case I40IW_AE_UDA_XMIT_IPADDR_MISMATCH:
- case I40IW_AE_QP_SUSPEND_COMPLETE:
ctx_info->err_rq_idx_valid = false;
default:
- if (!info->sq && ctx_info->err_rq_idx_valid) {
- ctx_info->err_rq_idx = info->wqe_idx;
- ctx_info->tcp_info_valid = false;
- ctx_info->iwarp_info_valid = false;
- ret = dev->iw_priv_qp_ops->qp_setctx(&iwqp->sc_qp,
- iwqp->host_ctx.va,
- ctx_info);
- }
- i40iw_terminate_connection(qp, info);
- break;
+ if (!info->sq && ctx_info->err_rq_idx_valid) {
+ ctx_info->err_rq_idx = info->wqe_idx;
+ ctx_info->tcp_info_valid = false;
+ ctx_info->iwarp_info_valid = false;
+ ret = dev->iw_priv_qp_ops->qp_setctx(&iwqp->sc_qp,
+ iwqp->host_ctx.va,
+ ctx_info);
+ }
+ i40iw_terminate_connection(qp, info);
+ break;
}
if (info->qp)
i40iw_rem_ref(&iwqp->ibqp);
@@ -559,6 +561,7 @@ enum i40iw_status_code i40iw_manage_qhash(struct i40iw_device *iwdev,
}
info->ipv4_valid = cminfo->ipv4;
+ info->user_pri = cminfo->user_pri;
ether_addr_copy(info->mac_addr, iwdev->netdev->dev_addr);
info->qp_num = cpu_to_le32(dev->ilq->qp_id);
info->dest_port = cpu_to_le16(cminfo->loc_port);
diff --git a/drivers/infiniband/hw/i40iw/i40iw_main.c b/drivers/infiniband/hw/i40iw/i40iw_main.c
index 798335f..6746000 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_main.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_main.c
@@ -939,7 +939,7 @@ static enum i40iw_status_code i40iw_initialize_ilq(struct i40iw_device *iwdev)
info.rq_size = 8192;
info.buf_size = 1024;
info.tx_buf_cnt = 16384;
- info.mss = iwdev->mss;
+ info.mss = iwdev->sc_dev.mss;
info.receive = i40iw_receive_ilq;
info.xmit_complete = i40iw_free_sqbuf;
status = i40iw_puda_create_rsrc(&iwdev->sc_dev, &info);
@@ -967,7 +967,7 @@ static enum i40iw_status_code i40iw_initialize_ieq(struct i40iw_device *iwdev)
info.sq_size = 8192;
info.rq_size = 8192;
info.buf_size = 2048;
- info.mss = iwdev->mss;
+ info.mss = iwdev->sc_dev.mss;
info.tx_buf_cnt = 16384;
status = i40iw_puda_create_rsrc(&iwdev->sc_dev, &info);
if (status)
@@ -1296,6 +1296,9 @@ static enum i40iw_status_code i40iw_initialize_dev(struct i40iw_device *iwdev,
struct i40iw_device_init_info info;
struct i40iw_dma_mem mem;
u32 size;
+ u16 last_qset = I40IW_NO_QSET;
+ u16 qset;
+ u32 i;
memset(&info, 0, sizeof(info));
size = sizeof(struct i40iw_hmc_pble_rsrc) + sizeof(struct i40iw_hmc_info) +
@@ -1325,7 +1328,16 @@ static enum i40iw_status_code i40iw_initialize_dev(struct i40iw_device *iwdev,
info.bar0 = ldev->hw_addr;
info.hw = &iwdev->hw;
info.debug_mask = debug;
- info.qs_handle = ldev->params.qos.prio_qos[0].qs_handle;
+ info.l2params.mss =
+ (ldev->params.mtu) ? ldev->params.mtu - I40IW_MTU_TO_MSS : I40IW_DEFAULT_MSS;
+ for (i = 0; i < I40E_CLIENT_MAX_USER_PRIORITY; i++) {
+ qset = ldev->params.qos.prio_qos[i].qs_handle;
+ info.l2params.qs_handle_list[i] = qset;
+ if (last_qset == I40IW_NO_QSET)
+ last_qset = qset;
+ else if ((qset != last_qset) && (qset != I40IW_NO_QSET))
+ iwdev->dcb = true;
+ }
info.exception_lan_queue = 1;
info.vchnl_send = i40iw_virtchnl_send;
status = i40iw_device_init(&iwdev->sc_dev, &info);
@@ -1417,6 +1429,8 @@ static void i40iw_deinit_device(struct i40iw_device *iwdev, bool reset, bool del
struct i40iw_sc_dev *dev = &iwdev->sc_dev;
i40iw_pr_info("state = %d\n", iwdev->init_state);
+ if (iwdev->param_wq)
+ destroy_workqueue(iwdev->param_wq);
switch (iwdev->init_state) {
case RDMA_DEV_REGISTERED:
@@ -1628,6 +1642,7 @@ static int i40iw_open(struct i40e_info *ldev, struct i40e_client *client)
iwdev->init_state = RDMA_DEV_REGISTERED;
iwdev->iw_status = 1;
i40iw_port_ibevent(iwdev);
+ iwdev->param_wq = create_singlethread_workqueue("l2params");
i40iw_pr_info("i40iw_open completed\n");
return 0;
} while (0);
@@ -1638,25 +1653,58 @@ static int i40iw_open(struct i40e_info *ldev, struct i40e_client *client)
}
/**
- * i40iw_l2param_change : handle qs handles for qos and mss change
+ * i40iw_l2params_worker - worker for l2 params change
+ * @work: work pointer for l2 params
+ */
+static void i40iw_l2params_worker(struct work_struct *work)
+{
+ struct l2params_work *dwork =
+ container_of(work, struct l2params_work, work);
+ struct i40iw_device *iwdev = dwork->iwdev;
+
+ i40iw_change_l2params(&iwdev->sc_dev, &dwork->l2params);
+ atomic_dec(&iwdev->params_busy);
+ kfree(work);
+}
+
+/**
+ * i40iw_l2param_change - handle qs handles for qos and mss change
* @ldev: lan device information
* @client: client for paramater change
* @params: new parameters from L2
*/
-static void i40iw_l2param_change(struct i40e_info *ldev,
- struct i40e_client *client,
+static void i40iw_l2param_change(struct i40e_info *ldev, struct i40e_client *client,
struct i40e_params *params)
{
struct i40iw_handler *hdl;
+ struct i40iw_l2params *l2params;
+ struct l2params_work *work;
struct i40iw_device *iwdev;
+ int i;
hdl = i40iw_find_i40e_handler(ldev);
if (!hdl)
return;
iwdev = &hdl->device;
- if (params->mtu)
- iwdev->mss = params->mtu - I40IW_MTU_TO_MSS;
+
+ if (atomic_read(&iwdev->params_busy))
+ return;
+
+
+ work = kzalloc(sizeof(*work), GFP_ATOMIC);
+ if (!work)
+ return;
+
+ atomic_inc(&iwdev->params_busy);
+
+ work->iwdev = iwdev;
+ l2params = &work->l2params;
+ for (i = 0; i < I40E_CLIENT_MAX_USER_PRIORITY; i++)
+ l2params->qs_handle_list[i] = params->qos.prio_qos[i].qs_handle;
+
+ INIT_WORK(&work->work, i40iw_l2params_worker);
+ queue_work(iwdev->param_wq, &work->work);
}
/**
diff --git a/drivers/infiniband/hw/i40iw/i40iw_osdep.h b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
index 80f422b..a6b18cd 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_osdep.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_osdep.h
@@ -198,6 +198,8 @@ enum i40iw_status_code i40iw_cqp_manage_vf_pble_bp(struct i40iw_sc_dev *dev,
void i40iw_cqp_spawn_worker(struct i40iw_sc_dev *dev,
struct i40iw_virtchnl_work_info *work_info, u32 iw_vf_idx);
void *i40iw_remove_head(struct list_head *list);
+void i40iw_qp_suspend_resume(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp, bool suspend);
+void i40iw_qp_mss_modify(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp);
void i40iw_term_modify_qp(struct i40iw_sc_qp *qp, u8 next_state, u8 term, u8 term_len);
void i40iw_terminate_done(struct i40iw_sc_qp *qp, int timeout_occurred);
diff --git a/drivers/infiniband/hw/i40iw/i40iw_p.h b/drivers/infiniband/hw/i40iw/i40iw_p.h
index a0b8ca1..c9e8cb8 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_p.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_p.h
@@ -65,6 +65,8 @@ enum i40iw_status_code i40iw_pf_init_vfhmc(struct i40iw_sc_dev *dev, u8 vf_hmc_f
u32 *vf_cnt_array);
/* cqp misc functions */
+void i40iw_change_l2params(struct i40iw_sc_dev *dev, struct i40iw_l2params *l2params);
+void i40iw_qp_add_qos(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp);
void i40iw_terminate_send_fin(struct i40iw_sc_qp *qp);
diff --git a/drivers/infiniband/hw/i40iw/i40iw_puda.c b/drivers/infiniband/hw/i40iw/i40iw_puda.c
index c62d354..7541b0d 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_puda.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_puda.c
@@ -608,7 +608,8 @@ static enum i40iw_status_code i40iw_puda_qp_create(struct i40iw_puda_rsrc *rsrc)
ukqp->wqe_alloc_reg = (u32 __iomem *)(i40iw_get_hw_addr(qp->pd->dev) +
I40E_VFPE_WQEALLOC1);
- qp->qs_handle = qp->dev->qs_handle;
+ qp->user_pri = 0;
+ i40iw_qp_add_qos(rsrc->dev, qp);
i40iw_puda_qp_setctx(rsrc);
ret = i40iw_puda_qp_wqe(rsrc);
if (ret)
diff --git a/drivers/infiniband/hw/i40iw/i40iw_type.h b/drivers/infiniband/hw/i40iw/i40iw_type.h
index 2b1a04e..b6f448a 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_type.h
+++ b/drivers/infiniband/hw/i40iw/i40iw_type.h
@@ -397,6 +397,9 @@ struct i40iw_sc_qp {
bool virtual_map;
bool flush_sq;
bool flush_rq;
+ u8 user_pri;
+ struct list_head list;
+ bool on_qoslist;
bool sq_flush;
enum i40iw_flush_opcode flush_code;
enum i40iw_term_eventtypes eventtype;
@@ -424,6 +427,12 @@ struct i40iw_vchnl_vf_msg_buffer {
char parm_buffer[I40IW_VCHNL_MAX_VF_MSG_SIZE - 1];
};
+struct i40iw_qos {
+ struct list_head qplist;
+ spinlock_t lock; /* qos list */
+ u16 qs_handle;
+};
+
struct i40iw_vfdev {
struct i40iw_sc_dev *pf_dev;
u8 *hmc_info_mem;
@@ -482,7 +491,8 @@ struct i40iw_sc_dev {
const struct i40iw_vf_cqp_ops *iw_vf_cqp_ops;
struct i40iw_hmc_fpm_misc hmc_fpm_misc;
- u16 qs_handle;
+ struct i40iw_qos qos[I40IW_MAX_USER_PRIORITY];
+ u16 mss;
u32 debug_mask;
u16 exception_lan_queue;
u8 hmc_fn_id;
@@ -564,7 +574,7 @@ struct i40iw_device_init_info {
struct i40iw_hw *hw;
void __iomem *bar0;
enum i40iw_status_code (*vchnl_send)(struct i40iw_sc_dev *, u32, u8 *, u16);
- u16 qs_handle;
+ struct i40iw_l2params l2params;
u16 exception_lan_queue;
u8 hmc_fn_id;
bool is_pf;
@@ -722,6 +732,8 @@ struct i40iw_qp_host_ctx_info {
bool iwarp_info_valid;
bool err_rq_idx_valid;
u16 err_rq_idx;
+ bool add_to_qoslist;
+ u8 user_pri;
};
struct i40iw_aeqe_info {
@@ -886,7 +898,7 @@ struct i40iw_qhash_table_info {
bool ipv4_valid;
u8 mac_addr[6];
u16 vlan_id;
- u16 qs_handle;
+ u8 user_pri;
u32 qp_num;
u32 dest_ip[4];
u32 src_ip[4];
diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
index 0e8db0a..218e9fd 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
@@ -709,6 +709,51 @@ enum i40iw_status_code i40iw_cqp_sds_cmd(struct i40iw_sc_dev *dev,
}
/**
+ * i40iw_qp_suspend_resume - cqp command for suspend/resume
+ * @dev: hardware control device structure
+ * @qp: hardware control qp
+ * @suspend: flag if suspend or resume
+ */
+void i40iw_qp_suspend_resume(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp, bool suspend)
+{
+ struct i40iw_device *iwdev = (struct i40iw_device *)dev->back_dev;
+ struct i40iw_cqp_request *cqp_request;
+ struct i40iw_sc_cqp *cqp = dev->cqp;
+ struct cqp_commands_info *cqp_info;
+ enum i40iw_status_code status;
+
+ cqp_request = i40iw_get_cqp_request(&iwdev->cqp, false);
+ if (!cqp_request)
+ return;
+
+ cqp_info = &cqp_request->info;
+ cqp_info->cqp_cmd = (suspend) ? OP_SUSPEND : OP_RESUME;
+ cqp_info->in.u.suspend_resume.cqp = cqp;
+ cqp_info->in.u.suspend_resume.qp = qp;
+ cqp_info->in.u.suspend_resume.scratch = (uintptr_t)cqp_request;
+ status = i40iw_handle_cqp_op(iwdev, cqp_request);
+ if (status)
+ i40iw_pr_err("CQP-OP QP Suspend/Resume fail");
+}
+
+/**
+ * i40iw_qp_mss_modify - modify mss for qp
+ * @dev: hardware control device structure
+ * @qp: hardware control qp
+ */
+void i40iw_qp_mss_modify(struct i40iw_sc_dev *dev, struct i40iw_sc_qp *qp)
+{
+ struct i40iw_device *iwdev = (struct i40iw_device *)dev->back_dev;
+ struct i40iw_qp *iwqp = (struct i40iw_qp *)qp->back_qp;
+ struct i40iw_modify_qp_info info;
+
+ memset(&info, 0, sizeof(info));
+ info.mss_change = true;
+ info.new_mss = dev->mss;
+ i40iw_hw_modify_qp(iwdev, iwqp, &info, false);
+}
+
+/**
* i40iw_term_modify_qp - modify qp for term message
* @qp: hardware control qp
* @next_state: qp's next state
diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
index 2360338..423edad 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
@@ -254,7 +254,6 @@ static void i40iw_alloc_push_page(struct i40iw_device *iwdev, struct i40iw_sc_qp
{
struct i40iw_cqp_request *cqp_request;
struct cqp_commands_info *cqp_info;
- struct i40iw_sc_dev *dev = &iwdev->sc_dev;
enum i40iw_status_code status;
if (qp->push_idx != I40IW_INVALID_PUSH_PAGE_INDEX)
@@ -270,7 +269,7 @@ static void i40iw_alloc_push_page(struct i40iw_device *iwdev, struct i40iw_sc_qp
cqp_info->cqp_cmd = OP_MANAGE_PUSH_PAGE;
cqp_info->post_sq = 1;
- cqp_info->in.u.manage_push_page.info.qs_handle = dev->qs_handle;
+ cqp_info->in.u.manage_push_page.info.qs_handle = qp->qs_handle;
cqp_info->in.u.manage_push_page.info.free_page = 0;
cqp_info->in.u.manage_push_page.cqp = &iwdev->cqp.sc_cqp;
cqp_info->in.u.manage_push_page.scratch = (uintptr_t)cqp_request;
@@ -292,7 +291,6 @@ static void i40iw_dealloc_push_page(struct i40iw_device *iwdev, struct i40iw_sc_
{
struct i40iw_cqp_request *cqp_request;
struct cqp_commands_info *cqp_info;
- struct i40iw_sc_dev *dev = &iwdev->sc_dev;
enum i40iw_status_code status;
if (qp->push_idx == I40IW_INVALID_PUSH_PAGE_INDEX)
@@ -307,7 +305,7 @@ static void i40iw_dealloc_push_page(struct i40iw_device *iwdev, struct i40iw_sc_
cqp_info->post_sq = 1;
cqp_info->in.u.manage_push_page.info.push_idx = qp->push_idx;
- cqp_info->in.u.manage_push_page.info.qs_handle = dev->qs_handle;
+ cqp_info->in.u.manage_push_page.info.qs_handle = qp->qs_handle;
cqp_info->in.u.manage_push_page.info.free_page = 1;
cqp_info->in.u.manage_push_page.cqp = &iwdev->cqp.sc_cqp;
cqp_info->in.u.manage_push_page.scratch = (uintptr_t)cqp_request;
--
2.8.3
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related
* Re: [PATCH 0/5 for rdma-core] Five rxe_cfg patches
From: Bart Van Assche @ 2016-10-07 20:51 UTC (permalink / raw)
To: Jason Gunthorpe; +Cc: Doug Ledford, Moni Shoua, linux-rdma
In-Reply-To: <20161007190224.GB27537-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
On 10/07/2016 12:02 PM, Jason Gunthorpe wrote:
> On Fri, Oct 07, 2016 at 11:37:43AM -0700, Bart Van Assche wrote:
>> Hello Doug, Jason and Moni,
>>
>> These five patches is what I came up with after having had a look at the
>> rxe_cfg source code. It would be appreciated if these patches would be
>> considered for inclusion in the rdma-core repository. The filenames of these
>> patches are:
>
> Thanks Bart, it would be best in Moni looks at these when he returns,
> but nothing seemed off to my uneducated eye.
>
> While you are looking at this could you also look at the use of
> /var/rxe in that script?
>
> That is not a FHS path, so it needs to be something else, and the
> script should probably pass through substitution to pick up the right
> path, whatever that is.. Based on the name sounds like /var/cache or
> /var/lib ?
Hello Jason,
Do you think the names of the network interfaces to which the rdma_rxe
driver should bind should be stored in a separate file? To me this looks
like a suboptimal approach. Shouldn't we drop the /var/rxe/rxe file
completely and add a new boolean to the files in which other network
interface parameters are already stored, e.g.
/etc/NetworkManager/system-connections/* ?
Thanks,
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH 0/5 for rdma-core] Five rxe_cfg patches
From: Jason Gunthorpe @ 2016-10-07 21:00 UTC (permalink / raw)
To: Bart Van Assche; +Cc: Doug Ledford, Moni Shoua, linux-rdma
In-Reply-To: <c1901fd9-3620-50ec-0db3-9b271fd1e90b-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
On Fri, Oct 07, 2016 at 01:51:59PM -0700, Bart Van Assche wrote:
> Do you think the names of the network interfaces to which the rdma_rxe
> driver should bind should be stored in a separate file? To me this looks
> like a suboptimal approach. Shouldn't we drop the /var/rxe/rxe file
> completely and add a new boolean to the files in which other network
> interface parameters are already stored, e.g.
> /etc/NetworkManager/system-connections/* ?
I honestly don't know much about how rxe works, I was just looking
at the bogus path.
In today's world this should probably be handled by adding systemd unit
files to set up rxe.. ??
Something with network manager also seems to make some kind of sense
on the surface.
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH 0/5 for rdma-core] Five rxe_cfg patches
From: Parav Pandit @ 2016-10-07 21:42 UTC (permalink / raw)
To: Jason Gunthorpe; +Cc: Bart Van Assche, Doug Ledford, Moni Shoua, linux-rdma
In-Reply-To: <20161007210038.GA9810-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Hi Jason, Bart,
On Sat, Oct 8, 2016 at 2:30 AM, Jason Gunthorpe
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> wrote:
> On Fri, Oct 07, 2016 at 01:51:59PM -0700, Bart Van Assche wrote:
>
>> Do you think the names of the network interfaces to which the rdma_rxe
>> driver should bind should be stored in a separate file? To me this looks
>> like a suboptimal approach. Shouldn't we drop the /var/rxe/rxe file
>> completely and add a new boolean to the files in which other network
>> interface parameters are already stored, e.g.
>> /etc/NetworkManager/system-connections/* ?
>
> I honestly don't know much about how rxe works, I was just looking
> at the bogus path.
>
> In today's world this should probably be handled by adding systemd unit
> files to set up rxe.. ??
>
> Something with network manager also seems to make some kind of sense
> on the surface.
>
Instead of relying on user land to do configuration of different OS
flavors, I am considering to auto create rxe interfaces via netdev
notifier for all the network interfaces which gets newly added.
May be through some sort of attach()/detach() ops().
netdev driver will have choice to reject/accept such calls. So that
mlx4_ib is already loaded, it can reject his call from rdma_rxe.
Since the ratio of netdev devices which support RDMA to devices which
doesn't support RDMA is much large, I do not intent to add _ops() to
netdev but rather to have API through which this can be done.
Need to think little more to comeup with RFC.
Other than dev envionrments its unlikely that users want to play with
PMTU configuration. So I was thinking to do do least amount of
configuration using rxe_cfg going forward.
> Jason
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PULL REQUEST] Please pull rdma.git (tag for-linus-2)
From: Doug Ledford @ 2016-10-07 22:06 UTC (permalink / raw)
To: Torvalds, Linus, linux-rdma
[-- Attachment #1.1: Type: text/plain, Size: 2940 bytes --]
Hi Linus,
I have two separate pull requests for you today. I'll do the simple one
first.
I had originally intended to include the rxe update patches in my main
pull request. However, on merge tests, there were conflicts against
your tree. It was because I had forgotten that there were late rxe
driver changes in 4.8, so like the hfi1 driver, those patches needed to
be against a late 4.8-rc kernel in order to apply cleanly. As a result,
I was forced to make a new 4.9 branch, remove the rxe patches, then
replace the rxe patches onto the for-4.9-hfi1 branch that you already
pulled. So this first pull request is just a few rxe specific patches
tacked onto that branch. The incremental pull looks like this:
The following changes since commit 61347fa6087884305ea4a3a04501839fdb68dc76:
IB/rdmavt: Trivial function comment corrected. (2016-10-03 10:55:27 -0400)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma.git
tags/for-linus-2
for you to fetch changes up to e404f945a6101a6f0f2a29aade6dc32015471daa:
IB/rxe: improved debug prints & code cleanup (2016-10-06 13:50:04 -0400)
----------------------------------------------------------------
Minor updates for rxe driver
----------------------------------------------------------------
Parav Pandit (5):
IB/rxe: Avoid scheduling tasklet for userspace QP
IB/rxe: Fix sending out loopback packet on netdev interface.
IB/{rxe,core,rdmavt}: Fix kernel crash for reg MR
IB/rxe: Properly honor max IRD value for rd/atomic.
IB/rxe: improved debug prints & code cleanup
Stephen Bates (1):
rdma_rxe: Ensure rdma_rxe init occurs at correct time
drivers/infiniband/sw/rdmavt/dma.c | 17 +++++++++++
drivers/infiniband/sw/rxe/rxe.c | 36 +++++------------------
drivers/infiniband/sw/rxe/rxe.h | 5 ++++
drivers/infiniband/sw/rxe/rxe_av.c | 4 +--
drivers/infiniband/sw/rxe/rxe_comp.c | 6 ++--
drivers/infiniband/sw/rxe/rxe_dma.c | 17 +++++++++++
drivers/infiniband/sw/rxe/rxe_loc.h | 2 +-
drivers/infiniband/sw/rxe/rxe_mmap.c | 2 +-
drivers/infiniband/sw/rxe/rxe_mr.c | 2 +-
drivers/infiniband/sw/rxe/rxe_net.c | 51 ++++++++++++++++++++++----------
drivers/infiniband/sw/rxe/rxe_net.h | 3 +-
drivers/infiniband/sw/rxe/rxe_qp.c | 55
+++++++++++++++++++----------------
drivers/infiniband/sw/rxe/rxe_recv.c | 3 +-
drivers/infiniband/sw/rxe/rxe_req.c | 19 ++++++------
drivers/infiniband/sw/rxe/rxe_resp.c | 27 +++++++++++------
drivers/infiniband/sw/rxe/rxe_sysfs.c | 12 ++++----
drivers/infiniband/sw/rxe/rxe_verbs.c | 50 +++++++++++++++++++------------
include/rdma/ib_verbs.h | 23 +++++++++++++--
18 files changed, 210 insertions(+), 124 deletions(-)
--
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
GPG Key ID: 0E572FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox