Linux RDMA and InfiniBand development
 help / color / mirror / Atom feed
* Re: [PATCH v3 rdma-core 0/7] libhns: userspace library for hns
From: Leon Romanovsky @ 2016-11-11 12:42 UTC (permalink / raw)
  To: oulijun
  Cc: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA,
	linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <5825673A.1050109-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 3987 bytes --]

On Fri, Nov 11, 2016 at 02:37:46PM +0800, oulijun wrote:
> 在 2016/11/11 0:15, Leon Romanovsky 写道:
> > On Thu, Nov 10, 2016 at 08:46:10PM +0800, Lijun Ou wrote:
> >> This patch series introduces userspace library for hns RoCE driver.
> >>
> >> changes v2 -> v3:
> >> 1. Fix the code style, for example, if (addr == NULL)
> >> 2. Fix the bug for hns_roce_u_reg_mr
> >>
> >> changes v1 -> v2:
> >> 1. Delete the min() definition and instead of ccan header
> >> 2. Delete the CHECK_C_SOURCE_COMPILES
> >> 3. sort the c file in rdma_provider()
> >> 4. Delete the unused code in hns_roce_u_db.h
> >>
> >> Lijun Ou (7):
> >>   libhns: Add initial main frame
> >>   libhns: Add verbs of querying device and querying port
> >>   libhns: Add verbs of pd and mr support
> >>   libhns: Add verbs of cq support
> >>   libhns: Add verbs of qp support
> >>   libhns: Add verbs of post_send and post_recv support
> >>   libhns: Add consolidated repo for userspace library of hns
> >
> > Hi Lijun,
> >
> > I tried to take your patch set, but it fails to pass our Travis CI
> > tests.
> >
> > https://github.com/linux-rdma/rdma-core/pull/38
> > https://travis-ci.org/linux-rdma/rdma-core/builds/174815897
> >
> > You need to fix it prior to our acceptance.
> >
> > Thanks
> >
> Hi, Leon
>   I have checked the patches and fixed it and send the patchv4. I think that
> the patchv4 will not have errors and warnings for travis CI testing, but
> I don't have the Travis CI environment for testing it.
> I have tried to install the test environment according to your test log and it
> is fail.
> In addtion that, I have tested it for  patchv1/patchv2/patch3 by use the following way and it
> is ok
>  1. directly use the default script file build.sh
>     ./build.sh
>  2. use CC=aarch64-linux-gnu-gcc build
>     mkdir build
>     cd build
>     CC=aarch64-linux-gnu-gcc cmake -Gninja -DENABLE_RESOLVE_NEIGH=0 ..

Generally speaking, you have 4 possible ways to check your code prior
your submission:
1. Use Travis CI locally [1].
2. Fork rdma-core to your personal github account which can be connected
to Travis CI for free.
3. Install all required tools and run/compile locally
4. Send pull request to rdma-core via github interface and it will check
automatically.

First 3 options are the best.

[1]
https://docs.travis-ci.com/user/common-build-problems/#Troubleshooting-Locally-in-a-Docker-Image

>
> lijun Ou
> >
> >>
> >>  CMakeLists.txt                   |   1 +
> >>  MAINTAINERS                      |   6 +
> >>  README.md                        |   1 +
> >>  providers/hns/CMakeLists.txt     |   6 +
> >>  providers/hns/hns_roce_u.c       | 228 +++++++++++
> >>  providers/hns/hns_roce_u.h       | 255 ++++++++++++
> >>  providers/hns/hns_roce_u_abi.h   |  69 ++++
> >>  providers/hns/hns_roce_u_buf.c   |  61 +++
> >>  providers/hns/hns_roce_u_db.h    |  54 +++
> >>  providers/hns/hns_roce_u_hw_v1.c | 839 +++++++++++++++++++++++++++++++++++++++
> >>  providers/hns/hns_roce_u_hw_v1.h | 242 +++++++++++
> >>  providers/hns/hns_roce_u_verbs.c | 525 ++++++++++++++++++++++++
> >>  12 files changed, 2287 insertions(+)
> >>  create mode 100644 providers/hns/CMakeLists.txt
> >>  create mode 100644 providers/hns/hns_roce_u.c
> >>  create mode 100644 providers/hns/hns_roce_u.h
> >>  create mode 100644 providers/hns/hns_roce_u_abi.h
> >>  create mode 100644 providers/hns/hns_roce_u_buf.c
> >>  create mode 100644 providers/hns/hns_roce_u_db.h
> >>  create mode 100644 providers/hns/hns_roce_u_hw_v1.c
> >>  create mode 100644 providers/hns/hns_roce_u_hw_v1.h
> >>  create mode 100644 providers/hns/hns_roce_u_verbs.c
> >>
> >> --
> >> 1.9.1
> >>
> >> --
> >> 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-rc V1 6/9] IB/mlx4: Put non zero value in max_ah device attribute
From: Or Gerlitz @ 2016-11-11  9:14 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: Doug Ledford, linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
In-Reply-To: <1478770261-5775-7-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

On Thu, Nov 10, 2016 at 11:30 AM, Leon Romanovsky wrote:

> Use INT_MAX since this is the max value the attribute can hold, though
> hardware capability is unlimited.

> Fixes: 225c7b1feef1 ('IB/mlx4: Add a driver Mellanox ConnectX InfiniBand adapters')

why this small enhancement to a 10y old commit of Roland must go to
4.9-rc5 or even later? it clearly for -next, if you think differently,
explain.
--
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-rc V1 1/9] IB/mlx4: Set traffic class in AH
From: Or Gerlitz @ 2016-11-11  9:11 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: Doug Ledford, linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Maor Gottlieb, Daniel Jurgens
In-Reply-To: <1478770261-5775-2-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

On Thu, Nov 10, 2016 at 11:30 AM, Leon Romanovsky wrote:

> Set traffic class within sl_tclass_flowlabel when create iboe AH.
> Without this the TOS value will be empty when running VLAN tagged
> traffic, because the TOS value is taken from the traffic class in the
> address handle attributes.

How is the IP TOS field modeled in RoCE V2 spec and/or the upstream
rdma stack? E.g in RoCE V1 the 802.1q vlan priority is derived from
the SL.

> Fixes: 9106c4106974 ('IB/mlx4: Fix SL to 802.1Q priority-bits mapping for IBoE')

This commit was when the upstream kernel didn't support Routable RoCE
and hence the IP TOS value was irrelevant. Hence, I don't see why
claiming to fix it, please explain what you find wrong in that commit.

Also when you fix someone commit, the usual habit is to cc him/her on
the fix so they can have a chance to comment, how you expected people
to review your fixes to their commits if you don't give them heads-up?
--
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

* some question for help
From: oulijun @ 2016-11-11  6:49 UTC (permalink / raw)
  To: Jason Gunthorpe, linux-rdma; +Cc: Linuxarm

Hi, Jason & leon.
  I have a question for rdma-core building.
  Today, I use cross-build tool for rdma-core in the latest rdma-core version and it is fail.

The log as follows:
ubuntu@62fe1357a077:~/rdma_core_origin/rdma-core/build$ CC=aarch64-linux-gnu-gcc cmake  -DENABLE_RESOLVE_NEIGH=0 ..
CMake Error at /usr/share/cmake-2.8/Modules/CMakeDetermineCCompiler.cmake:56 (message):
  Could not find compiler set in environment variable CC:

  aarch64-linux-gnu-gcc.
Call Stack (most recent call first):
  CMakeLists.txt:26 (project)


CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER
CMake Error: Could not find cmake module file: /home/ubuntu/rdma_core_origin/rdma-core/build/CMakeFiles/2.8.12.2/CMakeCCompiler.cmake
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!


ubuntu@62fe1357a077:~/rdma_core_origin/rdma-core/build$ CC=aarch64-linux-gnu-gcc cmake -Gninja -DENABLE_RESOLVE_NEIGH=0 ..
CMake Error: Could not create named generator ninja

and if use the default script build.sh, it is ok
ubuntu@62fe1357a077:~/rdma_core_origin/rdma-core$ export CC=gcc
ubuntu@62fe1357a077:~/rdma_core_origin/rdma-core$ ./build.sh
-- The C compiler identification is GNU 4.8.4
-- Check for working C compiler using: Ninja
-- Check for working C compiler using: Ninja -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26")
-- Performing Test SUPPORTS_GNU99
-- Performing Test SUPPORTS_GNU99 - Success
-- Performing Test HAVE_C_WARNINGS
-- Performing Test HAVE_C_WARNINGS - Success
-- Performing Test HAVE_C_WMISSING_PROTOTYPES
-- Performing Test HAVE_C_WMISSING_PROTOTYPES - Success
-- Performing Test HAVE_C_WMISSING_DECLARATIONS
-- Performing Test HAVE_C_WMISSING_DECLARATIONS - Success
-- Performing Test HAVE_C_WWRITE_STRINGS
-- Performing Test HAVE_C_WWRITE_STRINGS - Success
-- Performing Test HAVE_C_WFORMAT_2
-- Performing Test HAVE_C_WFORMAT_2 - Success
-- Performing Test HAVE_C_WORKING_SHADOW
-- Performing Test HAVE_C_WORKING_SHADOW - Success
-- Performing Test HAVE_C_WORKING_MISSING_FIELD_INITIALIZERS
-- Performing Test HAVE_C_WORKING_MISSING_FIELD_INITIALIZERS - Failed
-- Performing Test HAVE_C_WNO_MISSING_FIELD_INITIALIZERS
-- Performing Test HAVE_C_WNO_MISSING_FIELD_INITIALIZERS - Success
-- Performing Test HAVE_NO_STRICT_ALIASING
-- Performing Test HAVE_NO_STRICT_ALIASING - Success
-- Performing Test HAS_CLOEXEC
-- Performing Test HAS_CLOEXEC - Success
-- Performing Test HAVE_FUNC_ATTRIBUTE_ALWAYS_INLINE
-- Performing Test HAVE_FUNC_ATTRIBUTE_ALWAYS_INLINE - Success
-- Performing Test SUPPORTS_AS_NEEDED
-- Performing Test SUPPORTS_AS_NEEDED - Success
-- Performing Test SUPPORTS_NO_UNDEFINED
-- Performing Test SUPPORTS_NO_UNDEFINED - Success
-- Performing Test _LDSYMVER_SUCCESS
-- Performing Test _LDSYMVER_SUCCESS - Success
-- Found LDSymVer: GNU
-- Looking for include file pthread.h
-- Looking for include file pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- checking for modules 'libnl-3.0;libnl-route-3.0'
--   found libnl-3.0, version 3.2.21
--   found libnl-route-3.0, version 3.2.21
-- Performing Test HAVE_WORKING_IF_H
-- Performing Test HAVE_WORKING_IF_H - Failed
-- Check size of long
-- Check size of long - done
-- Performing Test HAVE_RDMA_IB_USER_VERBS_H
-- Performing Test HAVE_RDMA_IB_USER_VERBS_H - Success
-- Performing Test HAVE_RDMA_IB_USER_SA_H
-- Performing Test HAVE_RDMA_IB_USER_SA_H - Success
-- Performing Test HAVE_RDMA_IB_USER_CM_H
-- Performing Test HAVE_RDMA_IB_USER_CM_H - Success
-- Performing Test HAVE_RDMA_IB_USER_MAD_H
-- Performing Test HAVE_RDMA_IB_USER_MAD_H - Success
-- Performing Test HAVE_RDMA_RDMA_NETLINK_H
-- Performing Test HAVE_RDMA_RDMA_NETLINK_H - Failed
-- Performing Test HAVE_RDMA_RDMA_USER_CM_H
-- Performing Test HAVE_RDMA_RDMA_USER_CM_H - Success
-- Performing Test HAVE_RDMA_RDMA_USER_RXE_H
-- Performing Test HAVE_RDMA_RDMA_USER_RXE_H - Failed
-- Looking for valgrind/memcheck.h
-- Looking for valgrind/memcheck.h - found
-- Looking for valgrind/drd.h
-- Looking for valgrind/drd.h - found
-- Performing Test LIBC_HAS_LIBRT
-- Performing Test LIBC_HAS_LIBRT - Success
-- Performing Test HAVE_C_WSTRICT_PROTOTYPES
-- Performing Test HAVE_C_WSTRICT_PROTOTYPES - Success
-- Performing Test HAVE_C_WOLD_STYLE_DEFINITION
-- Performing Test HAVE_C_WOLD_STYLE_DEFINITION - Success
-- Performing Test HAVE_C_WREDUNDANT_DECLS
-- Performing Test HAVE_C_WREDUNDANT_DECLS - Failed
-- Missing Optional Items:
--  netlink/route/link.h and net/if.h NOT co-includable (old headers)
--  rdma/rdma_netlink.h NOT found (old system kernel headers)
--  rdma/rdma_user_rxe.h NOT found (old system kernel headers)
--  -Wmissing-field-initializers does NOT work
--  -Wredundant-decls does NOT work
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ubuntu/rdma_core_origin/rdma-core/build
[167/167] Linking C shared module lib/libibacmp.so

But, the two build way to build the previous rdma-core version(patchv1/patchv2/patchv3) is ok.
they use the same environment.

Did The build evironment have changed?

Lijun Ou

--
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 v3 rdma-core 0/7] libhns: userspace library for hns
From: oulijun @ 2016-11-11  6:37 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA,
	linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <20161110161550.GD28957-2ukJVAZIZ/Y@public.gmane.org>

在 2016/11/11 0:15, Leon Romanovsky 写道:
> On Thu, Nov 10, 2016 at 08:46:10PM +0800, Lijun Ou wrote:
>> This patch series introduces userspace library for hns RoCE driver.
>>
>> changes v2 -> v3:
>> 1. Fix the code style, for example, if (addr == NULL)
>> 2. Fix the bug for hns_roce_u_reg_mr
>>
>> changes v1 -> v2:
>> 1. Delete the min() definition and instead of ccan header
>> 2. Delete the CHECK_C_SOURCE_COMPILES
>> 3. sort the c file in rdma_provider()
>> 4. Delete the unused code in hns_roce_u_db.h
>>
>> Lijun Ou (7):
>>   libhns: Add initial main frame
>>   libhns: Add verbs of querying device and querying port
>>   libhns: Add verbs of pd and mr support
>>   libhns: Add verbs of cq support
>>   libhns: Add verbs of qp support
>>   libhns: Add verbs of post_send and post_recv support
>>   libhns: Add consolidated repo for userspace library of hns
> 
> Hi Lijun,
> 
> I tried to take your patch set, but it fails to pass our Travis CI
> tests.
> 
> https://github.com/linux-rdma/rdma-core/pull/38
> https://travis-ci.org/linux-rdma/rdma-core/builds/174815897
> 
> You need to fix it prior to our acceptance.
> 
> Thanks
> 
Hi, Leon
  I have checked the patches and fixed it and send the patchv4. I think that
the patchv4 will not have errors and warnings for travis CI testing, but
I don't have the Travis CI environment for testing it.
I have tried to install the test environment according to your test log and it
is fail.
In addtion that, I have tested it for  patchv1/patchv2/patch3 by use the following way and it
is ok
 1. directly use the default script file build.sh
    ./build.sh
 2. use CC=aarch64-linux-gnu-gcc build
    mkdir build
    cd build
    CC=aarch64-linux-gnu-gcc cmake -Gninja -DENABLE_RESOLVE_NEIGH=0 ..

lijun Ou
> 
>>
>>  CMakeLists.txt                   |   1 +
>>  MAINTAINERS                      |   6 +
>>  README.md                        |   1 +
>>  providers/hns/CMakeLists.txt     |   6 +
>>  providers/hns/hns_roce_u.c       | 228 +++++++++++
>>  providers/hns/hns_roce_u.h       | 255 ++++++++++++
>>  providers/hns/hns_roce_u_abi.h   |  69 ++++
>>  providers/hns/hns_roce_u_buf.c   |  61 +++
>>  providers/hns/hns_roce_u_db.h    |  54 +++
>>  providers/hns/hns_roce_u_hw_v1.c | 839 +++++++++++++++++++++++++++++++++++++++
>>  providers/hns/hns_roce_u_hw_v1.h | 242 +++++++++++
>>  providers/hns/hns_roce_u_verbs.c | 525 ++++++++++++++++++++++++
>>  12 files changed, 2287 insertions(+)
>>  create mode 100644 providers/hns/CMakeLists.txt
>>  create mode 100644 providers/hns/hns_roce_u.c
>>  create mode 100644 providers/hns/hns_roce_u.h
>>  create mode 100644 providers/hns/hns_roce_u_abi.h
>>  create mode 100644 providers/hns/hns_roce_u_buf.c
>>  create mode 100644 providers/hns/hns_roce_u_db.h
>>  create mode 100644 providers/hns/hns_roce_u_hw_v1.c
>>  create mode 100644 providers/hns/hns_roce_u_hw_v1.h
>>  create mode 100644 providers/hns/hns_roce_u_verbs.c
>>
>> --
>> 1.9.1
>>
>> --
>> 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

* [PATCH v4 rdma-core 7/7] libhns: Add consolidated repo for userspace library of hns
From: Lijun Ou @ 2016-11-11  4:57 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA
  Cc: linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <1478840250-92558-1-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

This patch configures the consolidated repo to build userspace
library of hns(libhns).

Signed-off-by: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
---
v4/v3:
- No change over v2

v2:
- Delete the CHECK_C_SOURCE_COMPILES and sort the .c file

v1:
- The initial submit
---
 CMakeLists.txt               | 1 +
 MAINTAINERS                  | 6 ++++++
 README.md                    | 1 +
 providers/hns/CMakeLists.txt | 6 ++++++
 4 files changed, 14 insertions(+)
 create mode 100644 providers/hns/CMakeLists.txt

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b3b3ff1..e5d0c77 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -328,6 +328,7 @@ add_subdirectory(libibcm)
 add_subdirectory(providers/cxgb3)
 add_subdirectory(providers/cxgb4)
 add_subdirectory(providers/hfi1verbs)
+add_subdirectory(providers/hns)
 add_subdirectory(providers/i40iw)
 add_subdirectory(providers/ipathverbs)
 add_subdirectory(providers/mlx4)
diff --git a/MAINTAINERS b/MAINTAINERS
index d83de10..bc6eb50 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -57,6 +57,12 @@ S:	Supported
 L:	intel-opa-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org (moderated for non-subscribers)
 F:	providers/hfi1verbs/
 
+HNS USERSPACE PROVIDER (for hns-roce.ko)
+M:	Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
+M:	Wei Hu(Xavier) <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
+S:	Supported
+F:	providers/hns/
+
 I40IW USERSPACE PROVIDER (for i40iw.ko)
 M:	Tatyana Nikolova <Tatyana.E.Nikolova-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
 S:	Supported
diff --git a/README.md b/README.md
index 3a13042..e3bc33f 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,7 @@ is included:
  - iw_cxgb3.ko
  - iw_cxgb4.ko
  - hfi1.ko
+ - hns-roce.ko
  - i40iw.ko
  - ib_qib.ko
  - mlx4_ib.ko
diff --git a/providers/hns/CMakeLists.txt b/providers/hns/CMakeLists.txt
new file mode 100644
index 0000000..19a793e
--- /dev/null
+++ b/providers/hns/CMakeLists.txt
@@ -0,0 +1,6 @@
+rdma_provider(hns
+  hns_roce_u.c
+  hns_roce_u_buf.c
+  hns_roce_u_hw_v1.c
+  hns_roce_u_verbs.c
+)
-- 
1.9.1

--
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 v4 rdma-core 6/7] libhns: Add verbs of post_send and post_recv support
From: Lijun Ou @ 2016-11-11  4:57 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA
  Cc: linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <1478840250-92558-1-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

This patch mainly introduces the verbs of posting send
and psoting recv.

Signed-off-by: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
---
v4/v3/v2:
- No change over the v1

v1:
- The initial submit
---
 providers/hns/hns_roce_u.c       |   2 +
 providers/hns/hns_roce_u.h       |   8 +
 providers/hns/hns_roce_u_hw_v1.c | 314 +++++++++++++++++++++++++++++++++++++++
 providers/hns/hns_roce_u_hw_v1.h |  79 ++++++++++
 4 files changed, 403 insertions(+)

diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c
index de2fd57..281f9f4 100644
--- a/providers/hns/hns_roce_u.c
+++ b/providers/hns/hns_roce_u.c
@@ -131,6 +131,8 @@ static struct ibv_context *hns_roce_alloc_context(struct ibv_device *ibdev,
 	context->ibv_ctx.ops.query_qp	   = hns_roce_u_query_qp;
 	context->ibv_ctx.ops.modify_qp     = hr_dev->u_hw->modify_qp;
 	context->ibv_ctx.ops.destroy_qp    = hr_dev->u_hw->destroy_qp;
+	context->ibv_ctx.ops.post_send     = hr_dev->u_hw->post_send;
+	context->ibv_ctx.ops.post_recv     = hr_dev->u_hw->post_recv;
 
 	if (hns_roce_u_query_device(&context->ibv_ctx, &dev_attrs))
 		goto tptr_free;
diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h
index 02b9251..4a6ed8e 100644
--- a/providers/hns/hns_roce_u.h
+++ b/providers/hns/hns_roce_u.h
@@ -51,6 +51,10 @@
 
 #define PFX				"hns: "
 
+#ifndef likely
+#define likely(x)     __builtin_expect(!!(x), 1)
+#endif
+
 #define roce_get_field(origin, mask, shift) \
 	(((origin) & (mask)) >> (shift))
 
@@ -171,6 +175,10 @@ struct hns_roce_qp {
 struct hns_roce_u_hw {
 	int (*poll_cq)(struct ibv_cq *ibvcq, int ne, struct ibv_wc *wc);
 	int (*arm_cq)(struct ibv_cq *ibvcq, int solicited);
+	int (*post_send)(struct ibv_qp *ibvqp, struct ibv_send_wr *wr,
+			 struct ibv_send_wr **bad_wr);
+	int (*post_recv)(struct ibv_qp *ibvqp, struct ibv_recv_wr *wr,
+			 struct ibv_recv_wr **bad_wr);
 	int (*modify_qp)(struct ibv_qp *qp, struct ibv_qp_attr *attr,
 			 int attr_mask);
 	int (*destroy_qp)(struct ibv_qp *ibqp);
diff --git a/providers/hns/hns_roce_u_hw_v1.c b/providers/hns/hns_roce_u_hw_v1.c
index fb81634..a3aad1c 100644
--- a/providers/hns/hns_roce_u_hw_v1.c
+++ b/providers/hns/hns_roce_u_hw_v1.c
@@ -37,6 +37,59 @@
 #include "hns_roce_u_hw_v1.h"
 #include "hns_roce_u.h"
 
+static inline void set_raddr_seg(struct hns_roce_wqe_raddr_seg *rseg,
+				 uint64_t remote_addr, uint32_t rkey)
+{
+	rseg->raddr    = remote_addr;
+	rseg->rkey     = rkey;
+	rseg->len      = 0;
+}
+
+static void set_data_seg(struct hns_roce_wqe_data_seg *dseg, struct ibv_sge *sg)
+{
+
+	dseg->lkey = sg->lkey;
+	dseg->addr = sg->addr;
+	dseg->len = sg->length;
+}
+
+static void hns_roce_update_rq_head(struct hns_roce_context *ctx,
+				    unsigned int qpn, unsigned int rq_head)
+{
+	struct hns_roce_rq_db rq_db;
+
+	rq_db.u32_4 = 0;
+	rq_db.u32_8 = 0;
+
+	roce_set_field(rq_db.u32_4, RQ_DB_U32_4_RQ_HEAD_M,
+		       RQ_DB_U32_4_RQ_HEAD_S, rq_head);
+	roce_set_field(rq_db.u32_8, RQ_DB_U32_8_QPN_M, RQ_DB_U32_8_QPN_S, qpn);
+	roce_set_field(rq_db.u32_8, RQ_DB_U32_8_CMD_M, RQ_DB_U32_8_CMD_S, 1);
+	roce_set_bit(rq_db.u32_8, RQ_DB_U32_8_HW_SYNC_S, 1);
+
+	hns_roce_write64((uint32_t *)&rq_db, ctx, ROCEE_DB_OTHERS_L_0_REG);
+}
+
+static void hns_roce_update_sq_head(struct hns_roce_context *ctx,
+				    unsigned int qpn, unsigned int port,
+				    unsigned int sl, unsigned int sq_head)
+{
+	struct hns_roce_sq_db sq_db;
+
+	sq_db.u32_4 = 0;
+	sq_db.u32_8 = 0;
+
+	roce_set_field(sq_db.u32_4, SQ_DB_U32_4_SQ_HEAD_M,
+		       SQ_DB_U32_4_SQ_HEAD_S, sq_head);
+	roce_set_field(sq_db.u32_4, SQ_DB_U32_4_PORT_M, SQ_DB_U32_4_PORT_S,
+		       port);
+	roce_set_field(sq_db.u32_4, SQ_DB_U32_4_SL_M, SQ_DB_U32_4_SL_S, sl);
+	roce_set_field(sq_db.u32_8, SQ_DB_U32_8_QPN_M, SQ_DB_U32_8_QPN_S, qpn);
+	roce_set_bit(sq_db.u32_8, SQ_DB_U32_8_HW_SYNC, 1);
+
+	hns_roce_write64((uint32_t *)&sq_db, ctx, ROCEE_DB_SQ_L_0_REG);
+}
+
 static void hns_roce_update_cq_cons_index(struct hns_roce_context *ctx,
 					  struct hns_roce_cq *cq)
 {
@@ -126,6 +179,16 @@ static struct hns_roce_cqe *next_cqe_sw(struct hns_roce_cq *cq)
 	return get_sw_cqe(cq, cq->cons_index);
 }
 
+static void *get_recv_wqe(struct hns_roce_qp *qp, int n)
+{
+	if ((n < 0) || (n > qp->rq.wqe_cnt)) {
+		printf("rq wqe index:%d,rq wqe cnt:%d\r\n", n, qp->rq.wqe_cnt);
+		return NULL;
+	}
+
+	return qp->buf.buf + qp->rq.offset + (n << qp->rq.wqe_shift);
+}
+
 static void *get_send_wqe(struct hns_roce_qp *qp, int n)
 {
 	if ((n < 0) || (n > qp->sq.wqe_cnt)) {
@@ -137,6 +200,26 @@ static void *get_send_wqe(struct hns_roce_qp *qp, int n)
 				  (n << qp->sq.wqe_shift));
 }
 
+static int hns_roce_wq_overflow(struct hns_roce_wq *wq, int nreq,
+				struct hns_roce_cq *cq)
+{
+	unsigned int cur;
+
+	cur = wq->head - wq->tail;
+	if (cur + nreq < wq->max_post)
+		return 0;
+
+	/* While the num of wqe exceeds cap of the device, cq will be locked */
+	pthread_spin_lock(&cq->lock);
+	cur = wq->head - wq->tail;
+	pthread_spin_unlock(&cq->lock);
+
+	printf("wq:(head = %d, tail = %d, max_post = %d), nreq = 0x%x\n",
+		wq->head, wq->tail, wq->max_post, nreq);
+
+	return cur + nreq >= wq->max_post;
+}
+
 static struct hns_roce_qp *hns_roce_find_qp(struct hns_roce_context *ctx,
 					    uint32_t qpn)
 {
@@ -374,6 +457,144 @@ static int hns_roce_u_v1_arm_cq(struct ibv_cq *ibvcq, int solicited)
 	return 0;
 }
 
+static int hns_roce_u_v1_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr,
+				   struct ibv_send_wr **bad_wr)
+{
+	unsigned int ind;
+	void *wqe;
+	int nreq;
+	int ps_opcode, i;
+	int ret = 0;
+	struct hns_roce_wqe_ctrl_seg *ctrl = NULL;
+	struct hns_roce_wqe_data_seg *dseg = NULL;
+	struct hns_roce_qp *qp = to_hr_qp(ibvqp);
+	struct hns_roce_context *ctx = to_hr_ctx(ibvqp->context);
+
+	pthread_spin_lock(&qp->sq.lock);
+
+	/* check that state is OK to post send */
+	ind = qp->sq.head;
+
+	for (nreq = 0; wr; ++nreq, wr = wr->next) {
+		if (hns_roce_wq_overflow(&qp->sq, nreq,
+					 to_hr_cq(qp->ibv_qp.send_cq))) {
+			ret = -1;
+			*bad_wr = wr;
+			goto out;
+		}
+		if (wr->num_sge > qp->sq.max_gs) {
+			ret = -1;
+			*bad_wr = wr;
+			printf("wr->num_sge(<=%d) = %d, check failed!\r\n",
+				qp->sq.max_gs, wr->num_sge);
+			goto out;
+		}
+
+		ctrl = wqe = get_send_wqe(qp, ind & (qp->sq.wqe_cnt - 1));
+		memset(ctrl, 0, sizeof(struct hns_roce_wqe_ctrl_seg));
+
+		qp->sq.wrid[ind & (qp->sq.wqe_cnt - 1)] = wr->wr_id;
+		for (i = 0; i < wr->num_sge; i++)
+			ctrl->msg_length += wr->sg_list[i].length;
+
+
+		ctrl->flag |= ((wr->send_flags & IBV_SEND_SIGNALED) ?
+				HNS_ROCE_WQE_CQ_NOTIFY : 0) |
+			      (wr->send_flags & IBV_SEND_SOLICITED ?
+				HNS_ROCE_WQE_SE : 0) |
+			      ((wr->opcode == IBV_WR_SEND_WITH_IMM ||
+			       wr->opcode == IBV_WR_RDMA_WRITE_WITH_IMM) ?
+				HNS_ROCE_WQE_IMM : 0) |
+			      (wr->send_flags & IBV_SEND_FENCE ?
+				HNS_ROCE_WQE_FENCE : 0);
+
+		if (wr->opcode == IBV_WR_SEND_WITH_IMM ||
+		    wr->opcode == IBV_WR_RDMA_WRITE_WITH_IMM)
+			ctrl->imm_data = wr->imm_data;
+
+		wqe += sizeof(struct hns_roce_wqe_ctrl_seg);
+
+		/* set remote addr segment */
+		switch (ibvqp->qp_type) {
+		case IBV_QPT_RC:
+			switch (wr->opcode) {
+			case IBV_WR_RDMA_READ:
+				ps_opcode = HNS_ROCE_WQE_OPCODE_RDMA_READ;
+				set_raddr_seg(wqe, wr->wr.rdma.remote_addr,
+					      wr->wr.rdma.rkey);
+				break;
+			case IBV_WR_RDMA_WRITE:
+			case IBV_WR_RDMA_WRITE_WITH_IMM:
+				ps_opcode = HNS_ROCE_WQE_OPCODE_RDMA_WRITE;
+				set_raddr_seg(wqe, wr->wr.rdma.remote_addr,
+					      wr->wr.rdma.rkey);
+				break;
+			case IBV_WR_SEND:
+			case IBV_WR_SEND_WITH_IMM:
+				ps_opcode = HNS_ROCE_WQE_OPCODE_SEND;
+				break;
+			case IBV_WR_ATOMIC_CMP_AND_SWP:
+			case IBV_WR_ATOMIC_FETCH_AND_ADD:
+			default:
+				ps_opcode = HNS_ROCE_WQE_OPCODE_MASK;
+				break;
+			}
+			ctrl->flag |= (ps_opcode);
+			wqe  += sizeof(struct hns_roce_wqe_raddr_seg);
+			break;
+		case IBV_QPT_UC:
+		case IBV_QPT_UD:
+		default:
+			break;
+		}
+
+		dseg = wqe;
+
+		/* Inline */
+		if (wr->send_flags & IBV_SEND_INLINE && wr->num_sge) {
+			if (ctrl->msg_length > qp->max_inline_data) {
+				ret = -1;
+				*bad_wr = wr;
+				printf("inline data len(1-32)=%d, send_flags = 0x%x, check failed!\r\n",
+					wr->send_flags, ctrl->msg_length);
+				return ret;
+			}
+
+			for (i = 0; i < wr->num_sge; i++) {
+				memcpy(wqe,
+				     ((void *) (uintptr_t) wr->sg_list[i].addr),
+				     wr->sg_list[i].length);
+				wqe = wqe + wr->sg_list[i].length;
+			}
+
+			ctrl->flag |= HNS_ROCE_WQE_INLINE;
+		} else {
+			/* set sge */
+			for (i = 0; i < wr->num_sge; i++)
+				set_data_seg(dseg+i, wr->sg_list + i);
+
+			ctrl->flag |= wr->num_sge << HNS_ROCE_WQE_SGE_NUM_BIT;
+		}
+
+		ind++;
+	}
+
+out:
+	/* Set DB return */
+	if (likely(nreq)) {
+		qp->sq.head += nreq;
+		wmb();
+
+		hns_roce_update_sq_head(ctx, qp->ibv_qp.qp_num,
+				qp->port_num - 1, qp->sl,
+				qp->sq.head & ((qp->sq.wqe_cnt << 1) - 1));
+	}
+
+	pthread_spin_unlock(&qp->sq.lock);
+
+	return ret;
+}
+
 static void __hns_roce_v1_cq_clean(struct hns_roce_cq *cq, uint32_t qpn,
 				   struct hns_roce_srq *srq)
 {
@@ -517,9 +738,102 @@ static int hns_roce_u_v1_destroy_qp(struct ibv_qp *ibqp)
 	return ret;
 }
 
+static int hns_roce_u_v1_post_recv(struct ibv_qp *ibvqp, struct ibv_recv_wr *wr,
+				   struct ibv_recv_wr **bad_wr)
+{
+	int ret = 0;
+	int nreq;
+	int ind;
+	struct ibv_sge *sg;
+	struct hns_roce_rc_rq_wqe *rq_wqe;
+	struct hns_roce_qp *qp = to_hr_qp(ibvqp);
+	struct hns_roce_context *ctx = to_hr_ctx(ibvqp->context);
+
+	pthread_spin_lock(&qp->rq.lock);
+
+	/* check that state is OK to post receive */
+	ind = qp->rq.head & (qp->rq.wqe_cnt - 1);
+
+	for (nreq = 0; wr; ++nreq, wr = wr->next) {
+		if (hns_roce_wq_overflow(&qp->rq, nreq,
+					 to_hr_cq(qp->ibv_qp.recv_cq))) {
+			ret = -1;
+			*bad_wr = wr;
+			goto out;
+		}
+
+		if (wr->num_sge > qp->rq.max_gs) {
+			ret = -1;
+			*bad_wr = wr;
+			goto out;
+		}
+
+		rq_wqe = get_recv_wqe(qp, ind);
+		if (wr->num_sge > HNS_ROCE_RC_RQ_WQE_MAX_SGE_NUM) {
+			ret = -1;
+			*bad_wr = wr;
+			goto out;
+		}
+
+		if (wr->num_sge == HNS_ROCE_RC_RQ_WQE_MAX_SGE_NUM) {
+			roce_set_field(rq_wqe->u32_2,
+				       RC_RQ_WQE_NUMBER_OF_DATA_SEG_M,
+				       RC_RQ_WQE_NUMBER_OF_DATA_SEG_S,
+				       HNS_ROCE_RC_RQ_WQE_MAX_SGE_NUM);
+			sg = wr->sg_list;
+
+			rq_wqe->va0 = (sg->addr);
+			rq_wqe->l_key0 = (sg->lkey);
+			rq_wqe->length0 = (sg->length);
+
+			sg = wr->sg_list + 1;
+
+			rq_wqe->va1 = (sg->addr);
+			rq_wqe->l_key1 = (sg->lkey);
+			rq_wqe->length1 = (sg->length);
+		} else if (wr->num_sge == HNS_ROCE_RC_RQ_WQE_MAX_SGE_NUM - 1) {
+			roce_set_field(rq_wqe->u32_2,
+				       RC_RQ_WQE_NUMBER_OF_DATA_SEG_M,
+				       RC_RQ_WQE_NUMBER_OF_DATA_SEG_S,
+				       HNS_ROCE_RC_RQ_WQE_MAX_SGE_NUM - 1);
+			sg = wr->sg_list;
+
+			rq_wqe->va0 = (sg->addr);
+			rq_wqe->l_key0 = (sg->lkey);
+			rq_wqe->length0 = (sg->length);
+
+		} else if (wr->num_sge == HNS_ROCE_RC_RQ_WQE_MAX_SGE_NUM - 2) {
+			roce_set_field(rq_wqe->u32_2,
+				       RC_RQ_WQE_NUMBER_OF_DATA_SEG_M,
+				       RC_RQ_WQE_NUMBER_OF_DATA_SEG_S,
+				       HNS_ROCE_RC_RQ_WQE_MAX_SGE_NUM - 2);
+		}
+
+		qp->rq.wrid[ind] = wr->wr_id;
+
+		ind = (ind + 1) & (qp->rq.wqe_cnt - 1);
+	}
+
+out:
+	if (nreq) {
+		qp->rq.head += nreq;
+
+		wmb();
+
+		hns_roce_update_rq_head(ctx, qp->ibv_qp.qp_num,
+				    qp->rq.head & ((qp->rq.wqe_cnt << 1) - 1));
+	}
+
+	pthread_spin_unlock(&qp->rq.lock);
+
+	return ret;
+}
+
 struct hns_roce_u_hw hns_roce_u_hw_v1 = {
 	.poll_cq = hns_roce_u_v1_poll_cq,
 	.arm_cq = hns_roce_u_v1_arm_cq,
+	.post_send = hns_roce_u_v1_post_send,
+	.post_recv = hns_roce_u_v1_post_recv,
 	.modify_qp = hns_roce_u_v1_modify_qp,
 	.destroy_qp = hns_roce_u_v1_destroy_qp,
 };
diff --git a/providers/hns/hns_roce_u_hw_v1.h b/providers/hns/hns_roce_u_hw_v1.h
index b249f54..128c66f 100644
--- a/providers/hns/hns_roce_u_hw_v1.h
+++ b/providers/hns/hns_roce_u_hw_v1.h
@@ -39,9 +39,15 @@
 #define HNS_ROCE_CQE_IS_SQ			0
 
 #define HNS_ROCE_RC_WQE_INLINE_DATA_MAX_LEN	32
+#define HNS_ROCE_RC_RQ_WQE_MAX_SGE_NUM		2
 
 enum {
+	HNS_ROCE_WQE_INLINE		= 1 << 31,
+	HNS_ROCE_WQE_SE			= 1 << 30,
+	HNS_ROCE_WQE_SGE_NUM_BIT	= 24,
 	HNS_ROCE_WQE_IMM		= 1 << 23,
+	HNS_ROCE_WQE_FENCE		= 1 << 21,
+	HNS_ROCE_WQE_CQ_NOTIFY		 = 1 << 20,
 	HNS_ROCE_WQE_OPCODE_SEND        = 0 << 16,
 	HNS_ROCE_WQE_OPCODE_RDMA_READ   = 1 << 16,
 	HNS_ROCE_WQE_OPCODE_RDMA_WRITE  = 2 << 16,
@@ -52,6 +58,20 @@ enum {
 struct hns_roce_wqe_ctrl_seg {
 	__be32		sgl_pa_h;
 	__be32		flag;
+	__be32		imm_data;
+	__be32		msg_length;
+};
+
+struct hns_roce_wqe_data_seg {
+	__be64		addr;
+	__be32		lkey;
+	__be32		len;
+};
+
+struct hns_roce_wqe_raddr_seg {
+	__be32		rkey;
+	__be32		len;
+	__be64		raddr;
 };
 
 enum {
@@ -102,6 +122,43 @@ struct hns_roce_cq_db {
 
 #define CQ_DB_U32_8_HW_SYNC_S 31
 
+struct hns_roce_rq_db {
+	unsigned int u32_4;
+	unsigned int u32_8;
+};
+
+#define RQ_DB_U32_4_RQ_HEAD_S 0
+#define RQ_DB_U32_4_RQ_HEAD_M   (((1UL << 15) - 1) << RQ_DB_U32_4_RQ_HEAD_S)
+
+#define RQ_DB_U32_8_QPN_S 0
+#define RQ_DB_U32_8_QPN_M   (((1UL << 24) - 1) << RQ_DB_U32_8_QPN_S)
+
+#define RQ_DB_U32_8_CMD_S 28
+#define RQ_DB_U32_8_CMD_M   (((1UL << 3) - 1) << RQ_DB_U32_8_CMD_S)
+
+#define RQ_DB_U32_8_HW_SYNC_S 31
+
+struct hns_roce_sq_db {
+	unsigned int u32_4;
+	unsigned int u32_8;
+};
+
+#define SQ_DB_U32_4_SQ_HEAD_S 0
+#define SQ_DB_U32_4_SQ_HEAD_M (((1UL << 15) - 1) << SQ_DB_U32_4_SQ_HEAD_S)
+
+#define SQ_DB_U32_4_SL_S 16
+#define SQ_DB_U32_4_SL_M (((1UL << 2) - 1) << SQ_DB_U32_4_SL_S)
+
+#define SQ_DB_U32_4_PORT_S 18
+#define SQ_DB_U32_4_PORT_M (((1UL << 3) - 1) << SQ_DB_U32_4_PORT_S)
+
+#define SQ_DB_U32_4_DIRECT_WQE_S 31
+
+#define SQ_DB_U32_8_QPN_S 0
+#define SQ_DB_U32_8_QPN_M (((1UL << 24) - 1) << SQ_DB_U32_8_QPN_S)
+
+#define SQ_DB_U32_8_HW_SYNC 31
+
 struct hns_roce_cqe {
 	unsigned int cqe_byte_4;
 	union {
@@ -160,4 +217,26 @@ struct hns_roce_rc_send_wqe {
 	unsigned int length1;
 };
 
+struct hns_roce_rc_rq_wqe {
+	unsigned int u32_0;
+	unsigned int sgl_ba_31_0;
+	unsigned int u32_2;
+	unsigned int rvd_5;
+	unsigned int rvd_6;
+	unsigned int rvd_7;
+	unsigned int rvd_8;
+	unsigned int rvd_9;
+
+	uint64_t     va0;
+	unsigned int l_key0;
+	unsigned int length0;
+
+	uint64_t     va1;
+	unsigned int l_key1;
+	unsigned int length1;
+};
+#define RC_RQ_WQE_NUMBER_OF_DATA_SEG_S 16
+#define RC_RQ_WQE_NUMBER_OF_DATA_SEG_M \
+	(((1UL << 6) - 1) << RC_RQ_WQE_NUMBER_OF_DATA_SEG_S)
+
 #endif /* _HNS_ROCE_U_HW_V1_H */
-- 
1.9.1

--
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 v4 rdma-core 5/7] libhns: Add verbs of qp support
From: Lijun Ou @ 2016-11-11  4:57 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA
  Cc: linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <1478840250-92558-1-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

This patch mainly introduces the relatived qp verbs for userspace
library of hns, include:
    1. create_qp
    2. query_qp
    3. modify_qp
    4. destroy_qp

Signed-off-by: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
---
v4/v3:
- No change over v2

v2:
- Delete the min() and use the ccan header

v1:
- The initial submit
---
 providers/hns/hns_roce_u.c       |   5 +
 providers/hns/hns_roce_u.h       |  45 +++++++
 providers/hns/hns_roce_u_abi.h   |   8 ++
 providers/hns/hns_roce_u_hw_v1.c | 155 +++++++++++++++++++++++
 providers/hns/hns_roce_u_verbs.c | 259 ++++++++++++++++++++++++++++++++++++++-
 5 files changed, 471 insertions(+), 1 deletion(-)

diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c
index 1877218..de2fd57 100644
--- a/providers/hns/hns_roce_u.c
+++ b/providers/hns/hns_roce_u.c
@@ -127,6 +127,11 @@ static struct ibv_context *hns_roce_alloc_context(struct ibv_device *ibdev,
 	context->ibv_ctx.ops.cq_event	   = hns_roce_u_cq_event;
 	context->ibv_ctx.ops.destroy_cq    = hns_roce_u_destroy_cq;
 
+	context->ibv_ctx.ops.create_qp     = hns_roce_u_create_qp;
+	context->ibv_ctx.ops.query_qp	   = hns_roce_u_query_qp;
+	context->ibv_ctx.ops.modify_qp     = hr_dev->u_hw->modify_qp;
+	context->ibv_ctx.ops.destroy_qp    = hr_dev->u_hw->destroy_qp;
+
 	if (hns_roce_u_query_device(&context->ibv_ctx, &dev_attrs))
 		goto tptr_free;
 
diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h
index c3e364d..02b9251 100644
--- a/providers/hns/hns_roce_u.h
+++ b/providers/hns/hns_roce_u.h
@@ -44,6 +44,7 @@
 
 #define HNS_ROCE_MAX_CQ_NUM		0x10000
 #define HNS_ROCE_MIN_CQE_NUM		0x40
+#define HNS_ROCE_MIN_WQE_NUM		0x20
 #define HNS_ROCE_CQ_DB_BUF_SIZE		((HNS_ROCE_MAX_CQ_NUM >> 11) << 12)
 #define HNS_ROCE_TPTR_OFFSET		0x1000
 #define HNS_ROCE_HW_VER1		('h' << 24 | 'i' << 16 | '0' << 8 | '6')
@@ -128,10 +129,29 @@ struct hns_roce_cq {
 	int				arm_sn;
 };
 
+struct hns_roce_srq {
+	struct ibv_srq			ibv_srq;
+	struct hns_roce_buf		buf;
+	pthread_spinlock_t		lock;
+	unsigned long			*wrid;
+	unsigned int			srqn;
+	int				max;
+	unsigned int			max_gs;
+	int				wqe_shift;
+	int				head;
+	int				tail;
+	unsigned int			*db;
+	unsigned short			counter;
+};
+
 struct hns_roce_wq {
 	unsigned long			*wrid;
+	pthread_spinlock_t		lock;
 	unsigned int			wqe_cnt;
+	int				max_post;
+	unsigned int			head;
 	unsigned int			tail;
+	unsigned int			max_gs;
 	int				wqe_shift;
 	int				offset;
 };
@@ -139,14 +159,21 @@ struct hns_roce_wq {
 struct hns_roce_qp {
 	struct ibv_qp			ibv_qp;
 	struct hns_roce_buf		buf;
+	int				max_inline_data;
+	int				buf_size;
 	unsigned int			sq_signal_bits;
 	struct hns_roce_wq		sq;
 	struct hns_roce_wq		rq;
+	int				port_num;
+	int				sl;
 };
 
 struct hns_roce_u_hw {
 	int (*poll_cq)(struct ibv_cq *ibvcq, int ne, struct ibv_wc *wc);
 	int (*arm_cq)(struct ibv_cq *ibvcq, int solicited);
+	int (*modify_qp)(struct ibv_qp *qp, struct ibv_qp_attr *attr,
+			 int attr_mask);
+	int (*destroy_qp)(struct ibv_qp *ibqp);
 };
 
 static inline unsigned long align(unsigned long val, unsigned long align)
@@ -174,6 +201,16 @@ static inline struct hns_roce_cq *to_hr_cq(struct ibv_cq *ibv_cq)
 	return container_of(ibv_cq, struct hns_roce_cq, ibv_cq);
 }
 
+static inline struct hns_roce_srq *to_hr_srq(struct ibv_srq *ibv_srq)
+{
+	return container_of(ibv_srq, struct hns_roce_srq, ibv_srq);
+}
+
+static inline struct  hns_roce_qp *to_hr_qp(struct ibv_qp *ibv_qp)
+{
+	return container_of(ibv_qp, struct hns_roce_qp, ibv_qp);
+}
+
 int hns_roce_u_query_device(struct ibv_context *context,
 			    struct ibv_device_attr *attr);
 int hns_roce_u_query_port(struct ibv_context *context, uint8_t port,
@@ -193,10 +230,18 @@ struct ibv_cq *hns_roce_u_create_cq(struct ibv_context *context, int cqe,
 int hns_roce_u_destroy_cq(struct ibv_cq *cq);
 void hns_roce_u_cq_event(struct ibv_cq *cq);
 
+struct ibv_qp *hns_roce_u_create_qp(struct ibv_pd *pd,
+				    struct ibv_qp_init_attr *attr);
+
+int hns_roce_u_query_qp(struct ibv_qp *ibqp, struct ibv_qp_attr *attr,
+			int attr_mask, struct ibv_qp_init_attr *init_attr);
+
 int hns_roce_alloc_buf(struct hns_roce_buf *buf, unsigned int size,
 		       int page_size);
 void hns_roce_free_buf(struct hns_roce_buf *buf);
 
+void hns_roce_init_qp_indices(struct hns_roce_qp *qp);
+
 extern struct hns_roce_u_hw hns_roce_u_hw_v1;
 
 #endif /* _HNS_ROCE_U_H */
diff --git a/providers/hns/hns_roce_u_abi.h b/providers/hns/hns_roce_u_abi.h
index 1e62a7e..e78f967 100644
--- a/providers/hns/hns_roce_u_abi.h
+++ b/providers/hns/hns_roce_u_abi.h
@@ -58,4 +58,12 @@ struct hns_roce_create_cq_resp {
 	__u32				reserved;
 };
 
+struct hns_roce_create_qp {
+	struct ibv_create_qp		ibv_cmd;
+	__u64				buf_addr;
+	__u8				log_sq_bb_count;
+	__u8				log_sq_stride;
+	__u8				reserved[5];
+};
+
 #endif /* _HNS_ROCE_U_ABI_H */
diff --git a/providers/hns/hns_roce_u_hw_v1.c b/providers/hns/hns_roce_u_hw_v1.c
index 2676021..fb81634 100644
--- a/providers/hns/hns_roce_u_hw_v1.c
+++ b/providers/hns/hns_roce_u_hw_v1.c
@@ -150,6 +150,16 @@ static struct hns_roce_qp *hns_roce_find_qp(struct hns_roce_context *ctx,
 	}
 }
 
+static void hns_roce_clear_qp(struct hns_roce_context *ctx, uint32_t qpn)
+{
+	int tind = (qpn & (ctx->num_qps - 1)) >> ctx->qp_table_shift;
+
+	if (!--ctx->qp_table[tind].refcnt)
+		free(ctx->qp_table[tind].table);
+	else
+		ctx->qp_table[tind].table[qpn & ctx->qp_table_mask] = NULL;
+}
+
 static int hns_roce_v1_poll_one(struct hns_roce_cq *cq,
 				struct hns_roce_qp **cur_qp, struct ibv_wc *wc)
 {
@@ -364,7 +374,152 @@ static int hns_roce_u_v1_arm_cq(struct ibv_cq *ibvcq, int solicited)
 	return 0;
 }
 
+static void __hns_roce_v1_cq_clean(struct hns_roce_cq *cq, uint32_t qpn,
+				   struct hns_roce_srq *srq)
+{
+	int nfreed = 0;
+	uint32_t prod_index;
+	uint8_t owner_bit = 0;
+	struct hns_roce_cqe *cqe, *dest;
+	struct hns_roce_context *ctx = to_hr_ctx(cq->ibv_cq.context);
+
+	for (prod_index = cq->cons_index; get_sw_cqe(cq, prod_index);
+	     ++prod_index)
+		if (prod_index == cq->cons_index + cq->ibv_cq.cqe)
+			break;
+
+	while ((int) --prod_index - (int) cq->cons_index >= 0) {
+		cqe = get_cqe(cq, prod_index & cq->ibv_cq.cqe);
+		if ((roce_get_field(cqe->cqe_byte_16, CQE_BYTE_16_LOCAL_QPN_M,
+			      CQE_BYTE_16_LOCAL_QPN_S) & 0xffffff) == qpn) {
+			++nfreed;
+		} else if (nfreed) {
+			dest = get_cqe(cq,
+				       (prod_index + nfreed) & cq->ibv_cq.cqe);
+			owner_bit = roce_get_bit(dest->cqe_byte_4,
+						 CQE_BYTE_4_OWNER_S);
+			memcpy(dest, cqe, sizeof(*cqe));
+			roce_set_bit(dest->cqe_byte_4, CQE_BYTE_4_OWNER_S,
+				     owner_bit);
+		}
+	}
+
+	if (nfreed) {
+		cq->cons_index += nfreed;
+		wmb();
+		hns_roce_update_cq_cons_index(ctx, cq);
+	}
+}
+
+static void hns_roce_v1_cq_clean(struct hns_roce_cq *cq, unsigned int qpn,
+				 struct hns_roce_srq *srq)
+{
+	pthread_spin_lock(&cq->lock);
+	__hns_roce_v1_cq_clean(cq, qpn, srq);
+	pthread_spin_unlock(&cq->lock);
+}
+
+static int hns_roce_u_v1_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
+				   int attr_mask)
+{
+	int ret;
+	struct ibv_modify_qp cmd;
+	struct hns_roce_qp *hr_qp = to_hr_qp(qp);
+
+	ret = ibv_cmd_modify_qp(qp, attr, attr_mask, &cmd, sizeof(cmd));
+
+	if (!ret && (attr_mask & IBV_QP_STATE) &&
+	    attr->qp_state == IBV_QPS_RESET) {
+		hns_roce_v1_cq_clean(to_hr_cq(qp->recv_cq), qp->qp_num,
+				     qp->srq ? to_hr_srq(qp->srq) : NULL);
+		if (qp->send_cq != qp->recv_cq)
+			hns_roce_v1_cq_clean(to_hr_cq(qp->send_cq), qp->qp_num,
+					     NULL);
+
+		hns_roce_init_qp_indices(to_hr_qp(qp));
+	}
+
+	if (!ret && (attr_mask & IBV_QP_PORT)) {
+		hr_qp->port_num = attr->port_num;
+		printf("hr_qp->port_num= 0x%x\n", hr_qp->port_num);
+	}
+
+	hr_qp->sl = attr->ah_attr.sl;
+
+	return ret;
+}
+
+static void hns_roce_lock_cqs(struct ibv_qp *qp)
+{
+	struct hns_roce_cq *send_cq = to_hr_cq(qp->send_cq);
+	struct hns_roce_cq *recv_cq = to_hr_cq(qp->recv_cq);
+
+	if (send_cq == recv_cq) {
+		pthread_spin_lock(&send_cq->lock);
+	} else if (send_cq->cqn < recv_cq->cqn) {
+		pthread_spin_lock(&send_cq->lock);
+		pthread_spin_lock(&recv_cq->lock);
+	} else {
+		pthread_spin_lock(&recv_cq->lock);
+		pthread_spin_lock(&send_cq->lock);
+	}
+}
+
+static void hns_roce_unlock_cqs(struct ibv_qp *qp)
+{
+	struct hns_roce_cq *send_cq = to_hr_cq(qp->send_cq);
+	struct hns_roce_cq *recv_cq = to_hr_cq(qp->recv_cq);
+
+	if (send_cq == recv_cq) {
+		pthread_spin_unlock(&send_cq->lock);
+	} else if (send_cq->cqn < recv_cq->cqn) {
+		pthread_spin_unlock(&recv_cq->lock);
+		pthread_spin_unlock(&send_cq->lock);
+	} else {
+		pthread_spin_unlock(&send_cq->lock);
+		pthread_spin_unlock(&recv_cq->lock);
+	}
+}
+
+static int hns_roce_u_v1_destroy_qp(struct ibv_qp *ibqp)
+{
+	int ret;
+	struct hns_roce_qp *qp = to_hr_qp(ibqp);
+
+	pthread_mutex_lock(&to_hr_ctx(ibqp->context)->qp_table_mutex);
+	ret = ibv_cmd_destroy_qp(ibqp);
+	if (ret) {
+		pthread_mutex_unlock(&to_hr_ctx(ibqp->context)->qp_table_mutex);
+		return ret;
+	}
+
+	hns_roce_lock_cqs(ibqp);
+
+	__hns_roce_v1_cq_clean(to_hr_cq(ibqp->recv_cq), ibqp->qp_num,
+			       ibqp->srq ? to_hr_srq(ibqp->srq) : NULL);
+
+	if (ibqp->send_cq != ibqp->recv_cq)
+		__hns_roce_v1_cq_clean(to_hr_cq(ibqp->send_cq), ibqp->qp_num,
+				       NULL);
+
+	hns_roce_clear_qp(to_hr_ctx(ibqp->context), ibqp->qp_num);
+
+	hns_roce_unlock_cqs(ibqp);
+	pthread_mutex_unlock(&to_hr_ctx(ibqp->context)->qp_table_mutex);
+
+	free(qp->sq.wrid);
+	if (qp->rq.wqe_cnt)
+		free(qp->rq.wrid);
+
+	hns_roce_free_buf(&qp->buf);
+	free(qp);
+
+	return ret;
+}
+
 struct hns_roce_u_hw hns_roce_u_hw_v1 = {
 	.poll_cq = hns_roce_u_v1_poll_cq,
 	.arm_cq = hns_roce_u_v1_arm_cq,
+	.modify_qp = hns_roce_u_v1_modify_qp,
+	.destroy_qp = hns_roce_u_v1_destroy_qp,
 };
diff --git a/providers/hns/hns_roce_u_verbs.c b/providers/hns/hns_roce_u_verbs.c
index 61f48f1..d54b345 100644
--- a/providers/hns/hns_roce_u_verbs.c
+++ b/providers/hns/hns_roce_u_verbs.c
@@ -38,11 +38,19 @@
 #include <sys/mman.h>
 #include <fcntl.h>
 #include <unistd.h>
-
+#include <ccan/minmax.h>
 #include "hns_roce_u.h"
 #include "hns_roce_u_abi.h"
 #include "hns_roce_u_hw_v1.h"
 
+void hns_roce_init_qp_indices(struct hns_roce_qp *qp)
+{
+	qp->sq.head = 0;
+	qp->sq.tail = 0;
+	qp->rq.head = 0;
+	qp->rq.tail = 0;
+}
+
 int hns_roce_u_query_device(struct ibv_context *context,
 			    struct ibv_device_attr *attr)
 {
@@ -163,6 +171,29 @@ static int align_cq_size(int req)
 	return nent;
 }
 
+static int align_qp_size(int req)
+{
+	int nent;
+
+	for (nent = HNS_ROCE_MIN_WQE_NUM; nent < req; nent <<= 1)
+		;
+
+	return nent;
+}
+
+static void hns_roce_set_sq_sizes(struct hns_roce_qp *qp,
+				  struct ibv_qp_cap *cap, enum ibv_qp_type type)
+{
+	struct hns_roce_context *ctx = to_hr_ctx(qp->ibv_qp.context);
+
+	qp->sq.max_gs = 2;
+	cap->max_send_sge = min(ctx->max_sge, qp->sq.max_gs);
+	qp->sq.max_post = min(ctx->max_qp_wr, qp->sq.wqe_cnt);
+	cap->max_send_wr = qp->sq.max_post;
+	qp->max_inline_data  = 32;
+	cap->max_inline_data = qp->max_inline_data;
+}
+
 static int hns_roce_verify_cq(int *cqe, struct hns_roce_context *context)
 {
 	if (*cqe < HNS_ROCE_MIN_CQE_NUM) {
@@ -189,6 +220,17 @@ static int hns_roce_alloc_cq_buf(struct hns_roce_device *dev,
 	return 0;
 }
 
+static void hns_roce_calc_sq_wqe_size(struct ibv_qp_cap *cap,
+				      enum ibv_qp_type type,
+				      struct hns_roce_qp *qp)
+{
+	int size = sizeof(struct hns_roce_rc_send_wqe);
+
+	for (qp->sq.wqe_shift = 6; 1 << qp->sq.wqe_shift < size;
+	     qp->sq.wqe_shift++)
+		;
+}
+
 struct ibv_cq *hns_roce_u_create_cq(struct ibv_context *context, int cqe,
 				    struct ibv_comp_channel *channel,
 				    int comp_vector)
@@ -266,3 +308,218 @@ int hns_roce_u_destroy_cq(struct ibv_cq *cq)
 
 	return ret;
 }
+
+static int hns_roce_verify_qp(struct ibv_qp_init_attr *attr,
+			      struct hns_roce_context *context)
+{
+	if (attr->cap.max_send_wr < HNS_ROCE_MIN_WQE_NUM) {
+		fprintf(stderr,
+			"max_send_wr = %d, less than minimum WQE number.\n",
+			attr->cap.max_send_wr);
+		attr->cap.max_send_wr = HNS_ROCE_MIN_WQE_NUM;
+	}
+
+	if (attr->cap.max_recv_wr < HNS_ROCE_MIN_WQE_NUM) {
+		fprintf(stderr,
+			"max_recv_wr = %d, less than minimum WQE number.\n",
+			attr->cap.max_recv_wr);
+		attr->cap.max_recv_wr = HNS_ROCE_MIN_WQE_NUM;
+	}
+
+	if (attr->cap.max_recv_sge < 1)
+		attr->cap.max_recv_sge = 1;
+	if (attr->cap.max_send_wr > context->max_qp_wr ||
+	    attr->cap.max_recv_wr > context->max_qp_wr ||
+	    attr->cap.max_send_sge > context->max_sge  ||
+	    attr->cap.max_recv_sge > context->max_sge)
+		return -1;
+
+	if ((attr->qp_type != IBV_QPT_RC) && (attr->qp_type != IBV_QPT_UD))
+		return -1;
+
+	if ((attr->qp_type == IBV_QPT_RC) &&
+	    (attr->cap.max_inline_data > HNS_ROCE_RC_WQE_INLINE_DATA_MAX_LEN))
+		return -1;
+
+	if (attr->qp_type == IBV_QPT_UC)
+		return -1;
+
+	return 0;
+}
+
+static int hns_roce_alloc_qp_buf(struct ibv_pd *pd, struct ibv_qp_cap *cap,
+				 enum ibv_qp_type type, struct hns_roce_qp *qp)
+{
+	qp->sq.wrid =
+		(unsigned long *)malloc(qp->sq.wqe_cnt * sizeof(uint64_t));
+	if (!qp->sq.wrid)
+		return -1;
+
+	if (qp->rq.wqe_cnt) {
+		qp->rq.wrid = malloc(qp->rq.wqe_cnt * sizeof(uint64_t));
+		if (!qp->rq.wrid) {
+			free(qp->sq.wrid);
+			return -1;
+		}
+	}
+
+	for (qp->rq.wqe_shift = 4;
+	     1 << qp->rq.wqe_shift < sizeof(struct hns_roce_rc_send_wqe);
+	     qp->rq.wqe_shift++)
+		;
+
+	qp->buf_size = align((qp->sq.wqe_cnt << qp->sq.wqe_shift), 0x1000) +
+		      (qp->rq.wqe_cnt << qp->rq.wqe_shift);
+
+	if (qp->rq.wqe_shift > qp->sq.wqe_shift) {
+		qp->rq.offset = 0;
+		qp->sq.offset = qp->rq.wqe_cnt << qp->rq.wqe_shift;
+	} else {
+		qp->rq.offset = align((qp->sq.wqe_cnt << qp->sq.wqe_shift),
+				       0x1000);
+		qp->sq.offset = 0;
+	}
+
+	if (hns_roce_alloc_buf(&qp->buf, align(qp->buf_size, 0x1000),
+			       to_hr_dev(pd->context->device)->page_size)) {
+		free(qp->sq.wrid);
+		free(qp->rq.wrid);
+		return -1;
+	}
+
+	memset(qp->buf.buf, 0, qp->buf_size);
+
+	return 0;
+}
+
+static int hns_roce_store_qp(struct hns_roce_context *ctx, uint32_t qpn,
+			     struct hns_roce_qp *qp)
+{
+	int tind = (qpn & (ctx->num_qps - 1)) >> ctx->qp_table_shift;
+
+	if (!ctx->qp_table[tind].refcnt) {
+		ctx->qp_table[tind].table = calloc(ctx->qp_table_mask + 1,
+						  sizeof(struct hns_roce_qp *));
+		if (!ctx->qp_table[tind].table)
+			return -1;
+	}
+
+	++ctx->qp_table[tind].refcnt;
+	ctx->qp_table[tind].table[qpn & ctx->qp_table_mask] = qp;
+
+	return 0;
+}
+
+struct ibv_qp *hns_roce_u_create_qp(struct ibv_pd *pd,
+				    struct ibv_qp_init_attr *attr)
+{
+	int ret;
+	struct hns_roce_qp *qp = NULL;
+	struct hns_roce_create_qp cmd;
+	struct ibv_create_qp_resp resp;
+	struct hns_roce_context *context = to_hr_ctx(pd->context);
+
+	if (hns_roce_verify_qp(attr, context)) {
+		fprintf(stderr, "hns_roce_verify_sizes failed!\n");
+		return NULL;
+	}
+
+	qp = malloc(sizeof(*qp));
+	if (!qp) {
+		fprintf(stderr, "malloc failed!\n");
+		return NULL;
+	}
+
+	hns_roce_calc_sq_wqe_size(&attr->cap, attr->qp_type, qp);
+	qp->sq.wqe_cnt = align_qp_size(attr->cap.max_send_wr);
+	qp->rq.wqe_cnt = align_qp_size(attr->cap.max_recv_wr);
+
+	if (hns_roce_alloc_qp_buf(pd, &attr->cap, attr->qp_type, qp)) {
+		fprintf(stderr, "hns_roce_alloc_qp_buf failed!\n");
+		goto err;
+	}
+
+	hns_roce_init_qp_indices(qp);
+
+	if (pthread_spin_init(&qp->sq.lock, PTHREAD_PROCESS_PRIVATE) ||
+	    pthread_spin_init(&qp->rq.lock, PTHREAD_PROCESS_PRIVATE)) {
+		fprintf(stderr, "pthread_spin_init failed!\n");
+		goto err_free;
+	}
+
+	cmd.buf_addr = (uintptr_t) qp->buf.buf;
+	cmd.log_sq_stride = qp->sq.wqe_shift;
+	for (cmd.log_sq_bb_count = 0; qp->sq.wqe_cnt > 1 << cmd.log_sq_bb_count;
+	     ++cmd.log_sq_bb_count)
+		;
+
+	memset(cmd.reserved, 0, sizeof(cmd.reserved));
+
+	pthread_mutex_lock(&to_hr_ctx(pd->context)->qp_table_mutex);
+
+	ret = ibv_cmd_create_qp(pd, &qp->ibv_qp, attr, &cmd.ibv_cmd,
+				sizeof(cmd), &resp, sizeof(resp));
+	if (ret) {
+		fprintf(stderr, "ibv_cmd_create_qp failed!\n");
+		goto err_rq_db;
+	}
+
+	ret = hns_roce_store_qp(to_hr_ctx(pd->context), qp->ibv_qp.qp_num, qp);
+	if (ret) {
+		fprintf(stderr, "hns_roce_store_qp failed!\n");
+		goto err_destroy;
+	}
+	pthread_mutex_unlock(&to_hr_ctx(pd->context)->qp_table_mutex);
+
+	qp->rq.wqe_cnt = attr->cap.max_recv_wr;
+	qp->rq.max_gs	= attr->cap.max_recv_sge;
+
+	/* adjust rq maxima to not exceed reported device maxima */
+	attr->cap.max_recv_wr = min(context->max_qp_wr, attr->cap.max_recv_wr);
+	attr->cap.max_recv_sge = min(context->max_sge, attr->cap.max_recv_sge);
+
+	qp->rq.max_post = attr->cap.max_recv_wr;
+	hns_roce_set_sq_sizes(qp, &attr->cap, attr->qp_type);
+
+	qp->sq_signal_bits = attr->sq_sig_all ? 0 : 1;
+
+	return &qp->ibv_qp;
+
+err_destroy:
+	ibv_cmd_destroy_qp(&qp->ibv_qp);
+
+err_rq_db:
+	pthread_mutex_unlock(&to_hr_ctx(pd->context)->qp_table_mutex);
+
+err_free:
+	free(qp->sq.wrid);
+	if (qp->rq.wqe_cnt)
+		free(qp->rq.wrid);
+	hns_roce_free_buf(&qp->buf);
+
+err:
+	free(qp);
+
+	return NULL;
+}
+
+int hns_roce_u_query_qp(struct ibv_qp *ibqp, struct ibv_qp_attr *attr,
+			int attr_mask, struct ibv_qp_init_attr *init_attr)
+{
+	int ret;
+	struct ibv_query_qp cmd;
+	struct hns_roce_qp *qp = to_hr_qp(ibqp);
+
+	ret = ibv_cmd_query_qp(ibqp, attr, attr_mask, init_attr, &cmd,
+			       sizeof(cmd));
+	if (ret)
+		return ret;
+
+	init_attr->cap.max_send_wr = qp->sq.max_post;
+	init_attr->cap.max_send_sge = qp->sq.max_gs;
+	init_attr->cap.max_inline_data = qp->max_inline_data;
+
+	attr->cap = init_attr->cap;
+
+	return ret;
+}
-- 
1.9.1

--
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 v4 rdma-core 4/7] libhns: Add verbs of cq support
From: Lijun Ou @ 2016-11-11  4:57 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA
  Cc: linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <1478840250-92558-1-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

This patch mainly introduces the relatived cq verbs for userspace
of hns, include:
    1. create_cq
    2. poll_cq
    3. req_notify_cq
    4. cq_event
    5. destroy_cq

Signed-off-by: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
---
v4:
- Eliminate the warning by Travis CI testing

v3:
- No change over the v2

v2:
- Delete the unused code

v1:
- The initial submit
---
 providers/hns/hns_roce_u.c       |  57 +++++-
 providers/hns/hns_roce_u.h       |  94 ++++++++++
 providers/hns/hns_roce_u_abi.h   |  12 ++
 providers/hns/hns_roce_u_buf.c   |  61 +++++++
 providers/hns/hns_roce_u_db.h    |  54 ++++++
 providers/hns/hns_roce_u_hw_v1.c | 370 +++++++++++++++++++++++++++++++++++++++
 providers/hns/hns_roce_u_hw_v1.h | 163 +++++++++++++++++
 providers/hns/hns_roce_u_verbs.c | 116 ++++++++++++
 8 files changed, 922 insertions(+), 5 deletions(-)
 create mode 100644 providers/hns/hns_roce_u_buf.c
 create mode 100644 providers/hns/hns_roce_u_db.h
 create mode 100644 providers/hns/hns_roce_u_hw_v1.c
 create mode 100644 providers/hns/hns_roce_u_hw_v1.h

diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c
index 53e2720..1877218 100644
--- a/providers/hns/hns_roce_u.c
+++ b/providers/hns/hns_roce_u.c
@@ -46,15 +46,19 @@
 
 static const struct {
 	char	 hid[HID_LEN];
+	void	 *data;
+	int	 version;
 } acpi_table[] = {
-	{"acpi:HISI00D1:"},
-	{},
+	 {"acpi:HISI00D1:", &hns_roce_u_hw_v1, HNS_ROCE_HW_VER1},
+	 {},
 };
 
 static const struct {
 	char	 compatible[DEV_MATCH_LEN];
+	void	 *data;
+	int	 version;
 } dt_table[] = {
-	{"hisilicon,hns-roce-v1"},
+	{"hisilicon,hns-roce-v1", &hns_roce_u_hw_v1, HNS_ROCE_HW_VER1},
 	{},
 };
 
@@ -93,6 +97,21 @@ static struct ibv_context *hns_roce_alloc_context(struct ibv_device *ibdev,
 		goto err_free;
 	}
 
+	if (hr_dev->hw_version == HNS_ROCE_HW_VER1) {
+		/*
+		 * when vma->vm_pgoff is 1, the cq_tptr_base includes 64K CQ,
+		 * a pointer of CQ need 2B size
+		 */
+		context->cq_tptr_base = mmap(NULL, HNS_ROCE_CQ_DB_BUF_SIZE,
+					     PROT_READ | PROT_WRITE, MAP_SHARED,
+					     cmd_fd, HNS_ROCE_TPTR_OFFSET);
+		if (context->cq_tptr_base == MAP_FAILED) {
+			fprintf(stderr,
+				PFX "Warning: Failed to mmap cq_tptr page.\n");
+			goto db_free;
+		}
+	}
+
 	pthread_spin_init(&context->uar_lock, PTHREAD_PROCESS_PRIVATE);
 
 	context->ibv_ctx.ops.query_device  = hns_roce_u_query_device;
@@ -102,6 +121,12 @@ static struct ibv_context *hns_roce_alloc_context(struct ibv_device *ibdev,
 	context->ibv_ctx.ops.reg_mr	   = hns_roce_u_reg_mr;
 	context->ibv_ctx.ops.dereg_mr	   = hns_roce_u_dereg_mr;
 
+	context->ibv_ctx.ops.create_cq     = hns_roce_u_create_cq;
+	context->ibv_ctx.ops.poll_cq	   = hr_dev->u_hw->poll_cq;
+	context->ibv_ctx.ops.req_notify_cq = hr_dev->u_hw->arm_cq;
+	context->ibv_ctx.ops.cq_event	   = hns_roce_u_cq_event;
+	context->ibv_ctx.ops.destroy_cq    = hns_roce_u_destroy_cq;
+
 	if (hns_roce_u_query_device(&context->ibv_ctx, &dev_attrs))
 		goto tptr_free;
 
@@ -112,6 +137,16 @@ static struct ibv_context *hns_roce_alloc_context(struct ibv_device *ibdev,
 	return &context->ibv_ctx;
 
 tptr_free:
+	if (hr_dev->hw_version == HNS_ROCE_HW_VER1) {
+		if (munmap(context->cq_tptr_base, HNS_ROCE_CQ_DB_BUF_SIZE))
+			fprintf(stderr, PFX "Warning: Munmap tptr failed.\n");
+		context->cq_tptr_base = NULL;
+	}
+
+db_free:
+	munmap(context->uar, to_hr_dev(ibdev)->page_size);
+	context->uar = NULL;
+
 err_free:
 	free(context);
 	return NULL;
@@ -122,6 +157,8 @@ static void hns_roce_free_context(struct ibv_context *ibctx)
 	struct hns_roce_context *context = to_hr_ctx(ibctx);
 
 	munmap(context->uar, to_hr_dev(ibctx->device)->page_size);
+	if (to_hr_dev(ibctx->device)->hw_version == HNS_ROCE_HW_VER1)
+		munmap(context->cq_tptr_base, HNS_ROCE_CQ_DB_BUF_SIZE);
 
 	context->uar = NULL;
 
@@ -140,18 +177,26 @@ static struct ibv_device *hns_roce_driver_init(const char *uverbs_sys_path,
 	struct hns_roce_device  *dev;
 	char			 value[128];
 	int			 i;
+	void			 *u_hw;
+	int			 hw_version;
 
 	if (ibv_read_sysfs_file(uverbs_sys_path, "device/modalias",
 				value, sizeof(value)) > 0)
 		for (i = 0; i < sizeof(acpi_table) / sizeof(acpi_table[0]); ++i)
-			if (!strcmp(value, acpi_table[i].hid))
+			if (!strcmp(value, acpi_table[i].hid)) {
+				u_hw = acpi_table[i].data;
+				hw_version = acpi_table[i].version;
 				goto found;
+			}
 
 	if (ibv_read_sysfs_file(uverbs_sys_path, "device/of_node/compatible",
 				value, sizeof(value)) > 0)
 		for (i = 0; i < sizeof(dt_table) / sizeof(dt_table[0]); ++i)
-			if (!strcmp(value, dt_table[i].compatible))
+			if (!strcmp(value, dt_table[i].compatible)) {
+				u_hw = dt_table[i].data;
+				hw_version = dt_table[i].version;
 				goto found;
+			}
 
 	return NULL;
 
@@ -164,6 +209,8 @@ found:
 	}
 
 	dev->ibv_dev.ops = hns_roce_dev_ops;
+	dev->u_hw = (struct hns_roce_u_hw *)u_hw;
+	dev->hw_version = hw_version;
 	dev->page_size   = sysconf(_SC_PAGESIZE);
 	return &dev->ibv_dev;
 }
diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h
index 5b73794..c3e364d 100644
--- a/providers/hns/hns_roce_u.h
+++ b/providers/hns/hns_roce_u.h
@@ -40,18 +40,53 @@
 #include <infiniband/verbs.h>
 #include <ccan/container_of.h>
 
+#define HNS_ROCE_CQE_ENTRY_SIZE		0x20
+
+#define HNS_ROCE_MAX_CQ_NUM		0x10000
+#define HNS_ROCE_MIN_CQE_NUM		0x40
+#define HNS_ROCE_CQ_DB_BUF_SIZE		((HNS_ROCE_MAX_CQ_NUM >> 11) << 12)
+#define HNS_ROCE_TPTR_OFFSET		0x1000
 #define HNS_ROCE_HW_VER1		('h' << 24 | 'i' << 16 | '0' << 8 | '6')
 
 #define PFX				"hns: "
 
+#define roce_get_field(origin, mask, shift) \
+	(((origin) & (mask)) >> (shift))
+
+#define roce_get_bit(origin, shift) \
+	roce_get_field((origin), (1ul << (shift)), (shift))
+
+#define roce_set_field(origin, mask, shift, val) \
+	do { \
+		(origin) &= (~(mask)); \
+		(origin) |= (((unsigned int)(val) << (shift)) & (mask)); \
+	} while (0)
+
+#define roce_set_bit(origin, shift, val) \
+	roce_set_field((origin), (1ul << (shift)), (shift), (val))
+
 enum {
 	HNS_ROCE_QP_TABLE_BITS		= 8,
 	HNS_ROCE_QP_TABLE_SIZE		= 1 << HNS_ROCE_QP_TABLE_BITS,
 };
 
+/* operation type list */
+enum {
+	/* rq&srq operation */
+	HNS_ROCE_OPCODE_SEND_DATA_RECEIVE         = 0x06,
+	HNS_ROCE_OPCODE_RDMA_WITH_IMM_RECEIVE     = 0x07,
+};
+
 struct hns_roce_device {
 	struct ibv_device		ibv_dev;
 	int				page_size;
+	struct hns_roce_u_hw		*u_hw;
+	int				hw_version;
+};
+
+struct hns_roce_buf {
+	void				*buf;
+	unsigned int			length;
 };
 
 struct hns_roce_context {
@@ -59,7 +94,10 @@ struct hns_roce_context {
 	void				*uar;
 	pthread_spinlock_t		uar_lock;
 
+	void				*cq_tptr_base;
+
 	struct {
+		struct hns_roce_qp	**table;
 		int			refcnt;
 	} qp_table[HNS_ROCE_QP_TABLE_SIZE];
 
@@ -78,6 +116,44 @@ struct hns_roce_pd {
 	unsigned int			pdn;
 };
 
+struct hns_roce_cq {
+	struct ibv_cq			ibv_cq;
+	struct hns_roce_buf		buf;
+	pthread_spinlock_t		lock;
+	unsigned int			cqn;
+	unsigned int			cq_depth;
+	unsigned int			cons_index;
+	unsigned int			*set_ci_db;
+	unsigned int			*arm_db;
+	int				arm_sn;
+};
+
+struct hns_roce_wq {
+	unsigned long			*wrid;
+	unsigned int			wqe_cnt;
+	unsigned int			tail;
+	int				wqe_shift;
+	int				offset;
+};
+
+struct hns_roce_qp {
+	struct ibv_qp			ibv_qp;
+	struct hns_roce_buf		buf;
+	unsigned int			sq_signal_bits;
+	struct hns_roce_wq		sq;
+	struct hns_roce_wq		rq;
+};
+
+struct hns_roce_u_hw {
+	int (*poll_cq)(struct ibv_cq *ibvcq, int ne, struct ibv_wc *wc);
+	int (*arm_cq)(struct ibv_cq *ibvcq, int solicited);
+};
+
+static inline unsigned long align(unsigned long val, unsigned long align)
+{
+	return (val + align - 1) & ~(align - 1);
+}
+
 static inline struct hns_roce_device *to_hr_dev(struct ibv_device *ibv_dev)
 {
 	return container_of(ibv_dev, struct hns_roce_device, ibv_dev);
@@ -93,6 +169,11 @@ static inline struct hns_roce_pd *to_hr_pd(struct ibv_pd *ibv_pd)
 	return container_of(ibv_pd, struct hns_roce_pd, ibv_pd);
 }
 
+static inline struct hns_roce_cq *to_hr_cq(struct ibv_cq *ibv_cq)
+{
+	return container_of(ibv_cq, struct hns_roce_cq, ibv_cq);
+}
+
 int hns_roce_u_query_device(struct ibv_context *context,
 			    struct ibv_device_attr *attr);
 int hns_roce_u_query_port(struct ibv_context *context, uint8_t port,
@@ -105,4 +186,17 @@ struct ibv_mr *hns_roce_u_reg_mr(struct ibv_pd *pd, void *addr, size_t length,
 				 int access);
 int hns_roce_u_dereg_mr(struct ibv_mr *mr);
 
+struct ibv_cq *hns_roce_u_create_cq(struct ibv_context *context, int cqe,
+				    struct ibv_comp_channel *channel,
+				    int comp_vector);
+
+int hns_roce_u_destroy_cq(struct ibv_cq *cq);
+void hns_roce_u_cq_event(struct ibv_cq *cq);
+
+int hns_roce_alloc_buf(struct hns_roce_buf *buf, unsigned int size,
+		       int page_size);
+void hns_roce_free_buf(struct hns_roce_buf *buf);
+
+extern struct hns_roce_u_hw hns_roce_u_hw_v1;
+
 #endif /* _HNS_ROCE_U_H */
diff --git a/providers/hns/hns_roce_u_abi.h b/providers/hns/hns_roce_u_abi.h
index 0a0cd0c..1e62a7e 100644
--- a/providers/hns/hns_roce_u_abi.h
+++ b/providers/hns/hns_roce_u_abi.h
@@ -46,4 +46,16 @@ struct hns_roce_alloc_pd_resp {
 	__u32				reserved;
 };
 
+struct hns_roce_create_cq {
+	struct ibv_create_cq		ibv_cmd;
+	__u64				buf_addr;
+	__u64				db_addr;
+};
+
+struct hns_roce_create_cq_resp {
+	struct ibv_create_cq_resp	ibv_resp;
+	__u32				cqn;
+	__u32				reserved;
+};
+
 #endif /* _HNS_ROCE_U_ABI_H */
diff --git a/providers/hns/hns_roce_u_buf.c b/providers/hns/hns_roce_u_buf.c
new file mode 100644
index 0000000..f92ea65
--- /dev/null
+++ b/providers/hns/hns_roce_u_buf.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016 Hisilicon Limited.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <errno.h>
+#include <sys/mman.h>
+
+#include "hns_roce_u.h"
+
+int hns_roce_alloc_buf(struct hns_roce_buf *buf, unsigned int size,
+		       int page_size)
+{
+	int ret;
+
+	buf->length = align(size, page_size);
+	buf->buf = mmap(NULL, buf->length, PROT_READ | PROT_WRITE,
+			MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	if (buf->buf == MAP_FAILED)
+		return errno;
+
+	ret = ibv_dontfork_range(buf->buf, size);
+	if (ret)
+		munmap(buf->buf, buf->length);
+
+	return ret;
+}
+
+void hns_roce_free_buf(struct hns_roce_buf *buf)
+{
+	ibv_dofork_range(buf->buf, buf->length);
+
+	munmap(buf->buf, buf->length);
+}
diff --git a/providers/hns/hns_roce_u_db.h b/providers/hns/hns_roce_u_db.h
new file mode 100644
index 0000000..76d13ce
--- /dev/null
+++ b/providers/hns/hns_roce_u_db.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 Hisilicon Limited.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <linux/types.h>
+
+#include "hns_roce_u.h"
+
+#ifndef _HNS_ROCE_U_DB_H
+#define _HNS_ROCE_U_DB_H
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define HNS_ROCE_PAIR_TO_64(val) ((uint64_t) val[1] << 32 | val[0])
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define HNS_ROCE_PAIR_TO_64(val) ((uint64_t) val[0] << 32 | val[1])
+#else
+#error __BYTE_ORDER not defined
+#endif
+
+static inline void hns_roce_write64(uint32_t val[2],
+				    struct hns_roce_context *ctx, int offset)
+{
+	*(volatile uint64_t *) (ctx->uar + offset) = HNS_ROCE_PAIR_TO_64(val);
+}
+
+#endif /* _HNS_ROCE_U_DB_H */
diff --git a/providers/hns/hns_roce_u_hw_v1.c b/providers/hns/hns_roce_u_hw_v1.c
new file mode 100644
index 0000000..2676021
--- /dev/null
+++ b/providers/hns/hns_roce_u_hw_v1.c
@@ -0,0 +1,370 @@
+/*
+ * Copyright (c) 2016 Hisilicon Limited.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include "hns_roce_u_db.h"
+#include "hns_roce_u_hw_v1.h"
+#include "hns_roce_u.h"
+
+static void hns_roce_update_cq_cons_index(struct hns_roce_context *ctx,
+					  struct hns_roce_cq *cq)
+{
+	struct hns_roce_cq_db cq_db;
+
+	cq_db.u32_4 = 0;
+	cq_db.u32_8 = 0;
+
+	roce_set_bit(cq_db.u32_8, CQ_DB_U32_8_HW_SYNC_S, 1);
+	roce_set_field(cq_db.u32_8, CQ_DB_U32_8_CMD_M, CQ_DB_U32_8_CMD_S, 3);
+	roce_set_field(cq_db.u32_8, CQ_DB_U32_8_CMD_MDF_M,
+		       CQ_DB_U32_8_CMD_MDF_S, 0);
+	roce_set_field(cq_db.u32_8, CQ_DB_U32_8_CQN_M, CQ_DB_U32_8_CQN_S,
+		       cq->cqn);
+	roce_set_field(cq_db.u32_4, CQ_DB_U32_4_CONS_IDX_M,
+		       CQ_DB_U32_4_CONS_IDX_S,
+		       cq->cons_index & ((cq->cq_depth << 1) - 1));
+
+	hns_roce_write64((uint32_t *)&cq_db, ctx, ROCEE_DB_OTHERS_L_0_REG);
+}
+
+static void hns_roce_handle_error_cqe(struct hns_roce_cqe *cqe,
+				      struct ibv_wc *wc)
+{
+	switch (roce_get_field(cqe->cqe_byte_4,
+			       CQE_BYTE_4_STATUS_OF_THE_OPERATION_M,
+			       CQE_BYTE_4_STATUS_OF_THE_OPERATION_S) &
+		HNS_ROCE_CQE_STATUS_MASK) {
+		fprintf(stderr, PFX "error cqe!\n");
+	case HNS_ROCE_CQE_SYNDROME_LOCAL_LENGTH_ERR:
+		wc->status = IBV_WC_LOC_LEN_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_LOCAL_QP_OP_ERR:
+		wc->status = IBV_WC_LOC_QP_OP_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_LOCAL_PROT_ERR:
+		wc->status = IBV_WC_LOC_PROT_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_WR_FLUSH_ERR:
+		wc->status = IBV_WC_WR_FLUSH_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_MEM_MANAGE_OPERATE_ERR:
+		wc->status = IBV_WC_MW_BIND_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_BAD_RESP_ERR:
+		wc->status = IBV_WC_BAD_RESP_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_LOCAL_ACCESS_ERR:
+		wc->status = IBV_WC_LOC_ACCESS_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_REMOTE_INVAL_REQ_ERR:
+		wc->status = IBV_WC_REM_INV_REQ_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_REMOTE_ACCESS_ERR:
+		wc->status = IBV_WC_REM_ACCESS_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_REMOTE_OP_ERR:
+		wc->status = IBV_WC_REM_OP_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_TRANSPORT_RETRY_EXC_ERR:
+		wc->status = IBV_WC_RETRY_EXC_ERR;
+		break;
+	case HNS_ROCE_CQE_SYNDROME_RNR_RETRY_EXC_ERR:
+		wc->status = IBV_WC_RNR_RETRY_EXC_ERR;
+		break;
+	default:
+		wc->status = IBV_WC_GENERAL_ERR;
+		break;
+	}
+}
+
+static struct hns_roce_cqe *get_cqe(struct hns_roce_cq *cq, int entry)
+{
+	return cq->buf.buf + entry * HNS_ROCE_CQE_ENTRY_SIZE;
+}
+
+static void *get_sw_cqe(struct hns_roce_cq *cq, int n)
+{
+	struct hns_roce_cqe *cqe = get_cqe(cq, n & cq->ibv_cq.cqe);
+
+	return (!!(roce_get_bit(cqe->cqe_byte_4, CQE_BYTE_4_OWNER_S)) ^
+		!!(n & (cq->ibv_cq.cqe + 1))) ? cqe : NULL;
+}
+
+static struct hns_roce_cqe *next_cqe_sw(struct hns_roce_cq *cq)
+{
+	return get_sw_cqe(cq, cq->cons_index);
+}
+
+static void *get_send_wqe(struct hns_roce_qp *qp, int n)
+{
+	if ((n < 0) || (n > qp->sq.wqe_cnt)) {
+		printf("sq wqe index:%d,sq wqe cnt:%d\r\n", n, qp->sq.wqe_cnt);
+		return NULL;
+	}
+
+	return (void *)((uint64_t)(qp->buf.buf) + qp->sq.offset +
+				  (n << qp->sq.wqe_shift));
+}
+
+static struct hns_roce_qp *hns_roce_find_qp(struct hns_roce_context *ctx,
+					    uint32_t qpn)
+{
+	int tind = (qpn & (ctx->num_qps - 1)) >> ctx->qp_table_shift;
+
+	if (ctx->qp_table[tind].refcnt) {
+		return ctx->qp_table[tind].table[qpn & ctx->qp_table_mask];
+	} else {
+		printf("hns_roce_find_qp fail!\n");
+		return NULL;
+	}
+}
+
+static int hns_roce_v1_poll_one(struct hns_roce_cq *cq,
+				struct hns_roce_qp **cur_qp, struct ibv_wc *wc)
+{
+	uint32_t qpn;
+	int is_send;
+	uint16_t wqe_ctr;
+	uint32_t local_qpn;
+	struct hns_roce_wq *wq = NULL;
+	struct hns_roce_cqe *cqe = NULL;
+	struct hns_roce_wqe_ctrl_seg *sq_wqe = NULL;
+
+	/* According to CI, find the relative cqe */
+	cqe = next_cqe_sw(cq);
+	if (!cqe)
+		return CQ_EMPTY;
+
+	/* Get the next cqe, CI will be added gradually */
+	++cq->cons_index;
+
+	rmb();
+
+	qpn = roce_get_field(cqe->cqe_byte_16, CQE_BYTE_16_LOCAL_QPN_M,
+			     CQE_BYTE_16_LOCAL_QPN_S);
+
+	is_send = (roce_get_bit(cqe->cqe_byte_4, CQE_BYTE_4_SQ_RQ_FLAG_S) ==
+		   HNS_ROCE_CQE_IS_SQ);
+
+	local_qpn = roce_get_field(cqe->cqe_byte_16, CQE_BYTE_16_LOCAL_QPN_M,
+				   CQE_BYTE_16_LOCAL_QPN_S);
+
+	/* if qp is zero, it will not get the correct qpn */
+	if (!*cur_qp ||
+	    (local_qpn & HNS_ROCE_CQE_QPN_MASK) != (*cur_qp)->ibv_qp.qp_num) {
+
+		*cur_qp = hns_roce_find_qp(to_hr_ctx(cq->ibv_cq.context),
+					   qpn & 0xffffff);
+		if (!*cur_qp) {
+			fprintf(stderr, PFX "can't find qp!\n");
+			return CQ_POLL_ERR;
+		}
+	}
+	wc->qp_num = qpn & 0xffffff;
+
+	if (is_send) {
+		wq = &(*cur_qp)->sq;
+		/*
+		 * if sq_signal_bits is 1, the tail pointer first update to
+		 * the wqe corresponding the current cqe
+		 */
+		if ((*cur_qp)->sq_signal_bits) {
+			wqe_ctr = (uint16_t)(roce_get_field(cqe->cqe_byte_4,
+						CQE_BYTE_4_WQE_INDEX_M,
+						CQE_BYTE_4_WQE_INDEX_S));
+			/*
+			 * wq->tail will plus a positive number every time,
+			 * when wq->tail exceeds 32b, it is 0 and acc
+			 */
+			wq->tail += (wqe_ctr - (uint16_t) wq->tail) &
+				    (wq->wqe_cnt - 1);
+		}
+		/* write the wr_id of wq into the wc */
+		wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
+		++wq->tail;
+	} else {
+		wq = &(*cur_qp)->rq;
+		wc->wr_id = wq->wrid[wq->tail & (wq->wqe_cnt - 1)];
+		++wq->tail;
+	}
+
+	/*
+	 * HW maintains wc status, set the err type and directly return, after
+	 * generated the incorrect CQE
+	 */
+	if (roce_get_field(cqe->cqe_byte_4,
+	    CQE_BYTE_4_STATUS_OF_THE_OPERATION_M,
+	    CQE_BYTE_4_STATUS_OF_THE_OPERATION_S) != HNS_ROCE_CQE_SUCCESS) {
+		hns_roce_handle_error_cqe(cqe, wc);
+		return CQ_OK;
+	}
+	wc->status = IBV_WC_SUCCESS;
+
+	/*
+	 * According to the opcode type of cqe, mark the opcode and other
+	 * information of wc
+	 */
+	if (is_send) {
+		/* Get opcode and flag before update the tail point for send */
+		sq_wqe = (struct hns_roce_wqe_ctrl_seg *)
+			 (uint64_t)get_send_wqe(*cur_qp,
+						roce_get_field(cqe->cqe_byte_4,
+						CQE_BYTE_4_WQE_INDEX_M,
+						CQE_BYTE_4_WQE_INDEX_S));
+		switch (sq_wqe->flag & HNS_ROCE_WQE_OPCODE_MASK) {
+		case HNS_ROCE_WQE_OPCODE_SEND:
+			wc->opcode = IBV_WC_SEND;
+			break;
+		case HNS_ROCE_WQE_OPCODE_RDMA_READ:
+			wc->opcode = IBV_WC_RDMA_READ;
+			wc->byte_len = cqe->byte_cnt;
+			break;
+		case HNS_ROCE_WQE_OPCODE_RDMA_WRITE:
+			wc->opcode = IBV_WC_RDMA_WRITE;
+			break;
+		case HNS_ROCE_WQE_OPCODE_BIND_MW2:
+			wc->opcode = IBV_WC_BIND_MW;
+			break;
+		default:
+			wc->status = IBV_WC_GENERAL_ERR;
+			break;
+		}
+		wc->wc_flags = (sq_wqe->flag & HNS_ROCE_WQE_IMM ?
+				IBV_WC_WITH_IMM : 0);
+	} else {
+		/* Get opcode and flag in rq&srq */
+		wc->byte_len = (cqe->byte_cnt);
+
+		switch (roce_get_field(cqe->cqe_byte_4,
+				       CQE_BYTE_4_OPERATION_TYPE_M,
+				       CQE_BYTE_4_OPERATION_TYPE_S) &
+			HNS_ROCE_CQE_OPCODE_MASK) {
+		case HNS_ROCE_OPCODE_RDMA_WITH_IMM_RECEIVE:
+			wc->opcode   = IBV_WC_RECV_RDMA_WITH_IMM;
+			wc->wc_flags = IBV_WC_WITH_IMM;
+			wc->imm_data = cqe->immediate_data;
+			break;
+		case HNS_ROCE_OPCODE_SEND_DATA_RECEIVE:
+			if (roce_get_bit(cqe->cqe_byte_4,
+					 CQE_BYTE_4_IMMEDIATE_DATA_FLAG_S)) {
+				wc->opcode   = IBV_WC_RECV;
+				wc->wc_flags = IBV_WC_WITH_IMM;
+				wc->imm_data = cqe->immediate_data;
+			} else {
+				wc->opcode   = IBV_WC_RECV;
+				wc->wc_flags = 0;
+			}
+			break;
+		default:
+			wc->status = IBV_WC_GENERAL_ERR;
+			break;
+		}
+	}
+
+	return CQ_OK;
+}
+
+static int hns_roce_u_v1_poll_cq(struct ibv_cq *ibvcq, int ne,
+				 struct ibv_wc *wc)
+{
+	int npolled;
+	int err = CQ_OK;
+	struct hns_roce_qp *qp = NULL;
+	struct hns_roce_cq *cq = to_hr_cq(ibvcq);
+	struct hns_roce_context *ctx = to_hr_ctx(ibvcq->context);
+	struct hns_roce_device *dev = to_hr_dev(ibvcq->context->device);
+
+	pthread_spin_lock(&cq->lock);
+
+	for (npolled = 0; npolled < ne; ++npolled) {
+		err = hns_roce_v1_poll_one(cq, &qp, wc + npolled);
+		if (err != CQ_OK)
+			break;
+	}
+
+	if (npolled) {
+		if (dev->hw_version == HNS_ROCE_HW_VER1) {
+			*cq->set_ci_db = (unsigned short)(cq->cons_index &
+					 ((cq->cq_depth << 1) - 1));
+			mb();
+		}
+
+		hns_roce_update_cq_cons_index(ctx, cq);
+	}
+
+	pthread_spin_unlock(&cq->lock);
+
+	return err == CQ_POLL_ERR ? err : npolled;
+}
+
+/**
+ * hns_roce_u_v1_arm_cq - request completion notification on a CQ
+ * @ibvcq: The completion queue to request notification for.
+ * @solicited: If non-zero, a event will be generated only for
+ *	      the next solicited CQ entry. If zero, any CQ entry,
+ *	      solicited or not, will generate an event
+ */
+static int hns_roce_u_v1_arm_cq(struct ibv_cq *ibvcq, int solicited)
+{
+	uint32_t ci;
+	uint32_t solicited_flag;
+	struct hns_roce_cq_db cq_db;
+	struct hns_roce_cq *cq = to_hr_cq(ibvcq);
+
+	ci  = cq->cons_index & ((cq->cq_depth << 1) - 1);
+	solicited_flag = solicited ? HNS_ROCE_CQ_DB_REQ_SOL :
+				     HNS_ROCE_CQ_DB_REQ_NEXT;
+
+	cq_db.u32_4 = 0;
+	cq_db.u32_8 = 0;
+
+	roce_set_bit(cq_db.u32_8, CQ_DB_U32_8_HW_SYNC_S, 1);
+	roce_set_field(cq_db.u32_8, CQ_DB_U32_8_CMD_M, CQ_DB_U32_8_CMD_S, 3);
+	roce_set_field(cq_db.u32_8, CQ_DB_U32_8_CMD_MDF_M,
+		       CQ_DB_U32_8_CMD_MDF_S, 1);
+	roce_set_bit(cq_db.u32_8, CQ_DB_U32_8_NOTIFY_TYPE_S, solicited_flag);
+	roce_set_field(cq_db.u32_8, CQ_DB_U32_8_CQN_M, CQ_DB_U32_8_CQN_S,
+		       cq->cqn);
+	roce_set_field(cq_db.u32_4, CQ_DB_U32_4_CONS_IDX_M,
+		       CQ_DB_U32_4_CONS_IDX_S, ci);
+
+	hns_roce_write64((uint32_t *)&cq_db, to_hr_ctx(ibvcq->context),
+			  ROCEE_DB_OTHERS_L_0_REG);
+	return 0;
+}
+
+struct hns_roce_u_hw hns_roce_u_hw_v1 = {
+	.poll_cq = hns_roce_u_v1_poll_cq,
+	.arm_cq = hns_roce_u_v1_arm_cq,
+};
diff --git a/providers/hns/hns_roce_u_hw_v1.h b/providers/hns/hns_roce_u_hw_v1.h
new file mode 100644
index 0000000..b249f54
--- /dev/null
+++ b/providers/hns/hns_roce_u_hw_v1.h
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2016 Hisilicon Limited.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _HNS_ROCE_U_HW_V1_H
+#define _HNS_ROCE_U_HW_V1_H
+
+#define HNS_ROCE_CQ_DB_REQ_SOL			1
+#define HNS_ROCE_CQ_DB_REQ_NEXT			0
+
+#define HNS_ROCE_CQE_IS_SQ			0
+
+#define HNS_ROCE_RC_WQE_INLINE_DATA_MAX_LEN	32
+
+enum {
+	HNS_ROCE_WQE_IMM		= 1 << 23,
+	HNS_ROCE_WQE_OPCODE_SEND        = 0 << 16,
+	HNS_ROCE_WQE_OPCODE_RDMA_READ   = 1 << 16,
+	HNS_ROCE_WQE_OPCODE_RDMA_WRITE  = 2 << 16,
+	HNS_ROCE_WQE_OPCODE_BIND_MW2    = 6 << 16,
+	HNS_ROCE_WQE_OPCODE_MASK        = 15 << 16,
+};
+
+struct hns_roce_wqe_ctrl_seg {
+	__be32		sgl_pa_h;
+	__be32		flag;
+};
+
+enum {
+	CQ_OK				=  0,
+	CQ_EMPTY			= -1,
+	CQ_POLL_ERR			= -2,
+};
+
+enum {
+	HNS_ROCE_CQE_QPN_MASK		= 0x3ffff,
+	HNS_ROCE_CQE_STATUS_MASK	= 0x1f,
+	HNS_ROCE_CQE_OPCODE_MASK	= 0xf,
+};
+
+enum {
+	HNS_ROCE_CQE_SUCCESS,
+	HNS_ROCE_CQE_SYNDROME_LOCAL_LENGTH_ERR,
+	HNS_ROCE_CQE_SYNDROME_LOCAL_QP_OP_ERR,
+	HNS_ROCE_CQE_SYNDROME_LOCAL_PROT_ERR,
+	HNS_ROCE_CQE_SYNDROME_WR_FLUSH_ERR,
+	HNS_ROCE_CQE_SYNDROME_MEM_MANAGE_OPERATE_ERR,
+	HNS_ROCE_CQE_SYNDROME_BAD_RESP_ERR,
+	HNS_ROCE_CQE_SYNDROME_LOCAL_ACCESS_ERR,
+	HNS_ROCE_CQE_SYNDROME_REMOTE_INVAL_REQ_ERR,
+	HNS_ROCE_CQE_SYNDROME_REMOTE_ACCESS_ERR,
+	HNS_ROCE_CQE_SYNDROME_REMOTE_OP_ERR,
+	HNS_ROCE_CQE_SYNDROME_TRANSPORT_RETRY_EXC_ERR,
+	HNS_ROCE_CQE_SYNDROME_RNR_RETRY_EXC_ERR,
+};
+
+struct hns_roce_cq_db {
+	unsigned int u32_4;
+	unsigned int u32_8;
+};
+#define CQ_DB_U32_4_CONS_IDX_S 0
+#define CQ_DB_U32_4_CONS_IDX_M   (((1UL << 16) - 1) << CQ_DB_U32_4_CONS_IDX_S)
+
+#define CQ_DB_U32_8_CQN_S 0
+#define CQ_DB_U32_8_CQN_M   (((1UL << 16) - 1) << CQ_DB_U32_8_CQN_S)
+
+#define CQ_DB_U32_8_NOTIFY_TYPE_S 16
+
+#define CQ_DB_U32_8_CMD_MDF_S 24
+#define CQ_DB_U32_8_CMD_MDF_M   (((1UL << 4) - 1) << CQ_DB_U32_8_CMD_MDF_S)
+
+#define CQ_DB_U32_8_CMD_S 28
+#define CQ_DB_U32_8_CMD_M   (((1UL << 3) - 1) << CQ_DB_U32_8_CMD_S)
+
+#define CQ_DB_U32_8_HW_SYNC_S 31
+
+struct hns_roce_cqe {
+	unsigned int cqe_byte_4;
+	union {
+		unsigned int r_key;
+		unsigned int immediate_data;
+	};
+	unsigned int byte_cnt;
+	unsigned int cqe_byte_16;
+	unsigned int cqe_byte_20;
+	unsigned int s_mac_l;
+	unsigned int cqe_byte_28;
+	unsigned int reserved;
+};
+#define CQE_BYTE_4_OPERATION_TYPE_S 0
+#define CQE_BYTE_4_OPERATION_TYPE_M   \
+	(((1UL << 4) - 1) << CQE_BYTE_4_OPERATION_TYPE_S)
+
+#define CQE_BYTE_4_OWNER_S 7
+
+#define CQE_BYTE_4_STATUS_OF_THE_OPERATION_S 8
+#define CQE_BYTE_4_STATUS_OF_THE_OPERATION_M   \
+	(((1UL << 5) - 1) << CQE_BYTE_4_STATUS_OF_THE_OPERATION_S)
+
+#define CQE_BYTE_4_SQ_RQ_FLAG_S 14
+
+#define CQE_BYTE_4_IMMEDIATE_DATA_FLAG_S 15
+
+#define CQE_BYTE_4_WQE_INDEX_S 16
+#define CQE_BYTE_4_WQE_INDEX_M	(((1UL << 14) - 1) << CQE_BYTE_4_WQE_INDEX_S)
+
+#define CQE_BYTE_16_LOCAL_QPN_S 0
+#define CQE_BYTE_16_LOCAL_QPN_M	(((1UL << 24) - 1) << CQE_BYTE_16_LOCAL_QPN_S)
+
+#define ROCEE_DB_SQ_L_0_REG				0x230
+
+#define ROCEE_DB_OTHERS_L_0_REG				0x238
+
+struct hns_roce_rc_send_wqe {
+	unsigned int sgl_ba_31_0;
+	unsigned int u32_1;
+	union {
+		unsigned int r_key;
+		unsigned int immediate_data;
+	};
+	unsigned int msg_length;
+	unsigned int rvd_3;
+	unsigned int rvd_4;
+	unsigned int rvd_5;
+	unsigned int rvd_6;
+	uint64_t     va0;
+	unsigned int l_key0;
+	unsigned int length0;
+
+	uint64_t     va1;
+	unsigned int l_key1;
+	unsigned int length1;
+};
+
+#endif /* _HNS_ROCE_U_HW_V1_H */
diff --git a/providers/hns/hns_roce_u_verbs.c b/providers/hns/hns_roce_u_verbs.c
index 476b6ba..61f48f1 100644
--- a/providers/hns/hns_roce_u_verbs.c
+++ b/providers/hns/hns_roce_u_verbs.c
@@ -40,6 +40,8 @@
 #include <unistd.h>
 
 #include "hns_roce_u.h"
+#include "hns_roce_u_abi.h"
+#include "hns_roce_u_hw_v1.h"
 
 int hns_roce_u_query_device(struct ibv_context *context,
 			    struct ibv_device_attr *attr)
@@ -150,3 +152,117 @@ int hns_roce_u_dereg_mr(struct ibv_mr *mr)
 
 	return ret;
 }
+
+static int align_cq_size(int req)
+{
+	int nent;
+
+	for (nent = HNS_ROCE_MIN_CQE_NUM; nent < req; nent <<= 1)
+		;
+
+	return nent;
+}
+
+static int hns_roce_verify_cq(int *cqe, struct hns_roce_context *context)
+{
+	if (*cqe < HNS_ROCE_MIN_CQE_NUM) {
+		fprintf(stderr, "cqe = %d, less than minimum CQE number.\n",
+			*cqe);
+		*cqe = HNS_ROCE_MIN_CQE_NUM;
+	}
+
+	if (*cqe > context->max_cqe)
+		return -1;
+
+	return 0;
+}
+
+static int hns_roce_alloc_cq_buf(struct hns_roce_device *dev,
+				 struct hns_roce_buf *buf, int nent)
+{
+	if (hns_roce_alloc_buf(buf,
+			align(nent * HNS_ROCE_CQE_ENTRY_SIZE, dev->page_size),
+			dev->page_size))
+		return -1;
+	memset(buf->buf, 0, nent * HNS_ROCE_CQE_ENTRY_SIZE);
+
+	return 0;
+}
+
+struct ibv_cq *hns_roce_u_create_cq(struct ibv_context *context, int cqe,
+				    struct ibv_comp_channel *channel,
+				    int comp_vector)
+{
+	struct hns_roce_create_cq	cmd;
+	struct hns_roce_create_cq_resp	resp;
+	struct hns_roce_cq		*cq;
+	int				ret;
+
+	if (hns_roce_verify_cq(&cqe, to_hr_ctx(context)))
+		return NULL;
+
+	cq = malloc(sizeof(*cq));
+	if (!cq)
+		return NULL;
+
+	cq->cons_index = 0;
+
+	if (pthread_spin_init(&cq->lock, PTHREAD_PROCESS_PRIVATE))
+		goto err;
+
+	cqe = align_cq_size(cqe);
+
+	if (hns_roce_alloc_cq_buf(to_hr_dev(context->device), &cq->buf, cqe))
+		goto err;
+
+	cmd.buf_addr = (uintptr_t) cq->buf.buf;
+
+	ret = ibv_cmd_create_cq(context, cqe, channel, comp_vector,
+				&cq->ibv_cq, &cmd.ibv_cmd, sizeof(cmd),
+				&resp.ibv_resp, sizeof(resp));
+	if (ret)
+		goto err_db;
+
+	cq->cqn = resp.cqn;
+	cq->cq_depth = cqe;
+
+	if (to_hr_dev(context->device)->hw_version == HNS_ROCE_HW_VER1)
+		cq->set_ci_db = to_hr_ctx(context)->cq_tptr_base + cq->cqn * 2;
+	else
+		cq->set_ci_db = to_hr_ctx(context)->uar +
+				ROCEE_DB_OTHERS_L_0_REG;
+
+	cq->arm_db    = cq->set_ci_db;
+	cq->arm_sn    = 1;
+	*(cq->set_ci_db) = 0;
+	*(cq->arm_db) = 0;
+
+	return &cq->ibv_cq;
+
+err_db:
+	hns_roce_free_buf(&cq->buf);
+
+err:
+	free(cq);
+
+	return NULL;
+}
+
+void hns_roce_u_cq_event(struct ibv_cq *cq)
+{
+	to_hr_cq(cq)->arm_sn++;
+}
+
+int hns_roce_u_destroy_cq(struct ibv_cq *cq)
+{
+	int ret;
+
+	ret = ibv_cmd_destroy_cq(cq);
+	if (ret)
+		return ret;
+
+	hns_roce_free_buf(&to_hr_cq(cq)->buf);
+	free(to_hr_cq(cq));
+
+	return ret;
+}
-- 
1.9.1

--
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 v4 rdma-core 3/7] libhns: Add verbs of pd and mr support
From: Lijun Ou @ 2016-11-11  4:57 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA
  Cc: linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <1478840250-92558-1-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

This patch mainly introduces the verbs with pd and mr,
included alloc_pd, dealloc_pd, reg_mr and dereg_mr.

Signed-off-by: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
---
v4:
- No change over v3

v3:
This fixes the comments given by Leon Romanovsky on PATCHv2

v2:
- No change over v1

v1:
- The initial submit
---
 providers/hns/hns_roce_u.c       |  4 ++
 providers/hns/hns_roce_u.h       | 18 +++++++++
 providers/hns/hns_roce_u_abi.h   |  6 +++
 providers/hns/hns_roce_u_verbs.c | 79 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 107 insertions(+)

diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c
index c0f6fe9..53e2720 100644
--- a/providers/hns/hns_roce_u.c
+++ b/providers/hns/hns_roce_u.c
@@ -97,6 +97,10 @@ static struct ibv_context *hns_roce_alloc_context(struct ibv_device *ibdev,
 
 	context->ibv_ctx.ops.query_device  = hns_roce_u_query_device;
 	context->ibv_ctx.ops.query_port    = hns_roce_u_query_port;
+	context->ibv_ctx.ops.alloc_pd	   = hns_roce_u_alloc_pd;
+	context->ibv_ctx.ops.dealloc_pd    = hns_roce_u_free_pd;
+	context->ibv_ctx.ops.reg_mr	   = hns_roce_u_reg_mr;
+	context->ibv_ctx.ops.dereg_mr	   = hns_roce_u_dereg_mr;
 
 	if (hns_roce_u_query_device(&context->ibv_ctx, &dev_attrs))
 		goto tptr_free;
diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h
index aa58ee6..5b73794 100644
--- a/providers/hns/hns_roce_u.h
+++ b/providers/hns/hns_roce_u.h
@@ -73,6 +73,11 @@ struct hns_roce_context {
 	int				max_cqe;
 };
 
+struct hns_roce_pd {
+	struct ibv_pd			ibv_pd;
+	unsigned int			pdn;
+};
+
 static inline struct hns_roce_device *to_hr_dev(struct ibv_device *ibv_dev)
 {
 	return container_of(ibv_dev, struct hns_roce_device, ibv_dev);
@@ -83,8 +88,21 @@ static inline struct hns_roce_context *to_hr_ctx(struct ibv_context *ibv_ctx)
 	return container_of(ibv_ctx, struct hns_roce_context, ibv_ctx);
 }
 
+static inline struct hns_roce_pd *to_hr_pd(struct ibv_pd *ibv_pd)
+{
+	return container_of(ibv_pd, struct hns_roce_pd, ibv_pd);
+}
+
 int hns_roce_u_query_device(struct ibv_context *context,
 			    struct ibv_device_attr *attr);
 int hns_roce_u_query_port(struct ibv_context *context, uint8_t port,
 			  struct ibv_port_attr *attr);
+
+struct ibv_pd *hns_roce_u_alloc_pd(struct ibv_context *context);
+int hns_roce_u_free_pd(struct ibv_pd *pd);
+
+struct ibv_mr *hns_roce_u_reg_mr(struct ibv_pd *pd, void *addr, size_t length,
+				 int access);
+int hns_roce_u_dereg_mr(struct ibv_mr *mr);
+
 #endif /* _HNS_ROCE_U_H */
diff --git a/providers/hns/hns_roce_u_abi.h b/providers/hns/hns_roce_u_abi.h
index 4bfc8fa..0a0cd0c 100644
--- a/providers/hns/hns_roce_u_abi.h
+++ b/providers/hns/hns_roce_u_abi.h
@@ -40,4 +40,10 @@ struct hns_roce_alloc_ucontext_resp {
 	__u32				qp_tab_size;
 };
 
+struct hns_roce_alloc_pd_resp {
+	struct ibv_alloc_pd_resp	ibv_resp;
+	__u32				pdn;
+	__u32				reserved;
+};
+
 #endif /* _HNS_ROCE_U_ABI_H */
diff --git a/providers/hns/hns_roce_u_verbs.c b/providers/hns/hns_roce_u_verbs.c
index be55fe8..476b6ba 100644
--- a/providers/hns/hns_roce_u_verbs.c
+++ b/providers/hns/hns_roce_u_verbs.c
@@ -71,3 +71,82 @@ int hns_roce_u_query_port(struct ibv_context *context, uint8_t port,
 
 	return ibv_cmd_query_port(context, port, attr, &cmd, sizeof(cmd));
 }
+
+struct ibv_pd *hns_roce_u_alloc_pd(struct ibv_context *context)
+{
+	struct ibv_alloc_pd cmd;
+	struct hns_roce_pd *pd;
+	struct hns_roce_alloc_pd_resp resp;
+
+	pd = (struct hns_roce_pd *)malloc(sizeof(*pd));
+	if (!pd)
+		return NULL;
+
+	if (ibv_cmd_alloc_pd(context, &pd->ibv_pd, &cmd, sizeof(cmd),
+			     &resp.ibv_resp, sizeof(resp))) {
+		free(pd);
+		return NULL;
+	}
+
+	pd->pdn = resp.pdn;
+
+	return &pd->ibv_pd;
+}
+
+int hns_roce_u_free_pd(struct ibv_pd *pd)
+{
+	int ret;
+
+	ret = ibv_cmd_dealloc_pd(pd);
+	if (ret)
+		return ret;
+
+	free(to_hr_pd(pd));
+
+	return ret;
+}
+
+struct ibv_mr *hns_roce_u_reg_mr(struct ibv_pd *pd, void *addr, size_t length,
+				 int access)
+{
+	int ret;
+	struct ibv_mr *mr;
+	struct ibv_reg_mr cmd;
+	struct ibv_reg_mr_resp resp;
+
+	if (!addr) {
+		fprintf(stderr, "2nd parm addr is NULL!\n");
+		return NULL;
+	}
+
+	if (!length) {
+		fprintf(stderr, "3st parm length is 0!\n");
+		return NULL;
+	}
+
+	mr = malloc(sizeof(*mr));
+	if (!mr)
+		return NULL;
+
+	ret = ibv_cmd_reg_mr(pd, addr, length, (uintptr_t) addr, access, mr,
+			     &cmd, sizeof(cmd), &resp, sizeof(resp));
+	if (ret) {
+		free(mr);
+		return NULL;
+	}
+
+	return mr;
+}
+
+int hns_roce_u_dereg_mr(struct ibv_mr *mr)
+{
+	int ret;
+
+	ret = ibv_cmd_dereg_mr(mr);
+	if (ret)
+		return ret;
+
+	free(mr);
+
+	return ret;
+}
-- 
1.9.1

--
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 v4 rdma-core 2/7] libhns: Add verbs of querying device and querying port
From: Lijun Ou @ 2016-11-11  4:57 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA
  Cc: linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <1478840250-92558-1-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

This patch mainly introduces query verbs for querying device
and querying port.

Signed-off-by: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
---
v4/v3/v2:
- No change over the v1

v1:
- The initial submit
---
 providers/hns/hns_roce_u.c       |  7 ++++
 providers/hns/hns_roce_u.h       |  4 +++
 providers/hns/hns_roce_u_verbs.c | 73 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 84 insertions(+)
 create mode 100644 providers/hns/hns_roce_u_verbs.c

diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c
index bda4dd8..c0f6fe9 100644
--- a/providers/hns/hns_roce_u.c
+++ b/providers/hns/hns_roce_u.c
@@ -95,12 +95,19 @@ static struct ibv_context *hns_roce_alloc_context(struct ibv_device *ibdev,
 
 	pthread_spin_init(&context->uar_lock, PTHREAD_PROCESS_PRIVATE);
 
+	context->ibv_ctx.ops.query_device  = hns_roce_u_query_device;
+	context->ibv_ctx.ops.query_port    = hns_roce_u_query_port;
+
+	if (hns_roce_u_query_device(&context->ibv_ctx, &dev_attrs))
+		goto tptr_free;
+
 	context->max_qp_wr = dev_attrs.max_qp_wr;
 	context->max_sge = dev_attrs.max_sge;
 	context->max_cqe = dev_attrs.max_cqe;
 
 	return &context->ibv_ctx;
 
+tptr_free:
 err_free:
 	free(context);
 	return NULL;
diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h
index 3eef171..aa58ee6 100644
--- a/providers/hns/hns_roce_u.h
+++ b/providers/hns/hns_roce_u.h
@@ -83,4 +83,8 @@ static inline struct hns_roce_context *to_hr_ctx(struct ibv_context *ibv_ctx)
 	return container_of(ibv_ctx, struct hns_roce_context, ibv_ctx);
 }
 
+int hns_roce_u_query_device(struct ibv_context *context,
+			    struct ibv_device_attr *attr);
+int hns_roce_u_query_port(struct ibv_context *context, uint8_t port,
+			  struct ibv_port_attr *attr);
 #endif /* _HNS_ROCE_U_H */
diff --git a/providers/hns/hns_roce_u_verbs.c b/providers/hns/hns_roce_u_verbs.c
new file mode 100644
index 0000000..be55fe8
--- /dev/null
+++ b/providers/hns/hns_roce_u_verbs.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2016 Hisilicon Limited.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <pthread.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "hns_roce_u.h"
+
+int hns_roce_u_query_device(struct ibv_context *context,
+			    struct ibv_device_attr *attr)
+{
+	int ret;
+	struct ibv_query_device cmd;
+	unsigned long raw_fw_ver;
+	unsigned int major, minor, sub_minor;
+
+	ret = ibv_cmd_query_device(context, attr, &raw_fw_ver, &cmd,
+				   sizeof(cmd));
+	if (ret)
+		return ret;
+
+	major	   = (raw_fw_ver >> 32) & 0xffff;
+	minor	   = (raw_fw_ver >> 16) & 0xffff;
+	sub_minor = raw_fw_ver & 0xffff;
+
+	snprintf(attr->fw_ver, sizeof(attr->fw_ver), "%d.%d.%03d", major, minor,
+		 sub_minor);
+
+	return 0;
+}
+
+int hns_roce_u_query_port(struct ibv_context *context, uint8_t port,
+			  struct ibv_port_attr *attr)
+{
+	struct ibv_query_port cmd;
+
+	return ibv_cmd_query_port(context, port, attr, &cmd, sizeof(cmd));
+}
-- 
1.9.1

--
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 v4 rdma-core 1/7] libhns: Add initial main frame
From: Lijun Ou @ 2016-11-11  4:57 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA
  Cc: linuxarm-hv44wF8Li93QT0dZR+AlfA
In-Reply-To: <1478840250-92558-1-git-send-email-oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

This patch mainly introduces initial main frame for
userspace library of hns.

Signed-off-by: Lijun Ou <oulijun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Signed-off-by: Wei Hu <xavier.huwei-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
---
v4/v3/v2:
- No change over the v1

v1:
- The initial submit
---
 providers/hns/hns_roce_u.c     | 163 +++++++++++++++++++++++++++++++++++++++++
 providers/hns/hns_roce_u.h     |  86 ++++++++++++++++++++++
 providers/hns/hns_roce_u_abi.h |  43 +++++++++++
 3 files changed, 292 insertions(+)
 create mode 100644 providers/hns/hns_roce_u.c
 create mode 100644 providers/hns/hns_roce_u.h
 create mode 100644 providers/hns/hns_roce_u_abi.h

diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c
new file mode 100644
index 0000000..bda4dd8
--- /dev/null
+++ b/providers/hns/hns_roce_u.c
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2016 Hisilicon Limited.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "hns_roce_u.h"
+#include "hns_roce_u_abi.h"
+
+#define HID_LEN			15
+#define DEV_MATCH_LEN		128
+
+static const struct {
+	char	 hid[HID_LEN];
+} acpi_table[] = {
+	{"acpi:HISI00D1:"},
+	{},
+};
+
+static const struct {
+	char	 compatible[DEV_MATCH_LEN];
+} dt_table[] = {
+	{"hisilicon,hns-roce-v1"},
+	{},
+};
+
+static struct ibv_context *hns_roce_alloc_context(struct ibv_device *ibdev,
+						  int cmd_fd)
+{
+	int i;
+	struct ibv_get_context cmd;
+	struct ibv_device_attr dev_attrs;
+	struct hns_roce_context *context;
+	struct hns_roce_alloc_ucontext_resp resp;
+	struct hns_roce_device *hr_dev = to_hr_dev(ibdev);
+
+	context = calloc(1, sizeof(*context));
+	if (!context)
+		return NULL;
+
+	context->ibv_ctx.cmd_fd = cmd_fd;
+	if (ibv_cmd_get_context(&context->ibv_ctx, &cmd, sizeof(cmd),
+				&resp.ibv_resp, sizeof(resp)))
+		goto err_free;
+
+	context->num_qps = resp.qp_tab_size;
+	context->qp_table_shift = ffs(context->num_qps) - 1 -
+				  HNS_ROCE_QP_TABLE_BITS;
+	context->qp_table_mask = (1 << context->qp_table_shift) - 1;
+
+	pthread_mutex_init(&context->qp_table_mutex, NULL);
+	for (i = 0; i < HNS_ROCE_QP_TABLE_SIZE; ++i)
+		context->qp_table[i].refcnt = 0;
+
+	context->uar = mmap(NULL, to_hr_dev(ibdev)->page_size,
+			    PROT_READ | PROT_WRITE, MAP_SHARED, cmd_fd, 0);
+	if (context->uar == MAP_FAILED) {
+		fprintf(stderr, PFX "Warning: failed to mmap() uar page.\n");
+		goto err_free;
+	}
+
+	pthread_spin_init(&context->uar_lock, PTHREAD_PROCESS_PRIVATE);
+
+	context->max_qp_wr = dev_attrs.max_qp_wr;
+	context->max_sge = dev_attrs.max_sge;
+	context->max_cqe = dev_attrs.max_cqe;
+
+	return &context->ibv_ctx;
+
+err_free:
+	free(context);
+	return NULL;
+}
+
+static void hns_roce_free_context(struct ibv_context *ibctx)
+{
+	struct hns_roce_context *context = to_hr_ctx(ibctx);
+
+	munmap(context->uar, to_hr_dev(ibctx->device)->page_size);
+
+	context->uar = NULL;
+
+	free(context);
+	context = NULL;
+}
+
+static struct ibv_device_ops hns_roce_dev_ops = {
+	.alloc_context = hns_roce_alloc_context,
+	.free_context	= hns_roce_free_context
+};
+
+static struct ibv_device *hns_roce_driver_init(const char *uverbs_sys_path,
+					       int abi_version)
+{
+	struct hns_roce_device  *dev;
+	char			 value[128];
+	int			 i;
+
+	if (ibv_read_sysfs_file(uverbs_sys_path, "device/modalias",
+				value, sizeof(value)) > 0)
+		for (i = 0; i < sizeof(acpi_table) / sizeof(acpi_table[0]); ++i)
+			if (!strcmp(value, acpi_table[i].hid))
+				goto found;
+
+	if (ibv_read_sysfs_file(uverbs_sys_path, "device/of_node/compatible",
+				value, sizeof(value)) > 0)
+		for (i = 0; i < sizeof(dt_table) / sizeof(dt_table[0]); ++i)
+			if (!strcmp(value, dt_table[i].compatible))
+				goto found;
+
+	return NULL;
+
+found:
+	dev = malloc(sizeof(struct hns_roce_device));
+	if (!dev) {
+		fprintf(stderr, PFX "Fatal: couldn't allocate device for %s\n",
+			uverbs_sys_path);
+		return NULL;
+	}
+
+	dev->ibv_dev.ops = hns_roce_dev_ops;
+	dev->page_size   = sysconf(_SC_PAGESIZE);
+	return &dev->ibv_dev;
+}
+
+static __attribute__((constructor)) void hns_roce_register_driver(void)
+{
+	ibv_register_driver("hns", hns_roce_driver_init);
+}
diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h
new file mode 100644
index 0000000..3eef171
--- /dev/null
+++ b/providers/hns/hns_roce_u.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2016 Hisilicon Limited.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _HNS_ROCE_U_H
+#define _HNS_ROCE_U_H
+
+#include <stddef.h>
+
+#include <infiniband/driver.h>
+#include <infiniband/arch.h>
+#include <infiniband/verbs.h>
+#include <ccan/container_of.h>
+
+#define HNS_ROCE_HW_VER1		('h' << 24 | 'i' << 16 | '0' << 8 | '6')
+
+#define PFX				"hns: "
+
+enum {
+	HNS_ROCE_QP_TABLE_BITS		= 8,
+	HNS_ROCE_QP_TABLE_SIZE		= 1 << HNS_ROCE_QP_TABLE_BITS,
+};
+
+struct hns_roce_device {
+	struct ibv_device		ibv_dev;
+	int				page_size;
+};
+
+struct hns_roce_context {
+	struct ibv_context		ibv_ctx;
+	void				*uar;
+	pthread_spinlock_t		uar_lock;
+
+	struct {
+		int			refcnt;
+	} qp_table[HNS_ROCE_QP_TABLE_SIZE];
+
+	pthread_mutex_t			qp_table_mutex;
+
+	int				num_qps;
+	int				qp_table_shift;
+	int				qp_table_mask;
+	unsigned int			max_qp_wr;
+	unsigned int			max_sge;
+	int				max_cqe;
+};
+
+static inline struct hns_roce_device *to_hr_dev(struct ibv_device *ibv_dev)
+{
+	return container_of(ibv_dev, struct hns_roce_device, ibv_dev);
+}
+
+static inline struct hns_roce_context *to_hr_ctx(struct ibv_context *ibv_ctx)
+{
+	return container_of(ibv_ctx, struct hns_roce_context, ibv_ctx);
+}
+
+#endif /* _HNS_ROCE_U_H */
diff --git a/providers/hns/hns_roce_u_abi.h b/providers/hns/hns_roce_u_abi.h
new file mode 100644
index 0000000..4bfc8fa
--- /dev/null
+++ b/providers/hns/hns_roce_u_abi.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2016 Hisilicon Limited.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _HNS_ROCE_U_ABI_H
+#define _HNS_ROCE_U_ABI_H
+
+#include <infiniband/kern-abi.h>
+
+struct hns_roce_alloc_ucontext_resp {
+	struct ibv_get_context_resp	ibv_resp;
+	__u32				qp_tab_size;
+};
+
+#endif /* _HNS_ROCE_U_ABI_H */
-- 
1.9.1

--
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 v4 rdma-core 0/7] libhns: userspace library for hns
From: Lijun Ou @ 2016-11-11  4:57 UTC (permalink / raw)
  To: dledford-H+wXaHxf7aLQT0dZR+AlfA,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA
  Cc: linuxarm-hv44wF8Li93QT0dZR+AlfA

This patch series introduces userspace library for hns RoCE driver.

changes v3 -> v4:
1. eliminate the warning by Travis CI testing

changes v2 -> v3:
1. Fix the code style, for example, if (addr == NULL)
2. Fix the bug for hns_roce_u_reg_mr

changes v1 -> v2:
1. Delete the min() definition and instead of ccan header
2. Delete the CHECK_C_SOURCE_COMPILES
3. sort the c file in rdma_provider()
4. Delete the unused code in hns_roce_u_db.h

Lijun Ou (7):
  libhns: Add initial main frame
  libhns: Add verbs of querying device and querying port
  libhns: Add verbs of pd and mr support
  libhns: Add verbs of cq support
  libhns: Add verbs of qp support
  libhns: Add verbs of post_send and post_recv support
  libhns: Add consolidated repo for userspace library of hns

 CMakeLists.txt                   |   1 +
 MAINTAINERS                      |   6 +
 README.md                        |   1 +
 providers/hns/CMakeLists.txt     |   6 +
 providers/hns/hns_roce_u.c       | 228 +++++++++++
 providers/hns/hns_roce_u.h       | 255 ++++++++++++
 providers/hns/hns_roce_u_abi.h   |  69 ++++
 providers/hns/hns_roce_u_buf.c   |  61 +++
 providers/hns/hns_roce_u_db.h    |  54 +++
 providers/hns/hns_roce_u_hw_v1.c | 839 +++++++++++++++++++++++++++++++++++++++
 providers/hns/hns_roce_u_hw_v1.h | 242 +++++++++++
 providers/hns/hns_roce_u_verbs.c | 525 ++++++++++++++++++++++++
 12 files changed, 2287 insertions(+)
 create mode 100644 providers/hns/CMakeLists.txt
 create mode 100644 providers/hns/hns_roce_u.c
 create mode 100644 providers/hns/hns_roce_u.h
 create mode 100644 providers/hns/hns_roce_u_abi.h
 create mode 100644 providers/hns/hns_roce_u_buf.c
 create mode 100644 providers/hns/hns_roce_u_db.h
 create mode 100644 providers/hns/hns_roce_u_hw_v1.c
 create mode 100644 providers/hns/hns_roce_u_hw_v1.h
 create mode 100644 providers/hns/hns_roce_u_verbs.c

-- 
1.9.1

--
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 0/8] Eliminate most loose COPYING files
From: Doug Ledford @ 2016-11-10 23:59 UTC (permalink / raw)
  To: Jason Gunthorpe, linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>


[-- Attachment #1.1: Type: text/plain, Size: 741 bytes --]

On 11/10/2016 1:47 PM, Jason Gunthorpe wrote:
> This is done by pushing the copyright statement into the files in the
> subdirectory without copyright.
> 
> https://github.com/linux-rdma/rdma-core/pull/39
> 
> Jason Gunthorpe (8):
>   ibcm: Delete COPYING file
>   iwpmd: Delete COPYING file
>   srp_daemon: Push COPYING file into individual files
>   umad: Push COPYING file into individual files
>   ibverbs: Push COPYING file into individual files
>   rdmacm: Push COPYING file into individual files
>   ibacm: Push COPYING file into individual files
>   mlx4: Push COPYING file into individual files

Thanks, 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: Problems trying to bridge/route RoCE
From: Robert LeBlanc @ 2016-11-10 22:33 UTC (permalink / raw)
  To: Parav Pandit; +Cc: linux-rdma
In-Reply-To: <CAANLjFoqDxnPgQiJT6FBMFYLw+iGyN-2yDYJfSRnEi04AR_0Yg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

I found a ConnectX-3 (non-pro) and wired it up. So in bridge mode, it
seems like I can get ib_read_bw to work (still with a warm-up error
message), but as router, I'm still having trouble.

192.168.21.17 ----- Linux bridge ------ 192.168.21.18

# ib_read_bw -d mlx5_0 -F -a 192.168.21.17
---------------------------------------------------------------------------------------
Device not recognized to implement inline feature. Disabling it
---------------------------------------------------------------------------------------
                    RDMA_Read BW Test
 Dual-port       : OFF          Device         : mlx5_0
 Number of qps   : 1            Transport type : IB
 Connection type : RC           Using SRQ      : OFF
 TX depth        : 128
 CQ Moderation   : 100
 Mtu             : 1024[B]
 Link type       : Ethernet
 Gid index       : 0
 Outstand reads  : 16
 rdma_cm QPs     : OFF
 Data ex. method : Ethernet
---------------------------------------------------------------------------------------
 local address: LID 0000 QPN 0x0135 PSN 0x12f108 OUT 0x10 RKey
0x009f79 VAddr 0x007f1c82d1f000
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:21:18
 remote address: LID 0000 QPN 0x0175 PSN 0x37982e OUT 0x10 RKey
0x00eac9 VAddr 0x007f54c1405000
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:21:17
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
Conflicting CPU frequency values detected: 3698.669000 != 3102.661000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.86 differs from nominal 3698.67 MHz
 2          1000             0.65               0.65               0.341088
Conflicting CPU frequency values detected: 3699.310000 != 1199.920000
Test integrity may be harmed !
Warning: measured timestamp frequency 3500.01 differs from nominal 3699.31 MHz
 4          1000             0.10               0.10               0.025750
Conflicting CPU frequency values detected: 3681.579000 != 1199.920000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.99 differs from nominal 3681.58 MHz
 8          1000             2.77               2.77               0.363689
Conflicting CPU frequency values detected: 3602.325000 != 3265.655000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.99 differs from nominal 3602.32 MHz
 16         1000             5.37               5.36               0.351569
Conflicting CPU frequency values detected: 3600.830000 != 3265.655000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.97 differs from nominal 3600.83 MHz
 32         1000             11.30              11.29              0.370062
Conflicting CPU frequency values detected: 3599.761000 != 3265.655000
Test integrity may be harmed !
Warning: measured timestamp frequency 3500.01 differs from nominal 3599.76 MHz
 64         1000             22.39              22.28              0.365108
Conflicting CPU frequency values detected: 3599.975000 != 3265.655000
Test integrity may be harmed !
Warning: measured timestamp frequency 3500.01 differs from nominal 3599.97 MHz
 128        1000             45.09              45.08              0.369316
Conflicting CPU frequency values detected: 3599.761000 != 3265.655000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.99 differs from nominal 3599.76 MHz
 256        1000             89.55              89.54              0.366765
Conflicting CPU frequency values detected: 3599.761000 != 2280.212000
Test integrity may be harmed !
Warning: measured timestamp frequency 3500 differs from nominal 3599.76 MHz
 512        1000             179.65             179.64             0.367907
 Conflicting CPU frequency values detected: 3599.761000 != 1200.347000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.99 differs from nominal 3599.76 MHz
 1024       1000             361.00             360.98             0.369639
Conflicting CPU frequency values detected: 3601.043000 != 1751.495000
Test integrity may be harmed !
Warning: measured timestamp frequency 3500.01 differs from nominal 3601.04 MHz
 2048       1000             492.15             491.42             0.251606
Conflicting CPU frequency values detected: 3698.028000 != 3601.470000
Test integrity may be harmed !
Warning: measured timestamp frequency 3500.01 differs from nominal 3698.03 MHz
 4096       1000             617.10             615.00             0.157440
Conflicting CPU frequency values detected: 3684.356000 != 3600.189000
Test integrity may be harmed !
Warning: measured timestamp frequency 3500 differs from nominal 3684.36 MHz
 8192       1000             679.31             679.30             0.086951
Conflicting CPU frequency values detected: 3646.759000 != 1877.532000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.98 differs from nominal 3646.76 MHz
 16384      1000             722.86             722.85             0.046262
Conflicting CPU frequency values detected: 3599.975000 != 2271.881000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.99 differs from nominal 3599.97 MHz
 32768      1000             742.08             742.08             0.023746
Conflicting CPU frequency values detected: 3602.966000 != 1933.929000
Test integrity may be harmed !
Warning: measured timestamp frequency 3499.97 differs from nominal 3602.97 MHz
 65536      1000             763.25             762.52             0.012200
mlx5: prv-0-18-roberttest.betterservers.com: got completion with error:
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00008813 10000135 4680fcd2
Problems with warm up


=== Router config ===
192.168.21.17 ------ 192.168.21.11 (Linux router) 192.168.22.11 ------
192.168.21.18

#192.168.22.18
# ping 192.168.21.17
PING 192.168.21.17 (192.168.21.17) 56(84) bytes of data.
64 bytes from 192.168.21.17: icmp_seq=1 ttl=63 time=0.191 ms
^C
--- 192.168.21.17 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.191/0.191/0.191/0.000 ms

#192.168.21.17
# route -n | grep 168
192.168.21.0    0.0.0.0         255.255.255.0   U     0      0        0 eth2
192.168.22.0    192.168.21.11   255.255.255.0   UG    0      0        0 eth2

#192.168.22.18
# route -n | grep 168
192.168.21.0    192.168.22.11   255.255.255.0   UG    0      0        0 eth2
192.168.22.0    0.0.0.0         255.255.255.0   U     0      0        0 eth2

#192.168.22.18
# ib_read_bw -d mlx5_0 -F -a 192.168.21.17
---------------------------------------------------------------------------------------
Device not recognized to implement inline feature. Disabling it
---------------------------------------------------------------------------------------
                    RDMA_Read BW Test
 Dual-port       : OFF          Device         : mlx5_0
 Number of qps   : 1            Transport type : IB
 Connection type : RC           Using SRQ      : OFF
 TX depth        : 128
 CQ Moderation   : 100
 Mtu             : 1024[B]
 Link type       : Ethernet
 Gid index       : 0
 Outstand reads  : 16
 rdma_cm QPs     : OFF
 Data ex. method : Ethernet
---------------------------------------------------------------------------------------
 local address: LID 0000 QPN 0x013a PSN 0x676912 OUT 0x10 RKey
0x00dfd3 VAddr 0x007fe67aee8000
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:22:18
 remote address: LID 0000 QPN 0x017a PSN 0x4256ce OUT 0x10 RKey
0x012985 VAddr 0x007f59de5bf000
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:21:17
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
Problems with warm up


#192.168.21.17
# cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
RoCE v2

#192.168.22.18
# cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
RoCE v2

With routing, I'm not seeing any RoCE traffic with tcpdump on the
interfaces. With bridge mode, I do see the RoCE traffic, but it looks
like RoCE v1 traffic.

[snip]
14:55:06.010682 0c:c4:7a:89:f7:06 > 0c:c4:7a:89:f6:f6, ethertype
Unknown (0x8915), length 78:
        0x0000:  6010 0000 0018 1b40 0000 0000 0000 0000  `......@........
        0x0010:  0000 ffff c0a8 1511 0000 0000 0000 0000  ................
        0x0020:  0000 ffff c0a8 1512 1060 ffff 0000 013e  .........`.....>
        0x0030:  00e5 7b6c 0000 0411 0000 0000 60bb 6a87  ..{l........`.j.
[snip]

I can get iSER to kind of work...

In bridge mode and running fio on the iSER target, I'm getting
messages in dmesg:
[Thu Nov 10 15:14:17 2016] mlx5_0:dump_cqe:263:(pid 0): dump error cqe
[Thu Nov 10 15:14:17 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:14:17 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:14:17 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:14:17 2016] 00000000 08007806 2500014f a7a758d2
[Thu Nov 10 15:14:17 2016] iser: iser_err_comp: memreg failure: memory
management operation error (6) vend_err 78
[Thu Nov 10 15:14:17 2016]  connection82:0: detected conn error (1011)
[Thu Nov 10 15:14:24 2016] mlx5_0:dump_cqe:263:(pid 0): dump error cqe
[Thu Nov 10 15:14:24 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:14:24 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:14:24 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:14:24 2016] 00000000 08007806 25000150 3471eed2
...

In routed mode I also get the same messages, but the device goes
offline and crashes fio

[Thu Nov 10 15:09:13 2016] mlx5_0:dump_cqe:263:(pid 0): dump error cqe
[Thu Nov 10 15:09:13 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:09:13 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:09:13 2016] 00000000 00000000 00000000 00000000
[Thu Nov 10 15:09:13 2016] 00000000 08007806 25000149 5a524ad2
[Thu Nov 10 15:09:13 2016] iser: iser_err_comp: memreg failure: memory
management operation error (6) vend_err 78
[Thu Nov 10 15:09:13 2016]  connection80:0: detected conn error (1011)
[Thu Nov 10 15:09:18 2016]  session80: session recovery timed out after 5 secs
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: rejecting I/O to offline device
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: [sdab] killing request
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: rejecting I/O to offline device
[Thu Nov 10 15:09:18 2016] scsi_io_completion: 23 callbacks suppressed
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: [sdab] FAILED Result:
hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: [sdab] CDB: Read(10) 28 00 09
9f 97 18 00 01 48 00
[Thu Nov 10 15:09:18 2016] blk_update_request: 23 callbacks suppressed
[Thu Nov 10 15:09:18 2016] blk_update_request: I/O error, dev sdab,
sector 161453848
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: [sdab] killing request
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: rejecting I/O to offline device
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: [sdab] FAILED Result:
hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: [sdab] CDB: Read(10) 28 00 07
bf 98 60 00 00 a8 00
[Thu Nov 10 15:09:18 2016] blk_update_request: I/O error, dev sdab,
sector 129996896
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: [sdab] killing request
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: rejecting I/O to offline device
[Thu Nov 10 15:09:18 2016] sd 13:0:0:0: [sdab] killing request
...

This is all using ConnectX-4 LX cards on the target and initiator and
the 3.8.5 kernel.

Any ideas of what may be causing these issues?

Thank you,
Robert LeBlanc

----------------
Robert LeBlanc
PGP Fingerprint 79A2 9CA4 6CC4 45DD A904  C70E E654 3BB2 FA62 B9F1


On Thu, Nov 3, 2016 at 11:38 AM, Robert LeBlanc <robert-4JaGZRWAfWbajFs6igw21g@public.gmane.org> wrote:
> That box has a build-in ConnectX-3 card that we aren't using in this
> test so the mlx4 modules are loaded. I unloaded mlx4_ib, no luck. I
> also tried to unload the mlx5_ib driver and it also unloaded mlx5_core
> and my interfaces were gone. It seems like I can't only unload
> mlx5_ib.
>
> With mlx4_ib unloaded I still can't rping or ib_read_bw (connects, but
> get messages like:
> ethernet_read_keys: Couldn't read remote address
> Unable to read to socket/rdam_cm
> Failed to exchange data between server and clients
> Problems with warm up) same as before.
> ----------------
> Robert LeBlanc
> PGP Fingerprint 79A2 9CA4 6CC4 45DD A904  C70E E654 3BB2 FA62 B9F1
>
>
> On Thu, Nov 3, 2016 at 11:16 AM, Parav Pandit <pandit.parav-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>> Hi Robert,
>>
>> Can you please unload the mlx4_ib module in the bridge/router box and
>> give it a quick try?
>>
>> Parav
>>
>> On Thu, Nov 3, 2016 at 10:32 PM, Robert LeBlanc <robert-4JaGZRWAfWbajFs6igw21g@public.gmane.org> wrote:
>>> I'm trying to do some testing of RoCE v2 and so I put a LInux box
>>> between two RoCE  machines. I think the ConnectX-4 Lx card in the
>>> bridge/router is intercepting the RoCE traffic and so it is not being
>>> bridged/routed. I don't see any traffic using tcpdump which seems to
>>> confirm this. I thought I could change the UDP port that the card is
>>> looking for RoCE traffic to something not in use [0], but rr_proto is
>>> not a valid parameter for the inbox mlx5_core module on 4.8.5. I can
>>> ping across the bridge/router so I know that it is setup correctly,
>>> just RDMA is not working.
>>>
>>> Any ideas on how to pass RoCE traffic like normal traffic? The reason
>>> we are using a Linux box is that we can use netem to understand how
>>> RoCE behaves in different situations.
>>>
>>> [0] https://community.mellanox.com/docs/DOC-1444
>>>
>>> Thank you
>>> ----------------
>>> Robert LeBlanc
>>> PGP Fingerprint 79A2 9CA4 6CC4 45DD A904  C70E E654 3BB2 FA62 B9F1
>>> --
>>> 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: [PATCHv12 0/3] rdmacg: IB/core: rdma controller support
From: Tejun Heo @ 2016-11-10 19:23 UTC (permalink / raw)
  To: Parav Pandit
  Cc: Leon Romanovsky, Liran Liss,
	cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-rdma,
	Li Zefan, Johannes Weiner, Doug Ledford, Christoph Hellwig,
	Hefty, Sean, Jason Gunthorpe, Haggai Eran,
	james.l.morris-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org,
	Or Gerlitz, Matan Barak
In-Reply-To: <CAG53R5Wk2zbL=0_EcYCOXQ4dK-k_w=sLOFAKD98NnnbAAnu2=A@mail.gmail.com>

Hello, Parav.

On Thu, Nov 10, 2016 at 11:26:28PM +0530, Parav Pandit wrote:
> > That looks great to me from cgroup side.  Do you have plans for
> > exposing the maximum numbers available?
>
> If I have to expose max limits, I need new file interface as rdma.limit.
> Because once rdma.max is set, user space cannot get back the old value.
> It needs to cache it. user space tools might have been restarted and
> so on, so store in other file etc.
> So such user space solutions are just ugly.
> 
> Getting and setting values in device agnostic way, through cgroup
> files is desirable, however its not must. It can fallback on using
> verb based API.
> 
> So if there is no objection, I prefer to have rdma.limit file as
> incremental patch once base version is merged.

How about something like RESOURCE.available field in rdma.stat file?
Its value can be what's maximally available at that level when max is
unlimited and there is no competition.  At top level cgroups, it'd be
the total resources available in the system.  At sub levels, it'd be
min of what's available to the grandparent and parent's limit on the
resource.

This would be in line with cgroup conventions and would behave the
same way nested making things easier for containers.

Thanks.

-- 
tejun

^ permalink raw reply

* [PATCH rdma-core 8/8] mlx4: Push COPYING file into individual files
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

Add missing copyright headers and delete the COPYING file.

Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
---
 providers/mlx4/COPYING | 378 -------------------------------------------------
 providers/mlx4/mmio.h  |   2 +
 2 files changed, 2 insertions(+), 378 deletions(-)
 delete mode 100644 providers/mlx4/COPYING

diff --git a/providers/mlx4/COPYING b/providers/mlx4/COPYING
deleted file mode 100644
index add3d1990bc1..000000000000
diff --git a/providers/mlx4/mmio.h b/providers/mlx4/mmio.h
index 0304fd7efa5e..f907661ddcf9 100644
--- a/providers/mlx4/mmio.h
+++ b/providers/mlx4/mmio.h
@@ -1,3 +1,5 @@
+/* Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
+ */
 #ifndef MMIO_H
 #define MMIO_H
 
-- 
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

^ permalink raw reply related

* [PATCH rdma-core 7/8] ibacm: Push COPYING file into individual files
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

Add missing copyright headers and delete the COPYING file.

Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
---
 ibacm/COPYING             | 378 ----------------------------------------------
 ibacm/ibacm.init.in       |   1 +
 ibacm/man/ib_acme.1       |   1 +
 ibacm/man/ibacm.1         |   1 +
 ibacm/man/ibacm.7         |   1 +
 ibacm/man/ibacm_prov.7.in |   1 +
 6 files changed, 5 insertions(+), 378 deletions(-)
 delete mode 100644 ibacm/COPYING

diff --git a/ibacm/COPYING b/ibacm/COPYING
deleted file mode 100644
index 13f30ae27d95..000000000000
diff --git a/ibacm/ibacm.init.in b/ibacm/ibacm.init.in
index 0fb0011f3953..821742366054 100644
--- a/ibacm/ibacm.init.in
+++ b/ibacm/ibacm.init.in
@@ -1,4 +1,5 @@
 #!/bin/bash
+# Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 #
 # Bring up/down the ibacm daemon
 #
diff --git a/ibacm/man/ib_acme.1 b/ibacm/man/ib_acme.1
index 530cd16c4c41..e94ff6c615cf 100644
--- a/ibacm/man/ib_acme.1
+++ b/ibacm/man/ib_acme.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "ib_acme" 1 "2014-06-16" "ib_acme" "ib_acme" ib_acme
 .SH NAME
 ib_acme \- test and configuration utility for the IB ACM
diff --git a/ibacm/man/ibacm.1 b/ibacm/man/ibacm.1
index 29ecd86b428e..5042e1ed88ac 100644
--- a/ibacm/man/ibacm.1
+++ b/ibacm/man/ibacm.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "ibacm" 1 "2014-06-16" "ibacm" "ibacm" ibacm
 .SH NAME
 ibacm \- address and route resolution services for InfiniBand.
diff --git a/ibacm/man/ibacm.7 b/ibacm/man/ibacm.7
index ad502cd0c25f..14b5d08d85f1 100644
--- a/ibacm/man/ibacm.7
+++ b/ibacm/man/ibacm.7
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "IBACM" 7 "2014-06-16" "IBACM" "IB ACM User Guide" IBACM
 .SH NAME
 ibacm \- InfiniBand communication management assistant
diff --git a/ibacm/man/ibacm_prov.7.in b/ibacm/man/ibacm_prov.7.in
index 9e79d58f639e..494fdc3b096e 100644
--- a/ibacm/man/ibacm_prov.7.in
+++ b/ibacm/man/ibacm_prov.7.in
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "IBACM_PROV" 7 "2014-06-16" "IBACM_PROV" "IB ACM Provider Guide" IBACM_PROV
 .SH NAME
 ibacm_prov \- InfiniBand communication management assistant provider interface
-- 
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

^ permalink raw reply related

* [PATCH rdma-core 6/8] rdmacm: Push COPYING file into individual files
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

Add missing copyright headers and delete the COPYING file.

Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
---
 librdmacm/COPYING                          | 378 -----------------------------
 librdmacm/docs/rsocket                     |   1 +
 librdmacm/man/mckey.1                      |   1 +
 librdmacm/man/rcopy.1                      |   1 +
 librdmacm/man/rdma_accept.3                |   1 +
 librdmacm/man/rdma_ack_cm_event.3          |   1 +
 librdmacm/man/rdma_bind_addr.3             |   1 +
 librdmacm/man/rdma_client.1                |   1 +
 librdmacm/man/rdma_cm.7                    |   1 +
 librdmacm/man/rdma_connect.3               |   1 +
 librdmacm/man/rdma_create_ep.3             |   1 +
 librdmacm/man/rdma_create_event_channel.3  |   1 +
 librdmacm/man/rdma_create_id.3             |   1 +
 librdmacm/man/rdma_create_qp.3             |   1 +
 librdmacm/man/rdma_create_srq.3            |   1 +
 librdmacm/man/rdma_dereg_mr.3              |   1 +
 librdmacm/man/rdma_destroy_ep.3            |   1 +
 librdmacm/man/rdma_destroy_event_channel.3 |   1 +
 librdmacm/man/rdma_destroy_id.3            |   1 +
 librdmacm/man/rdma_destroy_qp.3            |   1 +
 librdmacm/man/rdma_destroy_srq.3           |   1 +
 librdmacm/man/rdma_disconnect.3            |   1 +
 librdmacm/man/rdma_event_str.3             |   1 +
 librdmacm/man/rdma_free_devices.3          |   1 +
 librdmacm/man/rdma_get_cm_event.3          |   1 +
 librdmacm/man/rdma_get_devices.3           |   1 +
 librdmacm/man/rdma_get_dst_port.3          |   1 +
 librdmacm/man/rdma_get_local_addr.3        |   1 +
 librdmacm/man/rdma_get_peer_addr.3         |   1 +
 librdmacm/man/rdma_get_recv_comp.3         |   1 +
 librdmacm/man/rdma_get_request.3           |   1 +
 librdmacm/man/rdma_get_send_comp.3         |   1 +
 librdmacm/man/rdma_get_src_port.3          |   1 +
 librdmacm/man/rdma_getaddrinfo.3           |   1 +
 librdmacm/man/rdma_join_multicast.3        |   1 +
 librdmacm/man/rdma_leave_multicast.3       |   1 +
 librdmacm/man/rdma_listen.3                |   1 +
 librdmacm/man/rdma_migrate_id.3            |   1 +
 librdmacm/man/rdma_notify.3                |   1 +
 librdmacm/man/rdma_post_read.3             |   1 +
 librdmacm/man/rdma_post_readv.3            |   1 +
 librdmacm/man/rdma_post_recv.3             |   1 +
 librdmacm/man/rdma_post_recvv.3            |   1 +
 librdmacm/man/rdma_post_send.3             |   1 +
 librdmacm/man/rdma_post_sendv.3            |   1 +
 librdmacm/man/rdma_post_ud_send.3          |   1 +
 librdmacm/man/rdma_post_write.3            |   1 +
 librdmacm/man/rdma_post_writev.3           |   1 +
 librdmacm/man/rdma_reg_msgs.3              |   1 +
 librdmacm/man/rdma_reg_read.3              |   1 +
 librdmacm/man/rdma_reg_write.3             |   1 +
 librdmacm/man/rdma_reject.3                |   1 +
 librdmacm/man/rdma_resolve_addr.3          |   1 +
 librdmacm/man/rdma_resolve_route.3         |   1 +
 librdmacm/man/rdma_server.1                |   1 +
 librdmacm/man/rdma_set_option.3            |   1 +
 librdmacm/man/rdma_xclient.1               |   1 +
 librdmacm/man/rdma_xserver.1               |   1 +
 librdmacm/man/riostream.1                  |   1 +
 librdmacm/man/rping.1                      |   1 +
 librdmacm/man/rsocket.7.in                 |   1 +
 librdmacm/man/rstream.1                    |   1 +
 librdmacm/man/ucmatose.1                   |   1 +
 librdmacm/man/udaddy.1                     |   1 +
 64 files changed, 63 insertions(+), 378 deletions(-)
 delete mode 100644 librdmacm/COPYING

diff --git a/librdmacm/COPYING b/librdmacm/COPYING
deleted file mode 100644
index 39f3831585f2..000000000000
diff --git a/librdmacm/docs/rsocket b/librdmacm/docs/rsocket
index f453c1b68089..43834e04b1d3 100644
--- a/librdmacm/docs/rsocket
+++ b/librdmacm/docs/rsocket
@@ -1,3 +1,4 @@
+.. Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 rsocket Protocol and Design Guide               11/11/2012
 
 Data Streaming (TCP) Overview
diff --git a/librdmacm/man/mckey.1 b/librdmacm/man/mckey.1
index 86a51a35e971..a36f57ba9702 100644
--- a/librdmacm/man/mckey.1
+++ b/librdmacm/man/mckey.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "MCKEY" 1 "2007-05-15" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 mckey \- RDMA CM multicast setup and simple data transfer test.
diff --git a/librdmacm/man/rcopy.1 b/librdmacm/man/rcopy.1
index e875458bf162..1dcca494e579 100644
--- a/librdmacm/man/rcopy.1
+++ b/librdmacm/man/rcopy.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RCOPY" 1 "2011-12-2" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 rcopy \- simple file copy over RDMA.
diff --git a/librdmacm/man/rdma_accept.3 b/librdmacm/man/rdma_accept.3
index 0859fac6ef26..a146a8d390af 100644
--- a/librdmacm/man/rdma_accept.3
+++ b/librdmacm/man/rdma_accept.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_ACCEPT" 3 "2014-05-27" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_accept \- Called to accept a connection request.
diff --git a/librdmacm/man/rdma_ack_cm_event.3 b/librdmacm/man/rdma_ack_cm_event.3
index bcf20f719445..a9a616aa0cba 100644
--- a/librdmacm/man/rdma_ack_cm_event.3
+++ b/librdmacm/man/rdma_ack_cm_event.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_ACK_CM_EVENT" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_ack_cm_event \- Free a communication event.
diff --git a/librdmacm/man/rdma_bind_addr.3 b/librdmacm/man/rdma_bind_addr.3
index 8f9bc60e8ed5..37db52c728ca 100644
--- a/librdmacm/man/rdma_bind_addr.3
+++ b/librdmacm/man/rdma_bind_addr.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_BIND_ADDR" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_bind_addr \- Bind an RDMA identifier to a source address.
diff --git a/librdmacm/man/rdma_client.1 b/librdmacm/man/rdma_client.1
index 68bfc7650719..91b2d632251a 100644
--- a/librdmacm/man/rdma_client.1
+++ b/librdmacm/man/rdma_client.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_CLIENT" 1 "2010-07-19" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 rdma_client \- simple RDMA CM connection and ping-pong test.
diff --git a/librdmacm/man/rdma_cm.7 b/librdmacm/man/rdma_cm.7
index 451035bfb588..8e5ad99e6687 100644
--- a/librdmacm/man/rdma_cm.7
+++ b/librdmacm/man/rdma_cm.7
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_CM" 7 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_cm \- RDMA communication manager.
diff --git a/librdmacm/man/rdma_connect.3 b/librdmacm/man/rdma_connect.3
index 51056a06ee6e..ef88e38a75ac 100644
--- a/librdmacm/man/rdma_connect.3
+++ b/librdmacm/man/rdma_connect.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_CONNECT" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_connect \- Initiate an active connection request.
diff --git a/librdmacm/man/rdma_create_ep.3 b/librdmacm/man/rdma_create_ep.3
index cb9b8b647ae5..b1f397625055 100644
--- a/librdmacm/man/rdma_create_ep.3
+++ b/librdmacm/man/rdma_create_ep.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_CREATE_EP" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_create_ep \- Allocate a communication identifier and optional QP.
diff --git a/librdmacm/man/rdma_create_event_channel.3 b/librdmacm/man/rdma_create_event_channel.3
index baa48a6bedf2..928c79701efb 100644
--- a/librdmacm/man/rdma_create_event_channel.3
+++ b/librdmacm/man/rdma_create_event_channel.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_CREATE_EVENT_CHANNEL" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_create_event_channel \- Open a channel used to report communication events.
diff --git a/librdmacm/man/rdma_create_id.3 b/librdmacm/man/rdma_create_id.3
index 81acc9b4b802..0a5093af6678 100644
--- a/librdmacm/man/rdma_create_id.3
+++ b/librdmacm/man/rdma_create_id.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_CREATE_ID" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_create_id \- Allocate a communication identifier.
diff --git a/librdmacm/man/rdma_create_qp.3 b/librdmacm/man/rdma_create_qp.3
index 7e37888df2a2..cd4708f7d4a6 100644
--- a/librdmacm/man/rdma_create_qp.3
+++ b/librdmacm/man/rdma_create_qp.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_CREATE_QP" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_create_qp \- Allocate a QP.
diff --git a/librdmacm/man/rdma_create_srq.3 b/librdmacm/man/rdma_create_srq.3
index 9b917c29eb69..6257e86b3916 100644
--- a/librdmacm/man/rdma_create_srq.3
+++ b/librdmacm/man/rdma_create_srq.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_CREATE_SRQ" 3 "2011-06-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_create_srq \- Allocate a shared receive queue.
diff --git a/librdmacm/man/rdma_dereg_mr.3 b/librdmacm/man/rdma_dereg_mr.3
index 298e886251e3..1fe936b2be50 100644
--- a/librdmacm/man/rdma_dereg_mr.3
+++ b/librdmacm/man/rdma_dereg_mr.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_DEREG_MR" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_dereg_mr \- deregisters a registered memory region.
diff --git a/librdmacm/man/rdma_destroy_ep.3 b/librdmacm/man/rdma_destroy_ep.3
index 750702a01dee..1211f4b55ccf 100644
--- a/librdmacm/man/rdma_destroy_ep.3
+++ b/librdmacm/man/rdma_destroy_ep.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 
 .TH "RDMA_DESTROY_EP" 3 "2011-06-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
diff --git a/librdmacm/man/rdma_destroy_event_channel.3 b/librdmacm/man/rdma_destroy_event_channel.3
index 2c5b8d631a9e..5bc982a7a27f 100644
--- a/librdmacm/man/rdma_destroy_event_channel.3
+++ b/librdmacm/man/rdma_destroy_event_channel.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_DESTROY_EVENT_CHANNEL" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_destroy_event_channel \- Close an event communication channel.
diff --git a/librdmacm/man/rdma_destroy_id.3 b/librdmacm/man/rdma_destroy_id.3
index 0fef7a85562b..1d95ff2d85ab 100644
--- a/librdmacm/man/rdma_destroy_id.3
+++ b/librdmacm/man/rdma_destroy_id.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_DESTROY_ID" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_destroy_id \- Release a communication identifier.
diff --git a/librdmacm/man/rdma_destroy_qp.3 b/librdmacm/man/rdma_destroy_qp.3
index bb1360eb5140..03fba27e35c2 100644
--- a/librdmacm/man/rdma_destroy_qp.3
+++ b/librdmacm/man/rdma_destroy_qp.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_DESTROY_QP" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_destroy_qp \- Deallocate a QP.
diff --git a/librdmacm/man/rdma_destroy_srq.3 b/librdmacm/man/rdma_destroy_srq.3
index 5f0dfe0fc87d..5c633a8dec2c 100644
--- a/librdmacm/man/rdma_destroy_srq.3
+++ b/librdmacm/man/rdma_destroy_srq.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_DESTROY_SRQ" 3 "2011-06-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_destroy_srq \- Deallocate a SRQ.
diff --git a/librdmacm/man/rdma_disconnect.3 b/librdmacm/man/rdma_disconnect.3
index 1890c2885077..23aec9869f09 100644
--- a/librdmacm/man/rdma_disconnect.3
+++ b/librdmacm/man/rdma_disconnect.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_DISCONNECT" 3 "2008-01-02" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_disconnect \- This function disconnects a connection.
diff --git a/librdmacm/man/rdma_event_str.3 b/librdmacm/man/rdma_event_str.3
index abd016df6eca..24c9e165aa3d 100644
--- a/librdmacm/man/rdma_event_str.3
+++ b/librdmacm/man/rdma_event_str.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_EVENT_STR" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_event_str \- Returns a string representation of an rdma cm event.
diff --git a/librdmacm/man/rdma_free_devices.3 b/librdmacm/man/rdma_free_devices.3
index 37b82ef87692..c46bcbfe64d0 100644
--- a/librdmacm/man/rdma_free_devices.3
+++ b/librdmacm/man/rdma_free_devices.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_FREE_DEVICES" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_free_devices \- Frees the list of devices returned by rdma_get_devices.
diff --git a/librdmacm/man/rdma_get_cm_event.3 b/librdmacm/man/rdma_get_cm_event.3
index b0c497021bcc..2623eab8a788 100644
--- a/librdmacm/man/rdma_get_cm_event.3
+++ b/librdmacm/man/rdma_get_cm_event.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_CM_EVENT" 3 "2007-10-31" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_cm_event \- Retrieves the next pending communication event.
diff --git a/librdmacm/man/rdma_get_devices.3 b/librdmacm/man/rdma_get_devices.3
index 7f427226c648..be41514e89b7 100644
--- a/librdmacm/man/rdma_get_devices.3
+++ b/librdmacm/man/rdma_get_devices.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_DEVICES" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_devices \- Get a list of RDMA devices currently available.
diff --git a/librdmacm/man/rdma_get_dst_port.3 b/librdmacm/man/rdma_get_dst_port.3
index 15677499d111..18637838d184 100644
--- a/librdmacm/man/rdma_get_dst_port.3
+++ b/librdmacm/man/rdma_get_dst_port.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_DST_PORT" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_dst_port \- Returns the remote port number of a bound rdma_cm_id.
diff --git a/librdmacm/man/rdma_get_local_addr.3 b/librdmacm/man/rdma_get_local_addr.3
index 25d5312f6a3d..eeaa714204a9 100644
--- a/librdmacm/man/rdma_get_local_addr.3
+++ b/librdmacm/man/rdma_get_local_addr.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_LOCAL_ADDR" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_local_addr \- Returns the local IP address of a bound rdma_cm_id.
diff --git a/librdmacm/man/rdma_get_peer_addr.3 b/librdmacm/man/rdma_get_peer_addr.3
index 54f3139dd04b..ff8ce4eab43f 100644
--- a/librdmacm/man/rdma_get_peer_addr.3
+++ b/librdmacm/man/rdma_get_peer_addr.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_PEER_ADDR" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_peer_addr \- Returns the remote IP address of a bound rdma_cm_id.
diff --git a/librdmacm/man/rdma_get_recv_comp.3 b/librdmacm/man/rdma_get_recv_comp.3
index dece89ddc9ca..6894e5d96c0c 100644
--- a/librdmacm/man/rdma_get_recv_comp.3
+++ b/librdmacm/man/rdma_get_recv_comp.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_RECV_COMP" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_recv_comp \- retrieves a completed receive request.
diff --git a/librdmacm/man/rdma_get_request.3 b/librdmacm/man/rdma_get_request.3
index 93ec70dc90b1..86cb6102d073 100644
--- a/librdmacm/man/rdma_get_request.3
+++ b/librdmacm/man/rdma_get_request.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_REQUEST" 3 "2007-10-31" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_request \- Retrieves the next pending connection request event.
diff --git a/librdmacm/man/rdma_get_send_comp.3 b/librdmacm/man/rdma_get_send_comp.3
index f0c92b4cccc1..5085ddb7acea 100644
--- a/librdmacm/man/rdma_get_send_comp.3
+++ b/librdmacm/man/rdma_get_send_comp.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_SEND_COMP" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_send_comp \- retrieves a completed send, read, or write request.
diff --git a/librdmacm/man/rdma_get_src_port.3 b/librdmacm/man/rdma_get_src_port.3
index 477ec73663ba..1e36a92cd877 100644
--- a/librdmacm/man/rdma_get_src_port.3
+++ b/librdmacm/man/rdma_get_src_port.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GET_SRC_PORT" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_get_src_port \- Returns the local port number of a bound rdma_cm_id.
diff --git a/librdmacm/man/rdma_getaddrinfo.3 b/librdmacm/man/rdma_getaddrinfo.3
index 9e133ffea0a5..3ad639360ea0 100644
--- a/librdmacm/man/rdma_getaddrinfo.3
+++ b/librdmacm/man/rdma_getaddrinfo.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_GETADDRINFO" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_getaddrinfo \- Provides transport independent address translation.
diff --git a/librdmacm/man/rdma_join_multicast.3 b/librdmacm/man/rdma_join_multicast.3
index 7886716cb715..4e52e859e8c6 100644
--- a/librdmacm/man/rdma_join_multicast.3
+++ b/librdmacm/man/rdma_join_multicast.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_JOIN_MULTICAST" 3 "2008-01-02" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_join_multicast \- Joins a multicast group.
diff --git a/librdmacm/man/rdma_leave_multicast.3 b/librdmacm/man/rdma_leave_multicast.3
index 802ba57df4ba..9e112d31a553 100644
--- a/librdmacm/man/rdma_leave_multicast.3
+++ b/librdmacm/man/rdma_leave_multicast.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_LEAVE_MULTICAST" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_leave_multicast \- Leaves a multicast group.
diff --git a/librdmacm/man/rdma_listen.3 b/librdmacm/man/rdma_listen.3
index b76d6921e65b..78fd27083664 100644
--- a/librdmacm/man/rdma_listen.3
+++ b/librdmacm/man/rdma_listen.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_LISTEN" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_listen \- Listen for incoming connection requests.
diff --git a/librdmacm/man/rdma_migrate_id.3 b/librdmacm/man/rdma_migrate_id.3
index 8c2d7dd6e40a..f0f7bcee0a59 100644
--- a/librdmacm/man/rdma_migrate_id.3
+++ b/librdmacm/man/rdma_migrate_id.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_MIGRATE_ID" 3 "2007-11-13" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_migrate_id \- Move a communication identifier to a different event channel.
diff --git a/librdmacm/man/rdma_notify.3 b/librdmacm/man/rdma_notify.3
index 62db5756f9d3..c80733a17d71 100644
--- a/librdmacm/man/rdma_notify.3
+++ b/librdmacm/man/rdma_notify.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_NOTIFY" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_notify \- Notifies the librdmacm of an asynchronous event.
diff --git a/librdmacm/man/rdma_post_read.3 b/librdmacm/man/rdma_post_read.3
index d7afc5b15630..11b3e09e16ac 100644
--- a/librdmacm/man/rdma_post_read.3
+++ b/librdmacm/man/rdma_post_read.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_READ" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_read \- post an RDMA read work request.
diff --git a/librdmacm/man/rdma_post_readv.3 b/librdmacm/man/rdma_post_readv.3
index cccf2c3e9833..95e415595039 100644
--- a/librdmacm/man/rdma_post_readv.3
+++ b/librdmacm/man/rdma_post_readv.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_READV" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_readv \- post an RDMA read work request.
diff --git a/librdmacm/man/rdma_post_recv.3 b/librdmacm/man/rdma_post_recv.3
index 6633cef1350b..5e0530d46899 100644
--- a/librdmacm/man/rdma_post_recv.3
+++ b/librdmacm/man/rdma_post_recv.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_RECV" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_recv \- post a work request to receive an incoming message.
diff --git a/librdmacm/man/rdma_post_recvv.3 b/librdmacm/man/rdma_post_recvv.3
index f5e099e1ac42..bd03930c8918 100644
--- a/librdmacm/man/rdma_post_recvv.3
+++ b/librdmacm/man/rdma_post_recvv.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_RECVV" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_recvv \- post a work request to receive incoming messages.
diff --git a/librdmacm/man/rdma_post_send.3 b/librdmacm/man/rdma_post_send.3
index 82bcf37ba276..5d0e6d603503 100644
--- a/librdmacm/man/rdma_post_send.3
+++ b/librdmacm/man/rdma_post_send.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_SEND" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_send \- post a work request to send a message.
diff --git a/librdmacm/man/rdma_post_sendv.3 b/librdmacm/man/rdma_post_sendv.3
index 1953ce37252b..9b347b1f4746 100644
--- a/librdmacm/man/rdma_post_sendv.3
+++ b/librdmacm/man/rdma_post_sendv.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_SENDV" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_sendv \- post a work request to send a message.
diff --git a/librdmacm/man/rdma_post_ud_send.3 b/librdmacm/man/rdma_post_ud_send.3
index f8e2ada87e68..0fcce79e1d33 100644
--- a/librdmacm/man/rdma_post_ud_send.3
+++ b/librdmacm/man/rdma_post_ud_send.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_UD_SEND" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_ud_send \- post a work request to send a datagram.
diff --git a/librdmacm/man/rdma_post_write.3 b/librdmacm/man/rdma_post_write.3
index 5ab4fdb5dc4b..62a1e49c37fc 100644
--- a/librdmacm/man/rdma_post_write.3
+++ b/librdmacm/man/rdma_post_write.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_WRITE" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_write \- post an RDMA write work request.
diff --git a/librdmacm/man/rdma_post_writev.3 b/librdmacm/man/rdma_post_writev.3
index 1fc7b0a6c709..22ee0fe122b8 100644
--- a/librdmacm/man/rdma_post_writev.3
+++ b/librdmacm/man/rdma_post_writev.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_POST_WRITEV" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_post_writev \- post an RDMA write work request.
diff --git a/librdmacm/man/rdma_reg_msgs.3 b/librdmacm/man/rdma_reg_msgs.3
index 4f5656313734..48c75b309af5 100644
--- a/librdmacm/man/rdma_reg_msgs.3
+++ b/librdmacm/man/rdma_reg_msgs.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_REG_MSGS" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_reg_msgs \- register data buffer(s) for sending or receiving messages.
diff --git a/librdmacm/man/rdma_reg_read.3 b/librdmacm/man/rdma_reg_read.3
index 84417a59ce33..07813e82827e 100644
--- a/librdmacm/man/rdma_reg_read.3
+++ b/librdmacm/man/rdma_reg_read.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_REG_READ" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_reg_read \- register data buffer(s) for remote RDMA read access.
diff --git a/librdmacm/man/rdma_reg_write.3 b/librdmacm/man/rdma_reg_write.3
index cc7beea15f06..2be3cc0cef88 100644
--- a/librdmacm/man/rdma_reg_write.3
+++ b/librdmacm/man/rdma_reg_write.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_REG_WRITE" 3 "2010-07-19" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_reg_write \- register data buffer(s) for remote RDMA write access.
diff --git a/librdmacm/man/rdma_reject.3 b/librdmacm/man/rdma_reject.3
index 268f0b36f8a5..53f038fcccf3 100644
--- a/librdmacm/man/rdma_reject.3
+++ b/librdmacm/man/rdma_reject.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_REJECT" 3 "2007-05-15" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_reject \- Called to reject a connection request.
diff --git a/librdmacm/man/rdma_resolve_addr.3 b/librdmacm/man/rdma_resolve_addr.3
index 3243c7929a36..ce6dcd6a8ae1 100644
--- a/librdmacm/man/rdma_resolve_addr.3
+++ b/librdmacm/man/rdma_resolve_addr.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_RESOLVE_ADDR" 3 "2007-10-31" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_resolve_addr \- Resolve destination and optional source addresses.
diff --git a/librdmacm/man/rdma_resolve_route.3 b/librdmacm/man/rdma_resolve_route.3
index c52f1b3f4347..114f666dcf63 100644
--- a/librdmacm/man/rdma_resolve_route.3
+++ b/librdmacm/man/rdma_resolve_route.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_RESOLVE_ROUTE" 3 "2007-10-31" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_resolve_route \- Resolve the route information needed to establish a connection.
diff --git a/librdmacm/man/rdma_server.1 b/librdmacm/man/rdma_server.1
index 19f4860e4da3..ada2564983f3 100644
--- a/librdmacm/man/rdma_server.1
+++ b/librdmacm/man/rdma_server.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_SERVER" 1 "2010-07-19" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 rdma_server \- simple RDMA CM connection and ping-pong test.
diff --git a/librdmacm/man/rdma_set_option.3 b/librdmacm/man/rdma_set_option.3
index 74bf5ceba88d..93a60476f18f 100644
--- a/librdmacm/man/rdma_set_option.3
+++ b/librdmacm/man/rdma_set_option.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_SET_OPTION" 3 "2007-08-06" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rdma_set_option \- Set communication options for an rdma_cm_id.
diff --git a/librdmacm/man/rdma_xclient.1 b/librdmacm/man/rdma_xclient.1
index b4bb04560d23..d874c6e91e73 100644
--- a/librdmacm/man/rdma_xclient.1
+++ b/librdmacm/man/rdma_xclient.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_XCLIENT" 1 "2011-06-15" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 rdma_xclient \- RDMA CM communication client test program
diff --git a/librdmacm/man/rdma_xserver.1 b/librdmacm/man/rdma_xserver.1
index a26c96239389..4c12e2563319 100644
--- a/librdmacm/man/rdma_xserver.1
+++ b/librdmacm/man/rdma_xserver.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RDMA_XSERVER" 1 "2011-06-15" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 rdma_xserver \- RDMA CM communication server test program
diff --git a/librdmacm/man/riostream.1 b/librdmacm/man/riostream.1
index 14e77fa0f822..537302b60b12 100644
--- a/librdmacm/man/riostream.1
+++ b/librdmacm/man/riostream.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RIOSTREAM" 1 "2012-10-24" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 riostream \- zero-copy streaming over RDMA ping-pong test.
diff --git a/librdmacm/man/rping.1 b/librdmacm/man/rping.1
index 127d290d0cfd..fc3aa7b889a5 100644
--- a/librdmacm/man/rping.1
+++ b/librdmacm/man/rping.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RPING" 1 "2007-05-15" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 rping \- RDMA CM connection and RDMA ping-pong test.
diff --git a/librdmacm/man/rsocket.7.in b/librdmacm/man/rsocket.7.in
index 6adf156f4062..5b7776900262 100644
--- a/librdmacm/man/rsocket.7.in
+++ b/librdmacm/man/rsocket.7.in
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RSOCKET" 7 "2013-01-21" "librdmacm" "Librdmacm Programmer's Manual" librdmacm
 .SH NAME
 rsocket \- RDMA socket API
diff --git a/librdmacm/man/rstream.1 b/librdmacm/man/rstream.1
index f53679fd9f1a..7b1c25b2a2fc 100644
--- a/librdmacm/man/rstream.1
+++ b/librdmacm/man/rstream.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "RSTREAM" 1 "2011-11-16" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 rstream \- streaming over RDMA ping-pong test.
diff --git a/librdmacm/man/ucmatose.1 b/librdmacm/man/ucmatose.1
index 57e2c1b23bd9..56e0702989ae 100644
--- a/librdmacm/man/ucmatose.1
+++ b/librdmacm/man/ucmatose.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "UCMATOSE" 1 "2007-05-15" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 ucmatose \- RDMA CM connection and simple ping-pong test.
diff --git a/librdmacm/man/udaddy.1 b/librdmacm/man/udaddy.1
index 022018ec9449..bc84504347bd 100644
--- a/librdmacm/man/udaddy.1
+++ b/librdmacm/man/udaddy.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH "UDADDY" 1 "2007-05-15" "librdmacm" "librdmacm" librdmacm
 .SH NAME
 udaddy \- RDMA CM datagram setup and simple ping-pong test.
-- 
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

^ permalink raw reply related

* [PATCH rdma-core 5/8] ibverbs: Push COPYING file into individual files
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

Add missing copyright headers and delete the COPYING file.

Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
---
 libibverbs/COPYING                        | 378 ------------------------------
 libibverbs/man/ibv_alloc_mw.3             |   1 +
 libibverbs/man/ibv_alloc_pd.3             |   1 +
 libibverbs/man/ibv_asyncwatch.1           |   1 +
 libibverbs/man/ibv_attach_mcast.3         |   1 +
 libibverbs/man/ibv_bind_mw.3              |   1 +
 libibverbs/man/ibv_create_ah.3            |   1 +
 libibverbs/man/ibv_create_ah_from_wc.3    |   1 +
 libibverbs/man/ibv_create_comp_channel.3  |   1 +
 libibverbs/man/ibv_create_cq.3            |   1 +
 libibverbs/man/ibv_create_cq_ex.3         |   1 +
 libibverbs/man/ibv_create_flow.3          |   1 +
 libibverbs/man/ibv_create_qp.3            |   1 +
 libibverbs/man/ibv_create_qp_ex.3         |   1 +
 libibverbs/man/ibv_create_rwq_ind_table.3 |   1 +
 libibverbs/man/ibv_create_srq.3           |   1 +
 libibverbs/man/ibv_create_srq_ex.3        |   1 +
 libibverbs/man/ibv_create_wq.3            |   1 +
 libibverbs/man/ibv_devices.1              |   1 +
 libibverbs/man/ibv_devinfo.1              |   1 +
 libibverbs/man/ibv_event_type_str.3       |   1 +
 libibverbs/man/ibv_fork_init.3            |   1 +
 libibverbs/man/ibv_get_async_event.3      |   1 +
 libibverbs/man/ibv_get_cq_event.3         |   1 +
 libibverbs/man/ibv_get_device_guid.3      |   1 +
 libibverbs/man/ibv_get_device_list.3      |   1 +
 libibverbs/man/ibv_get_device_name.3      |   1 +
 libibverbs/man/ibv_get_srq_num.3          |   1 +
 libibverbs/man/ibv_inc_rkey.3             |   1 +
 libibverbs/man/ibv_modify_qp.3            |   1 +
 libibverbs/man/ibv_modify_srq.3           |   1 +
 libibverbs/man/ibv_modify_wq.3            |   1 +
 libibverbs/man/ibv_open_device.3          |   1 +
 libibverbs/man/ibv_open_qp.3              |   1 +
 libibverbs/man/ibv_open_xrcd.3            |   1 +
 libibverbs/man/ibv_poll_cq.3              |   1 +
 libibverbs/man/ibv_post_recv.3            |   1 +
 libibverbs/man/ibv_post_send.3            |   1 +
 libibverbs/man/ibv_post_srq_recv.3        |   1 +
 libibverbs/man/ibv_query_device.3         |   1 +
 libibverbs/man/ibv_query_device_ex.3      |   1 +
 libibverbs/man/ibv_query_gid.3            |   1 +
 libibverbs/man/ibv_query_pkey.3           |   1 +
 libibverbs/man/ibv_query_port.3           |   1 +
 libibverbs/man/ibv_query_qp.3             |   1 +
 libibverbs/man/ibv_query_rt_values_ex.3   |   1 +
 libibverbs/man/ibv_query_srq.3            |   1 +
 libibverbs/man/ibv_rate_to_mbps.3         |   1 +
 libibverbs/man/ibv_rate_to_mult.3         |   1 +
 libibverbs/man/ibv_rc_pingpong.1          |   1 +
 libibverbs/man/ibv_reg_mr.3               |   1 +
 libibverbs/man/ibv_req_notify_cq.3        |   1 +
 libibverbs/man/ibv_rereg_mr.3             |   1 +
 libibverbs/man/ibv_resize_cq.3            |   1 +
 libibverbs/man/ibv_srq_pingpong.1         |   1 +
 libibverbs/man/ibv_uc_pingpong.1          |   1 +
 libibverbs/man/ibv_ud_pingpong.1          |   1 +
 libibverbs/man/ibv_xsrq_pingpong.1        |   1 +
 libibverbs/neigh.c                        |   2 +
 libibverbs/neigh.h                        |   3 +
 libibverbs/nl1_compat.h                   |   3 +
 61 files changed, 65 insertions(+), 378 deletions(-)
 delete mode 100644 libibverbs/COPYING

diff --git a/libibverbs/COPYING b/libibverbs/COPYING
deleted file mode 100644
index ee1a79ffabf6..000000000000
diff --git a/libibverbs/man/ibv_alloc_mw.3 b/libibverbs/man/ibv_alloc_mw.3
index 366cefb82b2b..86acacabfd33 100644
--- a/libibverbs/man/ibv_alloc_mw.3
+++ b/libibverbs/man/ibv_alloc_mw.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_ALLOC_MW 3 2016-02-02 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_alloc_pd.3 b/libibverbs/man/ibv_alloc_pd.3
index 63e1aea24c8a..cc475f4a2301 100644
--- a/libibverbs/man/ibv_alloc_pd.3
+++ b/libibverbs/man/ibv_alloc_pd.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_ALLOC_PD 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_asyncwatch.1 b/libibverbs/man/ibv_asyncwatch.1
index 09f9f6505aa0..ae1011757315 100644
--- a/libibverbs/man/ibv_asyncwatch.1
+++ b/libibverbs/man/ibv_asyncwatch.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_ASYNCWATCH 1 "August 30, 2005" "libibverbs" "USER COMMANDS"
 
 .SH NAME
diff --git a/libibverbs/man/ibv_attach_mcast.3 b/libibverbs/man/ibv_attach_mcast.3
index 722ac9f468e3..2ae1f5d08d4a 100644
--- a/libibverbs/man/ibv_attach_mcast.3
+++ b/libibverbs/man/ibv_attach_mcast.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_ATTACH_MCAST 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_bind_mw.3 b/libibverbs/man/ibv_bind_mw.3
index 2943cbc9fb77..af309d000dea 100644
--- a/libibverbs/man/ibv_bind_mw.3
+++ b/libibverbs/man/ibv_bind_mw.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_BIND_MW 3 2016-02-02 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_ah.3 b/libibverbs/man/ibv_create_ah.3
index becc7d1b860f..0ca219887d08 100644
--- a/libibverbs/man/ibv_create_ah.3
+++ b/libibverbs/man/ibv_create_ah.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_AH 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_ah_from_wc.3 b/libibverbs/man/ibv_create_ah_from_wc.3
index 8b92caf1e431..ec7d29f305b5 100644
--- a/libibverbs/man/ibv_create_ah_from_wc.3
+++ b/libibverbs/man/ibv_create_ah_from_wc.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_AH_FROM_WC 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_comp_channel.3 b/libibverbs/man/ibv_create_comp_channel.3
index 15a9618845c7..7460978835fc 100644
--- a/libibverbs/man/ibv_create_comp_channel.3
+++ b/libibverbs/man/ibv_create_comp_channel.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_COMP_CHANNEL 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_cq.3 b/libibverbs/man/ibv_create_cq.3
index 5dc333ec5217..98ea4d278286 100644
--- a/libibverbs/man/ibv_create_cq.3
+++ b/libibverbs/man/ibv_create_cq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_CQ 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_cq_ex.3 b/libibverbs/man/ibv_create_cq_ex.3
index ecaeb0ae69f2..a6ae7690dad6 100644
--- a/libibverbs/man/ibv_create_cq_ex.3
+++ b/libibverbs/man/ibv_create_cq_ex.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_CQ_EX 3 2016-05-08 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_flow.3 b/libibverbs/man/ibv_create_flow.3
index df6ddd37529d..8b6e47206f64 100644
--- a/libibverbs/man/ibv_create_flow.3
+++ b/libibverbs/man/ibv_create_flow.3
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_CREATE_FLOW 3 2016-03-15 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
 ibv_create_flow, ibv_destroy_flow \- create or destroy flow steering rules
diff --git a/libibverbs/man/ibv_create_qp.3 b/libibverbs/man/ibv_create_qp.3
index 7feeab2c0c5d..78d7f43c1378 100644
--- a/libibverbs/man/ibv_create_qp.3
+++ b/libibverbs/man/ibv_create_qp.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_QP 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_qp_ex.3 b/libibverbs/man/ibv_create_qp_ex.3
index 08cb92c1676f..c778d1596747 100644
--- a/libibverbs/man/ibv_create_qp_ex.3
+++ b/libibverbs/man/ibv_create_qp_ex.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_QP_EX 3 2013-06-26 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_rwq_ind_table.3 b/libibverbs/man/ibv_create_rwq_ind_table.3
index 2b060b558c9c..176a5f14990f 100644
--- a/libibverbs/man/ibv_create_rwq_ind_table.3
+++ b/libibverbs/man/ibv_create_rwq_ind_table.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH CREATE_RWQ_IND_TBL 3  2016-07-27 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_srq.3 b/libibverbs/man/ibv_create_srq.3
index 7a826a1ee144..46ab8dd5b0bf 100644
--- a/libibverbs/man/ibv_create_srq.3
+++ b/libibverbs/man/ibv_create_srq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_SRQ 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_srq_ex.3 b/libibverbs/man/ibv_create_srq_ex.3
index 9151d6ea5541..c0319067b0f5 100644
--- a/libibverbs/man/ibv_create_srq_ex.3
+++ b/libibverbs/man/ibv_create_srq_ex.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_SRQ_EX 3 2013-06-26 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_create_wq.3 b/libibverbs/man/ibv_create_wq.3
index 1ee584aee938..aad67416b84e 100644
--- a/libibverbs/man/ibv_create_wq.3
+++ b/libibverbs/man/ibv_create_wq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_CREATE_WQ 3 2016-07-27 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_devices.1 b/libibverbs/man/ibv_devices.1
index 99b27e5c3b9d..ffd57f8e6929 100644
--- a/libibverbs/man/ibv_devices.1
+++ b/libibverbs/man/ibv_devices.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_DEVICES 1 "August 30, 2005" "libibverbs" "USER COMMANDS"
 
 .SH NAME
diff --git a/libibverbs/man/ibv_devinfo.1 b/libibverbs/man/ibv_devinfo.1
index 70f7ed2e67d7..b5e9a58a8b13 100644
--- a/libibverbs/man/ibv_devinfo.1
+++ b/libibverbs/man/ibv_devinfo.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_DEVINFO 1 "August 30, 2005" "libibverbs" "USER COMMANDS"
 
 .SH NAME
diff --git a/libibverbs/man/ibv_event_type_str.3 b/libibverbs/man/ibv_event_type_str.3
index f9ebc35bbacc..2ae8b1c7ee35 100644
--- a/libibverbs/man/ibv_event_type_str.3
+++ b/libibverbs/man/ibv_event_type_str.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_EVENT_TYPE_STR 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_fork_init.3 b/libibverbs/man/ibv_fork_init.3
index acffe3cb7c67..012ea20a4bff 100644
--- a/libibverbs/man/ibv_fork_init.3
+++ b/libibverbs/man/ibv_fork_init.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_FORK_INIT 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_get_async_event.3 b/libibverbs/man/ibv_get_async_event.3
index a76dc0c908f6..85ce6e16cbd7 100644
--- a/libibverbs/man/ibv_get_async_event.3
+++ b/libibverbs/man/ibv_get_async_event.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_GET_ASYNC_EVENT 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_get_cq_event.3 b/libibverbs/man/ibv_get_cq_event.3
index 70b2572ebef3..a1a42e646691 100644
--- a/libibverbs/man/ibv_get_cq_event.3
+++ b/libibverbs/man/ibv_get_cq_event.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_GET_CQ_EVENT 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_get_device_guid.3 b/libibverbs/man/ibv_get_device_guid.3
index 8cbe0e7f276a..4652614033ea 100644
--- a/libibverbs/man/ibv_get_device_guid.3
+++ b/libibverbs/man/ibv_get_device_guid.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_GET_DEVICE_GUID 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_get_device_list.3 b/libibverbs/man/ibv_get_device_list.3
index 96de554eaa38..71c4a740ec23 100644
--- a/libibverbs/man/ibv_get_device_list.3
+++ b/libibverbs/man/ibv_get_device_list.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_GET_DEVICE_LIST 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_get_device_name.3 b/libibverbs/man/ibv_get_device_name.3
index b6cb491bfd9b..ff9fa7fca9f5 100644
--- a/libibverbs/man/ibv_get_device_name.3
+++ b/libibverbs/man/ibv_get_device_name.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_GET_DEVICE_NAME 3  2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_get_srq_num.3 b/libibverbs/man/ibv_get_srq_num.3
index 00e4fb430519..4a1c92f32a22 100644
--- a/libibverbs/man/ibv_get_srq_num.3
+++ b/libibverbs/man/ibv_get_srq_num.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_GET_SRQ_NUM 3 2013-06-26 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_inc_rkey.3 b/libibverbs/man/ibv_inc_rkey.3
index 930368bef3b9..5c54a68bf344 100644
--- a/libibverbs/man/ibv_inc_rkey.3
+++ b/libibverbs/man/ibv_inc_rkey.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_INC_RKEY 3 2015-01-29 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_modify_qp.3 b/libibverbs/man/ibv_modify_qp.3
index cb3faaa089de..66a4974af5ff 100644
--- a/libibverbs/man/ibv_modify_qp.3
+++ b/libibverbs/man/ibv_modify_qp.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_MODIFY_QP 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_modify_srq.3 b/libibverbs/man/ibv_modify_srq.3
index 9cc04974569e..5233922896df 100644
--- a/libibverbs/man/ibv_modify_srq.3
+++ b/libibverbs/man/ibv_modify_srq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_MODIFY_SRQ 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_modify_wq.3 b/libibverbs/man/ibv_modify_wq.3
index cf3786437a88..f17faedfa5a7 100644
--- a/libibverbs/man/ibv_modify_wq.3
+++ b/libibverbs/man/ibv_modify_wq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_MODIFY_WQ 3 2016-07-27 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_open_device.3 b/libibverbs/man/ibv_open_device.3
index ed2226c8612a..cae2c4d32f0d 100644
--- a/libibverbs/man/ibv_open_device.3
+++ b/libibverbs/man/ibv_open_device.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_OPEN_DEVICE 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_open_qp.3 b/libibverbs/man/ibv_open_qp.3
index 71b5d464e378..e25e93389087 100644
--- a/libibverbs/man/ibv_open_qp.3
+++ b/libibverbs/man/ibv_open_qp.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_OPEN_QP 3 2011-08-12 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_open_xrcd.3 b/libibverbs/man/ibv_open_xrcd.3
index b9724bfa0c5f..239af2da3f63 100644
--- a/libibverbs/man/ibv_open_xrcd.3
+++ b/libibverbs/man/ibv_open_xrcd.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_OPEN_XRCD 3 2011-06-17 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_poll_cq.3 b/libibverbs/man/ibv_poll_cq.3
index bbf48ff2011b..cf3266bfa8ed 100644
--- a/libibverbs/man/ibv_poll_cq.3
+++ b/libibverbs/man/ibv_poll_cq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_POLL_CQ 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_post_recv.3 b/libibverbs/man/ibv_post_recv.3
index 4e65c81f773c..affca74cfd2f 100644
--- a/libibverbs/man/ibv_post_recv.3
+++ b/libibverbs/man/ibv_post_recv.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_POST_RECV 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_post_send.3 b/libibverbs/man/ibv_post_send.3
index c45eb0122dcd..ebbbb806882e 100644
--- a/libibverbs/man/ibv_post_send.3
+++ b/libibverbs/man/ibv_post_send.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_POST_SEND 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_post_srq_recv.3 b/libibverbs/man/ibv_post_srq_recv.3
index 073972bd2b93..51d1516bd255 100644
--- a/libibverbs/man/ibv_post_srq_recv.3
+++ b/libibverbs/man/ibv_post_srq_recv.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_POST_SRQ_RECV 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_query_device.3 b/libibverbs/man/ibv_query_device.3
index afc757371b7c..35daa53fee39 100644
--- a/libibverbs/man/ibv_query_device.3
+++ b/libibverbs/man/ibv_query_device.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_QUERY_DEVICE 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_query_device_ex.3 b/libibverbs/man/ibv_query_device_ex.3
index 88c8ce4e48fa..4da63a08f825 100644
--- a/libibverbs/man/ibv_query_device_ex.3
+++ b/libibverbs/man/ibv_query_device_ex.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_QUERY_DEVICE_EX 3 2014-12-17 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_query_gid.3 b/libibverbs/man/ibv_query_gid.3
index b3a1b0fe05e7..45e128bcd1b0 100644
--- a/libibverbs/man/ibv_query_gid.3
+++ b/libibverbs/man/ibv_query_gid.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_QUERY_GID 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_query_pkey.3 b/libibverbs/man/ibv_query_pkey.3
index 96830491b4e8..3af40443bf5c 100644
--- a/libibverbs/man/ibv_query_pkey.3
+++ b/libibverbs/man/ibv_query_pkey.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_QUERY_PKEY 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_query_port.3 b/libibverbs/man/ibv_query_port.3
index 9bedd90e111d..6e480d6c166f 100644
--- a/libibverbs/man/ibv_query_port.3
+++ b/libibverbs/man/ibv_query_port.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_QUERY_PORT 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_query_qp.3 b/libibverbs/man/ibv_query_qp.3
index 3893ec8978e7..907bc56a52ef 100644
--- a/libibverbs/man/ibv_query_qp.3
+++ b/libibverbs/man/ibv_query_qp.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_QUERY_QP 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_query_rt_values_ex.3 b/libibverbs/man/ibv_query_rt_values_ex.3
index fcc460cd179c..8ff5b6634d28 100644
--- a/libibverbs/man/ibv_query_rt_values_ex.3
+++ b/libibverbs/man/ibv_query_rt_values_ex.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_QUERY_RT_VALUES_EX 3 2016-2-20 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_query_srq.3 b/libibverbs/man/ibv_query_srq.3
index 05519aa61441..8a35ce03d76b 100644
--- a/libibverbs/man/ibv_query_srq.3
+++ b/libibverbs/man/ibv_query_srq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_QUERY_SRQ 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_rate_to_mbps.3 b/libibverbs/man/ibv_rate_to_mbps.3
index 089db0140bcf..27e8724b5fa3 100644
--- a/libibverbs/man/ibv_rate_to_mbps.3
+++ b/libibverbs/man/ibv_rate_to_mbps.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_RATE_TO_MBPS 3 2012-03-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_rate_to_mult.3 b/libibverbs/man/ibv_rate_to_mult.3
index fb57ff823e2f..6e2a59ddf109 100644
--- a/libibverbs/man/ibv_rate_to_mult.3
+++ b/libibverbs/man/ibv_rate_to_mult.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_RATE_TO_MULT 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_rc_pingpong.1 b/libibverbs/man/ibv_rc_pingpong.1
index d213c6ffab9e..865bbcb6b0a5 100644
--- a/libibverbs/man/ibv_rc_pingpong.1
+++ b/libibverbs/man/ibv_rc_pingpong.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_RC_PINGPONG 1 "August 30, 2005" "libibverbs" "USER COMMANDS"
 
 .SH NAME
diff --git a/libibverbs/man/ibv_reg_mr.3 b/libibverbs/man/ibv_reg_mr.3
index cf151113070c..d3f09c0dad9a 100644
--- a/libibverbs/man/ibv_reg_mr.3
+++ b/libibverbs/man/ibv_reg_mr.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_REG_MR 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_req_notify_cq.3 b/libibverbs/man/ibv_req_notify_cq.3
index 47d45fed8174..1d1d62130d7b 100644
--- a/libibverbs/man/ibv_req_notify_cq.3
+++ b/libibverbs/man/ibv_req_notify_cq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_REQ_NOTIFY_CQ 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_rereg_mr.3 b/libibverbs/man/ibv_rereg_mr.3
index a67843772bd4..ca8fc4e4d9a1 100644
--- a/libibverbs/man/ibv_rereg_mr.3
+++ b/libibverbs/man/ibv_rereg_mr.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_REREG_MR 3 2016-03-13 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_resize_cq.3 b/libibverbs/man/ibv_resize_cq.3
index fbb1ebd6cd6d..b15950103733 100644
--- a/libibverbs/man/ibv_resize_cq.3
+++ b/libibverbs/man/ibv_resize_cq.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH IBV_RESIZE_CQ 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
 .SH "NAME"
diff --git a/libibverbs/man/ibv_srq_pingpong.1 b/libibverbs/man/ibv_srq_pingpong.1
index d50f70e63315..dddbd029e625 100644
--- a/libibverbs/man/ibv_srq_pingpong.1
+++ b/libibverbs/man/ibv_srq_pingpong.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_SRQ_PINGPONG 1 "August 30, 2005" "libibverbs" "USER COMMANDS"
 
 .SH NAME
diff --git a/libibverbs/man/ibv_uc_pingpong.1 b/libibverbs/man/ibv_uc_pingpong.1
index ec97eb0a54f6..88c0417cf294 100644
--- a/libibverbs/man/ibv_uc_pingpong.1
+++ b/libibverbs/man/ibv_uc_pingpong.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_UC_PINGPONG 1 "August 30, 2005" "libibverbs" "USER COMMANDS"
 
 .SH NAME
diff --git a/libibverbs/man/ibv_ud_pingpong.1 b/libibverbs/man/ibv_ud_pingpong.1
index a05af8d6b80f..594aeb6711a1 100644
--- a/libibverbs/man/ibv_ud_pingpong.1
+++ b/libibverbs/man/ibv_ud_pingpong.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_UD_PINGPONG 1 "August 30, 2005" "libibverbs" "USER COMMANDS"
 
 .SH NAME
diff --git a/libibverbs/man/ibv_xsrq_pingpong.1 b/libibverbs/man/ibv_xsrq_pingpong.1
index db4a988bd432..ef2ee3c12c9b 100644
--- a/libibverbs/man/ibv_xsrq_pingpong.1
+++ b/libibverbs/man/ibv_xsrq_pingpong.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBV_XSRQ_PINGPONG 1 "May 24, 2016" "libibverbs" "USER COMMANDS"
 
 .SH NAME
diff --git a/libibverbs/neigh.c b/libibverbs/neigh.c
index 1856aab74842..12e58cd4b63c 100644
--- a/libibverbs/neigh.c
+++ b/libibverbs/neigh.c
@@ -1,3 +1,5 @@
+/* Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
+ */
 
 #include "config.h"
 #include <net/if_packet.h>
diff --git a/libibverbs/neigh.h b/libibverbs/neigh.h
index 61dfd85264b7..88211bf2f489 100644
--- a/libibverbs/neigh.h
+++ b/libibverbs/neigh.h
@@ -1,3 +1,6 @@
+/* Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
+ */
+
 #ifndef _NEIGH_H_
 #define _NEIGH_H_
 
diff --git a/libibverbs/nl1_compat.h b/libibverbs/nl1_compat.h
index 809259dce561..e0f4d8199b73 100644
--- a/libibverbs/nl1_compat.h
+++ b/libibverbs/nl1_compat.h
@@ -1,3 +1,6 @@
+/* Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
+ */
+
 #ifndef _NL1_COMPAT_H_
 #define _NL1_COMPAT_H_
 
-- 
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

^ permalink raw reply related

* [PATCH rdma-core 4/8] umad: Push COPYING file into individual files
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

Add missing copyright headers and delete the COPYING file.

Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
---
 libibumad/COPYING                     | 377 ----------------------------------
 libibumad/man/umad_addr_dump.3        |   1 +
 libibumad/man/umad_alloc.3            |   1 +
 libibumad/man/umad_class_str.3        |   1 +
 libibumad/man/umad_close_port.3       |   1 +
 libibumad/man/umad_debug.3            |   1 +
 libibumad/man/umad_dump.3             |   1 +
 libibumad/man/umad_free.3             |   1 +
 libibumad/man/umad_get_ca.3           |   1 +
 libibumad/man/umad_get_ca_portguids.3 |   1 +
 libibumad/man/umad_get_cas_names.3    |   1 +
 libibumad/man/umad_get_fd.3           |   1 +
 libibumad/man/umad_get_issm_path.3    |   1 +
 libibumad/man/umad_get_mad.3          |   1 +
 libibumad/man/umad_get_mad_addr.3     |   1 +
 libibumad/man/umad_get_pkey.3         |   1 +
 libibumad/man/umad_get_port.3         |   1 +
 libibumad/man/umad_init.3             |   1 +
 libibumad/man/umad_open_port.3        |   1 +
 libibumad/man/umad_poll.3             |   1 +
 libibumad/man/umad_recv.3             |   1 +
 libibumad/man/umad_register.3         |   1 +
 libibumad/man/umad_register2.3        |   1 +
 libibumad/man/umad_register_oui.3     |   1 +
 libibumad/man/umad_send.3             |   1 +
 libibumad/man/umad_set_addr.3         |   1 +
 libibumad/man/umad_set_addr_net.3     |   1 +
 libibumad/man/umad_set_grh.3          |   1 +
 libibumad/man/umad_set_grh_net.3      |   1 +
 libibumad/man/umad_set_pkey.3         |   1 +
 libibumad/man/umad_size.3             |   1 +
 libibumad/man/umad_status.3           |   1 +
 libibumad/man/umad_unregister.3       |   1 +
 33 files changed, 32 insertions(+), 377 deletions(-)
 delete mode 100644 libibumad/COPYING

diff --git a/libibumad/COPYING b/libibumad/COPYING
deleted file mode 100644
index c7f06f69e99e..000000000000
diff --git a/libibumad/man/umad_addr_dump.3 b/libibumad/man/umad_addr_dump.3
index 7f09214925e4..d082c37a0c16 100644
--- a/libibumad/man/umad_addr_dump.3
+++ b/libibumad/man/umad_addr_dump.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_ADDR_DUMP 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_alloc.3 b/libibumad/man/umad_alloc.3
index 5c65f3ece42b..b5ef752a2a5c 100644
--- a/libibumad/man/umad_alloc.3
+++ b/libibumad/man/umad_alloc.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_ALLOC 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_class_str.3 b/libibumad/man/umad_class_str.3
index 5bc813b68cdd..9adb0fd505b9 100644
--- a/libibumad/man/umad_class_str.3
+++ b/libibumad/man/umad_class_str.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_CLASS_STR 3  "Feb 15, 2013" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_close_port.3 b/libibumad/man/umad_close_port.3
index 2c56d906b9b4..341c2d271926 100644
--- a/libibumad/man/umad_close_port.3
+++ b/libibumad/man/umad_close_port.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_OPEN_PORT 3  "May 11, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_debug.3 b/libibumad/man/umad_debug.3
index b7da2b01f0e5..224d5c016984 100644
--- a/libibumad/man/umad_debug.3
+++ b/libibumad/man/umad_debug.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_DEBUG 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_dump.3 b/libibumad/man/umad_dump.3
index 101a2e0c4997..c01d51bf3044 100644
--- a/libibumad/man/umad_dump.3
+++ b/libibumad/man/umad_dump.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_DUMP 3  "May 17, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_free.3 b/libibumad/man/umad_free.3
index ac397942ea76..e3473170a389 100644
--- a/libibumad/man/umad_free.3
+++ b/libibumad/man/umad_free.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_FREE 3  "May 17, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_ca.3 b/libibumad/man/umad_get_ca.3
index 8de61d06d6d3..760b6b65cea8 100644
--- a/libibumad/man/umad_get_ca.3
+++ b/libibumad/man/umad_get_ca.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_CA 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_ca_portguids.3 b/libibumad/man/umad_get_ca_portguids.3
index d002c2a4edb1..ae8418eff534 100644
--- a/libibumad/man/umad_get_ca_portguids.3
+++ b/libibumad/man/umad_get_ca_portguids.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_CA_PORTGUIDS 3  "August 8, 2016" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_cas_names.3 b/libibumad/man/umad_get_cas_names.3
index 85e76f815ace..0366c16e52cf 100644
--- a/libibumad/man/umad_get_cas_names.3
+++ b/libibumad/man/umad_get_cas_names.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_CAS_NAMES 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_fd.3 b/libibumad/man/umad_get_fd.3
index 49aa83976cee..5fe531118ac0 100644
--- a/libibumad/man/umad_get_fd.3
+++ b/libibumad/man/umad_get_fd.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_FD 3  "May 17, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_issm_path.3 b/libibumad/man/umad_get_issm_path.3
index ac538c935769..4abef18eef28 100644
--- a/libibumad/man/umad_get_issm_path.3
+++ b/libibumad/man/umad_get_issm_path.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_ISSM_PATH 3  "Oct 18, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_mad.3 b/libibumad/man/umad_get_mad.3
index 78c59ac74331..ac56c4863eaa 100644
--- a/libibumad/man/umad_get_mad.3
+++ b/libibumad/man/umad_get_mad.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_MAD 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_mad_addr.3 b/libibumad/man/umad_get_mad_addr.3
index 5da86c247546..4a92b7b0a415 100644
--- a/libibumad/man/umad_get_mad_addr.3
+++ b/libibumad/man/umad_get_mad_addr.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_MAD_ADDR 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_pkey.3 b/libibumad/man/umad_get_pkey.3
index a03c0a6adffb..b9dd1be7cd75 100644
--- a/libibumad/man/umad_get_pkey.3
+++ b/libibumad/man/umad_get_pkey.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_PKEY 3  "Jan 15, 2008" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_get_port.3 b/libibumad/man/umad_get_port.3
index 8dfa1d61933f..44dbfb0a8895 100644
--- a/libibumad/man/umad_get_port.3
+++ b/libibumad/man/umad_get_port.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_GET_PORT 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_init.3 b/libibumad/man/umad_init.3
index 4c22d927d8ec..64366b9de7e4 100644
--- a/libibumad/man/umad_init.3
+++ b/libibumad/man/umad_init.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_INIT 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_open_port.3 b/libibumad/man/umad_open_port.3
index 53f2946ea814..cac01a71026b 100644
--- a/libibumad/man/umad_open_port.3
+++ b/libibumad/man/umad_open_port.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_OPEN_PORT 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_poll.3 b/libibumad/man/umad_poll.3
index 93f9425c5f0d..57b7a6536bdd 100644
--- a/libibumad/man/umad_poll.3
+++ b/libibumad/man/umad_poll.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_POLL 3  "October 23, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_recv.3 b/libibumad/man/umad_recv.3
index 56e4ca7708be..93eec993c81e 100644
--- a/libibumad/man/umad_recv.3
+++ b/libibumad/man/umad_recv.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_RECV 3  "May 11, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_register.3 b/libibumad/man/umad_register.3
index eb6b9862574c..58b88f3a3be9 100644
--- a/libibumad/man/umad_register.3
+++ b/libibumad/man/umad_register.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_REGISTER 3  "May 11, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_register2.3 b/libibumad/man/umad_register2.3
index 228ce268e004..74e87943674b 100644
--- a/libibumad/man/umad_register2.3
+++ b/libibumad/man/umad_register2.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_REGISTER2 3  "March 25, 2014" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_register_oui.3 b/libibumad/man/umad_register_oui.3
index 4e8171c5cbaa..19430a93250d 100644
--- a/libibumad/man/umad_register_oui.3
+++ b/libibumad/man/umad_register_oui.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_REGISTER_OUI 3  "May 17, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_send.3 b/libibumad/man/umad_send.3
index b85bc564c0b6..59af2cb9842a 100644
--- a/libibumad/man/umad_send.3
+++ b/libibumad/man/umad_send.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_SEND 3  "May 11, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_set_addr.3 b/libibumad/man/umad_set_addr.3
index 82f81908e0b5..03ac8625cd97 100644
--- a/libibumad/man/umad_set_addr.3
+++ b/libibumad/man/umad_set_addr.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_SET_ADDR 3  "May 17, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_set_addr_net.3 b/libibumad/man/umad_set_addr_net.3
index 1f409c2a1540..778faf41cc19 100644
--- a/libibumad/man/umad_set_addr_net.3
+++ b/libibumad/man/umad_set_addr_net.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_SET_ADDR_NET 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_set_grh.3 b/libibumad/man/umad_set_grh.3
index 17fe73b74bae..4ff52ec20012 100644
--- a/libibumad/man/umad_set_grh.3
+++ b/libibumad/man/umad_set_grh.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_SET_GRH 3  "May 24, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_set_grh_net.3 b/libibumad/man/umad_set_grh_net.3
index 8425b3fbbc75..802b575dcfcc 100644
--- a/libibumad/man/umad_set_grh_net.3
+++ b/libibumad/man/umad_set_grh_net.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_SET_GRH_NET 3  "May 24, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_set_pkey.3 b/libibumad/man/umad_set_pkey.3
index d6b86064247d..23e858eceb12 100644
--- a/libibumad/man/umad_set_pkey.3
+++ b/libibumad/man/umad_set_pkey.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_SET_PKEY 3  "June 20, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_size.3 b/libibumad/man/umad_size.3
index db861ef21536..74737ccca08b 100644
--- a/libibumad/man/umad_size.3
+++ b/libibumad/man/umad_size.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_SIZE 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_status.3 b/libibumad/man/umad_status.3
index 3978b84d04b2..fd5430a3e480 100644
--- a/libibumad/man/umad_status.3
+++ b/libibumad/man/umad_status.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_STATUS 3  "May 17, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
diff --git a/libibumad/man/umad_unregister.3 b/libibumad/man/umad_unregister.3
index 472afec6e779..785d22dbe065 100644
--- a/libibumad/man/umad_unregister.3
+++ b/libibumad/man/umad_unregister.3
@@ -1,4 +1,5 @@
 .\" -*- nroff -*-
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .\"
 .TH UMAD_UNREGISTER 3  "May 21, 2007" "OpenIB" "OpenIB Programmer\'s Manual"
 .SH "NAME"
-- 
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

^ permalink raw reply related

* [PATCH rdma-core 3/8] srp_daemon: Push COPYING file into individual files
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

Add missing copyright headers and delete the COPYING file.

Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
---
 srp_daemon/COPYING         | 376 ---------------------------------------------
 srp_daemon/ibsrpdm.1       |   1 +
 srp_daemon/srp_daemon.1.in |   1 +
 srp_daemon/srpd.in         |   1 +
 4 files changed, 3 insertions(+), 376 deletions(-)
 delete mode 100644 srp_daemon/COPYING

diff --git a/srp_daemon/COPYING b/srp_daemon/COPYING
deleted file mode 100644
index 34994d31ea0b..000000000000
diff --git a/srp_daemon/ibsrpdm.1 b/srp_daemon/ibsrpdm.1
index f1c1d2a78ee3..6e7fc0d6e036 100644
--- a/srp_daemon/ibsrpdm.1
+++ b/srp_daemon/ibsrpdm.1
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH IBSRPDM 1 "August 30, 2005" "OpenFabrics" "USER COMMANDS"
 
 .SH NAME
diff --git a/srp_daemon/srp_daemon.1.in b/srp_daemon/srp_daemon.1.in
index 6ee114284780..008d53a2a55a 100644
--- a/srp_daemon/srp_daemon.1.in
+++ b/srp_daemon/srp_daemon.1.in
@@ -1,3 +1,4 @@
+.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 .TH SRP_DAEMON 1 "September 5, 2006" "OpenFabrics" "USER COMMANDS"
 
 .SH NAME
diff --git a/srp_daemon/srpd.in b/srp_daemon/srpd.in
index d77579170a3b..7e2316f6fbc4 100755
--- a/srp_daemon/srpd.in
+++ b/srp_daemon/srpd.in
@@ -1,4 +1,5 @@
 #!/bin/bash
+# Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
 #
 # Manage the SRP client daemon (srp_daemon)
 #
-- 
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

^ permalink raw reply related

* [PATCH rdma-core 2/8] iwpmd: Delete COPYING file
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

This COPYING has the default copyright.

Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
---
 iwpmd/COPYING | 372 ----------------------------------------------------------
 1 file changed, 372 deletions(-)
 delete mode 100644 iwpmd/COPYING

diff --git a/iwpmd/COPYING b/iwpmd/COPYING
deleted file mode 100644
index b275c841fb59..000000000000
-- 
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

^ permalink raw reply

* [PATCH rdma-core 1/8] ibcm: Delete COPYING file
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1478803660-27959-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

All files have copyright headers.

Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
---
 libibcm/COPYING | 378 --------------------------------------------------------
 1 file changed, 378 deletions(-)
 delete mode 100644 libibcm/COPYING

diff --git a/libibcm/COPYING b/libibcm/COPYING
deleted file mode 100644
index ee1a79ffabf6..000000000000
-- 
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

^ permalink raw reply

* [PATCH rdma-core 0/8] Eliminate most loose COPYING files
From: Jason Gunthorpe @ 2016-11-10 18:47 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA

This is done by pushing the copyright statement into the files in the
subdirectory without copyright.

https://github.com/linux-rdma/rdma-core/pull/39

Jason Gunthorpe (8):
  ibcm: Delete COPYING file
  iwpmd: Delete COPYING file
  srp_daemon: Push COPYING file into individual files
  umad: Push COPYING file into individual files
  ibverbs: Push COPYING file into individual files
  rdmacm: Push COPYING file into individual files
  ibacm: Push COPYING file into individual files
  mlx4: Push COPYING file into individual files

 ibacm/COPYING                              | 378 -----------------------------
 ibacm/ibacm.init.in                        |   1 +
 ibacm/man/ib_acme.1                        |   1 +
 ibacm/man/ibacm.1                          |   1 +
 ibacm/man/ibacm.7                          |   1 +
 ibacm/man/ibacm_prov.7.in                  |   1 +
 iwpmd/COPYING                              | 372 ----------------------------
 libibcm/COPYING                            | 378 -----------------------------
 libibumad/COPYING                          | 377 ----------------------------
 libibumad/man/umad_addr_dump.3             |   1 +
 libibumad/man/umad_alloc.3                 |   1 +
 libibumad/man/umad_class_str.3             |   1 +
 libibumad/man/umad_close_port.3            |   1 +
 libibumad/man/umad_debug.3                 |   1 +
 libibumad/man/umad_dump.3                  |   1 +
 libibumad/man/umad_free.3                  |   1 +
 libibumad/man/umad_get_ca.3                |   1 +
 libibumad/man/umad_get_ca_portguids.3      |   1 +
 libibumad/man/umad_get_cas_names.3         |   1 +
 libibumad/man/umad_get_fd.3                |   1 +
 libibumad/man/umad_get_issm_path.3         |   1 +
 libibumad/man/umad_get_mad.3               |   1 +
 libibumad/man/umad_get_mad_addr.3          |   1 +
 libibumad/man/umad_get_pkey.3              |   1 +
 libibumad/man/umad_get_port.3              |   1 +
 libibumad/man/umad_init.3                  |   1 +
 libibumad/man/umad_open_port.3             |   1 +
 libibumad/man/umad_poll.3                  |   1 +
 libibumad/man/umad_recv.3                  |   1 +
 libibumad/man/umad_register.3              |   1 +
 libibumad/man/umad_register2.3             |   1 +
 libibumad/man/umad_register_oui.3          |   1 +
 libibumad/man/umad_send.3                  |   1 +
 libibumad/man/umad_set_addr.3              |   1 +
 libibumad/man/umad_set_addr_net.3          |   1 +
 libibumad/man/umad_set_grh.3               |   1 +
 libibumad/man/umad_set_grh_net.3           |   1 +
 libibumad/man/umad_set_pkey.3              |   1 +
 libibumad/man/umad_size.3                  |   1 +
 libibumad/man/umad_status.3                |   1 +
 libibumad/man/umad_unregister.3            |   1 +
 libibverbs/COPYING                         | 378 -----------------------------
 libibverbs/man/ibv_alloc_mw.3              |   1 +
 libibverbs/man/ibv_alloc_pd.3              |   1 +
 libibverbs/man/ibv_asyncwatch.1            |   1 +
 libibverbs/man/ibv_attach_mcast.3          |   1 +
 libibverbs/man/ibv_bind_mw.3               |   1 +
 libibverbs/man/ibv_create_ah.3             |   1 +
 libibverbs/man/ibv_create_ah_from_wc.3     |   1 +
 libibverbs/man/ibv_create_comp_channel.3   |   1 +
 libibverbs/man/ibv_create_cq.3             |   1 +
 libibverbs/man/ibv_create_cq_ex.3          |   1 +
 libibverbs/man/ibv_create_flow.3           |   1 +
 libibverbs/man/ibv_create_qp.3             |   1 +
 libibverbs/man/ibv_create_qp_ex.3          |   1 +
 libibverbs/man/ibv_create_rwq_ind_table.3  |   1 +
 libibverbs/man/ibv_create_srq.3            |   1 +
 libibverbs/man/ibv_create_srq_ex.3         |   1 +
 libibverbs/man/ibv_create_wq.3             |   1 +
 libibverbs/man/ibv_devices.1               |   1 +
 libibverbs/man/ibv_devinfo.1               |   1 +
 libibverbs/man/ibv_event_type_str.3        |   1 +
 libibverbs/man/ibv_fork_init.3             |   1 +
 libibverbs/man/ibv_get_async_event.3       |   1 +
 libibverbs/man/ibv_get_cq_event.3          |   1 +
 libibverbs/man/ibv_get_device_guid.3       |   1 +
 libibverbs/man/ibv_get_device_list.3       |   1 +
 libibverbs/man/ibv_get_device_name.3       |   1 +
 libibverbs/man/ibv_get_srq_num.3           |   1 +
 libibverbs/man/ibv_inc_rkey.3              |   1 +
 libibverbs/man/ibv_modify_qp.3             |   1 +
 libibverbs/man/ibv_modify_srq.3            |   1 +
 libibverbs/man/ibv_modify_wq.3             |   1 +
 libibverbs/man/ibv_open_device.3           |   1 +
 libibverbs/man/ibv_open_qp.3               |   1 +
 libibverbs/man/ibv_open_xrcd.3             |   1 +
 libibverbs/man/ibv_poll_cq.3               |   1 +
 libibverbs/man/ibv_post_recv.3             |   1 +
 libibverbs/man/ibv_post_send.3             |   1 +
 libibverbs/man/ibv_post_srq_recv.3         |   1 +
 libibverbs/man/ibv_query_device.3          |   1 +
 libibverbs/man/ibv_query_device_ex.3       |   1 +
 libibverbs/man/ibv_query_gid.3             |   1 +
 libibverbs/man/ibv_query_pkey.3            |   1 +
 libibverbs/man/ibv_query_port.3            |   1 +
 libibverbs/man/ibv_query_qp.3              |   1 +
 libibverbs/man/ibv_query_rt_values_ex.3    |   1 +
 libibverbs/man/ibv_query_srq.3             |   1 +
 libibverbs/man/ibv_rate_to_mbps.3          |   1 +
 libibverbs/man/ibv_rate_to_mult.3          |   1 +
 libibverbs/man/ibv_rc_pingpong.1           |   1 +
 libibverbs/man/ibv_reg_mr.3                |   1 +
 libibverbs/man/ibv_req_notify_cq.3         |   1 +
 libibverbs/man/ibv_rereg_mr.3              |   1 +
 libibverbs/man/ibv_resize_cq.3             |   1 +
 libibverbs/man/ibv_srq_pingpong.1          |   1 +
 libibverbs/man/ibv_uc_pingpong.1           |   1 +
 libibverbs/man/ibv_ud_pingpong.1           |   1 +
 libibverbs/man/ibv_xsrq_pingpong.1         |   1 +
 libibverbs/neigh.c                         |   2 +
 libibverbs/neigh.h                         |   3 +
 libibverbs/nl1_compat.h                    |   3 +
 librdmacm/COPYING                          | 378 -----------------------------
 librdmacm/docs/rsocket                     |   1 +
 librdmacm/man/mckey.1                      |   1 +
 librdmacm/man/rcopy.1                      |   1 +
 librdmacm/man/rdma_accept.3                |   1 +
 librdmacm/man/rdma_ack_cm_event.3          |   1 +
 librdmacm/man/rdma_bind_addr.3             |   1 +
 librdmacm/man/rdma_client.1                |   1 +
 librdmacm/man/rdma_cm.7                    |   1 +
 librdmacm/man/rdma_connect.3               |   1 +
 librdmacm/man/rdma_create_ep.3             |   1 +
 librdmacm/man/rdma_create_event_channel.3  |   1 +
 librdmacm/man/rdma_create_id.3             |   1 +
 librdmacm/man/rdma_create_qp.3             |   1 +
 librdmacm/man/rdma_create_srq.3            |   1 +
 librdmacm/man/rdma_dereg_mr.3              |   1 +
 librdmacm/man/rdma_destroy_ep.3            |   1 +
 librdmacm/man/rdma_destroy_event_channel.3 |   1 +
 librdmacm/man/rdma_destroy_id.3            |   1 +
 librdmacm/man/rdma_destroy_qp.3            |   1 +
 librdmacm/man/rdma_destroy_srq.3           |   1 +
 librdmacm/man/rdma_disconnect.3            |   1 +
 librdmacm/man/rdma_event_str.3             |   1 +
 librdmacm/man/rdma_free_devices.3          |   1 +
 librdmacm/man/rdma_get_cm_event.3          |   1 +
 librdmacm/man/rdma_get_devices.3           |   1 +
 librdmacm/man/rdma_get_dst_port.3          |   1 +
 librdmacm/man/rdma_get_local_addr.3        |   1 +
 librdmacm/man/rdma_get_peer_addr.3         |   1 +
 librdmacm/man/rdma_get_recv_comp.3         |   1 +
 librdmacm/man/rdma_get_request.3           |   1 +
 librdmacm/man/rdma_get_send_comp.3         |   1 +
 librdmacm/man/rdma_get_src_port.3          |   1 +
 librdmacm/man/rdma_getaddrinfo.3           |   1 +
 librdmacm/man/rdma_join_multicast.3        |   1 +
 librdmacm/man/rdma_leave_multicast.3       |   1 +
 librdmacm/man/rdma_listen.3                |   1 +
 librdmacm/man/rdma_migrate_id.3            |   1 +
 librdmacm/man/rdma_notify.3                |   1 +
 librdmacm/man/rdma_post_read.3             |   1 +
 librdmacm/man/rdma_post_readv.3            |   1 +
 librdmacm/man/rdma_post_recv.3             |   1 +
 librdmacm/man/rdma_post_recvv.3            |   1 +
 librdmacm/man/rdma_post_send.3             |   1 +
 librdmacm/man/rdma_post_sendv.3            |   1 +
 librdmacm/man/rdma_post_ud_send.3          |   1 +
 librdmacm/man/rdma_post_write.3            |   1 +
 librdmacm/man/rdma_post_writev.3           |   1 +
 librdmacm/man/rdma_reg_msgs.3              |   1 +
 librdmacm/man/rdma_reg_read.3              |   1 +
 librdmacm/man/rdma_reg_write.3             |   1 +
 librdmacm/man/rdma_reject.3                |   1 +
 librdmacm/man/rdma_resolve_addr.3          |   1 +
 librdmacm/man/rdma_resolve_route.3         |   1 +
 librdmacm/man/rdma_server.1                |   1 +
 librdmacm/man/rdma_set_option.3            |   1 +
 librdmacm/man/rdma_xclient.1               |   1 +
 librdmacm/man/rdma_xserver.1               |   1 +
 librdmacm/man/riostream.1                  |   1 +
 librdmacm/man/rping.1                      |   1 +
 librdmacm/man/rsocket.7.in                 |   1 +
 librdmacm/man/rstream.1                    |   1 +
 librdmacm/man/ucmatose.1                   |   1 +
 librdmacm/man/udaddy.1                     |   1 +
 providers/mlx4/COPYING                     | 378 -----------------------------
 providers/mlx4/mmio.h                      |   2 +
 srp_daemon/COPYING                         | 376 ----------------------------
 srp_daemon/ibsrpdm.1                       |   1 +
 srp_daemon/srp_daemon.1.in                 |   1 +
 srp_daemon/srpd.in                         |   1 +
 172 files changed, 170 insertions(+), 3015 deletions(-)
 delete mode 100644 ibacm/COPYING
 delete mode 100644 iwpmd/COPYING
 delete mode 100644 libibcm/COPYING
 delete mode 100644 libibumad/COPYING
 delete mode 100644 libibverbs/COPYING
 delete mode 100644 librdmacm/COPYING
 delete mode 100644 providers/mlx4/COPYING
 delete mode 100644 srp_daemon/COPYING

-- 
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

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox