qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: qemu-devel@nongnu.org, aliguori@amazon.com, lcapitulino@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 26/33] acpi:ich9: add memory hotplug handling
Date: Sun, 8 Jun 2014 14:57:23 +0300	[thread overview]
Message-ID: <20140608115723.GA27466@redhat.com> (raw)
In-Reply-To: <1401715529-636-27-git-send-email-imammedo@redhat.com>

On Mon, Jun 02, 2014 at 03:25:22PM +0200, Igor Mammedov wrote:
> Add memory hotplug initialization/handling to ICH9 LPC device
> and enable it by default for post 2.0 machine types
> 
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>

I applied this, resolving a conflict.
Minor comments below, would like to see them addressed
in follow-up patches.

> ---
>  hw/acpi/ich9.c         |   38 ++++++++++++++++++++++++++++++++++++++
>  hw/isa/lpc_ich9.c      |   20 ++++++++++++++++++++
>  include/hw/acpi/ich9.h |    4 ++++
>  include/hw/i386/pc.h   |    7 ++++++-
>  4 files changed, 68 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c
> index 0afac42..7b10c27 100644
> --- a/hw/acpi/ich9.c
> +++ b/hw/acpi/ich9.c
> @@ -34,6 +34,7 @@
>  #include "exec/address-spaces.h"
>  
>  #include "hw/i386/ich9.h"
> +#include "hw/mem/pc-dimm.h"
>  
>  //#define DEBUG
>  
> @@ -224,6 +225,11 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm,
>                          &pm->gpe_cpu, ICH9_CPU_HOTPLUG_IO_BASE);
>      pm->cpu_added_notifier.notify = ich9_cpu_added_req;
>      qemu_register_cpu_added_notifier(&pm->cpu_added_notifier);
> +
> +    if (pm->acpi_memory_hotplug.is_enabled) {
> +        acpi_memory_hotplug_init(pci_address_space_io(lpc_pci), OBJECT(lpc_pci),
> +                                 &pm->acpi_memory_hotplug);
> +    }
>  }
>  
>  static void ich9_pm_get_gpe0_blk(Object *obj, Visitor *v,
> @@ -236,9 +242,25 @@ static void ich9_pm_get_gpe0_blk(Object *obj, Visitor *v,
>      visit_type_uint32(v, &value, name, errp);
>  }
>  
> +static bool ich9_pm_get_memory_hotplug_support(Object *obj, Error **errp)
> +{
> +    ICH9LPCState *s = ICH9_LPC_DEVICE(obj);
> +
> +    return s->pm.acpi_memory_hotplug.is_enabled;
> +}
> +
> +static void ich9_pm_set_memory_hotplug_support(Object *obj, bool value,
> +                                               Error **errp)
> +{
> +    ICH9LPCState *s = ICH9_LPC_DEVICE(obj);
> +
> +    s->pm.acpi_memory_hotplug.is_enabled = value;
> +}
> +
>  void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp)
>  {
>      static const uint32_t gpe0_len = ICH9_PMIO_GPE0_LEN;
> +    pm->acpi_memory_hotplug.is_enabled = true;
>  
>      object_property_add_uint32_ptr(obj, ACPI_PM_PROP_PM_IO_BASE,
>                                     &pm->pm_io_base, errp);
> @@ -247,4 +269,20 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp)
>                          NULL, NULL, pm, NULL);
>      object_property_add_uint32_ptr(obj, ACPI_PM_PROP_GPE0_BLK_LEN,
>                                     &gpe0_len, errp);
> +    object_property_add_bool(obj, "memory-hotplug-support",
> +                             ich9_pm_get_memory_hotplug_support,
> +                             ich9_pm_set_memory_hotplug_support,
> +                             NULL);
> +}
> +
> +void ich9_pm_device_plug_cb(ICH9LPCPMRegs *pm, DeviceState *dev, Error **errp)
> +{
> +    if (pm->acpi_memory_hotplug.is_enabled &&
> +        object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> +        acpi_memory_plug_cb(&pm->acpi_regs, pm->irq, &pm->acpi_memory_hotplug,
> +                            dev, errp);
> +    } else {
> +        error_setg(errp, "acpi: device plug request for not supported device"
> +                   " type: %s", object_get_typename(OBJECT(dev)));
> +    }
>  }
> diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
> index 46de3b6..2adf29a 100644
> --- a/hw/isa/lpc_ich9.c
> +++ b/hw/isa/lpc_ich9.c
> @@ -599,6 +599,19 @@ static int ich9_lpc_init(PCIDevice *d)
>      return 0;
>  }
>  
> +static void ich9_device_plug_cb(HotplugHandler *hotplug_dev,
> +                                DeviceState *dev, Error **errp)
> +{
> +    ICH9LPCState *lpc = ICH9_LPC_DEVICE(hotplug_dev);
> +
> +    ich9_pm_device_plug_cb(&lpc->pm, dev, errp);
> +}
> +
> +static void ich9_device_unplug_cb(HotplugHandler *hotplug_dev,
> +                                  DeviceState *dev, Error **errp)
> +{

Can this set error so user knows this does not work?

> +}
> +
>  static bool ich9_rst_cnt_needed(void *opaque)
>  {
>      ICH9LPCState *lpc = opaque;
> @@ -643,6 +656,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
>      PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
> +    HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(klass);
>  
>      set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
>      dc->reset = ich9_lpc_reset;
> @@ -659,6 +673,8 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data)
>       * pc_q35_init()
>       */
>      dc->cannot_instantiate_with_device_add_yet = true;
> +    hc->plug = ich9_device_plug_cb;
> +    hc->unplug = ich9_device_unplug_cb;
>  }
>  
>  static const TypeInfo ich9_lpc_info = {
> @@ -667,6 +683,10 @@ static const TypeInfo ich9_lpc_info = {
>      .instance_size = sizeof(struct ICH9LPCState),
>      .instance_init = ich9_lpc_initfn,
>      .class_init  = ich9_lpc_class_init,
> +    .interfaces = (InterfaceInfo[]) {
> +        { TYPE_HOTPLUG_HANDLER },
> +        { }
> +    }
>  };
>  
>  static void ich9_lpc_register(void)
> diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h
> index 104f419..1977f1b 100644
> --- a/include/hw/acpi/ich9.h
> +++ b/include/hw/acpi/ich9.h
> @@ -23,6 +23,7 @@
>  
>  #include "hw/acpi/acpi.h"
>  #include "hw/acpi/cpu_hotplug.h"
> +#include "hw/acpi/memory_hotplug.h"
>  
>  typedef struct ICH9LPCPMRegs {
>      /*
> @@ -46,6 +47,8 @@ typedef struct ICH9LPCPMRegs {
>  
>      AcpiCpuHotplug gpe_cpu;
>      Notifier cpu_added_notifier;
> +
> +    MemHotplugState acpi_memory_hotplug;
>  } ICH9LPCPMRegs;
>  
>  void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm,
> @@ -55,4 +58,5 @@ extern const VMStateDescription vmstate_ich9_pm;
>  
>  void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp);
>  
> +void ich9_pm_device_plug_cb(ICH9LPCPMRegs *pm, DeviceState *dev, Error **errp);
>  #endif /* HW_ACPI_ICH9_H */
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 34c3a63..cecd4c2 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -286,7 +286,12 @@ int e820_get_num_entries(void);
>  bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
>  
>  #define PC_Q35_COMPAT_2_0 \
> -        PC_COMPAT_2_0
> +        PC_COMPAT_2_0, \
> +        {\
> +            .driver   = "ICH9 LPC",\
> +            .property = "memory-hotplug-support",\
> +            .value    = "off",\
> +        }
> 

Spaces in names are evil.
Let's rename to ICH9_LPC or something.

 
>  #define PC_Q35_COMPAT_1_7 \
>          PC_COMPAT_1_7, \
> -- 
> 1.7.1

  reply	other threads:[~2014-06-08 11:57 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-02 13:24 [Qemu-devel] [PATCH v4 00/33] pc: ACPI memory hotplug Igor Mammedov
2014-06-02 13:24 ` [Qemu-devel] [PATCH v4 01/33] pc: create custom generic PC machine type Igor Mammedov
2014-06-02 13:24 ` [Qemu-devel] [PATCH v4 02/33] pc: ACPI BIOS: use enum for defining memory affinity flags Igor Mammedov
2014-06-02 13:24 ` [Qemu-devel] [PATCH v4 03/33] object_add: allow completion handler to get canonical path Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 04/33] vl.c: daemonize before guest memory allocation Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 05/33] add memdev backend infrastructure Igor Mammedov
2014-06-05 21:36   ` Don Slutz
2014-06-06 15:54     ` [Qemu-devel] [PATCH v4.1 5/33 FIXED] " Igor Mammedov
2014-06-06 17:25       ` Don Slutz
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 06/33] vl.c: extend -m option to support options for memory hotplug Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 07/33] qdev: hotplug for buss-less devices Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 08/33] qdev: expose DeviceState.hotplugged field as a property Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 09/33] pc: implement pc-dimm device abstraction Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 10/33] memory: add memory_region_is_mapped() API Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 11/33] pc-dimm: do not allow to set already used memdev Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 12/33] pc: initialize memory hotplug address space Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 13/33] pc: exit QEMU if number of slots more than supported 256 Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 14/33] pc: add 'etc/reserved-memory-end' fw_cfg interface for SeaBIOS Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 15/33] pc: exit QEMU if compat machine doesn't support memory hotlpug Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 16/33] pc: add memory hotplug handler to PC_MACHINE Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 17/33] pc-dimm: add busy address check and address auto-allocation Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 18/33] pc-dimm: add busy slot check and slot auto-allocation Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 19/33] acpi: rename cpu_hotplug_defs.h to pc-hotplug.h Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 20/33] acpi: memory hotplug ACPI hardware implementation Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 21/33] trace: add acpi memory hotplug IO region events Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 22/33] trace: pc: add PC_DIMM slot & address allocation Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 23/33] acpi:piix4: allow plug/unlug callbacks handle not only PCI devices Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 24/33] acpi:piix4: add memory hotplug handling Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 25/33] pc: ich9 lpc: make it work with global/compat properties Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 26/33] acpi:ich9: add memory hotplug handling Igor Mammedov
2014-06-08 11:57   ` Michael S. Tsirkin [this message]
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 27/33] pc: migrate piix4 & ich9 MemHotplugState Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 28/33] pc: add acpi-device link to PCMachineState Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 29/33] pc: propagate memory hotplug event to ACPI device Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 30/33] pc: ACPI BIOS: implement memory hotplug interface Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 31/33] pc: add "hotplug-memory-region-size" property to PC_MACHINE Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 32/33] pc: ACPI BIOS: reserve SRAT entry for hotplug mem hole Igor Mammedov
2014-06-02 13:25 ` [Qemu-devel] [PATCH v4 33/33] pc: ACPI BIOS: make GPE.3 handle memory hotplug event on PIIX and Q35 machines Igor Mammedov
2014-06-06 12:44   ` Don Slutz
2014-06-06 15:23     ` Igor Mammedov
2014-06-08  7:43       ` Michael S. Tsirkin
2014-06-02 14:32 ` [Qemu-devel] [PATCH v4 00/33] pc: ACPI memory hotplug Eric Blake
2014-06-02 14:50   ` Igor Mammedov
2014-06-08 13:01 ` Michael S. Tsirkin
2014-06-11  7:13   ` Santosh Shukla
2014-06-11  8:08     ` Michael S. Tsirkin
2014-06-11  9:35       ` Santosh Shukla
2014-06-11  9:54         ` Michael S. Tsirkin
2014-06-11 10:22           ` Santosh Shukla

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=20140608115723.GA27466@redhat.com \
    --to=mst@redhat.com \
    --cc=aliguori@amazon.com \
    --cc=imammedo@redhat.com \
    --cc=lcapitulino@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).