shrink struct device a bit
Subsystems (3)
PATCH 1/1 shrink struct device a bit
Two fields were duplicates of ones in the PM struct, and weren't much used in any case.
- Dave
This patch removes two fields from "struct device" that are duplicated in "struct dev_pm_info": power_state (which should probably vanish) and "saved_state". There were only two "real" uses of saved_state; both are now switched over to use dev_pm_info.
include/linux/device.h +0 -5
@@ -268,12 +268,7 @@void *platform_data;/* Platform specific data (e.g. ACPI, BIOS data relevant to device) */ struct dev_pm_info power; -u32 power_state;/* Current operating state. In -ACPI-speak, this is D0-D3, D0 -being fully functional, and D3 -being off. */ -unsigned char *saved_state;/* saved device state */ u32 detach_state;/* State to enter when device is detached from its driver. */
arch/arm/common/locomo.c +0 -3
@@ -629,9 +629,6 @@if (lchip) {__locomo_remove (lchip);dev_set_drvdata (dev,NULL ); - -kfree (dev->saved_state); - dev->saved_state =NULL ; }return 0 ;
arch/arm/common/sa1111.c +15 -8
@@ -797,6 +797,8 @@unsigned int wakeen1; }; +#ifdef CONFIG_PM +static int sa1111_suspend (struct device *dev,u32 state,u32 level) {struct sa1111 *sachip =dev_get_drvdata (dev);
@@ -808,11 +810,10 @@if (level !=SUSPEND_DISABLE )return 0 ; - dev->saved_state =kmalloc (sizeof (struct sa1111_save_data ),GFP_KERNEL ); -if (!dev->saved_state) + save =kmalloc (sizeof (struct sa1111_save_data ),GFP_KERNEL ); +if (!save)return -ENOMEM ; - - save = (struct sa1111_save_data *)dev->saved_state; + dev->power.saved_state = save;spin_lock_irqsave (&sachip->lock, flags);
@@ -870,7 +871,7 @@if (level !=RESUME_ENABLE )return 0 ; - save = (struct sa1111_save_data *)dev->saved_state; + save = (struct sa1111_save_data *)dev->power.saved_state;if (!save)return 0 ;
@@ -915,12 +916,18 @@spin_unlock_irqrestore (&sachip->lock, flags); - dev->saved_state =NULL ; + dev->power.saved_state =NULL ;kfree (save); return 0; } +#else /* !CONFIG_PM */ +#define sa1111_resume 0 +#define sa1111_suspend 0 +#endif /* !CONFIG_PM */ + +static int sa1111_probe (struct device *dev) {struct platform_device *pdev =to_platform_device (dev);
@@ -943,8 +950,8 @@__sa1111_remove (sachip);dev_set_drvdata (dev,NULL ); -kfree (dev->saved_state); - dev->saved_state =NULL ; +kfree (dev->power.saved_state); + dev->power.saved_state =NULL ; }return 0 ;
arch/arm/mach-sa1100/neponset.c +15 -8
@@ -173,6 +173,8 @@return 0 ; } +#ifdef CONFIG_PM +/* * LDM power management. */
@@ -184,12 +186,12 @@if (level ==SUSPEND_SAVE_STATE || level ==SUSPEND_DISABLE || level ==SUSPEND_POWER_DOWN ) { -if (!dev->saved_state) - dev->saved_state =kmalloc (sizeof (unsigned int ),GFP_KERNEL ); -if (!dev->saved_state) +if (!dev->power.saved_state) + dev->power.saved_state =kmalloc (sizeof (unsigned int ),GFP_KERNEL ); +if (!dev->power.saved_state)return -ENOMEM ; - *(unsigned int *)dev->saved_state =NCR_0 ; + *(unsigned int *)dev->power.saved_state =NCR_0 ; }return 0 ;
@@ -198,15 +200,20 @@static int neponset_resume (struct device *dev,u32 level) {if (level ==RESUME_RESTORE_STATE || level ==RESUME_ENABLE ) { -if (dev->saved_state) { -NCR_0 = *(unsigned int *)dev->saved_state; -kfree (dev->saved_state); - dev->saved_state =NULL ; +if (dev->power.saved_state) { +NCR_0 = *(unsigned int *)dev->power.saved_state; +kfree (dev->power.saved_state); + dev->power.saved_state =NULL ; } }return 0 ; } + +#else +#define neponset_suspend 0 +#define neponset_resume 0 +#endif static struct device_driver neponset_device_driver = { .name ="neponset" ,
Quoted 6 lines · David Brownell
Two fields were duplicates of ones in the PM struct, and weren't much used in any case.
arch/arm/common/sa1111.c +3
-0+#else /* !CONFIG_PM */ +#define sa1111_resume 0 +#define sa1111_suspend 0
...
arch/arm/mach-sa1100/neponset.c line 216
Quoted 4 lines
arch/arm/mach-sa1100/neponset.c +4
-0+#else +#define neponset_suspend 0 +#define neponset_resume 0 +#endif
I think sparse will complain at being given '0' instead of 'NULL' for pointers. Please use NULL instead.
Signature · 4 lines
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial coreQuoted 2 lines · Russell King
I think sparse will complain at being given '0' instead of 'NULL' for pointers. Please use NULL instead.
Attached.
- Dave
p.s. The SA-1111 + PXA build combo was broken (as on "Lubbock"),
as you likely know if you're removing broken machine configs!
This patch removes two fields from "struct device" that are duplicated in "struct dev_pm_info": power_state (which should probably vanish) and "saved_state". There were only two "real" uses of saved_state; both are now switched over to use dev_pm_info.
include/linux/device.h +0 -5
@@ -268,12 +268,7 @@void *platform_data;/* Platform specific data (e.g. ACPI, BIOS data relevant to device) */ struct dev_pm_info power; -u32 power_state;/* Current operating state. In -ACPI-speak, this is D0-D3, D0 -being fully functional, and D3 -being off. */ -unsigned char *saved_state;/* saved device state */ u32 detach_state;/* State to enter when device is detached from its driver. */
arch/arm/common/locomo.c +0 -3
@@ -629,9 +629,6 @@if (lchip) {__locomo_remove (lchip);dev_set_drvdata (dev,NULL ); - -kfree (dev->saved_state); - dev->saved_state =NULL ; }return 0 ;
arch/arm/common/sa1111.c +15 -8
@@ -797,6 +797,8 @@unsigned int wakeen1; }; +#ifdef CONFIG_PM +static int sa1111_suspend (struct device *dev,u32 state,u32 level) {struct sa1111 *sachip =dev_get_drvdata (dev);
@@ -808,11 +810,10 @@if (level !=SUSPEND_DISABLE )return 0 ; - dev->saved_state =kmalloc (sizeof (struct sa1111_save_data ),GFP_KERNEL ); -if (!dev->saved_state) + save =kmalloc (sizeof (struct sa1111_save_data ),GFP_KERNEL ); +if (!save)return -ENOMEM ; - - save = (struct sa1111_save_data *)dev->saved_state; + dev->power.saved_state = save;spin_lock_irqsave (&sachip->lock, flags);
@@ -870,7 +871,7 @@if (level !=RESUME_ENABLE )return 0 ; - save = (struct sa1111_save_data *)dev->saved_state; + save = (struct sa1111_save_data *)dev->power.saved_state;if (!save)return 0 ;
@@ -915,12 +916,18 @@spin_unlock_irqrestore (&sachip->lock, flags); - dev->saved_state =NULL ; + dev->power.saved_state =NULL ;kfree (save); return 0; } +#else /* !CONFIG_PM */ +#define sa1111_resume NULL +#define sa1111_suspend NULL +#endif /* !CONFIG_PM */ + +static int sa1111_probe (struct device *dev) {struct platform_device *pdev =to_platform_device (dev);
@@ -943,8 +950,8 @@__sa1111_remove (sachip);dev_set_drvdata (dev,NULL ); -kfree (dev->saved_state); - dev->saved_state =NULL ; +kfree (dev->power.saved_state); + dev->power.saved_state =NULL ; }return 0 ;
arch/arm/mach-sa1100/neponset.c +15 -8
@@ -173,6 +173,8 @@return 0 ; } +#ifdef CONFIG_PM +/* * LDM power management. */
@@ -184,12 +186,12 @@if (level ==SUSPEND_SAVE_STATE || level ==SUSPEND_DISABLE || level ==SUSPEND_POWER_DOWN ) { -if (!dev->saved_state) - dev->saved_state =kmalloc (sizeof (unsigned int ),GFP_KERNEL ); -if (!dev->saved_state) +if (!dev->power.saved_state) + dev->power.saved_state =kmalloc (sizeof (unsigned int ),GFP_KERNEL ); +if (!dev->power.saved_state)return -ENOMEM ; - *(unsigned int *)dev->saved_state =NCR_0 ; + *(unsigned int *)dev->power.saved_state =NCR_0 ; }return 0 ;
@@ -198,15 +200,20 @@static int neponset_resume (struct device *dev,u32 level) {if (level ==RESUME_RESTORE_STATE || level ==RESUME_ENABLE ) { -if (dev->saved_state) { -NCR_0 = *(unsigned int *)dev->saved_state; -kfree (dev->saved_state); - dev->saved_state =NULL ; +if (dev->power.saved_state) { +NCR_0 = *(unsigned int *)dev->power.saved_state; +kfree (dev->power.saved_state); + dev->power.saved_state =NULL ; } }return 0 ; } + +#else +#define neponset_suspend NULL +#define neponset_resume NULL +#endif static struct device_driver neponset_device_driver = { .name ="neponset" ,
Greg KH
AppliedQuoted 8 lines · David Brownell
Quoted 2 lines · Russell King
I think sparse will complain at being given '0' instead of 'NULL' for pointers. Please use NULL instead.
Attached.
- Dave
Quoted 7 lines
p.s. The SA-1111 + PXA build combo was broken (as on "Lubbock"),
as you likely know if you're removing broken machine configs!This patch removes two fields from "struct device" that are duplicated in "struct
dev_pm_info":power_state(which should probably vanish) and "saved_state". There were only two "real" uses ofsaved_state; both are now switched over to usedev_pm_info.
Applied, thanks.
Oh, I also fixed up the video drivers that were also using this field.
greg k-h