@@ -13,12 +13,13 @@ use kernel::{
1313 drm:: sched,
1414 macros:: versions,
1515 sync:: { Arc , Mutex } ,
16+ types:: ForeignOwnable ,
1617 uapi, xarray,
1718} ;
1819
1920use crate :: alloc:: Allocator ;
2021use crate :: debug:: * ;
21- use crate :: driver:: { AsahiDevRef , AsahiDevice } ;
22+ use crate :: driver:: { AsahiDevRef , AsahiDevice , AsahiDriver } ;
2223use crate :: fw:: types:: * ;
2324use crate :: gpu:: GpuManager ;
2425use crate :: inner_weak_ptr;
@@ -259,8 +260,8 @@ impl sched::JobImpl for QueueJob::ver {
259260 fn run ( job : & mut sched:: Job < Self > ) -> Result < Option < dma_fence:: Fence > > {
260261 mod_dev_dbg ! ( job. dev, "QueueJob {}: Running Job\n " , job. id) ;
261262
262- let dev = job. dev . data ( ) ;
263- let gpu = match dev
263+ let data = unsafe { & < KBox < AsahiDriver > > :: borrow ( job. dev . as_ref ( ) . get_drvdata ( ) ) . data } ;
264+ let gpu = match data
264265 . gpu
265266 . clone ( )
266267 . arc_as_any ( )
@@ -387,7 +388,7 @@ impl Queue::ver {
387388 ) -> Result < Queue :: ver > {
388389 mod_dev_dbg ! ( dev, "[Queue {}] Creating queue\n " , id) ;
389390
390- let data = dev. data ( ) ;
391+ let data = unsafe { & < KBox < AsahiDriver > > :: borrow ( dev. as_ref ( ) . get_drvdata ( ) ) . data } ;
391392
392393 // Must be shared, no cache management on this one!
393394 let mut notifier_list = alloc. shared . new_default :: < fw:: event:: NotifierList > ( ) ?;
@@ -542,8 +543,8 @@ impl Queue for Queue::ver {
542543 commands : KVec < uapi:: drm_asahi_command > ,
543544 objects : Pin < & xarray:: XArray < KBox < file:: Object > > > ,
544545 ) -> Result {
545- let dev = self . dev . data ( ) ;
546- let gpu = match dev
546+ let data = unsafe { & < KBox < AsahiDriver > > :: borrow ( self . dev . as_ref ( ) . get_drvdata ( ) ) . data } ;
547+ let gpu = match data
547548 . gpu
548549 . clone ( )
549550 . arc_as_any ( )
0 commit comments