rapidio: rework common RIO device add/delete routines

This patch moves per-net device list handling from rio-scan to common
RapidIO core and adds a matching device deletion routine.  This makes
device object creation/removal available to other implementations of
enumeration/discovery process.

Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com>
Cc: Matt Porter <mporter@kernel.crashing.org>
Cc: Aurelien Jacquiot <a-jacquiot@ti.com>
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Alexandre Bounine
2016-03-22 14:26:14 -07:00
committed by Linus Torvalds
parent f41e2472ba
commit b74ec56e8a
3 changed files with 36 additions and 12 deletions

View File

@@ -96,12 +96,18 @@ int rio_add_device(struct rio_dev *rdev)
{
int err;
err = device_add(&rdev->dev);
err = device_register(&rdev->dev);
if (err)
return err;
spin_lock(&rio_global_list_lock);
list_add_tail(&rdev->global_list, &rio_devices);
if (rdev->net) {
list_add_tail(&rdev->net_list, &rdev->net->devices);
if (rdev->pef & RIO_PEF_SWITCH)
list_add_tail(&rdev->rswitch->node,
&rdev->net->switches);
}
spin_unlock(&rio_global_list_lock);
rio_create_sysfs_dev_files(rdev);
@@ -110,6 +116,31 @@ int rio_add_device(struct rio_dev *rdev)
}
EXPORT_SYMBOL_GPL(rio_add_device);
/*
* rio_del_device - removes a RIO device from the device model
* @rdev: RIO device
*
* Removes the RIO device to the kernel device list and subsystem's device list.
* Clears sysfs entries for the removed device.
*/
void rio_del_device(struct rio_dev *rdev)
{
pr_debug("RIO: %s: removing %s\n", __func__, rio_name(rdev));
spin_lock(&rio_global_list_lock);
list_del(&rdev->global_list);
if (rdev->net) {
list_del(&rdev->net_list);
if (rdev->pef & RIO_PEF_SWITCH) {
list_del(&rdev->rswitch->node);
kfree(rdev->rswitch->route_table);
}
}
spin_unlock(&rio_global_list_lock);
rio_remove_sysfs_dev_files(rdev);
device_unregister(&rdev->dev);
}
EXPORT_SYMBOL_GPL(rio_del_device);
/**
* rio_request_inb_mbox - request inbound mailbox service
* @mport: RIO master port from which to allocate the mailbox resource