All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: peter.maydell@linaro.org, marcel.a@redhat.com,
	qemu-devel@nongnu.org, Anthony Liguori <anthony@codemonkey.ws>,
	kraxel@redhat.com
Subject: Re: [Qemu-devel] [PULL 42/43] piix4: add acpi pci hotplug support
Date: Tue, 10 Dec 2013 12:15:17 +0100	[thread overview]
Message-ID: <20131210121517.5646870d@thinkpad> (raw)
In-Reply-To: <1381762577-12526-43-git-send-email-mst@redhat.com>

On Mon, 14 Oct 2013 18:01:20 +0300
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Add support for acpi pci hotplug using the
> new infrastructure.
> PIIX4 legacy interface is maintained as is for
> machine types 1.6 and older.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/hw/i386/pc.h |  5 ++++
>  hw/acpi/piix4.c      | 75 +++++++++++++++++++++++++++++++++++++++++++++-------
>  2 files changed, 70 insertions(+), 10 deletions(-)
> 
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 39db8cb..6865972 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -249,6 +249,11 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t);
>  
>  #define PC_COMPAT_1_6 \
>          {\
> +            .driver   = "PIIX4_PM",\
> +            .property = "acpi-pci-hotplug-with-bridge-support",\
> +            .value    = "off",\
> +        }, \
> +        {\
>              .driver   = "e1000",\
>              .property = "mitigation",\
>              .value    = "off",\
> diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
> index 3bcd890..d516033 100644
> --- a/hw/acpi/piix4.c
> +++ b/hw/acpi/piix4.c
> @@ -30,6 +30,7 @@
>  #include "hw/nvram/fw_cfg.h"
>  #include "exec/address-spaces.h"
>  #include "hw/acpi/piix4.h"
> +#include "hw/acpi/pcihp.h"
>  
>  //#define DEBUG
>  
> @@ -73,7 +74,6 @@ typedef struct PIIX4PMState {
>      uint32_t io_base;
>  
>      MemoryRegion io_gpe;
> -    MemoryRegion io_pci;
>      MemoryRegion io_cpu;
>      ACPIREGS ar;
>  
> @@ -88,11 +88,16 @@ typedef struct PIIX4PMState {
>      Notifier machine_ready;
>      Notifier powerdown_notifier;
>  
> -    /* for pci hotplug */
> +    /* for legacy pci hotplug (compatible with qemu 1.6 and older) */
> +    MemoryRegion io_pci;
>      struct pci_status pci0_status;
>      uint32_t pci0_hotplug_enable;
>      uint32_t pci0_slot_device_present;
>  
> +    /* for new pci hotplug (with PCI2PCI bridge support) */
> +    AcpiPciHpState acpi_pci_hotplug;
pcihp therm collides with linux's pcihp driver that is used with native PCIE
hotplug, which makes code a bit confusing at first.

perhaps replacing "pcihp" through out with more verbose "pci_hotplug" would be
better?

> +    bool use_acpi_pci_hotplug;
> +
>      uint8_t disable_s3;
>      uint8_t disable_s4;
>      uint8_t s4_val;
> @@ -282,6 +287,18 @@ static int acpi_load_old(QEMUFile *f, void *opaque, int version_id)
>      return ret;
>  }
>  
> +static bool vmstate_test_use_acpi_pci_hotplug(void *opaque, int version_id)
> +{
> +    PIIX4PMState *s = opaque;
> +    return s->use_acpi_pci_hotplug;
> +}
> +
> +static bool vmstate_test_no_use_acpi_pci_hotplug(void *opaque, int version_id)
> +{
> +    PIIX4PMState *s = opaque;
> +    return !s->use_acpi_pci_hotplug;
> +}
> +
>  /* qemu-kvm 1.2 uses version 3 but advertised as 2
>   * To support incoming qemu-kvm 1.2 migration, change version_id
>   * and minimum_version_id to 2 below (which breaks migration from
> @@ -304,8 +321,12 @@ static const VMStateDescription vmstate_acpi = {
>          VMSTATE_TIMER(ar.tmr.timer, PIIX4PMState),
>          VMSTATE_INT64(ar.tmr.overflow_time, PIIX4PMState),
>          VMSTATE_STRUCT(ar.gpe, PIIX4PMState, 2, vmstate_gpe, ACPIGPE),
> -        VMSTATE_STRUCT(pci0_status, PIIX4PMState, 2, vmstate_pci_status,
> -                       struct pci_status),
> +        VMSTATE_STRUCT_TEST(pci0_status, PIIX4PMState,
> +                            vmstate_test_no_use_acpi_pci_hotplug,
> +                            2, vmstate_pci_status,
> +                            struct pci_status),
> +        VMSTATE_PCI_HOTPLUG(acpi_pci_hotplug, PIIX4PMState,
> +                            vmstate_test_use_acpi_pci_hotplug),
>          VMSTATE_END_OF_LIST()
>      }
>  };
> @@ -383,7 +404,11 @@ static void piix4_reset(void *opaque)
>          pci_conf[0x5B] = 0x02;
>      }
>      pm_io_space_update(s);
> -    piix4_update_hotplug(s);
> +    if (s->use_acpi_pci_hotplug) {
> +        acpi_pcihp_reset(&s->acpi_pci_hotplug);
> +    } else {
> +        piix4_update_hotplug(s);
> +    }
>  }
>  
>  static void piix4_pm_powerdown_req(Notifier *n, void *opaque)
> @@ -394,6 +419,26 @@ static void piix4_pm_powerdown_req(Notifier *n, void *opaque)
>      acpi_pm1_evt_power_down(&s->ar);
>  }
>  
> +static int piix4_acpi_pci_hotplug(DeviceState *qdev, PCIDevice *dev,
> +                                  PCIHotplugState state)
> +{
> +    PIIX4PMState *s = PIIX4_PM(qdev);
> +    int ret = acpi_pcihp_device_hotplug(&s->acpi_pci_hotplug, dev, state);
> +    if (ret < 0) {
> +        return ret;
> +    }
> +    s->ar.gpe.sts[0] |= PIIX4_PCI_HOTPLUG_STATUS;
> +
> +    pm_update_sci(s);
> +    return 0;
> +}
> +
> +static void piix4_update_bus_hotplug(PCIBus *bus, void *opaque)
> +{
> +    PIIX4PMState *s = opaque;
> +    pci_bus_hotplug(bus, piix4_acpi_pci_hotplug, DEVICE(s));
> +}
> +
>  static void piix4_pm_machine_ready(Notifier *n, void *opaque)
>  {
>      PIIX4PMState *s = container_of(n, PIIX4PMState, machine_ready);
> @@ -407,6 +452,10 @@ static void piix4_pm_machine_ready(Notifier *n, void *opaque)
>      pci_conf[0x63] = 0x60;
>      pci_conf[0x67] = (memory_region_present(io_as, 0x3f8) ? 0x08 : 0) |
>          (memory_region_present(io_as, 0x2f8) ? 0x90 : 0);
> +
> +    if (s->use_acpi_pci_hotplug) {
> +        pci_for_each_bus(d->bus, piix4_update_bus_hotplug, s);
why do you need to do it dinamically?

> +    }
>  }
>  
>  static void piix4_pm_add_propeties(PIIX4PMState *s)
> @@ -528,6 +577,8 @@ static Property piix4_pm_properties[] = {
>      DEFINE_PROP_UINT8(ACPI_PM_PROP_S3_DISABLED, PIIX4PMState, disable_s3, 0),
>      DEFINE_PROP_UINT8(ACPI_PM_PROP_S4_DISABLED, PIIX4PMState, disable_s4, 0),
>      DEFINE_PROP_UINT8(ACPI_PM_PROP_S4_VAL, PIIX4PMState, s4_val, 2),
> +    DEFINE_PROP_BOOL("acpi-pci-hotplug-with-bridge-support", PIIX4PMState,
> +                     use_acpi_pci_hotplug, true),
>      DEFINE_PROP_END_OF_LIST(),
>  };
>  
> @@ -716,11 +767,15 @@ static void piix4_acpi_system_hot_add_init(MemoryRegion *parent,
>                            "acpi-gpe0", GPE_LEN);
>      memory_region_add_subregion(parent, GPE_BASE, &s->io_gpe);
>  
> -    memory_region_init_io(&s->io_pci, OBJECT(s), &piix4_pci_ops, s,
> -                          "acpi-pci-hotplug", PCI_HOTPLUG_SIZE);
> -    memory_region_add_subregion(parent, PCI_HOTPLUG_ADDR,
> -                                &s->io_pci);
> -    pci_bus_hotplug(bus, piix4_device_hotplug, DEVICE(s));
> +    if (s->use_acpi_pci_hotplug) {
> +        acpi_pcihp_init(&s->acpi_pci_hotplug, bus, parent);
> +    } else {
> +        memory_region_init_io(&s->io_pci, OBJECT(s), &piix4_pci_ops, s,
> +                              "acpi-pci-hotplug", PCI_HOTPLUG_SIZE);
> +        memory_region_add_subregion(parent, PCI_HOTPLUG_ADDR,
> +                                    &s->io_pci);
> +        pci_bus_hotplug(bus, piix4_device_hotplug, DEVICE(s));
> +    }
>  
>      CPU_FOREACH(cpu) {
>          CPUClass *cc = CPU_GET_CLASS(cpu);
> -- 
> MST
> 
> 


-- 
Regards,
  Igor

  parent reply	other threads:[~2013-12-10 11:15 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
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 [this message]
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=20131210121517.5646870d@thinkpad \
    --to=imammedo@redhat.com \
    --cc=anthony@codemonkey.ws \
    --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.