#include <linux/kvm.h>
#include <linux/kvm_host.h>
#include <asm/stacktrace/nvhe.h>
Go to the source code of this file.
◆ hyp_dump_backtrace()
static void hyp_dump_backtrace |
( |
unsigned long |
hyp_offset | ) |
|
|
static |
Definition at line 178 of file stacktrace.c.
180 struct kvm_nvhe_stacktrace_info *stacktrace_info;
181 struct stack_info stacks[] = {
185 struct unwind_state state = {
187 .nr_stacks = ARRAY_SIZE(stacks),
190 stacktrace_info = this_cpu_ptr_nvhe_sym(kvm_stacktrace_info);
192 kvm_nvhe_unwind_init(&state, stacktrace_info->fp, stacktrace_info->pc);
static struct stack_info stackinfo_get_hyp_kern_va(void)
static void unwind(struct unwind_state *state, stack_trace_consume_fn consume_entry, void *cookie)
static bool kvm_nvhe_dump_backtrace_entry(void *arg, unsigned long where)
static void kvm_nvhe_dump_backtrace_start(void)
static void kvm_nvhe_dump_backtrace_end(void)
static struct stack_info stackinfo_get_overflow_kern_va(void)
◆ kvm_nvhe_dump_backtrace()
void kvm_nvhe_dump_backtrace |
( |
unsigned long |
hyp_offset | ) |
|
Definition at line 239 of file stacktrace.c.
241 if (is_protected_kvm_enabled())
static void hyp_dump_backtrace(unsigned long hyp_offset)
static void pkvm_dump_backtrace(unsigned long hyp_offset)
◆ kvm_nvhe_dump_backtrace_end()
static void kvm_nvhe_dump_backtrace_end |
( |
void |
| ) |
|
|
static |
Definition at line 163 of file stacktrace.c.
165 kvm_err(
"---[ end nVHE call trace ]---\n");
◆ kvm_nvhe_dump_backtrace_entry()
static bool kvm_nvhe_dump_backtrace_entry |
( |
void * |
arg, |
|
|
unsigned long |
where |
|
) |
| |
|
static |
Definition at line 146 of file stacktrace.c.
148 unsigned long va_mask = GENMASK_ULL(vabits_actual - 1, 0);
149 unsigned long hyp_offset = (
unsigned long)arg;
152 where = (where &
va_mask) + hyp_offset;
153 kvm_err(
" [<%016lx>] %pB\n", where, (
void *)(where + kaslr_offset()));
◆ kvm_nvhe_dump_backtrace_start()
static void kvm_nvhe_dump_backtrace_start |
( |
void |
| ) |
|
|
static |
Definition at line 158 of file stacktrace.c.
160 kvm_err(
"nVHE call trace:\n");
◆ kvm_nvhe_stack_kern_record_va()
static bool kvm_nvhe_stack_kern_record_va |
( |
unsigned long * |
addr | ) |
|
|
static |
Definition at line 109 of file stacktrace.c.
static bool kvm_nvhe_stack_kern_va(unsigned long *addr, unsigned long size)
◆ kvm_nvhe_stack_kern_va()
static bool kvm_nvhe_stack_kern_va |
( |
unsigned long * |
addr, |
|
|
unsigned long |
size |
|
) |
| |
|
static |
Definition at line 85 of file stacktrace.c.
87 struct stack_info stack_hyp, stack_kern;
91 if (stackinfo_on_stack(&stack_hyp, *addr,
size))
96 if (stackinfo_on_stack(&stack_hyp, *addr,
size))
102 *addr = *addr - stack_hyp.low + stack_kern.low;
static struct stack_info stackinfo_get_overflow(void)
static struct stack_info stackinfo_get_hyp(void)
◆ pkvm_dump_backtrace()
static void pkvm_dump_backtrace |
( |
unsigned long |
hyp_offset | ) |
|
|
static |
Definition at line 228 of file stacktrace.c.
230 kvm_err(
"Cannot dump pKVM nVHE stacktrace: !CONFIG_PROTECTED_NVHE_STACKTRACE\n");
◆ stackinfo_get_hyp()
static struct stack_info stackinfo_get_hyp |
( |
void |
| ) |
|
|
static |
Definition at line 1 of file stacktrace.c.
50 struct kvm_nvhe_stacktrace_info *stacktrace_info
51 = this_cpu_ptr_nvhe_sym(kvm_stacktrace_info);
52 unsigned long low = (
unsigned long)stacktrace_info->stack_base;
53 unsigned long high = low + PAGE_SIZE;
55 return (
struct stack_info) {
◆ stackinfo_get_hyp_kern_va()
static struct stack_info stackinfo_get_hyp_kern_va |
( |
void |
| ) |
|
|
static |
Definition at line 1 of file stacktrace.c.
63 unsigned long low = (
unsigned long)*this_cpu_ptr(&kvm_arm_hyp_stack_page);
64 unsigned long high = low + PAGE_SIZE;
66 return (
struct stack_info) {
◆ stackinfo_get_overflow()
static struct stack_info stackinfo_get_overflow |
( |
void |
| ) |
|
|
static |
Definition at line 1 of file stacktrace.c.
26 struct kvm_nvhe_stacktrace_info *stacktrace_info
27 = this_cpu_ptr_nvhe_sym(kvm_stacktrace_info);
28 unsigned long low = (
unsigned long)stacktrace_info->overflow_stack_base;
29 unsigned long high = low + OVERFLOW_STACK_SIZE;
31 return (
struct stack_info) {
◆ stackinfo_get_overflow_kern_va()
static struct stack_info stackinfo_get_overflow_kern_va |
( |
void |
| ) |
|
|
static |
Definition at line 1 of file stacktrace.c.
39 unsigned long low = (
unsigned long)this_cpu_ptr_nvhe_sym(overflow_stack);
40 unsigned long high = low + OVERFLOW_STACK_SIZE;
42 return (
struct stack_info) {
◆ unwind()
static void unwind |
( |
struct unwind_state * |
state, |
|
|
stack_trace_consume_fn |
consume_entry, |
|
|
void * |
cookie |
|
) |
| |
|
static |
Definition at line 126 of file stacktrace.c.
132 if (!consume_entry(cookie, state->pc))
static int unwind_next(struct unwind_state *state)
◆ unwind_next()
static int unwind_next |
( |
struct unwind_state * |
state | ) |
|
|
static |
Definition at line 114 of file stacktrace.c.
123 return unwind_next_frame_record(state);
static bool kvm_nvhe_stack_kern_record_va(unsigned long *addr)