Add hook arch_ioremap() for parisc's special operation when ioremap(),
then ioremap_[wc|uc]() are converted to use ioremap_prot() from
GENERIC_IOREMAP.
Signed-off-by: Baoquan He <bhe@redhat.com>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-parisc@vger.kernel.org
---
arch/parisc/Kconfig | 1 +
arch/parisc/include/asm/io.h | 16 ++++++---
arch/parisc/mm/ioremap.c | 65 ++++--------------------------------
3 files changed, 18 insertions(+), 64 deletions(-)
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index 7f059cd1196a..5fed465c9b83 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -36,6 +36,7 @@ config PARISC
select GENERIC_ATOMIC64 if !64BIT
select GENERIC_IRQ_PROBE
select GENERIC_PCI_IOMAP
+ select GENERIC_IOREMAP
select ARCH_HAVE_NMI_SAFE_CMPXCHG
select GENERIC_SMP_IDLE_THREAD
select GENERIC_ARCH_TOPOLOGY if SMP
diff --git a/arch/parisc/include/asm/io.h b/arch/parisc/include/asm/io.h
index 42ffb60a6ea9..614e21d9749f 100644
--- a/arch/parisc/include/asm/io.h
+++ b/arch/parisc/include/asm/io.h
@@ -123,13 +123,19 @@ static inline void gsc_writeq(unsigned long long val, unsigned long addr)
}
/*
- * The standard PCI ioremap interfaces
+ * I/O memory mapping functions.
*/
-void __iomem *ioremap(unsigned long offset, unsigned long size);
-#define ioremap_wc ioremap
-#define ioremap_uc ioremap
+void __iomem *
+arch_ioremap(phys_addr_t *paddr, size_t size, unsigned long prot);
+#define arch_ioremap arch_ioremap
-extern void iounmap(const volatile void __iomem *addr);
+#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | \
+ _PAGE_ACCESSED | _PAGE_NO_CACHE)
+
+#define ioremap_wc(addr, size) \
+ ioremap_prot((addr), (size), _PAGE_IOREMAP)
+#define ioremap_uc(addr, size) \
+ ioremap_prot((addr), (size), _PAGE_IOREMAP)
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
{
diff --git a/arch/parisc/mm/ioremap.c b/arch/parisc/mm/ioremap.c
index 345ff0b66499..28884757fad0 100644
--- a/arch/parisc/mm/ioremap.c
+++ b/arch/parisc/mm/ioremap.c
@@ -13,38 +13,19 @@
#include <linux/io.h>
#include <linux/mm.h>
-/*
- * Generic mapping function (not visible outside):
- */
-
-/*
- * Remap an arbitrary physical address space into the kernel virtual
- * address space.
- *
- * NOTE! We need to allow non-page-aligned mappings too: we will obviously
- * have to convert them into an offset in a page-aligned mapping, but the
- * caller shouldn't need to know that small detail.
- */
-void __iomem *ioremap(unsigned long phys_addr, unsigned long size)
+void __iomem *
+arch_ioremap(phys_addr_t *paddr, size_t size, unsigned long *prot_val)
{
- void __iomem *addr;
- struct vm_struct *area;
- unsigned long offset, last_addr;
- pgprot_t pgprot;
+ phys_addr_t phys_addr = *paddr;
#ifdef CONFIG_EISA
unsigned long end = phys_addr + size - 1;
/* Support EISA addresses */
if ((phys_addr >= 0x00080000 && end < 0x000fffff) ||
(phys_addr >= 0x00500000 && end < 0x03bfffff))
- phys_addr |= F_EXTEND(0xfc000000);
+ *paddr = phys_addr |= F_EXTEND(0xfc000000);
#endif
- /* Don't allow wraparound or zero size */
- last_addr = phys_addr + size - 1;
- if (!size || last_addr < phys_addr)
- return NULL;
-
/*
* Don't allow anybody to remap normal RAM that we're using..
*/
@@ -58,43 +39,9 @@ void __iomem *ioremap(unsigned long phys_addr, unsigned long size)
for (page = virt_to_page(t_addr);
page <= virt_to_page(t_end); page++) {
if(!PageReserved(page))
- return NULL;
+ return IOMEM_ERR_PTR(-EINVAL);
}
}
- pgprot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY |
- _PAGE_ACCESSED | _PAGE_NO_CACHE);
-
- /*
- * Mappings have to be page-aligned
- */
- offset = phys_addr & ~PAGE_MASK;
- phys_addr &= PAGE_MASK;
- size = PAGE_ALIGN(last_addr + 1) - phys_addr;
-
- /*
- * Ok, go for it..
- */
- area = get_vm_area(size, VM_IOREMAP);
- if (!area)
- return NULL;
-
- addr = (void __iomem *) area->addr;
- if (ioremap_page_range((unsigned long)addr, (unsigned long)addr + size,
- phys_addr, pgprot)) {
- vunmap(addr);
- return NULL;
- }
-
- return (void __iomem *) (offset + (char __iomem *)addr);
-}
-EXPORT_SYMBOL(ioremap);
-
-void iounmap(const volatile void __iomem *io_addr)
-{
- unsigned long addr = (unsigned long)io_addr & PAGE_MASK;
-
- if (is_vmalloc_addr((void *)addr))
- vunmap((void *)addr);
+ return NULL;
}
-EXPORT_SYMBOL(iounmap);
--
2.34.1
Hi Baoquan,
I love your patch! Yet something to improve:
[auto build test ERROR on akpm-mm/mm-everything]
url: https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/mm-ioremap-Convert-architectures-to-take-GENERIC_IOREMAP-way/20220820-083435
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
config: parisc-randconfig-r005-20220820 (https://download.01.org/0day-ci/archive/20220820/202208201135.YyN9CXsu-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/570f2a3347cc83c9ea71d3dbbebfad8ea085ecc6
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Baoquan-He/mm-ioremap-Convert-architectures-to-take-GENERIC_IOREMAP-way/20220820-083435
git checkout 570f2a3347cc83c9ea71d3dbbebfad8ea085ecc6
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc prepare
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from arch/parisc/include/asm/io.h:315,
from include/linux/io.h:13,
from include/linux/irq.h:20,
from arch/parisc/include/asm/hardirq.h:13,
from include/linux/hardirq.h:11,
from arch/parisc/kernel/asm-offsets.c:21:
>> include/asm-generic/iomap.h:97: warning: "ioremap_wc" redefined
97 | #define ioremap_wc ioremap
|
arch/parisc/include/asm/io.h:135: note: this is the location of the previous definition
135 | #define ioremap_wc(addr, size) \
|
include/linux/io.h: In function 'pci_remap_cfgspace':
>> include/linux/io.h:89:44: error: implicit declaration of function 'ioremap'; did you mean 'ioremap_np'? [-Werror=implicit-function-declaration]
89 | return ioremap_np(offset, size) ?: ioremap(offset, size);
| ^~~~~~~
| ioremap_np
>> include/linux/io.h:89:42: warning: pointer/integer type mismatch in conditional expression
89 | return ioremap_np(offset, size) ?: ioremap(offset, size);
| ^
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:117: arch/parisc/kernel/asm-offsets.s] Error 1
make[2]: Target '__build' not remade because of errors.
make[1]: *** [Makefile:1207: prepare0] Error 2
make[1]: Target 'prepare' not remade because of errors.
make: *** [Makefile:222: __sub-make] Error 2
make: Target 'prepare' not remade because of errors.
vim +89 include/linux/io.h
7d3dcf26a6559f Christoph Hellwig 2015-08-10 72
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 73 #ifdef CONFIG_PCI
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 74 /*
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 75 * The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and
b10eb2d50911f9 Hector Martin 2021-03-25 76 * Posting") mandate non-posted configuration transactions. This default
b10eb2d50911f9 Hector Martin 2021-03-25 77 * implementation attempts to use the ioremap_np() API to provide this
b10eb2d50911f9 Hector Martin 2021-03-25 78 * on arches that support it, and falls back to ioremap() on those that
b10eb2d50911f9 Hector Martin 2021-03-25 79 * don't. Overriding this function is deprecated; arches that properly
b10eb2d50911f9 Hector Martin 2021-03-25 80 * support non-posted accesses should implement ioremap_np() instead, which
b10eb2d50911f9 Hector Martin 2021-03-25 81 * this default implementation can then use to return mappings compliant with
b10eb2d50911f9 Hector Martin 2021-03-25 82 * the PCI specification.
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 83 */
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 84 #ifndef pci_remap_cfgspace
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 85 #define pci_remap_cfgspace pci_remap_cfgspace
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 86 static inline void __iomem *pci_remap_cfgspace(phys_addr_t offset,
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 87 size_t size)
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 88 {
b10eb2d50911f9 Hector Martin 2021-03-25 @89 return ioremap_np(offset, size) ?: ioremap(offset, size);
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 90 }
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 91 #endif
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 92 #endif
cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 93
--
0-DAY CI Kernel Test Service
https://01.org/lkp
Hi,
On 08/20/22 at 12:03pm, kernel test robot wrote:
> Hi Baoquan,
>
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on akpm-mm/mm-everything]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/mm-ioremap-Convert-architectures-to-take-GENERIC_IOREMAP-way/20220820-083435
> base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> config: parisc-randconfig-r005-20220820 (https://download.01.org/0day-ci/archive/20220820/202208201135.YyN9CXsu-lkp@intel.com/config)
> compiler: hppa-linux-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # https://github.com/intel-lab-lkp/linux/commit/570f2a3347cc83c9ea71d3dbbebfad8ea085ecc6
> git remote add linux-review https://github.com/intel-lab-lkp/linux
> git fetch --no-tags linux-review Baoquan-He/mm-ioremap-Convert-architectures-to-take-GENERIC_IOREMAP-way/20220820-083435
> git checkout 570f2a3347cc83c9ea71d3dbbebfad8ea085ecc6
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc prepare
>
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
I finally installed below RPM packages and run command to reproduce
the build errors. Thanks for your help, Helge.
binutils-hppa64-linux-gnu
gcc-hppa64-linux-gnu
binutils-hppa-linux-gnu
gcc-hppa-linux-gnu
make ARCH=parisc defconfig
make ARCH=parisc -j320 CROSS_COMPILE=/usr/bin/hppa-linux-gnu-
make ARCH=parisc64 defconfig
make ARCH=parisc64 -j320 CROSS_COMPILE=/usr/bin/hppa64-linux-gnu-
The below draft patch can fix all build errors. There are some symbol
declaration or defination conflict among asm-generic/io.h,
asm-generic/iomap.h, asm-generic/pci-iomap.h and asm/io.h. Some of them
may need be taken out to be an independent patch since it could be a
generic issue if enable GENERIC_IOREMAP. I saw the build error on superH
too.
diff --git a/arch/parisc/include/asm/io.h b/arch/parisc/include/asm/io.h
index 614e21d9749f..879578edf342 100644
--- a/arch/parisc/include/asm/io.h
+++ b/arch/parisc/include/asm/io.h
@@ -126,7 +126,7 @@ static inline void gsc_writeq(unsigned long long val, unsigned long addr)
* I/O memory mapping functions.
*/
void __iomem *
-arch_ioremap(phys_addr_t *paddr, size_t size, unsigned long prot);
+arch_ioremap(phys_addr_t *paddr, size_t size, unsigned long *prot_val);
#define arch_ioremap arch_ioremap
#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | \
@@ -137,6 +137,8 @@ arch_ioremap(phys_addr_t *paddr, size_t size, unsigned long prot);
#define ioremap_uc(addr, size) \
ioremap_prot((addr), (size), _PAGE_IOREMAP)
+#define ARCH_HAS_IOREMAP_WC
+
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
{
return (*(volatile unsigned char __force *) (addr));
@@ -205,6 +207,15 @@ static inline void writeq(unsigned long long q, volatile void __iomem *addr)
__raw_writeq((__u64 __force) cpu_to_le64(q), addr);
}
+#define __raw_readb __raw_readb
+#define __raw_readw __raw_readw
+#define __raw_readl __raw_readl
+#define __raw_readq __raw_readq
+#define __raw_writeb __raw_writeb
+#define __raw_writew __raw_writew
+#define __raw_writel __raw_writel
+#define __raw_writeq __raw_writeq
+
#define readb readb
#define readw readw
#define readl readl
@@ -223,6 +234,9 @@ static inline void writeq(unsigned long long q, volatile void __iomem *addr)
#define writel_relaxed(l, addr) writel(l, addr)
#define writeq_relaxed(q, addr) writeq(q, addr)
+#define memset_io memset_io
+#define memcpy_fromio memcpy_fromio
+#define memcpy_toio memcpy_toio
void memset_io(volatile void __iomem *addr, unsigned char val, int count);
void memcpy_fromio(void *dst, const volatile void __iomem *src, int count);
void memcpy_toio(volatile void __iomem *dst, const void *src, int count);
@@ -244,10 +258,17 @@ extern void eisa_out16(unsigned short data, unsigned short port);
extern void eisa_out32(unsigned int data, unsigned short port);
#if defined(CONFIG_PCI)
+#define inb inb
+#define inw inw
+#define inl inl
extern unsigned char inb(int addr);
extern unsigned short inw(int addr);
extern unsigned int inl(int addr);
+#define outb outb
+#define outw outw
+#define outl outl
+#define inl inl
extern void outb(unsigned char b, int addr);
extern void outw(unsigned short b, int addr);
extern void outl(unsigned int b, int addr);
@@ -292,6 +313,13 @@ extern void outsb (unsigned long port, const void *src, unsigned long count);
extern void outsw (unsigned long port, const void *src, unsigned long count);
extern void outsl (unsigned long port, const void *src, unsigned long count);
+#define insb insb
+#define insw insw
+#define insl insl
+#define outsb outsb
+#define outsw outsw
+#define outsl outsl
+
/* IO Port space is : BBiiii where BB is HBA number. */
#define IO_SPACE_LIMIT 0x00ffffff
@@ -320,6 +348,7 @@ extern void iowrite64be(u64 val, void __iomem *addr);
*/
#define xlate_dev_mem_ptr(p) __va(p)
+#include <asm-generic/io.h>
extern int devmem_is_allowed(unsigned long pfn);
#endif
diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h
index 08237ae8b840..7bf3581ecb0e 100644
--- a/include/asm-generic/iomap.h
+++ b/include/asm-generic/iomap.h
@@ -26,12 +26,19 @@
* in the low address range. Architectures for which this is not
* true can't use this generic implementation.
*/
+#define ioread8 ioread8
+#define ioread16 ioread16
+#define ioread16be ioread16be
+#define ioread32 ioread32
+#define ioread32be ioread32be
extern unsigned int ioread8(const void __iomem *);
extern unsigned int ioread16(const void __iomem *);
extern unsigned int ioread16be(const void __iomem *);
extern unsigned int ioread32(const void __iomem *);
extern unsigned int ioread32be(const void __iomem *);
#ifdef CONFIG_64BIT
+#define ioread64 ioread64
+#define ioread64be ioread64be
extern u64 ioread64(const void __iomem *);
extern u64 ioread64be(const void __iomem *);
#endif
@@ -47,12 +54,19 @@ extern u64 ioread64be_lo_hi(const void __iomem *addr);
extern u64 ioread64be_hi_lo(const void __iomem *addr);
#endif
+#define iowrite8 iowrite8
+#define iowrite16 iowrite16
+#define iowrite16be iowrite16be
+#define iowrite32 iowrite32
+#define iowrite32be iowrite32be
extern void iowrite8(u8, void __iomem *);
extern void iowrite16(u16, void __iomem *);
extern void iowrite16be(u16, void __iomem *);
extern void iowrite32(u32, void __iomem *);
extern void iowrite32be(u32, void __iomem *);
#ifdef CONFIG_64BIT
+#define iowrite64 iowrite64
+#define iowrite64be iowrite64be
extern void iowrite64(u64, void __iomem *);
extern void iowrite64be(u64, void __iomem *);
#endif
@@ -79,16 +93,24 @@ extern void iowrite64be_hi_lo(u64 val, void __iomem *addr);
* memory across multiple ports, use "memcpy_toio()"
* and friends.
*/
+#define ioread8_rep ioread8_rep
+#define ioread16_rep ioread16_rep
+#define ioread32_rep ioread32_rep
extern void ioread8_rep(const void __iomem *port, void *buf, unsigned long count);
extern void ioread16_rep(const void __iomem *port, void *buf, unsigned long count);
extern void ioread32_rep(const void __iomem *port, void *buf, unsigned long count);
+#define iowrite8_rep iowrite8_rep
+#define iowrite16_rep iowrite16_rep
+#define iowrite32_rep iowrite32_rep
extern void iowrite8_rep(void __iomem *port, const void *buf, unsigned long count);
extern void iowrite16_rep(void __iomem *port, const void *buf, unsigned long count);
extern void iowrite32_rep(void __iomem *port, const void *buf, unsigned long count);
#ifdef CONFIG_HAS_IOPORT_MAP
/* Create a virtual mapping cookie for an IO port range */
+#define ioport_map ioport_map
+#define ioport_unmap ioport_unmap
extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
extern void ioport_unmap(void __iomem *);
#endif
diff --git a/include/asm-generic/pci_iomap.h b/include/asm-generic/pci_iomap.h
index 8fbb0a55545d..f6889ea449fa 100644
--- a/include/asm-generic/pci_iomap.h
+++ b/include/asm-generic/pci_iomap.h
@@ -19,6 +19,7 @@ extern void __iomem *pci_iomap_wc_range(struct pci_dev *dev, int bar,
unsigned long offset,
unsigned long maxlen);
extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
+#define pci_iounmap pci_iounmap
/* Create a virtual mapping cookie for a port on a given PCI device.
* Do not call this directly, it exists to make it easier for architectures
* to override */
Hi,
On 08/20/22 at 12:03pm, kernel test robot wrote:
> Hi Baoquan,
>
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on akpm-mm/mm-everything]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/mm-ioremap-Convert-architectures-to-take-GENERIC_IOREMAP-way/20220820-083435
> base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> config: parisc-randconfig-r005-20220820 (https://download.01.org/0day-ci/archive/20220820/202208201135.YyN9CXsu-lkp@intel.com/config)
> compiler: hppa-linux-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # https://github.com/intel-lab-lkp/linux/commit/570f2a3347cc83c9ea71d3dbbebfad8ea085ecc6
> git remote add linux-review https://github.com/intel-lab-lkp/linux
> git fetch --no-tags linux-review Baoquan-He/mm-ioremap-Convert-architectures-to-take-GENERIC_IOREMAP-way/20220820-083435
> git checkout 570f2a3347cc83c9ea71d3dbbebfad8ea085ecc6
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc prepare
Thanks for reporting. While it failed with "hppa-linux-gcc: unknown compiler" as below showing. Could you help check and tell what's wrong?
[root@ ~]# ls
0day anaconda-ks.cfg bin EFI_BOOT_ENTRY.TXT linux NETBOOT_METHOD.TXT original-ks.cfg RECIPE.TXT
[root@ ~]# ls 0day/gcc-12.1.0-nolibc/
hppa-linux x86_64-gcc-12.1.0-nolibc_hppa-linux.tar.xz
[root@ ~]# ls bin/make.cross
bin/make.cross
[root@ ~]# pwd
/root
[root@ ~]# cd linux/
[root@ linux]# pwd
/root/linux
[root@ linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=/root/linux/build_dir ARCH=parisc prepare
Compiler will be installed in /root/0day
PATH=/root/0day/gcc-12.1.0-nolibc/hppa-linux/bin:/root/.local/bin:/root/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
make --keep-going --jobs=160 W=1 O=/root/linux/build_dir ARCH=parisc prepare
make[1]: Entering directory '/root/linux/build_dir'
/root/0day/gcc-12.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc: /root/0day/gcc-12.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc: cannot execute binary file
SYNC include/config/auto.conf.cmd
/root/0day/gcc-12.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc: /root/0day/gcc-12.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc: cannot execute binary file
GEN Makefile
hppa-linux-gcc: unknown compiler
scripts/Kconfig.include:44: Sorry, this compiler is not supported.
make[3]: *** [../scripts/kconfig/Makefile:77: syncconfig] Error 1
make[2]: *** [../Makefile:632: syncconfig] Error 2
make[1]: *** [/root/linux/Makefile:734: include/config/auto.conf.cmd] Error 2
make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
make[1]: Failed to remake makefile 'include/config/auto.conf'.
GEN Makefile
Error: kernelrelease not valid - run 'make prepare' to update it
make[1]: Target 'prepare' not remade because of errors.
make[1]: Leaving directory '/root/linux/build_dir'
make: *** [Makefile:222: __sub-make] Error 2
make: Target 'prepare' not remade because of errors.
>
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
>
> All error/warnings (new ones prefixed by >>):
>
> In file included from arch/parisc/include/asm/io.h:315,
> from include/linux/io.h:13,
> from include/linux/irq.h:20,
> from arch/parisc/include/asm/hardirq.h:13,
> from include/linux/hardirq.h:11,
> from arch/parisc/kernel/asm-offsets.c:21:
> >> include/asm-generic/iomap.h:97: warning: "ioremap_wc" redefined
> 97 | #define ioremap_wc ioremap
> |
> arch/parisc/include/asm/io.h:135: note: this is the location of the previous definition
> 135 | #define ioremap_wc(addr, size) \
> |
> include/linux/io.h: In function 'pci_remap_cfgspace':
> >> include/linux/io.h:89:44: error: implicit declaration of function 'ioremap'; did you mean 'ioremap_np'? [-Werror=implicit-function-declaration]
> 89 | return ioremap_np(offset, size) ?: ioremap(offset, size);
> | ^~~~~~~
> | ioremap_np
> >> include/linux/io.h:89:42: warning: pointer/integer type mismatch in conditional expression
> 89 | return ioremap_np(offset, size) ?: ioremap(offset, size);
> | ^
> cc1: some warnings being treated as errors
> make[2]: *** [scripts/Makefile.build:117: arch/parisc/kernel/asm-offsets.s] Error 1
> make[2]: Target '__build' not remade because of errors.
> make[1]: *** [Makefile:1207: prepare0] Error 2
> make[1]: Target 'prepare' not remade because of errors.
> make: *** [Makefile:222: __sub-make] Error 2
> make: Target 'prepare' not remade because of errors.
>
>
> vim +89 include/linux/io.h
>
> 7d3dcf26a6559f Christoph Hellwig 2015-08-10 72
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 73 #ifdef CONFIG_PCI
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 74 /*
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 75 * The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and
> b10eb2d50911f9 Hector Martin 2021-03-25 76 * Posting") mandate non-posted configuration transactions. This default
> b10eb2d50911f9 Hector Martin 2021-03-25 77 * implementation attempts to use the ioremap_np() API to provide this
> b10eb2d50911f9 Hector Martin 2021-03-25 78 * on arches that support it, and falls back to ioremap() on those that
> b10eb2d50911f9 Hector Martin 2021-03-25 79 * don't. Overriding this function is deprecated; arches that properly
> b10eb2d50911f9 Hector Martin 2021-03-25 80 * support non-posted accesses should implement ioremap_np() instead, which
> b10eb2d50911f9 Hector Martin 2021-03-25 81 * this default implementation can then use to return mappings compliant with
> b10eb2d50911f9 Hector Martin 2021-03-25 82 * the PCI specification.
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 83 */
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 84 #ifndef pci_remap_cfgspace
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 85 #define pci_remap_cfgspace pci_remap_cfgspace
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 86 static inline void __iomem *pci_remap_cfgspace(phys_addr_t offset,
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 87 size_t size)
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 88 {
> b10eb2d50911f9 Hector Martin 2021-03-25 @89 return ioremap_np(offset, size) ?: ioremap(offset, size);
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 90 }
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 91 #endif
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 92 #endif
> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 93
>
> --
> 0-DAY CI Kernel Test Service
> https://01.org/lkp
>
On 8/21/22 12:26, Baoquan He wrote:
> Hi,
>
> On 08/20/22 at 12:03pm, kernel test robot wrote:
>> Hi Baoquan,
>>
>> I love your patch! Yet something to improve:
>>
>> [auto build test ERROR on akpm-mm/mm-everything]
>>
>> url: https://github.com/intel-lab-lkp/linux/commits/Baoquan-He/mm-ioremap-Convert-architectures-to-take-GENERIC_IOREMAP-way/20220820-083435
>> base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
>> config: parisc-randconfig-r005-20220820 (https://download.01.org/0day-ci/archive/20220820/202208201135.YyN9CXsu-lkp@intel.com/config)
>> compiler: hppa-linux-gcc (GCC) 12.1.0
>> reproduce (this is a W=1 build):
>> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>> chmod +x ~/bin/make.cross
>> # https://github.com/intel-lab-lkp/linux/commit/570f2a3347cc83c9ea71d3dbbebfad8ea085ecc6
>> git remote add linux-review https://github.com/intel-lab-lkp/linux
>> git fetch --no-tags linux-review Baoquan-He/mm-ioremap-Convert-architectures-to-take-GENERIC_IOREMAP-way/20220820-083435
>> git checkout 570f2a3347cc83c9ea71d3dbbebfad8ea085ecc6
>> # save the config file
>> mkdir build_dir && cp config build_dir/.config
>> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc prepare
>
> Thanks for reporting. While it failed with "hppa-linux-gcc: unknown compiler" as below showing. Could you help check and tell what's wrong?
You need to install the gcc-hppa64-linux-gnu and gcc-hppa-linux-gnu DEBs/RPMs.
As COMPILER you probably only need "gcc" (or leave COMPILER empty/unset).
Then run "make ARCH=parisc64" (64bit) or "make ARCH=parisc" (32bit).
The Makefile should automatically detect your compiler..
Helge
>
> [root@ ~]# ls
> 0day anaconda-ks.cfg bin EFI_BOOT_ENTRY.TXT linux NETBOOT_METHOD.TXT original-ks.cfg RECIPE.TXT
> [root@ ~]# ls 0day/gcc-12.1.0-nolibc/
> hppa-linux x86_64-gcc-12.1.0-nolibc_hppa-linux.tar.xz
> [root@ ~]# ls bin/make.cross
> bin/make.cross
> [root@ ~]# pwd
> /root
> [root@ ~]# cd linux/
> [root@ linux]# pwd
> /root/linux
>
> [root@ linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=/root/linux/build_dir ARCH=parisc prepare
> Compiler will be installed in /root/0day
> PATH=/root/0day/gcc-12.1.0-nolibc/hppa-linux/bin:/root/.local/bin:/root/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
> make --keep-going --jobs=160 W=1 O=/root/linux/build_dir ARCH=parisc prepare
> make[1]: Entering directory '/root/linux/build_dir'
> /root/0day/gcc-12.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc: /root/0day/gcc-12.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc: cannot execute binary file
> SYNC include/config/auto.conf.cmd
> /root/0day/gcc-12.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc: /root/0day/gcc-12.1.0-nolibc/hppa-linux/bin/hppa-linux-gcc: cannot execute binary file
> GEN Makefile
> hppa-linux-gcc: unknown compiler
> scripts/Kconfig.include:44: Sorry, this compiler is not supported.
> make[3]: *** [../scripts/kconfig/Makefile:77: syncconfig] Error 1
> make[2]: *** [../Makefile:632: syncconfig] Error 2
> make[1]: *** [/root/linux/Makefile:734: include/config/auto.conf.cmd] Error 2
> make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
> make[1]: Failed to remake makefile 'include/config/auto.conf'.
> GEN Makefile
> Error: kernelrelease not valid - run 'make prepare' to update it
> make[1]: Target 'prepare' not remade because of errors.
> make[1]: Leaving directory '/root/linux/build_dir'
> make: *** [Makefile:222: __sub-make] Error 2
> make: Target 'prepare' not remade because of errors.
>
>
>>
>> If you fix the issue, kindly add following tag where applicable
>> Reported-by: kernel test robot <lkp@intel.com>
>>
>> All error/warnings (new ones prefixed by >>):
>>
>> In file included from arch/parisc/include/asm/io.h:315,
>> from include/linux/io.h:13,
>> from include/linux/irq.h:20,
>> from arch/parisc/include/asm/hardirq.h:13,
>> from include/linux/hardirq.h:11,
>> from arch/parisc/kernel/asm-offsets.c:21:
>>>> include/asm-generic/iomap.h:97: warning: "ioremap_wc" redefined
>> 97 | #define ioremap_wc ioremap
>> |
>> arch/parisc/include/asm/io.h:135: note: this is the location of the previous definition
>> 135 | #define ioremap_wc(addr, size) \
>> |
>> include/linux/io.h: In function 'pci_remap_cfgspace':
>>>> include/linux/io.h:89:44: error: implicit declaration of function 'ioremap'; did you mean 'ioremap_np'? [-Werror=implicit-function-declaration]
>> 89 | return ioremap_np(offset, size) ?: ioremap(offset, size);
>> | ^~~~~~~
>> | ioremap_np
>>>> include/linux/io.h:89:42: warning: pointer/integer type mismatch in conditional expression
>> 89 | return ioremap_np(offset, size) ?: ioremap(offset, size);
>> | ^
>> cc1: some warnings being treated as errors
>> make[2]: *** [scripts/Makefile.build:117: arch/parisc/kernel/asm-offsets.s] Error 1
>> make[2]: Target '__build' not remade because of errors.
>> make[1]: *** [Makefile:1207: prepare0] Error 2
>> make[1]: Target 'prepare' not remade because of errors.
>> make: *** [Makefile:222: __sub-make] Error 2
>> make: Target 'prepare' not remade because of errors.
>>
>>
>> vim +89 include/linux/io.h
>>
>> 7d3dcf26a6559f Christoph Hellwig 2015-08-10 72
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 73 #ifdef CONFIG_PCI
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 74 /*
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 75 * The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and
>> b10eb2d50911f9 Hector Martin 2021-03-25 76 * Posting") mandate non-posted configuration transactions. This default
>> b10eb2d50911f9 Hector Martin 2021-03-25 77 * implementation attempts to use the ioremap_np() API to provide this
>> b10eb2d50911f9 Hector Martin 2021-03-25 78 * on arches that support it, and falls back to ioremap() on those that
>> b10eb2d50911f9 Hector Martin 2021-03-25 79 * don't. Overriding this function is deprecated; arches that properly
>> b10eb2d50911f9 Hector Martin 2021-03-25 80 * support non-posted accesses should implement ioremap_np() instead, which
>> b10eb2d50911f9 Hector Martin 2021-03-25 81 * this default implementation can then use to return mappings compliant with
>> b10eb2d50911f9 Hector Martin 2021-03-25 82 * the PCI specification.
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 83 */
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 84 #ifndef pci_remap_cfgspace
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 85 #define pci_remap_cfgspace pci_remap_cfgspace
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 86 static inline void __iomem *pci_remap_cfgspace(phys_addr_t offset,
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 87 size_t size)
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 88 {
>> b10eb2d50911f9 Hector Martin 2021-03-25 @89 return ioremap_np(offset, size) ?: ioremap(offset, size);
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 90 }
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 91 #endif
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 92 #endif
>> cf9ea8ca4a0bea Lorenzo Pieralisi 2017-04-19 93
>>
>> --
>> 0-DAY CI Kernel Test Service
>> https://01.org/lkp
>>
>
© 2016 - 2026 Red Hat, Inc.