Linux RDMA and InfiniBand development
 help / color / mirror / Atom feed
From: Jiri Pirko <jiri@resnulli.us>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: linux-rdma@vger.kernel.org, leon@kernel.org, mrgolin@amazon.com,
	 gal.pressman@linux.dev, sleybo@amazon.com, parav@nvidia.com,
	mbloch@nvidia.com,  yanjun.zhu@linux.dev,
	marco.crivellari@suse.com, roman.gushchin@linux.dev,
	 phaddad@nvidia.com, lirongqing@baidu.com, ynachum@amazon.com,
	 huangjunxian6@hisilicon.com,
	kalesh-anakkur.purayil@broadcom.com, ohartoov@nvidia.com,
	 michaelgur@nvidia.com, shayd@nvidia.com, edwards@nvidia.com,
	 sriharsha.basavapatna@broadcom.com,
	andrew.gospodarek@broadcom.com, selvin.xavier@broadcom.com
Subject: Re: [PATCH rdma-next v3 03/17] RDMA/core: Introduce generic buffer descriptor infrastructure for umem
Date: Fri, 15 May 2026 17:31:54 +0200	[thread overview]
Message-ID: <agc71yBleAgA2UdG@FV6GYCPJ69> (raw)
In-Reply-To: <20260514121410.GY7702@ziepe.ca>

Thu, May 14, 2026 at 02:14:10PM +0200, jgg@ziepe.ca wrote:
>On Thu, May 14, 2026 at 11:02:45AM +0200, Jiri Pirko wrote:
>> >> There's no addr_size because no caller has a user-passed
>> >> length distinct from the driver-required minimum.
>> >> Drivers either have no length in their legacy ucmd (mlx4/mlx5 CQ, mlx5 QP,
>> >> the size is driver-computed from entries*cqe_size etc.) or they
>> >> pass ucmd.buf_size which serves as both (vmw_pvrdma, qedr, mlx5
>> >> SRQ, ...).
>> >
>> >This is what I was wondering about, so how does it work when there is
>> >a ucmd.buf_size and also a minimum size computed from
>> >entries*cqe_size? What does the driver write?
>> >
>> >I think the driver has to pass in both the minimum size computed from
>> >entries*cqe_size and also the uhw exact size? The minimum size is used
>> >if the uhw path isn't used to check the other attribute while the uhw
>> >exact size is used to pin the memory if the uhw path is used - and it
>> >should also be checked against the minimum?
>> 
>> I asked Claude to check every caller: At the moment of conversion
>> none of them would have addr_size != min_size. They split into
>> three groups:
>> 
>>   1) Driver-computed total only (no user-passed length distinct from
>>      min). addr_size == min_size by construction:
>> 
>>        mlx4 CQ/QP/SRQ           entries * cqe_size, qp->buf_size, ...
>>        mlx5 CQ/QP/SRQ           entries * cqe_size, rwq->buf_size, ...
>>        bnxt_re QP/SRQ/CQ-resize max_wqe * wqe_size, entries * sizeof
>>        mana CQ                  cq->cqe * COMP_ENTRY_SIZE
>>        hns_roce MTR             mtr_bufs_size(buf_attr)
>>        qedr SRQ producer pair   sizeof(struct rdma_srq_producers)
>>        all DBR helpers          PAGE_SIZE
>
>OK these make sense
>
>>   2) MR registration / opaque user umem. The user-passed length *is*
>>      the request; there's no separate driver minimum. addr_size ==
>>      min_size by definition:
>> 
>>        reg_user_mr in every driver
>>        mlx5 devx user umem
>
>MR has to use the exact size passed in the top level system call, so
>it probably needs some special helper that does that instead of minimum
> 
>>   3) User-passed length without a driver minimum cross-check today:
>> 
>>        vmw_pvrdma CQ/QP/SRQ     derivable min (entries*sizeof, wqe_*),
>>                                 not computed in the user path
>>        qedr CQ/QP/SRQ           ureq.size, no min computed in wrapper
>>        mana WQ, QP raw_sq,
>>             QP RC queues        ucmd.{wq,sq}_buf_size, queue_size[],
>>                                 no derivable min
>>        ionic CQ, QP sq/rq       req_cq->size, sq->size, rq->size,
>>                                 no derivable min
>
>Yeah, these are exactly the ones I'd expect to have a second
>parameter. Something like ucmd.wq_buf_size should be entirely ignored
>if the user passes a new attribute, not silently used as a minimum
>check. That logic has to be done in the helper
>
>So you imagine another helper for these four drivers with an
>additional parameter?
>
>> Given that, I'd prefer to keep the single size argument for now and
>> spell the contract out in the kdoc:
>> 
>>   @size: minimum required umem length, validated post-pin against any
>>          descriptor produced via @attr_id / @legacy_filler; also used
>>          as the pin length on the VA fallback path. Callers that have
>>          a distinct user-passed length must validate it against their
>>          driver minimum before calling.
>
>> If/when a driver actually needs distinct values, splitting into
>> addr_size + min_size is mechanical.
>
>Ok, maybe mention in the commit message this has trouble for the four
>drivers in group 3

I split the "size" arg into 2 for ib_umem_get(), documented and noted
that in future the new helper working with both arg is going to be
needed for group 3 drivers.


  reply	other threads:[~2026-05-15 15:32 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-04 13:57 [PATCH rdma-next v3 00/17] RDMA: Introduce generic buffer descriptor infrastructure for umem Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 01/17] RDMA/umem: Rename ib_umem_get() to ib_umem_get_va() Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 02/17] RDMA/umem: Split ib_umem_get_va() into a thin wrapper around __ib_umem_get_va() Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 03/17] RDMA/core: Introduce generic buffer descriptor infrastructure for umem Jiri Pirko
2026-05-06 13:37   ` Jason Gunthorpe
2026-05-06 14:14     ` Jiri Pirko
2026-05-12 18:12       ` Jason Gunthorpe
2026-05-13 19:18         ` Jiri Pirko
2026-05-13 23:34           ` Jason Gunthorpe
2026-05-14  9:02             ` Jiri Pirko
2026-05-14 12:14               ` Jason Gunthorpe
2026-05-15 15:31                 ` Jiri Pirko [this message]
2026-05-04 13:57 ` [PATCH rdma-next v3 04/17] RDMA/umem: Route ib_umem_get_va() through ib_umem_get() Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 05/17] RDMA/uverbs: Inline _uverbs_get_const_{signed,unsigned}() Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 06/17] RDMA/uverbs: Push out CQ buffer umem processing into a helper Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 07/17] RDMA/uverbs: Add CQ buffer UMEM attribute and driver helpers Jiri Pirko
2026-05-06 13:46   ` Jason Gunthorpe
2026-05-06 14:27     ` Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 08/17] RDMA/efa: Use ib_umem_get_cq_buf() for user CQ buffer Jiri Pirko
2026-05-06 13:51   ` Jason Gunthorpe
2026-05-06 14:32     ` Jiri Pirko
2026-05-12 18:18       ` Jason Gunthorpe
2026-05-04 13:57 ` [PATCH rdma-next v3 09/17] RDMA/mlx5: Use ib_umem_get_cq_buf_or_va() " Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 10/17] RDMA/bnxt_re: " Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 11/17] RDMA/mlx4: Use ib_umem_get_cq_buf() " Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 12/17] RDMA/uverbs: Remove legacy umem field from struct ib_cq Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 13/17] RDMA/uverbs: Use UMEM attributes for QP creation Jiri Pirko
2026-05-06 13:43   ` Jason Gunthorpe
2026-05-06 14:17     ` Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 14/17] RDMA/mlx5: Use UMEM attributes for QP buffers in create_qp Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 15/17] RDMA/mlx5: Use UMEM attribute for CQ doorbell record Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 16/17] RDMA/mlx5: Use UMEM attribute for QP " Jiri Pirko
2026-05-04 13:57 ` [PATCH rdma-next v3 17/17] RDMA/uverbs: Track attr consumption and warn on unused attrs Jiri Pirko
2026-05-06 13:56   ` Jason Gunthorpe
2026-05-06 14:22     ` Jiri Pirko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=agc71yBleAgA2UdG@FV6GYCPJ69 \
    --to=jiri@resnulli.us \
    --cc=andrew.gospodarek@broadcom.com \
    --cc=edwards@nvidia.com \
    --cc=gal.pressman@linux.dev \
    --cc=huangjunxian6@hisilicon.com \
    --cc=jgg@ziepe.ca \
    --cc=kalesh-anakkur.purayil@broadcom.com \
    --cc=leon@kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=lirongqing@baidu.com \
    --cc=marco.crivellari@suse.com \
    --cc=mbloch@nvidia.com \
    --cc=michaelgur@nvidia.com \
    --cc=mrgolin@amazon.com \
    --cc=ohartoov@nvidia.com \
    --cc=parav@nvidia.com \
    --cc=phaddad@nvidia.com \
    --cc=roman.gushchin@linux.dev \
    --cc=selvin.xavier@broadcom.com \
    --cc=shayd@nvidia.com \
    --cc=sleybo@amazon.com \
    --cc=sriharsha.basavapatna@broadcom.com \
    --cc=yanjun.zhu@linux.dev \
    --cc=ynachum@amazon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox