[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 17:08, Jan Beulich wrote:
> On 02.02.2022 16:04, Oleksandr Andrushchenko wrote:
>>
>> On 02.02.22 16:31, Jan Beulich wrote:
>>> On 02.02.2022 15:26, Oleksandr Andrushchenko wrote:
>>>> 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?
>>> Again: Only one of INTX, MSI, or MSI-X may be enabled at a time.
>> This is clear and I don't question that
>>> This needs to be checked whenever any one of the three is about
>>> to change state. Since failing config space writes isn't really
>>> an option (there's no error code to hand back and raising an
>>> exception is nothing real hardware would do), adjusting state to
>>> be sane behind the back of the guest looks to be the least bad
>>> option.
>> Would it be enough if I read PCI_MSIX_FLAGS_ENABLE and
>> PCI_MSI_FLAGS_ENABLE in guest_cmd_write to make a
>> decision on INTX?
>>
>> On the other hand msi->enabled and msix->enabled
>> already have this information if I understand the
>> MSI/MSI-X code correctly.
>>
>> Or do we want some additional code in MSI/MSI-X's control_write
>> functions to set INTX bit there as well?
> Well, yes, this is what Roger and I have been asking you to add.
Do we only want this for !is_hardware_domain(d) or unconditionally?
>
>> I mean that in this guest_cmd_write handler we can only see
>> if we write a consistent wrt MSI/MSI-X PCI_COMMAND value
>>
>> If we want some more checks when we alter PCI_MSIX_FLAGS_ENABLE
>> and/or PCI_MSI_FLAGS_ENABLE bits, this means we need a relevant
>> PCI_COMMAND write there to be added (which doesn't exist now)
>> to make sure INTX bit is set.
> Exactly.
Ok
>
> Jan
>
Thank you,
Oleksandr

 


Rackspace

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