Commit 7d594322 authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky

s390/pci: implement pcibios_remove_bus

Implement pcibios_remove_bus to free arch specific data when a pci
bus is deregistered. While at it remove a useless kzalloc/kfree
wrapper.
Reviewed-by: default avatarGerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 7a572a3a
...@@ -124,12 +124,10 @@ static inline bool zdev_enabled(struct zpci_dev *zdev) ...@@ -124,12 +124,10 @@ static inline bool zdev_enabled(struct zpci_dev *zdev)
Prototypes Prototypes
----------------------------------------------------------------------------- */ ----------------------------------------------------------------------------- */
/* Base stuff */ /* Base stuff */
struct zpci_dev *zpci_alloc_device(void);
int zpci_create_device(struct zpci_dev *); int zpci_create_device(struct zpci_dev *);
int zpci_enable_device(struct zpci_dev *); int zpci_enable_device(struct zpci_dev *);
int zpci_disable_device(struct zpci_dev *); int zpci_disable_device(struct zpci_dev *);
void zpci_stop_device(struct zpci_dev *); void zpci_stop_device(struct zpci_dev *);
void zpci_free_device(struct zpci_dev *);
int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64); int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
int zpci_unregister_ioat(struct zpci_dev *, u8); int zpci_unregister_ioat(struct zpci_dev *, u8);
......
...@@ -530,20 +530,6 @@ static void zpci_unmap_resources(struct zpci_dev *zdev) ...@@ -530,20 +530,6 @@ static void zpci_unmap_resources(struct zpci_dev *zdev)
} }
} }
struct zpci_dev *zpci_alloc_device(void)
{
struct zpci_dev *zdev;
/* Alloc memory for our private pci device data */
zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
return zdev ? : ERR_PTR(-ENOMEM);
}
void zpci_free_device(struct zpci_dev *zdev)
{
kfree(zdev);
}
int pcibios_add_platform_entries(struct pci_dev *pdev) int pcibios_add_platform_entries(struct pci_dev *pdev)
{ {
return zpci_sysfs_add_device(&pdev->dev); return zpci_sysfs_add_device(&pdev->dev);
...@@ -774,26 +760,6 @@ struct dev_pm_ops pcibios_pm_ops = { ...@@ -774,26 +760,6 @@ struct dev_pm_ops pcibios_pm_ops = {
}; };
#endif /* CONFIG_HIBERNATE_CALLBACKS */ #endif /* CONFIG_HIBERNATE_CALLBACKS */
static int zpci_scan_bus(struct zpci_dev *zdev)
{
LIST_HEAD(resources);
int ret;
ret = zpci_setup_bus_resources(zdev, &resources);
if (ret)
return ret;
zdev->bus = pci_scan_root_bus(NULL, ZPCI_BUS_NR, &pci_root_ops,
zdev, &resources);
if (!zdev->bus) {
zpci_cleanup_bus_resources(zdev);
return -EIO;
}
zdev->bus->max_bus_speed = zdev->max_bus_speed;
return 0;
}
static int zpci_alloc_domain(struct zpci_dev *zdev) static int zpci_alloc_domain(struct zpci_dev *zdev)
{ {
spin_lock(&zpci_domain_lock); spin_lock(&zpci_domain_lock);
...@@ -814,6 +780,41 @@ static void zpci_free_domain(struct zpci_dev *zdev) ...@@ -814,6 +780,41 @@ static void zpci_free_domain(struct zpci_dev *zdev)
spin_unlock(&zpci_domain_lock); spin_unlock(&zpci_domain_lock);
} }
void pcibios_remove_bus(struct pci_bus *bus)
{
struct zpci_dev *zdev = get_zdev_by_bus(bus);
zpci_exit_slot(zdev);
zpci_cleanup_bus_resources(zdev);
zpci_free_domain(zdev);
spin_lock(&zpci_list_lock);
list_del(&zdev->entry);
spin_unlock(&zpci_list_lock);
kfree(zdev);
}
static int zpci_scan_bus(struct zpci_dev *zdev)
{
LIST_HEAD(resources);
int ret;
ret = zpci_setup_bus_resources(zdev, &resources);
if (ret)
return ret;
zdev->bus = pci_scan_root_bus(NULL, ZPCI_BUS_NR, &pci_root_ops,
zdev, &resources);
if (!zdev->bus) {
zpci_cleanup_bus_resources(zdev);
return -EIO;
}
zdev->bus->max_bus_speed = zdev->max_bus_speed;
return 0;
}
int zpci_enable_device(struct zpci_dev *zdev) int zpci_enable_device(struct zpci_dev *zdev)
{ {
int rc; int rc;
......
...@@ -155,9 +155,9 @@ int clp_add_pci_device(u32 fid, u32 fh, int configured) ...@@ -155,9 +155,9 @@ int clp_add_pci_device(u32 fid, u32 fh, int configured)
int rc; int rc;
zpci_dbg(3, "add fid:%x, fh:%x, c:%d\n", fid, fh, configured); zpci_dbg(3, "add fid:%x, fh:%x, c:%d\n", fid, fh, configured);
zdev = zpci_alloc_device(); zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
if (IS_ERR(zdev)) if (!zdev)
return PTR_ERR(zdev); return -ENOMEM;
zdev->fh = fh; zdev->fh = fh;
zdev->fid = fid; zdev->fid = fid;
...@@ -178,7 +178,7 @@ int clp_add_pci_device(u32 fid, u32 fh, int configured) ...@@ -178,7 +178,7 @@ int clp_add_pci_device(u32 fid, u32 fh, int configured)
return 0; return 0;
error: error:
zpci_free_device(zdev); kfree(zdev);
return rc; return rc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment