|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/hvm: Improve hvm_set_guest_pat() code generation
commit 9ce0a5e207f3968e65d0af33a15bee5bdf5c8a7f
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Jan 12 13:54:12 2022 +0000
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Thu Jan 13 15:19:43 2022 +0000
x86/hvm: Improve hvm_set_guest_pat() code generation
This is a fastpath on virtual vmentry/exit, and forcing guest_pat to be
spilled to the stack is bad. Performing the shift in a register is far more
efficient.
Drop the (IMO useless) log message. MSR_PAT only gets altered on boot, and
a
bad value will be entirely evident in the ensuing #GP backtrace.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/hvm/hvm.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index b0ee49a61a..10ee4e9570 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -299,13 +299,13 @@ void hvm_get_guest_pat(struct vcpu *v, u64 *guest_pat)
*guest_pat = v->arch.hvm.pat_cr;
}
-int hvm_set_guest_pat(struct vcpu *v, u64 guest_pat)
+int hvm_set_guest_pat(struct vcpu *v, uint64_t guest_pat)
{
- int i;
- uint8_t *value = (uint8_t *)&guest_pat;
+ unsigned int i;
+ uint64_t tmp;
- for ( i = 0; i < 8; i++ )
- switch ( value[i] )
+ for ( i = 0, tmp = guest_pat; i < 8; i++, tmp >>= 8 )
+ switch ( tmp & 0xff )
{
case PAT_TYPE_UC_MINUS:
case PAT_TYPE_UNCACHABLE:
@@ -315,8 +315,6 @@ int hvm_set_guest_pat(struct vcpu *v, u64 guest_pat)
case PAT_TYPE_WRTHROUGH:
break;
default:
- HVM_DBG_LOG(DBG_LEVEL_MSR, "invalid guest PAT: %"PRIx64"\n",
- guest_pat);
return 0;
}
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |