Hi Bram,
On 27/01/2021 11:46, Bram Hooimeijer wrote:
> Dear Jailhouse community,
>
> Currently I am experiencing issues with the MMIO virtualization in Jailhouse,
> which interacts with the BIOS. I am hoping any of you can shed some light on
> the issue:
>
> Jailhouse reports the following after running for some while:
>> FATAL: unable to get MMIO instruction
Where does RIP point to?
>
> The region listed has previously reported illegal MMIO accesses. These have
> been resolved by adding the region to the system config. This requires all
> sub-64 access widths, as the region is apparently byte accessed. The BIOS
> vendor has indicated that this region implements APEI according to the ACPI
> specification.
Could you please try the following region:
{
.phys_start = 0x86dff000,
.virt_start = 0x86dff000,
.size = 0x0b700000,
.flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA
},
the size 0x0b700000 will make the page aligned, and the hypervisor
doesn't need to trap. In that case, JH_MEM_IO_{8,16,32,64} is not required.
Thanks
Ralf
>
> By adding some printk() statements to the hypervisor, I could derive where
> the error exactly originates. Apparently the function ctx_update(&ctx, &pc,
> 0, pg_structs) returns null. Jan, could you shed any light on what this
> function does? Could it be that the paging structs for the APEI interface are
> incorrect?
>
> All snippets are listed below. The system runs Linux Kernel 5.4.73, from
> Ubuntu 20.04 LTS, modified to remove kernel RDT support (conflicts with
> Jailhouse). Any directions are welcome!
>
> Many thanks,
>
> Kind regards,
>
> Bram Hooimeijer
>
> Issue reported over ipmi (see attached log.txt):
>> FATAL: unable to get MMIO instruction
>> FATAL: Invalid MMIO/RAM read, addr: 0x00000000870a9998 size: 0
>> RIP: 0xfffffffeec8a9998 RSP: 0xffffb52400177d78 FLAGS: 10282
>> RAX: 0x0000000000000246 RBX: 0xffffb5240dc8fe50 RCX: 0xffff9cef966f4000
>> RDX: 0xffff9cef966f4400 RSI: 0xffff9cef966f4000 RDI: 0xfffffffeec8a9998
>> CS: 10 BASE: 0x0000000000000000 AR-BYTES: a09b EFER.LMA 1
>> CR0: 0x0000000080050033 CR3: 0x0000002ff2842001 CR4: 0x00000000007626f0
>> EFER: 0x0000000000000d01
>> Parking CPU 0 (Cell: "RootCell")
>
> Modification required to root cell configuration for APEI ERST region (see
> attached sysconfig_dual256M.c)
>> {
>> .phys_start = 0x86dff000,
>> .virt_start = 0x86dff000,
>> .size = 0x0b6fffff,
>> .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
>> JAILHOUSE_MEM_IO | JAILHOUSE_MEM_IO_UNALIGNED |
>> JAILHOUSE_MEM_ROOTSHARED | JAILHOUSE_MEM_IO_8 |
>> JAILHOUSE_MEM_IO_16 | JAILHOUSE_MEM_IO_32 |
>> JAILHOUSE_MEM_IO_64 | JAILHOUSE_MEM_EXECUTE
>> },
>
> Point of failure (see hypervisor/arch/x86/mmio.c:108--121)
>> struct mmio_instruction x86_mmio_parse(const struct guest_paging_structures
>> *pg_structs, bool is_write)
>> {
>> struct parse_context ctx = { .remaining = X86_MAX_INST_LEN,
>> .count = 1 };
>> union registers *guest_regs = &this_cpu_data()->guest_regs;
>> struct mmio_instruction inst = { 0 };
>> u64 pc = vcpu_vendor_get_rip();
>> unsigned int n, skip_len = 0;
>> union opcode op[4] = { };
>>
>> if (!ctx_update(&ctx, &pc, 0, pg_structs)){
>> printk("ctx update failed\n");
>> <<--- FAILS HERE.
>> goto error_noinst;
>> }
>
--
You received this message because you are subscribed to the Google Groups
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jailhouse-dev/3570d529-ff10-da30-9b23-384a8b30cfe1%40oth-regensburg.de.