ARM: mostly harmless gcc warnings
Subsystems (12)
v2 cover ARM: mostly harmless gcc warnings
Most patches from the first time this was posted have been adopted by a subsystem maintainer or were show to be obsolete. Here are the remaining ones again.
I'm planning to submit those patches that are still necessary by the time we have an -rc1 through the arm-soc tree, but my preference is still to have them go through the subsystem maintainers.
Olof: should we add it to for-next?
Arnd
Arnd Bergmann (8):
SCSI: ARM: ncr5380/oak uses no interrupts
SCSI: ARM: make fas216_dumpinfo function conditional mm/slob: use min_t() to compare ARCH_SLAB_MINALIGN
USB: EHCI: mark ehci_orion_conf_mbus_windows __devinit
clk: don't mark clkdev_add_table as init
pcmcia: sharpsl: don't discard sharpsl_pcmcia_ops
video: mark nuc900fb_map_video_memory as __devinit spi/s3c64xx: use correct dma_transfer_direction type
drivers/clk/clkdev.c | 2 +- drivers/pcmcia/pxa2xx_sharpsl.c | 2 +- drivers/scsi/arm/fas216.c | 2 +- drivers/scsi/arm/oak.c | 1 + drivers/spi/spi-s3c64xx.c | 2 +- drivers/usb/host/ehci-orion.c | 2 +- drivers/video/nuc900fb.c | 2 +- mm/slob.c | 6 +++--- 8 files changed, 10 insertions(+), 9 deletions(-)
Signature · 23 lines
1.7.10 Cc: "James E.J. Bottomley" <[email protected]> Cc: Ben Dooks <[email protected]> Cc: Dominik Brodowski <[email protected]> Cc: Florian Tobias Schandinat <[email protected]> Cc: Grant Likely <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: Jochen Friedrich <[email protected]> Cc: Kukjin Kim <[email protected]> Cc: Mike Turquette <[email protected]> Cc: Pavel Machek <[email protected]> Cc: Pekka Enberg <[email protected]> Cc: Russell King <[email protected]> Cc: Wan ZongShun <[email protected]> Cc: linux-arm-kernel at lists.infradead.org Cc: linux-fbdev at vger.kernel.org Cc: linux-pcmcia at lists.infradead.org Cc: linux-samsung-soc at vger.kernel.org Cc: linux-scsi at vger.kernel.org Cc: linux-usb at vger.kernel.org Cc: spi-devel-general at lists.sourceforge.net Cc: stable at vger.kernel.org
PATCH v2 1/8 SCSI: ARM: ncr5380/oak uses no interrupts
The ncr5380 driver is included by multiple board specific drivers, which may or may not use the interrupt handler. The oak variant doesn't, and should set the DONT_USE_INTR macro.
Without this patch, building rpc_defconfig results in:
drivers/scsi/arm/../NCR5380.c:1160:20: warning: 'oakscsi_intr' defined but not used [-Wunused-function]
--- drivers/scsi/arm/oak.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/arm/oak.c +1 -0
@@ -21,6 +21,7 @@/*#define PSEUDO_DMA*/ #define OAKSCSI_PUBLIC_RELEASE 1 +#define DONT_USE_INTR #define priv (host) ((struct NCR5380_hostdata *)(host)->hostdata)#define NCR5380_local_declare () void __iomem *_base
Signature · 1 line
1.7.10
PATCH v2 2/8 SCSI: ARM: make fas216_dumpinfo function conditional
In reply to Arnd BergmannThe fas216_dumpinfo function is only used by __fas216_checkmagic, which is conditionally compiled, so we should put both functions inside of the same #ifdef.
Without this patch, building rpc_defconfig results in:
drivers/scsi/arm/fas216.c:182:13: warning: 'fas216_dumpinfo' defined but not used [-Wunused-function]
--- drivers/scsi/arm/fas216.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/arm/fas216.c +1 -1
@@ -179,6 +179,7 @@ static void print_SCp(struct scsi_pointer *SCp, const char *prefix, const char * SCp->buffers_residual, suffix); } +#ifdef CHECK_STRUCTURE static void fas216_dumpinfo (FAS216_Info *info) {static int used =0 ;
@@ -223,7 +224,6 @@ static void fas216_dumpinfo(FAS216_Info *info) info->internal_done, info->magic_end); } -#ifdef CHECK_STRUCTURE static void __fas216_checkmagic (FAS216_Info *info,const char *func) {int corruption =0 ;
Signature · 1 line
1.7.10
PATCH v2 3/8 mm/slob: use min_t() to compare ARCH_SLAB_MINALIGN
In reply to Arnd BergmannThe definition of ARCH_SLAB_MINALIGN is architecture dependent and can be either of type size_t or int. Comparing that value with ARCH_KMALLOC_MINALIGN can cause harmless warnings on platforms where they are different. Since both are always small positive integer numbers, using the size_t type to compare them is safe and gets rid of the warning.
Without this patch, building ARM collie_defconfig results in:
mm/slob.c: In function '__kmalloc_node':mm/slob.c:431:152: warning: comparison of distinct pointer types lacks a cast [enabled by default] mm/slob.c: In function 'kfree':mm/slob.c:484:153: warning: comparison of distinct pointer types lacks a cast [enabled by default] mm/slob.c: In function 'ksize':mm/slob.c:503:153: warning: comparison of distinct pointer types lacks a cast [enabled by default]
--- mm/slob.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
mm/slob.c +3 -3
@@ -428,7 +428,7 @@ out:void *__kmalloc_node (size_t size,gfp_t gfp,int node) {unsigned int *m; -int align =max (ARCH_KMALLOC_MINALIGN ,ARCH_SLAB_MINALIGN ); +int align =max_t (size_t,ARCH_KMALLOC_MINALIGN ,ARCH_SLAB_MINALIGN );void *ret; gfp &= gfp_allowed_mask;
@@ -481,7 +481,7 @@ void kfree(const void *block) sp =virt_to_page (block);if (PageSlab (sp)) { -int align =max (ARCH_KMALLOC_MINALIGN ,ARCH_SLAB_MINALIGN ); +int align =max_t (size_t,ARCH_KMALLOC_MINALIGN ,ARCH_SLAB_MINALIGN );unsigned int *m = (unsigned int *)(block - align);slob_free (m, *m + align); }else
@@ -500,7 +500,7 @@ size_t ksize(const void *block) sp =virt_to_page (block);if (PageSlab (sp)) { -int align =max (ARCH_KMALLOC_MINALIGN ,ARCH_SLAB_MINALIGN ); +int align =max_t (size_t,ARCH_KMALLOC_MINALIGN ,ARCH_SLAB_MINALIGN );unsigned int *m = (unsigned int *)(block - align);return SLOB_UNITS (*m) *SLOB_UNIT ; }else
Signature · 1 line
1.7.10
PATCH v2 4/8 USB: EHCI: mark ehci_orion_conf_mbus_windows __devinit
In reply to Arnd BergmannThe __devinit section is going away soon, but while it's still there, we get a correct warning about ehci_orion_conf_mbus_windows being discarded before its caller, so it should be marked __devinit rather than __init.
Without this patch, building dove_defconfig results in:
WARNING: drivers/usb/host/built-in.o(.devinit.text+0x8a4): Section mismatch in reference from the function ehci_orion_drv_probe() to the function .init.text:ehci_orion_conf_mbus_windows() The function __devinit ehci_orion_drv_probe() references
a function __init ehci_orion_conf_mbus_windows().
If ehci_orion_conf_mbus_windows is only used by ehci_orion_drv_probe then
annotate ehci_orion_conf_mbus_windows with a matching annotation.
--- drivers/usb/host/ehci-orion.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/host/ehci-orion.c +1 -1
@@ -160,7 +160,7 @@ static const struct hc_driver ehci_orion_hc_driver = { .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, }; -static void __init +static void __devinit ehci_orion_conf_mbus_windows (struct usb_hcd *hcd,const struct mbus_dram_target_info *dram) {
Signature · 1 line
1.7.10
PATCH v2 5/8 clk: don't mark clkdev_add_table as init
In reply to Arnd Bergmanns3c2440_clk_add is a subsys_interface method and calls clkdev_add_table, which means we might be calling it after the __init section is discarded.
Without this patch, building mini2440_defconfig results in:
WARNING: vmlinux.o(.text+0x9848): Section mismatch in reference from the function s3c2440_clk_add() to the function .init.text:clkdev_add_table() The function s3c2440_clk_add() references
the function __init clkdev_add_table().
This is often because s3c2440_clk_add lacks a __init
annotation or the annotation of clkdev_add_table is wrong.
--- drivers/clk/clkdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clk/clkdev.c +1 -1
@@ -179,7 +179,7 @@ void clkdev_add(struct clk_lookup *cl) }EXPORT_SYMBOL (clkdev_add); -void __init clkdev_add_table (struct clk_lookup *cl,size_t num) +void clkdev_add_table (struct clk_lookup *cl,size_t num) {mutex_lock (&clocks_mutex);while (num--) {
Signature · 1 line
1.7.10
Re: [PATCH v2 5/8] clk: don't mark clkdev_add_table as init
Quoted 11 lines · Arnd Bergmann
s3c2440_clk_addis asubsys_interfacemethod and callsclkdev_add_table, which means we might be calling it after the__initsection is discarded.Without this patch, building
mini2440_defconfigresults in:WARNING:
vmlinux.o(.text+0x9848): Section mismatch in reference from the functions3c2440_clk_add()to the function .init.text:clkdev_add_table() The functions3c2440_clk_add()references
the function__initclkdev_add_table().
This is often becauses3c2440_clk_addlacks a__init
annotation or the annotation ofclkdev_add_tableis wrong.
I'm not sure this is the right thing to do. I suspect this comes from the stupidly complex samsung code, and that this is actually safe - I suspect that s3c2440_clk_add() needs to be appropriately marked, but then you end up having to trace its call path through various structures etc.
Re: [PATCH v2 5/8] clk: don't mark clkdev_add_table as init
Quoted 13 lines · Russell King - ARM Linux
Quoted 11 lines · Arnd Bergmann
s3c2440_clk_addis asubsys_interfacemethod and callsclkdev_add_table, which means we might be calling it after the__initsection is discarded.Without this patch, building
mini2440_defconfigresults in:WARNING:
vmlinux.o(.text+0x9848): Section mismatch in reference from the functions3c2440_clk_add()to the function .init.text:clkdev_add_table() The functions3c2440_clk_add()references
the function__initclkdev_add_table().
This is often becauses3c2440_clk_addlacks a__init
annotation or the annotation ofclkdev_add_tableis wrong.
Quoted 4 lines
I'm not sure this is the right thing to do. I suspect this comes from the stupidly complex samsung code, and that this is actually safe - I suspect that
s3c2440_clk_add()needs to be appropriately marked, but then you end up having to trace its call path through various structures etc.
Yes, you are right. I have verified now that the only code path into s3c2440_clk_add() is from "int __init s3c2440_init(void)", so s3c2440_clk_add can be marked __init_refok.
I'll follow up with a new patch to replace this one.
Arnd
PATCH v2 6/8 pcmcia: sharpsl: don't discard sharpsl_pcmcia_ops
In reply to Arnd BergmannThe sharpsl_pcmcia_ops structure gets passed into sa11xx_drv_pcmcia_probe, where it gets accessed at run-time, unlike all other pcmcia drivers that pass their structures into platform_device_add_data, which makes a copy.
This means the gcc warning is valid and the structure must not be marked as __initdata.
Without this patch, building collie_defconfig results in:
drivers/pcmcia/pxa2xx_sharpsl.c:22:31: fatal error: mach-pxa/hardware.h: No such file or directory compilation terminated.
make[3]: *** [drivers/pcmcia/pxa2xx_sharpsl.o] Error 1
make[2]: *** [drivers/pcmcia] Error 2
make[1]: *** [drivers] Error 2
make: *** [sub-make] Error 2
--- drivers/pcmcia/pxa2xx_sharpsl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/pcmcia/pxa2xx_sharpsl.c +1 -1
@@ -194,7 +194,7 @@ static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)sharpsl_pcmcia_init_reset (skt); } -static struct pcmcia_low_level sharpsl_pcmcia_ops__initdata = { +static struct pcmcia_low_level sharpsl_pcmcia_ops = { .owner =THIS_MODULE , .hw_init = sharpsl_pcmcia_hw_init, .socket_state = sharpsl_pcmcia_socket_state,
Signature · 1 line
1.7.10
PATCH v2 7/8 video: mark nuc900fb_map_video_memory as __devinit
In reply to Arnd Bergmannnuc900fb_map_video_memory is called by an devinit function that may be called at run-time, but the function itself is marked __init and will be discarded after boot.
To avoid calling into a function that may have been overwritten, mark nuc900fb_map_video_memory itself as __devinit.
Without this patch, building nuc950_defconfig results in:
WARNING: drivers/video/built-in.o(.devinit.text+0x26c): Section mismatch in reference from the function nuc900fb_probe() to the function .init.text:nuc900fb_map_video_memory() The function __devinit nuc900fb_probe() references
a function __init nuc900fb_map_video_memory().
If nuc900fb_map_video_memory is only used by nuc900fb_probe then
annotate nuc900fb_map_video_memory with a matching annotation.
--- drivers/video/nuc900fb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/video/nuc900fb.c +1 -1
@@ -387,7 +387,7 @@ static int nuc900fb_init_registers(struct fb_info *info)* The buffer should be a non-cached, non-buffered, memory region * to allow palette and pixel writes without flushing the cache. */ -static int __init nuc900fb_map_video_memory (struct fb_info *info) +static int __devinit nuc900fb_map_video_memory (struct fb_info *info) {struct nuc900fb_info *fbi = info->par;dma_addr_t map_dma;
Signature · 1 line
1.7.10
Re: [PATCH v2 7/8] video: mark nuc900fb_map_video_memory as __devinit
2012/10/10 Arnd Bergmann <[email protected]>:
Quoted 15 lines
nuc900fb_map_video_memoryis called by an devinit function that may be called at run-time, but the function itself is marked__initand will be discarded after boot.To avoid calling into a function that may have been overwritten, mark
nuc900fb_map_video_memoryitself as__devinit.Without this patch, building
nuc950_defconfigresults in:WARNING: drivers/video/built-in.o(.devinit.text+0x26c): Section mismatch in reference from the function
nuc900fb_probe()to the function .init.text:nuc900fb_map_video_memory() The function__devinitnuc900fb_probe()references
a function__initnuc900fb_map_video_memory().
Ifnuc900fb_map_video_memoryis only used bynuc900fb_probethen
annotatenuc900fb_map_video_memorywith a matching annotation.
Quoted 4 lines
Signed-off-by Arnd Bergmann <[email protected]>Cc Wan ZongShun <[email protected]>Cc Florian Tobias Schandinat <[email protected]>Cc linux-fbdev at vger.kernel.org
Thanks for your patch.
Quoted 20 lines
--- drivers/video/nuc900fb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/video/nuc900fb.c +1
-2@@ -387,7 +387,7 @@ static int nuc900fb_init_registers(struct fb_info *info)* The buffer should be a non-cached, non-buffered, memory region * to allow palette and pixel writes without flushing the cache. */ -static int __init nuc900fb_map_video_memory (struct fb_info *info) +static int __devinit nuc900fb_map_video_memory (struct fb_info *info) {struct nuc900fb_info *fbi = info->par;dma_addr_t map_dma; --1.7.10
Signature · 2 lines
Wan ZongShun. www.mcuos.com
Florian Tobias Schandinat
AppliedRe: [PATCH v2 7/8] video: mark nuc900fb_map_video_memory as __devinit
In reply to Arnd BergmannQuoted 15 lines · Arnd Bergmann
nuc900fb_map_video_memoryis called by an devinit function that may be called at run-time, but the function itself is marked__initand will be discarded after boot.To avoid calling into a function that may have been overwritten, mark
nuc900fb_map_video_memoryitself as__devinit.Without this patch, building
nuc950_defconfigresults in:WARNING: drivers/video/built-in.o(.devinit.text+0x26c): Section mismatch in reference from the function
nuc900fb_probe()to the function .init.text:nuc900fb_map_video_memory() The function__devinitnuc900fb_probe()references
a function__initnuc900fb_map_video_memory().
Ifnuc900fb_map_video_memoryis only used bynuc900fb_probethen
annotatenuc900fb_map_video_memorywith a matching annotation.
Quoted 4 lines
Signed-off-by Arnd Bergmann <[email protected]>Cc Wan ZongShun <[email protected]>Cc Florian Tobias Schandinat <[email protected]>Cc linux-fbdev at vger.kernel.org
Applied.
Thanks,
Florian Tobias Schandinat
Quoted 17 lines
--- drivers/video/nuc900fb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/video/nuc900fb.c +1
-1@@ -387,7 +387,7 @@ static int nuc900fb_init_registers(struct fb_info *info)* The buffer should be a non-cached, non-buffered, memory region * to allow palette and pixel writes without flushing the cache. */ -static int __init nuc900fb_map_video_memory (struct fb_info *info) +static int __devinit nuc900fb_map_video_memory (struct fb_info *info) {struct nuc900fb_info *fbi = info->par;dma_addr_t map_dma;
PATCH v2 8/8 spi/s3c64xx: use correct dma_transfer_direction type
In reply to Arnd BergmannThere is a subtle difference between dma_transfer_direction anddma_data_direction: the former is used by the dmaengine framework, while the latter is used by the dma-mapping API. Although the purpose is comparable, the actual values are different and must not be mixed. In this case, the driver just wants to use dma_transfer_direction.
Without this patch, building s3c6400_defconfig results in:
drivers/spi/spi-s3c64xx.c: In function 's3c64xx_spi_dmacb':drivers/spi/spi-s3c64xx.c:239:21: warning: comparison between
'enum dma_data_direction' and 'enum dma_transfer_direction' [-Wenum-compare]
--- drivers/spi/spi-s3c64xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/spi/spi-s3c64xx.c +1 -1
@@ -132,7 +132,7 @@struct s3c64xx_spi_dma_data {unsigned ch; -enum dma_data_direction direction; +enum dma_transfer_direction direction;enum dma_ch dmach;struct property *dma_prop; };
Signature · 1 line
1.7.10
RE: [PATCH v2 v2 v2 8/8] spi/s3c64xx: use correct dma_transfer_direction type
Quoted 10 lines · Arnd Bergmann
There is a subtle difference between
dma_transfer_directionanddma_data_direction: the former is used by the dmaengine framework, while the latter is used by the dma-mapping API. Although the purpose is comparable, the actual values are different and must not be mixed. In this case, the driver just wants to usedma_transfer_direction.Without this patch, building
s3c6400_defconfigresults in:
Quoted 8 lines
drivers/spi/spi-s3c64xx.c: In function 's3c64xx_spi_dmacb':drivers/spi/spi-s3c64xx.c:239:21: warning: comparison between
'enumdma_data_direction' and 'enumdma_transfer_direction' [-
Wenum-compare]Signed-off-by Arnd Bergmann <[email protected]>Cc Ben Dooks <[email protected]>Cc Kukjin Kim <[email protected]>
BTW, don't we need following accordingly?
drivers/spi/spi-s3c64xx.c +2 -2
@@ -1067,11 +1067,11 @@ static int __devinit s3c64xx_spi_get_dmares(if (tx) { dma_data = &sdd->tx_dma; - dma_data->direction =DMA_TO_DEVICE ; + dma_data->direction =DMA_MEM_TO_DEV ; chan_str ="tx" ; }else { dma_data = &sdd->rx_dma; - dma_data->direction =DMA_FROM_DEVICE ; + dma_data->direction =DMA_DEV_TO_MEM ; chan_str ="rx" ; }
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <[email protected]>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.
Quoted 23 lines
Cc Grant Likely <[email protected]>Cc linux-arm-kernel at lists.infradead.orgCc linux-samsung-soc at vger.kernel.orgCc spi-devel-general at lists.sourceforge.net--- drivers/spi/spi-s3c64xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/spi/spi-s3c64xx.c +1
-2@@ -132,7 +132,7 @@struct s3c64xx_spi_dma_data {unsigned ch; -enum dma_data_direction direction; +enum dma_transfer_direction direction;enum dma_ch dmach;struct property *dma_prop; }; --1.7.10
Arnd Bergmann
Acked-by Kukjin KimRe: [PATCH v2 v2 v2 8/8] spi/s3c64xx: use correct dma_transfer_direction type
Quoted 10 lines · Kukjin Kim
BTW, don't we need following accordingly?
drivers/spi/spi-s3c64xx.c +0
-0@@ -1067,11 +1067,11 @@ static int __devinit s3c64xx_spi_get_dmares(if (tx) { dma_data = &sdd->tx_dma;
drivers/spi/spi-s3c64xx.c static int __devinit s3c64xx_spi_get_dmares( · line 1077
Quoted 10 lines
drivers/spi/spi-s3c64xx.c +2
-2- dma_data->direction =DMA_TO_DEVICE ; + dma_data->direction =DMA_MEM_TO_DEV ; chan_str ="tx" ; }else { dma_data = &sdd->rx_dma; - dma_data->direction =DMA_FROM_DEVICE ; + dma_data->direction =DMA_DEV_TO_MEM ; chan_str ="rx" ; }
Yes, you are absolutely right, sorry for not seeing that earlier. New version below.
Arnd
Quoted 1 line
From
c10356b9846b13651a8a24c3a31e029ffe6eafd9Mon Sep 17 00:00:00 2001
From: Arnd Bergmann <[email protected]>
Date: Mon, 30 Apr 2012 16:31:27 +0000
Subject: [PATCH] spi/s3c64xx: use correct dma_transfer_direction type
There is a subtle difference between dma_transfer_direction anddma_data_direction: the former is used by the dmaengine framework, while the latter is used by the dma-mapping API. Although the purpose is comparable, the actual values are different and must not be mixed. In this case, the driver just wants to use dma_transfer_direction.
Without this patch, building s3c6400_defconfig results in:
drivers/spi/spi-s3c64xx.c: In function 's3c64xx_spi_dmacb':drivers/spi/spi-s3c64xx.c:239:21: warning: comparison between
'enum dma_data_direction' and 'enum dma_transfer_direction' [-Wenum-compare]
As pointed out by Kukjin Kim, this also changes the use of constants from DMA_FROM_DEVICE/DMA_TO_DEVICE to DMA_DEV_TO_MEM/DMA_MEM_TO_DEV.
drivers/spi/spi-s3c64xx.c +3 -3
@@ -132,7 +132,7 @@struct s3c64xx_spi_dma_data {unsigned ch; -enum dma_data_direction direction; +enum dma_transfer_direction direction;enum dma_ch dmach;struct property *dma_prop; };
@@ -1065,11 +1065,11 @@ static int __devinit s3c64xx_spi_get_dmares(if (tx) { dma_data = &sdd->tx_dma; - dma_data->direction =DMA_TO_DEVICE ; + dma_data->direction =DMA_MEM_TO_DEV ; chan_str ="tx" ; }else { dma_data = &sdd->rx_dma; - dma_data->direction =DMA_FROM_DEVICE ; + dma_data->direction =DMA_DEV_TO_MEM ; chan_str ="rx" ; }