x86/emul: Rearrange the logic in hvmemul_{read,write}_cr()

In hvmemul_read_cr(), make the TRACE()/X86EMUL_OKAY path common in preparation
for adding a %cr8 case.  Use a local 'val' variable instead of always
operating on a deferenced pointer.

In both, calculate curr once.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2025-03-26 11:54:59 +00:00
1 parent b72d3f5308
commit b7264a15c2
1 file changed
+16 -8
+16 -8
View File
@@ -2273,23 +2273,30 @@ static int cf_check hvmemul_write_io(
static int cf_check hvmemul_read_cr(
unsigned int reg,
unsigned long *val,
unsigned long *pval,
struct x86_emulate_ctxt *ctxt)
{
struct vcpu *curr = current;
unsigned long val;
switch ( reg )
{
case 0:
case 2:
case 3:
case 4:
*val = current->arch.hvm.guest_cr[reg];
TRACE(TRC_HVM_CR_READ64, reg, *val, *val >> 32);
return X86EMUL_OKAY;
default:
val = curr->arch.hvm.guest_cr[reg];
break;
default:
return X86EMUL_UNHANDLEABLE;
}
return X86EMUL_UNHANDLEABLE;
TRACE(TRC_HVM_CR_READ64, reg, val, val >> 32);
*pval = val;
return X86EMUL_OKAY;
}
static int cf_check hvmemul_write_cr(
@@ -2297,6 +2304,7 @@ static int cf_check hvmemul_write_cr(
unsigned long val,
struct x86_emulate_ctxt *ctxt)
{
struct vcpu *curr = current;
int rc;
TRACE(TRC_HVM_CR_WRITE64, reg, val, val >> 32);
@@ -2307,13 +2315,13 @@ static int cf_check hvmemul_write_cr(
break;
case 2:
current->arch.hvm.guest_cr[2] = val;
curr->arch.hvm.guest_cr[2] = val;
rc = X86EMUL_OKAY;
break;
case 3:
{
bool noflush = hvm_pcid_enabled(current) && (val & X86_CR3_NOFLUSH);
bool noflush = hvm_pcid_enabled(curr) && (val & X86_CR3_NOFLUSH);
if ( noflush )
val &= ~X86_CR3_NOFLUSH;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.