diff --git a/CHANGES b/CHANGES index 16f7886f2e..800a22b1bd 100644 --- a/CHANGES +++ b/CHANGES @@ -22,7 +22,7 @@ description indicates whether it is SOURCE-COMPATIBLE, BINARY-COMPATIBLE, or BRE Further information about [seL4 releases](https://docs.sel4.systems/sel4_release/) is available. --- -Upcoming release: BINARY COMPATIBLE +Upcoming release: BREAKING ## Changes @@ -42,6 +42,8 @@ Upcoming release: BINARY COMPATIBLE * Removed obsolete define `HAVE_AUTOCONF` * Removed user address space reserved slots restriction on 40bit PA platforms when KernelArmHypervisorSupport is set. This change is reflected in the definition of the seL4_UserTop constant that holds the largest user virtual address. +* aarch32 VM fault messages now deliver original (untranslated) faulting IP in a hypervisor context, matching + aarch64 behaviour. ## Upgrade Notes --- diff --git a/include/arch/arm/arch/64/mode/machine.h b/include/arch/arm/arch/64/mode/machine.h index cd27a187e9..6c84863a8e 100644 --- a/include/arch/arm/arch/64/mode/machine.h +++ b/include/arch/arm/arch/64/mode/machine.h @@ -377,10 +377,5 @@ void arch_clean_invalidate_L1_caches(word_t type); static inline paddr_t addressTranslateS1(vptr_t vaddr) { -#ifdef CONFIG_ARM_HYPERVISOR_SUPPORT return ats1e1r(vaddr); -#else - /* shouldn't be called on non-hyp, added for consistency with AArch32 */ - return vaddr; -#endif } diff --git a/src/arch/arm/api/faults.c b/src/arch/arm/api/faults.c index 00d1038524..e262ec3784 100644 --- a/src/arch/arm/api/faults.c +++ b/src/arch/arm/api/faults.c @@ -34,14 +34,7 @@ word_t Arch_setMRs_fault(tcb_t *sender, tcb_t *receiver, word_t *receiveIPCBuffe { switch (faultType) { case seL4_Fault_VMFault: { - if (config_set(CONFIG_ARM_HYPERVISOR_SUPPORT)) { - word_t ipa, va; - va = getRestartPC(sender); - ipa = (addressTranslateS1(va) & ~MASK(PAGE_BITS)) | (va & MASK(PAGE_BITS)); - setMR(receiver, receiveIPCBuffer, seL4_VMFault_IP, ipa); - } else { - setMR(receiver, receiveIPCBuffer, seL4_VMFault_IP, getRestartPC(sender)); - } + setMR(receiver, receiveIPCBuffer, seL4_VMFault_IP, getRestartPC(sender)); setMR(receiver, receiveIPCBuffer, seL4_VMFault_Addr, seL4_Fault_VMFault_get_address(sender->tcbFault)); setMR(receiver, receiveIPCBuffer, seL4_VMFault_PrefetchFault,