PCI: endpoint: Fix NULL pointer dereference error when CONFIGFS is disabled
commitef1433f717
("PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry") while adding configfs entry for each pci_epf_device_id table entry introduced a NULL pointer dereference error when CONFIG_PCI_ENDPOINT_CONFIGFS is not enabled. Fix it here. Fixes:ef1433f717
("PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry") Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> [lorenzo.pieralisi: updated commit log] Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
35a88a18d7
commit
a83a217344
@ -137,6 +137,20 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t size, enum pci_barno bar)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pci_epf_alloc_space);
|
EXPORT_SYMBOL_GPL(pci_epf_alloc_space);
|
||||||
|
|
||||||
|
static void pci_epf_remove_cfs(struct pci_epf_driver *driver)
|
||||||
|
{
|
||||||
|
struct config_group *group, *tmp;
|
||||||
|
|
||||||
|
if (!IS_ENABLED(CONFIG_PCI_ENDPOINT_CONFIGFS))
|
||||||
|
return;
|
||||||
|
|
||||||
|
mutex_lock(&pci_epf_mutex);
|
||||||
|
list_for_each_entry_safe(group, tmp, &driver->epf_group, group_entry)
|
||||||
|
pci_ep_cfs_remove_epf_group(group);
|
||||||
|
list_del(&driver->epf_group);
|
||||||
|
mutex_unlock(&pci_epf_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pci_epf_unregister_driver() - unregister the PCI EPF driver
|
* pci_epf_unregister_driver() - unregister the PCI EPF driver
|
||||||
* @driver: the PCI EPF driver that has to be unregistered
|
* @driver: the PCI EPF driver that has to be unregistered
|
||||||
@ -145,17 +159,38 @@ EXPORT_SYMBOL_GPL(pci_epf_alloc_space);
|
|||||||
*/
|
*/
|
||||||
void pci_epf_unregister_driver(struct pci_epf_driver *driver)
|
void pci_epf_unregister_driver(struct pci_epf_driver *driver)
|
||||||
{
|
{
|
||||||
struct config_group *group, *tmp;
|
pci_epf_remove_cfs(driver);
|
||||||
|
|
||||||
mutex_lock(&pci_epf_mutex);
|
|
||||||
list_for_each_entry_safe(group, tmp, &driver->epf_group, group_entry)
|
|
||||||
pci_ep_cfs_remove_epf_group(group);
|
|
||||||
list_del(&driver->epf_group);
|
|
||||||
mutex_unlock(&pci_epf_mutex);
|
|
||||||
driver_unregister(&driver->driver);
|
driver_unregister(&driver->driver);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pci_epf_unregister_driver);
|
EXPORT_SYMBOL_GPL(pci_epf_unregister_driver);
|
||||||
|
|
||||||
|
static int pci_epf_add_cfs(struct pci_epf_driver *driver)
|
||||||
|
{
|
||||||
|
struct config_group *group;
|
||||||
|
const struct pci_epf_device_id *id;
|
||||||
|
|
||||||
|
if (!IS_ENABLED(CONFIG_PCI_ENDPOINT_CONFIGFS))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&driver->epf_group);
|
||||||
|
|
||||||
|
id = driver->id_table;
|
||||||
|
while (id->name[0]) {
|
||||||
|
group = pci_ep_cfs_add_epf_group(id->name);
|
||||||
|
if (IS_ERR(group)) {
|
||||||
|
pci_epf_remove_cfs(driver);
|
||||||
|
return PTR_ERR(group);
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex_lock(&pci_epf_mutex);
|
||||||
|
list_add_tail(&group->group_entry, &driver->epf_group);
|
||||||
|
mutex_unlock(&pci_epf_mutex);
|
||||||
|
id++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __pci_epf_register_driver() - register a new PCI EPF driver
|
* __pci_epf_register_driver() - register a new PCI EPF driver
|
||||||
* @driver: structure representing PCI EPF driver
|
* @driver: structure representing PCI EPF driver
|
||||||
@ -167,8 +202,6 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,
|
|||||||
struct module *owner)
|
struct module *owner)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct config_group *group;
|
|
||||||
const struct pci_epf_device_id *id;
|
|
||||||
|
|
||||||
if (!driver->ops)
|
if (!driver->ops)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -183,16 +216,7 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&driver->epf_group);
|
pci_epf_add_cfs(driver);
|
||||||
|
|
||||||
id = driver->id_table;
|
|
||||||
while (id->name[0]) {
|
|
||||||
group = pci_ep_cfs_add_epf_group(id->name);
|
|
||||||
mutex_lock(&pci_epf_mutex);
|
|
||||||
list_add_tail(&group->group_entry, &driver->epf_group);
|
|
||||||
mutex_unlock(&pci_epf_mutex);
|
|
||||||
id++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user