Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5fa21d82 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6:
  [PATCH] Driver core: fix locking issues with the devices that are attached to classes
  [PATCH] USB: get USB suspend to work again
parents 8542e589 5d9fd169
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -356,6 +356,13 @@ int device_add(struct device *dev)
	if (parent)
		klist_add_tail(&dev->knode_parent, &parent->klist_children);

	if (dev->class) {
		/* tie the class to the device */
		down(&dev->class->sem);
		list_add_tail(&dev->node, &dev->class->devices);
		up(&dev->class->sem);
	}

	/* notify platform of device entry */
	if (platform_notify)
		platform_notify(dev);
@@ -455,6 +462,9 @@ void device_del(struct device * dev)
		sysfs_remove_link(&dev->kobj, "device");
		sysfs_remove_link(&dev->parent->kobj, class_name);
		kfree(class_name);
		down(&dev->class->sem);
		list_del_init(&dev->node);
		up(&dev->class->sem);
	}
	device_remove_file(dev, &dev->uevent_attr);

@@ -601,11 +611,6 @@ struct device *device_create(struct class *class, struct device *parent,
	if (retval)
		goto error;

	/* tie the class to the device */
	down(&class->sem);
	list_add_tail(&dev->node, &class->devices);
	up(&class->sem);

	return dev;

error:
@@ -636,9 +641,7 @@ void device_destroy(struct class *class, dev_t devt)
	}
	up(&class->sem);

	if (dev) {
		list_del_init(&dev->node);
	if (dev)
		device_unregister(dev);
}
}
EXPORT_SYMBOL_GPL(device_destroy);
+2 −0
Original line number Diff line number Diff line
@@ -991,6 +991,8 @@ void usb_buffer_unmap_sg (struct usb_device *dev, unsigned pipe,

static int verify_suspended(struct device *dev, void *unused)
{
	if (dev->driver == NULL)
		return 0;
	return (dev->power.power_state.event == PM_EVENT_ON) ? -EBUSY : 0;
}