On Wed, Jul 15, 2020 at 10:47:52AM +0200, Peter Zijlstra wrote:
> On Tue, Jul 14, 2020 at 02:09:05PM +0200, Joerg Roedel wrote:
> 
> > @@ -1028,6 +1036,16 @@ DEFINE_IDTENTRY_VC_SAFE_STACK(exc_vmm_communication)
> >     struct ghcb *ghcb;
> >  
> >     lockdep_assert_irqs_disabled();
> > +
> > +   /*
> > +    * #DB is special and needs to be handled outside of the 
> > intrumentation_begin()/end().
> > +    * Otherwise the #VC handler could be raised recursivly.
> > +    */
> > +   if (error_code == SVM_EXIT_EXCP_BASE + X86_TRAP_DB) {
> > +           vc_handle_trap_db(regs);
> > +           return;
> > +   }
> > +
> >     instrumentation_begin();
> 
> Wait what?! That makes no sense what so ever.

Then my understanding of intrumentation_begin/end() is wrong, I thought
that the kernel will forbid setting breakpoints before
instrumentation_begin(), which is necessary here because a break-point
in the #VC handler might cause recursive #VC-exceptions when #DB is
intercepted.
Maybe you can elaborate on why this makes no sense?

Regards,

        Joerg

Reply via email to