RE: [EXT] Re: [PATCH v9 rdma-next 0/7] RDMA/qedr: Use the doorbell overflow recovery mechanism for RDMA

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

 



> From: Bernard Metzler <BMT@xxxxxxxxxxxxxx>
> Sent: Tuesday, September 3, 2019 2:37 PM
> 
> External Email
> 
> ----------------------------------------------------------------------
> -----"Michal Kalderon" <michal.kalderon@xxxxxxxxxxx> wrote: -----
> 
> >To: <mkalderon@xxxxxxxxxxx>, <aelior@xxxxxxxxxxx>, <jgg@xxxxxxxx>,
> ><dledford@xxxxxxxxxx>, <bmt@xxxxxxxxxxxxxx>,
> <galpress@xxxxxxxxxx>,
> ><sleybo@xxxxxxxxxx>, <leon@xxxxxxxxxx>
> >From: "Michal Kalderon" <michal.kalderon@xxxxxxxxxxx>
> >Date: 09/02/2019 06:25PM
> >Cc: <linux-rdma@xxxxxxxxxxxxxxx>, "Michal Kalderon"
> ><michal.kalderon@xxxxxxxxxxx>
> >Subject: [EXTERNAL] [PATCH v9 rdma-next 0/7] RDMA/qedr: Use the
> >doorbell overflow recovery mechanism for RDMA
> >
> >This patch series uses the doorbell overflow recovery mechanism
> >introduced in commit 36907cd5cd72 ("qed: Add doorbell overflow recovery
> >mechanism") for rdma ( RoCE and iWARP )
> >
> 
> 
> Hi Michal,
> 
> I wanted to try out things -- can you please help me:
> Where would that patch apply to? I tried rdma-next master and for-next. I
> am getting conflicts in drivers/infiniband/core/ib_core_uverbs.c. Is there any
> previous patch needed for this series?
It applies to rdma for-next branch. The ib_core_uverbs.c is a new file, 
Perhaps you have it from previous apply ? 

Please make sure you're synced to head and that you don't have the file. 
Let me know if it worked out, 

Thanks,
Michal 

> 
> Thanks very much and best regards,
> Bernard.
> 
> 
> >The first five patches modify the core code to contain helper functions
> >for managing mmap_xa inserting, getting and freeing entries. The code
> >was based on the code from efa driver.
> >There is still an open discussion on whether we should take this even
> >further and make the entire mmap generic. Until a decision is made, I
> >only created the database API and modified the efa, qedr, siw driver to
> >use it. The functions are integrated with the umap mechanism.
> >
> >The doorbell recovery code is based on the common code.
> >
> >Efa driver was compile tested and checked only modprobe/rmmod.
> >SIW was compile tested and checked only modprobe/rmmod.
> >
> >rdma-core pull request #493
> >
> >Changes from V8:
> >- CORE changes
> >  - Fix race between getting an entry and deleting it. Increase
> >    the refcount under the lock only if it is not zero.  Erase all
> >entries
> >    with __xa_erase instead of xa_erase and take the lock outside the
> >loop.
> >  - Fix comment when erasing all the xa_entries of a single mmap_entry.
> >  - Take comment out of loop
> >  - Change length field in driver structures to be size_t instead of
> >u64
> >    suggested by Bernard Metzler
> >  - Change do..while(true) to while(true)
> >- COMMON driver changes
> >  - Change mmap length to be size_t instead of u64.
> >  - In mmap, call put_entry if there is a length error.
> >- EFA changes:
> >  - Reverse mmap entries remove order.
> >  - Give meaningful label names in create_qp error flows.
> >  - In error flow undo change that frees pages based only on key and
> >    make sure rq_size > 0 first.
> >  - Fix xmas tree alignment, move ucontext initialization to
> >declaration
> >    line.
> >- SIW changes:
> >  - Changes received from Bernard Metzler
> >	- make the siw_user_mmap_entry.address a void *, which
> >	  naturally fits with remap_vmalloc_range. also avoids
> >	  other casting during resource address assignment.
> >	- do not kfree SQ/RQ/CQ/SRQ in preparation of mmap.
> >	  Those resources are always further needed ;)
> >	- Fix check for correct mmap range in siw_mmap().
> >	  - entry->length is the object length. We have to
> >	    expand to PAGE_ALIGN(entry->length), since mmap
> >	    comes with complete page(s) containing the
> >	    object.
> >	  - put mmap_entry if that check fails. Otherwise
> >	    entry object ref counting screws up, and later
> >	    crashes during context close.
> >	- simplify siw_mmap_free() - it must just free
> >	  the entry.
> >  - Change length to size_t instead of u64
> >
> >Changes from V7:
> >- Remove license text, SPDX id should suffice.
> >- Fix some comments text.
> >- Add comment regarding vm_ops being set in ib_uverbs_mmap.
> >- Allocate the rdma_user_mmap_entry in the driver and not in the
> >  ib_core_uverbs. This lead to defining three new structures per driver
> >  and seperating the fields between the driver private structures and
> >  the common rdma_user_mmap_entry. Freeing the entry was also moved
> >  to the drivers.
> >- Fix bug found by Gal Pressman. Call mmap_free only once per entry.
> >- Add a mutex around xa_mmap insert to assure threads won't intefere
> >  while the xa lock is released when inserting an entry into the range.
> >- Modify the insert algorithm to be more elegant using the
> >  xas_next_entry instead of foreach.
> >- Remove the rdma_user_mmap_entries_remove_free function, now that
> >umap.
> >  and mmap_xa are integrated we should not have any entries in the
> >mmap_xa
> >  when ucontext is released. Replace the function with a
> >WARN_ON(!xa_empty).
> >- Rdma_umap_open needs to reset the vm_private_data before initializing
> >it.
> >- Decrease rdma_user_mmap_entry reference count on mmap
> disassociate.
> >- Remove WARN_ON(!kref_read) this is checked when kref debug is on.
> >- Remove some redundant defines from ib_verbs.h.
> >- Better error handling for efa create qp flow.
> >- Add a function that wraps the entry allocation and
> >rdma_user_mmap_entry_insert
> >  which is used in all places that need to add an entry to the xarray.
> >- Remove rq_entry_inserted field in efa create qp flow.
> >- Add mmap_free to siw and free the memory only on mmap free and not
> >before.
> >
> >Changes from V6:
> >- Modified series description to be closer to what the series is now.
> >- Create a new file for the new rdma_user_mmap function. The file
> >  is called ib_uverbs_core. This file should contain functions related
> >  to user which are called by hw to eventually enable ib_uverbs to be
> >  optional.
> >- Modify SIW driver to use new mmap api.
> >- When calculating number of pages, need to round it up to PAGE_SIZE.
> >- Integrate the mmap_xa and umap mechanism so that the entries in
> >  mmap_xa now have a reference count and can be removed. Previously
> >  entries existed until context was destroyed. This modified the
> >  algorithm for allocating a free page range.
> >- Modify algorithm for inserting an entry into the mmap_xa.
> >- Rdma_umap_priv is now also used for all mmaps done using the
> >  mmap_xa helpers.
> >- Move remove_free header to core_priv.
> >- Rdma_user_mmap_entry now has a kref that is increase on mmap
> >  and umap_open and decreased on umap_close.
> >- Modify efa + qedr to remove the entry from xa_map. This will
> >  decrease the refcnt and free memory only if refcnt is zero.
> >- Rdma_user_mmap_io slightly modified to enable drivers not using
> >  the xa_mmap API to continue using it.
> >- Modify page allocation for user to use GFP_USER instead of GFP_KERNEL
> >
> >Changes from V5:
> >- Switch between driver dealloc_ucontext and mmap_entries_remove call.
> >- No need to verify the key after using the key to load an entry from
> >  the mmap_xa.
> >- Change mmap_free api to pass an 'entry' object.
> >- Add documentation for mmap_free and for newly exported functions.
> >- Fix some extra/missing line breaks.
> >
> >Changes from V4:
> >- Add common mmap database and cookie helper functions.
> >
> >Changes from V3:
> >- Remove casts from void to u8. Pointer arithmetic can be done on void
> >- rebase to tip of rdma-next
> >
> >Changes from V2:
> >- Don't use long-lived kmap. Instead use user-trigger mmap for the
> >  doorbell recovery entries.
> >- Modify dpi_addr to be denoted with __iomem and avoid redundant
> >  casts
> >
> >Changes from V1:
> >- call kmap to map virtual address into kernel space
> >- modify db_rec_delete to be void
> >- remove some cpu_to_le16 that were added to previous patch which are
> >  correct but not related to the overflow recovery mechanism. Will be
> >  submitted as part of a different patch
> >
> >
> >Michal Kalderon (7):
> >  RDMA/core: Move core content from ib_uverbs to ib_core
> >  RDMA/core: Create mmap database and cookie helper functions
> >  RDMA/efa: Use the common mmap_xa helpers
> >  RDMA/siw: Use the common mmap_xa helpers
> >  RDMA/qedr: Use the common mmap API
> >  RDMA/qedr: Add doorbell overflow recovery support
> >  RDMA/qedr: Add iWARP doorbell recovery support
> >
> > drivers/infiniband/core/Makefile         |   2 +-
> > drivers/infiniband/core/core_priv.h      |  16 +
> > drivers/infiniband/core/device.c         |   1 +
> > drivers/infiniband/core/ib_core_uverbs.c | 353 ++++++++++++++++++++
> > drivers/infiniband/core/rdma_core.c      |   1 +
> > drivers/infiniband/core/uverbs_cmd.c     |   1 +
> > drivers/infiniband/core/uverbs_main.c    |  97 +-----
> > drivers/infiniband/hw/efa/efa.h          |  18 +-
> > drivers/infiniband/hw/efa/efa_main.c     |   1 +
> > drivers/infiniband/hw/efa/efa_verbs.c    | 360 ++++++++++----------
> > drivers/infiniband/hw/qedr/main.c        |   1 +
> > drivers/infiniband/hw/qedr/qedr.h        |  45 ++-
> > drivers/infiniband/hw/qedr/verbs.c       | 544
> >++++++++++++++++++++++---------
> > drivers/infiniband/hw/qedr/verbs.h       |   3 +-
> > drivers/infiniband/sw/siw/siw.h          |  20 +-
> > drivers/infiniband/sw/siw/siw_main.c     |   1 +
> > drivers/infiniband/sw/siw/siw_verbs.c    | 216 ++++++------
> > drivers/infiniband/sw/siw/siw_verbs.h    |   1 +
> > include/rdma/ib_verbs.h                  |  37 ++-
> > include/uapi/rdma/qedr-abi.h             |  25 ++
> > 20 files changed, 1196 insertions(+), 547 deletions(-) create mode
> > 100644 drivers/infiniband/core/ib_core_uverbs.c
> >
> >--
> >2.14.5
> >
> >





[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