[PATCH] drm/xe/pf: Don't advertise support to enable VFs if not ready

Lucas De Marchi lucas.demarchi at intel.com
Wed May 15 18:56:21 UTC 2024


On Tue, May 14, 2024 at 03:46:16PM GMT, Michal Wajdeczko wrote:
>
>
>On 14.05.2024 15:09, Lucas De Marchi wrote:
>> On Tue, May 07, 2024 at 06:57:57PM GMT, Michal Wajdeczko wrote:
>>> Even if we have not enabled SR-IOV support using the platform
>>> specific has_sriov flag, the hardware may still report SR-IOV
>>> capability and the PCI layer may wrongly advertise driver support
>>> to enable VFs.  Explicitly reset the number of supported VFs to
>>> zero to avoid confusion.
>>>
>>> Applications may read the /sys/bus/pci/devices/.../sriov_totalvfs
>>> prior to enabling VFs using the sriov_numvfs to check if such an
>>> operation is possible.
>>>
>>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_sriov.c | 11 +++++++++++
>>> 1 file changed, 11 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_sriov.c
>>> b/drivers/gpu/drm/xe/xe_sriov.c
>>> index 1c3fa84b6adb..a274a5fb1401 100644
>>> --- a/drivers/gpu/drm/xe/xe_sriov.c
>>> +++ b/drivers/gpu/drm/xe/xe_sriov.c
>>> @@ -53,6 +53,7 @@ static bool test_is_vf(struct xe_device *xe)
>>>  */
>>> void xe_sriov_probe_early(struct xe_device *xe)
>>> {
>>> +    struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>>>     enum xe_sriov_mode mode = XE_SRIOV_MODE_NONE;
>>>     bool has_sriov = xe->info.has_sriov;
>>>
>>> @@ -61,6 +62,16 @@ void xe_sriov_probe_early(struct xe_device *xe)
>>>             mode = XE_SRIOV_MODE_VF;
>>>         else if (xe_sriov_pf_readiness(xe))
>>>             mode = XE_SRIOV_MODE_PF;
>>> +    } else if (pci_sriov_get_totalvfs(pdev)) {
>>> +        /*
>>> +         * Even if we have not enabled SR-IOV support using the
>>> +         * platform specific has_sriov flag, the hardware may still
>>> +         * report SR-IOV capability and the PCI layer may wrongly
>>> +         * advertise driver support to enable VFs. Explicitly reset
>>> +         * the number of supported VFs to zero to avoid confusion.
>>
>> Aren't these 2 different things? The PCI layer is reporting SR-IOV
>> availability as reported by the HW, which doesn't mean the driver
>> supports it.
>
>Without support in our PF driver we can't support any VFs, even if HW is
>reporting that it can. What we do here is aligned what the PCI layer is
>expecting from the PF drivers if there is something to adjust - see [1]
>
>/sys/bus/pci/devices/.../sriov_totalvfs
>
>"This file appears when a physical PCIe device supports SR-IOV.
>Userspace applications can read this file to determine the
>maximum number of Virtual Functions (VFs) a PCIe physical
>function (PF) can support. Typically, this is the value reported
>in the PF's SR-IOV extended capability structure's TotalVFs
>element.  Drivers have the ability at probe time to reduce the
>value read from this file via the pci_sriov_set_totalvfs()
>function"


ok, makes sense. Thanks


Acked-by: Lucas De Marchi <lucas.demarchi at intel.com>

Lucas De Marchi

>
>[1]
>https://elixir.bootlin.com/linux/latest/source/Documentation/ABI/testing/sysfs-bus-pci#L289
>
>
>>
>> Lucas De Marchi
>>
>>> +         */
>>> +        drm_info(&xe->drm, "Support for SR-IOV is not available\n");
>>> +        pci_sriov_set_totalvfs(pdev, 0);
>>>     }
>>>
>>>     xe_assert(xe, !xe->sriov.__mode);
>>> -- 
>>> 2.43.0
>>>


More information about the Intel-xe mailing list