qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH for-1.7 1/2] Revert "hw/pci: partially handle pci ma


From: Marcel Apfelbaum
Subject: [Qemu-devel] [PATCH for-1.7 1/2] Revert "hw/pci: partially handle pci master abort"
Date: Sun, 10 Nov 2013 14:15:24 +0200

This reverts commit a53ae8e934cd54686875b5bcfc2f434244ee55d6.

The master-abort patch introduced a background memory region
covering all 64 bit pci address space, the visible parts
being the unused pci-holes addresses.

The patch revealed the following issues:
 1. Some memory regions have INT64_MAX size, but the size
    was supposed to be UINT64_MAX (meaning that the
    region covers all 64 bit address space). Having
    a region that is not even a multiple of PAGE_SIZE
    is really not what we want.
 2. exec.c does not support all the 64 bit address range
    and when using an unsupported address, it leads to
    page tables corruption.
 3. Some memory regions overlap and the visible region
    is selected by chance (the algorithm implementation)
    and not by the memory API:
    - selecting a proper priority
    - arrange the regions that are not supposed to overlap.
    
The patch is reverted because the impact for 1.7 is too big.
After the issues above are solved, the patch can finally
be applied.


Signed-off-by: Marcel Apfelbaum <address@hidden>
---
 hw/pci/pci.c             | 26 --------------------------
 include/hw/pci/pci_bus.h |  1 -
 2 files changed, 27 deletions(-)

diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index a98c8a0..ed32059 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -283,24 +283,6 @@ const char *pci_root_bus_path(PCIDevice *dev)
     return rootbus->qbus.name;
 }
 
-static uint64_t master_abort_mem_read(void *opaque, hwaddr addr, unsigned size)
-{
-   return -1ULL;
-}
-
-static void master_abort_mem_write(void *opaque, hwaddr addr, uint64_t val,
-                                   unsigned size)
-{
-}
-
-static const MemoryRegionOps master_abort_mem_ops = {
-    .read = master_abort_mem_read,
-    .write = master_abort_mem_write,
-    .endianness = DEVICE_LITTLE_ENDIAN,
-};
-
-#define MASTER_ABORT_MEM_PRIORITY INT_MIN
-
 static void pci_bus_init(PCIBus *bus, DeviceState *parent,
                          const char *name,
                          MemoryRegion *address_space_mem,
@@ -312,14 +294,6 @@ static void pci_bus_init(PCIBus *bus, DeviceState *parent,
     bus->address_space_mem = address_space_mem;
     bus->address_space_io = address_space_io;
 
-
-    memory_region_init_io(&bus->master_abort_mem, OBJECT(bus),
-                          &master_abort_mem_ops, bus, "pci-master-abort",
-                          memory_region_size(bus->address_space_mem));
-    memory_region_add_subregion_overlap(bus->address_space_mem,
-                                        0, &bus->master_abort_mem,
-                                        MASTER_ABORT_MEM_PRIORITY);
-
     /* host bridge */
     QLIST_INIT(&bus->child);
 
diff --git a/include/hw/pci/pci_bus.h b/include/hw/pci/pci_bus.h
index 2ad5edb..9df1788 100644
--- a/include/hw/pci/pci_bus.h
+++ b/include/hw/pci/pci_bus.h
@@ -23,7 +23,6 @@ struct PCIBus {
     PCIDevice *parent_dev;
     MemoryRegion *address_space_mem;
     MemoryRegion *address_space_io;
-    MemoryRegion master_abort_mem;
 
     QLIST_HEAD(, PCIBus) child; /* this will be replaced by qdev later */
     QLIST_ENTRY(PCIBus) sibling;/* this will be replaced by qdev later */
-- 
1.8.3.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]