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

Commit ee959b00 authored by Tony Jones's avatar Tony Jones Committed by Greg Kroah-Hartman
Browse files

SCSI: convert struct class_device to struct device



It's big, but there doesn't seem to be a way to split it up smaller...

Signed-off-by: default avatarTony Jones <tonyj@suse.de>
Signed-off-by: default avatarKay Sievers <kay.sievers@vrfy.org>
Cc: Roland Dreier <rolandd@cisco.com>
Cc: Sean Hefty <sean.hefty@intel.com>
Cc: Hal Rosenstock <hal.rosenstock@gmail.com>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 56d110e8
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -758,7 +758,7 @@ static struct bsg_device *bsg_add_device(struct inode *inode,
	mutex_lock(&bsg_mutex);
	hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(iminor(inode)));

	strncpy(bd->name, rq->bsg_dev.class_dev->class_id, sizeof(bd->name) - 1);
	strncpy(bd->name, rq->bsg_dev.class_dev->bus_id, sizeof(bd->name) - 1);
	dprintk("bound to <%s>, max queue %d\n",
		format_dev_t(buf, inode->i_rdev), bd->max_queue);

@@ -946,7 +946,7 @@ void bsg_unregister_queue(struct request_queue *q)
	mutex_lock(&bsg_mutex);
	idr_remove(&bsg_minor_idr, bcd->minor);
	sysfs_remove_link(&q->kobj, "bsg");
	class_device_unregister(bcd->class_dev);
	device_unregister(bcd->class_dev);
	put_device(bcd->dev);
	bcd->class_dev = NULL;
	mutex_unlock(&bsg_mutex);
@@ -959,7 +959,7 @@ int bsg_register_queue(struct request_queue *q, struct device *gdev,
	struct bsg_class_device *bcd;
	dev_t dev;
	int ret, minor;
	struct class_device *class_dev = NULL;
	struct device *class_dev = NULL;
	const char *devname;

	if (name)
@@ -998,8 +998,7 @@ int bsg_register_queue(struct request_queue *q, struct device *gdev,
	bcd->queue = q;
	bcd->dev = get_device(gdev);
	dev = MKDEV(bsg_major, bcd->minor);
	class_dev = class_device_create(bsg_class, NULL, dev, gdev, "%s",
					devname);
	class_dev = device_create(bsg_class, gdev, dev, "%s", devname);
	if (IS_ERR(class_dev)) {
		ret = PTR_ERR(class_dev);
		goto put_dev;
@@ -1016,7 +1015,7 @@ int bsg_register_queue(struct request_queue *q, struct device *gdev,
	return 0;

unregister_class_dev:
	class_device_unregister(class_dev);
	device_unregister(class_dev);
put_dev:
	put_device(gdev);
remove_idr:
+2 −2
Original line number Diff line number Diff line
@@ -273,8 +273,8 @@ static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
static int ahci_pci_device_resume(struct pci_dev *pdev);
#endif

static struct class_device_attribute *ahci_shost_attrs[] = {
	&class_device_attr_link_power_management_policy,
static struct device_attribute *ahci_shost_attrs[] = {
	&dev_attr_link_power_management_policy,
	NULL
};

+8 −7
Original line number Diff line number Diff line
@@ -131,10 +131,11 @@ static const char *ata_scsi_lpm_get(enum link_pm policy)
	return NULL;
}

static ssize_t ata_scsi_lpm_put(struct class_device *class_dev,
static ssize_t ata_scsi_lpm_put(struct device *dev,
				struct device_attribute *attr,
				const char *buf, size_t count)
{
	struct Scsi_Host *shost = class_to_shost(class_dev);
	struct Scsi_Host *shost = class_to_shost(dev);
	struct ata_port *ap = ata_shost_to_port(shost);
	enum link_pm policy = 0;
	int i;
@@ -162,9 +163,9 @@ static ssize_t ata_scsi_lpm_put(struct class_device *class_dev,
}

static ssize_t
ata_scsi_lpm_show(struct class_device *class_dev, char *buf)
ata_scsi_lpm_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	struct Scsi_Host *shost = class_to_shost(class_dev);
	struct Scsi_Host *shost = class_to_shost(dev);
	struct ata_port *ap = ata_shost_to_port(shost);
	const char *policy =
		ata_scsi_lpm_get(ap->pm_policy);
@@ -174,9 +175,9 @@ ata_scsi_lpm_show(struct class_device *class_dev, char *buf)

	return snprintf(buf, 23, "%s\n", policy);
}
CLASS_DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR,
DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR,
		ata_scsi_lpm_show, ata_scsi_lpm_put);
EXPORT_SYMBOL_GPL(class_device_attr_link_power_management_policy);
EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy);

static void ata_scsi_invalid_field(struct scsi_cmnd *cmd,
				   void (*done)(struct scsi_cmnd *))
+38 −39
Original line number Diff line number Diff line
@@ -27,21 +27,21 @@
struct internal_container {
	struct klist_node node;
	struct attribute_container *cont;
	struct class_device classdev;
	struct device classdev;
};

static void internal_container_klist_get(struct klist_node *n)
{
	struct internal_container *ic =
		container_of(n, struct internal_container, node);
	class_device_get(&ic->classdev);
	get_device(&ic->classdev);
}

static void internal_container_klist_put(struct klist_node *n)
{
	struct internal_container *ic =
		container_of(n, struct internal_container, node);
	class_device_put(&ic->classdev);
	put_device(&ic->classdev);
}


@@ -53,7 +53,7 @@ static void internal_container_klist_put(struct klist_node *n)
 * Returns the container associated with this classdev.
 */
struct attribute_container *
attribute_container_classdev_to_container(struct class_device *classdev)
attribute_container_classdev_to_container(struct device *classdev)
{
	struct internal_container *ic =
		container_of(classdev, struct internal_container, classdev);
@@ -110,11 +110,11 @@ attribute_container_unregister(struct attribute_container *cont)
EXPORT_SYMBOL_GPL(attribute_container_unregister);

/* private function used as class release */
static void attribute_container_release(struct class_device *classdev)
static void attribute_container_release(struct device *classdev)
{
	struct internal_container *ic 
		= container_of(classdev, struct internal_container, classdev);
	struct device *dev = classdev->dev;
	struct device *dev = classdev->parent;

	kfree(ic);
	put_device(dev);
@@ -129,12 +129,12 @@ static void attribute_container_release(struct class_device *classdev)
 * This function allocates storage for the class device(s) to be
 * attached to dev (one for each matching attribute_container).  If no
 * fn is provided, the code will simply register the class device via
 * class_device_add.  If a function is provided, it is expected to add
 * device_add.  If a function is provided, it is expected to add
 * the class device at the appropriate time.  One of the things that
 * might be necessary is to allocate and initialise the classdev and
 * then add it a later time.  To do this, call this routine for
 * allocation and initialisation and then use
 * attribute_container_device_trigger() to call class_device_add() on
 * attribute_container_device_trigger() to call device_add() on
 * it.  Note: after this, the class device contains a reference to dev
 * which is not relinquished until the release of the classdev.
 */
@@ -142,7 +142,7 @@ void
attribute_container_add_device(struct device *dev,
			       int (*fn)(struct attribute_container *,
					 struct device *,
					 struct class_device *))
					 struct device *))
{
	struct attribute_container *cont;

@@ -163,11 +163,11 @@ attribute_container_add_device(struct device *dev,
		}

		ic->cont = cont;
		class_device_initialize(&ic->classdev);
		ic->classdev.dev = get_device(dev);
		device_initialize(&ic->classdev);
		ic->classdev.parent = get_device(dev);
		ic->classdev.class = cont->class;
		cont->class->release = attribute_container_release;
		strcpy(ic->classdev.class_id, dev->bus_id);
		cont->class->dev_release = attribute_container_release;
		strcpy(ic->classdev.bus_id, dev->bus_id);
		if (fn)
			fn(cont, dev, &ic->classdev);
		else
@@ -195,20 +195,19 @@ attribute_container_add_device(struct device *dev,
 * @fn:	  A function to call to remove the device
 *
 * This routine triggers device removal.  If fn is NULL, then it is
 * simply done via class_device_unregister (note that if something
 * simply done via device_unregister (note that if something
 * still has a reference to the classdev, then the memory occupied
 * will not be freed until the classdev is released).  If you want a
 * two phase release: remove from visibility and then delete the
 * device, then you should use this routine with a fn that calls
 * class_device_del() and then use
 * attribute_container_device_trigger() to do the final put on the
 * classdev.
 * device_del() and then use attribute_container_device_trigger()
 * to do the final put on the classdev.
 */
void
attribute_container_remove_device(struct device *dev,
				  void (*fn)(struct attribute_container *,
					     struct device *,
					     struct class_device *))
					     struct device *))
{
	struct attribute_container *cont;

@@ -224,14 +223,14 @@ attribute_container_remove_device(struct device *dev,
			continue;

		klist_for_each_entry(ic, &cont->containers, node, &iter) {
			if (dev != ic->classdev.dev)
			if (dev != ic->classdev.parent)
				continue;
			klist_del(&ic->node);
			if (fn)
				fn(cont, dev, &ic->classdev);
			else {
				attribute_container_remove_attrs(&ic->classdev);
				class_device_unregister(&ic->classdev);
				device_unregister(&ic->classdev);
			}
		}
	}
@@ -252,7 +251,7 @@ void
attribute_container_device_trigger(struct device *dev, 
				   int (*fn)(struct attribute_container *,
					     struct device *,
					     struct class_device *))
					     struct device *))
{
	struct attribute_container *cont;

@@ -270,7 +269,7 @@ attribute_container_device_trigger(struct device *dev,
		}

		klist_for_each_entry(ic, &cont->containers, node, &iter) {
			if (dev == ic->classdev.dev)
			if (dev == ic->classdev.parent)
				fn(cont, dev, &ic->classdev);
		}
	}
@@ -313,11 +312,11 @@ attribute_container_trigger(struct device *dev,
 * attributes listed in the container
 */
int
attribute_container_add_attrs(struct class_device *classdev)
attribute_container_add_attrs(struct device *classdev)
{
	struct attribute_container *cont =
		attribute_container_classdev_to_container(classdev);
	struct class_device_attribute **attrs =	cont->attrs;
	struct device_attribute **attrs = cont->attrs;
	int i, error;

	BUG_ON(attrs && cont->grp);
@@ -329,7 +328,7 @@ attribute_container_add_attrs(struct class_device *classdev)
		return sysfs_create_group(&classdev->kobj, cont->grp);

	for (i = 0; attrs[i]; i++) {
		error = class_device_create_file(classdev, attrs[i]);
		error = device_create_file(classdev, attrs[i]);
		if (error)
			return error;
	}
@@ -338,18 +337,18 @@ attribute_container_add_attrs(struct class_device *classdev)
}

/**
 * attribute_container_add_class_device - same function as class_device_add
 * attribute_container_add_class_device - same function as device_add
 *
 * @classdev:	the class device to add
 *
 * This performs essentially the same function as class_device_add except for
 * This performs essentially the same function as device_add except for
 * attribute containers, namely add the classdev to the system and then
 * create the attribute files
 */
int
attribute_container_add_class_device(struct class_device *classdev)
attribute_container_add_class_device(struct device *classdev)
{
	int error = class_device_add(classdev);
	int error = device_add(classdev);
	if (error)
		return error;
	return attribute_container_add_attrs(classdev);
@@ -364,7 +363,7 @@ attribute_container_add_class_device(struct class_device *classdev)
int
attribute_container_add_class_device_adapter(struct attribute_container *cont,
					     struct device *dev,
					     struct class_device *classdev)
					     struct device *classdev)
{
	return attribute_container_add_class_device(classdev);
}
@@ -376,11 +375,11 @@ attribute_container_add_class_device_adapter(struct attribute_container *cont,
 *
 */
void
attribute_container_remove_attrs(struct class_device *classdev)
attribute_container_remove_attrs(struct device *classdev)
{
	struct attribute_container *cont =
		attribute_container_classdev_to_container(classdev);
	struct class_device_attribute **attrs =	cont->attrs;
	struct device_attribute **attrs = cont->attrs;
	int i;

	if (!attrs && !cont->grp)
@@ -392,7 +391,7 @@ attribute_container_remove_attrs(struct class_device *classdev)
	}

	for (i = 0; attrs[i]; i++)
		class_device_remove_file(classdev, attrs[i]);
		device_remove_file(classdev, attrs[i]);
}

/**
@@ -401,13 +400,13 @@ attribute_container_remove_attrs(struct class_device *classdev)
 * @classdev: the class device
 *
 * This function simply removes all the attribute files and then calls
 * class_device_del.
 * device_del.
 */
void
attribute_container_class_device_del(struct class_device *classdev)
attribute_container_class_device_del(struct device *classdev)
{
	attribute_container_remove_attrs(classdev);
	class_device_del(classdev);
	device_del(classdev);
}

/**
@@ -419,16 +418,16 @@ attribute_container_class_device_del(struct class_device *classdev)
 * Looks up the device in the container's list of class devices and returns
 * the corresponding class_device.
 */
struct class_device *
struct device *
attribute_container_find_class_device(struct attribute_container *cont,
				      struct device *dev)
{
	struct class_device *cdev = NULL;
	struct device *cdev = NULL;
	struct internal_container *ic;
	struct klist_iter iter;

	klist_for_each_entry(ic, &cont->containers, node, &iter) {
		if (ic->classdev.dev == dev) {
		if (ic->classdev.parent == dev) {
			cdev = &ic->classdev;
			/* FIXME: must exit iterator then break */
			klist_iter_exit(&iter);
+7 −7
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ EXPORT_SYMBOL_GPL(transport_class_unregister);

static int anon_transport_dummy_function(struct transport_container *tc,
					 struct device *dev,
					 struct class_device *cdev)
					 struct device *cdev)
{
	/* do nothing */
	return 0;
@@ -115,7 +115,7 @@ EXPORT_SYMBOL_GPL(anon_transport_class_unregister);

static int transport_setup_classdev(struct attribute_container *cont,
				    struct device *dev,
				    struct class_device *classdev)
				    struct device *classdev)
{
	struct transport_class *tclass = class_to_transport_class(cont->class);
	struct transport_container *tcont = attribute_container_to_transport_container(cont);
@@ -149,7 +149,7 @@ EXPORT_SYMBOL_GPL(transport_setup_device);

static int transport_add_class_device(struct attribute_container *cont,
				      struct device *dev,
				      struct class_device *classdev)
				      struct device *classdev)
{
	int error = attribute_container_add_class_device(classdev);
	struct transport_container *tcont = 
@@ -181,7 +181,7 @@ EXPORT_SYMBOL_GPL(transport_add_device);

static int transport_configure(struct attribute_container *cont,
			       struct device *dev,
			       struct class_device *cdev)
			       struct device *cdev)
{
	struct transport_class *tclass = class_to_transport_class(cont->class);
	struct transport_container *tcont = attribute_container_to_transport_container(cont);
@@ -212,7 +212,7 @@ EXPORT_SYMBOL_GPL(transport_configure_device);

static int transport_remove_classdev(struct attribute_container *cont,
				     struct device *dev,
				     struct class_device *classdev)
				     struct device *classdev)
{
	struct transport_container *tcont = 
		attribute_container_to_transport_container(cont);
@@ -251,12 +251,12 @@ EXPORT_SYMBOL_GPL(transport_remove_device);

static void transport_destroy_classdev(struct attribute_container *cont,
				      struct device *dev,
				      struct class_device *classdev)
				      struct device *classdev)
{
	struct transport_class *tclass = class_to_transport_class(cont->class);

	if (tclass->remove != anon_transport_dummy_function)
		class_device_put(classdev);
		put_device(classdev);
}


Loading