From: Julien Grall Date: Tue, 12 Sep 2017 10:03:17 +0000 (+0100) Subject: xen/arm: traps: Improve logging for data/prefetch abort fault X-Git-Tag: 4.10.0-rc1~291 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=a0c039a3799b3b44080fd7c6902a4a6457e38a2c;p=xen.git xen/arm: traps: Improve logging for data/prefetch abort fault Walk the hypervisor page table for data/prefetch abort fault to help diagnostics error in the page tables. Signed-off-by: Julien Grall Reviewed-by: Andre Przywara Reviewed-by: Stefano Stabellini Signed-off-by: Stefano Stabellini --- diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index cc08dab600..701fdc841d 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -2368,7 +2368,26 @@ void do_trap_hyp_sync(struct cpu_user_regs *regs) do_trap_brk(regs, hsr); break; #endif + case HSR_EC_DATA_ABORT_CURR_EL: + case HSR_EC_INSTR_ABORT_CURR_EL: + { + bool is_data = (hsr.ec == HSR_EC_DATA_ABORT_CURR_EL); + const char *fault = (is_data) ? "Data Abort" : "Instruction Abort"; + + printk("%s Trap. Syndrome=%#x\n", fault, hsr.iss); + /* + * FAR may not be valid for a Synchronous External abort other + * than translation table walk. + */ + if ( hsr.xabt.fsc == FSC_SEA && hsr.xabt.fnv ) + printk("Invalid FAR, not walking the hypervisor tables\n"); + else + dump_hyp_walk(get_hfar(is_data)); + + do_unexpected_trap(fault, regs); + break; + } default: printk("Hypervisor Trap. HSR=0x%x EC=0x%x IL=%x Syndrome=0x%"PRIx32"\n", hsr.bits, hsr.ec, hsr.len, hsr.iss);