RE: [PATCH 4/4 v2] KVM: PPC: Add userspace debug stub support

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

 




> -----Original Message-----
> From: Alexander Graf [mailto:agraf@xxxxxxx]
> Sent: Wednesday, April 03, 2013 7:39 PM
> To: Bhushan Bharat-R65777
> Cc: Wood Scott-B07421; kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH 4/4 v2] KVM: PPC: Add userspace debug stub support
> 
> 
> On 03.04.2013, at 15:50, Bhushan Bharat-R65777 wrote:
> 
> >
> >
> >> -----Original Message-----
> >> From: kvm-ppc-owner@xxxxxxxxxxxxxxx
> >> [mailto:kvm-ppc-owner@xxxxxxxxxxxxxxx] On Behalf Of Alexander Graf
> >> Sent: Wednesday, April 03, 2013 3:58 PM
> >> To: Bhushan Bharat-R65777
> >> Cc: Wood Scott-B07421; kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx
> >> Subject: Re: [PATCH 4/4 v2] KVM: PPC: Add userspace debug stub
> >> support
> >>
> >>
> >>
> >> Am 03.04.2013 um 12:03 schrieb Bhushan Bharat-R65777 <R65777@xxxxxxxxxxxxx>:
> >>
> >>>
> >>>
> >>>> -----Original Message-----
> >>>> From: Wood Scott-B07421
> >>>> Sent: Tuesday, April 02, 2013 11:30 PM
> >>>> To: Bhushan Bharat-R65777
> >>>> Cc: Alexander Graf; kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx;
> >>>> Wood Scott-
> >>>> B07421
> >>>> Subject: Re: [PATCH 4/4 v2] KVM: PPC: Add userspace debug stub
> >>>> support
> >>>>
> >>>> On 04/02/2013 09:09:34 AM, Bhushan Bharat-R65777 wrote:
> >>>>>
> >>>>>
> >>>>>> -----Original Message-----
> >>>>>> From: Alexander Graf [mailto:agraf@xxxxxxx]
> >>>>>> Sent: Tuesday, April 02, 2013 1:57 PM
> >>>>>> To: Bhushan Bharat-R65777
> >>>>>> Cc: kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; Wood
> >>>>>> Scott-B07421
> >>>>>> Subject: Re: [PATCH 4/4 v2] KVM: PPC: Add userspace debug stub
> >>>>> support
> >>>>>>
> >>>>>>
> >>>>>> On 29.03.2013, at 07:04, Bhushan Bharat-R65777 wrote:
> >>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Alexander Graf [mailto:agraf@xxxxxxx]
> >>>>>>>> Sent: Thursday, March 28, 2013 10:06 PM
> >>>>>>>> To: Bhushan Bharat-R65777
> >>>>>>>> Cc: kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; Wood
> >>>>> Scott-B07421;
> >>>>>>>> Bhushan
> >>>>>>>> Bharat-R65777
> >>>>>>>> Subject: Re: [PATCH 4/4 v2] KVM: PPC: Add userspace debug stub
> >>>>>>>> support
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> How does the normal debug register switching code work in Linux?
> >>>>>>>> Can't we just reuse that? Or rely on it to restore working
> >>>>>>>> state
> >>>>> when
> >>>>>>>> another process gets scheduled in?
> >>>>>>>
> >>>>>>> Good point, I can see debug registers loading in function
> >>>>> __switch_to()-
> >>>>>>> switch_booke_debug_regs() in file arch/powerpc/kernel/process.c.
> >>>>>>> So as long as assume that host will not use debug resources we
> >>>>> can rely on
> >>>>>> this restore. But I am not sure that this is a fare assumption.
> >>>>>> As
> >>>>> Scott earlier
> >>>>>> mentioned someone can use debug resource for kernel debugging also.
> >>>>>>
> >>>>>> Someone in the kernel can also use floating point registers. But
> >>>>> then it's his
> >>>>>> responsibility to clean up the mess he leaves behind.
> >>>>>
> >>>>> I am neither convinced by what you said and nor even have much
> >>>>> reason to oppose :)
> >>>>>
> >>>>> Scott,
> >>>>>   I remember you mentioned that host can use debug resources, you
> >>>>> comment on this ?
> >>>>
> >>>> I thought the conclusion we reached was that it was OK as long as
> >>>> KVM waits until it actually needs the debug resources to mess with the
> registers.
> >>>
> >>> Right,  Are we also agreeing on that KVM will not save/restore host
> >>> debug
> >> context on vcpu_load/vcpu_put()? KVM will load its context in
> >> vcpu_load() if needed and on vcpu_put() it will clear DBCR0 and DBSR.
> >>
> >> That depends on whether the kernel restores the debug registers.
> >> Please double- check that.
> >
> > Currently the kernel code restore the debug state of new schedule process in
> context_switch().
> >
> > switch_booke_debug_regs() from __switch_to() and defined as :
> > /*
> > * Unless neither the old or new thread are making use of the
> > * debug registers, set the debug registers from the values
> > * stored in the new thread.
> > */
> > static void switch_booke_debug_regs(struct thread_struct *new_thread)
> > {
> >        if ((current->thread.dbcr0 & DBCR0_IDM)
> >                || (new_thread->dbcr0 & DBCR0_IDM))
> >                        prime_debug_regs(new_thread); }
> >
> > static void prime_debug_regs(struct thread_struct *thread) {
> >        mtspr(SPRN_IAC1, thread->iac1);
> >        mtspr(SPRN_IAC2, thread->iac2); #if CONFIG_PPC_ADV_DEBUG_IACS >
> > 2
> >        mtspr(SPRN_IAC3, thread->iac3);
> >        mtspr(SPRN_IAC4, thread->iac4); #endif
> >        mtspr(SPRN_DAC1, thread->dac1);
> >        mtspr(SPRN_DAC2, thread->dac2); #if CONFIG_PPC_ADV_DEBUG_DVCS >
> > 0
> >        mtspr(SPRN_DVC1, thread->dvc1);
> >        mtspr(SPRN_DVC2, thread->dvc2); #endif
> >        mtspr(SPRN_DBCR0, thread->dbcr0);
> >        mtspr(SPRN_DBCR1, thread->dbcr1); #ifdef CONFIG_BOOKE
> >        mtspr(SPRN_DBCR2, thread->dbcr2); #endif } This is analogous to
> > moving from guest to/from QEMU. so we can make prime_debug_regs() available to
> kvm code for heavyweight_exit. And vcpu_load() will load guest state and save
> host state (update thread->debug_registers).
> 
> I don't think we need to do anything on vcpu_load if we just swap the thread-
> >debug_registers. Just make sure to restore them before you return from a heavy
> weight exit.

My understanding is :

1)
When VCPU is running      -> h/w debug registers have vcpu->arch.debug_registers
Goes for heavyweight_exit -> h/w debug registers are loaded with thread->debug_registers
Return from heavyweight_exit and run vcpu -> h/w debug registers have vcpu->arch.debug_registers. Do we need to save thread->debug_registers , probably no as the thread->debug_registers are upto date.

2)
KVM to kernel -> clear DBSR and DBCR0
Kernel to KVM -> load vcpu->arch.debug_registers.

> 
> > And the kernel exception handling code clear DBSR and load DBCR0 with
> > 0 (global_dbcr0 variable, which is zero) in transfer_to_handler in entry_32.S
> This is analogous to switching from KVM to kernel.
> > But I do not same (clearing DBCR0 and DBSR) in 64bit exception handler. Is
> this a problem or I am missing something.
> 
> That one's up for the normal ppc ML to answer :).

Will take this on ppc mailing list.

Thanks
-Bharat

> 
> 
> Alex
> 


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux