I've no objection to using PSC for enums and whatnot, and I'll happily defer to
Boris for functions in the core kernel and guest, but for KVM I'd really like to
spell out the name for the two or so main handler functions.
Maybe I am missing something, I am not able to follow 'guest won't be able
to convert a 2mb chunk back to a 2mb large page'. The page-size used inside
the guest have to relationship with the RMP/NPT page-size. e.g, a guest can
validate the page range as a 4k and still map the page range as a 2mb or 1gb
in its pagetable.
The proposed code walks KVM's TDP and adjusts the RMP level to be the min of the
guest+host levels. Once KVM has installed a 4kb TDP SPTE, that walk will find
the 4kb TDP SPTE and thus operate on the RMP at a 4kb granularity. To allow full
restoration of 2mb PTE+SPTE+RMP, KVM needs to zap the 4kb SPTE(s) at some point
to allow rebuilding a 2mb SPTE.