[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 27/33] nvdimm acpi: support function 0
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH v6 27/33] nvdimm acpi: support function 0 |
Date: |
Fri, 30 Oct 2015 10:14:36 +0000 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
On Fri, Oct 30, 2015 at 01:56:21PM +0800, Xiao Guangrong wrote:
> static uint64_t
> nvdimm_dsm_read(void *opaque, hwaddr addr, unsigned size)
> {
> - return 0;
> + AcpiNVDIMMState *state = opaque;
> + MemoryRegion *dsm_ram_mr = &state->ram_mr;
> + NvdimmDsmIn *in;
> + GArray *out;
> + void *dsm_ram_addr;
> + uint32_t buf_size;
> +
> + assert(memory_region_size(dsm_ram_mr) >= sizeof(NvdimmDsmIn));
> + dsm_ram_addr = memory_region_get_ram_ptr(dsm_ram_mr);
> +
> + /*
> + * The DSM memory is mapped to guest address space so an evil guest
> + * can change its content while we are doing DSM emulation. Avoid
> + * this by copying DSM memory to QEMU local memory.
> + */
> + in = g_malloc(memory_region_size(dsm_ram_mr));
> + memcpy(in, dsm_ram_addr, memory_region_size(dsm_ram_mr));
> +
> + le32_to_cpus(&in->revision);
> + le32_to_cpus(&in->function);
> + le32_to_cpus(&in->handle);
> +
> + nvdimm_debug("Revision %#x Handler %#x Function %#x.\n", in->revision,
> + in->handle, in->function);
> +
> + out = g_array_new(false, true /* clear */, 1);
> +
> + if (in->revision != 0x1 /* Current we support DSM Spec Rev1. */) {
> + nvdimm_debug("Revision %#x is not supported, expect %#x.\n",
> + in->revision, 0x1);
> + nvdimm_dsm_write_status(out, NVDIMM_DSM_STATUS_NOT_SUPPORTED);
> + goto exit;
> + }
> +
> + /* Handle 0 is reserved for NVDIMM Root Device. */
> + if (!in->handle) {
> + nvdimm_dsm_root(in, out);
> + goto exit;
> + }
> +
> + nvdimm_dsm_device(in, out);
> +
> +exit:
> + /* Write output result to dsm memory. */
> + memcpy(dsm_ram_addr, out->data, out->len);
> + memory_region_set_dirty(dsm_ram_mr, 0, out->len);
If you respin this series, please add this before the memcpy out:
assert(out->len <= memory_region_size(dsm_ram_mr))
That way we can catch situations where too much output data was
generated by mistake.
signature.asc
Description: PGP signature
- [Qemu-devel] [PATCH v6 17/33] dimm: abstract dimm device from pc-dimm, (continued)
- [Qemu-devel] [PATCH v6 17/33] dimm: abstract dimm device from pc-dimm, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 20/33] dimm: introduce realize callback, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 22/33] docs: add NVDIMM ACPI documentation, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 21/33] nvdimm: implement NVDIMM device abstract, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 26/33] nvdimm acpi: save arg3 for NVDIMM device _DSM method, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 23/33] nvdimm acpi: init the resource used by NVDIMM ACPI, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 25/33] nvdimm acpi: build ACPI nvdimm devices, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 24/33] nvdimm acpi: build ACPI NFIT table, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 29/33] nvdimm acpi: support Get Namespace Label Data function, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 27/33] nvdimm acpi: support function 0, Xiao Guangrong, 2015/10/30
- Re: [Qemu-devel] [PATCH v6 27/33] nvdimm acpi: support function 0,
Stefan Hajnoczi <=
- [Qemu-devel] [PATCH v6 28/33] nvdimm acpi: support Get Namespace Label Size function, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 30/33] nvdimm acpi: support Set Namespace Label Data function, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 31/33] nvdimm: allow using whole backend memory as pmem, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 32/33] nvdimm acpi: support _FIT method, Xiao Guangrong, 2015/10/30
- [Qemu-devel] [PATCH v6 33/33] nvdimm: add maintain info, Xiao Guangrong, 2015/10/30
- Re: [Qemu-devel] [PATCH v6 00/33] implement vNVDIMM, Stefan Hajnoczi, 2015/10/30