Skip to content

Commit cc4e112

Browse files
committed
drm/asahi: mmu: Switch to pin_init_array_from_fn
Signed-off-by: Asahi Lina <[email protected]>
1 parent ce16802 commit cc4e112

1 file changed

Lines changed: 16 additions & 28 deletions

File tree

drivers/gpu/drm/asahi/mmu.rs

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,9 @@
1010
//!
1111
//! The actual page table management is delegated to the common kernel `io_pgtable` code.
1212
13-
use core::convert::Infallible;
1413
use core::fmt::Debug;
1514
use core::mem::size_of;
16-
use core::ptr::{addr_of_mut, NonNull};
15+
use core::ptr::NonNull;
1716
use core::sync::atomic::{fence, AtomicU32, AtomicU64, AtomicU8, Ordering};
1817
use core::time::Duration;
1918

@@ -1185,35 +1184,24 @@ impl Uat {
11851184
let handoff_rgn = Self::map_region(dev, c_str!("handoff"), HANDOFF_SIZE, false)?;
11861185
let ttbs_rgn = Self::map_region(dev, c_str!("ttbs"), SLOTS_SIZE, false)?;
11871186

1187+
let handoff = unsafe { &(handoff_rgn.map.as_ptr() as *mut Handoff).as_ref().unwrap() };
1188+
11881189
dev_info!(dev, "MMU: Initializing kernel page table\n");
11891190

1190-
Arc::pin_init(unsafe {
1191-
init::pin_init_from_closure(
1192-
move |slot: *mut UatInner| -> core::result::Result<(), Infallible> {
1193-
let handoff = &(handoff_rgn.map.as_ptr() as *mut Handoff).as_ref().unwrap();
1194-
1195-
for i in 0..UAT_NUM_CTX + 1 {
1196-
new_mutex!(HandoffFlush(&handoff.flush[i]), "handoff_flush")
1197-
.__pinned_init(addr_of_mut!((*slot).handoff_flush[i]))
1198-
.expect("infallible");
1199-
}
1200-
1201-
new_mutex!(
1202-
UatShared {
1203-
kernel_ttb1: 0,
1204-
map_kernel_to_user: false,
1205-
handoff_rgn,
1206-
ttbs_rgn,
1207-
},
1208-
"uat_shared"
1209-
)
1210-
.__pinned_init(addr_of_mut!((*slot).shared))
1211-
.expect("infallible");
1212-
1213-
Ok(())
1191+
Arc::pin_init(try_pin_init!(UatInner {
1192+
handoff_flush <- init::pin_init_array_from_fn(|i| {
1193+
new_mutex!(HandoffFlush(&handoff.flush[i]), "handoff_flush")
1194+
}),
1195+
shared <- new_mutex!(
1196+
UatShared {
1197+
kernel_ttb1: 0,
1198+
map_kernel_to_user: false,
1199+
handoff_rgn,
1200+
ttbs_rgn,
12141201
},
1215-
)
1216-
})
1202+
"uat_shared"
1203+
),
1204+
}))
12171205
}
12181206

12191207
/// Creates a new `Uat` instance given the relevant hardware config.

0 commit comments

Comments
 (0)