On Tue, 2023-11-21 at 12:20 +0800, kernel test robot wrote: > Hi Philipp, > > kernel test robot noticed the following build errors: > > [auto build test ERROR on pci/next] > [also build test ERROR on pci/for-linus linus/master v6.7-rc2 next- > 20231120] > [If your patch is applied to the wrong git tree, kindly drop us a > note. > And when submitting patch, we suggest to use '--base' as documented > in > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > url: > https://github.com/intel-lab-lkp/linux/commits/Philipp-Stanner/lib-move-pci_iomap-c-to-drivers-pci/20231121-060258 > base: > https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next > patch link: > https://lore.kernel.org/r/20231120215945.52027-3-pstanner%40redhat.com > patch subject: [PATCH 1/4] lib: move pci_iomap.c to drivers/pci/ > config: openrisc-allnoconfig > (https://download.01.org/0day-ci/archive/20231121/202311211216.KqPYvO > CI-lkp@xxxxxxxxx/config) > compiler: or1k-linux-gcc (GCC) 13.2.0 > reproduce (this is a W=1 build): > (https://download.01.org/0day-ci/archive/20231121/202311211216.KqPYvO > CI-lkp@xxxxxxxxx/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new > version of > the same patch/commit), kindly add following tags > > Reported-by: kernel test robot <lkp@xxxxxxxxx> > > Closes: > > https://lore.kernel.org/oe-kbuild-all/202311211216.KqPYvOCI-lkp@xxxxxxxxx/ > > All error/warnings (new ones prefixed by >>): > > > > drivers/pci/iomap.c:27:15: error: redefinition of > > > 'pci_iomap_range' > 27 | void __iomem *pci_iomap_range(struct pci_dev *dev, > | ^~~~~~~~~~~~~~~ > In file included from include/asm-generic/io.h:20, > from arch/openrisc/include/asm/io.h:37, > from include/linux/io.h:13, > from include/linux/irq.h:20, > from include/asm-generic/hardirq.h:17, > from > ./arch/openrisc/include/generated/asm/hardirq.h:1, > from include/linux/hardirq.h:11, > from include/linux/interrupt.h:11, > from include/linux/pci.h:38, > from drivers/pci/iomap.c:7: > include/asm-generic/pci_iomap.h:44:29: note: previous definition > of 'pci_iomap_range' with type 'void *(struct pci_dev *, int, long > unsigned int, long unsigned int)' > 44 | static inline void __iomem *pci_iomap_range(struct pci_dev > *dev, int bar, > | ^~~~~~~~~~~~~~~ > drivers/pci/iomap.c: In function 'pci_iomap_range': > > > drivers/pci/iomap.c:43:24: error: implicit declaration of > > > function '__pci_ioport_map'; did you mean 'devm_ioport_map'? [- > > > Werror=implicit-function-declaration] > 43 | return __pci_ioport_map(dev, start, len); > | ^~~~~~~~~~~~~~~~ > | devm_ioport_map > > > drivers/pci/iomap.c:43:24: warning: returning 'int' from a > > > function with return type 'void *' makes pointer from integer > > > without a cast [-Wint-conversion] > 43 | return __pci_ioport_map(dev, start, len); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > drivers/pci/iomap.c: At top level: > > > drivers/pci/iomap.c:67:15: error: redefinition of > > > 'pci_iomap_wc_range' > 67 | void __iomem *pci_iomap_wc_range(struct pci_dev *dev, > | ^~~~~~~~~~~~~~~~~~ > include/asm-generic/pci_iomap.h:50:29: note: previous definition > of 'pci_iomap_wc_range' with type 'void *(struct pci_dev *, int, > long unsigned int, long unsigned int)' > 50 | static inline void __iomem *pci_iomap_wc_range(struct > pci_dev *dev, int bar, > | ^~~~~~~~~~~~~~~~~~ > > > drivers/pci/iomap.c:110:15: error: redefinition of 'pci_iomap' > 110 | void __iomem *pci_iomap(struct pci_dev *dev, int bar, > unsigned long maxlen) > | ^~~~~~~~~ > include/asm-generic/pci_iomap.h:35:29: note: previous definition > of 'pci_iomap' with type 'void *(struct pci_dev *, int, long > unsigned int)' > 35 | static inline void __iomem *pci_iomap(struct pci_dev *dev, > int bar, unsigned long max) > | ^~~~~~~~~ > > > drivers/pci/iomap.c:131:15: error: redefinition of 'pci_iomap_wc' > 131 | void __iomem *pci_iomap_wc(struct pci_dev *dev, int bar, > unsigned long maxlen) > | ^~~~~~~~~~~~ > include/asm-generic/pci_iomap.h:40:29: note: previous definition > of 'pci_iomap_wc' with type 'void *(struct pci_dev *, int, long > unsigned int)' > 40 | static inline void __iomem *pci_iomap_wc(struct pci_dev > *dev, int bar, unsigned long max) > | ^~~~~~~~~~~~ > > > drivers/pci/iomap.c:164:6: error: redefinition of 'pci_iounmap' > 164 | void pci_iounmap(struct pci_dev *dev, void __iomem *p) > | ^~~~~~~~~~~ > include/asm-generic/pci_iomap.h:56:20: note: previous definition > of 'pci_iounmap' with type 'void(struct pci_dev *, void *)' > 56 | static inline void pci_iounmap(struct pci_dev *dev, void > __iomem *addr) > | ^~~~~~~~~~~ > cc1: some warnings being treated as errors > > Kconfig warnings: (for reference only) > WARNING: unmet direct dependencies detected for GENERIC_PCI_IOMAP > Depends on [n]: PCI [=n] > Selected by [y]: > - OPENRISC [=y] OK, so the issue here seems to be that you can not have GENERIC_PCI_IOMAP depend on PCI. Previously, #ifdef CONFIG_PCI made the (in this case) redundant function definitions disappear, which is not the case anymore for configs that want GENERIC_PCI_IOMAP but not PCI. My bad. I'll address that in the next version. P. > > > vim +/pci_iomap_range +27 drivers/pci/iomap.c > > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 11 > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 12 > /** > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 13 * > pci_iomap_range - create a virtual mapping cookie for a PCI BAR > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 14 * > @dev: PCI device that owns the BAR > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 15 * > @bar: BAR number > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 16 * > @offset: map memory at the given offset in BAR > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 17 * > @maxlen: max length of the memory to map > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 18 * > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 19 * > Using this function you will get a __iomem address to your device > BAR. > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 20 * > You can access it using ioread*() and iowrite*(). These functions > hide > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 21 * > the details if this is a MMIO or PIO address space and will just do > what > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 22 * > you expect from them in the correct way. > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 23 * > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 24 * > @maxlen specifies the maximum length to map. If you want to get > access to > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 25 * > the complete BAR from offset to the end, pass %0 here. > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 26 * > */ > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 @27 > void __iomem *pci_iomap_range(struct pci_dev *dev, > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 > 28 int bar, > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 > 29 unsigned long offset, > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 > 30 unsigned long maxlen) > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 31 { > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 32 resource_size_t start = pci_resource_start(dev, bar); > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 33 resource_size_t len = pci_resource_len(dev, bar); > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 34 unsigned long flags = pci_resource_flags(dev, bar); > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 35 > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 > 36 if (len <= offset || !start) > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 37 return NULL; > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 > 38 len -= offset; > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 > 39 start += offset; > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 40 if (maxlen && len > maxlen) > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 41 len = maxlen; > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 42 if (flags & IORESOURCE_IO) > b923650b84068b lib/pci_iomap.c Michael S. Tsirkin 2012-01-30 > @43 return __pci_ioport_map(dev, start, len); > 92b19ff50e8f24 lib/pci_iomap.c Dan Williams 2015-08-10 > 44 if (flags & IORESOURCE_MEM) > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 45 return ioremap(start, len); > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 46 /* What? */ > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 > 47 return NULL; > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 48 } > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 49 > EXPORT_SYMBOL(pci_iomap_range); > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 50 > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 51 > /** > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 52 * > pci_iomap_wc_range - create a virtual WC mapping cookie for a PCI BAR > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 53 * > @dev: PCI device that owns the BAR > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 54 * > @bar: BAR number > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 55 * > @offset: map memory at the given offset in BAR > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 56 * > @maxlen: max length of the memory to map > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 57 * > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 58 * > Using this function you will get a __iomem address to your device > BAR. > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 59 * > You can access it using ioread*() and iowrite*(). These functions > hide > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 60 * > the details if this is a MMIO or PIO address space and will just do > what > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 61 * > you expect from them in the correct way. When possible write > combining > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 62 * > is used. > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 63 * > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 64 * > @maxlen specifies the maximum length to map. If you want to get > access to > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 65 * > the complete BAR from offset to the end, pass %0 here. > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 66 * > */ > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 @67 > void __iomem *pci_iomap_wc_range(struct pci_dev *dev, > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 68 int bar, > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 69 unsigned long offset, > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 70 unsigned long maxlen) > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 71 { > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 72 resource_size_t start = pci_resource_start(dev, bar); > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 73 resource_size_t len = pci_resource_len(dev, bar); > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 74 unsigned long flags = pci_resource_flags(dev, bar); > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 75 > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 76 > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 77 if (flags & IORESOURCE_IO) > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 78 return NULL; > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 79 > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 80 if (len <= offset || !start) > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 81 return NULL; > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 82 > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 83 len -= offset; > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 84 start += offset; > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 85 if (maxlen && len > maxlen) > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 86 len = maxlen; > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 87 > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 88 if (flags & IORESOURCE_MEM) > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 89 return ioremap_wc(start, len); > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 90 > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 91 /* What? */ > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 92 return NULL; > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 93 } > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 94 > EXPORT_SYMBOL_GPL(pci_iomap_wc_range); > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 95 > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 96 > /** > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 97 * > pci_iomap - create a virtual mapping cookie for a PCI BAR > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 98 * > @dev: PCI device that owns the BAR > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 99 * > @bar: BAR number > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 100 * > @maxlen: length of the memory to map > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 101 * > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 102 * > Using this function you will get a __iomem address to your device > BAR. > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 103 * > You can access it using ioread*() and iowrite*(). These functions > hide > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 104 * > the details if this is a MMIO or PIO address space and will just do > what > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 105 * > you expect from them in the correct way. > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 106 * > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 107 * > @maxlen specifies the maximum length to map. If you want to get > access to > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 108 * > the complete BAR without checking for its length first, pass %0 here. > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 109 * > */ > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 @110 > void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long > maxlen) > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 111 { > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 > 112 return pci_iomap_range(dev, bar, 0, maxlen); > eb29d8d2aad706 lib/pci_iomap.c Michael S. Tsirkin 2013-05-29 113 } > 66eab4df288aae lib/pci_iomap.c Michael S. Tsirkin 2011-11-24 114 > EXPORT_SYMBOL(pci_iomap); > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 115 > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 116 > /** > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 117 * > pci_iomap_wc - create a virtual WC mapping cookie for a PCI BAR > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 118 * > @dev: PCI device that owns the BAR > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 119 * > @bar: BAR number > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 120 * > @maxlen: length of the memory to map > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 121 * > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 122 * > Using this function you will get a __iomem address to your device > BAR. > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 123 * > You can access it using ioread*() and iowrite*(). These functions > hide > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 124 * > the details if this is a MMIO or PIO address space and will just do > what > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 125 * > you expect from them in the correct way. When possible write > combining > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 126 * > is used. > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 127 * > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 128 * > @maxlen specifies the maximum length to map. If you want to get > access to > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 129 * > the complete BAR without checking for its length first, pass %0 here. > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 130 * > */ > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 @131 > void __iomem *pci_iomap_wc(struct pci_dev *dev, int bar, unsigned > long maxlen) > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 132 { > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 > 133 return pci_iomap_wc_range(dev, bar, 0, maxlen); > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 134 } > 1b3d4200c1e00a lib/pci_iomap.c Luis R. Rodriguez 2015-08-24 135 > EXPORT_SYMBOL_GPL(pci_iomap_wc); > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 136 > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 137 /* > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 138 * > pci_iounmap() somewhat illogically comes from lib/iomap.c for the > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 139 * > CONFIG_GENERIC_IOMAP case, because that's the code that knows about > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 140 * > the different IOMAP ranges. > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 141 * > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 142 * > But if the architecture does not use the generic iomap code, and if > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 143 * > it has _not_ defined it's own private pci_iounmap function, we define > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 144 * > it here. > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 145 * > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 146 * > NOTE! This default implementation assumes that if the architecture > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 147 * > support ioport mapping (HAS_IOPORT_MAP), the ioport mapping will > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 148 * > be fixed to the range [ PCI_IOBASE, PCI_IOBASE+IO_SPACE_LIMIT [, > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 149 * > and does not need unmapping with 'ioport_unmap()'. > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 150 * > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 151 * > If you have different rules for your architecture, you need to > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 152 * > implement your own pci_iounmap() that knows the rules for where > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 153 * > and how IO vs MEM get mapped. > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 154 * > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 155 * > This code is odd, and the ARCH_HAS/ARCH_WANTS #define logic comes > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 156 * > from legacy <asm-generic/io.h> header file behavior. In particular, > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 157 * > it would seem to make sense to do the iounmap(p) for the non-IO-space > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 158 * > case here regardless, but that's not what the old header file code > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 159 * > did. Probably incorrectly, but this is meant to be bug-for-bug > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 160 * > compatible. > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 161 > */ > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 162 > #if defined(ARCH_WANTS_GENERIC_PCI_IOUNMAP) > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 163 > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 @164 > void pci_iounmap(struct pci_dev *dev, void __iomem *p) > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 165 { > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 166 > #ifdef ARCH_HAS_GENERIC_IOPORT_MAP > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 > 167 uintptr_t start = (uintptr_t) PCI_IOBASE; > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 > 168 uintptr_t addr = (uintptr_t) p; > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 169 > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 > 170 if (addr >= start && addr < start + IO_SPACE_LIMIT) > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 > 171 return; > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 > 172 iounmap(p); > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 173 > #endif > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 174 } > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 175 > EXPORT_SYMBOL(pci_iounmap); > 316e8d79a0959c lib/pci_iomap.c Linus Torvalds 2021-09-19 176 >