Commit ea91559b authored by Maxim Levitsky's avatar Maxim Levitsky Committed by Paolo Bonzini
Browse files

KVM: x86: SVM: remove vgif_enabled()



KVM always uses vgif when allowed, thus there is
no need to query current vmcb for it

Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
Message-Id: <20220322172449.235575-9-mlevitsk@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent db663af4
Loading
Loading
Loading
Loading
+6 −6
Original line number Original line Diff line number Diff line
@@ -172,7 +172,7 @@ static int vls = true;
module_param(vls, int, 0444);
module_param(vls, int, 0444);


/* enable/disable Virtual GIF */
/* enable/disable Virtual GIF */
static int vgif = true;
int vgif = true;
module_param(vgif, int, 0444);
module_param(vgif, int, 0444);


/* enable/disable LBR virtualization */
/* enable/disable LBR virtualization */
@@ -2148,7 +2148,7 @@ void svm_set_gif(struct vcpu_svm *svm, bool value)
		 * Likewise, clear the VINTR intercept, we will set it
		 * Likewise, clear the VINTR intercept, we will set it
		 * again while processing KVM_REQ_EVENT if needed.
		 * again while processing KVM_REQ_EVENT if needed.
		 */
		 */
		if (vgif_enabled(svm))
		if (vgif)
			svm_clr_intercept(svm, INTERCEPT_STGI);
			svm_clr_intercept(svm, INTERCEPT_STGI);
		if (svm_is_intercept(svm, INTERCEPT_VINTR))
		if (svm_is_intercept(svm, INTERCEPT_VINTR))
			svm_clear_vintr(svm);
			svm_clear_vintr(svm);
@@ -2166,7 +2166,7 @@ void svm_set_gif(struct vcpu_svm *svm, bool value)
		 * in use, we still rely on the VINTR intercept (rather than
		 * in use, we still rely on the VINTR intercept (rather than
		 * STGI) to detect an open interrupt window.
		 * STGI) to detect an open interrupt window.
		*/
		*/
		if (!vgif_enabled(svm))
		if (!vgif)
			svm_clear_vintr(svm);
			svm_clear_vintr(svm);
	}
	}
}
}
@@ -3502,7 +3502,7 @@ static void svm_enable_irq_window(struct kvm_vcpu *vcpu)
	 * enabled, the STGI interception will not occur. Enable the irq
	 * enabled, the STGI interception will not occur. Enable the irq
	 * window under the assumption that the hardware will set the GIF.
	 * window under the assumption that the hardware will set the GIF.
	 */
	 */
	if (vgif_enabled(svm) || gif_set(svm)) {
	if (vgif || gif_set(svm)) {
		/*
		/*
		 * IRQ window is not needed when AVIC is enabled,
		 * IRQ window is not needed when AVIC is enabled,
		 * unless we have pending ExtINT since it cannot be injected
		 * unless we have pending ExtINT since it cannot be injected
@@ -3522,7 +3522,7 @@ static void svm_enable_nmi_window(struct kvm_vcpu *vcpu)
		return; /* IRET will cause a vm exit */
		return; /* IRET will cause a vm exit */


	if (!gif_set(svm)) {
	if (!gif_set(svm)) {
		if (vgif_enabled(svm))
		if (vgif)
			svm_set_intercept(svm, INTERCEPT_STGI);
			svm_set_intercept(svm, INTERCEPT_STGI);
		return; /* STGI will cause a vm exit */
		return; /* STGI will cause a vm exit */
	}
	}
@@ -4329,7 +4329,7 @@ static void svm_enable_smi_window(struct kvm_vcpu *vcpu)
	struct vcpu_svm *svm = to_svm(vcpu);
	struct vcpu_svm *svm = to_svm(vcpu);


	if (!gif_set(svm)) {
	if (!gif_set(svm)) {
		if (vgif_enabled(svm))
		if (vgif)
			svm_set_intercept(svm, INTERCEPT_STGI);
			svm_set_intercept(svm, INTERCEPT_STGI);
		/* STGI will cause a vm exit */
		/* STGI will cause a vm exit */
	} else {
	} else {
+4 −8
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@
#define MSRPM_OFFSETS	16
#define MSRPM_OFFSETS	16
extern u32 msrpm_offsets[MSRPM_OFFSETS] __read_mostly;
extern u32 msrpm_offsets[MSRPM_OFFSETS] __read_mostly;
extern bool npt_enabled;
extern bool npt_enabled;
extern int vgif;
extern bool intercept_smi;
extern bool intercept_smi;


/*
/*
@@ -453,14 +454,9 @@ static inline bool svm_is_intercept(struct vcpu_svm *svm, int bit)
	return vmcb_is_intercept(&svm->vmcb->control, bit);
	return vmcb_is_intercept(&svm->vmcb->control, bit);
}
}


static inline bool vgif_enabled(struct vcpu_svm *svm)
{
	return !!(svm->vmcb->control.int_ctl & V_GIF_ENABLE_MASK);
}

static inline void enable_gif(struct vcpu_svm *svm)
static inline void enable_gif(struct vcpu_svm *svm)
{
{
	if (vgif_enabled(svm))
	if (vgif)
		svm->vmcb->control.int_ctl |= V_GIF_MASK;
		svm->vmcb->control.int_ctl |= V_GIF_MASK;
	else
	else
		svm->vcpu.arch.hflags |= HF_GIF_MASK;
		svm->vcpu.arch.hflags |= HF_GIF_MASK;
@@ -468,7 +464,7 @@ static inline void enable_gif(struct vcpu_svm *svm)


static inline void disable_gif(struct vcpu_svm *svm)
static inline void disable_gif(struct vcpu_svm *svm)
{
{
	if (vgif_enabled(svm))
	if (vgif)
		svm->vmcb->control.int_ctl &= ~V_GIF_MASK;
		svm->vmcb->control.int_ctl &= ~V_GIF_MASK;
	else
	else
		svm->vcpu.arch.hflags &= ~HF_GIF_MASK;
		svm->vcpu.arch.hflags &= ~HF_GIF_MASK;
@@ -476,7 +472,7 @@ static inline void disable_gif(struct vcpu_svm *svm)


static inline bool gif_set(struct vcpu_svm *svm)
static inline bool gif_set(struct vcpu_svm *svm)
{
{
	if (vgif_enabled(svm))
	if (vgif)
		return !!(svm->vmcb->control.int_ctl & V_GIF_MASK);
		return !!(svm->vmcb->control.int_ctl & V_GIF_MASK);
	else
	else
		return !!(svm->vcpu.arch.hflags & HF_GIF_MASK);
		return !!(svm->vcpu.arch.hflags & HF_GIF_MASK);