Re: [PATCH 8/8] KVM:PPC:booke: Allow debug interrupt injection to guest

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

 



On 07.02.2013, at 16:25, Bhushan Bharat-R65777 wrote:

> 
> 
>> -----Original Message-----
>> From: kvm-ppc-owner@xxxxxxxxxxxxxxx [mailto:kvm-ppc-owner@xxxxxxxxxxxxxxx] On
>> Behalf Of Alexander Graf
>> Sent: Thursday, February 07, 2013 8:29 PM
>> To: Wood Scott-B07421
>> Cc: Bhushan Bharat-R65777; kvm-ppc@xxxxxxxxxxxxxxx; kvm@xxxxxxxxxxxxxxx
>> Subject: Re: [PATCH 8/8] KVM:PPC:booke: Allow debug interrupt injection to guest
>> 
>> 
>> On 01.02.2013, at 23:38, Scott Wood wrote:
>> 
>>> On 01/31/2013 06:11:32 PM, Alexander Graf wrote:
>>>> On 31.01.2013, at 23:40, Scott Wood wrote:
>>>>> On 01/31/2013 01:20:39 PM, Alexander Graf wrote:
>>>>>> On 31.01.2013, at 20:05, Alexander Graf wrote:
>>>>>>> 
>>>>>>> On 31.01.2013, at 19:54, Scott Wood wrote:
>>>>>>> 
>>>>>>>> On 01/31/2013 12:52:41 PM, Alexander Graf wrote:
>>>>>>>>> On 31.01.2013, at 19:43, Scott Wood wrote:
>>>>>>>>>> On 01/31/2013 12:21:07 PM, Alexander Graf wrote:
>>>>>>>>>>> How about something like this? Then both targets at least suck as
>> much :).
>>>>>>>>>> 
>>>>>>>>>> I'm not sure that should be the goal...
>>>>>>>>>> 
>>>>>>>>>>> Thanks to e500mc's awful hardware design, we don't know who sets the
>> MSR_DE bit. Once we forced it onto the guest, we have no change to know whether
>> the guest also set it or not. We could only guess.
>>>>>>>>>> 
>>>>>>>>>> MSRP[DEP] can prevent the guest from modifying MSR[DE] -- but we
>> still need to set it in the first place.
>>>>>>>>>> 
>>>>>>>>>> According to ISA V2.06B, the hypervisor should set DBCR0[EDM] to let
>> the guest know that the debug resources are not available, and that "the value
>> of MSR[DE] is not specified and not modifiable".
>>>>>>>>> So what would the guest do then to tell the hypervisor that it
>> actually wants to know about debug events?
>>>>>>>> 
>>>>>>>> The guest is out of luck, just as if a JTAG were in use.
>>>>>>> 
>>>>>>> Hrm.
>>>>>>> 
>>>>>>> Can we somehow generalize this "out of luck" behavior?
>>>>>>> 
>>>>>>> Every time we would set or clear an MSR bit in shadow_msr on e500v2, we
>> would instead set or clear it in the real MSR. That way only e500mc is out of
>> luck, but the code would still be shared.
>>>>> 
>>>>> I don't follow.  e500v2 is just as out-of-luck.  The mechanism simply does
>> not support sharing debug resources.
>>>> For e500v2 we have 2 fields
>>>> * MSR as the guest sees it
>>>> * MSR as we execute when the guest runs Since we know the MSR when
>>>> the guest sees it, we can decide what to do when we get an unhandled debug
>> interrupt.
>>> 
>>> That's not the same thing as making the real MSR[DE] show up in the guest
>> MSR[DE].
>>> 
>>> There are other problems with sharing -- what happens when both host and guest
>> try to write to a particular IAC or DAC?
>>> 
>>> Also, performance would be pretty awful if the guest has e.g. single stepping
>> in DBCR0 enabled but MSR[DE]=0, and the host doesn't care about single stepping
>> (but does want debugging enabled in general).
>>> 
>>>>> What do you mean by "the real MSR"?  The real MSR is shadow_msr, and MSR_DE
>> must always be set there if the host is debugging the guest.  As for reflecting
>> it into the guest MSR, we could, but I don't really see the point.  We're never
>> going to actually send a debug exception to the guest when the host owns the
>> debug resources.
>>>> Why not? That's the whole point of jumping through user space.
>>> 
>>> That's still needed for software breakpoints, which don't rely on the debug
>> resources.
>>> 
>>>> 1) guest exits with debug interrupt
>>>> 2) QEMU gets a debug exit
>>>> 3) QEMU checks in its list whether it belongs to its own debug
>>>> points
>>>> 4) if not, it reinjects the interrupt into the guest Step 4 is
>>>> pretty difficult to do when we don't know whether the guest is actually
>> capable of handling debug interrupts at that moment.
>>> 
>>> Software breakpoints take a Program interrupt rather than a Debug interrupt,
>> unless MSR[DE]=1 and DBCR0[TRAP]=1.  If the guest does not own debug resources
>> we should always send it to the Program interrupt, so MSR[DE] doesn't matter.
>>> 
>>>>> The "&= ~MSR_DE" line is pointless on bookehv, and makes it harder to read.
>> I had to stare at it a while before noticing that you initially set is_debug
>> from the guest MSR and that you'd never really clear MSR_DE here on bookehv.
>>>> Well, I'm mostly bouncing ideas here to find a way to express what we're
>> trying to say in a way that someone who hasn't read this email thread would
>> still understand what's going on :).
>>> 
>>> I think it's already straightforward enough if you accept that shared debug
>> resources aren't supported, and that we are either in a mode where the real
>> MSR[DE] reflects the guest MSR[DE], or a mode where the real MSR[DE] is always
>> on in guest mode and the guest MSR[DE] is irrelevant.
>> 
>> I think I'm starting to grasp what you're suggesting:
>> 
>> On e500mc, have 2 modes
>> 
>>  1) guest owns debug
>> 
>>  This is the normal operation. Here the guest defines the value of MSR_DE. The
>> guest gets debug interrupts directly.
>> 
>>  2) host owns debug
>> 
>>  In this case, take away any debug capabilities from the guest. Everything
>> debug related goes straight to QEMU.
>> 
>> 
>> On e500v2, have 2 modes
>> 
>>  1) guest owns debug
>> 
>>  This is the normal operation. Here the guest defines the value of MSR_DE. The
>> guest gets debug interrupts directly.
>> 
>>  2) host and guest share debug
> 
> We are not allowing the sharing, it is same as (2) in e500mc.

I don't grasp why we would set MSR_DE in shadow_msr always then :).


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