Date: Wed, 31 Oct 2012 22:16:08 +0000 (UTC) From: "Cherry G. Mathew" <cherry@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r242418 - in projects/amd64_xen_pv/sys/amd64: amd64 xen Message-ID: <201210312216.q9VMG8ru045068@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: cherry Date: Wed Oct 31 22:16:08 2012 New Revision: 242418 URL: http://svn.freebsd.org/changeset/base/242418 Log: Fetch %cr2 from xen via the shared page save it on the stack frame before trap() is called. Approved by: gibbs (implicit) Modified: projects/amd64_xen_pv/sys/amd64/amd64/genassym.c projects/amd64_xen_pv/sys/amd64/xen/exception.S Modified: projects/amd64_xen_pv/sys/amd64/amd64/genassym.c ============================================================================== --- projects/amd64_xen_pv/sys/amd64/amd64/genassym.c Wed Oct 31 22:11:51 2012 (r242417) +++ projects/amd64_xen_pv/sys/amd64/amd64/genassym.c Wed Oct 31 22:16:08 2012 (r242418) @@ -255,6 +255,7 @@ ASSYM(PMC_FN_USER_CALLCHAIN, PMC_FN_USER #include <xen/hypervisor.h> ASSYM(HYPERVISOR_VIRT_START, __HYPERVISOR_VIRT_START); ASSYM(EVTCHN_UPCALL_MASK, offsetof(struct vcpu_info, evtchn_upcall_mask)); +ASSYM(VCPU_RCR2, offsetof(struct vcpu_info, arch.cr2)); #include <xen/interface/xen.h> ASSYM(__HYPERVISOR_iret, __HYPERVISOR_iret); #endif Modified: projects/amd64_xen_pv/sys/amd64/xen/exception.S ============================================================================== --- projects/amd64_xen_pv/sys/amd64/xen/exception.S Wed Oct 31 22:11:51 2012 (r242417) +++ projects/amd64_xen_pv/sys/amd64/xen/exception.S Wed Oct 31 22:16:08 2012 (r242418) @@ -140,6 +140,14 @@ movl $(a), TF_TRAPNO(%rsp) ; \ movq $0, TF_ADDR(%rsp) +/* Fetch page fault address (%cr2) from hypervisor */ +#define SETUP_TF_ADDR /* Clobbers %rsi %rdi */ \ + movq PCPU(CPUID), %rsi ; \ + shlq $6, %rsi /* cpuid * sizeof(struct vcpu_info) */ ; \ + addq HYPERVISOR_shared_info, %rsi /* shared_info.vcpu_info[cpuid] */ ; \ + movq VCPU_RCR2(%rsi), %rdi ; \ + movq %rdi, TF_ADDR(%rsp) + #define CALLTRAP \ cld ; \ movq %rsp, %rdi ; \ @@ -397,7 +405,8 @@ IDTVEC(pf) /* Page-Fault */ SAVE_SEGMENT_REGS ; SAVE_GENERAL_REGS ; DO_STI_MAYBE ; - CALLTRAP ; + SETUP_TF_ADDR ; /* Fault Address - clobbers %rsi %rdi */ + CALLTRAP ; /* %rsi is ignored */ DO_AST_MAYBE ; RESTORE_GENERAL_REGS ; RESTORE_SEGMENT_REGS ;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201210312216.q9VMG8ru045068>