When causing a pagefault the page fault address is important for
debugging.
Signed-off-by: Henning Schild <henning.schild@siemens.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
panic_printk("Physical CPU ID: %d\n", phys_processor_id());
panic_printk("RIP: %p RSP: %p FLAGS: %x\n", frame->rip, frame->rsp,
frame->flags);
+ if (frame->vector == PF_VECTOR)
+ panic_printk("CR2: %p\n", read_cr2());
panic_stop();
}
#define X86_OP_MOV_FROM_MEM 0x8b
#define NMI_VECTOR 2
+#define PF_VECTOR 14
#define DESC_TSS_BUSY (1UL << (9 + 32))
#define DESC_PRESENT (1UL << (15 + 32))
asm volatile("mov %0,%%cr0" : : "r" (val), "m" (__force_order));
}
+static inline unsigned long read_cr2(void)
+{
+ unsigned long cr2;
+
+ asm volatile("mov %%cr2,%0" : "=r" (cr2), "=m" (__force_order));
+ return cr2;
+}
+
static inline unsigned long read_cr3(void)
{
unsigned long cr3;