From: Igor Mammedov <imammedo@redhat.com>
To: Tang Chen <tangchen@cn.fujitsu.com>
Cc: zhugh.fnst@cn.fujitsu.com, mst@redhat.com, hutao@cn.fujitsu.com,
qemu-devel@nongnu.org, isimatu.yasuaki@jp.fujitsu.com,
guz.fnst@cn.fujitsu.com, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [RESEND PATCH v1 12/13] acpi: Add hardware implementation for memory hot unplug.
Date: Thu, 29 Jan 2015 14:24:32 +0100 [thread overview]
Message-ID: <20150129142432.7e1c1c4d@nial.brq.redhat.com> (raw)
In-Reply-To: <1420679180-14883-13-git-send-email-tangchen@cn.fujitsu.com>
On Thu, 8 Jan 2015 09:06:19 +0800
Tang Chen <tangchen@cn.fujitsu.com> wrote:
> This patch adds a new bit to memory hotplug IO port indicating that
> ej0 has been evaluated by guest OS. And call pc-dimm unplug cb to do
> the real removal.
>
>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
> ---
> docs/specs/acpi_mem_hotplug.txt | 8 ++++++--
> hw/acpi/memory_hotplug.c | 23 ++++++++++++++++++++---
> hw/core/qdev.c | 2 +-
> include/hw/qdev-core.h | 1 +
> 4 files changed, 28 insertions(+), 6 deletions(-)
>
> diff --git a/docs/specs/acpi_mem_hotplug.txt b/docs/specs/acpi_mem_hotplug.txt
> index 1290994..28a1ffa 100644
> --- a/docs/specs/acpi_mem_hotplug.txt
> +++ b/docs/specs/acpi_mem_hotplug.txt
> @@ -19,7 +19,9 @@ Memory hot-plug interface (IO port 0xa00-0xa17, 1-4 byte access):
> 1: Device insert event, used to distinguish device for which
> no device check event to OSPM was issued.
> It's valid only when bit 1 is set.
> - 2-7: reserved and should be ignored by OSPM
> + 2: Device remove event, used to indicate that device is being
> + removed.
bit has the same semantic as bit 1,
Please update description to match it.
> + 3-7: reserved and should be ignored by OSPM
> [0x15-0x17] reserved
>
> write access:
> @@ -35,7 +37,9 @@ Memory hot-plug interface (IO port 0xa00-0xa17, 1-4 byte access):
> 1: if set to 1 clears device insert event, set by OSPM
> after it has emitted device check event for the
> selected memory device
> - 2-7: reserved, OSPM must clear them before writing to register
> + 2: set by hardware after it has emitted device eject event for
> + selected memory device
same here
> + 3-7: reserved, OSPM must clear them before writing to register
>
> Selecting memory device slot beyond present range has no effect on platform:
> - write accesses to memory hot-plug registers not documented above are
> diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
> index 2b0c8ca..b9e8752 100644
> --- a/hw/acpi/memory_hotplug.c
> +++ b/hw/acpi/memory_hotplug.c
> @@ -2,6 +2,7 @@
> #include "hw/acpi/pc-hotplug.h"
> #include "hw/mem/pc-dimm.h"
> #include "hw/boards.h"
> +#include "hw/qdev-core.h"
> #include "trace.h"
> #include "qapi-event.h"
>
> @@ -75,6 +76,7 @@ static uint64_t acpi_memory_hotplug_read(void *opaque, hwaddr addr,
> case 0x14: /* pack and return is_* fields */
> val |= mdev->is_enabled ? 1 : 0;
> val |= mdev->is_inserting ? 2 : 0;
> + val |= mdev->is_removing ? 4 : 0;
> trace_mhp_acpi_read_flags(mem_st->selector, val);
> break;
> default:
> @@ -90,6 +92,8 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
> MemHotplugState *mem_st = opaque;
> MemStatus *mdev;
> ACPIOSTInfo *info;
> + DeviceState *dev = NULL;
> + HotplugHandler *hotplug_ctrl = NULL;
>
> if (!mem_st->dev_count) {
> return;
> @@ -121,21 +125,34 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
> mdev = &mem_st->devs[mem_st->selector];
> mdev->ost_status = data;
> trace_mhp_acpi_write_ost_status(mem_st->selector, mdev->ost_status);
> - /* TODO: implement memory removal on guest signal */
>
> info = acpi_memory_device_status(mem_st->selector, mdev);
> qapi_event_send_acpi_device_ost(info, &error_abort);
> qapi_free_ACPIOSTInfo(info);
> break;
> - case 0x14:
> + case 0x14: /* set is_* fields */
> mdev = &mem_st->devs[mem_st->selector];
> +
> if (data & 2) { /* clear insert event */
> mdev->is_inserting = false;
> trace_mhp_acpi_clear_insert_evt(mem_st->selector);
> + } else if (data & 4) { /* request removal of device */
add here a tracing event similar to above one ^^^
> + /*
> + * QEmu memory hot unplug is an asynchronized procedure. QEmu first
> + * calls pc-dimm unplug request cb to send a SCI to guest. When the
> + * Guest OS finished handling the SCI, it evaluates ACPI ej0, and
> + * QEmu calls pc-dimm unplug cb to remove memory device.
> + */
> + dev = DEVICE(mdev->dimm);
> + hotplug_ctrl = qdev_get_hotplug_handler(dev);
> + /* Call pc-dimm unplug cb. */
> + hotplug_handler_unplug(hotplug_ctrl, dev, NULL);
> }
> +
> + break;
> + default:
> break;
> }
> -
> }
> static const MemoryRegionOps acpi_memory_hotplug_ops = {
> .read = acpi_memory_hotplug_read,
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 901f289..9f08fe6 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -223,7 +223,7 @@ void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
> dev->alias_required_for_version = required_for_version;
> }
>
> -static HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev)
> +HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev)
> {
> HotplugHandler *hotplug_ctrl = NULL;
>
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 589bbe7..60f549e 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -261,6 +261,7 @@ void qdev_init_nofail(DeviceState *dev);
> void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
> int required_for_version);
> void qdev_unplug(DeviceState *dev, Error **errp);
> +HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev);
> void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev,
> DeviceState *dev, Error **errp);
> void qdev_machine_creation_done(void);
next prev parent reply other threads:[~2015-01-29 13:24 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-08 1:06 [Qemu-devel] [RESEND PATCH v1 00/13] QEmu memory hot unplug support Tang Chen
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 01/13] acpi, mem-hotplug: Use PC_DIMM_SLOT_PROP in acpi_memory_plug_cb() Tang Chen
2015-01-29 12:29 ` Igor Mammedov
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 02/13] acpi, mem-hotplug: Add acpi_memory_get_slot_status_descriptor() to get MemStatus Tang Chen
2015-01-29 12:33 ` Igor Mammedov
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 03/13] acpi, mem-hotplug: Add acpi_memory_hotplug_sci() to rise sci for memory hotplug Tang Chen
2015-01-29 12:42 ` Igor Mammedov
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 04/13] acpi, mem-hotplug: Add unplug request cb for memory device Tang Chen
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 05/13] acpi, piix4: Add memory hot unplug request support for piix4 Tang Chen
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 06/13] acpi, ich9: Add memory hot unplug request support for ich9 Tang Chen
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 07/13] pc-dimm: Add memory hot unplug request support for pc-dimm Tang Chen
2015-01-29 12:48 ` Igor Mammedov
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 08/13] acpi, mem-hotplug: Add unplug cb for memory device Tang Chen
2015-01-29 13:19 ` Igor Mammedov
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 09/13] acpi, piix4: Add memory hot unplug support for piix4 Tang Chen
2015-01-29 12:55 ` Igor Mammedov
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 10/13] acpi, ich9: Add memory hot unplug support for ich9 Tang Chen
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 11/13] pc-dimm: Add memory hot unplug support for pc-dimm Tang Chen
2015-01-29 13:34 ` Igor Mammedov
2015-02-25 11:21 ` Zhu Guihua
2015-02-25 12:53 ` Igor Mammedov
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 12/13] acpi: Add hardware implementation for memory hot unplug Tang Chen
2015-01-29 13:24 ` Igor Mammedov [this message]
2015-01-08 1:06 ` [Qemu-devel] [RESEND PATCH v1 13/13] pc, acpi bios: Add memory hot unplug interface Tang Chen
2015-01-29 13:29 ` Igor Mammedov
2015-01-29 13:32 ` [Qemu-devel] [RESEND PATCH v1 00/13] QEmu memory hot unplug support Igor Mammedov
2015-02-03 8:41 ` Zhi Yong Wu
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=20150129142432.7e1c1c4d@nial.brq.redhat.com \
--to=imammedo@redhat.com \
--cc=guz.fnst@cn.fujitsu.com \
--cc=hutao@cn.fujitsu.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=tangchen@cn.fujitsu.com \
--cc=zhugh.fnst@cn.fujitsu.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 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).