kernel: fix *-gpio-custom module unloading
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:da77408537("i2c-gpio-custom: minor bugfix") Fixes:3bc81edc70("package: fix w1-gpio-custom package (closes #6770)") Signed-off-by: Sungbo Eo <mans0n@gorani.run> (cherry picked from commita22b7a60d9)
This commit is contained in:
		 Sungbo Eo
					Sungbo Eo
				
			
				
					committed by
					
						 Hauke Mehrtens
						Hauke Mehrtens
					
				
			
			
				
	
			
			
			 Hauke Mehrtens
						Hauke Mehrtens
					
				
			
						parent
						
							84b74bcb0d
						
					
				
				
					commit
					e242125d71
				
			| @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk | |||||||
| include $(INCLUDE_DIR)/kernel.mk | include $(INCLUDE_DIR)/kernel.mk | ||||||
|  |  | ||||||
| PKG_NAME:=i2c-gpio-custom | PKG_NAME:=i2c-gpio-custom | ||||||
| PKG_RELEASE:=2 | PKG_RELEASE:=3 | ||||||
|  |  | ||||||
| include $(INCLUDE_DIR)/package.mk | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ | |||||||
|  |  | ||||||
| #define DRV_NAME	"i2c-gpio-custom" | #define DRV_NAME	"i2c-gpio-custom" | ||||||
| #define DRV_DESC	"Custom GPIO-based I2C driver" | #define DRV_DESC	"Custom GPIO-based I2C driver" | ||||||
| #define DRV_VERSION	"0.1.1" | #define DRV_VERSION	"0.1.2" | ||||||
|  |  | ||||||
| #define PFX		DRV_NAME ": " | #define PFX		DRV_NAME ": " | ||||||
|  |  | ||||||
| @@ -96,7 +96,7 @@ static void i2c_gpio_custom_cleanup(void) | |||||||
|  |  | ||||||
| 	for (i = 0; i < nr_devices; i++) | 	for (i = 0; i < nr_devices; i++) | ||||||
| 		if (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) | static int __init i2c_gpio_custom_add_one(unsigned int id, unsigned int *params) | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk | |||||||
| include $(INCLUDE_DIR)/kernel.mk | include $(INCLUDE_DIR)/kernel.mk | ||||||
|  |  | ||||||
| PKG_NAME:=w1-gpio-custom | PKG_NAME:=w1-gpio-custom | ||||||
| PKG_RELEASE:=3 | PKG_RELEASE:=4 | ||||||
|  |  | ||||||
| include $(INCLUDE_DIR)/package.mk | include $(INCLUDE_DIR)/package.mk | ||||||
|  |  | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ | |||||||
|  |  | ||||||
| #define DRV_NAME	"w1-gpio-custom" | #define DRV_NAME	"w1-gpio-custom" | ||||||
| #define DRV_DESC	"Custom GPIO-based W1 driver" | #define DRV_DESC	"Custom GPIO-based W1 driver" | ||||||
| #define DRV_VERSION	"0.1.1" | #define DRV_VERSION	"0.1.2" | ||||||
|  |  | ||||||
| #define PFX		DRV_NAME ": " | #define PFX		DRV_NAME ": " | ||||||
|  |  | ||||||
| @@ -86,7 +86,7 @@ static void w1_gpio_custom_cleanup(void) | |||||||
|  |  | ||||||
| 	for (i = 0; i < nr_devices; i++) | 	for (i = 0; i < nr_devices; i++) | ||||||
| 		if (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) | static int __init w1_gpio_custom_add_one(unsigned int id, unsigned int *params) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user