which reads all bits one, and ignores writes. PR: 286467
Details
Details
Diff Detail
Diff Detail
- Repository
- rG FreeBSD src repository
- Lint
Lint Skipped - Unit
Tests Skipped
Event Timeline
Comment Actions
One issue with this is that the code is MI, but the implemented behaviour is x86-specific -- I'm not sure what happens on arm64 when a non-existent GPA is accessed, maybe an serror is raised. Maybe @andrew could comment.
usr.sbin/bhyve/mem.c | ||
---|---|---|
226 | I reworded as you suggested. But note that the address always exists, it is the backing memory that could not. |
Comment Actions
On arm64 I would expect we implement it as a synchronous external abort. We should have all the information needed & it lets the guest recover, or at least report the precise location of the fault.
usr.sbin/bhyve/aarch64/mem_aarch64.c | ||
---|---|---|
48 ↗ | (On Diff #155174) | I don't think this is correct as it looks like this should only be raised for an SError exception. The kernel can currently only raise synchronous exceptions. I think the logic should be: spsr = get(VM_REG_GUEST_CPSR); if ((spsr & PSR_M_MASK) == PSR_M_EL0t) esr = EXCP_DATA_ABORT_L << ESR_ELx_EC_SHIFT; else esr = EXCP_DATA_ABORT << ESR_ELx_EC_SHIFT; esr |= ESR_ELx_IL | ISS_DATA_DFSC_EXT; |