Skip to content

Commit

Permalink
Merge remote-tracking branch 'mst/tags/for_anthony' into staging
Browse files Browse the repository at this point in the history
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 <[email protected]>

# 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: [email protected]
Signed-off-by: Anthony Liguori <[email protected]>
  • Loading branch information
Anthony Liguori committed Nov 13, 2013
2 parents b873a55 + ef9e455 commit 29c5b77
Show file tree
Hide file tree
Showing 10 changed files with 42 additions and 38 deletions.
7 changes: 1 addition & 6 deletions exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
5 changes: 5 additions & 0 deletions hw/i386/acpi-build.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
9 changes: 8 additions & 1 deletion hw/pci-host/piix.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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(),
};

Expand Down
10 changes: 8 additions & 2 deletions hw/pci-host/q35.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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(),
};

Expand Down
26 changes: 0 additions & 26 deletions hw/pci/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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);

Expand Down
3 changes: 2 additions & 1 deletion hw/ppc/ppc440_bamboo.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down
16 changes: 16 additions & 0 deletions include/hw/i386/pc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down Expand Up @@ -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 \
Expand Down
2 changes: 1 addition & 1 deletion include/hw/loader.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions include/hw/pci-host/q35.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
1 change: 0 additions & 1 deletion include/hw/pci/pci_bus.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 29c5b77

Please sign in to comment.