Skip to content

Commit 9e750de

Browse files
committed
drm/asahi: queue: Access AsahiData via pdev.drvdata
Signed-off-by: Janne Grunau <j@jannau.net>
1 parent 9062c96 commit 9e750de

3 files changed

Lines changed: 15 additions & 10 deletions

File tree

drivers/gpu/drm/asahi/queue/compute.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use super::common;
1111
use crate::alloc::Allocator;
1212
use crate::debug::*;
13+
use crate::driver::AsahiDriver;
1314
use crate::fw::types::*;
1415
use crate::gpu::GpuManager;
1516
use crate::{file, fw, gpu, microseq};
@@ -20,6 +21,7 @@ use kernel::dma_fence::RawDmaFence;
2021
use kernel::drm::sched::Job;
2122
use kernel::prelude::*;
2223
use kernel::sync::Arc;
24+
use kernel::types::ForeignOwnable;
2325
use kernel::uaccess::{UserPtr, UserSlice};
2426
use kernel::uapi;
2527
use kernel::xarray;
@@ -42,8 +44,8 @@ impl super::QueueInner::ver {
4244
return Err(EINVAL);
4345
}
4446

45-
let dev = self.dev.data();
46-
let gpu = match dev.gpu.as_any().downcast_ref::<gpu::GpuManager::ver>() {
47+
let data = unsafe { &<KBox<AsahiDriver>>::borrow(self.dev.as_ref().get_drvdata()).data };
48+
let gpu = match data.gpu.as_any().downcast_ref::<gpu::GpuManager::ver>() {
4749
Some(gpu) => gpu,
4850
None => {
4951
dev_crit!(self.dev.as_ref(), "GpuManager mismatched with Queue!\n");

drivers/gpu/drm/asahi/queue/mod.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ use kernel::{
1313
drm::sched,
1414
macros::versions,
1515
sync::{Arc, Mutex},
16+
types::ForeignOwnable,
1617
uapi, xarray,
1718
};
1819

1920
use crate::alloc::Allocator;
2021
use crate::debug::*;
21-
use crate::driver::{AsahiDevRef, AsahiDevice};
22+
use crate::driver::{AsahiDevRef, AsahiDevice, AsahiDriver};
2223
use crate::fw::types::*;
2324
use crate::gpu::GpuManager;
2425
use 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()

drivers/gpu/drm/asahi/queue/render.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use super::common;
1111
use crate::alloc::Allocator;
1212
use crate::debug::*;
13+
use crate::driver::AsahiDriver;
1314
use crate::fw::types::*;
1415
use crate::gpu::GpuManager;
1516
use crate::util::*;
@@ -23,6 +24,7 @@ use kernel::drm::sched::Job;
2324
use kernel::new_mutex;
2425
use kernel::prelude::*;
2526
use kernel::sync::Arc;
27+
use kernel::types::ForeignOwnable;
2628
use kernel::uaccess::{UserPtr, UserSlice};
2729
use kernel::uapi;
2830
use kernel::xarray;
@@ -364,8 +366,8 @@ impl super::QueueInner::ver {
364366
return Err(EINVAL);
365367
}
366368

367-
let dev = self.dev.data();
368-
let gpu = match dev.gpu.as_any().downcast_ref::<gpu::GpuManager::ver>() {
369+
let data = unsafe { &<KBox<AsahiDriver>>::borrow(self.dev.as_ref().get_drvdata()).data };
370+
let gpu = match data.gpu.as_any().downcast_ref::<gpu::GpuManager::ver>() {
369371
Some(gpu) => gpu,
370372
None => {
371373
dev_crit!(self.dev.as_ref(), "GpuManager mismatched with Queue!\n");

0 commit comments

Comments
 (0)