mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
KVM: x86: Do not use kvm_rip_read() unconditionally in KVM tracepoints
Not all VMs allow access to RIP. Check guest_state_protected before
calling kvm_rip_read().
This avoids, for example, hitting WARN_ON_ONCE in vt_cache_reg() for
TDX VMs.
Fixes: 81bf912b2c ("KVM: TDX: Implement TDX vcpu enter/exit path")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Message-ID: <20250415104821.247234-2-adrian.hunter@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
268cbfe65b
commit
ca4f113b0b
|
|
@ -11,6 +11,13 @@
|
|||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM kvm
|
||||
|
||||
#ifdef CREATE_TRACE_POINTS
|
||||
#define tracing_kvm_rip_read(vcpu) ({ \
|
||||
typeof(vcpu) __vcpu = vcpu; \
|
||||
__vcpu->arch.guest_state_protected ? 0 : kvm_rip_read(__vcpu); \
|
||||
})
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Tracepoint for guest mode entry.
|
||||
*/
|
||||
|
|
@ -28,7 +35,7 @@ TRACE_EVENT(kvm_entry,
|
|||
|
||||
TP_fast_assign(
|
||||
__entry->vcpu_id = vcpu->vcpu_id;
|
||||
__entry->rip = kvm_rip_read(vcpu);
|
||||
__entry->rip = tracing_kvm_rip_read(vcpu);
|
||||
__entry->immediate_exit = force_immediate_exit;
|
||||
|
||||
kvm_x86_call(get_entry_info)(vcpu, &__entry->intr_info,
|
||||
|
|
@ -319,7 +326,7 @@ TRACE_EVENT(name, \
|
|||
), \
|
||||
\
|
||||
TP_fast_assign( \
|
||||
__entry->guest_rip = kvm_rip_read(vcpu); \
|
||||
__entry->guest_rip = tracing_kvm_rip_read(vcpu); \
|
||||
__entry->isa = isa; \
|
||||
__entry->vcpu_id = vcpu->vcpu_id; \
|
||||
__entry->requests = READ_ONCE(vcpu->requests); \
|
||||
|
|
@ -423,7 +430,7 @@ TRACE_EVENT(kvm_page_fault,
|
|||
|
||||
TP_fast_assign(
|
||||
__entry->vcpu_id = vcpu->vcpu_id;
|
||||
__entry->guest_rip = kvm_rip_read(vcpu);
|
||||
__entry->guest_rip = tracing_kvm_rip_read(vcpu);
|
||||
__entry->fault_address = fault_address;
|
||||
__entry->error_code = error_code;
|
||||
),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user