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:

committed by
Linus Torvalds

parent
f41e2472ba
commit
b74ec56e8a
@@ -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
|
||||
|
Reference in New Issue
Block a user