KVM
Macros | Functions
debug-sr.h File Reference
#include <linux/compiler.h>
#include <linux/kvm_host.h>
#include <asm/debug-monitors.h>
#include <asm/kvm_asm.h>
#include <asm/kvm_hyp.h>
#include <asm/kvm_mmu.h>
Include dependency graph for debug-sr.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define read_debug(r, n)   read_sysreg(r##n##_el1)
 
#define write_debug(v, r, n)   write_sysreg(v, r##n##_el1)
 
#define save_debug(ptr, reg, nr)
 
#define restore_debug(ptr, reg, nr)
 

Functions

static void __debug_save_state (struct kvm_guest_debug_arch *dbg, struct kvm_cpu_context *ctxt)
 
static void __debug_restore_state (struct kvm_guest_debug_arch *dbg, struct kvm_cpu_context *ctxt)
 
static void __debug_switch_to_guest_common (struct kvm_vcpu *vcpu)
 
static void __debug_switch_to_host_common (struct kvm_vcpu *vcpu)
 

Macro Definition Documentation

◆ read_debug

#define read_debug (   r,
 
)    read_sysreg(r##n##_el1)

Definition at line 18 of file debug-sr.h.

◆ restore_debug

#define restore_debug (   ptr,
  reg,
  nr 
)

Definition at line 56 of file debug-sr.h.

◆ save_debug

#define save_debug (   ptr,
  reg,
  nr 
)

Definition at line 21 of file debug-sr.h.

◆ write_debug

#define write_debug (   v,
  r,
 
)    write_sysreg(v, r##n##_el1)

Definition at line 19 of file debug-sr.h.

Function Documentation

◆ __debug_restore_state()

static void __debug_restore_state ( struct kvm_guest_debug_arch *  dbg,
struct kvm_cpu_context *  ctxt 
)
static

Definition at line 109 of file debug-sr.h.

111 {
112  u64 aa64dfr0;
113  int brps, wrps;
114 
115  aa64dfr0 = read_sysreg(id_aa64dfr0_el1);
116 
117  brps = (aa64dfr0 >> 12) & 0xf;
118  wrps = (aa64dfr0 >> 20) & 0xf;
119 
120  restore_debug(dbg->dbg_bcr, dbgbcr, brps);
121  restore_debug(dbg->dbg_bvr, dbgbvr, brps);
122  restore_debug(dbg->dbg_wcr, dbgwcr, wrps);
123  restore_debug(dbg->dbg_wvr, dbgwvr, wrps);
124 
125  write_sysreg(ctxt_sys_reg(ctxt, MDCCINT_EL1), mdccint_el1);
126 }
#define restore_debug(ptr, reg, nr)
Definition: debug-sr.h:56
Here is the caller graph for this function:

◆ __debug_save_state()

static void __debug_save_state ( struct kvm_guest_debug_arch *  dbg,
struct kvm_cpu_context *  ctxt 
)
static

Definition at line 91 of file debug-sr.h.

93 {
94  u64 aa64dfr0;
95  int brps, wrps;
96 
97  aa64dfr0 = read_sysreg(id_aa64dfr0_el1);
98  brps = (aa64dfr0 >> 12) & 0xf;
99  wrps = (aa64dfr0 >> 20) & 0xf;
100 
101  save_debug(dbg->dbg_bcr, dbgbcr, brps);
102  save_debug(dbg->dbg_bvr, dbgbvr, brps);
103  save_debug(dbg->dbg_wcr, dbgwcr, wrps);
104  save_debug(dbg->dbg_wvr, dbgwvr, wrps);
105 
106  ctxt_sys_reg(ctxt, MDCCINT_EL1) = read_sysreg(mdccint_el1);
107 }
#define save_debug(ptr, reg, nr)
Definition: debug-sr.h:21
Here is the caller graph for this function:

◆ __debug_switch_to_guest_common()

static void __debug_switch_to_guest_common ( struct kvm_vcpu *  vcpu)
inlinestatic

Definition at line 128 of file debug-sr.h.

129 {
130  struct kvm_cpu_context *host_ctxt;
131  struct kvm_cpu_context *guest_ctxt;
132  struct kvm_guest_debug_arch *host_dbg;
133  struct kvm_guest_debug_arch *guest_dbg;
134 
135  if (!vcpu_get_flag(vcpu, DEBUG_DIRTY))
136  return;
137 
138  host_ctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt;
139  guest_ctxt = &vcpu->arch.ctxt;
140  host_dbg = &vcpu->arch.host_debug_state.regs;
141  guest_dbg = kern_hyp_va(vcpu->arch.debug_ptr);
142 
143  __debug_save_state(host_dbg, host_ctxt);
144  __debug_restore_state(guest_dbg, guest_ctxt);
145 }
static void __debug_restore_state(struct kvm_guest_debug_arch *dbg, struct kvm_cpu_context *ctxt)
Definition: debug-sr.h:109
static void __debug_save_state(struct kvm_guest_debug_arch *dbg, struct kvm_cpu_context *ctxt)
Definition: debug-sr.h:91
Here is the call graph for this function:
Here is the caller graph for this function:

◆ __debug_switch_to_host_common()

static void __debug_switch_to_host_common ( struct kvm_vcpu *  vcpu)
inlinestatic

Definition at line 147 of file debug-sr.h.

148 {
149  struct kvm_cpu_context *host_ctxt;
150  struct kvm_cpu_context *guest_ctxt;
151  struct kvm_guest_debug_arch *host_dbg;
152  struct kvm_guest_debug_arch *guest_dbg;
153 
154  if (!vcpu_get_flag(vcpu, DEBUG_DIRTY))
155  return;
156 
157  host_ctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt;
158  guest_ctxt = &vcpu->arch.ctxt;
159  host_dbg = &vcpu->arch.host_debug_state.regs;
160  guest_dbg = kern_hyp_va(vcpu->arch.debug_ptr);
161 
162  __debug_save_state(guest_dbg, guest_ctxt);
163  __debug_restore_state(host_dbg, host_ctxt);
164 
165  vcpu_clear_flag(vcpu, DEBUG_DIRTY);
166 }
Here is the call graph for this function:
Here is the caller graph for this function: