[PATCH v1 00/10] Allow dissociation after destroy for the ioctl methods

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Jason Gunthorpe <jgg@xxxxxxxxxxxx>

The previous series fixed this for the write methods, but the ioctl
methods had an additional problem where the ioctl parser relies on
datastructures stored in the driver's rodata.

This series solves this by revising how the parsing tree is stored in
memory. A new datastructure called 'uverbs_api' is introduced that builds
the rodata description into a proper kernel radix tree with an optimized
small value 'bkey' for attributes.

The new datastructure is designed to allow a driver to disassociate from
the runtime api description so that non-driver methods like destroy can
continue to work.

The major rework in datastructures and parsing of ioctl provides a nice
code simplification, source code size reduction and I measure
approximately a 6% reduction in ioctl syscall time overhead.

The downside is that this uses a bit more memory in the radix tree, but
that is likely negligible for RDMA.

This data structure design is intended to support future series that will
rework how the rodata description is stored to add more features, reduce
its size, and reduce the complexity required to build the rodata.

v1:
- For loop bug fig from Leon
- Missing check in lookup_get_fd_uobject from Leon
- Use rcu_assign_pointer when setting handler for sparse, from Leon
- Dead code from Michael
- Various comment and commit message edits

More testing has shown that the prior series introduced a bug related to
module unload of drivers when working with the mlx5 driver specific
objects. This series is needed to fix that bug, so I would like to apply it on
Friday.

Jason Gunthorpe (10):
  IB/uverbs: Have the core code create the uverbs_root_spec
  IB/uverbs: Build the specs into a radix tree at runtime
  IB/uverbs: Use uverbs_api to manage the object type inside the uobject
  IB/uverbs: Provide implementation private memory for the
    uverbs_attr_bundle
  IB/uverbs: Remove the ib_uverbs_attr pointer from each attr
  IB/uverbs: Add a simple allocator to uverbs_attr_bundle
  IB/uverbs: Use uverbs_alloc for allocations
  IB/uverbs: Use uverbs_api to unmarshal ioctl commands
  IB/uverbs: Remove struct uverbs_root_spec and all supporting code
  IB/uverbs: Do not check for device disassociation during ioctl

 drivers/infiniband/core/Makefile              |   5 +-
 drivers/infiniband/core/rdma_core.c           | 145 ++--
 drivers/infiniband/core/rdma_core.h           |  60 +-
 drivers/infiniband/core/uverbs.h              |   2 +-
 drivers/infiniband/core/uverbs_ioctl.c        | 675 ++++++++++--------
 drivers/infiniband/core/uverbs_ioctl_merge.c  | 664 -----------------
 drivers/infiniband/core/uverbs_main.c         |  40 +-
 drivers/infiniband/core/uverbs_std_types.c    |  33 -
 .../core/uverbs_std_types_counters.c          |  20 +-
 drivers/infiniband/core/uverbs_uapi.c         | 346 +++++++++
 drivers/infiniband/hw/mlx5/devx.c             |  83 +--
 drivers/infiniband/hw/mlx5/main.c             |  45 +-
 drivers/infiniband/hw/mlx5/mlx5_ib.h          |   1 +
 include/rdma/ib_verbs.h                       |   4 +-
 include/rdma/uverbs_ioctl.h                   | 301 ++++----
 include/rdma/uverbs_std_types.h               |  30 +-
 include/rdma/uverbs_types.h                   |   9 +-
 17 files changed, 1083 insertions(+), 1380 deletions(-)
 delete mode 100644 drivers/infiniband/core/uverbs_ioctl_merge.c
 create mode 100644 drivers/infiniband/core/uverbs_uapi.c

-- 
2.18.0




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux