Messages in this thread | | | Date | Thu, 17 Aug 2023 17:51:27 +0800 | Subject | Re: [PATCH v10 7/9] KVM: VMX: Implement and wire get_untagged_addr() for LAM | From | Binbin Wu <> |
| |
On 8/17/2023 6:01 AM, Sean Christopherson wrote: > On Wed, Jul 19, 2023, Binbin Wu wrote: >> + return (sign_extend64(gva, lam_bit) & ~BIT_ULL(63)) | (gva & BIT_ULL(63)); > Almost forgot. Please add a comment explaning how LAM untags the address, > specifically the whole bit 63 preservation. The logic is actually straightforward, > but the above looks way more complex than it actually is. This? > > /* > * Untag the address by sign-extending the LAM bit, but NOT to bit 63. > * Bit 63 is retained from the raw virtual address so that untagging > * doesn't change a user access to a supervisor access, and vice versa. > */ OK.
Besides it, I find I forgot adding the comments for the function. I will add it back if you don't object.
+/* + * Only called in 64-bit mode. + * + * LAM has a modified canonical check when applicable: + * LAM_S48 : [ 1 ][ metadata ][ 1 ] + * 63 47 + * LAM_U48 : [ 0 ][ metadata ][ 0 ] + * 63 47 + * LAM_S57 : [ 1 ][ metadata ][ 1 ] + * 63 56 + * LAM_U57 + 5-lvl paging : [ 0 ][ metadata ][ 0 ] + * 63 56 + * LAM_U57 + 4-lvl paging : [ 0 ][ metadata ][ 0...0 ] + * 63 56..47 + * + * Note that KVM masks the metadata in addresses, performs the (original) + * canonicality checking and then walks page table. This is slightly + * different from hardware behavior but achieves the same effect. + * Specifically, if LAM is enabled, the processor performs a modified + * canonicality checking where the metadata are ignored instead of + * masked. After the modified canonicality checking, the processor masks + * the metadata before passing addresses for paging translation. + */
| |