@@ -21,10 +21,9 @@ use crate::debug::*;
2121use crate :: driver:: AsahiDevice ;
2222use crate :: fw:: types:: * ;
2323use crate :: gpu:: GpuManager ;
24+ use crate :: inner_weak_ptr;
2425use crate :: { alloc, buffer, channel, event, file, fw, gem, gpu, mmu, workqueue} ;
25- use crate :: { inner_weak_ptr, place} ;
2626
27- use core:: mem:: MaybeUninit ;
2827use core:: sync:: atomic:: { AtomicU64 , Ordering } ;
2928
3029const DEBUG_CLASS : DebugFlags = DebugFlags :: Queue ;
@@ -374,19 +373,16 @@ impl Queue::ver {
374373 let threshold = alloc. shared . new_default :: < fw:: event:: Threshold > ( ) ?;
375374
376375 let notifier: Arc < GpuObject < fw:: event:: Notifier :: ver > > =
377- Arc :: try_new ( alloc. private . new_inplace (
378- fw:: event:: Notifier :: ver { threshold } ,
379- |inner, ptr : & mut MaybeUninit < fw:: event:: raw:: Notifier :: ver < ' _ > > | {
380- Ok ( place ! (
381- ptr,
382- fw:: event:: raw:: Notifier :: ver {
383- threshold: inner. threshold. gpu_pointer( ) ,
384- generation: AtomicU32 :: new( id as u32 ) ,
385- cur_count: AtomicU32 :: new( 0 ) ,
386- unk_10: AtomicU32 :: new( 0x50 ) ,
387- state: Default :: default ( )
388- }
389- ) )
376+ Arc :: try_new ( alloc. private . new_init (
377+ try_init ! ( fw:: event:: Notifier :: ver { threshold } ) ,
378+ |inner, _p| {
379+ try_init ! ( fw:: event:: raw:: Notifier :: ver {
380+ threshold: inner. threshold. gpu_pointer( ) ,
381+ generation: AtomicU32 :: new( id as u32 ) ,
382+ cur_count: AtomicU32 :: new( 0 ) ,
383+ unk_10: AtomicU32 :: new( 0x50 ) ,
384+ state: Default :: default ( )
385+ } )
390386 } ,
391387 ) ?) ?;
392388
@@ -621,22 +617,20 @@ impl Queue for Queue::ver {
621617 _ => return Err ( EINVAL ) ,
622618 } ;
623619 mod_dev_dbg ! ( self . dev, "[Submission {}] Create Explicit Barrier\n " , id) ;
624- let barrier: GpuObject < fw:: workqueue:: Barrier > = alloc. private . new_inplace (
625- Default :: default ( ) ,
626- |_inner, ptr : & mut MaybeUninit < fw:: workqueue:: raw:: Barrier > | {
627- Ok ( place ! (
628- ptr,
629- fw:: workqueue:: raw:: Barrier {
630- tag: fw:: workqueue:: CommandType :: Barrier ,
631- wait_stamp: event. fw_stamp_pointer,
632- wait_value: event. value,
633- wait_slot: event. slot,
634- stamp_self: queue_job. event_info( ) . value. next( ) ,
635- uuid: 0xffffbbbb ,
636- barrier_type: 0 ,
637- padding: Default :: default ( ) ,
638- }
639- ) )
620+ let barrier = alloc. private . new_init (
621+ kernel:: init:: zeroed :: < fw:: workqueue:: Barrier > ( ) ,
622+ |_inner, _p| {
623+ let queue_job = & queue_job;
624+ try_init ! ( fw:: workqueue:: raw:: Barrier {
625+ tag: fw:: workqueue:: CommandType :: Barrier ,
626+ wait_stamp: event. fw_stamp_pointer,
627+ wait_value: event. value,
628+ wait_slot: event. slot,
629+ stamp_self: queue_job. event_info( ) . value. next( ) ,
630+ uuid: 0xffffbbbb ,
631+ barrier_type: 0 ,
632+ padding: Default :: default ( ) ,
633+ } )
640634 } ,
641635 ) ?;
642636 mod_dev_dbg ! ( self . dev, "[Submission {}] Add Explicit Barrier\n " , id) ;
0 commit comments