mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: fix unmapped access trapping on GICv2 hardware
Since4dbcb06536, the vGICv2 CPU interface is mapped in a deferred manner. On domains with XEN_DOMCTL_CDF_trap_unmapped_accesses unset on GICv2 hardware, the vGICv2 CPU interface fails to be mapped. A visible symptom is that a domU gets stuck at: [ 0.177983] smp: Bringing up secondary CPUs ... Move the 2nd check_p2m earlier so it's prioritized over try_handle_mmio. Fixes:980aff4e8f("xen/arm: Add way to disable traps on accesses to unmapped addresses") Signed-off-by: Stewart Hildebrand <stewart.hildebrand@amd.com> Reviewed-by: Michal Orzel <michal.orzel@amd.com>
This commit is contained in:
1 parent
bfb33fa6d4
commit
17a9070d22
1 file changed
+8
-8
@@ -1915,6 +1915,14 @@ static void do_trap_stage2_abort_guest(struct cpu_user_regs *regs,
|
||||
if ( info.dabt_instr.state == INSTR_ERROR )
|
||||
goto inject_abt;
|
||||
|
||||
/*
|
||||
* If the instruction syndrome was invalid, then we already checked if
|
||||
* this was due to a P2M fault. So no point to check again as the result
|
||||
* will be the same.
|
||||
*/
|
||||
if ( (info.dabt_instr.state == INSTR_VALID) && check_p2m(is_data, gpa) )
|
||||
return;
|
||||
|
||||
state = try_handle_mmio(regs, &info);
|
||||
|
||||
switch ( state )
|
||||
@@ -1939,14 +1947,6 @@ static void do_trap_stage2_abort_guest(struct cpu_user_regs *regs,
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the instruction syndrome was invalid, then we already checked if
|
||||
* this was due to a P2M fault. So no point to check again as the result
|
||||
* will be the same.
|
||||
*/
|
||||
if ( (info.dabt_instr.state == INSTR_VALID) && check_p2m(is_data, gpa) )
|
||||
return;
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
||||