From: Don Zickus <dzic...@redhat.com>

When unloading a module, we need to cleanup the platform registration.
However, unregistering the platform uncovered a couple of quirks, namely
a missing device_release function.  Fix things up so module unload works
and allows us to reload the module.

Signed-off-by: Don Zickus <dzic...@redhat.com>
Signed-off-by: David Kershner <david.kersh...@unisys.com>
Signed-off-by: Benjamin Romer <benjamin.ro...@unisys.com>
---
 drivers/staging/unisys/visorbus/visorbus_main.c | 2 +-
 drivers/staging/unisys/visorbus/visorchipset.c  | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/unisys/visorbus/visorbus_main.c 
b/drivers/staging/unisys/visorbus/visorbus_main.c
index 22c6150..dcce1f0 100644
--- a/drivers/staging/unisys/visorbus/visorbus_main.c
+++ b/drivers/staging/unisys/visorbus/visorbus_main.c
@@ -320,7 +320,7 @@ devmajorminor_remove_file(struct visor_device *dev, int 
slot)
        if (slot < 0 || slot >= maxdevnodes)
                return;
        myattr = (struct devmajorminor_attribute *)(dev->devnodes[slot].attr);
-       if (myattr)
+       if (!myattr)
                return;
        sysfs_remove_file(&dev->kobjdevmajorminor, &myattr->attr);
        kobject_uevent(&dev->device.kobj, KOBJ_OFFLINE);
diff --git a/drivers/staging/unisys/visorbus/visorchipset.c 
b/drivers/staging/unisys/visorbus/visorchipset.c
index 90a3c30..99fa96e 100644
--- a/drivers/staging/unisys/visorbus/visorchipset.c
+++ b/drivers/staging/unisys/visorbus/visorchipset.c
@@ -331,11 +331,16 @@ static const struct attribute_group 
*visorchipset_dev_groups[] = {
        NULL
 };
 
+static void visorchipset_dev_release(struct device *dev)
+{
+}
+
 /* /sys/devices/platform/visorchipset */
 static struct platform_device visorchipset_platform_device = {
        .name = "visorchipset",
        .id = -1,
        .dev.groups = visorchipset_dev_groups,
+       .dev.release = visorchipset_dev_release,
 };
 
 /* Function prototypes */
@@ -2355,6 +2360,7 @@ visorchipset_exit(struct acpi_device *acpi_device)
        visorchannel_destroy(controlvm_channel);
 
        visorchipset_file_cleanup(visorchipset_platform_device.dev.devt);
+       platform_device_unregister(&visorchipset_platform_device);
        POSTCODE_LINUX_2(DRIVER_EXIT_PC, POSTCODE_SEVERITY_INFO);
 
        return 0;
-- 
2.1.4

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to