[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>
@@ -2690,9 +2688,13 @@ void vmx_vmexit_handler(struct
              __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); +

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 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



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