pci, pc, virtio bug fixes
This reverts PCI master abort support - we'll want it eventually but it exposes too many core bugs to be safe for 1.7. This also reverts a recent exec.c change that was an attempt to work-around some of these core bugs. Also included are small fixes in pc and virtio, and a core loader fix for PPC bamboo. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.15 (GNU/Linux) iQEcBAABAgAGBQJSf4ZyAAoJECgfDbjSjVRp9DIIAK7yEMa9ie5n3sInKH+xHT3R Sf4uErqx55WfT/54dnLJPrs7DTfXblW+Qjnq/7RuaoJ32Dfshgxz64mPF+Lm2s3+ ghjdQrKo2YkdSbbxy+AnBNO4eHMSeUs/rM2yIfi7FZU0nwC7wNe1QpAN3UjM4yAF 5vE18xZE0Rxz/prXgofLtPHa1czvGPFk1qbS7Vag6HCSkfEI4N1Jxf9otDRV6KZP 9hX0kTvZyOKdbhccN05G4VCWwx5YUrpBsNSoph4Jx1aokEBoucr4sgE1FPDp0H9H bJqDaAM2G5HNrDtIiDov5WOzRNT/ly011Q4mcaQh3va0pqUXttKCHgE1KRgn76I= =iMNW -----END PGP SIGNATURE----- Merge remote-tracking branch 'mst/tags/for_anthony' into staging pci, pc, virtio bug fixes This reverts PCI master abort support - we'll want it eventually but it exposes too many core bugs to be safe for 1.7. This also reverts a recent exec.c change that was an attempt to work-around some of these core bugs. Also included are small fixes in pc and virtio, and a core loader fix for PPC bamboo. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Sun 10 Nov 2013 05:13:22 AM PST using RSA key ID D28D5469 # gpg: Can't check signature: public key not found # By Michael S. Tsirkin (3) and others # Via Michael S. Tsirkin * mst/tags/for_anthony: Revert "exec: limit system memory size" Revert "hw/pci: partially handle pci master abort" loader: drop return value for rom_add_blob_fixed acpi-build: disable with -no-acpi virtio-net: only delete bh that existed Fix pc migration from qemu <= 1.5 Message-id: 1384159176-31662-1-git-send-email-mst@redhat.com Signed-off-by: Anthony Liguori <aliguori@amazon.com>
This commit is contained in:
		
						commit
						29c5b77d3d
					
				
							
								
								
									
										7
									
								
								exec.c
								
								
								
								
							
							
						
						
									
										7
									
								
								exec.c
								
								
								
								
							| 
						 | 
					@ -1743,12 +1743,7 @@ void address_space_destroy_dispatch(AddressSpace *as)
 | 
				
			||||||
static void memory_map_init(void)
 | 
					static void memory_map_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    system_memory = g_malloc(sizeof(*system_memory));
 | 
					    system_memory = g_malloc(sizeof(*system_memory));
 | 
				
			||||||
 | 
					    memory_region_init(system_memory, NULL, "system", INT64_MAX);
 | 
				
			||||||
    assert(TARGET_PHYS_ADDR_SPACE_BITS <= 64);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    memory_region_init(system_memory, NULL, "system",
 | 
					 | 
				
			||||||
                       TARGET_PHYS_ADDR_SPACE_BITS == 64 ?
 | 
					 | 
				
			||||||
                       UINT64_MAX : (0x1ULL << TARGET_PHYS_ADDR_SPACE_BITS));
 | 
					 | 
				
			||||||
    address_space_init(&address_space_memory, system_memory, "memory");
 | 
					    address_space_init(&address_space_memory, system_memory, "memory");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    system_io = g_malloc(sizeof(*system_io));
 | 
					    system_io = g_malloc(sizeof(*system_io));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1182,6 +1182,11 @@ void acpi_setup(PcGuestInfo *guest_info)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!acpi_enabled) {
 | 
				
			||||||
 | 
					        ACPI_BUILD_DPRINTF(3, "ACPI disabled. Bailing out.\n");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    build_state = g_malloc0(sizeof *build_state);
 | 
					    build_state = g_malloc0(sizeof *build_state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    build_state->guest_info = guest_info;
 | 
					    build_state->guest_info = guest_info;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,6 +48,7 @@ typedef struct I440FXState {
 | 
				
			||||||
    PCIHostState parent_obj;
 | 
					    PCIHostState parent_obj;
 | 
				
			||||||
    PcPciInfo pci_info;
 | 
					    PcPciInfo pci_info;
 | 
				
			||||||
    uint64_t pci_hole64_size;
 | 
					    uint64_t pci_hole64_size;
 | 
				
			||||||
 | 
					    uint32_t short_root_bus;
 | 
				
			||||||
} I440FXState;
 | 
					} I440FXState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PIIX_NUM_PIC_IRQS       16      /* i8259 * 2 */
 | 
					#define PIIX_NUM_PIC_IRQS       16      /* i8259 * 2 */
 | 
				
			||||||
| 
						 | 
					@ -720,13 +721,19 @@ static const TypeInfo i440fx_info = {
 | 
				
			||||||
static const char *i440fx_pcihost_root_bus_path(PCIHostState *host_bridge,
 | 
					static const char *i440fx_pcihost_root_bus_path(PCIHostState *host_bridge,
 | 
				
			||||||
                                                PCIBus *rootbus)
 | 
					                                                PCIBus *rootbus)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    I440FXState *s = I440FX_PCI_HOST_BRIDGE(host_bridge);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* For backwards compat with old device paths */
 | 
					    /* For backwards compat with old device paths */
 | 
				
			||||||
 | 
					    if (s->short_root_bus) {
 | 
				
			||||||
        return "0000";
 | 
					        return "0000";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    return "0000:00";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static Property i440fx_props[] = {
 | 
					static Property i440fx_props[] = {
 | 
				
			||||||
    DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, I440FXState,
 | 
					    DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, I440FXState,
 | 
				
			||||||
                     pci_hole64_size, DEFAULT_PCI_HOLE64_SIZE),
 | 
					                     pci_hole64_size, DEFAULT_PCI_HOLE64_SIZE),
 | 
				
			||||||
 | 
					    DEFINE_PROP_UINT32("short_root_bus", I440FXState, short_root_bus, 0),
 | 
				
			||||||
    DEFINE_PROP_END_OF_LIST(),
 | 
					    DEFINE_PROP_END_OF_LIST(),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,9 +61,14 @@ static void q35_host_realize(DeviceState *dev, Error **errp)
 | 
				
			||||||
static const char *q35_host_root_bus_path(PCIHostState *host_bridge,
 | 
					static const char *q35_host_root_bus_path(PCIHostState *host_bridge,
 | 
				
			||||||
                                          PCIBus *rootbus)
 | 
					                                          PCIBus *rootbus)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    Q35PCIHost *s = Q35_HOST_DEVICE(host_bridge);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     /* For backwards compat with old device paths */
 | 
					     /* For backwards compat with old device paths */
 | 
				
			||||||
 | 
					    if (s->mch.short_root_bus) {
 | 
				
			||||||
        return "0000";
 | 
					        return "0000";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    return "0000:00";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void q35_host_get_pci_hole_start(Object *obj, Visitor *v,
 | 
					static void q35_host_get_pci_hole_start(Object *obj, Visitor *v,
 | 
				
			||||||
                                        void *opaque, const char *name,
 | 
					                                        void *opaque, const char *name,
 | 
				
			||||||
| 
						 | 
					@ -124,6 +129,7 @@ static Property mch_props[] = {
 | 
				
			||||||
                        MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT),
 | 
					                        MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT),
 | 
				
			||||||
    DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, Q35PCIHost,
 | 
					    DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, Q35PCIHost,
 | 
				
			||||||
                     mch.pci_hole64_size, DEFAULT_PCI_HOLE64_SIZE),
 | 
					                     mch.pci_hole64_size, DEFAULT_PCI_HOLE64_SIZE),
 | 
				
			||||||
 | 
					    DEFINE_PROP_UINT32("short_root_bus", Q35PCIHost, mch.short_root_bus, 0),
 | 
				
			||||||
    DEFINE_PROP_END_OF_LIST(),
 | 
					    DEFINE_PROP_END_OF_LIST(),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								hw/pci/pci.c
								
								
								
								
							
							
						
						
									
										26
									
								
								hw/pci/pci.c
								
								
								
								
							| 
						 | 
					@ -283,24 +283,6 @@ const char *pci_root_bus_path(PCIDevice *dev)
 | 
				
			||||||
    return rootbus->qbus.name;
 | 
					    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,
 | 
					static void pci_bus_init(PCIBus *bus, DeviceState *parent,
 | 
				
			||||||
                         const char *name,
 | 
					                         const char *name,
 | 
				
			||||||
                         MemoryRegion *address_space_mem,
 | 
					                         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_mem = address_space_mem;
 | 
				
			||||||
    bus->address_space_io = address_space_io;
 | 
					    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 */
 | 
					    /* host bridge */
 | 
				
			||||||
    QLIST_INIT(&bus->child);
 | 
					    QLIST_INIT(&bus->child);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -110,8 +110,9 @@ static int bamboo_load_device_tree(hwaddr addr,
 | 
				
			||||||
    qemu_devtree_setprop_cell(fdt, "/cpus/cpu@0", "timebase-frequency",
 | 
					    qemu_devtree_setprop_cell(fdt, "/cpus/cpu@0", "timebase-frequency",
 | 
				
			||||||
                              tb_freq);
 | 
					                              tb_freq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
 | 
					    rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr);
 | 
				
			||||||
    g_free(fdt);
 | 
					    g_free(fdt);
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -260,6 +260,14 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t);
 | 
				
			||||||
            .driver   = "qemu32-" TYPE_X86_CPU,\
 | 
					            .driver   = "qemu32-" TYPE_X86_CPU,\
 | 
				
			||||||
            .property = "model",\
 | 
					            .property = "model",\
 | 
				
			||||||
            .value    = stringify(3),\
 | 
					            .value    = stringify(3),\
 | 
				
			||||||
 | 
					        },{\
 | 
				
			||||||
 | 
					            .driver   = "i440FX-pcihost",\
 | 
				
			||||||
 | 
					            .property = "short_root_bus",\
 | 
				
			||||||
 | 
					            .value    = stringify(1),\
 | 
				
			||||||
 | 
					        },{\
 | 
				
			||||||
 | 
					            .driver   = "q35-pcihost",\
 | 
				
			||||||
 | 
					            .property = "short_root_bus",\
 | 
				
			||||||
 | 
					            .value    = stringify(1),\
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PC_COMPAT_1_5 \
 | 
					#define PC_COMPAT_1_5 \
 | 
				
			||||||
| 
						 | 
					@ -296,6 +304,14 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t);
 | 
				
			||||||
            .driver = TYPE_X86_CPU,\
 | 
					            .driver = TYPE_X86_CPU,\
 | 
				
			||||||
            .property = "pmu",\
 | 
					            .property = "pmu",\
 | 
				
			||||||
            .value = "on",\
 | 
					            .value = "on",\
 | 
				
			||||||
 | 
					        },{\
 | 
				
			||||||
 | 
					            .driver   = "i440FX-pcihost",\
 | 
				
			||||||
 | 
					            .property = "short_root_bus",\
 | 
				
			||||||
 | 
					            .value    = stringify(0),\
 | 
				
			||||||
 | 
					        },{\
 | 
				
			||||||
 | 
					            .driver   = "q35-pcihost",\
 | 
				
			||||||
 | 
					            .property = "short_root_bus",\
 | 
				
			||||||
 | 
					            .value    = stringify(0),\
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PC_COMPAT_1_4 \
 | 
					#define PC_COMPAT_1_4 \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ void do_info_roms(Monitor *mon, const QDict *qdict);
 | 
				
			||||||
#define rom_add_file_fixed(_f, _a, _i)          \
 | 
					#define rom_add_file_fixed(_f, _a, _i)          \
 | 
				
			||||||
    rom_add_file(_f, NULL, _a, _i)
 | 
					    rom_add_file(_f, NULL, _a, _i)
 | 
				
			||||||
#define rom_add_blob_fixed(_f, _b, _l, _a)      \
 | 
					#define rom_add_blob_fixed(_f, _b, _l, _a)      \
 | 
				
			||||||
    (rom_add_blob(_f, _b, _l, _a, NULL, NULL, NULL) ? 0 : -1)
 | 
					    rom_add_blob(_f, _b, _l, _a, NULL, NULL, NULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PC_ROM_MIN_VGA     0xc0000
 | 
					#define PC_ROM_MIN_VGA     0xc0000
 | 
				
			||||||
#define PC_ROM_MIN_OPTION  0xc8000
 | 
					#define PC_ROM_MIN_OPTION  0xc8000
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,6 +61,7 @@ typedef struct MCHPCIState {
 | 
				
			||||||
    ram_addr_t above_4g_mem_size;
 | 
					    ram_addr_t above_4g_mem_size;
 | 
				
			||||||
    uint64_t pci_hole64_size;
 | 
					    uint64_t pci_hole64_size;
 | 
				
			||||||
    PcGuestInfo *guest_info;
 | 
					    PcGuestInfo *guest_info;
 | 
				
			||||||
 | 
					    uint32_t short_root_bus;
 | 
				
			||||||
} MCHPCIState;
 | 
					} MCHPCIState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct Q35PCIHost {
 | 
					typedef struct Q35PCIHost {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,6 @@ struct PCIBus {
 | 
				
			||||||
    PCIDevice *parent_dev;
 | 
					    PCIDevice *parent_dev;
 | 
				
			||||||
    MemoryRegion *address_space_mem;
 | 
					    MemoryRegion *address_space_mem;
 | 
				
			||||||
    MemoryRegion *address_space_io;
 | 
					    MemoryRegion *address_space_io;
 | 
				
			||||||
    MemoryRegion master_abort_mem;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QLIST_HEAD(, PCIBus) child; /* this will be replaced by qdev later */
 | 
					    QLIST_HEAD(, PCIBus) child; /* this will be replaced by qdev later */
 | 
				
			||||||
    QLIST_ENTRY(PCIBus) sibling;/* this will be replaced by qdev later */
 | 
					    QLIST_ENTRY(PCIBus) sibling;/* this will be replaced by qdev later */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue