kernel: fix *-gpio-custom module unloading
authorSungbo Eo <mans0n@gorani.run>
Fri, 6 Dec 2019 14:25:48 +0000 (23:25 +0900)
committerHauke Mehrtens <hauke@hauke-m.de>
Mon, 23 Dec 2019 00:07:23 +0000 (01:07 +0100)
Unloading and reloading the modules fails, as platform_device_put() does not
release resources fully.

root@OpenWrt:/# insmod i2c-gpio-custom bus0=0,18,0,5
[  196.860620] Custom GPIO-based I2C driver version 0.1.1
[  196.871162] ------------[ cut here ]------------
[  196.880517] WARNING: CPU: 0 PID: 1365 at fs/sysfs/dir.c:31 0x80112158
[  196.893431] sysfs: cannot create duplicate filename '/devices/platform/i2c-gpio.0'
...
[  197.513200] kobject_add_internal failed for i2c-gpio.0 with -EEXIST, don't try to register things with the same name in the same directory.

This patch fixes it by replacing platform_device_put() to
platform_device_unregister().

Fixes: da7740853715 ("i2c-gpio-custom: minor bugfix")
Fixes: 3bc81edc70e8 ("package: fix w1-gpio-custom package (closes #6770)")

Signed-off-by: Sungbo Eo <mans0n@gorani.run>
(cherry picked from commit a22b7a60d98836343c4f7b9ec0fcae68d9131522)

package/kernel/i2c-gpio-custom/Makefile
package/kernel/i2c-gpio-custom/src/i2c-gpio-custom.c
package/kernel/w1-gpio-custom/Makefile
package/kernel/w1-gpio-custom/src/w1-gpio-custom.c

index d1123cc3fb529c541bb59d71dc61c1529c3a1009..b075712bbb3136498332a5c225feadaa7fd56c40 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=i2c-gpio-custom
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 include $(INCLUDE_DIR)/package.mk
 
index 921d290d5206cd1198255a1391f2b4fbd2a1c58b..dd5a68165cde363f48ed119149f6998ebecfb7fb 100644 (file)
@@ -51,7 +51,7 @@
 
 #define DRV_NAME       "i2c-gpio-custom"
 #define DRV_DESC       "Custom GPIO-based I2C driver"
-#define DRV_VERSION    "0.1.1"
+#define DRV_VERSION    "0.1.2"
 
 #define PFX            DRV_NAME ": "
 
@@ -96,7 +96,7 @@ static void i2c_gpio_custom_cleanup(void)
 
        for (i = 0; i < nr_devices; i++)
                if (devices[i])
-                       platform_device_put(devices[i]);
+                       platform_device_unregister(devices[i]);
 }
 
 static int __init i2c_gpio_custom_add_one(unsigned int id, unsigned int *params)
index 1008cf9736f65977f98f393b685aab951d56c89e..787f5aa02d9d950d5895064029d9f27b73bca83f 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=w1-gpio-custom
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 include $(INCLUDE_DIR)/package.mk
 
index 004c9240ba81a67dd42876e88f3072d3f8297499..6928769975590b761e5881459e8497bb99d39dcc 100644 (file)
@@ -47,7 +47,7 @@
 
 #define DRV_NAME       "w1-gpio-custom"
 #define DRV_DESC       "Custom GPIO-based W1 driver"
-#define DRV_VERSION    "0.1.1"
+#define DRV_VERSION    "0.1.2"
 
 #define PFX            DRV_NAME ": "
 
@@ -86,7 +86,7 @@ static void w1_gpio_custom_cleanup(void)
 
        for (i = 0; i < nr_devices; i++)
                if (devices[i])
-                       platform_device_put(devices[i]);
+                       platform_device_unregister(devices[i]);
 }
 
 static int __init w1_gpio_custom_add_one(unsigned int id, unsigned int *params)