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)
|
||||
{
|
||||
system_memory = g_malloc(sizeof(*system_memory));
|
||||
|
||||
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));
|
||||
memory_region_init(system_memory, NULL, "system", INT64_MAX);
|
||||
address_space_init(&address_space_memory, system_memory, "memory");
|
||||
|
||||
system_io = g_malloc(sizeof(*system_io));
|
||||
|
@ -1182,6 +1182,11 @@ void acpi_setup(PcGuestInfo *guest_info)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!acpi_enabled) {
|
||||
ACPI_BUILD_DPRINTF(3, "ACPI disabled. Bailing out.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
build_state = g_malloc0(sizeof *build_state);
|
||||
|
||||
build_state->guest_info = guest_info;
|
||||
|
@ -48,6 +48,7 @@ typedef struct I440FXState {
|
||||
PCIHostState parent_obj;
|
||||
PcPciInfo pci_info;
|
||||
uint64_t pci_hole64_size;
|
||||
uint32_t short_root_bus;
|
||||
} I440FXState;
|
||||
|
||||
#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,
|
||||
PCIBus *rootbus)
|
||||
{
|
||||
I440FXState *s = I440FX_PCI_HOST_BRIDGE(host_bridge);
|
||||
|
||||
/* For backwards compat with old device paths */
|
||||
return "0000";
|
||||
if (s->short_root_bus) {
|
||||
return "0000";
|
||||
}
|
||||
return "0000:00";
|
||||
}
|
||||
|
||||
static Property i440fx_props[] = {
|
||||
DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, I440FXState,
|
||||
pci_hole64_size, DEFAULT_PCI_HOLE64_SIZE),
|
||||
DEFINE_PROP_UINT32("short_root_bus", I440FXState, short_root_bus, 0),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
@ -61,8 +61,13 @@ static void q35_host_realize(DeviceState *dev, Error **errp)
|
||||
static const char *q35_host_root_bus_path(PCIHostState *host_bridge,
|
||||
PCIBus *rootbus)
|
||||
{
|
||||
/* For backwards compat with old device paths */
|
||||
return "0000";
|
||||
Q35PCIHost *s = Q35_HOST_DEVICE(host_bridge);
|
||||
|
||||
/* For backwards compat with old device paths */
|
||||
if (s->mch.short_root_bus) {
|
||||
return "0000";
|
||||
}
|
||||
return "0000:00";
|
||||
}
|
||||
|
||||
static void q35_host_get_pci_hole_start(Object *obj, Visitor *v,
|
||||
@ -124,6 +129,7 @@ static Property mch_props[] = {
|
||||
MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT),
|
||||
DEFINE_PROP_SIZE(PCI_HOST_PROP_PCI_HOLE64_SIZE, Q35PCIHost,
|
||||
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(),
|
||||
};
|
||||
|
||||
|
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;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
|
@ -110,8 +110,9 @@ static int bamboo_load_device_tree(hwaddr addr,
|
||||
qemu_devtree_setprop_cell(fdt, "/cpus/cpu@0", "timebase-frequency",
|
||||
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);
|
||||
return 0;
|
||||
|
||||
out:
|
||||
|
||||
|
@ -260,6 +260,14 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t);
|
||||
.driver = "qemu32-" TYPE_X86_CPU,\
|
||||
.property = "model",\
|
||||
.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 \
|
||||
@ -296,6 +304,14 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t);
|
||||
.driver = TYPE_X86_CPU,\
|
||||
.property = "pmu",\
|
||||
.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 \
|
||||
|
@ -55,7 +55,7 @@ void do_info_roms(Monitor *mon, const QDict *qdict);
|
||||
#define rom_add_file_fixed(_f, _a, _i) \
|
||||
rom_add_file(_f, NULL, _a, _i)
|
||||
#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_OPTION 0xc8000
|
||||
|
@ -61,6 +61,7 @@ typedef struct MCHPCIState {
|
||||
ram_addr_t above_4g_mem_size;
|
||||
uint64_t pci_hole64_size;
|
||||
PcGuestInfo *guest_info;
|
||||
uint32_t short_root_bus;
|
||||
} MCHPCIState;
|
||||
|
||||
typedef struct Q35PCIHost {
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user