qemu-ppc
[Top][All Lists]
Advanced

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

Re: [Qemu-ppc] [PATCH 19/25] spapr: add hcalls support for the XIVE inte


From: Cédric Le Goater
Subject: Re: [Qemu-ppc] [PATCH 19/25] spapr: add hcalls support for the XIVE interrupt mode
Date: Tue, 5 Dec 2017 16:12:14 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0

[ ... ] 

>>>> +static bool priority_is_valid(uint32_t priority)
>>>> +{
>>>> +    int i;
>>>> +
>>>> +    for (i = 0; i < ARRAY_SIZE(reserved_priorities) / 2; i++) {
>>>> +        uint32_t base  = reserved_priorities[2 * i];
>>>> +        uint32_t count = reserved_priorities[2 * i + 1];
>>>> +
>>>> +        if (priority >= base && priority < base + count) {
>>>> +            qemu_log_mask(LOG_GUEST_ERROR, "%s: priority %d is 
>>>> reserved\n",
>>>> +                          __func__, priority);
>>>> +            return false;
>>>> +        }
>>>> +    }
>>>> +
>>>> +    return true;
>>>> +}
>>>
>>> This seems like overkill.  Aren't there only 0..7 levels supported in
>>> hardware, in which case a one byte bitmap will suffice to store the
>>> reserved levels.
>>
>> I was trying the use the same array that will be exposed in the device
>> tree in the "ibm,plat-res-int-priorities" property, defined as 
>> follow in PAPR:
>>
>>      property name that designates to the client program that the
>>      platform has reserved one or more interrupt priorities for its
>>      own use.
>>      
>>      prop-encoded-value: one or more (interrupt priority, range)
>>      pairs, where interrupt priority is a single cell hexidec- imal
>>      number between 0x00 and 0xFF, and range is an integer encoded as
>>      with encode-int that represents the number of contiguous
>>      interrupt priorities that have been reserved by the platform for
>>      its internal use.
>>
>>
>> But I agree, it's a bit overkill to check for 0..7 levels ...
> 
> Ok, I do see the point here.  Hmm.. not sure where best to go with
> this.  One source of data is always good, and this is probably less
> complex than deriving the DT list from a bitmap.
> 
> On the other hand I am wary these days of over-generalizing, since it
> can lead to nightmares for migration consistency.

I should be able to simplify by using one array of valid priorities
for the guest, and from that build the array of reserved priorities 
for the platform. 
 
[ ... ]

>>>> +    mmio_base = (uint64_t)xive->esb_base + (1ull << xive->esb_shift) * 
>>>> lisn;
>>>
>>> Hrm.. why was xive->esb_base not already a u64?
>>
>> its an 'hwaddr'. Yes I can remove it.
> 
> Right.  mmio_base should be a hwaddr too, so you shouldn't need a cast.

yes.

[ ... ]

>>> What does the availability of SRC_TRIGGER (and INT_ESB) depend on? 
>>
>> The CPU revision. But we won't introduce XIVE exploitation mode on 
>> anything else than DD2.0 which has full XIVE support. Even STORE_EOI 
>> that we should be adding.
> 
> Hrm.  Host CPU?  That's a problem - if guest visible properties like
> this vary with the host CPU, migration breaks.
> 
>>
>>> If it varies with host capabilities, that's going to be real pain for
>>> migration.
>>
>> Yes. I am not aware of any future extension but I agree this is
>> something we need to keep an eye on.
> 
> I'm not talking about future extension, I'm meaning right now.

I think Ben has answered these questions.

[ ... ] 

>> On that topic, could we include the PPC_BIT* macros somewhere under ppc ? 
> 
> Uh, sure, why not. target/ppc/cpu.h seems the logical place.

I will send a preliminary patch for 2.12 then.


Thanks,


C.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]