|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Xen/ARM - Query about a data abort seen while reading GICD registers
Hi Ayan,
> On 16 Nov 2021, at 15:27, Ayan Kumar Halder <ayan.kumar.halder@xxxxxxxxxx>
> wrote:
>
> Hi Xen/Arm experts,
>
> I am facing a very strange issue while running a baremetal application as a
> DomU guest on arm64 platform.
>
> The baremetal app tries to read the GICD register with post indexing as
> follows :-
> ldr x1, =0x3001000
> ldr w2, [x1], #4 <<<------ PC = 0x40000ca8
Increment on on load is not supported by the emulation layer.
Could you try with:
add x1, x1, #4
ldr w2, [x1]
Regards
Bertrand
>
> And then I get :-
> HSR=0x92000005 pc=0x00000040000ca8 gva=0x3001000 gpa=0x00000003001000
>
> This problem occurs only while reading the GICD registers with post indexing.
> If I read the register with pre-indexing, then I do not see any abort.
> Alternatively, if I read GICC register with post indexing, I don't see the
> abort either.
>
> From the HSR value, I interpret it as
> EC = 100100b # Data abort from lower exception
> IL = 1b # 32 bit instruction trapped
> DFSC = 101 # Translation fault level 1
>
> On debugging, I found that the abort is triggered from
>
> try_handle_mmio()
> { ...
> /* All the instructions used on emulated MMIO region should be valid */
> if ( !dabt.valid ) {
>
> return IO_ABORT;
> }
> ...
> }
>
> From the Arm V8 Arm specs, I understand that dabt.valid is ISV, bit[24] in
> "ISS encoding for an exception from a Data Abort".
>
>
> I saw that the caller is
>
> do_trap_guest_sync() "case HSR_EC_DATA_ABORT_LOWER_EL"
> where dabt.valid is false.
> In the success scenario, dabt.valid is true.
>
> I could not find the caller for do_trap_guest_sync()
>
> So, can anyone help me here
> 1. Who is the caller for do_trap_guest_sync() ?
> 2. Any idea on what the issue is and how I can debug it further ?
>
> Kind regards,
> Ayan
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |