From nobody Sun May 19 03:02:42 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=1; a=rsa-sha256; t=1618479313; cv=none; d=zohomail.com; s=zohoarc; b=iE200O2NSWssU1pptUgHYpIRGLFieK3Aw9YLYP0B3X+yBtxgs7AN8kUZp3+Z3bd3WYPok6FF8W/X3MPI82R2I7dzVqxuD0lNrFW9gemKOOaDh+PtKjreY/DP2mmroZ4GCh811j5ZglN+RD+f9R9RmT2TCcXzsXdAhfLJTfGq6wU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618479313; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=b2H4p7dALtvE/muoT/1PGg30/6tjbt6ZpulXXjA46kY=; b=VvlQeuVrTjoruUN9H6FNWyEIIlzN9lRwTXCV1K3vmgOo9JF50vgqXjN6nR9+Fl1NdXtjHU+i5k4I9Y9t6r8BMRih5n7oO6nwrO7zEbkiZeWYJI+fX5kYU8g+hWrI4HJ9vqBc9UxEkUR9F6pCpX5jew4t0HYn9COaOofj4AEKj9c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618479313216471.10596636870116; Thu, 15 Apr 2021 02:35:13 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.110965.212046 (Exim 4.92) (envelope-from ) id 1lWyOo-0000W8-SO; Thu, 15 Apr 2021 09:34:58 +0000 Received: by outflank-mailman (output) from mailman id 110965.212046; Thu, 15 Apr 2021 09:34:58 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lWyOo-0000W1-PM; Thu, 15 Apr 2021 09:34:58 +0000 Received: by outflank-mailman (input) for mailman id 110965; Thu, 15 Apr 2021 09:34:57 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lWyOn-0000Vu-RP for xen-devel@lists.xenproject.org; Thu, 15 Apr 2021 09:34:57 +0000 Received: from mx2.suse.de (unknown [195.135.220.15]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 67ad9175-5a57-447f-bf28-a4aebe0782d1; Thu, 15 Apr 2021 09:34:56 +0000 (UTC) Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 01283ADE2; Thu, 15 Apr 2021 09:34:56 +0000 (UTC) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 67ad9175-5a57-447f-bf28-a4aebe0782d1 X-Virus-Scanned: by amavisd-new at test-mx.suse.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1618479296; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=b2H4p7dALtvE/muoT/1PGg30/6tjbt6ZpulXXjA46kY=; b=Hgvu3MI0IbuCWteaiNu3/BDKULMQnA4DtY+3VuvUZvtYxsqT2R0IIsQds2Cq8smZihYGIZ +oXvGxo8AHMoJJO5a+isbijA8viNKnY+dHoSEHzQaeyCMop/qDp0BOS+ufShcuxrrssaS2 gx4hRsllZnf4OOKOYKYKSd881/Fvk+Q= Subject: [PATCH v2 1/2] x86: correct is_pv_domain() when !CONFIG_PV From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <3bc868c1-1003-2f80-1617-d64a1e7441bc@suse.com> Message-ID: <9667345e-835e-7c55-8d6d-2774008b0017@suse.com> Date: Thu, 15 Apr 2021 11:34:55 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 MIME-Version: 1.0 In-Reply-To: <3bc868c1-1003-2f80-1617-d64a1e7441bc@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" On x86, idle and other system domains are implicitly PV. While I couldn't spot any cases where this is actively a problem, some cases required quite close inspection to be certain there couldn't e.g. be some ASSERT_UNREACHABLE() that would trigger in this case. Let's be on the safe side and make sure these always have is_pv_domain() returning true. For the build to still work, this requires a few adjustments elsewhere. In particular is_pv_64bit_domain() now gains a CONFIG_PV dependency, which means that is_pv_32bit_domain() || is_pv_64bit_domain() is no longer guaranteed to be the same as is_pv_domain(). Signed-off-by: Jan Beulich --- v2: Add comment. --- a/xen/arch/x86/dom0_build.c +++ b/xen/arch/x86/dom0_build.c @@ -571,7 +571,7 @@ int __init construct_dom0(struct domain =20 if ( is_hvm_domain(d) ) rc =3D dom0_construct_pvh(d, image, image_headroom, initrd, cmdlin= e); - else if ( is_pv_domain(d) ) + else if ( is_pv_64bit_domain(d) || is_pv_32bit_domain(d) ) rc =3D dom0_construct_pv(d, image, image_headroom, initrd, cmdline= ); else panic("Cannot construct Dom0. No guest interface available\n"); --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1564,6 +1564,7 @@ arch_do_vcpu_op( */ static void load_segments(struct vcpu *n) { +#ifdef CONFIG_PV struct cpu_user_regs *uregs =3D &n->arch.user_regs; unsigned long gsb =3D 0, gss =3D 0; bool compat =3D is_pv_32bit_vcpu(n); @@ -1729,6 +1730,7 @@ static void load_segments(struct vcpu *n regs->cs =3D FLAT_KERNEL_CS; regs->rip =3D pv->failsafe_callback_eip; } +#endif } =20 /* @@ -1743,6 +1745,7 @@ static void load_segments(struct vcpu *n */ static void save_segments(struct vcpu *v) { +#ifdef CONFIG_PV struct cpu_user_regs *regs =3D &v->arch.user_regs; =20 read_sregs(regs); @@ -1768,6 +1771,7 @@ static void save_segments(struct vcpu *v else v->arch.pv.gs_base_user =3D gs_base; } +#endif } =20 void paravirt_ctxt_switch_from(struct vcpu *v) --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -457,13 +457,13 @@ long arch_do_domctl( case XEN_DOMCTL_set_address_size: if ( is_hvm_domain(d) ) ret =3D -EOPNOTSUPP; + else if ( is_pv_64bit_domain(d) && domctl->u.address_size.size =3D= =3D 32 ) + ret =3D switch_compat(d); else if ( is_pv_domain(d) ) { if ( ((domctl->u.address_size.size =3D=3D 64) && !d->arch.pv.i= s_32bit) || ((domctl->u.address_size.size =3D=3D 32) && d->arch.pv.i= s_32bit) ) ret =3D 0; - else if ( domctl->u.address_size.size =3D=3D 32 ) - ret =3D switch_compat(d); else ret =3D -EINVAL; } --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -1036,9 +1036,14 @@ static always_inline bool is_control_dom =20 #define VM_ASSIST(d, t) (test_bit(VMASST_TYPE_ ## t, &(d)->vm_assist)) =20 +/* + * Note that is_pv_domain() can return true (for system domains) even when + * both is_pv_64bit_domain() and is_pv_32bit_domain() return false. IOW + * system domains can be considered PV without specific bitness. + */ static always_inline bool is_pv_domain(const struct domain *d) { - return IS_ENABLED(CONFIG_PV) && + return IS_ENABLED(CONFIG_X86) && evaluate_nospec(!(d->options & XEN_DOMCTL_CDF_hvm)); } =20 @@ -1064,7 +1069,7 @@ static always_inline bool is_pv_32bit_vc =20 static always_inline bool is_pv_64bit_domain(const struct domain *d) { - if ( !is_pv_domain(d) ) + if ( !IS_ENABLED(CONFIG_PV) || !is_pv_domain(d) ) return false; =20 #ifdef CONFIG_PV32 From nobody Sun May 19 03:02:42 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=1; a=rsa-sha256; t=1618479397; cv=none; d=zohomail.com; s=zohoarc; b=Ub3uZusOl71p2xqpiR2eX/S4ZAQh8oJO391pTIFjG5FjM03FqTjI6ZHGAZEO6nooaIvyKoSZNPm8GHj4ZrAxj7teXiayzQreGeo2ity6EcTeIL+NR02gTR7eXSq7mGBfTeLppm0waubWs2yfAK7I8KE/BO4svsYKybADY9kxmM8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618479397; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=G/5Eub7i28khsTuwh3nWTwZqC3zdUYeBWRQMxCnEONg=; b=dhsq9o8gbL/mveRUqGfH005XT3bASPdv2BP5NOXPxEZXbV0HMluo4fm/4rvtLSu2TCMgmpZucYi1Rd0J49fjCPn2GZEQ4CaLZ3Ylol1D/uBF01pwX6aam3yU4APd0FP55wk6MJKmTYUPhrW6+LjbZz6e6lfIZHbseyOlD6CkLnk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 161847939755128.5340838782746; Thu, 15 Apr 2021 02:36:37 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.110970.212058 (Exim 4.92) (envelope-from ) id 1lWyQ9-0000eB-BW; Thu, 15 Apr 2021 09:36:21 +0000 Received: by outflank-mailman (output) from mailman id 110970.212058; Thu, 15 Apr 2021 09:36:21 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lWyQ9-0000e4-8R; Thu, 15 Apr 2021 09:36:21 +0000 Received: by outflank-mailman (input) for mailman id 110970; Thu, 15 Apr 2021 09:36:20 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lWyQ7-0000dz-Vx for xen-devel@lists.xenproject.org; Thu, 15 Apr 2021 09:36:20 +0000 Received: from mx2.suse.de (unknown [195.135.220.15]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 134a56f0-6a61-4d79-8555-d25dc367ff24; Thu, 15 Apr 2021 09:36:19 +0000 (UTC) Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 78BB3AE20; Thu, 15 Apr 2021 09:36:18 +0000 (UTC) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 134a56f0-6a61-4d79-8555-d25dc367ff24 X-Virus-Scanned: by amavisd-new at test-mx.suse.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1618479378; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=G/5Eub7i28khsTuwh3nWTwZqC3zdUYeBWRQMxCnEONg=; b=WW8fmwq61mPt+uklg/D5vj+gi+6/3ED6ZGmPSVUa33/jWegPGiTSVcSocXuNIKnavGUYM3 geIfv3WtSPXNgJw8xQPzUx0poaUVjmNdNFb5EXar+zGez8qHUuunCJu5bVrXi8UTv2uhHd PMSxEgzyKAG9o58sEWOrHgyxH84TOg0= Subject: [PATCH v2 2/2] x86: use is_pv_64bit_domain() to avoid double evaluate_nospec() From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <3bc868c1-1003-2f80-1617-d64a1e7441bc@suse.com> Message-ID: <1d5cb279-203c-4188-5910-7b01dde4239e@suse.com> Date: Thu, 15 Apr 2021 11:36:18 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 MIME-Version: 1.0 In-Reply-To: <3bc868c1-1003-2f80-1617-d64a1e7441bc@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Jan Beulich --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1105,7 +1105,7 @@ int arch_set_info_guest( * update_cr3(), sh_update_cr3(), sh_walk_guest_tables(), and * shadow_one_bit_disable() for why that is. */ - !is_hvm_domain(d) && !is_pv_32bit_domain(d) ) + is_pv_64bit_domain(d) ) v->arch.flags &=3D ~TF_kernel_mode; =20 vcpu_setup_fpu(v, v->arch.xsave_area, @@ -1251,7 +1251,7 @@ int arch_set_info_guest( * correct initial RO_MPT_VIRT_{START,END} L4 entry). */ if ( d !=3D current->domain && !VM_ASSIST(d, m2p_strict) && - is_pv_domain(d) && !is_pv_32bit_domain(d) && + is_pv_64bit_domain(d) && test_bit(VMASST_TYPE_m2p_strict, &c.nat->vm_assist) && atomic_read(&d->arch.pv.nr_l4_pages) ) { @@ -1980,8 +1980,7 @@ static void __context_switch(void) =20 #if defined(CONFIG_PV) && defined(CONFIG_HVM) /* Prefetch the VMCB if we expect to use it later in the context switc= h */ - if ( cpu_has_svm && is_pv_domain(nd) && !is_pv_32bit_domain(nd) && - !is_idle_domain(nd) ) + if ( cpu_has_svm && is_pv_64bit_domain(nd) && !is_idle_domain(nd) ) svm_load_segs_prefetch(); #endif =20