From patchwork Sun Jul 9 08:12:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kai Huang X-Patchwork-Id: 9831701 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EA03A60318 for ; Sun, 9 Jul 2017 08:15:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DBB0124151 for ; Sun, 9 Jul 2017 08:15:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CEB9927F94; Sun, 9 Jul 2017 08:15:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.6 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 3812D24151 for ; Sun, 9 Jul 2017 08:15:02 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dU7Kr-0006CC-5O; Sun, 09 Jul 2017 08:12:57 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dU7Kp-0006By-Qp for xen-devel@lists.xen.org; Sun, 09 Jul 2017 08:12:55 +0000 Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id DC/92-02022-785E1695; Sun, 09 Jul 2017 08:12:55 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrGIsWRWlGSWpSXmKPExsVyMfTAEd22p4m RBve2SFgs+biYxYHR4+ju30wBjFGsmXlJ+RUJrBlTl21jLjioUbG54z1bA+NC+S5GLg4hgYmM Ehd7zrOBOCwCL1kkfv7ZwATiSAj0s0psuPqWsYuRE8iJk/iw7SsLhF0hcah9AzOILSSgLNH17 Sg7hL2ISeLx22AQm01ATWLrknaoeluJBee+gNWLCEhLXPt8GWwms0CaxI+2b2wgtrCAs8S1ac uBbA6gK1QlFh4uBTF5BeIlls4MhZgiL7Gr7SIriM0JNPHL/gVQF9hI/Dq2nmkCo+ACRoZVjBr FqUVlqUW6RpZ6SUWZ6RkluYmZObqGBqZ6uanFxYnpqTmJScV6yfm5mxiB4VbPwMC4g/HyFr9D jJIcTEqivGK9CZFCfEn5KZUZicUZ8UWlOanFhxhlODiUJHg5nyRGCgkWpaanVqRl5gADHyYtw cGjJMLrPB0ozVtckJhbnJkOkTrFaMlx5cq6L0wcUw5sB5KvJvz/xiTEkpeflyolznv7MVCDAE hDRmke3DhYdF5ilJUS5mVkYGAQ4ilILcrNLEGVf8UozsGoJMzbDzKFJzOvBG7rK6CDmIAOYqt LADmoJBEhJdXA6Nzkv776mp6M3VPBb8f68ksyD8VaBRev3r9mVVDiJCmJhB+37v4PuWH9MtLr iunKR9vvHBSb/WHuu9fMkhNWLHieb1/O/jaqonNhzOFD01ezvCn1M5dxuVDY8ean+r1f2VM/b Zj4aLl+tG/Ml/83ai+9eCsu9HCt8EeZEAnJZc/O/y8XYDN4267EUpyRaKjFXFScCACk9GAXyQ IAAA== X-Env-Sender: kaih.linux@gmail.com X-Msg-Ref: server-8.tower-206.messagelabs.com!1499587973!101908418!1 X-Originating-IP: [209.85.192.196] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.25; banners=-,-,- X-VirusChecked: Checked Received: (qmail 28181 invoked from network); 9 Jul 2017 08:12:54 -0000 Received: from mail-pf0-f196.google.com (HELO mail-pf0-f196.google.com) (209.85.192.196) by server-8.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 9 Jul 2017 08:12:54 -0000 Received: by mail-pf0-f196.google.com with SMTP id z6so10360226pfk.3 for ; Sun, 09 Jul 2017 01:12:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=V11noZlZ97RUffXSSXuEbPAurMGAIICEvUwfN6jFxsM=; b=DsUyAFa1OV4nAbqDz2B558YwbJnr6Gs9U/JNn9YHGfftYF2jM+jiAm6D+AArSgYV3F hWP8gYCxL8SnuqDjKjQKuFN645Y5VDms4s9WNLrsuHbVu55HzOA9R9HpzN+Njjo999Vc g7cSsAXYWxR+lx1YE4eihn52zQsyheO6h3HGFDZNsmqvgNgJooUEaEvcUSvISZiJeFz0 NRNoOBqUHIpZWFLIqWnP3hvlBCjlln8gcwrqrEWytyKj/fFzRbbU/J2590C96wljTw/J FWq/b2LHqSuoRYVlR8X/Ke/I+vnd/UV15wN3RFdBGoQ2RruaOEnqtflA9EuJIXoq3ebL g56g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=V11noZlZ97RUffXSSXuEbPAurMGAIICEvUwfN6jFxsM=; b=BZ7RbLKYT3Z39Jige65qz5N4F4NFB1IDsc3n05YZPA+EVVnp+EAfKzFpQGhyrcZGv4 OpuKuWcZDgdRUUTqXdU0Y2uuUp6kLdhhQySAAgUutsH3+RkD5CJ+hV90Uh3AMD51bj5m Y+wfd0ccmIfMBf4Ik2SEK2+OZqpvrVyUuYVS03sUAS/UA8zrOAk5EN7N2pqVTMO4H+Rt z5cttN6wnzprnt0U1cX4lgPINostx1gWmN9LNkCNo9uyGBa0DNItw1Ial4+3SUDWyt+n wXUsXTkRLcSiE+BZZgfI+BpD/+J/nObuVtYe7IcZVrv58BkHe4BD7DynmME9nmG0SrKO o+vw== X-Gm-Message-State: AIVw113QjD6WBZU8iNlSVi1tuQpbiA/n+zmghKjwXKaeZmeVYS1gbni+ 8MLqB0SDhCP3m9lH X-Received: by 10.84.169.3 with SMTP id g3mr12008660plb.136.1499587972491; Sun, 09 Jul 2017 01:12:52 -0700 (PDT) Received: from localhost.localdomain (118-92-234-57.dsl.dyn.ihug.co.nz. [118.92.234.57]) by smtp.gmail.com with ESMTPSA id w20sm15158699pgc.34.2017.07.09.01.12.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 09 Jul 2017 01:12:51 -0700 (PDT) From: Kai Huang X-Google-Original-From: Kai Huang To: xen-devel@lists.xen.org Date: Sun, 9 Jul 2017 20:12:42 +1200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: Cc: George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, kevin.tian@intel.com, jbeulich@suse.com Subject: [Xen-devel] [PATCH 05/15] xen: p2m: new 'p2m_epc' type for EPC mapping X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP A new 'p2m_epc' type is added for EPC mapping type. Two wrapper functions set_epc_p2m_entry and clear_epc_p2m_entry are also added for further use. Signed-off-by: Kai Huang --- xen/arch/x86/mm/p2m-ept.c | 3 +++ xen/arch/x86/mm/p2m.c | 41 +++++++++++++++++++++++++++++++++++++++++ xen/include/asm-x86/p2m.h | 12 ++++++++++-- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index ecab56fbec..95929868dc 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -182,6 +182,9 @@ static void ept_p2m_type_to_flags(struct p2m_domain *p2m, ept_entry_t *entry, entry->a = !!cpu_has_vmx_ept_ad; entry->d = 0; break; + case p2m_epc: + entry->r = entry->w = entry->x = 1; + break; } diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index bee733dc46..29f42cb96d 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -1176,6 +1176,12 @@ int set_identity_p2m_entry(struct domain *d, unsigned long gfn, return ret; } +int set_epc_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) +{ + return set_typed_p2m_entry(d, gfn, mfn, PAGE_ORDER_4K, p2m_epc, + p2m_get_hostp2m(d)->default_access); +} + /* * Returns: * 0 for success @@ -1260,6 +1266,41 @@ int clear_identity_p2m_entry(struct domain *d, unsigned long gfn) return ret; } +int clear_epc_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) +{ + struct p2m_domain *p2m = p2m_get_hostp2m(d); + mfn_t omfn; + p2m_type_t ot; + p2m_access_t oa; + int ret = 0; + + gfn_lock(p2m, gfn, 0); + + omfn = p2m->get_entry(p2m, gfn, &ot, &oa, 0, NULL, NULL); + if ( mfn_eq(omfn, INVALID_MFN) || !p2m_is_epc(ot) ) + { + printk(XENLOG_G_WARNING + "d%d: invalid EPC map to clear: gfn 0x%lx, type %d.\n", + d->domain_id, gfn, ot); + goto out; + } + if ( !mfn_eq(mfn, omfn) ) + { + printk(XENLOG_G_WARNING + "d%d: mistaken EPC mfn to clear: gfn 0x%lx, " + "omfn 0x%lx, mfn 0x%lx.\n", + d->domain_id, gfn, mfn_x(omfn), mfn_x(mfn)); + } + + ret = p2m_set_entry(p2m, gfn, INVALID_MFN, PAGE_ORDER_4K, p2m_invalid, + p2m->default_access); + +out: + gfn_unlock(p2m, gfn, 0); + + return ret; +} + /* Returns: 0 for success, -errno for failure */ int set_shared_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) { diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index e736609241..a9e330dd3c 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -72,6 +72,7 @@ typedef enum { p2m_ram_broken = 13, /* Broken page, access cause domain crash */ p2m_map_foreign = 14, /* ram pages from foreign domain */ p2m_ioreq_server = 15, + p2m_epc = 16, /* EPC */ } p2m_type_t; /* Modifiers to the query */ @@ -142,10 +143,13 @@ typedef unsigned int p2m_query_t; | p2m_to_mask(p2m_ram_logdirty) ) #define P2M_SHARED_TYPES (p2m_to_mask(p2m_ram_shared)) +#define P2M_EPC_TYPES (p2m_to_mask(p2m_epc)) + /* Valid types not necessarily associated with a (valid) MFN. */ #define P2M_INVALID_MFN_TYPES (P2M_POD_TYPES \ | p2m_to_mask(p2m_mmio_direct) \ - | P2M_PAGING_TYPES) + | P2M_PAGING_TYPES \ + | P2M_EPC_TYPES) /* Broken type: the frame backing this pfn has failed in hardware * and must not be touched. */ @@ -153,6 +157,7 @@ typedef unsigned int p2m_query_t; /* Useful predicates */ #define p2m_is_ram(_t) (p2m_to_mask(_t) & P2M_RAM_TYPES) +#define p2m_is_epc(_t) (p2m_to_mask(_t) & P2M_EPC_TYPES) #define p2m_is_hole(_t) (p2m_to_mask(_t) & P2M_HOLE_TYPES) #define p2m_is_mmio(_t) (p2m_to_mask(_t) & P2M_MMIO_TYPES) #define p2m_is_readonly(_t) (p2m_to_mask(_t) & P2M_RO_TYPES) @@ -163,7 +168,7 @@ typedef unsigned int p2m_query_t; /* Grant types are *not* considered valid, because they can be unmapped at any time and, unless you happen to be the shadow or p2m implementations, there's no way of synchronising against that. */ -#define p2m_is_valid(_t) (p2m_to_mask(_t) & (P2M_RAM_TYPES | P2M_MMIO_TYPES)) +#define p2m_is_valid(_t) (p2m_to_mask(_t) & (P2M_RAM_TYPES | P2M_MMIO_TYPES | P2M_EPC_TYPES)) #define p2m_has_emt(_t) (p2m_to_mask(_t) & (P2M_RAM_TYPES | p2m_to_mask(p2m_mmio_direct))) #define p2m_is_pageable(_t) (p2m_to_mask(_t) & P2M_PAGEABLE_TYPES) #define p2m_is_paging(_t) (p2m_to_mask(_t) & P2M_PAGING_TYPES) @@ -634,6 +639,9 @@ int clear_identity_p2m_entry(struct domain *d, unsigned long gfn); int p2m_add_foreign(struct domain *tdom, unsigned long fgfn, unsigned long gpfn, domid_t foreign_domid); +int set_epc_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn); +int clear_epc_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn); + /* * Populate-on-demand */