qemu-ppc
[Top][All Lists]
Advanced

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

Re: [PATCH v4 06/25] ppc/pnv: Implement the XiveFabric interface


From: Cédric Le Goater
Subject: Re: [PATCH v4 06/25] ppc/pnv: Implement the XiveFabric interface
Date: Thu, 3 Oct 2019 11:47:24 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.0

On 03/10/2019 03:55, David Gibson wrote:
> On Wed, Sep 18, 2019 at 06:06:26PM +0200, Cédric Le Goater wrote:
>> The CAM line matching on the PowerNV machine now scans all chips of
>> the system and all CPUs of a chip to find a dispatched NVT in the
>> thread contexts.
>>
>> Signed-off-by: Cédric Le Goater <address@hidden>
>> ---
>>  hw/ppc/pnv.c | 32 ++++++++++++++++++++++++++++++++
>>  1 file changed, 32 insertions(+)
>>
>> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
>> index 77a86c6a2301..ca24dd62df23 100644
>> --- a/hw/ppc/pnv.c
>> +++ b/hw/ppc/pnv.c
>> @@ -1378,6 +1378,35 @@ static void pnv_pic_print_info(InterruptStatsProvider 
>> *obj,
>>      }
>>  }
>>  
>> +static int pnv_xive_match_nvt(XiveFabric *xfb, uint8_t format,
>> +                               uint8_t nvt_blk, uint32_t nvt_idx,
>> +                               bool cam_ignore, uint8_t priority,
>> +                               uint32_t logic_serv,
>> +                               XiveTCTXMatch *match)
>> +{
>> +    PnvMachineState *pnv = PNV_MACHINE(xfb);
>> +    int total_count = 0;
>> +    int i;
>> +
>> +    for (i = 0; i < pnv->num_chips; i++) {
>> +        Pnv9Chip *chip9 = PNV9_CHIP(pnv->chips[i]);
>> +        XivePresenter *xptr = XIVE_PRESENTER(&chip9->xive);
>> +        XivePresenterClass *xpc = XIVE_PRESENTER_GET_CLASS(xptr);
>> +        int count;
>> +
>> +        count = xpc->match_nvt(xptr, format, nvt_blk, nvt_idx, cam_ignore,
>> +                               priority, logic_serv, match);
>> +
>> +        if (count < 0) {
>> +            return count;
>> +        }
>> +
>> +        total_count += count;
>> +    }
>> +
>> +    return total_count;
>> +}
>> +
>>  static void pnv_get_num_chips(Object *obj, Visitor *v, const char *name,
>>                                void *opaque, Error **errp)
>>  {
>> @@ -1441,9 +1470,11 @@ static void pnv_machine_power8_class_init(ObjectClass 
>> *oc, void *data)
>>  static void pnv_machine_power9_class_init(ObjectClass *oc, void *data)
>>  {
>>      MachineClass *mc = MACHINE_CLASS(oc);
>> +    XiveFabricClass *xfc = XIVE_FABRIC_CLASS(oc);
>>  
>>      mc->desc = "IBM PowerNV (Non-Virtualized) POWER9";
>>      mc->default_cpu_type = POWERPC_CPU_TYPE_NAME("power9_v2.0");
>> +    xfc->match_nvt = pnv_xive_match_nvt;
>>  
>>      mc->alias = "powernv";
>>  }
>> @@ -1495,6 +1526,7 @@ static void pnv_machine_class_init(ObjectClass *oc, 
>> void *data)
>>          .interfaces = (InterfaceInfo[]) {               \
>>              { TYPE_XICS_FABRIC },                       \
>>              { TYPE_INTERRUPT_STATS_PROVIDER },          \
>> +            { TYPE_XIVE_FABRIC },                       \
> 
> Hmm.. this should probably be on the powernv9 machine only, not
> powernv8 as well, yes?

you are right. 

Thanks,

C. 


> 
>>              { },                                        \
>>          },                                              \
>>      }
> 




reply via email to

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