From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489968851169862.1156240770848; Sun, 19 Mar 2017 17:14:11 -0700 (PDT) Received: from localhost ([::1]:58633 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkxd-000538-TE for importer@patchew.org; Sun, 19 Mar 2017 20:14:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58150) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwc-00051M-Ab for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwZ-0004uU-53 for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:06 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwY-0004uJ-Rj for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:03 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:01 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:12:59 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968782; x=1521504782; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=69cbX8lJFRJB4SPiiPiTLKWbIG46rS+hRTXIg1yRfys=; b=vITrTc5RQoNNGN2757KUZ0XtVjx7Zc9HOIcGP6fTG5q0RCIq/LMhq7/F /kmog+xYr6v+Oo9qPv3TeTWA9FJakw==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799108" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:40 +0800 Message-Id: <20170320001249.25521-2-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 01/10] nvdimm xen: disable label support on Xen X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Xiao Guangrong , "Michael S. Tsirkin" , Igor Mammedov , Konrad Rzeszutek Wilk , Dan Williams Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If xen_enabled(), memory_region_get_ram_ptr() always returns NULL and nvdimm_realize() cannot get the correct pointer to the label area. This commit disables the label support for Xen accelerator to workaround this issue. Signed-off-by: Haozhong Zhang --- Cc: "Michael S. Tsirkin" Cc: Igor Mammedov Cc: Xiao Guangrong --- hw/mem/nvdimm.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c index db896b0bb6..0d3e17e94c 100644 --- a/hw/mem/nvdimm.c +++ b/hw/mem/nvdimm.c @@ -87,7 +87,11 @@ static void nvdimm_realize(PCDIMMDevice *dimm, Error **e= rrp) align =3D memory_region_get_alignment(mr); =20 pmem_size =3D size - nvdimm->label_size; - nvdimm->label_data =3D memory_region_get_ram_ptr(mr) + pmem_size; + /* + * TODO: explain the reason + */ + if (nvdimm->label_size) + nvdimm->label_data =3D memory_region_get_ram_ptr(mr) + pmem_size; pmem_size =3D QEMU_ALIGN_DOWN(pmem_size, align); =20 if (size <=3D nvdimm->label_size || !pmem_size) { --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 14899688708411002.2542403177735; Sun, 19 Mar 2017 17:14:30 -0700 (PDT) Received: from localhost ([::1]:58637 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkxx-0005HG-HQ for importer@patchew.org; Sun, 19 Mar 2017 20:14:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58151) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwc-00051N-Ae for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwZ-0004ub-QA for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:06 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwZ-0004uJ-Hg for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:03 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:03 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:01 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968783; x=1521504783; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=44VOTdO1rDAoBeYEFIdcstehS/SeMO3BLKTpSrIQG+Y=; b=C8FjJkbIxHn72qIHkU5bf8Od2V9bmWy8YEXJscvyTqDfO43wi+oXEYR9 yEqLXNxjfTNUkUna9slmzXz3SxUWEA==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799142" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:41 +0800 Message-Id: <20170320001249.25521-3-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 02/10] xen-hvm: initialize DM ACPI X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Stefano Stabellini , xen-devel@lists.xenproject.org, Anthony Perard , Konrad Rzeszutek Wilk , Dan Williams Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Probe the base address and the length of guest ACPI buffer reserved for copying ACPI from QEMU. Signed-off-by: Haozhong Zhang --- Cc: Stefano Stabellini Cc: Anthony Perard Cc: xen-devel@lists.xenproject.org --- xen-hvm.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 66 insertions(+) diff --git a/xen-hvm.c b/xen-hvm.c index 5043beb98f..c42c958a0a 100644 --- a/xen-hvm.c +++ b/xen-hvm.c @@ -19,6 +19,7 @@ #include "qmp-commands.h" =20 #include "sysemu/char.h" +#include "qemu/cutils.h" #include "qemu/error-report.h" #include "qemu/range.h" #include "sysemu/xen-mapcache.h" @@ -87,6 +88,18 @@ typedef struct XenPhysmap { QLIST_ENTRY(XenPhysmap) list; } XenPhysmap; =20 +#define HVM_XS_DM_ACPI_ROOT "/hvmloader/dm-acpi" +#define HVM_XS_DM_ACPI_ADDRESS HVM_XS_DM_ACPI_ROOT"/address" +#define HVM_XS_DM_ACPI_LENGTH HVM_XS_DM_ACPI_ROOT"/length" + +typedef struct XenAcpiBuf { + ram_addr_t base; + ram_addr_t length; + ram_addr_t used; +} XenAcpiBuf; + +static XenAcpiBuf *dm_acpi_buf; + typedef struct XenIOState { ioservid_t ioservid; shared_iopage_t *shared_page; @@ -111,6 +124,8 @@ typedef struct XenIOState { hwaddr free_phys_offset; const XenPhysmap *log_for_dirtybit; =20 + XenAcpiBuf dm_acpi_buf; + Notifier exit; Notifier suspend; Notifier wakeup; @@ -1205,6 +1220,52 @@ static void xen_wakeup_notifier(Notifier *notifier, = void *data) xc_set_hvm_param(xen_xc, xen_domid, HVM_PARAM_ACPI_S_STATE, 0); } =20 +static int dm_acpi_buf_init(XenIOState *state) +{ + char path[80], *value; + unsigned int len; + + dm_acpi_buf =3D &state->dm_acpi_buf; + + snprintf(path, sizeof(path), + "/local/domain/%d"HVM_XS_DM_ACPI_ADDRESS, xen_domid); + value =3D xs_read(state->xenstore, 0, path, &len); + if (!value) { + return -EINVAL; + } + if (qemu_strtoul(value, NULL, 16, &dm_acpi_buf->base)) { + return -EINVAL; + } + + snprintf(path, sizeof(path), + "/local/domain/%d"HVM_XS_DM_ACPI_LENGTH, xen_domid); + value =3D xs_read(state->xenstore, 0, path, &len); + if (!value) { + return -EINVAL; + } + if (qemu_strtoul(value, NULL, 16, &dm_acpi_buf->length)) { + return -EINVAL; + } + + dm_acpi_buf->used =3D 0; + + return 0; +} + +static int xen_dm_acpi_required(PCMachineState *pcms) +{ + return 0; +} + +static int xen_dm_acpi_init(PCMachineState *pcms, XenIOState *state) +{ + if (!xen_dm_acpi_required(pcms)) { + return 0; + } + + return dm_acpi_buf_init(state); +} + void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ram_memory) { int i, rc; @@ -1344,6 +1405,11 @@ void xen_hvm_init(PCMachineState *pcms, MemoryRegion= **ram_memory) /* Disable ACPI build because Xen handles it */ pcms->acpi_build_enabled =3D false; =20 + if (xen_dm_acpi_init(pcms, state)) { + error_report("failed to initialize xen ACPI"); + goto err; + } + return; =20 err: --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489968982229307.8347940116249; Sun, 19 Mar 2017 17:16:22 -0700 (PDT) Received: from localhost ([::1]:58649 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkzk-00073i-SP for importer@patchew.org; Sun, 19 Mar 2017 20:16:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58171) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwd-00051m-DB for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwc-0004up-1y for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:07 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwb-0004uJ-O0 for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:05 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:05 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:03 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968785; x=1521504785; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=ZkG9XEfNFConRl5HDkM+Yp9IINl4yhwE99RfjmrL4FU=; b=lXdkfPwJyTrFEYwc80V2PIczebjueOUdAOtqHo8P8mpYMoFDEWn0AwRQ 8IBBKIAvmOrQx7zskM27u2YW+Nm6GQ==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799151" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:42 +0800 Message-Id: <20170320001249.25521-4-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 03/10] xen-hvm: support copying ACPI to guest memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Stefano Stabellini , xen-devel@lists.xenproject.org, Anthony Perard , Konrad Rzeszutek Wilk , Dan Williams Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Haozhong Zhang --- Cc: Stefano Stabellini Cc: Anthony Perard Cc: xen-devel@lists.xenproject.org --- include/hw/xen/xen.h | 18 ++++++++ xen-hvm-stub.c | 6 +++ xen-hvm.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 137 insertions(+) diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h index 09c2ce5170..d67cdd8c7d 100644 --- a/include/hw/xen/xen.h +++ b/include/hw/xen/xen.h @@ -47,4 +47,22 @@ void xen_modified_memory(ram_addr_t start, ram_addr_t le= ngth); =20 void xen_register_framebuffer(struct MemoryRegion *mr); =20 +/* + * Copy an ACPI blob from QEMU to HVM guest. + * + * Parameters: + * name: a unique name of the data blob; for XEN_DM_ACPI_BLOB_TYPE_NS= DEV, + * name should be less then 4 characters + * blob: the ACPI blob to be copied + * length: the length in bytes of the ACPI blob + * type: the type of content in the ACPI blob + * + * Return: + * 0 on success; a non-zero error code on failures. + */ +#define XEN_DM_ACPI_BLOB_TYPE_TABLE 0 /* ACPI table */ +#define XEN_DM_ACPI_BLOB_TYPE_NSDEV 1 /* AML of ACPI namespace device */ +int xen_acpi_copy_to_guest(const char *name, const void *blob, size_t leng= th, + int type); + #endif /* QEMU_HW_XEN_H */ diff --git a/xen-hvm-stub.c b/xen-hvm-stub.c index c5003251cb..a6c018505c 100644 --- a/xen-hvm-stub.c +++ b/xen-hvm-stub.c @@ -61,3 +61,9 @@ void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ra= m_memory) void qmp_xen_set_global_dirty_log(bool enable, Error **errp) { } + +int xen_acpi_copy_to_guest(const char *name, const void *blob, size_t leng= th, + int type) +{ + return -1; +} diff --git a/xen-hvm.c b/xen-hvm.c index c42c958a0a..4ddc47e5f1 100644 --- a/xen-hvm.c +++ b/xen-hvm.c @@ -1252,6 +1252,20 @@ static int dm_acpi_buf_init(XenIOState *state) return 0; } =20 +static ram_addr_t dm_acpi_buf_alloc(size_t length) +{ + ram_addr_t addr; + + if (dm_acpi_buf->length - dm_acpi_buf->used < length) { + return 0; + } + + addr =3D dm_acpi_buf->base + dm_acpi_buf->used; + dm_acpi_buf->used +=3D length; + + return addr; +} + static int xen_dm_acpi_required(PCMachineState *pcms) { return 0; @@ -1486,3 +1500,102 @@ void qmp_xen_set_global_dirty_log(bool enable, Erro= r **errp) memory_global_dirty_log_stop(); } } + +static int xs_write_dm_acpi_blob_entry(const char *name, + const char *entry, const char *valu= e) +{ + XenIOState *state =3D container_of(dm_acpi_buf, XenIOState, dm_acpi_bu= f); + char path[80]; + + snprintf(path, sizeof(path), + "/local/domain/%d"HVM_XS_DM_ACPI_ROOT"/%s/%s", + xen_domid, name, entry); + if (!xs_write(state->xenstore, 0, path, value, strlen(value))) { + return -EIO; + } + + return 0; +} + +static size_t xen_memcpy_to_guest(ram_addr_t gpa, + const void *buf, size_t length) +{ + size_t copied =3D 0, size; + ram_addr_t s, e, offset, cur =3D gpa; + xen_pfn_t cur_pfn; + void *page; + + if (!buf || !length) { + return 0; + } + + s =3D gpa & TARGET_PAGE_MASK; + e =3D gpa + length; + if (e < s) { + return 0; + } + + while (cur < e) { + cur_pfn =3D cur >> TARGET_PAGE_BITS; + offset =3D cur - (cur_pfn << TARGET_PAGE_BITS); + size =3D (length >=3D TARGET_PAGE_SIZE - offset) ? + TARGET_PAGE_SIZE - offset : length; + + page =3D xenforeignmemory_map(xen_fmem, xen_domid, PROT_READ | PRO= T_WRITE, + 1, &cur_pfn, NULL); + if (!page) { + break; + } + + memcpy(page + offset, buf, size); + xenforeignmemory_unmap(xen_fmem, page, 1); + + copied +=3D size; + buf +=3D size; + cur +=3D size; + length -=3D size; + } + + return copied; +} + +int xen_acpi_copy_to_guest(const char *name, const void *blob, size_t leng= th, + int type) +{ + char value[21]; + ram_addr_t buf_addr; + int rc; + + if (type !=3D XEN_DM_ACPI_BLOB_TYPE_TABLE && + type !=3D XEN_DM_ACPI_BLOB_TYPE_NSDEV) { + return -EINVAL; + } + + buf_addr =3D dm_acpi_buf_alloc(length); + if (!buf_addr) { + return -ENOMEM; + } + if (xen_memcpy_to_guest(buf_addr, blob, length) !=3D length) { + return -EIO; + } + + snprintf(value, sizeof(value), "%d", type); + rc =3D xs_write_dm_acpi_blob_entry(name, "type", value); + if (rc) { + return rc; + } + + snprintf(value, sizeof(value), "%"PRIu64, buf_addr - dm_acpi_buf->base= ); + rc =3D xs_write_dm_acpi_blob_entry(name, "offset", value); + if (rc) { + return rc; + } + + snprintf(value, sizeof(value), "%"PRIu64, length); + rc =3D xs_write_dm_acpi_blob_entry(name, "length", value); + if (rc) { + return rc; + } + + return 0; +} --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489968997112152.91464544474002; Sun, 19 Mar 2017 17:16:37 -0700 (PDT) Received: from localhost ([::1]:58652 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkzz-0007JJ-Td for importer@patchew.org; Sun, 19 Mar 2017 20:16:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58185) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwf-00052S-4W for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwe-0004vF-7L for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:09 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwd-0004uJ-Ty for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:08 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:07 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:06 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968787; x=1521504787; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=dmuO9j9h1jpg7c3kTv53TZ/X+g+Nf0pFM0ZIicdT7Ak=; b=sVA2hq/PMw7VQQfNl8DZAOac8XxekGVLg3ZAy7pAViwuoL/MQGp1taFv FatZIsNYEmovmp0FK3M/VEcbImC80A==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799163" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:43 +0800 Message-Id: <20170320001249.25521-5-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 04/10] nvdimm acpi: do not use fw_cfg on Xen X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Xiao Guangrong , "Michael S. Tsirkin" , Igor Mammedov , Konrad Rzeszutek Wilk , Dan Williams Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Xen relies on QEMU to build guest ACPI for NVDIMM. However, no fw_cfg is created when QEMU is used as Xen device model, so QEMU should avoid using fw_cfg on Xen. Signed-off-by: Haozhong Zhang --- Cc: "Michael S. Tsirkin" Cc: Igor Mammedov Cc: Xiao Guangrong --- hw/acpi/aml-build.c | 9 ++++++--- hw/acpi/nvdimm.c | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c index c6f2032dec..3925f261ad 100644 --- a/hw/acpi/aml-build.c +++ b/hw/acpi/aml-build.c @@ -1530,9 +1530,12 @@ build_header(BIOSLinker *linker, GArray *table_data, h->oem_revision =3D cpu_to_le32(1); memcpy(h->asl_compiler_id, ACPI_BUILD_APPNAME4, 4); h->asl_compiler_revision =3D cpu_to_le32(1); - /* Checksum to be filled in by Guest linker */ - bios_linker_loader_add_checksum(linker, ACPI_BUILD_TABLE_FILE, - tbl_offset, len, checksum_offset); + /* No linker when used as Xen device model */ + if (linker) { + /* Checksum to be filled in by Guest linker */ + bios_linker_loader_add_checksum(linker, ACPI_BUILD_TABLE_FILE, + tbl_offset, len, checksum_offset); + } } =20 void *acpi_data_push(GArray *table_data, unsigned size) diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c index 8e7d6ec034..bb45452e70 100644 --- a/hw/acpi/nvdimm.c +++ b/hw/acpi/nvdimm.c @@ -889,8 +889,9 @@ void nvdimm_init_acpi_state(AcpiNVDIMMState *state, Mem= oryRegion *io, =20 state->dsm_mem =3D g_array_new(false, true /* clear */, 1); acpi_data_push(state->dsm_mem, sizeof(NvdimmDsmIn)); - fw_cfg_add_file(fw_cfg, NVDIMM_DSM_MEM_FILE, state->dsm_mem->data, - state->dsm_mem->len); + if (fw_cfg) + fw_cfg_add_file(fw_cfg, NVDIMM_DSM_MEM_FILE, state->dsm_mem->data, + state->dsm_mem->len); =20 nvdimm_init_fit_buffer(&state->fit_buf); } --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489968979569272.91211188969146; Sun, 19 Mar 2017 17:16:19 -0700 (PDT) Received: from localhost ([::1]:58648 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkzi-00071R-C4 for importer@patchew.org; Sun, 19 Mar 2017 20:16:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58198) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwh-00054W-9N for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwg-0004ve-Dw for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:11 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwg-0004uJ-4J for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:10 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:09 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968790; x=1521504790; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=PtVXEjq6aVZfUFaAZObS/bL9Eyk5tt1YIrB8MbfSiv8=; b=Y4caV9cgtLvEsI1fhg/7FT0YCO4raPPzSdE83TiezkhUoXmrbIRX2bWn BhEJPmR1oWLHfGqMQqd27RTRxO/qEw==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799172" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:44 +0800 Message-Id: <20170320001249.25521-6-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 05/10] nvdimm acpi: copy NFIT to Xen guest X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Xiao Guangrong , "Michael S. Tsirkin" , Igor Mammedov , Konrad Rzeszutek Wilk , Dan Williams Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Xen relies on QEMU to build the guest NFIT. Signed-off-by: Haozhong Zhang --- Cc: "Michael S. Tsirkin" Cc: Igor Mammedov Cc: Xiao Guangrong --- hw/acpi/nvdimm.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c index bb45452e70..2509561729 100644 --- a/hw/acpi/nvdimm.c +++ b/hw/acpi/nvdimm.c @@ -32,6 +32,7 @@ #include "hw/acpi/bios-linker-loader.h" #include "hw/nvram/fw_cfg.h" #include "hw/mem/nvdimm.h" +#include "hw/xen/xen.h" =20 static int nvdimm_device_list(Object *obj, void *opaque) { @@ -402,6 +403,12 @@ 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, NU= LL); + + if (xen_enabled()) { + xen_acpi_copy_to_guest("NFIT", table_data->data + header, + sizeof(NvdimmNfitHeader) + fit_buf->fit->le= n, + XEN_DM_ACPI_BLOB_TYPE_TABLE); + } } =20 #define NVDIMM_DSM_MEMORY_SIZE 4096 --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489969106448333.3077318632171; Sun, 19 Mar 2017 17:18:26 -0700 (PDT) Received: from localhost ([::1]:58657 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpl1l-0000Ea-3t for importer@patchew.org; Sun, 19 Mar 2017 20:18:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58230) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwl-000598-T3 for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwi-0004wT-Nd for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:15 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwi-0004uJ-Fv for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:12 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:12 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:10 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968792; x=1521504792; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=LV922hLxxKprVQNCvZFxFs3j57neoFTLdDo+RxT8VnM=; b=bJx23ZXMtywoBa9fzAL9ss0JyxU978Yhjoww/nflHcZKP6Y2/g9A6gC1 NkobD93NJIZifM9lmkWHly5SIZzsNQ==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799183" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:45 +0800 Message-Id: <20170320001249.25521-7-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 06/10] nvdimm acpi: build and copy NVDIMM namespace devices to guest on Xen X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Xiao Guangrong , "Michael S. Tsirkin" , Igor Mammedov , Konrad Rzeszutek Wilk , Dan Williams Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Build and copy NVDIMM namespace devices to guest when QEMU is used as Xen device model. Only the body of each AML device is built and copied. Xen hvmloader will complete other parts of namespace devices and put in SSDT. Signed-off-by: Haozhong Zhang --- Cc: "Michael S. Tsirkin" Cc: Igor Mammedov Cc: Xiao Guangrong --- hw/acpi/nvdimm.c | 55 ++++++++++++++++++++++++++++++++++++++--------------= --- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c index 2509561729..1e077eca25 100644 --- a/hw/acpi/nvdimm.c +++ b/hw/acpi/nvdimm.c @@ -1222,22 +1222,8 @@ static void nvdimm_build_nvdimm_devices(Aml *root_de= v, uint32_t ram_slots) } } =20 -static void nvdimm_build_ssdt(GArray *table_offsets, GArray *table_data, - BIOSLinker *linker, GArray *dsm_dma_arrea, - uint32_t ram_slots) +static void nvdimm_build_devices(Aml *dev, uint32_t ram_slots) { - Aml *ssdt, *sb_scope, *dev; - int mem_addr_offset, nvdimm_ssdt; - - acpi_add_table(table_offsets, table_data); - - ssdt =3D init_aml_allocator(); - acpi_data_push(ssdt->buf, sizeof(AcpiTableHeader)); - - sb_scope =3D aml_scope("\\_SB"); - - dev =3D aml_device("NVDR"); - /* * ACPI 6.0: 9.20 NVDIMM Devices: * @@ -1258,6 +1244,25 @@ static void nvdimm_build_ssdt(GArray *table_offsets,= GArray *table_data, nvdimm_build_fit(dev); =20 nvdimm_build_nvdimm_devices(dev, ram_slots); +} + +static void nvdimm_build_ssdt(GArray *table_offsets, GArray *table_data, + BIOSLinker *linker, GArray *dsm_dma_arrea, + uint32_t ram_slots) +{ + Aml *ssdt, *sb_scope, *dev; + int mem_addr_offset, nvdimm_ssdt; + + acpi_add_table(table_offsets, table_data); + + ssdt =3D init_aml_allocator(); + acpi_data_push(ssdt->buf, sizeof(AcpiTableHeader)); + + sb_scope =3D aml_scope("\\_SB"); + + dev =3D aml_device("NVDR"); + + nvdimm_build_devices(dev, ram_slots); =20 aml_append(sb_scope, dev); aml_append(ssdt, sb_scope); @@ -1281,6 +1286,18 @@ static void nvdimm_build_ssdt(GArray *table_offsets,= GArray *table_data, free_aml_allocator(); } =20 +static void nvdimm_build_xen_nvdimm_devices(uint32_t ram_slots) +{ + Aml *dev =3D init_aml_allocator(); + + nvdimm_build_devices(dev, ram_slots); + build_append_named_dword(dev->buf, NVDIMM_ACPI_MEM_ADDR); + xen_acpi_copy_to_guest("NVDR", dev->buf->data, dev->buf->len, + XEN_DM_ACPI_BLOB_TYPE_NSDEV); + + free_aml_allocator(); +} + void nvdimm_build_acpi(GArray *table_offsets, GArray *table_data, BIOSLinker *linker, AcpiNVDIMMState *state, uint32_t ram_slots) @@ -1292,8 +1309,12 @@ void nvdimm_build_acpi(GArray *table_offsets, GArray= *table_data, return; } =20 - nvdimm_build_ssdt(table_offsets, table_data, linker, state->dsm_mem, - ram_slots); + if (!xen_enabled()) { + nvdimm_build_ssdt(table_offsets, table_data, linker, state->dsm_me= m, + ram_slots); + } else { + nvdimm_build_xen_nvdimm_devices(ram_slots); + } =20 device_list =3D nvdimm_get_device_list(); /* no NVDIMM device is plugged. */ --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489969108202970.9660181959406; Sun, 19 Mar 2017 17:18:28 -0700 (PDT) Received: from localhost ([::1]:58659 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpl1m-0000GF-Vb for importer@patchew.org; Sun, 19 Mar 2017 20:18:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58250) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwm-00059x-Tu for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwl-0004ws-Jn for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:16 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwl-0004uJ-9P for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:15 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:14 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:12 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968795; x=1521504795; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=82LTZg/5VOT6Lr7nPZUOG/GPqCm/6q2YeB8XNrANJwU=; b=TRQ/dZnBOIz0RN5kJ7eZsOcGz5XPbo642H3pBqP8+dEDEmn9VzyIcUYj N2AmcIRI24eL1ooyNNyJyIfklOkymA==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799192" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:46 +0800 Message-Id: <20170320001249.25521-8-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 07/10] xen-hvm: initiate building DM ACPI on i386 machine X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Stefano Stabellini , Eduardo Habkost , "Michael S. Tsirkin" , xen-devel@lists.xenproject.org, Paolo Bonzini , Anthony Perard , Konrad Rzeszutek Wilk , Dan Williams , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If QEMU is running as Xen device model and Xen needs ACPI (e.g. NFIT) from QEMU, initiate building DM ACPI. Signed-off-by: Haozhong Zhang --- Cc: "Michael S. Tsirkin" Cc: Paolo Bonzini Cc: Richard Henderson Cc: Eduardo Habkost Cc: Stefano Stabellini Cc: Anthony Perard Cc: xen-devel@lists.xenproject.org --- hw/i386/pc.c | 16 ++++++++++------ include/hw/xen/xen.h | 2 ++ xen-hvm-stub.c | 4 ++++ xen-hvm.c | 23 ++++++++++++++++++++++- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index d24388e05f..6b76720c35 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1256,12 +1256,16 @@ void pc_machine_done(Notifier *notifier, void *data) } } =20 - acpi_setup(); - if (pcms->fw_cfg) { - pc_build_smbios(pcms); - pc_build_feature_control_file(pcms); - /* update FW_CFG_NB_CPUS to account for -device added CPUs */ - fw_cfg_modify_i16(pcms->fw_cfg, FW_CFG_NB_CPUS, pcms->boot_cpus); + if (!xen_enabled()) { + acpi_setup(); + if (pcms->fw_cfg) { + pc_build_smbios(pcms); + pc_build_feature_control_file(pcms); + /* update FW_CFG_NB_CPUS to account for -device added CPUs */ + fw_cfg_modify_i16(pcms->fw_cfg, FW_CFG_NB_CPUS, pcms->boot_cpu= s); + } + } else { + xen_dm_acpi_setup(pcms); } =20 if (pcms->apic_id_limit > 255) { diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h index d67cdd8c7d..2e2f4bf60d 100644 --- a/include/hw/xen/xen.h +++ b/include/hw/xen/xen.h @@ -65,4 +65,6 @@ void xen_register_framebuffer(struct MemoryRegion *mr); int xen_acpi_copy_to_guest(const char *name, const void *blob, size_t leng= th, int type); =20 +void xen_dm_acpi_setup(PCMachineState *pcms); + #endif /* QEMU_HW_XEN_H */ diff --git a/xen-hvm-stub.c b/xen-hvm-stub.c index a6c018505c..1231faabda 100644 --- a/xen-hvm-stub.c +++ b/xen-hvm-stub.c @@ -67,3 +67,7 @@ int xen_acpi_copy_to_guest(const char *name, const void *= blob, size_t length, { return -1; } + +void xen_dm_acpi_setup(PCMachineState *pcms) +{ +} diff --git a/xen-hvm.c b/xen-hvm.c index 4ddc47e5f1..0c36dd11da 100644 --- a/xen-hvm.c +++ b/xen-hvm.c @@ -1268,7 +1268,7 @@ static ram_addr_t dm_acpi_buf_alloc(size_t length) =20 static int xen_dm_acpi_required(PCMachineState *pcms) { - return 0; + return pcms->acpi_nvdimm_state.is_enabled; } =20 static int xen_dm_acpi_init(PCMachineState *pcms, XenIOState *state) @@ -1280,6 +1280,27 @@ static int xen_dm_acpi_init(PCMachineState *pcms, Xe= nIOState *state) return dm_acpi_buf_init(state); } =20 +static void xen_dm_acpi_nvdimm_setup(PCMachineState *pcms) +{ + GArray *table_offsets =3D g_array_new(false, true /* clear */, + sizeof(uint32_t)); + GArray *table_data =3D g_array_new(false, true /* clear */, 1); + + nvdimm_build_acpi(table_offsets, table_data, + NULL, &pcms->acpi_nvdimm_state, + MACHINE(pcms)->ram_slots); + + g_array_free(table_offsets, true); + g_array_free(table_data, true); +} + +void xen_dm_acpi_setup(PCMachineState *pcms) +{ + if (pcms->acpi_nvdimm_state.is_enabled) { + xen_dm_acpi_nvdimm_setup(pcms); + } +} + void xen_hvm_init(PCMachineState *pcms, MemoryRegion **ram_memory) { int i, rc; --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489968868195843.693601327061; Sun, 19 Mar 2017 17:14:28 -0700 (PDT) Received: from localhost ([::1]:58634 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkxu-0005Er-8o for importer@patchew.org; Sun, 19 Mar 2017 20:14:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58270) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwp-0005CB-Ad for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwn-0004xg-Si for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:19 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwn-0004uJ-GD for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:17 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:17 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:15 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968797; x=1521504797; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=rmEggL8vJa7ZDBS4MRqbDpIbryfmCDV6TheDSCuuqGo=; b=ss8a5AaVwhyF/vkeHZmvJTIGxIRaVUlHX84IdRhQaYCBfsBiaq2snjQs XViIH+wfhiZ2SK7MMR14vb+wybzyuQ==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799198" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:47 +0800 Message-Id: <20170320001249.25521-9-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 08/10] hostmem: add a host memory backend for Xen X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Eduardo Habkost , "Michael S. Tsirkin" , Igor Mammedov , Konrad Rzeszutek Wilk , Dan Williams Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Some virtual devices (e.g. NVDIMM) use the host memory backend to map its backend resources to the guest. When those devices are used on Xen, the mapping has to be managed out of QEMU. In order to reuse other parts of the implementation of those devices, we introduce a host memory backend for Xen (memory-backend-xen) which is mostly a placeholder that only creates an empty memory region and does not actually allocate and map the resource. Following is an example of a vNVDIMM device backed by a host pmem namespace, -object memory-backend-xen,id=3Dmem1,mem-path=3D/dev/pmem0,size=3D4G -device nvdimm,id=3Dnvdimm1,memdev=3Dmem1 Signed-off-by: Haozhong Zhang --- Cc: Eduardo Habkost Cc: Igor Mammedov Cc: "Michael S. Tsirkin" --- backends/Makefile.objs | 1 + backends/hostmem-xen.c | 121 +++++++++++++++++++++++++++++++++++++++++++++= ++++ backends/hostmem.c | 8 ++++ hw/mem/pc-dimm.c | 5 +- 4 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 backends/hostmem-xen.c diff --git a/backends/Makefile.objs b/backends/Makefile.objs index 0e0f1567b2..11dcaa4d0e 100644 --- a/backends/Makefile.objs +++ b/backends/Makefile.objs @@ -9,6 +9,7 @@ common-obj-$(CONFIG_TPM) +=3D tpm.o =20 common-obj-y +=3D hostmem.o hostmem-ram.o common-obj-$(CONFIG_LINUX) +=3D hostmem-file.o +common-obj-${CONFIG_XEN_BACKEND} +=3D hostmem-xen.o =20 common-obj-y +=3D cryptodev.o common-obj-y +=3D cryptodev-builtin.o diff --git a/backends/hostmem-xen.c b/backends/hostmem-xen.c new file mode 100644 index 0000000000..b1b446766d --- /dev/null +++ b/backends/hostmem-xen.c @@ -0,0 +1,121 @@ +/* + * QEMU Host Memory Backend for Xen + * + * Copyright(C) 2017 Intel Corporation. + * + * Author: + * Haozhong Zhang + * + * 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 + */ + +#include "qemu/osdep.h" +#include "qemu/mmap-alloc.h" +#include "sysemu/hostmem.h" +#include "qapi/error.h" +#include "qom/object_interfaces.h" + + +#define TYPE_MEMORY_BACKEND_XEN "memory-backend-xen" + +#define MEMORY_BACKEND_XEN(obj) \ + OBJECT_CHECK(HostMemoryBackendXen, (obj), TYPE_MEMORY_BACKEND_XEN) + +typedef struct HostMemoryBackendXen HostMemoryBackendXen; + +struct HostMemoryBackendXen { + HostMemoryBackend parent_obj; + + char *mem_path; +}; + +static void xen_backend_memory_alloc(HostMemoryBackend *backend, Error **e= rrp) +{ + HostMemoryBackendXen *db =3D MEMORY_BACKEND_XEN(backend); + int fd; + size_t page_size; + + if (!backend->size) { + error_setg(errp, "can't create backend with size 0"); + return; + } + memory_region_init(&backend->mr, + OBJECT(backend), db->mem_path, backend->size); + + fd =3D open(db->mem_path, O_RDONLY); + if (!fd) { + error_setg(errp, "can't open file %s, err %d", db->mem_path, errno= ); + return; + } + page_size =3D qemu_fd_getpagesize(fd); + backend->mr.align =3D MAX(page_size, QEMU_VMALLOC_ALIGN); + close(fd); +} + +static void xen_backend_class_init(ObjectClass *oc, void *data) +{ + HostMemoryBackendClass *bc =3D MEMORY_BACKEND_CLASS(oc); + + bc->alloc =3D xen_backend_memory_alloc; +} + +static char *get_mem_path(Object *o, Error **errp) +{ + HostMemoryBackendXen *db =3D MEMORY_BACKEND_XEN(o); + + return g_strdup(db->mem_path); +} + +static void set_mem_path(Object *o, const char *str, Error **errp) +{ + HostMemoryBackend *backend =3D MEMORY_BACKEND(o); + HostMemoryBackendXen *db =3D MEMORY_BACKEND_XEN(o); + + if (memory_region_size(&backend->mr)) { + error_setg(errp, "cannot change property value"); + return; + } + g_free(db->mem_path); + db->mem_path =3D g_strdup(str); +} + +static void +xen_backend_instance_init(Object *o) +{ + object_property_add_str(o, "mem-path", get_mem_path, + set_mem_path, NULL); +} + +static void xen_backend_instance_finalize(Object *o) +{ + HostMemoryBackendXen *db =3D MEMORY_BACKEND_XEN(o); + + g_free(db->mem_path); +} + +static const TypeInfo xen_backend_info =3D { + .name =3D TYPE_MEMORY_BACKEND_XEN, + .parent =3D TYPE_MEMORY_BACKEND, + .class_init =3D xen_backend_class_init, + .instance_init =3D xen_backend_instance_init, + .instance_finalize =3D xen_backend_instance_finalize, + .instance_size =3D sizeof(HostMemoryBackendXen), +}; + +static void register_types(void) +{ + type_register_static(&xen_backend_info); +} + +type_init(register_types); diff --git a/backends/hostmem.c b/backends/hostmem.c index 7f5de70609..ee5e59c133 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -18,6 +18,7 @@ #include "qapi-visit.h" #include "qemu/config-file.h" #include "qom/object_interfaces.h" +#include "hw/xen/xen.h" =20 #ifdef CONFIG_NUMA #include @@ -274,6 +275,13 @@ host_memory_backend_memory_complete(UserCreatable *uc,= Error **errp) goto out; } =20 + /* The backend storage of MEMORY_BACKEND_XEN is managed by Xen, + * so no further work in this function is needed. + */ + if (xen_enabled() && !backend->mr.ram_block) { + goto out; + } + ptr =3D memory_region_get_ram_ptr(&backend->mr); sz =3D memory_region_size(&backend->mr); =20 diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index 9e8dab0e89..69c5784252 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -28,6 +28,7 @@ #include "sysemu/kvm.h" #include "trace.h" #include "hw/virtio/vhost.h" +#include "hw/xen/xen.h" =20 typedef struct pc_dimms_capacity { uint64_t size; @@ -107,7 +108,9 @@ void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplu= gState *hpms, } =20 memory_region_add_subregion(&hpms->mr, addr - hpms->base, mr); - vmstate_register_ram(vmstate_mr, dev); + if (!xen_enabled()) { + vmstate_register_ram(vmstate_mr, dev); + } numa_set_mem_node_id(addr, memory_region_size(mr), dimm->node); =20 out: --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489969124466707.3105589664573; Sun, 19 Mar 2017 17:18:44 -0700 (PDT) Received: from localhost ([::1]:58660 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpl23-0000RF-2W for importer@patchew.org; Sun, 19 Mar 2017 20:18:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58293) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwr-0005EQ-Tk for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwq-0004yX-KN for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:21 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwq-0004uJ-8I for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:20 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:19 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:17 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968800; x=1521504800; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=tWbGmkXnBr/yuLZF2MbtBrwE0rs9/SOeA9mswqhoSNM=; b=oLDuFF6zw9A6xWnTPr863VuAXxmS+MtW0YCfI312gddqRUH0Pc5G1gbp vxmvTNs3OKSBKvYT0Mul1GDZtsBXvg==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799207" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:48 +0800 Message-Id: <20170320001249.25521-10-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 09/10] xen-hvm: create hotplug memory region on Xen X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Stefano Stabellini , Eduardo Habkost , "Michael S. Tsirkin" , xen-devel@lists.xenproject.org, Paolo Bonzini , Anthony Perard , Konrad Rzeszutek Wilk , Dan Williams , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The current QEMU implementation allocates guest physical address for vNVDIMM in the hotplug memory region, which was not created when QEMU is used as Xen device model. Reuse existing code in i386/pc.c to create the hotplug memory region for HVM domain on Xen, so that we can reuse other parts of NVDIMM implementation with minor modifications. Signed-off-by: Haozhong Zhang --- Cc: Paolo Bonzini Cc: Richard Henderson Cc: Eduardo Habkost Cc: "Michael S. Tsirkin" Cc: Stefano Stabellini Cc: Anthony Perard Cc: xen-devel@lists.xenproject.org --- hw/i386/pc.c | 82 ++++++++++++++++++++++++++++--------------------= ---- include/hw/i386/pc.h | 1 + xen-hvm.c | 2 ++ 3 files changed, 47 insertions(+), 38 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 6b76720c35..4ea6baa613 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1356,6 +1356,49 @@ void xen_load_linux(PCMachineState *pcms) pcms->fw_cfg =3D fw_cfg; } =20 +void pc_memory_hotplug_init(PCMachineState *pcms, MemoryRegion *system_mem= ory) +{ + MachineState *machine =3D MACHINE(pcms); + PCMachineClass *pcmc =3D PC_MACHINE_GET_CLASS(pcms); + ram_addr_t hotplug_mem_size =3D machine->maxram_size - machine->ram_si= ze;; + + if (!pcmc->has_reserved_memory || machine->ram_size >=3D machine->maxr= am_size) + return; + + if (machine->ram_slots > ACPI_MAX_RAM_SLOTS) { + error_report("unsupported amount of memory slots: %"PRIu64, + machine->ram_slots); + exit(EXIT_FAILURE); + } + + if (QEMU_ALIGN_UP(machine->maxram_size, + TARGET_PAGE_SIZE) !=3D machine->maxram_size) { + error_report("maximum memory size must by aligned to multiple of " + "%d bytes", TARGET_PAGE_SIZE); + exit(EXIT_FAILURE); + } + + pcms->hotplug_memory.base =3D + ROUND_UP(0x100000000ULL + pcms->above_4g_mem_size, 1ULL << 30); + + if (pcmc->enforce_aligned_dimm) { + /* size hotplug region assuming 1G page max alignment per slot */ + hotplug_mem_size +=3D (1ULL << 30) * machine->ram_slots; + } + + if ((pcms->hotplug_memory.base + hotplug_mem_size) < + hotplug_mem_size) { + error_report("unsupported amount of maximum memory: " RAM_ADDR_FMT, + machine->maxram_size); + exit(EXIT_FAILURE); + } + + memory_region_init(&pcms->hotplug_memory.mr, OBJECT(pcms), + "hotplug-memory", hotplug_mem_size); + memory_region_add_subregion(system_memory, pcms->hotplug_memory.base, + &pcms->hotplug_memory.mr); +} + void pc_memory_init(PCMachineState *pcms, MemoryRegion *system_memory, MemoryRegion *rom_memory, @@ -1407,44 +1450,7 @@ void pc_memory_init(PCMachineState *pcms, } =20 /* initialize hotplug memory address space */ - if (pcmc->has_reserved_memory && - (machine->ram_size < machine->maxram_size)) { - ram_addr_t hotplug_mem_size =3D - machine->maxram_size - machine->ram_size; - - if (machine->ram_slots > ACPI_MAX_RAM_SLOTS) { - error_report("unsupported amount of memory slots: %"PRIu64, - machine->ram_slots); - exit(EXIT_FAILURE); - } - - if (QEMU_ALIGN_UP(machine->maxram_size, - TARGET_PAGE_SIZE) !=3D machine->maxram_size) { - error_report("maximum memory size must by aligned to multiple = of " - "%d bytes", TARGET_PAGE_SIZE); - exit(EXIT_FAILURE); - } - - pcms->hotplug_memory.base =3D - ROUND_UP(0x100000000ULL + pcms->above_4g_mem_size, 1ULL << 30); - - if (pcmc->enforce_aligned_dimm) { - /* size hotplug region assuming 1G page max alignment per slot= */ - hotplug_mem_size +=3D (1ULL << 30) * machine->ram_slots; - } - - if ((pcms->hotplug_memory.base + hotplug_mem_size) < - hotplug_mem_size) { - error_report("unsupported amount of maximum memory: " RAM_ADDR= _FMT, - machine->maxram_size); - exit(EXIT_FAILURE); - } - - memory_region_init(&pcms->hotplug_memory.mr, OBJECT(pcms), - "hotplug-memory", hotplug_mem_size); - memory_region_add_subregion(system_memory, pcms->hotplug_memory.ba= se, - &pcms->hotplug_memory.mr); - } + pc_memory_hotplug_init(pcms, system_memory); =20 /* Initialize PC system firmware */ pc_system_firmware_init(rom_memory, !pcmc->pci_enabled); diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index f278b3ae89..7f0b3bc648 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -259,6 +259,7 @@ void pc_memory_init(PCMachineState *pcms, MemoryRegion *system_memory, MemoryRegion *rom_memory, MemoryRegion **ram_memory); +void pc_memory_hotplug_init(PCMachineState *pcms, MemoryRegion *system_mem= ory); qemu_irq pc_allocate_cpu_irq(void); DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus); void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi, diff --git a/xen-hvm.c b/xen-hvm.c index 0c36dd11da..79cf871a53 100644 --- a/xen-hvm.c +++ b/xen-hvm.c @@ -252,6 +252,8 @@ static void xen_ram_init(PCMachineState *pcms, pcms->above_4g_mem_size); memory_region_add_subregion(sysmem, 0x100000000ULL, &ram_hi); } + + pc_memory_hotplug_init(pcms, sysmem); } =20 void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr, --=20 2.12.0 From nobody Tue Apr 30 04:13:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489969207983108.67849516810577; Sun, 19 Mar 2017 17:20:07 -0700 (PDT) Received: from localhost ([::1]:58671 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpl3O-0001m8-0W for importer@patchew.org; Sun, 19 Mar 2017 20:20:06 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58323) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cpkwv-0005IQ-50 for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cpkwt-0004z6-Cf for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:25 -0400 Received: from mga03.intel.com ([134.134.136.65]:51743) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cpkwt-0004uJ-1n for qemu-devel@nongnu.org; Sun, 19 Mar 2017 20:13:23 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Mar 2017 17:13:22 -0700 Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.153]) by fmsmga006.fm.intel.com with ESMTP; 19 Mar 2017 17:13:20 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489968803; x=1521504803; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=UEnBaZ7eVpL7JP2HQO1BNemU2PC0rjpVI9oxoH8tOkQ=; b=ukDPsA0ncDpmTxCHw050x8D+IdTNVYJTjSdmg1Wl78YOM7qEBimG92Jz BeZpDNsNq1VER28MaOQBrbWXD+3u6Q==; X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,191,1486454400"; d="scan'208";a="78799216" From: Haozhong Zhang To: qemu-devel@nongnu.org, xen-devel@lists.xen.org Date: Mon, 20 Mar 2017 08:12:49 +0800 Message-Id: <20170320001249.25521-11-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170320001249.25521-1-haozhong.zhang@intel.com> References: <20170320001249.25521-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Subject: [Qemu-devel] [RFC QEMU PATCH v2 10/10] qapi: extend 'query-memory-devices' to list devices of specified type X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Xiao Guangrong , "Michael S. Tsirkin" , "Dr. David Alan Gilbert" , Markus Armbruster , Igor Mammedov , Konrad Rzeszutek Wilk , Dan Williams Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add an optional argument 'devtype' to 'query-memory-devices', which is either 'dimm' or 'nvdimm'. If 'devtype' is missed or 'dimm', all memory devices will be listed. If 'devtype' is 'nvdimm', only nvdimm devices will be listed. Signed-off-by: Haozhong Zhang --- Cc: "Dr. David Alan Gilbert" Cc: Xiao Guangrong Cc: "Michael S. Tsirkin" Cc: Igor Mammedov Cc: Eric Blake Cc: Markus Armbruster --- hmp.c | 3 +- hw/mem/nvdimm.c | 38 ++++++++++++++++++++++++++ hw/mem/pc-dimm.c | 71 ++++++++++++++++++++++++++++----------------= ---- include/hw/mem/nvdimm.h | 2 ++ include/hw/mem/pc-dimm.h | 1 + qapi-schema.json | 48 +++++++++++++++++++++++++++++--- qmp.c | 13 +++++++-- 7 files changed, 140 insertions(+), 36 deletions(-) diff --git a/hmp.c b/hmp.c index 261843f7a2..35ad8c9716 100644 --- a/hmp.c +++ b/hmp.c @@ -2144,7 +2144,8 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict) void hmp_info_memory_devices(Monitor *mon, const QDict *qdict) { Error *err =3D NULL; - MemoryDeviceInfoList *info_list =3D qmp_query_memory_devices(&err); + MemoryDeviceInfoList *info_list =3D + qmp_query_memory_devices(true, MEMORY_DEVICE_TYPE_DIMM, &err); MemoryDeviceInfoList *info; MemoryDeviceInfo *value; PCDIMMDeviceInfo *di; diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c index 0d3e17e94c..811efda869 100644 --- a/hw/mem/nvdimm.c +++ b/hw/mem/nvdimm.c @@ -178,3 +178,41 @@ static void nvdimm_register_types(void) } =20 type_init(nvdimm_register_types) + +static int qmp_nvdimm_device_info(Object *obj, NVDIMMDeviceInfo *di) +{ + if (!object_dynamic_cast(obj, TYPE_NVDIMM)) { + return 1; + } + + if (qmp_pc_dimm_device_info(obj, (PCDIMMDeviceInfo *)di)) { + return 1; + } + + di->label_size =3D object_property_get_int(obj, "label-size", NULL); + + return 0; +} + +int qmp_nvdimm_device_list(Object *obj, void *opaque) +{ + MemoryDeviceInfoList ***prev =3D opaque; + NVDIMMDeviceInfo *di =3D g_new0(NVDIMMDeviceInfo, 1); + + if (qmp_nvdimm_device_info(obj, di)) { + g_free(di); + } else { + MemoryDeviceInfoList *elem =3D g_new0(MemoryDeviceInfoList, 1); + MemoryDeviceInfo *info =3D g_new0(MemoryDeviceInfo, 1); + + info->type =3D MEMORY_DEVICE_TYPE_NVDIMM; + info->u.nvdimm.data =3D di; + elem->value =3D info; + elem->next =3D NULL; + **prev =3D elem; + *prev =3D &elem->next; + } + + object_child_foreach(obj, qmp_nvdimm_device_list, opaque); + return 0; +} diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index 69c5784252..40a9c31cc5 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -161,39 +161,52 @@ uint64_t pc_existing_dimms_capacity(Error **errp) return cap.size; } =20 +int qmp_pc_dimm_device_info(Object *obj, PCDIMMDeviceInfo *di) +{ + DeviceState *dev; + DeviceClass *dc; + PCDIMMDevice *dimm; + + if (!object_dynamic_cast(obj, TYPE_PC_DIMM)) { + return 1; + } + + dev =3D DEVICE(obj); + dc =3D DEVICE_GET_CLASS(obj); + dimm =3D PC_DIMM(obj); + + if (dev->id) { + di->has_id =3D true; + di->id =3D g_strdup(dev->id); + } + di->hotplugged =3D dev->hotplugged; + di->hotpluggable =3D dc->hotpluggable; + di->addr =3D dimm->addr; + di->slot =3D dimm->slot; + di->node =3D dimm->node; + di->size =3D object_property_get_int(OBJECT(dimm), PC_DIMM_SIZE_PROP, = NULL); + di->memdev =3D object_get_canonical_path(OBJECT(dimm->hostmem)); + + return 0; +} + int qmp_pc_dimm_device_list(Object *obj, void *opaque) { MemoryDeviceInfoList ***prev =3D opaque; + PCDIMMDeviceInfo *di =3D g_new0(PCDIMMDeviceInfo, 1); =20 - if (object_dynamic_cast(obj, TYPE_PC_DIMM)) { - DeviceState *dev =3D DEVICE(obj); - - if (dev->realized) { - MemoryDeviceInfoList *elem =3D g_new0(MemoryDeviceInfoList, 1); - MemoryDeviceInfo *info =3D g_new0(MemoryDeviceInfo, 1); - PCDIMMDeviceInfo *di =3D g_new0(PCDIMMDeviceInfo, 1); - DeviceClass *dc =3D DEVICE_GET_CLASS(obj); - PCDIMMDevice *dimm =3D PC_DIMM(obj); - - if (dev->id) { - di->has_id =3D true; - di->id =3D g_strdup(dev->id); - } - di->hotplugged =3D dev->hotplugged; - di->hotpluggable =3D dc->hotpluggable; - di->addr =3D dimm->addr; - di->slot =3D dimm->slot; - di->node =3D dimm->node; - di->size =3D object_property_get_int(OBJECT(dimm), PC_DIMM_SIZ= E_PROP, - NULL); - di->memdev =3D object_get_canonical_path(OBJECT(dimm->hostmem)= ); - - info->u.dimm.data =3D di; - elem->value =3D info; - elem->next =3D NULL; - **prev =3D elem; - *prev =3D &elem->next; - } + if (qmp_pc_dimm_device_info(obj, di)) { + g_free(di); + } else { + MemoryDeviceInfoList *elem =3D g_new0(MemoryDeviceInfoList, 1); + MemoryDeviceInfo *info =3D g_new0(MemoryDeviceInfo, 1); + + info->type =3D MEMORY_DEVICE_TYPE_DIMM; + info->u.dimm.data =3D di; + elem->value =3D info; + elem->next =3D NULL; + **prev =3D elem; + *prev =3D &elem->next; } =20 object_child_foreach(obj, qmp_pc_dimm_device_list, opaque); diff --git a/include/hw/mem/nvdimm.h b/include/hw/mem/nvdimm.h index 03e1ff9558..89c79564c8 100644 --- a/include/hw/mem/nvdimm.h +++ b/include/hw/mem/nvdimm.h @@ -132,4 +132,6 @@ void nvdimm_build_acpi(GArray *table_offsets, GArray *t= able_data, uint32_t ram_slots); void nvdimm_plug(AcpiNVDIMMState *state); void nvdimm_acpi_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev); + +int qmp_nvdimm_device_list(Object *obj, void *opaque); #endif diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h index 1e483f2670..5f74febeaa 100644 --- a/include/hw/mem/pc-dimm.h +++ b/include/hw/mem/pc-dimm.h @@ -93,6 +93,7 @@ uint64_t pc_dimm_get_free_addr(uint64_t address_space_sta= rt, =20 int pc_dimm_get_free_slot(const int *hint, int max_slots, Error **errp); =20 +int qmp_pc_dimm_device_info(Object *obj, PCDIMMDeviceInfo *di); int qmp_pc_dimm_device_list(Object *obj, void *opaque); uint64_t pc_existing_dimms_capacity(Error **errp); void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms, diff --git a/qapi-schema.json b/qapi-schema.json index 32b4a4b782..5280de2405 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -5811,24 +5811,62 @@ } =20 ## +# @NVDIMMDeviceInfo: +# +# NVDIMMDevice state information +# +# @label-size: size the label storage area +# +# Since 2.9 +## +{ 'struct': 'NVDIMMDeviceInfo', + 'base': 'PCDIMMDeviceInfo', + 'data': { 'label-size': 'int' } +} + +## # @MemoryDeviceInfo: # # Union containing information about a memory device # +# - @dimm: since 2.1 +# - @nvdimm: since 2.9 +# # Since: 2.1 ## -{ 'union': 'MemoryDeviceInfo', 'data': {'dimm': 'PCDIMMDeviceInfo'} } +{ 'union': 'MemoryDeviceInfo', + 'data': {'dimm': 'PCDIMMDeviceInfo', 'nvdimm': 'NVDIMMDeviceInfo'} +} + +## +# @MemoryDeviceType: +# +# Type of memory devices. +# +# @dimm: pc-dimm memory device +# +# @nvdimm: nvdimm memory device +# +# Since 2.9 +## +{ 'enum': 'MemoryDeviceType', 'data': [ 'dimm', 'nvdimm' ] } =20 ## # @query-memory-devices: # -# Lists available memory devices and their state +# Lists available memory devices and their state. If the optional argument +# @devtype is present, only memory devices of the specified type are inclu= ded. +# +# @devtype: specify the type of memory devices to be listed. If 'dimm' is +# specified, all pc-dimm devices (including nvdimm devices which= is +# a subtype of pc-dimm) will be listed. If 'nvdimm' is specified, +# only nvdimm devices will be listed. (Since 2.9) # # Since: 2.1 # # Example: # -# -> { "execute": "query-memory-devices" } +# -> { "execute": "query-memory-devices", "arguments": { "devtype": "dimm"= } } # <- { "return": [ { "data": # { "addr": 5368709120, # "hotpluggable": true, @@ -5842,7 +5880,9 @@ # } ] } # ## -{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] } +{ 'command': 'query-memory-devices', + 'data': { '*devtype': 'MemoryDeviceType' }, + 'returns': ['MemoryDeviceInfo'] } =20 ## # @ACPISlotType: diff --git a/qmp.c b/qmp.c index fa82b598c6..179a10bced 100644 --- a/qmp.c +++ b/qmp.c @@ -36,6 +36,7 @@ #include "hw/boards.h" #include "qom/object_interfaces.h" #include "hw/mem/pc-dimm.h" +#include "hw/mem/nvdimm.h" #include "hw/acpi/acpi_dev_interface.h" =20 NameInfo *qmp_query_name(Error **errp) @@ -689,12 +690,20 @@ void qmp_object_del(const char *id, Error **errp) user_creatable_del(id, errp); } =20 -MemoryDeviceInfoList *qmp_query_memory_devices(Error **errp) +MemoryDeviceInfoList *qmp_query_memory_devices(bool has_devtype, + MemoryDeviceType devtype, + Error **errp) { MemoryDeviceInfoList *head =3D NULL; MemoryDeviceInfoList **prev =3D &head; =20 - qmp_pc_dimm_device_list(qdev_get_machine(), &prev); + if (!has_devtype || devtype =3D=3D MEMORY_DEVICE_TYPE_DIMM) { + qmp_pc_dimm_device_list(qdev_get_machine(), &prev); + } else if (devtype =3D=3D MEMORY_DEVICE_TYPE_NVDIMM) { + qmp_nvdimm_device_list(qdev_get_machine(), &prev); + } else { + error_setg(errp, "unrecognized memory device type %d", devtype); + } =20 return head; } --=20 2.12.0