• Sean Christopherson's avatar
    KVM: x86: Simplify retrieving the page offset when loading PDTPRs · 94c641ba
    Sean Christopherson authored
    Replace impressively complex "logic" for computing the page offset from
    CR3 when loading PDPTRs.  Unlike other paging modes, the address held in
    CR3 for PAE paging is 32-byte aligned, i.e. occupies bits 31:5, thus bits
    11:5 need to be used as the offset from the gfn when reading PDPTRs.
    
    The existing calculation originated in commit 1342d353 ("[PATCH] KVM:
    MMU: Load the pae pdptrs on cr3 change like the processor does"), which
    read the PDPTRs from guest memory as individual 8-byte loads.  At the
    time, the so called "offset" was the base index of PDPTR0 as a _u64_, not
    a byte offset.  Naming aside, the computation was useful and arguably
    simplified the overall flow.
    
    Unfortunately, when commit 195aefde ("KVM: Add general accessors to
    read and write guest memory") added accessors with offsets at byte
    granularity, the cleverness of the original code was lost and KVM was
    left with convoluted code for a simple operation.
    
    No functional change intended.
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-Id: <20210831164224.1119728-4-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    94c641ba
x86.c 324 KB