Rather than:
static GLOBAL_GIC: Mutex<RefCell<Option<arm_gic::gicv3::GicV3<'static>>>> = Mutex::new(RefCell::new(None));
We should have
static GLOBAL_GIC_DIST: Mutex<RefCell<Option<arm_gic::gicv3::GicDistributor<'static>>>> = Mutex::new(RefCell::new(None));
pub unsafe fn get_redist() -> arm_gic::gicv3::GicRedistributor<'static> {
// Read MPIDR register, and return the GIC Redistributor object for that particular core
}
That is, we have one global, shared, Mutex-projected object for the Distributor, and local per-core objects for the Redistributor.
See https://documentation-service.arm.com/static/6273be2d7e121f01fd22f145:

Rather than:
We should have
That is, we have one global, shared, Mutex-projected object for the Distributor, and local per-core objects for the Redistributor.
See https://documentation-service.arm.com/static/6273be2d7e121f01fd22f145: