UWB: fix sysfs warning on HWA device unplug.
In the disconnect routine for the hwa_hc interface, it calls uwb_pal_unregister to unregister itself from the UWB subsystem. This function attempts to clean up the link to the host controller directory in the device's UWB radio control interface directory. If the disconnect routine for the radio control interface has already run, the uwb directory will be gone so the call to sysfs_remove_link generates a warning. Signed-off-by: Thomas Pugliese <thomas.pugliese@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
644f6a121a
commit
fbbde074ab
|
@ -68,8 +68,40 @@ int uwb_pal_register(struct uwb_pal *pal)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(uwb_pal_register);
|
EXPORT_SYMBOL_GPL(uwb_pal_register);
|
||||||
|
|
||||||
|
static int find_rc(struct device *dev, const void *data)
|
||||||
|
{
|
||||||
|
const struct uwb_rc *target_rc = data;
|
||||||
|
struct uwb_rc *rc = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
if (rc == NULL) {
|
||||||
|
WARN_ON(1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (rc == target_rc) {
|
||||||
|
if (rc->ready == 0)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uwb_pal_register - unregister a UWB PAL
|
* Given a radio controller descriptor see if it is registered.
|
||||||
|
*
|
||||||
|
* @returns false if the rc does not exist or is quiescing; true otherwise.
|
||||||
|
*/
|
||||||
|
static bool uwb_rc_class_device_exists(struct uwb_rc *target_rc)
|
||||||
|
{
|
||||||
|
struct device *dev;
|
||||||
|
|
||||||
|
dev = class_find_device(&uwb_rc_class, NULL, target_rc, find_rc);
|
||||||
|
|
||||||
|
return (dev != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uwb_pal_unregister - unregister a UWB PAL
|
||||||
* @pal: the PAL
|
* @pal: the PAL
|
||||||
*/
|
*/
|
||||||
void uwb_pal_unregister(struct uwb_pal *pal)
|
void uwb_pal_unregister(struct uwb_pal *pal)
|
||||||
|
@ -85,7 +117,11 @@ void uwb_pal_unregister(struct uwb_pal *pal)
|
||||||
debugfs_remove(pal->debugfs_dir);
|
debugfs_remove(pal->debugfs_dir);
|
||||||
|
|
||||||
if (pal->device) {
|
if (pal->device) {
|
||||||
sysfs_remove_link(&rc->uwb_dev.dev.kobj, pal->name);
|
/* remove link to the PAL in the UWB device's directory. */
|
||||||
|
if (uwb_rc_class_device_exists(rc))
|
||||||
|
sysfs_remove_link(&rc->uwb_dev.dev.kobj, pal->name);
|
||||||
|
|
||||||
|
/* remove link to uwb_rc in the PAL device's directory. */
|
||||||
sysfs_remove_link(&pal->device->kobj, "uwb_rc");
|
sysfs_remove_link(&pal->device->kobj, "uwb_rc");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue