Received: by 2002:ac0:a679:0:0:0:0:0 with SMTP id p54csp755767imp; Thu, 21 Feb 2019 10:30:22 -0800 (PST) X-Google-Smtp-Source: AHgI3IZ1WW+NAa7uJjKcM/JzeJxQZ/kjDsbn6LFMEsOjNuIs5tzSiuHf95zly1Htipj6WpQAi16H X-Received: by 2002:a65:5c41:: with SMTP id v1mr15808733pgr.404.1550773822039; Thu, 21 Feb 2019 10:30:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550773822; cv=none; d=google.com; s=arc-20160816; b=mXsymgeMk3RXmmRxYFTxt1ybjVniwjAx9tljuHVhyFrC4EmUhHFHgfVINKbHhkUTxf b235ZiNZ+lhnKKTaN1rtws0xVTybQj2T6WL4HLEVW7sUTiDcgdU/EC8cpymCKTLRfnWD AsIyLwtYDGU73pEYM+BFQZm/R+zOajtaWjHdGEG3YUEC2mrXnV18h4TbJu+3ReDKvrId DevXl3aFYy+n0yrIynEaag6kEdKSQsWWePBax/Pnmh+2p0Yd1QcNoCtVCRw40TCddmQ9 Z91eKcrdSqTZbvMjb/HqnN3l3OjD/3vym4caosK3A36jLTNYu5k57XSMqf42yXwvGjTx bpHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=TTAUK4CwTQjMV/b+ar73ZoDoHwSHwc1ClUjBEWm93sc=; b=NR58yrVbbFrJLYAJlY5y4ugUa+cdFZv15BeoaI08nzpKPrZ3J9g/TqFzt3sWseYe0R /qbnj6nmhoVytB/4LVrmLAt8G04A3qsFSxZhQTVpM6m4svWaBX6Y5wtAUpcvZ1yWuYRO o9uqtEJKBMKhLzY66OKaUwpa9cqJ7agRegAY79t4NC6CF8IqUgNRzFlPq99Fsuw07jOz gWGnp+6TYUKUCKHQrcHtGEwhjzHe1fONqWMguhfBBpbqdEc1pJ6PYLcnFviK+mxbc5hY 3kOa7A6jPI5TSjWweo9hhOc4MvYtnaTo5UYm3iveetcpCem6c8FcaqA8BHQSd36RPEmt qZ8A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p4si22320773pgb.241.2019.02.21.10.30.05; Thu, 21 Feb 2019 10:30:22 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728863AbfBUS3L (ORCPT + 99 others); Thu, 21 Feb 2019 13:29:11 -0500 Received: from mga06.intel.com ([134.134.136.31]:63823 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728326AbfBUS3L (ORCPT ); Thu, 21 Feb 2019 13:29:11 -0500 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Feb 2019 10:29:10 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,396,1544515200"; d="scan'208";a="276836283" Received: from sjchrist-coffee.jf.intel.com (HELO linux.intel.com) ([10.54.74.181]) by orsmga004.jf.intel.com with ESMTP; 21 Feb 2019 10:29:10 -0800 Date: Thu, 21 Feb 2019 10:29:10 -0800 From: Sean Christopherson To: Joao Martins Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Ankur Arora , Boris Ostrovsky , Paolo Bonzini , Radim =?utf-8?B?S3LEjW3DocWZ?= , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , x86@kernel.org Subject: Re: [PATCH RFC 02/39] KVM: x86/xen: intercept xen hypercalls if enabled Message-ID: <20190221182910.GC7224@linux.intel.com> References: <20190220201609.28290-1-joao.m.martins@oracle.com> <20190220201609.28290-3-joao.m.martins@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190220201609.28290-3-joao.m.martins@oracle.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Feb 20, 2019 at 08:15:32PM +0000, Joao Martins wrote: > Add a new exit reason for emulator to handle Xen hypercalls. > Albeit these are injected only if guest has initialized the Xen > hypercall page - the hypercall is just a convenience but one > that is done by pretty much all guests. Hence if the guest > sets the hypercall page, we assume a Xen guest is going to > be set up. > > Emulator will then panic with: > > KVM: unknown exit reason 28 > RAX=0000000000000011 RBX=ffffffff81e03e94 RCX=0000000040000000 > RDX=0000000000000000 > RSI=ffffffff81e03e70 RDI=0000000000000006 RBP=ffffffff81e03e90 > RSP=ffffffff81e03e68 > R8 =73726576206e6558 R9 =ffffffff81e03e90 R10=ffffffff81e03e94 > R11=2e362e34206e6f69 > R12=0000000040000004 R13=ffffffff81e03e8c R14=ffffffff81e03e88 > R15=0000000000000000 > RIP=ffffffff81001228 RFL=00000082 [--S----] CPL=0 II=0 A20=1 SMM=0 HLT=0 > ES =0000 0000000000000000 ffffffff 00c00000 > CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA] > SS =0000 0000000000000000 ffffffff 00c00000 > DS =0000 0000000000000000 ffffffff 00c00000 > FS =0000 0000000000000000 ffffffff 00c00000 > GS =0000 ffffffff81f34000 ffffffff 00c00000 > LDT=0000 0000000000000000 ffffffff 00c00000 > TR =0020 0000000000000000 00000fff 00808b00 DPL=0 TSS64-busy > GDT= ffffffff81f3c000 0000007f > IDT= ffffffff83265000 00000fff > CR0=80050033 CR2=ffff880001fa6ff8 CR3=0000000001fa6000 CR4=000406a0 > DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 > DR3=0000000000000000 > DR6=00000000ffff0ff0 DR7=0000000000000400 > EFER=0000000000000d01 > Code=cc cc cc cc cc cc cc cc cc cc cc cc b8 11 00 00 00 0f 01 c1 cc > cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc b8 12 > 00 00 00 0f > > Signed-off-by: Joao Martins > --- > arch/x86/include/asm/kvm_host.h | 13 +++++++ > arch/x86/kvm/Makefile | 2 +- > arch/x86/kvm/trace.h | 33 +++++++++++++++++ > arch/x86/kvm/x86.c | 12 +++++++ > arch/x86/kvm/xen.c | 79 +++++++++++++++++++++++++++++++++++++++++ > arch/x86/kvm/xen.h | 10 ++++++ > include/uapi/linux/kvm.h | 17 ++++++++- > 7 files changed, 164 insertions(+), 2 deletions(-) > create mode 100644 arch/x86/kvm/xen.c > create mode 100644 arch/x86/kvm/xen.h ... > diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile > index 31ecf7a76d5a..2b46c93c9380 100644 > --- a/arch/x86/kvm/Makefile > +++ b/arch/x86/kvm/Makefile > @@ -10,7 +10,7 @@ kvm-$(CONFIG_KVM_ASYNC_PF) += $(KVM)/async_pf.o > > kvm-y += x86.o mmu.o emulate.o i8259.o irq.o lapic.o \ > i8254.o ioapic.o irq_comm.o cpuid.o pmu.o mtrr.o \ > - hyperv.o page_track.o debugfs.o > + hyperv.o xen.o page_track.o debugfs.o Can this be wrapped in a config? Or even better, as a loadable module? 2k+ lines of code is a non-trival amount of baggage for folks that don't care about running Xen guests. I've only glanced through the series, so I've no idea if the resulting code would be an abomination. > > kvm-intel-y += vmx/vmx.o vmx/vmenter.o vmx/pmu_intel.o vmx/vmcs12.o vmx/evmcs.o vmx/nested.o > kvm-amd-y += svm.o pmu_amd.o