From: Anthony Liguori <anthony@codemonkey.ws>
To: "Michael S. Tsirkin" <mst@redhat.com>, qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, imammedo@redhat.com, kraxel@redhat.com,
marcel.a@redhat.com
Subject: Re: [Qemu-devel] [PULL 41/43] pcihp: generalization of piix4 acpi
Date: Mon, 14 Oct 2013 15:36:13 -0700 [thread overview]
Message-ID: <87txgjlbtu.fsf@codemonkey.ws> (raw)
In-Reply-To: <1381762577-12526-42-git-send-email-mst@redhat.com>
"Michael S. Tsirkin" <mst@redhat.com> writes:
> Add ACPI based PCI hotplug library with bridge hotplug
> support.
> Design
> - each bus gets assigned "bsel" property.
> - ACPI code writes this number
> to a new BNUM register, then uses existing
> UP/DOWN registers to probe slot status;
> to eject, write number to BNUM register,
> then slot into existing EJ.
>
> The interface is actually backwards-compatible with
> existing PIIX4 ACPI (though not migration compatible).
>
> This is split out from PIIX4 codebase so we can
> reuse it for Q35 as well.
So we break migration for PIIX4 so the code can be reused for Q35?
That doesn't seem acceptable to me.
Regards,
Anthony Liguori
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> include/hw/acpi/pcihp.h | 72 +++++++++++
> hw/acpi/pcihp.c | 312 ++++++++++++++++++++++++++++++++++++++++++++++++
> hw/acpi/Makefile.objs | 2 +-
> 3 files changed, 385 insertions(+), 1 deletion(-)
> create mode 100644 include/hw/acpi/pcihp.h
> create mode 100644 hw/acpi/pcihp.c
>
> diff --git a/include/hw/acpi/pcihp.h b/include/hw/acpi/pcihp.h
> new file mode 100644
> index 0000000..6230e60
> --- /dev/null
> +++ b/include/hw/acpi/pcihp.h
> @@ -0,0 +1,72 @@
> +/*
> + * QEMU<->ACPI BIOS PCI hotplug interface
> + *
> + * QEMU supports PCI hotplug via ACPI. This module
> + * implements the interface between QEMU and the ACPI BIOS.
> + * Interface specification - see docs/specs/acpi_pci_hotplug.txt
> + *
> + * Copyright (c) 2013, Red Hat Inc, Michael S. Tsirkin (mst@redhat.com)
> + * Copyright (c) 2006 Fabrice Bellard
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License version 2 as published by the Free Software Foundation.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>
> + *
> + * Contributions after 2012-01-13 are licensed under the terms of the
> + * GNU GPL, version 2 or (at your option) any later version.
> + */
> +
> +#ifndef HW_ACPI_PCIHP_H
> +#define HW_ACPI_PCIHP_H
> +
> +#include <inttypes.h>
> +#include <qemu/typedefs.h>
> +#include "hw/pci/pci.h" /* for PCIHotplugState */
> +
> +typedef struct AcpiPciHpPciStatus {
> + uint32_t up; /* deprecated, maintained for migration compatibility */
> + uint32_t down;
> + uint32_t hotplug_enable;
> + uint32_t device_present;
> +} AcpiPciHpPciStatus;
> +
> +#define ACPI_PCIHP_PROP_BSEL "acpi-pcihp-bsel"
> +#define ACPI_PCIHP_MAX_HOTPLUG_BUS 256
> +
> +typedef struct AcpiPciHpState {
> + AcpiPciHpPciStatus acpi_pcihp_pci_status[ACPI_PCIHP_MAX_HOTPLUG_BUS];
> + uint32_t hotplug_select;
> + PCIBus *root;
> + MemoryRegion io;
> +} AcpiPciHpState;
> +
> +void acpi_pcihp_init(AcpiPciHpState *, PCIBus *root,
> + MemoryRegion *address_space_io);
> +
> +/* Invoke on device hotplug */
> +int acpi_pcihp_device_hotplug(AcpiPciHpState *, PCIDevice *,
> + PCIHotplugState state);
> +
> +/* Called on reset */
> +void acpi_pcihp_reset(AcpiPciHpState *s);
> +
> +extern const VMStateDescription vmstate_acpi_pcihp_pci_status;
> +
> +#define VMSTATE_PCI_HOTPLUG(pcihp, state, test_pcihp) \
> + VMSTATE_UINT32_TEST(pcihp.hotplug_select, state, \
> + test_pcihp), \
> + VMSTATE_STRUCT_ARRAY_TEST(pcihp.acpi_pcihp_pci_status, state, \
> + ACPI_PCIHP_MAX_HOTPLUG_BUS, \
> + test_pcihp, 1, \
> + vmstate_acpi_pcihp_pci_status, \
> + AcpiPciHpPciStatus)
> +
> +#endif
> diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
> new file mode 100644
> index 0000000..13938e6
> --- /dev/null
> +++ b/hw/acpi/pcihp.c
> @@ -0,0 +1,312 @@
> +/*
> + * QEMU<->ACPI BIOS PCI hotplug interface
> + *
> + * QEMU supports PCI hotplug via ACPI. This module
> + * implements the interface between QEMU and the ACPI BIOS.
> + * Interface specification - see docs/specs/acpi_pci_hotplug.txt
> + *
> + * Copyright (c) 2013, Red Hat Inc, Michael S. Tsirkin (mst@redhat.com)
> + * Copyright (c) 2006 Fabrice Bellard
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License version 2 as published by the Free Software Foundation.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>
> + *
> + * Contributions after 2012-01-13 are licensed under the terms of the
> + * GNU GPL, version 2 or (at your option) any later version.
> + */
> +
> +#include "hw/acpi/pcihp.h"
> +
> +#include "hw/hw.h"
> +#include "hw/i386/pc.h"
> +#include "hw/pci/pci.h"
> +#include "hw/acpi/acpi.h"
> +#include "sysemu/sysemu.h"
> +#include "qemu/range.h"
> +#include "exec/ioport.h"
> +#include "exec/address-spaces.h"
> +#include "hw/pci/pci_bus.h"
> +#include "qom/qom-qobject.h"
> +#include "qapi/qmp/qint.h"
> +
> +//#define DEBUG
> +
> +#ifdef DEBUG
> +# define ACPI_PCIHP_DPRINTF(format, ...) printf(format, ## __VA_ARGS__)
> +#else
> +# define ACPI_PCIHP_DPRINTF(format, ...) do { } while (0)
> +#endif
> +
> +#define PCI_HOTPLUG_ADDR 0xae00
> +#define PCI_HOTPLUG_SIZE 0x0014
> +#define PCI_UP_BASE 0xae00
> +#define PCI_DOWN_BASE 0xae04
> +#define PCI_EJ_BASE 0xae08
> +#define PCI_RMV_BASE 0xae0c
> +#define PCI_SEL_BASE 0xae10
> +
> +typedef struct AcpiPciHpFind {
> + int bsel;
> + PCIBus *bus;
> +} AcpiPciHpFind;
> +
> +static int acpi_pcihp_get_bsel(PCIBus *bus)
> +{
> + QObject *o = object_property_get_qobject(OBJECT(bus),
> + ACPI_PCIHP_PROP_BSEL, NULL);
> + int64_t bsel = -1;
> + if (o) {
> + bsel = qint_get_int(qobject_to_qint(o));
> + }
> + if (bsel < 0) {
> + return -1;
> + }
> + return bsel;
> +}
> +
> +static void acpi_pcihp_test_hotplug_bus(PCIBus *bus, void *opaque)
> +{
> + AcpiPciHpFind *find = opaque;
> + if (find->bsel == acpi_pcihp_get_bsel(bus)) {
> + find->bus = bus;
> + }
> +}
> +
> +static PCIBus *acpi_pcihp_find_hotplug_bus(AcpiPciHpState *s, int bsel)
> +{
> + AcpiPciHpFind find = { .bsel = bsel, .bus = NULL };
> +
> + if (bsel < 0) {
> + return NULL;
> + }
> +
> + pci_for_each_bus(s->root, acpi_pcihp_test_hotplug_bus, &find);
> +
> + if (!bsel && !find.bus) {
> + find.bus = s->root;
> + }
> + return find.bus;
> +}
> +
> +static bool acpi_pcihp_pc_no_hotplug(AcpiPciHpState *s, PCIDevice *dev)
> +{
> + PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev);
> + /*
> + * ACPI doesn't allow hotplug of bridge devices. Don't allow
> + * hot-unplug of bridge devices unless they were added by hotplug
> + * (and so, not described by acpi).
> + */
> + return (pc->is_bridge && !dev->qdev.hotplugged) || pc->no_hotplug;
> +}
> +
> +static void acpi_pcihp_eject_slot(AcpiPciHpState *s, unsigned bsel, unsigned slots)
> +{
> + BusChild *kid, *next;
> + int slot = ffs(slots) - 1;
> + bool slot_free = true;
> + PCIBus *bus = acpi_pcihp_find_hotplug_bus(s, bsel);
> +
> + if (!bus) {
> + return;
> + }
> +
> + /* Mark request as complete */
> + s->acpi_pcihp_pci_status[bsel].down &= ~(1U << slot);
> +
> + QTAILQ_FOREACH_SAFE(kid, &bus->qbus.children, sibling, next) {
> + DeviceState *qdev = kid->child;
> + PCIDevice *dev = PCI_DEVICE(qdev);
> + if (PCI_SLOT(dev->devfn) == slot) {
> + if (acpi_pcihp_pc_no_hotplug(s, dev)) {
> + slot_free = false;
> + } else {
> + qdev_free(qdev);
> + }
> + }
> + }
> + if (slot_free) {
> + s->acpi_pcihp_pci_status[bsel].device_present &= ~(1U << slot);
> + }
> +}
> +
> +static void acpi_pcihp_update_hotplug_bus(AcpiPciHpState *s, int bsel)
> +{
> + BusChild *kid, *next;
> + PCIBus *bus = acpi_pcihp_find_hotplug_bus(s, bsel);
> +
> + /* Execute any pending removes during reset */
> + while (s->acpi_pcihp_pci_status[bsel].down) {
> + acpi_pcihp_eject_slot(s, bsel, s->acpi_pcihp_pci_status[bsel].down);
> + }
> +
> + s->acpi_pcihp_pci_status[bsel].hotplug_enable = ~0;
> + s->acpi_pcihp_pci_status[bsel].device_present = 0;
> +
> + if (!bus) {
> + return;
> + }
> + QTAILQ_FOREACH_SAFE(kid, &bus->qbus.children, sibling, next) {
> + DeviceState *qdev = kid->child;
> + PCIDevice *pdev = PCI_DEVICE(qdev);
> + int slot = PCI_SLOT(pdev->devfn);
> +
> + if (acpi_pcihp_pc_no_hotplug(s, pdev)) {
> + s->acpi_pcihp_pci_status[bsel].hotplug_enable &= ~(1U << slot);
> + }
> +
> + s->acpi_pcihp_pci_status[bsel].device_present |= (1U << slot);
> + }
> +}
> +
> +static void acpi_pcihp_update(AcpiPciHpState *s)
> +{
> + int i;
> +
> + for (i = 0; i < ACPI_PCIHP_MAX_HOTPLUG_BUS; ++i) {
> + acpi_pcihp_update_hotplug_bus(s, i);
> + }
> +}
> +
> +void acpi_pcihp_reset(AcpiPciHpState *s)
> +{
> + acpi_pcihp_update(s);
> +}
> +
> +static void enable_device(AcpiPciHpState *s, unsigned bsel, int slot)
> +{
> + s->acpi_pcihp_pci_status[bsel].device_present |= (1U << slot);
> +}
> +
> +static void disable_device(AcpiPciHpState *s, unsigned bsel, int slot)
> +{
> + s->acpi_pcihp_pci_status[bsel].down |= (1U << slot);
> +}
> +
> +int acpi_pcihp_device_hotplug(AcpiPciHpState *s, PCIDevice *dev,
> + PCIHotplugState state)
> +{
> + int slot = PCI_SLOT(dev->devfn);
> + int bsel = acpi_pcihp_get_bsel(dev->bus);
> + if (bsel < 0) {
> + return -1;
> + }
> +
> + /* Don't send event when device is enabled during qemu machine creation:
> + * it is present on boot, no hotplug event is necessary. We do send an
> + * event when the device is disabled later. */
> + if (state == PCI_COLDPLUG_ENABLED) {
> + s->acpi_pcihp_pci_status[bsel].device_present |= (1U << slot);
> + return 0;
> + }
> +
> + if (state == PCI_HOTPLUG_ENABLED) {
> + enable_device(s, bsel, slot);
> + } else {
> + disable_device(s, bsel, slot);
> + }
> +
> + return 0;
> +}
> +
> +static uint64_t pci_read(void *opaque, hwaddr addr, unsigned int size)
> +{
> + AcpiPciHpState *s = opaque;
> + uint32_t val = 0;
> + int bsel = s->hotplug_select;
> +
> + if (bsel < 0 || bsel > ACPI_PCIHP_MAX_HOTPLUG_BUS) {
> + return 0;
> + }
> +
> + switch (addr) {
> + case PCI_UP_BASE - PCI_HOTPLUG_ADDR:
> + /* Manufacture an "up" value to cause a device check on any hotplug
> + * slot with a device. Extra device checks are harmless. */
> + val = s->acpi_pcihp_pci_status[bsel].device_present &
> + s->acpi_pcihp_pci_status[bsel].hotplug_enable;
> + ACPI_PCIHP_DPRINTF("pci_up_read %" PRIu32 "\n", val);
> + break;
> + case PCI_DOWN_BASE - PCI_HOTPLUG_ADDR:
> + val = s->acpi_pcihp_pci_status[bsel].down;
> + ACPI_PCIHP_DPRINTF("pci_down_read %" PRIu32 "\n", val);
> + break;
> + case PCI_EJ_BASE - PCI_HOTPLUG_ADDR:
> + /* No feature defined yet */
> + ACPI_PCIHP_DPRINTF("pci_features_read %" PRIu32 "\n", val);
> + break;
> + case PCI_RMV_BASE - PCI_HOTPLUG_ADDR:
> + val = s->acpi_pcihp_pci_status[bsel].hotplug_enable;
> + ACPI_PCIHP_DPRINTF("pci_rmv_read %" PRIu32 "\n", val);
> + break;
> + case PCI_SEL_BASE - PCI_HOTPLUG_ADDR:
> + val = s->hotplug_select;
> + ACPI_PCIHP_DPRINTF("pci_sel_read %" PRIu32 "\n", val);
> + default:
> + break;
> + }
> +
> + return val;
> +}
> +
> +static void pci_write(void *opaque, hwaddr addr, uint64_t data,
> + unsigned int size)
> +{
> + AcpiPciHpState *s = opaque;
> + switch (addr) {
> + case PCI_EJ_BASE - PCI_HOTPLUG_ADDR:
> + if (s->hotplug_select >= ACPI_PCIHP_MAX_HOTPLUG_BUS) {
> + break;
> + }
> + acpi_pcihp_eject_slot(s, s->hotplug_select, data);
> + ACPI_PCIHP_DPRINTF("pciej write %" HWADDR_PRIx " <== %" PRIu64 "\n",
> + addr, data);
> + break;
> + case PCI_SEL_BASE - PCI_HOTPLUG_ADDR:
> + s->hotplug_select = data;
> + ACPI_PCIHP_DPRINTF("pcisel write %" HWADDR_PRIx " <== %" PRIu64 "\n",
> + addr, data);
> + default:
> + break;
> + }
> +}
> +
> +static const MemoryRegionOps acpi_pcihp_io_ops = {
> + .read = pci_read,
> + .write = pci_write,
> + .endianness = DEVICE_LITTLE_ENDIAN,
> + .valid = {
> + .min_access_size = 4,
> + .max_access_size = 4,
> + },
> +};
> +
> +void acpi_pcihp_init(AcpiPciHpState *s, PCIBus *root_bus,
> + MemoryRegion *address_space_io)
> +{
> + s->root= root_bus;
> + memory_region_init_io(&s->io, NULL, &acpi_pcihp_io_ops, s,
> + "acpi-pci-hotplug",
> + PCI_HOTPLUG_SIZE);
> + memory_region_add_subregion(address_space_io, PCI_HOTPLUG_ADDR, &s->io);
> +}
> +
> +const VMStateDescription vmstate_acpi_pcihp_pci_status = {
> + .name = "acpi_pcihp_pci_status",
> + .version_id = 1,
> + .minimum_version_id = 1,
> + .minimum_version_id_old = 1,
> + .fields = (VMStateField []) {
> + VMSTATE_UINT32(up, AcpiPciHpPciStatus),
> + VMSTATE_UINT32(down, AcpiPciHpPciStatus),
> + VMSTATE_END_OF_LIST()
> + }
> +};
> diff --git a/hw/acpi/Makefile.objs b/hw/acpi/Makefile.objs
> index a0b63b5..0a47a53 100644
> --- a/hw/acpi/Makefile.objs
> +++ b/hw/acpi/Makefile.objs
> @@ -1,2 +1,2 @@
> -common-obj-$(CONFIG_ACPI) += core.o piix4.o ich9.o
> +common-obj-$(CONFIG_ACPI) += core.o piix4.o ich9.o pcihp.o
>
> --
> MST
next prev parent reply other threads:[~2013-10-14 22:36 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-14 14:57 [Qemu-devel] [PULL 00/43] pci, pc, acpi fixes, enhancements Michael S. Tsirkin
2013-10-14 14:57 ` Paolo Bonzini
2013-10-14 15:12 ` Michael S. Tsirkin
2013-10-14 15:21 ` Paolo Bonzini
2013-10-14 14:57 ` [Qemu-devel] [PULL 01/43] memory: Change MemoryRegion priorities from unsigned to signed Michael S. Tsirkin
2013-10-14 14:57 ` [Qemu-devel] [PULL 02/43] docs/memory: Explictly state that MemoryRegion priority is signed Michael S. Tsirkin
2013-10-14 14:57 ` [Qemu-devel] [PULL 03/43] hw/pci: partially handle pci master abort Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 04/43] hw/core: Add interface to allocate and free a single IRQ Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 05/43] hw/pci: add pci wrappers for allocating and asserting irqs Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 06/43] hw/pci-bridge: set PCI_INTERRUPT_PIN register before shpc init Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 07/43] hw/vmxnet3: set interrupts using pci irq wrappers Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 08/43] hw/vfio: " Michael S. Tsirkin
2013-10-14 15:46 ` Alex Williamson
2013-10-14 14:58 ` [Qemu-devel] [PULL 09/43] hw: " Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 10/43] hw/pcie: AER and hot-plug events must use device's interrupt Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 11/43] hw/pci: removed irq field from PCIDevice Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 12/43] cleanup object.h: include error.h directly Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 13/43] qom: cleanup struct Error references Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 14/43] qom: add pointer to int property helpers Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 15/43] pci: fix up w64 size calculation helper Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 16/43] fw_cfg: interface to trigger callback on read Michael S. Tsirkin
2013-10-14 14:58 ` [Qemu-devel] [PULL 17/43] loader: support for unmapped ROM blobs Michael S. Tsirkin
2013-11-08 0:54 ` Alexander Graf
2013-11-09 17:21 ` Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 18/43] pcie_host: expose UNMAPPED macro Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 19/43] pcie_host: expose address format Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 20/43] q35: use macro for MCFG property name Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 21/43] q35: expose mmcfg size as a property Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 22/43] i386: add ACPI table files from seabios Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 23/43] acpi: add rules to compile ASL source Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 24/43] acpi: pre-compiled ASL files Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 25/43] acpi: ssdt pcihp: updat generated file Michael S. Tsirkin
2013-10-14 22:32 ` Anthony Liguori
2013-10-15 5:24 ` Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 26/43] loader: use file path size from fw_cfg.h Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 27/43] i386: add bios linker/loader Michael S. Tsirkin
2013-10-14 14:59 ` [Qemu-devel] [PULL 28/43] loader: allow adding ROMs in done callbacks Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 29/43] i386: define pc guest info Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 30/43] acpi/piix: add macros for acpi property names Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 31/43] piix: APIs for pc guest info Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 32/43] ich9: " Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 33/43] pvpanic: add API to access io port Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 34/43] hpet: add API to find it Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 35/43] acpi: add interface to access user-installed tables Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 36/43] pc: use new api to add builtin tables Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 37/43] i386: ACPI table generation code from seabios Michael S. Tsirkin
2013-10-14 15:00 ` [Qemu-devel] [PULL 38/43] ssdt: fix PBLK length Michael S. Tsirkin
2013-10-14 15:01 ` [Qemu-devel] [PULL 39/43] ssdt-proc: update generated file Michael S. Tsirkin
2013-10-14 15:01 ` [Qemu-devel] [PULL 40/43] pci: add pci_for_each_bus_depth_first Michael S. Tsirkin
2013-10-14 15:01 ` [Qemu-devel] [PULL 41/43] pcihp: generalization of piix4 acpi Michael S. Tsirkin
2013-10-14 22:36 ` Anthony Liguori [this message]
2013-10-15 5:23 ` Michael S. Tsirkin
2013-10-14 15:01 ` [Qemu-devel] [PULL 42/43] piix4: add acpi pci hotplug support Michael S. Tsirkin
2013-10-15 14:31 ` Paolo Bonzini
2013-10-15 14:35 ` Michael S. Tsirkin
2013-10-15 14:50 ` Paolo Bonzini
2013-10-15 14:54 ` Michael S. Tsirkin
2013-10-15 14:54 ` Paolo Bonzini
2013-10-15 15:07 ` Michael S. Tsirkin
2013-10-15 15:09 ` Paolo Bonzini
2013-10-15 15:16 ` Michael S. Tsirkin
2013-10-15 16:27 ` Anthony Liguori
2013-10-15 20:17 ` Michael S. Tsirkin
2013-10-16 15:03 ` Paolo Bonzini
2013-10-16 16:38 ` Anthony Liguori
2013-10-16 18:18 ` Michael S. Tsirkin
2013-10-16 18:18 ` Anthony Liguori
2013-10-16 18:37 ` Michael S. Tsirkin
2013-10-16 21:26 ` Paolo Bonzini
2013-10-16 22:03 ` Michael S. Tsirkin
2013-10-16 22:25 ` Paolo Bonzini
2013-10-16 23:52 ` Anthony Liguori
2013-10-17 5:22 ` Michael S. Tsirkin
2013-10-17 5:32 ` Michael S. Tsirkin
2013-10-17 5:48 ` Gleb Natapov
2013-10-17 5:34 ` Michael S. Tsirkin
2013-10-17 11:06 ` Paolo Bonzini
2013-10-17 8:18 ` Gerd Hoffmann
2013-12-10 11:15 ` Igor Mammedov
2013-10-14 15:01 ` [Qemu-devel] [PULL 43/43] acpi-build: enable hotplug for PCI bridges Michael S. Tsirkin
2013-10-14 22:42 ` [Qemu-devel] [PULL 00/43] pci, pc, acpi fixes, enhancements Anthony Liguori
2013-10-15 5:28 ` Michael S. Tsirkin
2013-10-15 13:51 ` Anthony Liguori
2013-10-15 14:01 ` Paolo Bonzini
2013-10-15 14:17 ` Anthony Liguori
2013-10-15 14:24 ` Michael S. Tsirkin
2013-10-15 14:09 ` Igor Mammedov
2013-10-15 14:20 ` Michael S. Tsirkin
2013-10-15 14:21 ` Anthony Liguori
2013-10-15 14:30 ` Michael S. Tsirkin
2013-10-15 14:37 ` Michael S. Tsirkin
2013-10-15 14:51 ` Michael S. Tsirkin
2013-10-15 15:27 ` Igor Mammedov
2013-10-15 15:37 ` Michael S. Tsirkin
2013-10-15 5:33 ` Michael S. Tsirkin
2013-10-15 11:53 ` Igor Mammedov
2013-10-15 13:43 ` Gerd Hoffmann
2013-10-15 13:53 ` Anthony Liguori
2013-10-15 14:21 ` Michael S. Tsirkin
2013-10-15 14:14 ` Gerd Hoffmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87txgjlbtu.fsf@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=imammedo@redhat.com \
--cc=kraxel@redhat.com \
--cc=marcel.a@redhat.com \
--cc=mst@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.