From: "Michael S. Tsirkin" <mst@redhat.com>
To: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>,
linux-nvdimm <linux-nvdimm@lists.01.org>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>,
Igor Mammedov <imammedo@redhat.com>
Subject: Re: [qemu PATCH v4 3/4] nvdimm, acpi: support NFIT platform capabilities
Date: Tue, 5 Jun 2018 18:25:27 +0300 [thread overview]
Message-ID: <20180605182243-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20180521163203.26590-4-ross.zwisler@linux.intel.com>
On Mon, May 21, 2018 at 10:32:02AM -0600, Ross Zwisler wrote:
> Add a machine command line option to allow the user to control the Platform
> Capabilities Structure in the virtualized NFIT. This Platform Capabilities
> Structure was added in ACPI 6.2 Errata A.
>
> Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
I tried playing with it and encoding the capabilities is
quite awkward.
Can we add bits for specific capabilities instead of nvdimm-cap?
How about:
"cpu-flush-on-power-loss-cap"
"memory-flush-on-power-loss-cap"
"byte-addressable-mirroring-cap"
?
> ---
> docs/nvdimm.txt | 27 +++++++++++++++++++++++++++
> hw/acpi/nvdimm.c | 45 +++++++++++++++++++++++++++++++++++++++++----
> hw/i386/pc.c | 31 +++++++++++++++++++++++++++++++
> include/hw/i386/pc.h | 1 +
> include/hw/mem/nvdimm.h | 5 +++++
> 5 files changed, 105 insertions(+), 4 deletions(-)
>
> diff --git a/docs/nvdimm.txt b/docs/nvdimm.txt
> index e903d8bb09..8b48fb4633 100644
> --- a/docs/nvdimm.txt
> +++ b/docs/nvdimm.txt
> @@ -153,3 +153,30 @@ guest NVDIMM region mapping structure. This unarmed flag indicates
> guest software that this vNVDIMM device contains a region that cannot
> accept persistent writes. In result, for example, the guest Linux
> NVDIMM driver, marks such vNVDIMM device as read-only.
> +
> +Platform Capabilities
> +---------------------
> +
> +ACPI 6.2 Errata A added support for a new Platform Capabilities Structure
> +which allows the platform to communicate what features it supports related to
> +NVDIMM data durability. Users can provide a capabilities value to a guest via
> +the optional "nvdimm-cap" machine command line option:
> +
> + -machine pc,accel=kvm,nvdimm,nvdimm-cap=2
> +
> +This "nvdimm-cap" field is an integer, and is the combined value of the
> +various capability bits defined in table 5-137 of the ACPI 6.2 Errata A spec.
> +
> +Here is a quick summary of the three bits that are defined as of that spec:
> +
> +Bit[0] - CPU Cache Flush to NVDIMM Durability on Power Loss Capable.
> +Bit[1] - Memory Controller Flush to NVDIMM Durability on Power Loss Capable.
> + Note: If bit 0 is set to 1 then this bit shall be set to 1 as well.
> +Bit[2] - Byte Addressable Persistent Memory Hardware Mirroring Capable.
> +
> +So, a "nvdimm-cap" value of 2 would mean that the platform supports Memory
> +Controller Flush on Power Loss, a value of 3 would mean that the platform
> +supports CPU Cache Flush and Memory Controller Flush on Power Loss, etc.
> +
> +For a complete list of the flags available and for more detailed descriptions,
> +please consult the ACPI spec.
> diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c
> index 59d6e4254c..87e4280c71 100644
> --- a/hw/acpi/nvdimm.c
> +++ b/hw/acpi/nvdimm.c
> @@ -169,6 +169,21 @@ struct NvdimmNfitControlRegion {
> } QEMU_PACKED;
> typedef struct NvdimmNfitControlRegion NvdimmNfitControlRegion;
>
> +/*
> + * NVDIMM Platform Capabilities Structure
> + *
> + * Defined in section 5.2.25.9 of ACPI 6.2 Errata A, September 2017
> + */
> +struct NvdimmNfitPlatformCaps {
> + uint16_t type;
> + uint16_t length;
> + uint8_t highest_cap;
> + uint8_t reserved[3];
> + uint32_t capabilities;
> + uint8_t reserved2[4];
> +} QEMU_PACKED;
> +typedef struct NvdimmNfitPlatformCaps NvdimmNfitPlatformCaps;
> +
> /*
> * Module serial number is a unique number for each device. We use the
> * slot id of NVDIMM device to generate this number so that each device
> @@ -351,7 +366,23 @@ static void nvdimm_build_structure_dcr(GArray *structures, DeviceState *dev)
> JEDEC Annex L Release 3. */);
> }
>
> -static GArray *nvdimm_build_device_structure(void)
> +/*
> + * ACPI 6.2 Errata A: 5.2.25.9 NVDIMM Platform Capabilities Structure
> + */
> +static void
> +nvdimm_build_structure_caps(GArray *structures, uint32_t capabilities)
> +{
> + NvdimmNfitPlatformCaps *nfit_caps;
> +
> + nfit_caps = acpi_data_push(structures, sizeof(*nfit_caps));
> +
> + nfit_caps->type = cpu_to_le16(7 /* NVDIMM Platform Capabilities */);
> + nfit_caps->length = cpu_to_le16(sizeof(*nfit_caps));
> + nfit_caps->highest_cap = 31 - clz32(capabilities);
> + nfit_caps->capabilities = cpu_to_le32(capabilities);
> +}
> +
> +static GArray *nvdimm_build_device_structure(AcpiNVDIMMState *state)
> {
> GSList *device_list = nvdimm_get_device_list();
> GArray *structures = g_array_new(false, true /* clear */, 1);
> @@ -373,6 +404,10 @@ static GArray *nvdimm_build_device_structure(void)
> }
> g_slist_free(device_list);
>
> + if (state->capabilities) {
> + nvdimm_build_structure_caps(structures, state->capabilities);
> + }
> +
> return structures;
> }
>
> @@ -381,16 +416,18 @@ static void nvdimm_init_fit_buffer(NvdimmFitBuffer *fit_buf)
> fit_buf->fit = g_array_new(false, true /* clear */, 1);
> }
>
> -static void nvdimm_build_fit_buffer(NvdimmFitBuffer *fit_buf)
> +static void nvdimm_build_fit_buffer(AcpiNVDIMMState *state)
> {
> + NvdimmFitBuffer *fit_buf = &state->fit_buf;
> +
> g_array_free(fit_buf->fit, true);
> - fit_buf->fit = nvdimm_build_device_structure();
> + fit_buf->fit = nvdimm_build_device_structure(state);
> fit_buf->dirty = true;
> }
>
> void nvdimm_plug(AcpiNVDIMMState *state)
> {
> - nvdimm_build_fit_buffer(&state->fit_buf);
> + nvdimm_build_fit_buffer(state);
> }
>
> static void nvdimm_build_nfit(AcpiNVDIMMState *state, GArray *table_offsets,
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index d768930d02..1b2684c549 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -2182,6 +2182,33 @@ static void pc_machine_set_nvdimm(Object *obj, bool value, Error **errp)
> pcms->acpi_nvdimm_state.is_enabled = value;
> }
>
> +static void pc_machine_get_nvdimm_capabilities(Object *obj, Visitor *v,
> + const char *name, void *opaque,
> + Error **errp)
> +{
> + PCMachineState *pcms = PC_MACHINE(obj);
> + uint32_t value = pcms->acpi_nvdimm_state.capabilities;
> +
> + visit_type_uint32(v, name, &value, errp);
> +}
> +
> +static void pc_machine_set_nvdimm_capabilities(Object *obj, Visitor *v,
> + const char *name, void *opaque,
> + Error **errp)
> +{
> + PCMachineState *pcms = PC_MACHINE(obj);
> + Error *error = NULL;
> + uint32_t value;
> +
> + visit_type_uint32(v, name, &value, &error);
> + if (error) {
> + error_propagate(errp, error);
> + return;
> + }
> +
> + pcms->acpi_nvdimm_state.capabilities = value;
> +}
> +
> static bool pc_machine_get_smbus(Object *obj, Error **errp)
> {
> PCMachineState *pcms = PC_MACHINE(obj);
> @@ -2395,6 +2422,10 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
> object_class_property_add_bool(oc, PC_MACHINE_NVDIMM,
> pc_machine_get_nvdimm, pc_machine_set_nvdimm, &error_abort);
>
> + object_class_property_add(oc, PC_MACHINE_NVDIMM_CAP, "uint32",
> + pc_machine_get_nvdimm_capabilities,
> + pc_machine_set_nvdimm_capabilities, NULL, NULL, &error_abort);
> +
> object_class_property_add_bool(oc, PC_MACHINE_SMBUS,
> pc_machine_get_smbus, pc_machine_set_smbus, &error_abort);
>
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 2a98e3ad68..e9b22f929c 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -76,6 +76,7 @@ struct PCMachineState {
> #define PC_MACHINE_VMPORT "vmport"
> #define PC_MACHINE_SMM "smm"
> #define PC_MACHINE_NVDIMM "nvdimm"
> +#define PC_MACHINE_NVDIMM_CAP "nvdimm-cap"
> #define PC_MACHINE_SMBUS "smbus"
> #define PC_MACHINE_SATA "sata"
> #define PC_MACHINE_PIT "pit"
> diff --git a/include/hw/mem/nvdimm.h b/include/hw/mem/nvdimm.h
> index 74c60332e1..3c82751bab 100644
> --- a/include/hw/mem/nvdimm.h
> +++ b/include/hw/mem/nvdimm.h
> @@ -134,6 +134,11 @@ struct AcpiNVDIMMState {
>
> /* the IO region used by OSPM to transfer control to QEMU. */
> MemoryRegion io_mr;
> +
> + /*
> + * Platform capabilities, section 5.2.25.9 of ACPI 6.2 Errata A
> + */
> + int32_t capabilities;
> };
> typedef struct AcpiNVDIMMState AcpiNVDIMMState;
>
> --
> 2.14.3
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Igor Mammedov <imammedo@redhat.com>,
qemu-devel@nongnu.org, Haozhong Zhang <haozhong.zhang@intel.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
linux-nvdimm <linux-nvdimm@lists.01.org>,
"Elliott, Robert (Persistent Memory)" <elliott@hpe.com>
Subject: Re: [Qemu-devel] [qemu PATCH v4 3/4] nvdimm, acpi: support NFIT platform capabilities
Date: Tue, 5 Jun 2018 18:25:27 +0300 [thread overview]
Message-ID: <20180605182243-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20180521163203.26590-4-ross.zwisler@linux.intel.com>
On Mon, May 21, 2018 at 10:32:02AM -0600, Ross Zwisler wrote:
> Add a machine command line option to allow the user to control the Platform
> Capabilities Structure in the virtualized NFIT. This Platform Capabilities
> Structure was added in ACPI 6.2 Errata A.
>
> Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
I tried playing with it and encoding the capabilities is
quite awkward.
Can we add bits for specific capabilities instead of nvdimm-cap?
How about:
"cpu-flush-on-power-loss-cap"
"memory-flush-on-power-loss-cap"
"byte-addressable-mirroring-cap"
?
> ---
> docs/nvdimm.txt | 27 +++++++++++++++++++++++++++
> hw/acpi/nvdimm.c | 45 +++++++++++++++++++++++++++++++++++++++++----
> hw/i386/pc.c | 31 +++++++++++++++++++++++++++++++
> include/hw/i386/pc.h | 1 +
> include/hw/mem/nvdimm.h | 5 +++++
> 5 files changed, 105 insertions(+), 4 deletions(-)
>
> diff --git a/docs/nvdimm.txt b/docs/nvdimm.txt
> index e903d8bb09..8b48fb4633 100644
> --- a/docs/nvdimm.txt
> +++ b/docs/nvdimm.txt
> @@ -153,3 +153,30 @@ guest NVDIMM region mapping structure. This unarmed flag indicates
> guest software that this vNVDIMM device contains a region that cannot
> accept persistent writes. In result, for example, the guest Linux
> NVDIMM driver, marks such vNVDIMM device as read-only.
> +
> +Platform Capabilities
> +---------------------
> +
> +ACPI 6.2 Errata A added support for a new Platform Capabilities Structure
> +which allows the platform to communicate what features it supports related to
> +NVDIMM data durability. Users can provide a capabilities value to a guest via
> +the optional "nvdimm-cap" machine command line option:
> +
> + -machine pc,accel=kvm,nvdimm,nvdimm-cap=2
> +
> +This "nvdimm-cap" field is an integer, and is the combined value of the
> +various capability bits defined in table 5-137 of the ACPI 6.2 Errata A spec.
> +
> +Here is a quick summary of the three bits that are defined as of that spec:
> +
> +Bit[0] - CPU Cache Flush to NVDIMM Durability on Power Loss Capable.
> +Bit[1] - Memory Controller Flush to NVDIMM Durability on Power Loss Capable.
> + Note: If bit 0 is set to 1 then this bit shall be set to 1 as well.
> +Bit[2] - Byte Addressable Persistent Memory Hardware Mirroring Capable.
> +
> +So, a "nvdimm-cap" value of 2 would mean that the platform supports Memory
> +Controller Flush on Power Loss, a value of 3 would mean that the platform
> +supports CPU Cache Flush and Memory Controller Flush on Power Loss, etc.
> +
> +For a complete list of the flags available and for more detailed descriptions,
> +please consult the ACPI spec.
> diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c
> index 59d6e4254c..87e4280c71 100644
> --- a/hw/acpi/nvdimm.c
> +++ b/hw/acpi/nvdimm.c
> @@ -169,6 +169,21 @@ struct NvdimmNfitControlRegion {
> } QEMU_PACKED;
> typedef struct NvdimmNfitControlRegion NvdimmNfitControlRegion;
>
> +/*
> + * NVDIMM Platform Capabilities Structure
> + *
> + * Defined in section 5.2.25.9 of ACPI 6.2 Errata A, September 2017
> + */
> +struct NvdimmNfitPlatformCaps {
> + uint16_t type;
> + uint16_t length;
> + uint8_t highest_cap;
> + uint8_t reserved[3];
> + uint32_t capabilities;
> + uint8_t reserved2[4];
> +} QEMU_PACKED;
> +typedef struct NvdimmNfitPlatformCaps NvdimmNfitPlatformCaps;
> +
> /*
> * Module serial number is a unique number for each device. We use the
> * slot id of NVDIMM device to generate this number so that each device
> @@ -351,7 +366,23 @@ static void nvdimm_build_structure_dcr(GArray *structures, DeviceState *dev)
> JEDEC Annex L Release 3. */);
> }
>
> -static GArray *nvdimm_build_device_structure(void)
> +/*
> + * ACPI 6.2 Errata A: 5.2.25.9 NVDIMM Platform Capabilities Structure
> + */
> +static void
> +nvdimm_build_structure_caps(GArray *structures, uint32_t capabilities)
> +{
> + NvdimmNfitPlatformCaps *nfit_caps;
> +
> + nfit_caps = acpi_data_push(structures, sizeof(*nfit_caps));
> +
> + nfit_caps->type = cpu_to_le16(7 /* NVDIMM Platform Capabilities */);
> + nfit_caps->length = cpu_to_le16(sizeof(*nfit_caps));
> + nfit_caps->highest_cap = 31 - clz32(capabilities);
> + nfit_caps->capabilities = cpu_to_le32(capabilities);
> +}
> +
> +static GArray *nvdimm_build_device_structure(AcpiNVDIMMState *state)
> {
> GSList *device_list = nvdimm_get_device_list();
> GArray *structures = g_array_new(false, true /* clear */, 1);
> @@ -373,6 +404,10 @@ static GArray *nvdimm_build_device_structure(void)
> }
> g_slist_free(device_list);
>
> + if (state->capabilities) {
> + nvdimm_build_structure_caps(structures, state->capabilities);
> + }
> +
> return structures;
> }
>
> @@ -381,16 +416,18 @@ static void nvdimm_init_fit_buffer(NvdimmFitBuffer *fit_buf)
> fit_buf->fit = g_array_new(false, true /* clear */, 1);
> }
>
> -static void nvdimm_build_fit_buffer(NvdimmFitBuffer *fit_buf)
> +static void nvdimm_build_fit_buffer(AcpiNVDIMMState *state)
> {
> + NvdimmFitBuffer *fit_buf = &state->fit_buf;
> +
> g_array_free(fit_buf->fit, true);
> - fit_buf->fit = nvdimm_build_device_structure();
> + fit_buf->fit = nvdimm_build_device_structure(state);
> fit_buf->dirty = true;
> }
>
> void nvdimm_plug(AcpiNVDIMMState *state)
> {
> - nvdimm_build_fit_buffer(&state->fit_buf);
> + nvdimm_build_fit_buffer(state);
> }
>
> static void nvdimm_build_nfit(AcpiNVDIMMState *state, GArray *table_offsets,
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index d768930d02..1b2684c549 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -2182,6 +2182,33 @@ static void pc_machine_set_nvdimm(Object *obj, bool value, Error **errp)
> pcms->acpi_nvdimm_state.is_enabled = value;
> }
>
> +static void pc_machine_get_nvdimm_capabilities(Object *obj, Visitor *v,
> + const char *name, void *opaque,
> + Error **errp)
> +{
> + PCMachineState *pcms = PC_MACHINE(obj);
> + uint32_t value = pcms->acpi_nvdimm_state.capabilities;
> +
> + visit_type_uint32(v, name, &value, errp);
> +}
> +
> +static void pc_machine_set_nvdimm_capabilities(Object *obj, Visitor *v,
> + const char *name, void *opaque,
> + Error **errp)
> +{
> + PCMachineState *pcms = PC_MACHINE(obj);
> + Error *error = NULL;
> + uint32_t value;
> +
> + visit_type_uint32(v, name, &value, &error);
> + if (error) {
> + error_propagate(errp, error);
> + return;
> + }
> +
> + pcms->acpi_nvdimm_state.capabilities = value;
> +}
> +
> static bool pc_machine_get_smbus(Object *obj, Error **errp)
> {
> PCMachineState *pcms = PC_MACHINE(obj);
> @@ -2395,6 +2422,10 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
> object_class_property_add_bool(oc, PC_MACHINE_NVDIMM,
> pc_machine_get_nvdimm, pc_machine_set_nvdimm, &error_abort);
>
> + object_class_property_add(oc, PC_MACHINE_NVDIMM_CAP, "uint32",
> + pc_machine_get_nvdimm_capabilities,
> + pc_machine_set_nvdimm_capabilities, NULL, NULL, &error_abort);
> +
> object_class_property_add_bool(oc, PC_MACHINE_SMBUS,
> pc_machine_get_smbus, pc_machine_set_smbus, &error_abort);
>
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 2a98e3ad68..e9b22f929c 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -76,6 +76,7 @@ struct PCMachineState {
> #define PC_MACHINE_VMPORT "vmport"
> #define PC_MACHINE_SMM "smm"
> #define PC_MACHINE_NVDIMM "nvdimm"
> +#define PC_MACHINE_NVDIMM_CAP "nvdimm-cap"
> #define PC_MACHINE_SMBUS "smbus"
> #define PC_MACHINE_SATA "sata"
> #define PC_MACHINE_PIT "pit"
> diff --git a/include/hw/mem/nvdimm.h b/include/hw/mem/nvdimm.h
> index 74c60332e1..3c82751bab 100644
> --- a/include/hw/mem/nvdimm.h
> +++ b/include/hw/mem/nvdimm.h
> @@ -134,6 +134,11 @@ struct AcpiNVDIMMState {
>
> /* the IO region used by OSPM to transfer control to QEMU. */
> MemoryRegion io_mr;
> +
> + /*
> + * Platform capabilities, section 5.2.25.9 of ACPI 6.2 Errata A
> + */
> + int32_t capabilities;
> };
> typedef struct AcpiNVDIMMState AcpiNVDIMMState;
>
> --
> 2.14.3
next prev parent reply other threads:[~2018-06-05 15:25 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-21 16:31 [qemu PATCH v4 0/4] support NFIT platform capabilities Ross Zwisler
2018-05-21 16:31 ` [Qemu-devel] " Ross Zwisler
2018-05-21 16:32 ` [qemu PATCH v4 1/4] nvdimm: fix typo in label-size definition Ross Zwisler
2018-05-21 16:32 ` [Qemu-devel] " Ross Zwisler
2018-05-21 16:32 ` [qemu PATCH v4 2/4] tests/.gitignore: add entry for generated file Ross Zwisler
2018-05-21 16:32 ` [Qemu-devel] " Ross Zwisler
2018-05-21 16:41 ` Eric Blake
2018-05-21 16:41 ` Eric Blake
2018-05-21 17:32 ` Philippe Mathieu-Daudé
2018-05-21 17:32 ` Philippe Mathieu-Daudé
2018-05-21 18:29 ` Eric Blake
2018-05-21 18:29 ` Eric Blake
2018-05-21 16:32 ` [qemu PATCH v4 3/4] nvdimm, acpi: support NFIT platform capabilities Ross Zwisler
2018-05-21 16:32 ` [Qemu-devel] " Ross Zwisler
2018-06-05 15:25 ` Michael S. Tsirkin [this message]
2018-06-05 15:25 ` Michael S. Tsirkin
2018-06-05 16:42 ` Ross Zwisler
2018-06-05 16:42 ` [Qemu-devel] " Ross Zwisler
2018-06-05 18:15 ` Dan Williams
2018-06-05 18:15 ` [Qemu-devel] " Dan Williams
2018-06-05 18:37 ` Michael S. Tsirkin
2018-06-05 18:37 ` [Qemu-devel] " Michael S. Tsirkin
2018-06-05 22:07 ` Ross Zwisler
2018-06-05 22:07 ` [Qemu-devel] " Ross Zwisler
2018-06-05 22:21 ` Dan Williams
2018-06-05 22:21 ` [Qemu-devel] " Dan Williams
2018-06-06 16:50 ` Ross Zwisler
2018-06-06 16:50 ` [Qemu-devel] " Ross Zwisler
2018-06-06 17:00 ` Ross Zwisler
2018-06-06 17:00 ` [Qemu-devel] " Ross Zwisler
2018-06-06 17:08 ` Ross Zwisler
2018-06-06 17:08 ` [Qemu-devel] " Ross Zwisler
2018-06-06 19:06 ` Michael S. Tsirkin
2018-06-06 19:06 ` [Qemu-devel] " Michael S. Tsirkin
2018-06-12 11:55 ` Igor Mammedov
2018-06-12 11:55 ` Igor Mammedov
2018-06-06 19:04 ` Michael S. Tsirkin
2018-06-06 19:04 ` [Qemu-devel] " Michael S. Tsirkin
2018-06-06 19:07 ` Michael S. Tsirkin
2018-06-06 19:07 ` [Qemu-devel] " Michael S. Tsirkin
2018-06-06 23:20 ` Elliott, Robert (Persistent Memory)
2018-06-06 23:20 ` [Qemu-devel] " Elliott, Robert (Persistent Memory)
2018-06-06 23:40 ` Dan Williams
2018-06-06 23:40 ` [Qemu-devel] " Dan Williams
2018-06-07 15:29 ` Michael S. Tsirkin
2018-06-07 15:29 ` [Qemu-devel] " Michael S. Tsirkin
2018-06-07 15:30 ` Michael S. Tsirkin
2018-06-07 15:30 ` [Qemu-devel] " Michael S. Tsirkin
2018-05-21 16:32 ` [qemu PATCH v4 4/4] ACPI testing: test " Ross Zwisler
2018-05-21 16:32 ` [Qemu-devel] " Ross Zwisler
2018-05-25 17:51 ` [qemu PATCH v4 0/4] support " Michael S. Tsirkin
2018-05-25 17:51 ` [Qemu-devel] " Michael S. Tsirkin
2018-05-31 22:03 ` Ross Zwisler
2018-05-31 22:03 ` [Qemu-devel] " Ross Zwisler
2018-05-29 19:54 ` Ross Zwisler
2018-05-29 19:54 ` [Qemu-devel] " Ross Zwisler
2018-06-01 5:11 ` Elliott, Robert (Persistent Memory)
2018-06-01 5:11 ` [Qemu-devel] " Elliott, Robert (Persistent Memory)
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=20180605182243-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=linux-nvdimm@lists.01.org \
--cc=qemu-devel@nongnu.org \
--cc=ross.zwisler@linux.intel.com \
--cc=stefanha@redhat.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.