77#![ allow( missing_docs) ]
88
99use crate :: {
10+ alloc:: flags:: * ,
1011 bindings,
1112 drm:: { device, drv} ,
1213 error:: {
@@ -186,11 +187,14 @@ impl<T: DriverGpuVm> GpuVa<T> {
186187 where
187188 Error : From < E > ,
188189 {
189- Box :: try_pin_init ( try_pin_init ! ( Self {
190- gpuva <- init:: zeroed( ) ,
191- inner <- inner,
192- _p: PhantomPinned
193- } ) )
190+ Box :: try_pin_init (
191+ try_pin_init ! ( Self {
192+ gpuva <- init:: zeroed( ) ,
193+ inner <- inner,
194+ _p: PhantomPinned
195+ } ) ,
196+ GFP_KERNEL ,
197+ )
194198 }
195199
196200 pub fn addr ( & self ) -> u64 {
@@ -285,11 +289,14 @@ pub(super) unsafe extern "C" fn vm_free_callback<T: DriverGpuVm>(
285289
286290pub ( super ) unsafe extern "C" fn vm_bo_alloc_callback < T : DriverGpuVm > ( ) -> * mut bindings:: drm_gpuvm_bo
287291{
288- let obj: Result < Pin < Box < GpuVmBo < T > > > > = Box :: try_pin_init ( try_pin_init ! ( GpuVmBo :: <T > {
289- bo <- init:: default ( ) ,
290- inner <- T :: GpuVmBo :: new( ) ,
291- _p: PhantomPinned
292- } ) ) ;
292+ let obj: Result < Pin < Box < GpuVmBo < T > > > > = Box :: try_pin_init (
293+ try_pin_init ! ( GpuVmBo :: <T > {
294+ bo <- init:: default ( ) ,
295+ inner <- T :: GpuVmBo :: new( ) ,
296+ _p: PhantomPinned
297+ } ) ,
298+ GFP_KERNEL ,
299+ ) ;
293300
294301 match obj {
295302 Ok ( obj) =>
@@ -395,35 +402,38 @@ impl<T: DriverGpuVm> GpuVm<T> {
395402 where
396403 Error : From < E > ,
397404 {
398- let obj: Pin < Box < Self > > = Box :: try_pin_init ( try_pin_init ! ( Self {
399- // SAFETY: drm_gpuvm_init cannot fail and always initializes the member
400- gpuvm <- unsafe {
401- init:: pin_init_from_closure( move |slot: * mut Opaque <bindings:: drm_gpuvm> | {
402- // Zero-init required by drm_gpuvm_init
403- * slot = Opaque :: zeroed( ) ;
404- bindings:: drm_gpuvm_init(
405- Opaque :: raw_get( slot) ,
406- name. as_char_ptr( ) ,
407- 0 ,
408- dev. raw_mut( ) ,
409- r_obj. gem_obj( ) as * const _ as * mut _,
410- range. start,
411- range. end - range. start,
412- reserve_range. start,
413- reserve_range. end - reserve_range. start,
414- & Self :: OPS
415- ) ;
416- Ok ( ( ) )
417- } )
418- } ,
419- // SAFETY: Just passing through to the initializer argument
420- inner <- unsafe {
421- init:: pin_init_from_closure( move |slot: * mut UnsafeCell <T > | {
422- inner. __pinned_init( slot as * mut _)
423- } )
424- } ,
425- _p: PhantomPinned
426- } ) ) ?;
405+ let obj: Pin < Box < Self > > = Box :: try_pin_init (
406+ try_pin_init ! ( Self {
407+ // SAFETY: drm_gpuvm_init cannot fail and always initializes the member
408+ gpuvm <- unsafe {
409+ init:: pin_init_from_closure( move |slot: * mut Opaque <bindings:: drm_gpuvm> | {
410+ // Zero-init required by drm_gpuvm_init
411+ * slot = Opaque :: zeroed( ) ;
412+ bindings:: drm_gpuvm_init(
413+ Opaque :: raw_get( slot) ,
414+ name. as_char_ptr( ) ,
415+ 0 ,
416+ dev. raw_mut( ) ,
417+ r_obj. gem_obj( ) as * const _ as * mut _,
418+ range. start,
419+ range. end - range. start,
420+ reserve_range. start,
421+ reserve_range. end - reserve_range. start,
422+ & Self :: OPS
423+ ) ;
424+ Ok ( ( ) )
425+ } )
426+ } ,
427+ // SAFETY: Just passing through to the initializer argument
428+ inner <- unsafe {
429+ init:: pin_init_from_closure( move |slot: * mut UnsafeCell <T > | {
430+ inner. __pinned_init( slot as * mut _)
431+ } )
432+ } ,
433+ _p: PhantomPinned
434+ } ) ,
435+ GFP_KERNEL ,
436+ ) ?;
427437
428438 // SAFETY: We never move out of the object
429439 let vm_ref = unsafe {
@@ -445,19 +455,22 @@ impl<T: DriverGpuVm> GpuVm<T> {
445455 let mut guard = ManuallyDrop :: new ( LockedGpuVm {
446456 gpuvm : self ,
447457 // vm_exec needs to be pinned, so stick it in a Box.
448- vm_exec : Box :: init ( init ! ( bindings:: drm_gpuvm_exec {
449- vm: self . gpuvm( ) as * mut _,
450- flags: bindings:: BINDINGS_DRM_EXEC_INTERRUPTIBLE_WAIT ,
451- exec: Default :: default ( ) ,
452- extra: match ( is_ext, obj) {
453- ( true , Some ( obj) ) => bindings:: drm_gpuvm_exec__bindgen_ty_1 {
454- fn_: Some ( exec_lock_gem_object) ,
455- priv_: obj. gem_obj( ) as * const _ as * mut _,
458+ vm_exec : Box :: init (
459+ init ! ( bindings:: drm_gpuvm_exec {
460+ vm: self . gpuvm( ) as * mut _,
461+ flags: bindings:: BINDINGS_DRM_EXEC_INTERRUPTIBLE_WAIT ,
462+ exec: Default :: default ( ) ,
463+ extra: match ( is_ext, obj) {
464+ ( true , Some ( obj) ) => bindings:: drm_gpuvm_exec__bindgen_ty_1 {
465+ fn_: Some ( exec_lock_gem_object) ,
466+ priv_: obj. gem_obj( ) as * const _ as * mut _,
467+ } ,
468+ _ => Default :: default ( ) ,
456469 } ,
457- _ => Default :: default ( ) ,
458- } ,
459- num_fences : 0 ,
460- } ) ) ?,
470+ num_fences : 0 ,
471+ } ) ,
472+ GFP_KERNEL ,
473+ ) ?,
461474 obj,
462475 } ) ;
463476
0 commit comments