Re: [PATCH] alpha: Declare virt_to_phys and virt_to_bus parameter as pointer to volatile
From: Arnd Bergmann
Date: Thu Sep 09 2021 - 04:13:52 EST
On Thu, Sep 9, 2021 at 7:00 AM Guenter Roeck <linux@xxxxxxxxxxxx> 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@xxxxxxxxxx>
> Signed-off-by: Guenter Roeck <linux@xxxxxxxxxxxx>
Acked-by: Arnd Bergmann <arnd@xxxxxxxx>
> ---
> 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