|
10 | 10 | //! |
11 | 11 | //! The actual page table management is delegated to the common kernel `io_pgtable` code. |
12 | 12 |
|
13 | | -use core::convert::Infallible; |
14 | 13 | use core::fmt::Debug; |
15 | 14 | use core::mem::size_of; |
16 | | -use core::ptr::{addr_of_mut, NonNull}; |
| 15 | +use core::ptr::NonNull; |
17 | 16 | use core::sync::atomic::{fence, AtomicU32, AtomicU64, AtomicU8, Ordering}; |
18 | 17 | use core::time::Duration; |
19 | 18 |
|
@@ -1185,35 +1184,24 @@ impl Uat { |
1185 | 1184 | let handoff_rgn = Self::map_region(dev, c_str!("handoff"), HANDOFF_SIZE, false)?; |
1186 | 1185 | let ttbs_rgn = Self::map_region(dev, c_str!("ttbs"), SLOTS_SIZE, false)?; |
1187 | 1186 |
|
| 1187 | + let handoff = unsafe { &(handoff_rgn.map.as_ptr() as *mut Handoff).as_ref().unwrap() }; |
| 1188 | + |
1188 | 1189 | dev_info!(dev, "MMU: Initializing kernel page table\n"); |
1189 | 1190 |
|
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, |
1214 | 1201 | }, |
1215 | | - ) |
1216 | | - }) |
| 1202 | + "uat_shared" |
| 1203 | + ), |
| 1204 | + })) |
1217 | 1205 | } |
1218 | 1206 |
|
1219 | 1207 | /// Creates a new `Uat` instance given the relevant hardware config. |
|
0 commit comments