From patchwork Wed Apr 6 01:25:46 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Ostrovsky X-Patchwork-Id: 8757061 Return-Path: X-Original-To: patchwork-xen-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 15A1DC0553 for ; Wed, 6 Apr 2016 01:23:12 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 37D512034E for ; Wed, 6 Apr 2016 01:23:11 +0000 (UTC) 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.kernel.org (Postfix) with ESMTPS id 366C32034A for ; Wed, 6 Apr 2016 01:23:10 +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 1anc9J-0004cs-He; Wed, 06 Apr 2016 01:20:49 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1anc9I-0004Yn-6B for xen-devel@lists.xen.org; Wed, 06 Apr 2016 01:20:48 +0000 Received: from [85.158.137.68] by server-2.bemta-3.messagelabs.com id 80/5C-03293-F6464075; Wed, 06 Apr 2016 01:20:47 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrNLMWRWlGSWpSXmKPExsUyZ7p8oG5+Cku 4wbpzrBZLPi5mcWD0OLr7N1MAYxRrZl5SfkUCa8azxxvZCtYJVCx808vSwLiGu4uRi0NIoJVJ YtKyRkYI5zOjxLzJs9khnA2MEr9bdrFBOD2MEsfWTmHqYuTkYBMwkjh7dDojiC0iIC1x7fNls HZmgX2MEj+m3mQGSQgL+Es8mXoXqIGDg0VAVeLvGy2QMK+At0R/10U2EFtCQE7i3PovLCAlnE DxN5vtQcJCAl4S1172sEOUGEqcfriNcQIj3wJGhlWM6sWpRWWpRboWeklFmekZJbmJmTm6hgb GermpxcWJ6ak5iUnFesn5uZsYgYHCAAQ7GC+0Ox9ilORgUhLljUhmCRfiS8pPqcxILM6ILyrN SS0+xCjDwaEkwWsOkhMsSk1PrUjLzAGGLExagoNHSYTXFSTNW1yQmFucmQ6ROsWoKCXOqwWSE ABJZJTmwbXB4uQSo6yUMC8j0CFCPAWpRbmZJajyrxjFORiVhHlbQKbwZOaVwE1/BbSYCWhxvT ATyOKSRISUVAMjy723p4XyTB9GBN1+cXCt+ptylmWp878z+Rge/Luo49Fe04wdKZn8Bbn23yu MA06rPitrvblvQvUJSeb0k8+4/JZnsoi/uvKr+//jBT6TT/5nqLB2LM/XyDpW3R9iNVdl7sV6 IRvX9MYt0/azrP7OVuoSc2Suc/8xhpg9++slLp9dsYXt7TkdJZbijERDLeai4kQA+zWZCo4CA AA= X-Env-Sender: boris.ostrovsky@oracle.com X-Msg-Ref: server-10.tower-31.messagelabs.com!1459905645!33174845!1 X-Originating-IP: [156.151.31.81] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTU2LjE1MS4zMS44MSA9PiAyODgzMzk=\n X-StarScan-Received: X-StarScan-Version: 8.28; banners=-,-,- X-VirusChecked: Checked Received: (qmail 53540 invoked from network); 6 Apr 2016 01:20:46 -0000 Received: from userp1040.oracle.com (HELO userp1040.oracle.com) (156.151.31.81) by server-10.tower-31.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 6 Apr 2016 01:20:46 -0000 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u361Kfgj005286 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 6 Apr 2016 01:20:41 GMT Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u361KfBW031274 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 6 Apr 2016 01:20:41 GMT Received: from abhmp0015.oracle.com (abhmp0015.oracle.com [141.146.116.21]) by userv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u361KeVP006944; Wed, 6 Apr 2016 01:20:41 GMT Received: from ovs102.us.oracle.com (/10.149.76.202) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 05 Apr 2016 18:20:39 -0700 From: Boris Ostrovsky To: xen-devel@lists.xen.org Date: Tue, 5 Apr 2016 21:25:46 -0400 Message-Id: <1459905949-10358-18-git-send-email-boris.ostrovsky@oracle.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1459905949-10358-1-git-send-email-boris.ostrovsky@oracle.com> References: <1459905949-10358-1-git-send-email-boris.ostrovsky@oracle.com> X-Source-IP: userv0021.oracle.com [156.151.31.71] Cc: Andrew Cooper , Boris Ostrovsky , Keir Fraser , Jan Beulich , roger.pau@citrix.com Subject: [Xen-devel] [PATCH RFC 17/20] x86: Allow LAPIC-only emulation_flags for HVM guests 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-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP PVH guests may request LAPIC emulation (and nothing else) Signed-off-by: Boris Ostrovsky --- xen/arch/x86/domain.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index a6d721b..3b614d7 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -540,25 +540,31 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags, } else { - if ( (config->emulation_flags & ~XEN_X86_EMU_ALL) != 0 ) + uint32_t emflags; + + if ( is_hardware_domain(d) ) + config->emulation_flags |= XEN_X86_EMU_PIT; + + emflags = config->emulation_flags; + if ( (emflags & ~XEN_X86_EMU_ALL) != 0 ) { printk(XENLOG_G_ERR "d%d: Invalid emulation bitmap: %#x\n", - d->domain_id, config->emulation_flags); + d->domain_id, emflags); return -EINVAL; } - if ( is_hardware_domain(d) ) - config->emulation_flags |= XEN_X86_EMU_PIT; - if ( config->emulation_flags != 0 && - (config->emulation_flags != - (is_hvm_domain(d) ? XEN_X86_EMU_ALL : XEN_X86_EMU_PIT)) ) + + /* PVH guests can request emulated APIC */ + if ( emflags && + (is_hvm_domain(d) ? ((emflags != XEN_X86_EMU_ALL) && + (emflags != XEN_X86_EMU_LAPIC)) : + (emflags != XEN_X86_EMU_PIT)) ) { printk(XENLOG_G_ERR "d%d: Xen does not allow %s domain creation " "with the current selection of emulators: %#x\n", - d->domain_id, is_hvm_domain(d) ? "HVM" : "PV", - config->emulation_flags); + d->domain_id, is_hvm_domain(d) ? "HVM" : "PV", emflags); return -EOPNOTSUPP; } - d->arch.emulation_flags = config->emulation_flags; + d->arch.emulation_flags = emflags; } if ( has_hvm_container_domain(d) )