Skip to content

Commit

Permalink
UWB: fix sysfs warning on HWA device unplug.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Thomas Pugliese authored and Greg Kroah-Hartman committed Aug 12, 2013
1 parent 644f6a1 commit fbbde07
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions drivers/uwb/pal.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,40 @@ int uwb_pal_register(struct uwb_pal *pal)
}
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;
}

/**
* 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_register - unregister a UWB PAL
* uwb_pal_unregister - unregister a UWB PAL
* @pal: the PAL
*/
void uwb_pal_unregister(struct uwb_pal *pal)
Expand All @@ -85,7 +117,11 @@ void uwb_pal_unregister(struct uwb_pal *pal)
debugfs_remove(pal->debugfs_dir);

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");
}
}
Expand Down

0 comments on commit fbbde07

Please sign in to comment.