mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Driver core patches for 4.3-rc1
Here is the new patches for the driver core / sysfs for 4.3-rc1. Very small number of changes here, all the details are in the shortlog, nothing major happening at all this kernel release, which is nice to see. Signed-off-by: Greg Kroah-Hartman <[email protected]> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlXV9EwACgkQMUfUDdst+ylv1ACgj7srYyvumehX1zfRVzEWNuez chQAoKHnSpDMME/WmhQQRxzQ5pfd1Pni =uGHg -----END PGP SIGNATURE----- Merge tag 'driver-core-4.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core Pull driver core updates from Greg KH: "Here is the new patches for the driver core / sysfs for 4.3-rc1. Very small number of changes here, all the details are in the shortlog, nothing major happening at all this kernel release, which is nice to see" * tag 'driver-core-4.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: bus: subsys: update return type of ->remove_dev() to void driver core: correct device's shutdown order driver core: fix docbook for device_private.device selftests: firmware: skip timeout checks for kernels without user mode helper kernel, cpu: Remove bogus __ref annotations cpu: Remove bogus __ref annotation of cpu_subsys_online() firmware: fix wrong memory deallocation in fw_add_devm_name() sysfs.txt: update show method notes about sprintf/snprintf/scnprintf usage devres: fix devres_get()
This commit is contained in:
commit
1af115d675
16 changed files with 118 additions and 41 deletions
|
|
@ -63,7 +63,7 @@ struct driver_private {
|
|||
* binding of drivers which were unable to get all the resources needed by
|
||||
* the device; typically because it depends on another driver getting
|
||||
* probed first.
|
||||
* @device - pointer back to the struct class that this structure is
|
||||
* @device - pointer back to the struct device that this structure is
|
||||
* associated with.
|
||||
*
|
||||
* Nothing outside of the driver core should ever touch these fields.
|
||||
|
|
@ -134,6 +134,7 @@ extern int devres_release_all(struct device *dev);
|
|||
|
||||
/* /sys/devices directory */
|
||||
extern struct kset *devices_kset;
|
||||
extern void devices_kset_move_last(struct device *dev);
|
||||
|
||||
#if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
|
||||
extern void module_add_driver(struct module *mod, struct device_driver *drv);
|
||||
|
|
|
|||
|
|
@ -533,6 +533,52 @@ static DEVICE_ATTR_RO(dev);
|
|||
/* /sys/devices/ */
|
||||
struct kset *devices_kset;
|
||||
|
||||
/**
|
||||
* devices_kset_move_before - Move device in the devices_kset's list.
|
||||
* @deva: Device to move.
|
||||
* @devb: Device @deva should come before.
|
||||
*/
|
||||
static void devices_kset_move_before(struct device *deva, struct device *devb)
|
||||
{
|
||||
if (!devices_kset)
|
||||
return;
|
||||
pr_debug("devices_kset: Moving %s before %s\n",
|
||||
dev_name(deva), dev_name(devb));
|
||||
spin_lock(&devices_kset->list_lock);
|
||||
list_move_tail(&deva->kobj.entry, &devb->kobj.entry);
|
||||
spin_unlock(&devices_kset->list_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* devices_kset_move_after - Move device in the devices_kset's list.
|
||||
* @deva: Device to move
|
||||
* @devb: Device @deva should come after.
|
||||
*/
|
||||
static void devices_kset_move_after(struct device *deva, struct device *devb)
|
||||
{
|
||||
if (!devices_kset)
|
||||
return;
|
||||
pr_debug("devices_kset: Moving %s after %s\n",
|
||||
dev_name(deva), dev_name(devb));
|
||||
spin_lock(&devices_kset->list_lock);
|
||||
list_move(&deva->kobj.entry, &devb->kobj.entry);
|
||||
spin_unlock(&devices_kset->list_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* devices_kset_move_last - move the device to the end of devices_kset's list.
|
||||
* @dev: device to move
|
||||
*/
|
||||
void devices_kset_move_last(struct device *dev)
|
||||
{
|
||||
if (!devices_kset)
|
||||
return;
|
||||
pr_debug("devices_kset: Moving %s to end of list\n", dev_name(dev));
|
||||
spin_lock(&devices_kset->list_lock);
|
||||
list_move_tail(&dev->kobj.entry, &devices_kset->list);
|
||||
spin_unlock(&devices_kset->list_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* device_create_file - create sysfs attribute file for device.
|
||||
* @dev: device.
|
||||
|
|
@ -1923,12 +1969,15 @@ int device_move(struct device *dev, struct device *new_parent,
|
|||
break;
|
||||
case DPM_ORDER_DEV_AFTER_PARENT:
|
||||
device_pm_move_after(dev, new_parent);
|
||||
devices_kset_move_after(dev, new_parent);
|
||||
break;
|
||||
case DPM_ORDER_PARENT_BEFORE_DEV:
|
||||
device_pm_move_before(new_parent, dev);
|
||||
devices_kset_move_before(new_parent, dev);
|
||||
break;
|
||||
case DPM_ORDER_DEV_LAST:
|
||||
device_pm_move_last(dev);
|
||||
devices_kset_move_last(dev);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ static void change_cpu_under_node(struct cpu *cpu,
|
|||
cpu->node_id = to_nid;
|
||||
}
|
||||
|
||||
static int __ref cpu_subsys_online(struct device *dev)
|
||||
static int cpu_subsys_online(struct device *dev)
|
||||
{
|
||||
struct cpu *cpu = container_of(dev, struct cpu, dev);
|
||||
int cpuid = dev->id;
|
||||
|
|
|
|||
|
|
@ -304,6 +304,14 @@ static int really_probe(struct device *dev, struct device_driver *drv)
|
|||
goto probe_failed;
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure devices are listed in devices_kset in correct order
|
||||
* It's important to move Dev to the end of devices_kset before
|
||||
* calling .probe, because it could be recursive and parent Dev
|
||||
* should always go first
|
||||
*/
|
||||
devices_kset_move_last(dev);
|
||||
|
||||
if (dev->bus->probe) {
|
||||
ret = dev->bus->probe(dev);
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -297,10 +297,10 @@ void * devres_get(struct device *dev, void *new_res,
|
|||
if (!dr) {
|
||||
add_dr(dev, &new_dr->node);
|
||||
dr = new_dr;
|
||||
new_dr = NULL;
|
||||
new_res = NULL;
|
||||
}
|
||||
spin_unlock_irqrestore(&dev->devres_lock, flags);
|
||||
devres_free(new_dr);
|
||||
devres_free(new_res);
|
||||
|
||||
return dr->data;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -443,7 +443,7 @@ static int fw_add_devm_name(struct device *dev, const char *name)
|
|||
return -ENOMEM;
|
||||
fwn->name = kstrdup_const(name, GFP_KERNEL);
|
||||
if (!fwn->name) {
|
||||
kfree(fwn);
|
||||
devres_free(fwn);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue