staging: unisys: Fix clean up path
authorDon Zickus <dzickus@redhat.com>
Thu, 4 Jun 2015 13:22:48 +0000 (09:22 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Jun 2015 20:36:44 +0000 (13:36 -0700)
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 <dzickus@redhat.com>
Signed-off-by: David Kershner <david.kershner@unisys.com>
Signed-off-by: Benjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/unisys/visorbus/visorbus_main.c
drivers/staging/unisys/visorbus/visorchipset.c

index 22c6150f543e424b23659ba8eb12d616c00f3731..dcce1f02d54d1584c2d0391d712a4ca5c3ddecd0 100644 (file)
@@ -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);
index 90a3c30c9701146496ff235ecb237dcb83829591..99fa96e80e1e32e8e55689daf96422c5bd9cbbf1 100644 (file)
@@ -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;