Re: [PATCH v2 0/4] rust: Add support for reserving of ranges of IDs

"Eliot Courtney" <[email protected]> Wed, 29 Jul 2026 14:58:12 +0900
Newsgroups dev.linux.lists.nova-gpu,org.kernel.vger.linux-kernel,org.kernel.vger.rust-for-linux
Message-ID <[email protected]>
On Sat Jul 25, 2026 at 12:06 AM JST, Yury Norov wrote:
> On Thu, Jul 23, 2026 at 05:59:09PM +0900, Eliot Courtney wrote:
>> Add support for reserving of ranges of IDs, with a usage in nova-core
>> for channel IDs. This entails adding bindings for the C bitmap
>> API for ranges of bits, then users of that in `IdPool`, and finally a
>> user of `IdPool` in nova-core, `ChannelIdPool`.
>>=20
>> Channel ID tracking is needed for allotting ranges of channel IDs to
>> vGPU guests, and later for regular host channel ID reservation.
>> nova-core needs allocation of a contiguous sequence of IDs with a
>> specific length and sometimes a specific alignment [1].
>>=20
>> About the tradeoffs between different data structures:
>> - IDA/xarray do not support allocating a contiguous sequence of IDs
>>   (ida_alloc_range() allocates a single ID within a range, not a contigu=
ous
>>   sequence).
>> - A maple tree works, but is not as good a fit. The ID space is small
>>   (limited to 2048) and aligned allocation needs an alloc_range()+erase(=
) retry
>>   loop (plus a Mutex around it, or new mas_empty_area() bindings) that
>>   essentially reimplements bitmap_find_next_zero_area(). See the maple t=
ree
>>   version at [2]. For 2048 IDs a bitmap is also considerably faster and =
smaller
>>   [3].
>> - The bitmap API natively supports aligned contiguous area allocation
>>   (bitmap_find_next_zero_area()).
>>=20
>> This is based on drm-rust-next.
>>=20
>> [1]: https://lore.kernel.org/all/84bc8bd2-e292-4b84-9580-a1b5df4c5bdc@nv=
idia.com/
>> [2]: https://lore.kernel.org/all/20260710-chid-maple-v1-1-4ee869055268@n=
vidia.com/
>> [3]: https://lore.kernel.org/all/[email protected]=
om/
>
> If you refer my test, I'd like to make sure you've reviewed it and
> tested in your environment. Please send the appropriate tags.

Have done so - thank you for your help in benchmarking!

> Also, would you like to add it to your series? I can to move it myself,
> but I can defer it to you if you prefer.

Happy for you to take it yourself unless you would prefer me to.

>
> Thanks,
> Yury
> =20
>> Signed-off-by: Eliot Courtney <[email protected]>
>> ---
>> Changes in v2:
>> - Collected Alice's Reviewed-by on patch 1.
>> - Address Yury's comments w.r.t. using __bitmap_set etc directly.
>> - Address Yury's comments w.r.t. following the C names
>> - Additionally check for an overflow case that causes a hang
>> - Added more info to cover letter + patch 4 w.r.t. channel ID allottment
>>   requirements
>> - Add align parameter to ChannelIdPool::alloc_area() plus an aligned
>>   allocation test
>> - Add missing INVARIANT comment when constructing UnusedArea
>> - Link to v1:
>>   https://patch.msgid.link/[email protected]
>>=20
>> ---
>> Eliot Courtney (4):
>>       rust: bitmap: use function-level cfg on kunit test
>>       rust: bitmap: add contiguous area operations
>>       rust: id_pool: add contiguous area allocation
>>       gpu: nova-core: add ChannelIdPool
>>=20
>>  drivers/gpu/nova-core/gpu.rs         |   2 +
>>  drivers/gpu/nova-core/gpu/channel.rs | 182 ++++++++++++++++++++++++++
>>  rust/kernel/bitmap.rs                | 242 ++++++++++++++++++++++++++++=
+++++--
>>  rust/kernel/id_pool.rs               |  69 ++++++++++
>>  4 files changed, 481 insertions(+), 14 deletions(-)
>> ---
>> base-commit: 71d4e7233f235871b13553e504e591ace6b54373
>> change-id: 20260608-chid-18fa943c6d6c
>>=20
>> Best regards,
>> -- =20
>> Eliot Courtney <[email protected]>