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

Re: [PATCH v5 09/14] vpci/header: emulate PCI_COMMAND register for guests




On 02.02.22 16:18, Jan Beulich wrote:
> On 02.02.2022 14:47, Oleksandr Andrushchenko wrote:
>>> On 02.02.2022 13:49, Oleksandr Andrushchenko wrote:
>>>> On 13.01.22 12:50, Roger Pau Monné wrote:
>>>>> On Thu, Nov 25, 2021 at 01:02:46PM +0200, Oleksandr Andrushchenko wrote:
>>>>>> --- a/xen/drivers/vpci/header.c
>>>>>> +++ b/xen/drivers/vpci/header.c
>>>>>> @@ -491,6 +491,22 @@ static void cmd_write(const struct pci_dev *pdev, 
>>>>>> unsigned int reg,
>>>>>>             pci_conf_write16(pdev->sbdf, reg, cmd);
>>>>>>     }
>>>>>>     
>>>>>> +static void guest_cmd_write(const struct pci_dev *pdev, unsigned int 
>>>>>> reg,
>>>>>> +                            uint32_t cmd, void *data)
>>>>>> +{
>>>>>> +    /* TODO: Add proper emulation for all bits of the command register. 
>>>>>> */
>>>>>> +
>>>>>> +#ifdef CONFIG_HAS_PCI_MSI
>>>>>> +    if ( pdev->vpci->msi->enabled )
>>>>> You need to check for MSI-X also, pdev->vpci->msix->enabled.
>>>> Indeed, thank you
>>>>>> +    {
>>>>>> +        /* Guest wants to enable INTx. It can't be enabled if MSI/MSI-X 
>>>>>> enabled. */
>>>>>> +        cmd |= PCI_COMMAND_INTX_DISABLE;
>>>>> You will also need to make sure PCI_COMMAND_INTX_DISABLE is set in the
>>>>> command register when attempting to enable MSI or MSIX capabilities.
>>>> Isn't it enough that we just check above if MSI/MSI-X enabled then make
>>>> sure INTX disabled? I am not following you here on what else needs to
>>>> be done.
>>> No, you need to deal with the potentially bad combination on both
>>> paths - command register writes (here) and MSI/MSI-X control register
>>> writes (which is what Roger points you at). I would like to suggest
>>> to consider simply forcing INTX_DISABLE on behind the guest's back
>>> for those other two paths.
>> Do you suggest that we need to have some code which will
>> write PCI_COMMAND while we write MSI/MSI-X control register
>> for that kind of consistency? E.g. control register handler will
>> need to write to PCI_COMMAND and go through emulation for
>> guests?
> Either check or write, yes. Since you're setting the bit here behind
> the guest's back, setting it on the other paths as well would only
> look consistent to me.
I can't find any access to PCI_COMMAND register from vMSI/vMSI-X
code, so what's the concern? This seems to be the only place in vPCI
which touches PCI_COMMAND register.
>
>> If so, why didn't we have that before?
> Because we assume Dom0 to be behaving itself.
ok...
>
> Jan
>
Thank you,
Oleksandr

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.