[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 6/6] xen-pt: Round pci regions sizes to XEN_PAGE_SIZ
From: |
Jason Andryuk |
Subject: |
[Qemu-devel] [PATCH 6/6] xen-pt: Round pci regions sizes to XEN_PAGE_SIZE |
Date: |
Mon, 11 Mar 2019 14:02:16 -0400 |
From: Simon Gaiser <address@hidden>
If a pci memory region has a size < XEN_PAGE_SIZE it can get located at
an address which is not page aligned. This breaks the memory mapping via
xc_domain_memory_mapping since this function is page based and the
"offset" is therefore lost.
Without this patch you will see error like this in the stubdom log:
[00:05.0] xen_pt_bar_read: Error: Should not read BAR through QEMU.
@0x0000000000000004
QubesOS/qubes-issues#2849
Signed-off-by: Simon Gaiser <address@hidden>
Signed-off-by: Jason Andryuk <address@hidden>
---
hw/xen/xen_pt.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index 5539d56c3a..7f680442ee 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -449,9 +449,10 @@ static int xen_pt_register_regions(XenPCIPassthroughState
*s, uint16_t *cmd)
/* Register PIO/MMIO BARs */
for (i = 0; i < PCI_ROM_SLOT; i++) {
XenHostPCIIORegion *r = &d->io_regions[i];
+ pcibus_t r_size = r->size;
uint8_t type;
- if (r->base_addr == 0 || r->size == 0) {
+ if (r->base_addr == 0 || r_size == 0) {
continue;
}
@@ -469,15 +470,18 @@ static int xen_pt_register_regions(XenPCIPassthroughState
*s, uint16_t *cmd)
type |= PCI_BASE_ADDRESS_MEM_TYPE_64;
}
*cmd |= PCI_COMMAND_MEMORY;
+
+ /* Round up to a full page for the hypercall. */
+ r_size = (r_size + XC_PAGE_SIZE - 1) & XC_PAGE_MASK;
}
memory_region_init_io(&s->bar[i], OBJECT(s), &ops, &s->dev,
- "xen-pci-pt-bar", r->size);
+ "xen-pci-pt-bar", r_size);
pci_register_bar(&s->dev, i, type, &s->bar[i]);
XEN_PT_LOG(&s->dev, "IO region %i registered (size=0x%08"PRIx64
" base_addr=0x%08"PRIx64" type: %#x)\n",
- i, r->size, r->base_addr, type);
+ i, r_size, r->base_addr, type);
}
/* Register expansion ROM address */
--
2.20.1
[Qemu-devel] [PATCH 4/6] xen: Set HVM_PARAM_DM_DOMAIN for stubdom on older Xen, Jason Andryuk, 2019/03/11
[Qemu-devel] [PATCH 2/6] xen: Move xenstore initialization to common location, Jason Andryuk, 2019/03/11
[Qemu-devel] [PATCH 6/6] xen-pt: Round pci regions sizes to XEN_PAGE_SIZE,
Jason Andryuk <=
Re: [Qemu-devel] [PATCH 6/6] xen-pt: Round pci regions sizes to XEN_PAGE_SIZE, Simon Gaiser, 2019/03/14
Re: [Qemu-devel] [PATCH 6/6] xen-pt: Round pci regions sizes to XEN_PAGE_SIZE, Paul Durrant, 2019/03/15
Re: [Qemu-devel] [Xen-devel] [PATCH 6/6] xen-pt: Round pci regions sizes to XEN_PAGE_SIZE, Andrew Cooper, 2019/03/15
Re: [Qemu-devel] [Xen-devel] [PATCH 6/6] xen-pt: Round pci regions sizes to XEN_PAGE_SIZE, Jason Andryuk, 2019/03/20
Re: [Qemu-devel] [Xen-devel] [PATCH 6/6] xen-pt: Round pci regions sizes to XEN_PAGE_SIZE, Roger Pau Monné, 2019/03/21