On Tue, Jan 22, 2019 at 12:00:34PM +0200, Joel Nider wrote: > A short document regarding the user verbs interface implementation on > the kernel side. Also, the corresponding index entry in the > documentation tree. > > Signed-off-by: Joel Nider <joeln@xxxxxxxxxx> > Documentation/driver-api/index.rst | 1 + > Documentation/driver-api/infiniband.rst | 73 +++++++++++++++++++++++++++++++++ > 2 files changed, 74 insertions(+) > create mode 100644 Documentation/driver-api/infiniband.rst > > diff --git a/Documentation/driver-api/index.rst b/Documentation/driver-api/index.rst > index ab38ced..ecb3f8a5 100644 > +++ b/Documentation/driver-api/index.rst > @@ -28,6 +28,7 @@ available subsections can be seen below. > regulator > iio/index > input > + infiniband > usb/index > firewire > pci/index > diff --git a/Documentation/driver-api/infiniband.rst b/Documentation/driver-api/infiniband.rst > new file mode 100644 > index 0000000..2de47ff > +++ b/Documentation/driver-api/infiniband.rst > @@ -0,0 +1,73 @@ > +========================== > +Infiniband Interface Guide > +========================== > + > +This guide is for people who wish to understand the implementation details of > +handler functions in the Infiniband subsystem. There are currently two system > +calls for executing Infiniband commands: write() and ioctl(). Older commands > +are sent to the kernel via write()s on the device files described in > +:doc:`../userspace-api/rdma_user_verbs`. New commands must use the ioctl() > +method. For completeness, both mechanisms are described here. > + > +The interface between userspace and kernel is kept in sync by checking the > +version number. In the kernel, it is defined by IB_USER_VERBS_ABI_VERSION > +(in include/uapi/rdma/ib_user_verbs.h). > + > +Write system call > +----------------- > +The entry point to the kernel is the ib_uverbs_write() function, which is > +invoked as a response to the 'write' system call. The requested function is > +looked up from an array called uverbs_cmd_table which contains function pointers > +to the various command handlers. This array was deleted recently > +Write Command Handlers > +~~~~~~~~~~~~~~~~~~~~~~ > +These command handler functions are declared > +with the IB_VERBS_DECLARE_CMD macro in drivers/infiniband/core/uverbs.h. There > +are also extended commands, which are kept in a similar manner in the > +uverbs_ex_cmd_table. The extended commands use 64-bit values in the command > +header, as opposed to the 32-bit values used in the regular command table. IB_VERBS_DELCARE_CMD is also deleted > +Objects trees are declared using the DECLARE_UVERBS_OBJECT_TREE macro. This > +combines all of the objects. DECLARE_UVERBS_OBJECT_TREE as well Jason