On Fri, Feb 27, 2026 at 09:32:11PM +0900, Eliot Courtney wrote: > Add general `flush_into_vec` function. Add `flush_into_kvvec` > convenience wrapper alongside the existing `flush_into_kvec` function. > This is generally useful but immediately used for e.g. holding RM > control payloads, which can be large (~>=20 KiB). > > Signed-off-by: Eliot Courtney <[email protected]>
Reviewed-by: Joel Fernandes <[email protected]> thanks, -- Joel Fernandes > --- > drivers/gpu/nova-core/sbuffer.rs | 31 +++++++++++++++++++++++++++---- > 1 file changed, 27 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/nova-core/sbuffer.rs > b/drivers/gpu/nova-core/sbuffer.rs > index 3a41d224c77a..38f8a8426521 100644 > --- a/drivers/gpu/nova-core/sbuffer.rs > +++ b/drivers/gpu/nova-core/sbuffer.rs > @@ -2,7 +2,13 @@ > > use core::ops::Deref; > > -use kernel::prelude::*; > +use kernel::{ > + alloc::{ > + Allocator, > + KVec, // > + }, > + prelude::*, // > +}; > > /// A buffer abstraction for discontiguous byte slices. > /// > @@ -162,11 +168,14 @@ pub(crate) fn read_exact(&mut self, mut dst: &mut [u8]) > -> Result { > Ok(()) > } > > - /// Read all the remaining data into a [`KVec`]. > + /// Read all the remaining data into a [`Vec`] with the given allocator. > /// > /// `self` will be empty after this operation. > - pub(crate) fn flush_into_kvec(&mut self, flags: kernel::alloc::Flags) -> > Result<KVec<u8>> { > - let mut buf = KVec::<u8>::new(); > + pub(crate) fn flush_into_vec<A: Allocator>( > + &mut self, > + flags: kernel::alloc::Flags, > + ) -> Result<Vec<u8, A>> { > + let mut buf = Vec::<u8, A>::new(); > > if let Some(slice) = core::mem::take(&mut self.cur_slice) { > buf.extend_from_slice(slice, flags)?; > @@ -177,6 +186,20 @@ pub(crate) fn flush_into_kvec(&mut self, flags: > kernel::alloc::Flags) -> Result< > > Ok(buf) > } > + > + /// Read all the remaining data into a [`KVec`]. > + /// > + /// `self` will be empty after this operation. > + pub(crate) fn flush_into_kvec(&mut self, flags: kernel::alloc::Flags) -> > Result<KVec<u8>> { > + self.flush_into_vec(flags) > + } > + > + /// Read all the remaining data into a [`KVVec`]. > + /// > + /// `self` will be empty after this operation. > + pub(crate) fn flush_into_kvvec(&mut self, flags: kernel::alloc::Flags) > -> Result<KVVec<u8>> { > + self.flush_into_vec(flags) > + } > } > > /// Provides a way to get mutable slices of data to write into. > > -- > 2.53.0 >
