From patchwork Mon Jul 4 11:45:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergej Proskurin X-Patchwork-Id: 9212389 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 86C3560572 for ; Mon, 4 Jul 2016 11:48:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 78022286DE for ; Mon, 4 Jul 2016 11:48:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6C985286E2; Mon, 4 Jul 2016 11:48:58 +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=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED 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 1C94B286DE for ; Mon, 4 Jul 2016 11:48:58 +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 1bK2LP-0000A0-8R; Mon, 04 Jul 2016 11:47:19 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bK2Kl-00084S-7P for xen-devel@lists.xenproject.org; Mon, 04 Jul 2016 11:46:39 +0000 Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id 49/DB-00606-E9C4A775; Mon, 04 Jul 2016 11:46:38 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrBLMWRWlGSWpSXmKPExsXSPJ+BQ3euT1W 4wY0GZYvvWyYzOTB6HP5whSWAMYo1My8pvyKBNePL5KfMBTcFK2Ys283awNjL18XIxSEksJFR 4kvzJxYIZwWjxO6bpxi7GDk52AQMJKa8XskKYosIKEncWzWZCaSIWaCJUeJe4wM2kISwgIPEy 00rWUBsFgFVidl/msDivAK2Evc/TWIGsSUE5CQmL74ENpQTKN7Q8YkJxBYSsJHovvuYbQIj9w JGhlWMGsWpRWWpRbqGZnpJRZnpGSW5iZk5uoYGpnq5qcXFiempOYlJxXrJ+bmbGIE+ZgCCHYz nT3seYpTkYFIS5U13rwoX4kvKT6nMSCzOiC8qzUktPsQow8GhJMHr4w2UEyxKTU+tSMvMAQYb TFqCg0dJhLcQJM1bXJCYW5yZDpE6xagoJc7rB5IQAElklObBtcEC/BKjrJQwLyPQIUI8BalFu ZklqPKvGMU5GJWEecNApvBk5pXATX8FtJgJaDFrbDnI4pJEhJRUA2Os/b9VE2SObj4/3XVF8/ 92RuuUsKhXEw93xxw/fG8SQ+mk17ftb5YeCdhy1f5BvTXXVEluvfWZnVUJk1tfbxb1E1A8yyW 5UGJtzdOJxstWTDjPcTwrTPy27Z/G2cbXz+/ta9Tcv8PKvqUlO/jP5XNbfBOZk4oFTt7479NW +bZeujRQqjV5Y78SS3FGoqEWc1FxIgDnwQQcawIAAA== X-Env-Sender: proskurin@sec.in.tum.de X-Msg-Ref: server-15.tower-206.messagelabs.com!1467632797!36299403!1 X-Originating-IP: [131.159.0.8] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 8.46; banners=-,-,- X-VirusChecked: Checked Received: (qmail 513 invoked from network); 4 Jul 2016 11:46:37 -0000 Received: from mail-out1.informatik.tu-muenchen.de (HELO mail-out1.informatik.tu-muenchen.de) (131.159.0.8) by server-15.tower-206.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 4 Jul 2016 11:46:37 -0000 Received: from files.sec.in.tum.de (files.sec.in.tum.de [131.159.50.1]) by services.sec.in.tum.de (Postfix) with ESMTP id 21992100D1FAF; Mon, 4 Jul 2016 13:46:37 +0200 (CEST) Received: from ker.sec.in.tum.de (ker.sec.in.tum.de [131.159.50.36]) by files.sec.in.tum.de (Postfix) with ESMTP id 15634E2843; Mon, 4 Jul 2016 13:46:37 +0200 (CEST) From: Sergej Proskurin To: xen-devel@lists.xenproject.org Date: Mon, 4 Jul 2016 13:45:55 +0200 Message-Id: <20160704114605.10086-27-proskurin@sec.in.tum.de> X-Mailer: git-send-email 2.8.3 In-Reply-To: <20160704114605.10086-1-proskurin@sec.in.tum.de> References: <20160704114605.10086-1-proskurin@sec.in.tum.de> X-Mailman-Approved-At: Mon, 04 Jul 2016 11:47:11 +0000 Cc: Sergej Proskurin , Julien Grall , Stefano Stabellini Subject: [Xen-devel] [PATCH 08/18] arm/altp2m: Add HVMOP_altp2m_destroy_p2m. 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 Signed-off-by: Sergej Proskurin --- Cc: Stefano Stabellini Cc: Julien Grall --- xen/arch/arm/hvm.c | 2 +- xen/arch/arm/p2m.c | 32 ++++++++++++++++++++++++++++++++ xen/include/asm-arm/p2m.h | 3 +++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/hvm.c b/xen/arch/arm/hvm.c index 005d7c6..f4ec5cf 100644 --- a/xen/arch/arm/hvm.c +++ b/xen/arch/arm/hvm.c @@ -145,7 +145,7 @@ static int do_altp2m_op(XEN_GUEST_HANDLE_PARAM(void) arg) break; case HVMOP_altp2m_destroy_p2m: - rc = -EOPNOTSUPP; + rc = p2m_destroy_altp2m_by_id(d, a.u.view.view); break; case HVMOP_altp2m_switch_p2m: diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index 6c41b98..f82f1ea 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -2200,6 +2200,38 @@ void p2m_flush_altp2m(struct domain *d) altp2m_unlock(d); } +int p2m_destroy_altp2m_by_id(struct domain *d, unsigned int idx) +{ + struct p2m_domain *p2m; + int rc = -EBUSY; + + if ( !idx || idx >= MAX_ALTP2M ) + return rc; + + domain_pause_except_self(d); + + altp2m_lock(d); + + if ( d->arch.altp2m_vttbr[idx] != INVALID_MFN ) + { + p2m = d->arch.altp2m_p2m[idx]; + + if ( !_atomic_read(p2m->active_vcpus) ) + { + p2m_flush_table(p2m); + flush_tlb(); + d->arch.altp2m_vttbr[idx] = INVALID_MFN; + rc = 0; + } + } + + altp2m_unlock(d); + + domain_unpause_except_self(d); + + return rc; +} + /* * Local variables: * mode: C diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h index c51532a..255a282 100644 --- a/xen/include/asm-arm/p2m.h +++ b/xen/include/asm-arm/p2m.h @@ -140,6 +140,9 @@ int p2m_init_altp2m_by_id(struct domain *d, unsigned int idx); /* Find an available alternate p2m and make it valid */ int p2m_init_next_altp2m(struct domain *d, uint16_t *idx); +/* Make a specific alternate p2m invalid */ +int p2m_destroy_altp2m_by_id(struct domain *d, unsigned int idx); + #define p2m_is_foreign(_t) ((_t) == p2m_map_foreign) #define p2m_is_ram(_t) ((_t) == p2m_ram_rw || (_t) == p2m_ram_ro)