Commit 74ba5bc8 authored by Sean Christopherson's avatar Sean Christopherson Committed by Paolo Bonzini

KVM: VMX: Use boolean returns for Posted Interrupt "test" helpers

Return bools instead of ints for the posted interrupt "test" helpers.
The bit position of the flag being test does not matter to the callers,
and is in fact lost by virtue of test_bit() itself returning a bool.

Returning ints is potentially dangerous, e.g. "pi_test_on(pi_desc) == 1"
is safe-ish because ON is bit 0 and thus any sane implementation of
pi_test_on() will work, but for SN (bit 1), checking "== 1" would rely on
pi_test_on() to return 0 or 1, a.k.a. bools, as opposed to 0 or 2 (the
positive bit position).
Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
Message-Id: <20211009021236.4122790-24-seanjc@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent c9571721
...@@ -189,7 +189,7 @@ int pi_pre_block(struct kvm_vcpu *vcpu) ...@@ -189,7 +189,7 @@ int pi_pre_block(struct kvm_vcpu *vcpu)
new.control) != old.control); new.control) != old.control);
/* We should not block the vCPU if an interrupt is posted for it. */ /* We should not block the vCPU if an interrupt is posted for it. */
if (pi_test_on(pi_desc) == 1) if (pi_test_on(pi_desc))
__pi_post_block(vcpu); __pi_post_block(vcpu);
local_irq_enable(); local_irq_enable();
...@@ -220,7 +220,7 @@ void pi_wakeup_handler(void) ...@@ -220,7 +220,7 @@ void pi_wakeup_handler(void)
blocked_vcpu_list) { blocked_vcpu_list) {
struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu); struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
if (pi_test_on(pi_desc) == 1) if (pi_test_on(pi_desc))
kvm_vcpu_kick(vcpu); kvm_vcpu_kick(vcpu);
} }
spin_unlock(&per_cpu(blocked_vcpu_on_cpu_lock, cpu)); spin_unlock(&per_cpu(blocked_vcpu_on_cpu_lock, cpu));
......
...@@ -40,7 +40,7 @@ static inline bool pi_test_and_clear_on(struct pi_desc *pi_desc) ...@@ -40,7 +40,7 @@ static inline bool pi_test_and_clear_on(struct pi_desc *pi_desc)
(unsigned long *)&pi_desc->control); (unsigned long *)&pi_desc->control);
} }
static inline int pi_test_and_set_pir(int vector, struct pi_desc *pi_desc) static inline bool pi_test_and_set_pir(int vector, struct pi_desc *pi_desc)
{ {
return test_and_set_bit(vector, (unsigned long *)pi_desc->pir); return test_and_set_bit(vector, (unsigned long *)pi_desc->pir);
} }
...@@ -74,13 +74,13 @@ static inline void pi_clear_sn(struct pi_desc *pi_desc) ...@@ -74,13 +74,13 @@ static inline void pi_clear_sn(struct pi_desc *pi_desc)
(unsigned long *)&pi_desc->control); (unsigned long *)&pi_desc->control);
} }
static inline int pi_test_on(struct pi_desc *pi_desc) static inline bool pi_test_on(struct pi_desc *pi_desc)
{ {
return test_bit(POSTED_INTR_ON, return test_bit(POSTED_INTR_ON,
(unsigned long *)&pi_desc->control); (unsigned long *)&pi_desc->control);
} }
static inline int pi_test_sn(struct pi_desc *pi_desc) static inline bool pi_test_sn(struct pi_desc *pi_desc)
{ {
return test_bit(POSTED_INTR_SN, return test_bit(POSTED_INTR_SN,
(unsigned long *)&pi_desc->control); (unsigned long *)&pi_desc->control);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment