From mboxrd@z Thu Jan 1 00:00:00 1970 From: Razvan Cojocaru Subject: Re: RIP register value in p2m_mem_access_check() Date: Wed, 06 Mar 2013 15:49:01 +0200 Message-ID: <5137494D.7010901@gmail.com> References: <5137208F.7000901@gmail.com> <5137335602000078000C3815@nat28.tlf.novell.com> <513729E8.2060007@gmail.com> <5137512C02000078000C394B@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <5137512C02000078000C394B@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org > That wouldn't match your observation (the two values were > much farther apart), unless a call or jump got emulated. > > Further, after emulation, the user_regs.eip value should be the > canonical one. Well, I've downloaded and installed a fresh copy of Xen 4.2.0 from the official website, and added the printk() to p2m.c (the only modification I've done): 1311 req->vcpu_id = v->vcpu_id; 1312 1313 printk("v->arch.user_regs.eip: 0x%016lx, __vmread(GUEST_RIP):0x%016lx\n", 1314 v->arch.user_regs.eip, __vmread(GUEST_RIP)); 1315 } I then launched my guest VM, and tested it with the xen-access tool from tools/tests/xen-access, which I've run like this (1 is the machine ID, as printed out by 'sudo xm list'): sudo ./xen-access 1 write Here's what the hypervisor wrote (values that are different appear once per each VCPU): (XEN) HVM1: Booting from 0000:7c00 (XEN) v->arch.user_regs.eip: 0x00000000fc002de9, __vmread(GUEST_RIP):0x0000000000007c17 (XEN) v->arch.user_regs.eip: 0x0000000000007c17, __vmread(GUEST_RIP):0x0000000000000667 (XEN) v->arch.user_regs.eip: 0x0000000000000667, __vmread(GUEST_RIP):0x0000000000000116 (XEN) v->arch.user_regs.eip: 0x0000000000000116, __vmread(GUEST_RIP):0x0000000000000116 (XEN) v->arch.user_regs.eip: 0x0000000000000116, __vmread(GUEST_RIP):0x00000000000005ab (XEN) v->arch.user_regs.eip: 0x00000000000005ab, __vmread(GUEST_RIP):0x00000000000001e7 (XEN) v->arch.user_regs.eip: 0x00000000000001e7, __vmread(GUEST_RIP):0x00000000000001f3 (XEN) v->arch.user_regs.eip: 0x00000000000001f3, __vmread(GUEST_RIP):0x0000000000000b71 (XEN) v->arch.user_regs.eip: 0x0000000000000b71, __vmread(GUEST_RIP):0x0000000000000782 (XEN) v->arch.user_regs.eip: 0x0000000000000782, __vmread(GUEST_RIP):0x0000000000000782 (XEN) v->arch.user_regs.eip: 0x0000000000000782, __vmread(GUEST_RIP):0x0000000000000782 Not sure what's going on, but this time the only code I've added is the printk(). Any thoughts? Thanks, Razvan Cojocaru