trace: add acpi memory hotplug IO region events
Add events for tracing accesses to memory hotplug IO ports. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
3ef77acab2
commit
dfe292ffc4
@ -2,6 +2,7 @@
|
||||
#include "hw/acpi/pc-hotplug.h"
|
||||
#include "hw/mem/pc-dimm.h"
|
||||
#include "hw/boards.h"
|
||||
#include "trace.h"
|
||||
|
||||
static uint64_t acpi_memory_hotplug_read(void *opaque, hwaddr addr,
|
||||
unsigned int size)
|
||||
@ -12,6 +13,7 @@ static uint64_t acpi_memory_hotplug_read(void *opaque, hwaddr addr,
|
||||
Object *o;
|
||||
|
||||
if (mem_st->selector >= mem_st->dev_count) {
|
||||
trace_mhp_acpi_invalid_slot_selected(mem_st->selector);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -20,22 +22,28 @@ static uint64_t acpi_memory_hotplug_read(void *opaque, hwaddr addr,
|
||||
switch (addr) {
|
||||
case 0x0: /* Lo part of phys address where DIMM is mapped */
|
||||
val = o ? object_property_get_int(o, PC_DIMM_ADDR_PROP, NULL) : 0;
|
||||
trace_mhp_acpi_read_addr_lo(mem_st->selector, val);
|
||||
break;
|
||||
case 0x4: /* Hi part of phys address where DIMM is mapped */
|
||||
val = o ? object_property_get_int(o, PC_DIMM_ADDR_PROP, NULL) >> 32 : 0;
|
||||
trace_mhp_acpi_read_addr_hi(mem_st->selector, val);
|
||||
break;
|
||||
case 0x8: /* Lo part of DIMM size */
|
||||
val = o ? object_property_get_int(o, PC_DIMM_SIZE_PROP, NULL) : 0;
|
||||
trace_mhp_acpi_read_size_lo(mem_st->selector, val);
|
||||
break;
|
||||
case 0xc: /* Hi part of DIMM size */
|
||||
val = o ? object_property_get_int(o, PC_DIMM_SIZE_PROP, NULL) >> 32 : 0;
|
||||
trace_mhp_acpi_read_size_hi(mem_st->selector, val);
|
||||
break;
|
||||
case 0x10: /* node proximity for _PXM method */
|
||||
val = o ? object_property_get_int(o, PC_DIMM_NODE_PROP, NULL) : 0;
|
||||
trace_mhp_acpi_read_pxm(mem_st->selector, val);
|
||||
break;
|
||||
case 0x14: /* pack and return is_* fields */
|
||||
val |= mdev->is_enabled ? 1 : 0;
|
||||
val |= mdev->is_inserting ? 2 : 0;
|
||||
trace_mhp_acpi_read_flags(mem_st->selector, val);
|
||||
break;
|
||||
default:
|
||||
val = ~0;
|
||||
@ -56,6 +64,7 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
|
||||
if (addr) {
|
||||
if (mem_st->selector >= mem_st->dev_count) {
|
||||
trace_mhp_acpi_invalid_slot_selected(mem_st->selector);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -63,6 +72,7 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
switch (addr) {
|
||||
case 0x0: /* DIMM slot selector */
|
||||
mem_st->selector = data;
|
||||
trace_mhp_acpi_write_slot(mem_st->selector);
|
||||
break;
|
||||
case 0x4: /* _OST event */
|
||||
mdev = &mem_st->devs[mem_st->selector];
|
||||
@ -72,10 +82,12 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
/* TODO: handle device remove OST event */
|
||||
}
|
||||
mdev->ost_event = data;
|
||||
trace_mhp_acpi_write_ost_ev(mem_st->selector, mdev->ost_event);
|
||||
break;
|
||||
case 0x8: /* _OST status */
|
||||
mdev = &mem_st->devs[mem_st->selector];
|
||||
mdev->ost_status = data;
|
||||
trace_mhp_acpi_write_ost_status(mem_st->selector, mdev->ost_status);
|
||||
/* TODO: report async error */
|
||||
/* TODO: implement memory removal on guest signal */
|
||||
break;
|
||||
@ -83,6 +95,7 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
mdev = &mem_st->devs[mem_st->selector];
|
||||
if (data & 2) { /* clear insert event */
|
||||
mdev->is_inserting = false;
|
||||
trace_mhp_acpi_clear_insert_evt(mem_st->selector);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
13
trace-events
13
trace-events
@ -1272,6 +1272,19 @@ xen_pv_mmio_write(uint64_t addr) "WARNING: write to Xen PV Device MMIO space (ad
|
||||
pci_cfg_read(const char *dev, unsigned devid, unsigned fnid, unsigned offs, unsigned val) "%s %02u:%u @0x%x -> 0x%x"
|
||||
pci_cfg_write(const char *dev, unsigned devid, unsigned fnid, unsigned offs, unsigned val) "%s %02u:%u @0x%x <- 0x%x"
|
||||
|
||||
#hw/acpi/memory_hotplug.c
|
||||
mhp_acpi_invalid_slot_selected(uint32_t slot) "0x%"PRIx32
|
||||
mhp_acpi_read_addr_lo(uint32_t slot, uint32_t addr) "slot[0x%"PRIx32"] addr lo: 0x%"PRIx32
|
||||
mhp_acpi_read_addr_hi(uint32_t slot, uint32_t addr) "slot[0x%"PRIx32"] addr hi: 0x%"PRIx32
|
||||
mhp_acpi_read_size_lo(uint32_t slot, uint32_t size) "slot[0x%"PRIx32"] size lo: 0x%"PRIx32
|
||||
mhp_acpi_read_size_hi(uint32_t slot, uint32_t size) "slot[0x%"PRIx32"] size hi: 0x%"PRIx32
|
||||
mhp_acpi_read_pxm(uint32_t slot, uint32_t pxm) "slot[0x%"PRIx32"] proximity: 0x%"PRIx32
|
||||
mhp_acpi_read_flags(uint32_t slot, uint32_t flags) "slot[0x%"PRIx32"] flags: 0x%"PRIx32
|
||||
mhp_acpi_write_slot(uint32_t slot) "set active slot: 0x%"PRIx32
|
||||
mhp_acpi_write_ost_ev(uint32_t slot, uint32_t ev) "slot[0x%"PRIx32"] OST EVENT: 0x%"PRIx32
|
||||
mhp_acpi_write_ost_status(uint32_t slot, uint32_t st) "slot[0x%"PRIx32"] OST STATUS: 0x%"PRIx32
|
||||
mhp_acpi_clear_insert_evt(uint32_t slot) "slot[0x%"PRIx32"] clear insert event"
|
||||
|
||||
# target-s390x/kvm.c
|
||||
kvm_enable_cmma(int rc) "CMMA: enabling with result code %d"
|
||||
kvm_clear_cmma(int rc) "CMMA: clearing with result code %d"
|
||||
|
Loading…
Reference in New Issue
Block a user