AArch64 EL2 hypervisor for QEMU virt that boots at EL2
1

Configure Feed

Select the types of activity you want to include in your feed.

Introduce MMIO region provenance labels for abort triage

+13 -9
+11 -9
core/mmio_policy.c
··· 5 5 #include "hv/vcpu.h" 6 6 7 7 static const struct mmio_policy_region g_mmio_regions[] = { 8 - { CONFIG_UART_BASE, CONFIG_UART_SIZE, "pl011-uart", MMIO_POLICY_EMULATE_PL011 }, 9 - { CONFIG_GICD_BASE, CONFIG_GICD_SIZE, "gicd", MMIO_POLICY_EMULATE_READONLY_DEVICE }, 10 - { CONFIG_GITS_BASE, CONFIG_GITS_SIZE, "gits", MMIO_POLICY_EMULATE_READONLY_DEVICE }, 11 - { CONFIG_GICR_BASE, CONFIG_GICR_SIZE, "gicr", MMIO_POLICY_EMULATE_READONLY_DEVICE }, 12 - { CONFIG_RTC_BASE, CONFIG_RTC_SIZE, "pl031-rtc", MMIO_POLICY_EMULATE_READONLY_DEVICE }, 13 - { CONFIG_FW_CFG_BASE, CONFIG_FW_CFG_SIZE, "fw-cfg", MMIO_POLICY_EMULATE_READONLY_DEVICE }, 14 - { CONFIG_GPIO_BASE, CONFIG_GPIO_SIZE, "pl061-gpio", MMIO_POLICY_EMULATE_READONLY_DEVICE }, 15 - { CONFIG_PCI_ECAM_BASE, CONFIG_PCI_ECAM_SIZE, "pci-ecam", MMIO_POLICY_EMULATE_ZERO }, 16 - { 0x0a000000ull, 0x00004000ull, "virtio-mmio", MMIO_POLICY_EMULATE_VIRTIO_MMIO }, 8 + { CONFIG_UART_BASE, CONFIG_UART_SIZE, "pl011-uart", MMIO_POLICY_EMULATE_PL011, 1001u }, 9 + { CONFIG_GICD_BASE, CONFIG_GICD_SIZE, "gicd", MMIO_POLICY_EMULATE_READONLY_DEVICE, 1002u }, 10 + { CONFIG_GITS_BASE, CONFIG_GITS_SIZE, "gits", MMIO_POLICY_EMULATE_READONLY_DEVICE, 1003u }, 11 + { CONFIG_GICR_BASE, CONFIG_GICR_SIZE, "gicr", MMIO_POLICY_EMULATE_READONLY_DEVICE, 1004u }, 12 + { CONFIG_RTC_BASE, CONFIG_RTC_SIZE, "pl031-rtc", MMIO_POLICY_EMULATE_READONLY_DEVICE, 1005u }, 13 + { CONFIG_FW_CFG_BASE, CONFIG_FW_CFG_SIZE, "fw-cfg", MMIO_POLICY_EMULATE_READONLY_DEVICE, 1006u }, 14 + { CONFIG_GPIO_BASE, CONFIG_GPIO_SIZE, "pl061-gpio", MMIO_POLICY_EMULATE_READONLY_DEVICE, 1007u }, 15 + { CONFIG_PCI_ECAM_BASE, CONFIG_PCI_ECAM_SIZE, "pci-ecam", MMIO_POLICY_EMULATE_ZERO, 1008u }, 16 + { 0x0a000000ull, 0x00004000ull, "virtio-mmio", MMIO_POLICY_EMULATE_VIRTIO_MMIO, 1009u }, 17 17 }; 18 18 19 19 const struct mmio_policy_region *mmio_policy_lookup(ipa_t ipa) ··· 122 122 uart_put_hex64(g_mmio_regions[i].size); 123 123 uart_puts(" action="); 124 124 uart_put_dec64((uint64_t)g_mmio_regions[i].action); 125 + uart_puts(" provenance="); 126 + uart_put_dec64(g_mmio_regions[i].provenance); 125 127 uart_puts("\n"); 126 128 } 127 129 }
+1
include/hv/mmio_policy.h
··· 19 19 uint64_t size; 20 20 const char *name; 21 21 enum mmio_policy_action action; 22 + uint32_t provenance; 22 23 }; 23 24 24 25 const struct mmio_policy_region *mmio_policy_lookup(ipa_t ipa);
+1
mm/stage2.c
··· 269 269 ev.reason = 410u; 270 270 ev.name = mmio->name; 271 271 ev.action = (uint32_t)mmio->action; 272 + ev.result = mmio->provenance; 272 273 if (mmio_policy_emulate(vcpu, ipa, frame->esr_el2)) { 273 274 ev.reason = 411u; 274 275 log_event_commit(&ev);