linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] alpha: Declare virt_to_phys and virt_to_bus parameter as pointer to volatile
@ 2021-09-09  5:00 Guenter Roeck
  2021-09-09  8:13 ` Arnd Bergmann
  0 siblings, 1 reply; 2+ messages in thread
From: Guenter Roeck @ 2021-09-09  5:00 UTC (permalink / raw)
  To: Richard Henderson
  Cc: Ivan Kokshaysky, Matt Turner, linux-alpha, linux-kernel,
	Guenter Roeck, Arnd Bergmann

Some drivers pass a pointer to volatile data to virt_to_bus() and
virt_to_phys(). One exception is alpha. This results in a number
of compile errors such as

drivers/net/wan/lmc/lmc_main.c: In function 'lmc_softreset':
drivers/net/wan/lmc/lmc_main.c:1782:50: error:
	passing argument 1 of 'virt_to_bus' discards 'volatile'
	qualifier from pointer target type

drivers/atm/ambassador.c: In function 'do_loader_command':
drivers/atm/ambassador.c:1747:58: error:
	passing argument 1 of 'virt_to_bus' discards 'volatile'
	qualifier from pointer target type

Declare the parameter of virt_to_phys and virt_to_bus as pointer to volatile
to fix the problem.

Cc: Arnd Bergmann <arnd@kernel.org>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
We could instead try to modify the affected drivers, but both drivers
use the buffer to communicate with the chip, so that would require lots
of typecasts there. Another option would be to disable affected drivers
for alpha, but that seems undesirable.
Other ideas welcome.

 arch/alpha/include/asm/io.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/alpha/include/asm/io.h b/arch/alpha/include/asm/io.h
index 0fab5ac90775..c9cb554fbe54 100644
--- a/arch/alpha/include/asm/io.h
+++ b/arch/alpha/include/asm/io.h
@@ -60,7 +60,7 @@ extern inline void set_hae(unsigned long new_hae)
  * Change virtual addresses to physical addresses and vv.
  */
 #ifdef USE_48_BIT_KSEG
-static inline unsigned long virt_to_phys(void *address)
+static inline unsigned long virt_to_phys(volatile void *address)
 {
 	return (unsigned long)address - IDENT_ADDR;
 }
@@ -70,7 +70,7 @@ static inline void * phys_to_virt(unsigned long address)
 	return (void *) (address + IDENT_ADDR);
 }
 #else
-static inline unsigned long virt_to_phys(void *address)
+static inline unsigned long virt_to_phys(volatile void *address)
 {
         unsigned long phys = (unsigned long)address;
 
@@ -106,7 +106,7 @@ static inline void * phys_to_virt(unsigned long address)
 extern unsigned long __direct_map_base;
 extern unsigned long __direct_map_size;
 
-static inline unsigned long __deprecated virt_to_bus(void *address)
+static inline unsigned long __deprecated virt_to_bus(volatile void *address)
 {
 	unsigned long phys = virt_to_phys(address);
 	unsigned long bus = phys + __direct_map_base;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] alpha: Declare virt_to_phys and virt_to_bus parameter as pointer to volatile
  2021-09-09  5:00 [PATCH] alpha: Declare virt_to_phys and virt_to_bus parameter as pointer to volatile Guenter Roeck
@ 2021-09-09  8:13 ` Arnd Bergmann
  0 siblings, 0 replies; 2+ messages in thread
From: Arnd Bergmann @ 2021-09-09  8:13 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Richard Henderson, Ivan Kokshaysky, Matt Turner, alpha,
	Linux Kernel Mailing List

On Thu, Sep 9, 2021 at 7:00 AM Guenter Roeck <linux@roeck-us.net> wrote:
>
> Some drivers pass a pointer to volatile data to virt_to_bus() and
> virt_to_phys(). One exception is alpha. This results in a number
> of compile errors such as
>
> drivers/net/wan/lmc/lmc_main.c: In function 'lmc_softreset':
> drivers/net/wan/lmc/lmc_main.c:1782:50: error:
>         passing argument 1 of 'virt_to_bus' discards 'volatile'
>         qualifier from pointer target type
>
> drivers/atm/ambassador.c: In function 'do_loader_command':
> drivers/atm/ambassador.c:1747:58: error:
>         passing argument 1 of 'virt_to_bus' discards 'volatile'
>         qualifier from pointer target type
>
> Declare the parameter of virt_to_phys and virt_to_bus as pointer to volatile
> to fix the problem.
>
> Cc: Arnd Bergmann <arnd@kernel.org>
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>

Acked-by: Arnd Bergmann <arnd@arndb.de>

> ---
> We could instead try to modify the affected drivers, but both drivers
> use the buffer to communicate with the chip, so that would require lots
> of typecasts there. Another option would be to disable affected drivers
> for alpha, but that seems undesirable.
> Other ideas welcome.

Your patch is the obvious workaround, as this makes alpha behave the
same way as all the other architectures.

Drivers using virt_to_bus() are already nonportable, so we could also
decide to go through all users to see which ones are ready to be
retired, and go through the architectures to see which ones actually
still require drivers that use virt_to_bus(), removing the interface from
the others. The ones I see are

arch/alpha/Kconfig:     select VIRT_TO_BUS
arch/h8300/Kconfig:     select VIRT_TO_BUS
arch/ia64/Kconfig:      select VIRT_TO_BUS
arch/m68k/Kconfig:      select VIRT_TO_BUS
arch/microblaze/Kconfig:        select VIRT_TO_BUS
arch/mips/Kconfig:      select VIRT_TO_BUS
arch/parisc/Kconfig:    select VIRT_TO_BUS
arch/powerpc/Kconfig:   select VIRT_TO_BUS                      if !PPC64
arch/x86/Kconfig:       select VIRT_TO_BUS
arch/xtensa/Kconfig:    select VIRT_TO_BUS

drivers/atm/Kconfig:    depends on PCI && VIRT_TO_BUS
drivers/atm/Kconfig:    depends on PCI && VIRT_TO_BUS
drivers/atm/Kconfig:    depends on PCI && VIRT_TO_BUS
drivers/atm/Kconfig:    depends on PCI && VIRT_TO_BUS
drivers/media/pci/sta2x11/Kconfig:      depends on PCI && VIDEO_V4L2
&& VIRT_TO_BUS && I2C
drivers/net/appletalk/Kconfig:  depends on DEV_APPLETALK && (ISA ||
EISA) && ISA_DMA_API && VIRT_TO_BUS
drivers/net/ethernet/dec/tulip/Kconfig: depends on VIRT_TO_BUS ||
ALPHA || PPC || SPARC
drivers/net/wan/Kconfig:        depends on ISA && m && ISA_DMA_API &&
INET && HDLC && VIRT_TO_BUS
drivers/net/wan/Kconfig:        depends on ISA && m && ISA_DMA_API &&
HDLC && VIRT_TO_BUS
drivers/net/wan/Kconfig:        depends on PCI && VIRT_TO_BUS && HDLC
drivers/net/wan/Kconfig:        depends on ISA && m && ISA_DMA_API &&
INET && HDLC && VIRT_TO_BUS
drivers/scsi/Kconfig:   depends on SCSI && PCI && VIRT_TO_BUS
drivers/scsi/Kconfig:   depends on PCI && SCSI && VIRT_TO_BUS
drivers/vme/bridges/Kconfig:    depends on VIRT_TO_BUS

I think we can drop VIRT_TO_BUS from everything other
than x86-32, m68k and ppc32, and fix the tulip and xlr_net
drivers to not use it.

        Arnd

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-09-09  8:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-09  5:00 [PATCH] alpha: Declare virt_to_phys and virt_to_bus parameter as pointer to volatile Guenter Roeck
2021-09-09  8:13 ` Arnd Bergmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).