On 3/23/2023 1:21 AM, Sean Christopherson wrote:
On Wed, Mar 22, 2023, Binbin Wu wrote:
Replace kvm_read_{cr0,cr4}_bits() with kvm_is_{cr0,cr4}_bit_set() when only
one bit is checked and bool is preferred as return value type.
Also change the return value type from int to bool of is_pae(), is_pse() and
is_paging().
I'm going to squash the obvious/direct changes with the introduction of the helpers,
and isolate is_{pae,pse,paging}() as those are more risky due to the multiple
casts (ulong=>int=>bool), and because the end usage isn't visible in the patch.
Case in point, there is a benign but in svm_set_cr0() that would be silently
fixed by converting is_paging() to return a bool:
bool old_paging = is_paging(vcpu);
...
vcpu->arch.cr0 = cr0;
if (!npt_enabled) {
hcr0 |= X86_CR0_PG | X86_CR0_WP;
if (old_paging != is_paging(vcpu))
The "old_paging != is_paging(vcpu)" compares a bool (1/0) against an int that
was an unsigned long (X86_CR0_PG/0), i.e. gets a false positive when paging is
enabled.
I'll post a fix and slot it in before this patch, both so that there's no silent
fixes and so that this changelog can reference the commit.
OK, thanks.
---
arch/x86/kvm/cpuid.c | 4 ++--
arch/x86/kvm/mmu.h | 2 +-
arch/x86/kvm/vmx/nested.c | 2 +-
arch/x86/kvm/vmx/vmx.c | 2 +-
arch/x86/kvm/x86.c | 20 ++++++++++----------
arch/x86/kvm/x86.h | 16 ++++++++--------
This misses a few conversions in kvm_pmu_rdpmc(), I'll fix those when applying too.