From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: Re: Debug-Registers in HVM domain destroyed Date: Fri, 14 Feb 2014 13:18:42 +0100 Message-ID: <52FE09A2.4000909@ts.fujitsu.com> References: <52FDE2ED.4030008@ts.fujitsu.com> <52FE00C8020000780011C649@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WEHqd-0002tC-UK for xen-devel@lists.xenproject.org; Fri, 14 Feb 2014 12:26:28 +0000 In-Reply-To: <52FE00C8020000780011C649@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 List-Id: xen-devel@lists.xenproject.org On 14.02.2014 11:40, Jan Beulich wrote: >>>> On 14.02.14 at 10:33, Juergen Gross wrote: >> Debug registers are restored on vcpu switch only if db7 has any debug events >> activated. This leads to problems in the following cases: >> >> - db0-3 are changed by the guest before events are set "active" in db7. In case >> of a vcpu switch between setting db0-3 and db7, db0-3 are lost. BTW: setting >> db7 before db0-3 is no option, as this could trigger debug interrupts due to >> stale db0-3 contents. >> >> - single stepping is used and vcpu switch occurs between the single step trap >> and reading of db6 in the guest. db6 contents (single step indicator) are >> lost in this case. > > Not exactly, at least not looking at how things are supposed to work: > __restore_debug_registers() gets called when > - context switching in (vmx_restore_dr()) > - injecting TRAP_debug Is this the case when the guest itself uses single stepping? Initially the debug trap shouldn't cause a VMEXIT, I think. And I'm not sure the hypervisor will see a guest setting TF via an IRET. I _have_ seen a debug trap in the guest after single stepping without db6 having the single step indicator set... > - any DRn is being accessed > > So when your guest writes DR[0-3], debug registers should get > restored (from their original zero values) and the guest would be > permitted direct access to the hardware registers. Once context > switched out, vmx_save_dr() ought to be saving the values > (irrespective of DR7 contents, only depending upon > v->arch.hvm_vcpu.flag_dr_dirty). During the next context > switch in, they would get restored immediately if DR7 already has > some breakpoint enabled, or again during first DR access if not. Okay, I'll check that. A little test routine in my domU should be able to verify that debug registers won't change under it's feet in case of no activated events in db7. Juergen -- Juergen Gross Principal Developer Operating Systems PBG PDG ES&S SWE OS6 Telephone: +49 (0) 89 62060 2932 Fujitsu e-mail: juergen.gross@ts.fujitsu.com Mies-van-der-Rohe-Str. 8 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html