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

Commit 607cf4d9 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

[PATCH] I2O: Clean up some pretty bad driver model abuses in the i2o code

parent 4f5ca09e
Loading
Loading
Loading
Loading
+10 −12
Original line number Diff line number Diff line
@@ -833,6 +833,7 @@ void i2o_iop_remove(struct i2o_controller *c)
	list_for_each_entry_safe(dev, tmp, &c->devices, list)
	    i2o_device_remove(dev);

	class_device_unregister(c->classdev);
	device_del(&c->device);

	/* Ask the IOP to switch to RESET state */
@@ -1077,9 +1078,7 @@ static void i2o_iop_release(struct device *dev)
};

/* I2O controller class */
static struct class i2o_controller_class = {
	.name = "i2o_controller",
};
static struct class *i2o_controller_class;

/**
 *	i2o_iop_alloc - Allocate and initialize a i2o_controller struct
@@ -1110,14 +1109,10 @@ struct i2o_controller *i2o_iop_alloc(void)
	sprintf(c->name, "iop%d", c->unit);

	device_initialize(&c->device);
	class_device_initialize(&c->classdev);

	c->device.release = &i2o_iop_release;
	c->classdev.class = &i2o_controller_class;
	c->classdev.dev = &c->device;

	snprintf(c->device.bus_id, BUS_ID_SIZE, "iop%d", c->unit);
	snprintf(c->classdev.class_id, BUS_ID_SIZE, "iop%d", c->unit);

#if BITS_PER_LONG == 64
	spin_lock_init(&c->context_list_lock);
@@ -1146,7 +1141,9 @@ int i2o_iop_add(struct i2o_controller *c)
		goto iop_reset;
	}

	if ((rc = class_device_add(&c->classdev))) {
	c->classdev = class_device_create(i2o_controller_class, 0,
			&c->device, "iop%d", c->unit);
	if (IS_ERR(c->classdev)) {
		osm_err("%s: could not add controller class\n", c->name);
		goto device_del;
	}
@@ -1184,7 +1181,7 @@ int i2o_iop_add(struct i2o_controller *c)
	return 0;

      class_del:
	class_device_del(&c->classdev);
	class_device_unregister(c->classdev);

      device_del:
	device_del(&c->device);
@@ -1250,7 +1247,8 @@ static int __init i2o_iop_init(void)
	if (rc)
		goto exit;

	if ((rc = class_register(&i2o_controller_class))) {
	i2o_controller_class = class_create(THIS_MODULE, "i2o_controller");
	if (IS_ERR(i2o_controller_class)) {
		osm_err("can't register class i2o_controller\n");
		goto device_exit;
	}
@@ -1273,7 +1271,7 @@ static int __init i2o_iop_init(void)
	i2o_driver_exit();

      class_exit:
	class_unregister(&i2o_controller_class);
	class_destroy(i2o_controller_class);

      device_exit:
	i2o_device_exit();
@@ -1292,7 +1290,7 @@ static void __exit i2o_iop_exit(void)
	i2o_pci_exit();
	i2o_exec_exit();
	i2o_driver_exit();
	class_unregister(&i2o_controller_class);
	class_destroy(i2o_controller_class);
	i2o_device_exit();
};

+1 −1
Original line number Diff line number Diff line
@@ -194,7 +194,7 @@ struct i2o_controller {
	struct resource mem_resource;	/* Mem resource allocated to the IOP */

	struct device device;
	struct class_device classdev;	/* I2O controller class */
	struct class_device *classdev;	/* I2O controller class device */
	struct i2o_device *exec;	/* Executive */
#if BITS_PER_LONG == 64
	spinlock_t context_list_lock;	/* lock for context_list */