From owner-svn-src-projects@FreeBSD.ORG Wed Oct 31 22:16:08 2012 Return-Path: <owner-svn-src-projects@FreeBSD.ORG> Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D35605F3; Wed, 31 Oct 2012 22:16:08 +0000 (UTC) (envelope-from cherry@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9F4DE8FC12; Wed, 31 Oct 2012 22:16:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9VMG80I045071; Wed, 31 Oct 2012 22:16:08 GMT (envelope-from cherry@svn.freebsd.org) Received: (from cherry@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9VMG8ru045068; Wed, 31 Oct 2012 22:16:08 GMT (envelope-from cherry@svn.freebsd.org) Message-Id: <201210312216.q9VMG8ru045068@svn.freebsd.org> From: "Cherry G. Mathew" <cherry@FreeBSD.org> Date: Wed, 31 Oct 2012 22:16:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r242418 - in projects/amd64_xen_pv/sys/amd64: amd64 xen X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" <svn-src-projects.freebsd.org> List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe> List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects> List-Post: <mailto:svn-src-projects@freebsd.org> List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help> List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, <mailto:svn-src-projects-request@freebsd.org?subject=subscribe> X-List-Received-Date: Wed, 31 Oct 2012 22:16:09 -0000 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 ;