Hi Jan,

Jan Beulich <[email protected]> writes:

> On 30.08.2023 01:19, Volodymyr Babchuk wrote:
>> @@ -1481,6 +1488,13 @@ static int assign_device(struct domain *d, u16 seg, 
>> u8 bus, u8 devfn, u32 flag)
>>      if ( pdev->broken && d != hardware_domain && d != dom_io )
>>          goto done;
>>  
>> +    if ( IS_ENABLED(CONFIG_HAS_VPCI_GUEST_SUPPORT) )
>> +    {
>> +        write_lock(&pdev->domain->pci_lock);
>> +        vpci_deassign_device(pdev);
>> +        write_unlock(&pdev->domain->pci_lock);
>> +    }
>
> Why is the DomIO special case ...

vpci_deassign_device() does nothing if vPCI was initialized for a
domain. So it not wrong to call this function even if pdev belongs to dom_io.

>> @@ -1506,6 +1520,15 @@ static int assign_device(struct domain *d, u16 seg, 
>> u8 bus, u8 devfn, u32 flag)
>>          rc = iommu_call(hd->platform_ops, assign_device, d, devfn,
>>                          pci_to_dev(pdev), flag);
>>      }
>> +    if ( rc )
>> +        goto done;
>> +
>> +    if ( IS_ENABLED(CONFIG_HAS_VPCI_GUEST_SUPPORT) && d != dom_io)
>> +    {
>> +        write_lock(&d->pci_lock);
>> +        rc = vpci_assign_device(pdev);
>> +        write_unlock(&d->pci_lock);
>> +    }
>
> ... relevant only here?
>

There is no sense to initialize vPCI for dom_io.


-- 
WBR, Volodymyr

Reply via email to