On 08/24/2018 05:38 PM, Greg Kurz wrote:
> On Fri, 24 Aug 2018 17:30:12 +0200
> Cédric Le Goater <[email protected]> wrote:
>
>> On 08/24/2018 05:09 PM, Peter Maydell wrote:
>>> On 21 August 2018 at 05:33, David Gibson <[email protected]>
>>> wrote:
>>>> From: Cédric Le Goater <[email protected]>
>>>>
>>>> It should save us some CPU cycles as these routines perform a lot of
>>>> checks.
>>>>
>>>> Signed-off-by: Cédric Le Goater <[email protected]>
>>>> Signed-off-by: David Gibson <[email protected]>
>>>> ---
>>>> hw/ppc/spapr_pci.c | 11 ++++++-----
>>>> 1 file changed, 6 insertions(+), 5 deletions(-)
>>>
>>> Hi; Coverity points out in CID 1395183 that there's a bug in
>>> this part of this patch:
>>>
>>>> @@ -1558,6 +1559,7 @@ static void spapr_phb_realize(DeviceState *dev,
>>>> Error **errp)
>>>> sPAPRMachineState *spapr =
>>>> (sPAPRMachineState *) object_dynamic_cast(qdev_get_machine(),
>>>> TYPE_SPAPR_MACHINE);
>>>> + sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr);
>>>
>>> This has moved the call to SPAPR_MACHINE_GET_CLASS() above
>>> the check for "is spapr NULL", which is wrong, because it
>>> will unconditionally dereference the pointer you pass to it.
>>
>
> I've sent a trivial patch to fix this.
yes. Looks good. But,
>
>> I see. This is a simple fix but the root reason for this check is
>> commit f7d6bfcdc0fe ("spapr_pci: fail gracefully with non-pseries
>> machine types").
>>
>
> Yeah, we also have one in spapr_cpu_core_realize() for the very
> same reason.
>
>> Is there a way to specify which device type can or can not be
>> plugged on a machine ?
>>
>> I suppose we cannot use :
>>
>> machine_class_allow_dynamic_sysbus_dev()
>>
>> for cold plugged devices. Or can we ? That would be better.
>>
>
> Hmm... not sure this would help. The root problem is that many
> places in spapr_pci and spapr_cpu_core assume the machine is
> sPAPR.
which is a perfectly legitimate assumption for a sPAPR only device,
same for spapr_cpu_core. I would think. Shouldn't we enforce
the restriction at the machine level instead and not at the device
level ?
I thought that was the purpose of commit 0bd1909da606 ("machine:
Replace has_dynamic_sysbus with list of allowed devices"), to
make sure machines had a predefined list of user-creatable devices.
I might be missing something.
Thanks,
C.