[PATCH v4 3/3] KVM: PPC: epapr: install ev_idle hcall for e500 guest

Alexander Graf agraf at suse.de
Fri Feb 17 04:30:39 EST 2012


On 16.02.2012, at 18:28, Scott Wood wrote:

> On 02/16/2012 11:18 AM, Alexander Graf wrote:
>> 
>> On 16.02.2012, at 17:58, Scott Wood wrote:
>> 
>>> On 02/16/2012 04:24 AM, Alexander Graf wrote:
>>>> On 16.02.2012, at 10:26, Liu Yu <yu.liu at freescale.com> wrote:
>>>>> +_GLOBAL(epapr_ev_idle)
>>>>> +epapr_ev_idle:
>>>>> +    rlwinm    r3,r1,0,0,31-THREAD_SHIFT    /* current thread_info */
>>>>> +    lwz    r4,TI_LOCAL_FLAGS(r3)    /* set napping bit */
>>>>> +    ori    r4,r4,_TLF_NAPPING    /* so when we take an exception */
>>>>> +    stw    r4,TI_LOCAL_FLAGS(r3)    /* it will return to our caller */
>>>>> +
>>>>> +    wrteei    1
>>>>> +
>>>>> +idle_loop:
>>>>> +    LOAD_REG_IMMEDIATE(r11, HC_VENDOR_EPAPR | HC_EV_IDLE)
>>>>> +
>>>>> +.global epapr_ev_idle_start
>>>>> +epapr_ev_idle_start:
>>>>> +    li    r3, -1
>>>>> +    nop
>>>>> +    nop
>>>>> +    nop
>>>> 
>>>> Can't you just bl into epapr_hypercall_start? You don't even have to save the old lr. because we never return anyways :)
>>> 
>>> The interrupt will branch to LR, so no, we can't trash it or put it
>>> anywhere else.
>> 
>> Hrm. But we can clobber ctr, right? So how about we make the generic version do a bctr and then just do a small C wrapper that takes lr, moves it to ctr and branches to the generic one?
> 
> If it's just for this, I would say don't mess with the normal hcall path
> for the sake of idle.  If using CTR would let us get away without
> creating a stack frame in call sites, maybe that would be worthwhile,
> depending on what sort of hcalls we end up having.
> 
>> Then we don't have to replicate the hypercall code all over again for every invocation.
> 
> We shouldn't need to do it for every invocation.  Idle is special due to
> the TLF_NAPPING hack.

Famous last words. If it's the only case, duplication should be ok. Let's hope there are no others.


Alex



More information about the Linuxppc-dev mailing list