From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AH8x2268R/bOOJ0ZALQ79i2gDlPvLd7kP2P4qdMsKfDKXRCW1mBwvHaR+4hLYXQhko1J1ks58r5X ARC-Seal: i=1; a=rsa-sha256; t=1517430560; cv=none; d=google.com; s=arc-20160816; b=xQHTlTq8Qq+7z1W95qur7v2BDdzRwrkERKKby5Il2HhrHIIB5lyv8h977KMlszT2S6 JJXye+o+Pldf+5/qSg9Nog+9nLEXUl98Hk0rRKz9O5nHAz/TQc6Ky9LIDVgW7ln+DX0y pSIf14AiHbKw++2MCRb8Y2kp9neMmYHqr+5dEfc6ZQknKwLM6MsxkxTrUvtcjthbWVX2 IrbvrI9HpZ9ts1ZHS+6VYdZAxBTs7j64Jc/gSWjbtgN5DzUoKOULbj8MpRnGZ1lDo/cS gnO7EwC860v3doCMXASchQJq0JkrhwOA6VmueuJNcnG383k+eWvBbUNQTOABivmNxcZH GdFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=MfHicXP/m57YW/vJtPjyD8Cc6ljpPjJgg186s+COJt4=; b=hWb2/LwiugiMeTNkCnGOcDtLSlG60ff+hBPFqWCg74srUPIVLYSa7g7h2bTMCr5bJk 3HfahEyGdc14XeGnjnvTKbANRX9lICveFLUSnfrRSPUIlaHeGV/kyiRN4tY1E8We6XUv 8aYqkjtAP4/Lg8PqthmFZ4L1IV9bnBJxm94/D11ozge01UcV389ev1kfWgf93kM6isHF z+4wRA8ar1wyhrZJFblPqd/OPfWum3R7WTz47L+g3skRIVQFe9L0Yq7LxZHJiLE3aEs3 /SAuOcp4rfnv9/jzqtLcAWVoA/IjCo6WQpOeDGHOz+4KWoNRq0wo0xGuvHloBuROUhWE PtKA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=G7YdL6FZ; spf=pass (google.com: domain of konrad.wilk@oracle.com designates 156.151.31.86 as permitted sender) smtp.mailfrom=konrad.wilk@oracle.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=G7YdL6FZ; spf=pass (google.com: domain of konrad.wilk@oracle.com designates 156.151.31.86 as permitted sender) smtp.mailfrom=konrad.wilk@oracle.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Date: Wed, 31 Jan 2018 15:28:46 -0500 From: Konrad Rzeszutek Wilk To: KarimAllah Ahmed Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, Ashok Raj , Asit Mallick , Dave Hansen , Arjan Van De Ven , Tim Chen , Linus Torvalds , Andrea Arcangeli , Andi Kleen , Thomas Gleixner , Dan Williams , Jun Nakajima , Andy Lutomirski , Greg KH , Paolo Bonzini , Peter Zijlstra , David Woodhouse Subject: Re: [PATCH v5 2/5] KVM: x86: Add IBPB support Message-ID: <20180131202846.GG22045@char.us.oracle.com> References: <1517427467-28567-1-git-send-email-karahmed@amazon.de> <1517427467-28567-3-git-send-email-karahmed@amazon.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1517427467-28567-3-git-send-email-karahmed@amazon.de> User-Agent: Mutt/1.8.3 (2017-05-23) X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8791 signatures=668659 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1711220000 definitions=main-1801310255 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1591138068251830751?= X-GMAIL-MSGID: =?utf-8?q?1591141267842532823?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index d46a61b..2e4e8af 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -2285,6 +2285,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) > if (per_cpu(current_vmcs, cpu) != vmx->loaded_vmcs->vmcs) { > per_cpu(current_vmcs, cpu) = vmx->loaded_vmcs->vmcs; > vmcs_load(vmx->loaded_vmcs->vmcs); > + indirect_branch_prediction_barrier(); > } > > if (!already_loaded) { > @@ -3342,6 +3343,26 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) > case MSR_IA32_TSC: > kvm_write_tsc(vcpu, msr_info); > break; > + case MSR_IA32_PRED_CMD: > + if (!msr_info->host_initiated && > + !guest_cpuid_has(vcpu, X86_FEATURE_IBPB) && > + !guest_cpuid_has(vcpu, X86_FEATURE_SPEC_CTRL)) > + return 1; > + > + if (data & ~PRED_CMD_IBPB) > + return 1; > + > + if (!data) > + break; > + > + wrmsrl(MSR_IA32_PRED_CMD, PRED_CMD_IBPB); > + > + if (is_guest_mode(vcpu)) > + break; Don't you want this the other way around? That is first do the disable_intercept and then add the 'if (is_guest_mode(vcpu))' ? Otherwise the very first MSR write from the guest is going to hit condition above and never end up executing the disabling of the intercept? > + > + vmx_disable_intercept_for_msr(vmx->vmcs01.msr_bitmap, MSR_IA32_PRED_CMD, > + MSR_TYPE_W); > + break; > case MSR_IA32_CR_PAT: > if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) { > if (!kvm_mtrr_valid(vcpu, MSR_IA32_CR_PAT, data))