All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: peter.maydell@linaro.org, stefanha@redhat.com,
	stefanb@linux.vnet.ibm.com, qemu-devel@nongnu.org,
	chegu_vinod@hp.com, marcel.a@redhat.com, mjt@tls.msk.ru,
	mdroth@linux.vnet.ibm.com, armbru@redhat.com,
	vasilis.liaskovitis@profitbricks.com, quintela@redhat.com,
	kraxel@redhat.com, aliguori@amazon.com, hutao@cn.fujitsu.com,
	pbonzini@redhat.com, lcapitulino@redhat.com, afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH 23/27] pc: ACPI BIOS: implement memory hotplug interface
Date: Thu, 21 Nov 2013 11:37:01 +0200	[thread overview]
Message-ID: <20131121093701.GA3140@redhat.com> (raw)
In-Reply-To: <1385001528-12003-24-git-send-email-imammedo@redhat.com>

On Thu, Nov 21, 2013 at 03:38:44AM +0100, Igor Mammedov wrote:
> - provides static SSDT object for memory hotplug
> - SSDT template for memory devices and runtime generator
>   of them in SSDT table.
> 
> Signed-off-by: Vasilis Liaskovitis <vasilis.liaskovitis@profitbricks.com>
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
> mst/pci tree specific change:
>    acpi-build: s/build_append_notify/build_append_notify_method/
> introduced by "acpi-build: enable hotplug for PCI bridges"
> should be moved to separate patch since it's generic internal API rename.
> ---
>  hw/i386/Makefile.objs |    3 +-
>  hw/i386/acpi-build.c  |   36 ++++++++++
>  hw/i386/ssdt-mem.dsl  |   75 ++++++++++++++++++++
>  hw/i386/ssdt-misc.dsl |  179 +++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 292 insertions(+), 1 deletions(-)
>  create mode 100644 hw/i386/ssdt-mem.dsl
> 
> diff --git a/hw/i386/Makefile.objs b/hw/i386/Makefile.objs
> index 185aacb..f9262a1 100644
> --- a/hw/i386/Makefile.objs
> +++ b/hw/i386/Makefile.objs
> @@ -9,7 +9,8 @@ obj-y += acpi-build.o
>  obj-y += bios-linker-loader.o
>  hw/i386/acpi-build.o: hw/i386/acpi-build.c hw/i386/acpi-dsdt.hex \
>  	hw/i386/ssdt-proc.hex hw/i386/ssdt-pcihp.hex hw/i386/ssdt-misc.hex \
> -	hw/i386/acpi-dsdt.hex hw/i386/q35-acpi-dsdt.hex
> +	hw/i386/acpi-dsdt.hex hw/i386/q35-acpi-dsdt.hex \
> +	hw/i386/q35-acpi-dsdt.hex hw/i386/ssdt-mem.hex
>  
>  iasl-option=$(shell if test -z "`$(1) $(2) 2>&1 > /dev/null`" \
>      ; then echo "$(2)"; else echo "$(3)"; fi ;)
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 93ffb17..d41fd81 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -36,6 +36,7 @@
>  #include "hw/nvram/fw_cfg.h"
>  #include "bios-linker-loader.h"
>  #include "hw/loader.h"
> +#include "qemu/config-file.h"
>  
>  /* Supported chipsets: */
>  #include "hw/acpi/piix4.h"
> @@ -69,6 +70,7 @@ typedef struct AcpiPmInfo {
>      uint32_t gpe0_blk;
>      uint32_t gpe0_blk_len;
>      uint32_t io_base;
> +    uint16_t mem_hotplug_io_base;
>  } AcpiPmInfo;
>  
>  typedef struct AcpiMiscInfo {
> @@ -176,6 +178,8 @@ static void acpi_get_pm_info(AcpiPmInfo *pm)
>                                             NULL);
>      pm->gpe0_blk_len = object_property_get_int(obj, ACPI_PM_PROP_GPE0_BLK_LEN,
>                                                 NULL);
> +    pm->mem_hotplug_io_base =
> +        object_property_get_int(obj, ACPI_MEMORY_HOTPLUG_IO_BASE_PROP, NULL);
>  }
>  
>  static void acpi_get_misc_info(AcpiMiscInfo *info)
> @@ -632,6 +636,14 @@ static inline char acpi_get_hex(uint32_t val)
>  #define ACPI_PCIHP_SIZEOF (*ssdt_pcihp_end - *ssdt_pcihp_start)
>  #define ACPI_PCIHP_AML (ssdp_pcihp_aml + *ssdt_pcihp_start)
>  
> +#include "hw/i386/ssdt-mem.hex"
> +
> +/* 0x5B 0x82 DeviceOp PkgLength NameString DimmID */
> +#define ACPI_MEM_OFFSET_HEX (*ssdt_mem_name - *ssdt_mem_start + 2)
> +#define ACPI_MEM_OFFSET_ID (*ssdt_mem_id - *ssdt_mem_start + 7)
> +#define ACPI_MEM_SIZEOF (*ssdt_mem_end - *ssdt_mem_start)
> +#define ACPI_MEM_AML (ssdm_mem_aml + *ssdt_mem_start)
> +
>  #define ACPI_SSDT_SIGNATURE 0x54445353 /* SSDT */
>  #define ACPI_SSDT_HEADER_LENGTH 36
>  
> @@ -897,6 +909,8 @@ build_ssdt(GArray *table_data, GArray *linker,
>             AcpiCpuInfo *cpu, AcpiPmInfo *pm, AcpiMiscInfo *misc,
>             PcPciInfo *pci, PcGuestInfo *guest_info)
>  {
> +    QemuOpts *opts = qemu_opts_find(qemu_find_opts("memory-opts"), NULL);
> +    uint32_t nr_mem = qemu_opt_get_number(opts, "slots", 0);
>      int acpi_cpus = MIN(0xff, guest_info->apic_id_limit);
>      int ssdt_start = table_data->len;
>      uint8_t *ssdt_ptr;
> @@ -920,6 +934,10 @@ build_ssdt(GArray *table_data, GArray *linker,
>      *(uint16_t *)(ssdt_ptr + *ssdt_isa_pest) =
>          cpu_to_le16(misc->pvpanic_port);
>  
> +    *(uint16_t *)(ssdt_ptr + *ssdt_mctrl_port) =
> +        cpu_to_le16(pm->mem_hotplug_io_base);
> +    *(int32_t *)(ssdt_ptr + *ssdt_mctrl_nr_slots) = cpu_to_le32(nr_mem);
> +
>      {
>          GArray *sb_scope = build_alloc_array();
>          uint8_t op = 0x10; /* ScopeOp */
> @@ -961,6 +979,24 @@ build_ssdt(GArray *table_data, GArray *linker,
>              build_free_array(package);
>          }
>  
> +        if (nr_mem) {
> +            /* build memory devices */
> +            for (i = 0; i < nr_mem; i++) {
> +                char id[3];
> +                uint8_t *mem = acpi_data_push(sb_scope, ACPI_MEM_SIZEOF);
> +
> +                snprintf(id, sizeof(id), "%02x", i);
> +                memcpy(mem, ACPI_MEM_AML, ACPI_MEM_SIZEOF);
> +                memcpy(mem + ACPI_MEM_OFFSET_HEX, id, 2);
> +                memcpy(mem + ACPI_MEM_OFFSET_ID, id, 2);
> +            }
> +
> +            /* build Method(MTFY, 2) {
> +             *     If (LEqual(Arg0, 0x00)) {Notify(MP00, Arg1)} ...
> +             */
> +            build_append_notify_method(sb_scope, "MTFY", "MP%0.02X", nr_mem);
> +        }
> +
>          {
>              AcpiBuildPciBusHotplugState hotplug_state;
>              PCIBus *bus = find_i440fx(); /* TODO: Q35 support */
> diff --git a/hw/i386/ssdt-mem.dsl b/hw/i386/ssdt-mem.dsl
> new file mode 100644
> index 0000000..7f68750
> --- /dev/null
> +++ b/hw/i386/ssdt-mem.dsl
> @@ -0,0 +1,75 @@
> +/*
> + * Memory hotplug ACPI DSDT static objects definitions
> + *
> + * Copyright ProfitBricks GmbH 2012
> + * Copyright (C) 2013 Red Hat Inc
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * 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/>
> + */
> +
> +/* This file is the basis for the ssdt_mem[] variable in src/acpi.c.
> + * It defines the contents of the memory device object.  At
> + * runtime, a dynamically generated SSDT will contain one copy of this
> + * AML snippet for every possible memory device in the system.  The
> + * objects will be placed in the \_SB_ namespace.
> + *
> + * In addition to the aml code generated from this file, the
> + * src/acpi.c file creates a MTFY method with an entry for each memdevice:
> + *     Method(MTFY, 2) {
> + *         If (LEqual(Arg0, 0x00)) { Notify(MP00, Arg1) }
> + *         If (LEqual(Arg0, 0x01)) { Notify(MP01, Arg1) }
> + *         ...
> + *     }
> + */
> +ACPI_EXTRACT_ALL_CODE ssdm_mem_aml
> +
> +DefinitionBlock ("ssdt-mem.aml", "SSDT", 0x02, "BXPC", "CSSDT", 0x1)
> +{
> +
> +    External(\_SB.MHPD.MCRS, MethodObj)
> +    External(\_SB.MHPD.MRST, MethodObj)
> +    External(\_SB.MHPD.MOST, MethodObj)
> +    External(\_SB.MHPD.MPXM, MethodObj)
> +
> +    Scope(\_SB) {
> +/*  v------------------ DO NOT EDIT ------------------v */
> +        ACPI_EXTRACT_DEVICE_START ssdt_mem_start
> +        ACPI_EXTRACT_DEVICE_END ssdt_mem_end
> +        ACPI_EXTRACT_DEVICE_STRING ssdt_mem_name
> +        Device(MPAA) {
> +            ACPI_EXTRACT_NAME_STRING ssdt_mem_id
> +            Name(_UID, "0xAA")
> +/*  ^------------------ DO NOT EDIT ------------------^
> + * Don't change the above without also updating the C code.
> + */
> +            Name(_HID, EISAID("PNP0C80"))
> +
> +            Method(_CRS, 0) {
> +                Return(\_SB.MHPD.MCRS(_UID))
> +            }
> +
> +            Method(_STA, 0) {
> +                Return(\_SB.MHPD.MRST(_UID))
> +            }
> +
> +            Method(_PXM, 0) {
> +                Return(\_SB.MHPD.MPXM(_UID))
> +            }
> +
> +            Method(_OST, 3) {
> +                \_SB.MHPD.MOST(_UID, Arg0, Arg1, Arg2)
> +            }
> +        }
> +    }
> +}
> diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl
> index a4484b8..b0c581e 100644
> --- a/hw/i386/ssdt-misc.dsl
> +++ b/hw/i386/ssdt-misc.dsl
> @@ -116,4 +116,183 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1)
>              }
>          }
>      }
> +
> +    External(MTFY, MethodObj)
> +
> +    Scope(\_SB) {
> +        Device(MHPD) {
> +            Name(_HID, EISAID("PNP0C08"))
> +
> +            ACPI_EXTRACT_NAME_WORD_CONST ssdt_mctrl_port
> +            Name(MHPP, 0xFFFF)
> +
> +            ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
> +            Name(MDNR, 0x12345678)
> +
> +            /* Memory hotplug IO registers */
> +            OperationRegion(HPMR, SystemIO, MHPP, 24)
> +
> +            Method(_CRS, 0, Serialized) {
> +                Name(CRS, ResourceTemplate() {
> +                    IO(Decode16, 0x00, 0x00, 0x01, 24, IO)
> +                })


Declaring name makes us serialize it.
Can't we use a local variable?

> +
> +                CreateWordField(CRS, IO._MIN, IOMN)
> +                CreateWordField(CRS, IO._MAX, IOMX)
> +
> +                Store(MHPP, IOMN)
> +                Subtract(Add(MHPP, 24), 1, IOMX)
> +                Return(CRS)
> +            }
> +
> +            Method(_STA, 0) {
> +                If (LEqual(MDNR, Zero)) {
> +                    Return(0x0)
> +                }
> +                /* Leave bit 0 cleared to avoid Windows BSOD */
> +                Return(0xA)
> +            }
> +
> +            Field(HPMR, DWordAcc, NoLock, Preserve) {
> +                MRBL, 32, // DIMM start addr Low word, read only
> +                MRBH, 32, // DIMM start addr Hi word, read only
> +                MRLL, 32, // DIMM size Low word, read only
> +                MRLH, 32, // DIMM size Hi word, read only
> +                MPX, 32,  // DIMM node proximity, read only
> +            }
> +            Field(HPMR, ByteAcc, NoLock, Preserve) {
> +                Offset(20),
> +                MVER, 8, // Interface version
> +                MES,  1, // 1 if DIMM enabled for _STA, read only
> +                MINS, 1, // (read) 1 if DIMM has a insert event. (write) 1 after MTFY()
> +                MRMV, 1, // 1 if DIMM has a remove request, read only
> +            }
> +
> +            Mutex (MLCK, 0)
> +            Field (HPMR, DWordAcc, NoLock, Preserve) {
> +                MSEL, 32,  // DIMM selector, write only
> +                MOEV, 32,  // _OST event code, write only
> +                MOSC, 32,  // _OST status code, write only
> +            }
> +
> +            Method(MESC, 0, Serialized) {
> +                If (LEqual(MDNR, Zero)) {
> +                     Return(Zero)
> +                }
> +
> +                Store(Zero, Local0) // Mem devs iterrator
> +                Acquire(MLCK, 0xFFFF)
> +                while (LLess(Local0, MDNR)) {
> +                    Store(Local0, MSEL) // select Local0 DIMM
> +                    If (LEqual(MINS, One)) { // Memory device needs check
> +                        MTFY(Local0, 1)
> +                        Store(1, MINS)
> +                    }
> +                    If (LEqual(MRMV, One)) { // Ejection request
> +                        MTFY(Local0, 3)
> +                    }
> +                    Add(Local0, One, Local0) // goto next DIMM
> +                }
> +                Release(MLCK)
> +                Return(One)
> +            }
> +
> +            Method(MRST, 1) {
> +                Store(Zero, Local0)
> +
> +                Acquire(MLCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MSEL) // select DIMM
> +
> +                If (LEqual(MES, One)) {
> +                    Store(0xF, Local0)
> +                }
> +
> +                Release(MLCK)
> +                Return(Local0)
> +            }
> +
> +            Method(MCRS, 1, Serialized) {
> +                Acquire(MLCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MSEL) // select DIMM
> +
> +                Name(MR64, ResourceTemplate() {
> +                    QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
> +                    Cacheable, ReadWrite,
> +                    0x0000000000000000,        // Address Space Granularity
> +                    0x0000000000000000,        // Address Range Minimum
> +                    0xFFFFFFFFFFFFFFFE,        // Address Range Maximum
> +                    0x0000000000000000,        // Address Translation Offset
> +                    0xFFFFFFFFFFFFFFFF,        // Address Length
> +                    ,, MW64, AddressRangeMemory, TypeStatic)
> +                })
> +
> +                CreateDWordField(MR64, 14, MINL)
> +                CreateDWordField(MR64, 18, MINH)
> +                CreateDWordField(MR64, 38, LENL)
> +                CreateDWordField(MR64, 42, LENH)
> +                CreateDWordField(MR64, 22, MAXL)
> +                CreateDWordField(MR64, 26, MAXH)
> +
> +                Store(MRBH, MINH)
> +                Store(MRBL, MINL)
> +                Store(MRLH, LENH)
> +                Store(MRLL, LENL)
> +
> +                // 64-bit math: MAX = MIN + LEN - 1
> +                Add(MINL, LENL, MAXL)
> +                Add(MINH, LENH, MAXH)
> +                If (Or(LLess(MAXL, MINL), LLess(MAXL, LENL))) {
> +                    Add(MAXH, 1, MAXH)
> +                }
> +                // Ignore (MAXL == 0 & MAXH == 0) case
> +                If (LEqual(MAXL, Zero)) {
> +                    Subtract(MAXH, One, MAXH)
> +                    Store(0xFFFFFFFF, MAXL)
> +                } Else {
> +                    Subtract(MAXL, One, MAXL)
> +                }
> +
> +                If (LEqual(MAXH, Zero)){
> +                    Name(MR32, ResourceTemplate() {
> +                        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
> +                        Cacheable, ReadWrite,
> +                        0x00000000,        // Address Space Granularity
> +                        0x00000000,        // Address Range Minimum
> +                        0xFFFFFFFE,        // Address Range Maximum
> +                        0x00000000,        // Address Translation Offset
> +                        0xFFFFFFFF,        // Address Length
> +                        ,, MW32, AddressRangeMemory, TypeStatic)
> +                    })
> +                    CreateDWordField(MR32, MW32._MIN, MIN)
> +                    CreateDWordField(MR32, MW32._MAX, MAX)
> +                    CreateDWordField(MR32, MW32._LEN, LEN)
> +                    Store(MINL, MIN)
> +                    Store(MAXL, MAX)
> +                    Store(LENL, LEN)
> +
> +                    Release(MLCK)
> +                    Return(MR32)
> +                }
> +
> +                Release(MLCK)
> +                Return(MR64)
> +            }
> +
> +            Method(MPXM, 1) {
> +                Acquire(MLCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MSEL) // select DIMM
> +                Store(MPX, Local0)
> +                Release(MLCK)
> +                Return(Local0)
> +            }
> +
> +            Method(MOST, 4) {
> +                Acquire(MLCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MSEL) // select DIMM
> +                Store(Arg1, MOEV)
> +                Store(Arg2, MOSC)
> +                Release(MLCK)
> +            }
> +        } // Device()
> +    } // Scope()
>  }
> -- 
> 1.7.1

  reply	other threads:[~2013-11-21  9:34 UTC|newest]

Thread overview: 143+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-21  2:38 [Qemu-devel] [PATCH 00/27 RFC v7] ACPI memory hotplug Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 01/27] acpi: factor out common pm_update_sci() into acpi core Igor Mammedov
2013-12-05 12:37   ` Michael S. Tsirkin
2013-12-05 15:11     ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 02/27] rename pci_hotplug_fn to hotplug_fn and make it available for other devices Igor Mammedov
2013-11-25 12:49   ` Paolo Bonzini
2013-11-25 13:11     ` Paolo Bonzini
2013-11-25 15:57     ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 03/27] pc: add 'etc/reserved-memory-end' fw_cfg interface for SeaBIOS Igor Mammedov
2013-12-19 14:35   ` Michael S. Tsirkin
2013-12-20 12:48     ` Igor Mammedov
2013-12-22 11:20       ` Michael S. Tsirkin
2013-11-21  2:38 ` [Qemu-devel] [PATCH 04/27] vl: convert -m to qemu_opts_parse() Igor Mammedov
2013-11-21  6:01   ` Li Guang
2013-11-21 13:45     ` Igor Mammedov
2013-11-21 10:12   ` Markus Armbruster
2013-11-26 13:17     ` Igor Mammedov
2013-11-26 14:49       ` Markus Armbruster
2013-11-26 16:55         ` Igor Mammedov
2013-11-27 14:35           ` Markus Armbruster
2013-11-27 15:28             ` Igor Mammedov
2013-11-27 17:31               ` Markus Armbruster
2013-11-27  0:27         ` [Qemu-devel] [PATCH 04/28] vl: convert -m to QemuOpts Igor Mammedov
2013-11-27  0:27           ` [Qemu-devel] [PATCH 05/28] vl.c: extend -m option to support options for memory hotplug Igor Mammedov
2013-12-10  7:23           ` [Qemu-devel] [PATCH 04/28] vl: convert -m to QemuOpts Paolo Bonzini
2013-12-10 10:53             ` Igor Mammedov
2013-11-25 12:51   ` [Qemu-devel] [PATCH 04/27] vl: convert -m to qemu_opts_parse() Paolo Bonzini
2013-11-27  0:32     ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 05/27] qapi: add SIZE type parser to string_input_visitor Igor Mammedov
2013-11-21 10:15   ` Markus Armbruster
2013-11-25 15:36     ` Igor Mammedov
2013-11-25 16:04       ` Michael S. Tsirkin
2013-11-25 16:32         ` Paolo Bonzini
2013-11-25 16:43           ` Eric Blake
2013-11-25 17:01             ` Paolo Bonzini
2013-11-27 14:15             ` Markus Armbruster
2013-11-27 15:17               ` Paolo Bonzini
2013-11-27 17:02                 ` Markus Armbruster
2013-11-27 17:10                   ` Paolo Bonzini
2013-12-19 14:40             ` Michael S. Tsirkin
2013-12-19 15:14               ` Markus Armbruster
2013-12-19 15:32                 ` Michael S. Tsirkin
2013-12-19 15:31               ` Paolo Bonzini
2013-12-19 15:40                 ` Michael S. Tsirkin
2013-12-19 15:46                   ` Paolo Bonzini
2013-11-21  2:38 ` [Qemu-devel] [PATCH 06/27] get reference to /backend container via qemu_get_backend() Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 07/27] add memdev backend infrastructure Igor Mammedov
2013-11-25 12:54   ` Paolo Bonzini
2013-11-25 16:01     ` Igor Mammedov
2013-11-25 16:09       ` Paolo Bonzini
2013-11-27 14:37         ` Igor Mammedov
2013-11-27 15:21           ` Paolo Bonzini
2013-11-27 15:57             ` Igor Mammedov
2013-11-27 15:25   ` Eric Blake
2013-11-27 16:09     ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 08/27] dimm: implement dimm device abstraction Igor Mammedov
2013-11-25 12:57   ` Paolo Bonzini
2013-11-25 15:10     ` Igor Mammedov
2013-11-25 15:16       ` Paolo Bonzini
2013-11-21  2:38 ` [Qemu-devel] [PATCH 09/27] dimm: map DimmDevice into DimBus provided address space Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 10/27] dimm: add busy slot check and slot auto-allocation Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 11/27] dimm: add busy address check and address auto-allocation Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 12/27] dimm: add hotplug callback to DimmBus Igor Mammedov
2013-11-25 13:01   ` Paolo Bonzini
2013-11-25 14:40     ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 13/27] acpi: memory hotplug ACPI hardware implementation Igor Mammedov
2013-11-21  9:42   ` Michael S. Tsirkin
2013-11-21 14:21     ` Igor Mammedov
2013-11-21 14:38       ` Michael S. Tsirkin
2013-11-22 17:14         ` Igor Mammedov
2013-11-24 10:58           ` Michael S. Tsirkin
2013-11-25  7:27             ` Markus Armbruster
2013-11-25 13:45               ` Paolo Bonzini
2013-11-25 14:18                 ` Igor Mammedov
2013-11-25 14:31                   ` Paolo Bonzini
2013-11-25 14:57                     ` Igor Mammedov
2013-11-25 13:56             ` Igor Mammedov
2013-11-27 17:59   ` Eric Blake
2013-11-21  2:38 ` [Qemu-devel] [PATCH 14/27] acpi: initialize memory hotplug ACPI PIIX4 hardware Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 15/27] acpi: piix4: add memory-hotplug-io-base property to piix4_pm Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 16/27] acpi: ich9: allow guest to clear SCI rised by GPE Igor Mammedov
2013-11-21  7:14   ` Michael S. Tsirkin
2013-11-21  8:12     ` Hu Tao
2013-11-21  8:18       ` Li Guang
2013-11-21  8:29         ` Michael S. Tsirkin
2013-11-21  8:32           ` Li Guang
2013-11-21  9:43             ` Michael S. Tsirkin
2013-11-22  0:57               ` Li Guang
2013-11-25 11:13                 ` Igor Mammedov
2013-11-26  0:29                   ` Li Guang
2013-11-26 22:36                     ` Igor Mammedov
2013-11-27  0:15                       ` Li Guang
2013-11-27  0:57                         ` Igor Mammedov
2013-11-27  1:48                           ` Li Guang
2013-11-27  9:43                             ` Paolo Bonzini
2013-11-21 13:19             ` Igor Mammedov
2013-11-22  1:03               ` Li Guang
2013-11-21  8:26       ` Michael S. Tsirkin
2013-11-21  8:28         ` Hu Tao
2013-11-21 13:31           ` Igor Mammedov
2013-11-21 13:21         ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 17/27] acpi: initialize memory hotplug ACPI ICH9 hardware Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 18/27] acpi: ich9: add memory-hotplug-io-base property to ich9_pm Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 19/27] acpi: piix4/ich9: add optional vmstate field for MemHotplugState migration Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 20/27] pc: piix: make PCII440FXState type public Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 21/27] pc: add memory hotplug 440fx machine Igor Mammedov
2013-11-21  5:48   ` Li Guang
2013-11-21 14:13     ` Andreas Färber
2013-11-21 14:34       ` Igor Mammedov
2013-11-21 14:39         ` Michael S. Tsirkin
2013-11-21 16:09         ` Andreas Färber
2013-11-21 16:17           ` Michael S. Tsirkin
2013-11-25 10:41           ` Igor Mammedov
2013-11-25 17:00             ` Andreas Färber
2013-11-26 20:26               ` Igor Mammedov
2013-11-22 14:23   ` Gerd Hoffmann
2013-11-25 11:00     ` Igor Mammedov
2013-11-25 11:39       ` Gerd Hoffmann
2013-11-25 13:34         ` Igor Mammedov
2013-11-25 13:35         ` Paolo Bonzini
2013-11-25 14:24           ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 22/27] pc: add memory hotplug Q35 machine Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 23/27] pc: ACPI BIOS: implement memory hotplug interface Igor Mammedov
2013-11-21  9:37   ` Michael S. Tsirkin [this message]
2013-11-25 14:39     ` Igor Mammedov
2013-12-16 19:50       ` Michael S. Tsirkin
2013-12-16 21:42         ` Igor Mammedov
2013-11-25 13:42   ` Paolo Bonzini
2013-11-25 14:26     ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 24/27] pc: ACPI BIOS: add ssdt-mem.hex.generated and update ssdt-misc.hex.generated Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 25/27] pc: ACPI BIOS: use enum for defining memory affinity flags Igor Mammedov
2013-11-21  7:20   ` Michael S. Tsirkin
2013-11-25 10:11     ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 26/27] pc: ACPI BIOS: reserve SRAT entry for hotplug mem hole Igor Mammedov
2013-11-21  7:18   ` Michael S. Tsirkin
2013-11-25 10:11     ` Igor Mammedov
2013-11-21  2:38 ` [Qemu-devel] [PATCH 27/27] pc: ACPI BIOS: make GPE.3 handle memory hotplug event on PIIX and Q35 machines Igor Mammedov
2013-11-21  6:20 ` [Qemu-devel] [PATCH 00/27 RFC v7] ACPI memory hotplug Michael S. Tsirkin
2013-11-21 13:39   ` Igor Mammedov
2013-11-21 13:43     ` Michael S. Tsirkin
2013-11-21 14:37       ` Igor Mammedov
2013-11-21 14:45         ` Michael S. Tsirkin
2013-11-25 10:09           ` Igor Mammedov

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=20131121093701.GA3140@redhat.com \
    --to=mst@redhat.com \
    --cc=afaerber@suse.de \
    --cc=aliguori@amazon.com \
    --cc=armbru@redhat.com \
    --cc=chegu_vinod@hp.com \
    --cc=hutao@cn.fujitsu.com \
    --cc=imammedo@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=marcel.a@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=mjt@tls.msk.ru \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=stefanha@redhat.com \
    --cc=vasilis.liaskovitis@profitbricks.com \
    /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.