[PATCH v5 10/11] drm/xe/configfs: Only allow configurations for supported devices

John Harrison john.c.harrison at intel.com
Tue Jul 29 22:20:45 UTC 2025


On 7/29/2025 2:40 PM, Rodrigo Vivi wrote:
> On Tue, Jul 29, 2025 at 01:42:14PM +0200, Michal Wajdeczko wrote:
>> Since we already lookup for the real PCI device before we allow
>> to create its directory config, we might also check if the found
>> device matches our driver PCI ID list. This will prevent creation
>> of the directory configs for the unsupported devices.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
>> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
>> ---
>> v2: rebased
>> ---
>>   drivers/gpu/drm/xe/xe_configfs.c | 17 +++++++++++++++++
>>   1 file changed, 17 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
>> index 5f145ccdf535..766775772eef 100644
>> --- a/drivers/gpu/drm/xe/xe_configfs.c
>> +++ b/drivers/gpu/drm/xe/xe_configfs.c
>> @@ -275,11 +275,22 @@ static const struct config_item_type xe_config_device_type = {
>>   	.ct_owner	= THIS_MODULE,
>>   };
>>   
>> +static const struct xe_device_desc *xe_match_desc(struct pci_dev *pdev)
>> +{
>> +	struct device_driver *driver = driver_find("xe", &pci_bus_type);
>> +	struct pci_driver *drv = to_pci_driver(driver);
>> +	const struct pci_device_id *ids = drv ? drv->id_table : NULL;
>> +	const struct pci_device_id *found = pci_match_id(ids, pdev);
>> +
>> +	return found ? (const void *)found->driver_data : NULL;
>> +}
>> +
>>   static struct config_group *xe_config_make_device_group(struct config_group *group,
>>   							const char *name)
>>   {
>>   	unsigned int domain, bus, slot, function;
>>   	struct xe_config_group_device *dev;
>> +	const struct xe_device_desc *match;
>>   	struct pci_dev *pdev;
>>   	char canonical[16];
>>   	int ret;
>> @@ -297,8 +308,14 @@ static struct config_group *xe_config_make_device_group(struct config_group *gro
>>   	pdev = pci_get_domain_bus_and_slot(domain, bus, PCI_DEVFN(slot, function));
>>   	if (!pdev)
>>   		return ERR_PTR(-ENODEV);
>> +
>> +	match = xe_match_desc(pdev);
>> +
>>   	pci_dev_put(pdev);
>>   
>> +	if (!match)
>> +		return ERR_PTR(-ECANCELED);
> why ECANCELED instead of ENODEV?
Or EINVAL? This is for when a user has created a directory for a PCI 
device that exists but it is not a Xe device? Seems like ENODEV is not 
the correct option given that the device does exist. But ECANCELED also 
seems odd.

John.

>
>> +
>>   	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
>>   	if (!dev)
>>   		return ERR_PTR(-ENOMEM);
>> -- 
>> 2.47.1
>>



More information about the Intel-xe mailing list