[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Single step in HVM domU on Intel machine may see wrong DB6


  • To: "Zhang, Yang Z" <yang.z.zhang@xxxxxxxxx>
  • From: Juergen Gross <juergen.gross@xxxxxxxxxxxxxx>
  • Date: Wed, 05 Mar 2014 07:02:04 +0100
  • Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, "Dong, Eddie" <eddie.dong@xxxxxxxxx>, "Nakajima, Jun" <jun.nakajima@xxxxxxxxx>, Jan Beulich <JBeulich@xxxxxxxx>
  • Delivery-date: Wed, 05 Mar 2014 06:02:43 +0000
  • Domainkey-signature: s=s1536a; d=ts.fujitsu.com; c=nofws; q=dns; h=X-SBRSScore:X-IronPort-AV:Received:X-IronPort-AV: Received:Message-ID:Date:From:Organization:User-Agent: MIME-Version:To:CC:Subject:References:In-Reply-To: Content-Type:Content-Transfer-Encoding; b=W2SJg/k+Np88wiF6bD2t8w4zvAfZM11QrWnESiE6VH+tin1R/bH8W71n JqBsWncFdYNMfG3Us6HgIk7LXgf6vL5JsnNqAv0cfF5AH5NhMBtbSbHET AQ84QV+akPzEy4fSJf7JoAJ+qniPZpOpnCKFZ35IHZJOjw31aIeW4ipTk NXvPIXOEA9MYbP5Z3apDXnD8fKxPknPirB32t9qT0wDrj1plGDpPJSOov vc9goqruOx8W3vp3SLUpVZV6Q/84c;
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>

On 05.03.2014 03:22, Zhang, Yang Z wrote:
Jan Beulich wrote on 2014-02-27:
On 27.02.14 at 02:31, "Zhang, Yang Z" <yang.z.zhang@xxxxxxxxx> wrote:
Jan Beulich wrote on 2014-02-27:
On 26.02.14 at 06:15, "Zhang, Yang Z" <yang.z.zhang@xxxxxxxxx>
wrote:
@@ -2690,9 +2688,13 @@ void vmx_vmexit_handler(struct
cpu_user_regs
*regs)
              __vmread(EXIT_QUALIFICATION, &exit_qualification);
              HVMTRACE_1D(TRAP_DEBUG, exit_qualification);
              write_debugreg(6, exit_qualification | 0xffff0ff0);
-            if ( !v->domain->debugger_attached ||
cpu_has_monitor_trap_flag ) -                goto exit_and_crash; -
        domain_pause_for_debugger(); +            if (
v->domain->debugger_attached ) +
domain_pause_for_debugger(); +            else +            { +
        __restore_debug_registers(v); +
hvm_inject_hw_exception(TRAP_debug,
HVM_DELIVER_NO_ERROR_CODE); +
      }

I suppose you need to set DR6.BS after restoring the reigsters?

Right but is not enough. If flag_dr_dirty is set, we need to restore
register from hardware. Conversely, restore is from debugreg and set
DR6 to exit_qualification.

After some more thought, I in fact doubt that restoring the debug
registers is in line with the current model: We should simply set
DR6.BS in the in-memory copy when the debug registers aren't live yet
(and it doesn't hurt to always do that). And since DR6 bits generally
are sticky, I think exit_qualification actually needs to be or-ed into the 
in-memory copy.

Will guest be confused to see the DR6.BS always set?

You can't set DR6.BS unconditionally! This bit should be set only in case
of a debug trap caused by single stepping, of course!

At least our BS2000 domU will crash in case of an unmotivated DR6.BS in debug
trap handling.


Juergen

--
Juergen Gross                 Principal Developer Operating Systems
PBG PDG ES&S SWE OS6                   Telephone: +49 (0) 89 62060 2932
Fujitsu                                   e-mail: juergen.gross@xxxxxxxxxxxxxx
Mies-van-der-Rohe-Str. 8                Internet: ts.fujitsu.com
D-80807 Muenchen                 Company details: ts.fujitsu.com/imprint.html

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.