On Wed, Mar 30, 2022 at 4:31 AM Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > On 3/29/22 17:36, Lai Jiangshan wrote: > > From: Lai Jiangshan <jiangshan.ljs@xxxxxxxxxxxx> > > > > (Request For Help for testing on AMD machine with 32 bit L1 hypervisor, > > see information below) > > > > KVM handles root pages specially for these cases: > > > > direct mmu (nonpaping for 32 bit guest): > > gCR0_PG=0 > > shadow mmu (shadow paping for 32 bit guest): > > gCR0_PG=1,gEFER_LMA=0,gCR4_PSE=0 > > gCR0_PG=1,gEFER_LMA=0,gCR4_PSE=1 > > direct mmu (NPT for 32bit host): > > hEFER_LMA=0 > > shadow nested NPT (for 32bit L1 hypervisor): > > gCR0_PG=1,gEFER_LMA=0,gCR4_PSE=0,hEFER_LMA=0 > > gCR0_PG=1,gEFER_LMA=0,gCR4_PSE=1,hEFER_LMA=0 > > gCR0_PG=1,gEFER_LMA=0,gCR4_PSE={0|1},hEFER_LMA=1,hCR4_LA57={0|1} > > Shadow nested NPT for 64bit L1 hypervisor: > > gEFER_LMA=1,gCR4_LA57=0,hEFER_LMA=1,hCR4_LA57=1 > > > > They are either using special roots or matched the condition > > ((mmu->shadow_root_level > mmu->root_level) && !mm->direct_map) > > (refered as level expansion) or both. > > > > All the cases are using special roots except the last one. > > Many cases are doing level expansion including the last one. > > Hi Jiangshan, > > so the main difference between direct and passthrough shadow pages is > that passthrough pages can have indirect children. A direct page maps > the page at sp->gfn, while a passthrough page maps the page _table_ at > sp->gfn. Is this correct? > > If so, I think there is a difference between a passthrough page that > maps a level-2 page from level-4, and a passthrough page that maps a > level-3 page from level-4. If that is true, a single bit in the role > is not enough. Ahhhh, you are correct. > > One way to handle this could be to have a single field "mapping_level" > that subsumes both "direct" and "passthrough". direct==1 > would correspond to "mapping_level == 0"; direct==0 && passthrough==0 > would be "mapping_level == level"; anything in the middle would be a > passthrough page in your series. > > What do you think? > > Thanks, > > Paolo >