mirror of https://github.com/xemu-project/xemu.git
msi: simplify range checks
config write handlers should be idempotent. So no need for complex range checks: a simple one checking that we are touching the relevant capability will do. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
f9aebe2ef5
commit
531a0b82dd
47
hw/msi.c
47
hw/msi.c
|
@ -258,35 +258,30 @@ void msi_write_config(PCIDevice *dev, uint32_t addr, uint32_t val, int len)
|
||||||
uint32_t pending;
|
uint32_t pending;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#ifdef MSI_DEBUG
|
if (!ranges_overlap(addr, len, dev->msi_cap, msi_cap_sizeof(flags))) {
|
||||||
if (ranges_overlap(addr, len, dev->msi_cap, msi_cap_sizeof(flags))) {
|
|
||||||
MSI_DEV_PRINTF(dev, "addr 0x%"PRIx32" val 0x%"PRIx32" len %d\n",
|
|
||||||
addr, val, len);
|
|
||||||
MSI_DEV_PRINTF(dev, "ctrl: 0x%"PRIx16" address: 0x%"PRIx32,
|
|
||||||
flags,
|
|
||||||
pci_get_long(dev->config + msi_address_lo_off(dev)));
|
|
||||||
if (msi64bit) {
|
|
||||||
fprintf(stderr, " addrss-hi: 0x%"PRIx32,
|
|
||||||
pci_get_long(dev->config + msi_address_hi_off(dev)));
|
|
||||||
}
|
|
||||||
fprintf(stderr, " data: 0x%"PRIx16,
|
|
||||||
pci_get_word(dev->config + msi_data_off(dev, msi64bit)));
|
|
||||||
if (flags & PCI_MSI_FLAGS_MASKBIT) {
|
|
||||||
fprintf(stderr, " mask 0x%"PRIx32" pending 0x%"PRIx32,
|
|
||||||
pci_get_long(dev->config + msi_mask_off(dev, msi64bit)),
|
|
||||||
pci_get_long(dev->config + msi_pending_off(dev, msi64bit)));
|
|
||||||
}
|
|
||||||
fprintf(stderr, "\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Are we modified? */
|
|
||||||
if (!(ranges_overlap(addr, len, msi_flags_off(dev), 2) ||
|
|
||||||
(msi_per_vector_mask &&
|
|
||||||
ranges_overlap(addr, len, msi_mask_off(dev, msi64bit), 4)))) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MSI_DEBUG
|
||||||
|
MSI_DEV_PRINTF(dev, "addr 0x%"PRIx32" val 0x%"PRIx32" len %d\n",
|
||||||
|
addr, val, len);
|
||||||
|
MSI_DEV_PRINTF(dev, "ctrl: 0x%"PRIx16" address: 0x%"PRIx32,
|
||||||
|
flags,
|
||||||
|
pci_get_long(dev->config + msi_address_lo_off(dev)));
|
||||||
|
if (msi64bit) {
|
||||||
|
fprintf(stderr, " addrss-hi: 0x%"PRIx32,
|
||||||
|
pci_get_long(dev->config + msi_address_hi_off(dev)));
|
||||||
|
}
|
||||||
|
fprintf(stderr, " data: 0x%"PRIx16,
|
||||||
|
pci_get_word(dev->config + msi_data_off(dev, msi64bit)));
|
||||||
|
if (flags & PCI_MSI_FLAGS_MASKBIT) {
|
||||||
|
fprintf(stderr, " mask 0x%"PRIx32" pending 0x%"PRIx32,
|
||||||
|
pci_get_long(dev->config + msi_mask_off(dev, msi64bit)),
|
||||||
|
pci_get_long(dev->config + msi_pending_off(dev, msi64bit)));
|
||||||
|
}
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!(flags & PCI_MSI_FLAGS_ENABLE)) {
|
if (!(flags & PCI_MSI_FLAGS_ENABLE)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue