[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v3 12/28] nvdimm acpi: drop the lock of fit buffer
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL v3 12/28] nvdimm acpi: drop the lock of fit buffer |
Date: |
Tue, 15 Nov 2016 21:21:33 +0200 |
From: Xiao Guangrong <address@hidden>
as there is a global lock to protect vm-exit handlers and
QMP/monitor, this lock can be dropped
Suggested-by: Igor Mammedov <address@hidden>
Signed-off-by: Xiao Guangrong <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Reviewed-by: Igor Mammedov <address@hidden>
---
include/hw/mem/nvdimm.h | 17 +++++------------
hw/acpi/nvdimm.c | 11 +----------
2 files changed, 6 insertions(+), 22 deletions(-)
diff --git a/include/hw/mem/nvdimm.h b/include/hw/mem/nvdimm.h
index 33cd421..d3ffb25 100644
--- a/include/hw/mem/nvdimm.h
+++ b/include/hw/mem/nvdimm.h
@@ -99,20 +99,13 @@ typedef struct NVDIMMClass NVDIMMClass;
#define NVDIMM_ACPI_IO_LEN 4
/*
- * The buffer, @fit, saves the FIT info for all the presented NVDIMM
- * devices which is updated after the NVDIMM device is plugged or
- * unplugged.
- *
- * Rules to use the buffer:
- * 1) the user should hold the @lock to access the buffer.
- * 2) mark @dirty whenever the buffer is updated.
- *
- * These rules preserve NVDIMM ACPI _FIT method to read incomplete
- * or obsolete fit info if fit update happens during multiple RFIT
- * calls.
+ * NvdimmFitBuffer:
+ * @fit: FIT structures for present NVDIMMs. It is updated when
+ * the NVDIMM device is plugged or unplugged.
+ * @dirty: It allows OSPM to detect change and restart read in
+ * progress if there is any.
*/
struct NvdimmFitBuffer {
- QemuMutex lock;
GArray *fit;
bool dirty;
};
diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c
index 623bb36..0fe3547 100644
--- a/hw/acpi/nvdimm.c
+++ b/hw/acpi/nvdimm.c
@@ -371,17 +371,14 @@ static GArray *nvdimm_build_device_structure(void)
static void nvdimm_init_fit_buffer(NvdimmFitBuffer *fit_buf)
{
- qemu_mutex_init(&fit_buf->lock);
fit_buf->fit = g_array_new(false, true /* clear */, 1);
}
static void nvdimm_build_fit_buffer(NvdimmFitBuffer *fit_buf)
{
- qemu_mutex_lock(&fit_buf->lock);
g_array_free(fit_buf->fit, true);
fit_buf->fit = nvdimm_build_device_structure();
fit_buf->dirty = true;
- qemu_mutex_unlock(&fit_buf->lock);
}
void nvdimm_acpi_hotplug(AcpiNVDIMMState *state)
@@ -395,11 +392,10 @@ static void nvdimm_build_nfit(AcpiNVDIMMState *state,
GArray *table_offsets,
NvdimmFitBuffer *fit_buf = &state->fit_buf;
unsigned int header;
- qemu_mutex_lock(&fit_buf->lock);
/* NVDIMM device is not plugged? */
if (!fit_buf->fit->len) {
- goto exit;
+ return;
}
acpi_add_table(table_offsets, table_data);
@@ -413,9 +409,6 @@ static void nvdimm_build_nfit(AcpiNVDIMMState *state,
GArray *table_offsets,
build_header(linker, table_data,
(void *)(table_data->data + header), "NFIT",
sizeof(NvdimmNfitHeader) + fit_buf->fit->len, 1, NULL, NULL);
-
-exit:
- qemu_mutex_unlock(&fit_buf->lock);
}
struct NvdimmDsmIn {
@@ -544,7 +537,6 @@ static void nvdimm_dsm_func_read_fit(AcpiNVDIMMState
*state, NvdimmDsmIn *in,
read_fit = (NvdimmFuncReadFITIn *)in->arg3;
le32_to_cpus(&read_fit->offset);
- qemu_mutex_lock(&fit_buf->lock);
fit = fit_buf->fit;
nvdimm_debug("Read FIT: offset %#x FIT size %#x Dirty %s.\n",
@@ -578,7 +570,6 @@ exit:
cpu_physical_memory_write(dsm_mem_addr, read_fit_out, size);
g_free(read_fit_out);
- qemu_mutex_unlock(&fit_buf->lock);
}
static void nvdimm_dsm_reserved_root(AcpiNVDIMMState *state, NvdimmDsmIn *in,
--
MST
- [Qemu-devel] [PULL v3 02/28] virtio: rename virtqueue_discard to virtqueue_unpop, (continued)
- [Qemu-devel] [PULL v3 02/28] virtio: rename virtqueue_discard to virtqueue_unpop, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 03/28] virtio: make virtqueue_alloc_element static, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 04/28] virtio-crypto: tag as not hotpluggable and migration, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 05/28] intel_iommu: fix several incorrect endianess and bit fields, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 06/28] intel_iommu: fix incorrect assert, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 07/28] acpi: fix DMAR device scope for IOAPIC, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 08/28] virtio: allow per-device-class legacy features, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 09/28] virtio-net: mark VIRTIO_NET_F_GSO as legacy, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 10/28] vhost: migration blocker only if shared log is used, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 11/28] qdev: hotplug: drop HotplugHandler.post_plug callback, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 12/28] nvdimm acpi: drop the lock of fit buffer,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL v3 13/28] pc: memhp: move nvdimm hotplug out of memory hotplug, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 14/28] pc: memhp: stop handling nvdimm hotplug in pc_dimm_unplug, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 15/28] nvdimm acpi: clean up nvdimm_build_acpi, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 16/28] docs: improve the doc of Read FIT method, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 17/28] nvdimm acpi: rename nvdimm_plugged_device_list, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 18/28] nvdimm acpi: cleanup nvdimm_build_fit, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 19/28] nvdimm acpi: rename nvdimm_acpi_hotplug, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 21/28] nvdimm acpi: fix two comments, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 20/28] nvdimm acpi: define DSM return codes, Michael S. Tsirkin, 2016/11/15
- [Qemu-devel] [PULL v3 22/28] nvdimm acpi: rename nvdimm_dsm_reserved_root, Michael S. Tsirkin, 2016/11/15