Hi Aditya, First bad commit (maybe != root cause): tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: c5fe7a97f20c7f3070ac870144515c0fabc6b999 commit: 3e58e839150db0857dfcb3a0bb3d4af4c6ac1abf scripts: kernel-doc: add warning for comment not following kernel-doc syntax date: 1 year, 4 months ago config: mips-randconfig-r015-20220717 (https://download.01.org/0day-ci/archive/20220717/202207170450.i5OUq4GL-lkp@xxxxxxxxx/config) compiler: mips64el-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://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3e58e839150db0857dfcb3a0bb3d4af4c6ac1abf git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 3e58e839150db0857dfcb3a0bb3d4af4c6ac1abf # 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=mips SHELL=/bin/bash arch/mips/cavium-octeon/executive/ arch/mips/pci/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): arch/mips/pci/msi-octeon.c:61: warning: expecting prototype for Called when a driver request MSI interrupts instead of the(). Prototype was for arch_setup_msi_irq() instead >> arch/mips/pci/msi-octeon.c:215: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Called when a device no longer needs its MSI interrupts. All -- arch/mips/cavium-octeon/executive/octeon-model.c:40: warning: expecting prototype for Read a byte of fuse data(). Prototype was for cvmx_fuse_read_byte() instead >> arch/mips/cavium-octeon/executive/octeon-model.c:495: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Given the chip processor ID from COP0, this function returns a -- >> arch/mips/cavium-octeon/executive/cvmx-helper.c:53: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Return the number of interfaces the chip has. Each interface arch/mips/cavium-octeon/executive/cvmx-helper.c:74: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Return the number of ports on an interface. Depending on the arch/mips/cavium-octeon/executive/cvmx-helper.c:89: warning: Cannot understand * @INTERNAL on line 89 - I thought it was a doc line arch/mips/cavium-octeon/executive/cvmx-helper.c:141: warning: Cannot understand * @INTERNAL on line 141 - I thought it was a doc line arch/mips/cavium-octeon/executive/cvmx-helper.c:241: warning: Cannot understand * @INTERNAL on line 241 - I thought it was a doc line arch/mips/cavium-octeon/executive/cvmx-helper.c:277: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Get the operating mode of an interface. Depending on the Octeon arch/mips/cavium-octeon/executive/cvmx-helper.c:359: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Configure the IPD/PIP tagging and QoS options for a specific arch/mips/cavium-octeon/executive/cvmx-helper.c:408: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * This function sets the interface_port_count[interface] correctly, arch/mips/cavium-octeon/executive/cvmx-helper.c:493: warning: expecting prototype for This function probes an interface to determine the actual(). Prototype was for cvmx_helper_interface_probe() instead arch/mips/cavium-octeon/executive/cvmx-helper.c:550: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Setup the IPD/PIP for the ports on an interface. Packet arch/mips/cavium-octeon/executive/cvmx-helper.c:572: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Setup global setting for IPD/PIP not related to a specific arch/mips/cavium-octeon/executive/cvmx-helper.c:594: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Setup the PKO for the ports on an interface. The number of arch/mips/cavium-octeon/executive/cvmx-helper.c:644: warning: expecting prototype for Setup global setting for PKO not related to a specific(). Prototype was for __cvmx_helper_global_setup_pko() instead arch/mips/cavium-octeon/executive/cvmx-helper.c:673: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Setup global backpressure setting. arch/mips/cavium-octeon/executive/cvmx-helper.c:707: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Enable packet input/output from the hardware. This function is arch/mips/cavium-octeon/executive/cvmx-helper.c:775: warning: expecting prototype for Function to adjust internal IPD pointer alignments(). Prototype was for __cvmx_helper_errata_fix_ipd_ptr_alignment() instead arch/mips/cavium-octeon/executive/cvmx-helper.c:963: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Called after all internal packet IO paths are setup. This arch/mips/cavium-octeon/executive/cvmx-helper.c:999: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Initialize the PIP, IPD, and PKO hardware to support arch/mips/cavium-octeon/executive/cvmx-helper.c:1064: warning: expecting prototype for Does core local initialization for packet io(). Prototype was for cvmx_helper_initialize_packet_io_local() instead arch/mips/cavium-octeon/executive/cvmx-helper.c:1069: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Return the link state of an IPD/PKO port as returned by arch/mips/cavium-octeon/executive/cvmx-helper.c:1129: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * Configure an IPD/PKO port for the specified link state. This vim +215 arch/mips/pci/msi-octeon.c e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 47 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 48 /** e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 49 * Called when a driver request MSI interrupts instead of the e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 50 * legacy INT A-D. This routine will allocate multiple interrupts e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 51 * for MSI devices that support them. A device can override this by e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 52 * programming the MSI control bits [6:4] before calling e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 53 * pci_enable_msi(). e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 54 * 01a6221a6a51ec arch/mips/pci/msi-octeon.c David Daney 2009-06-29 55 * @dev: Device requesting MSI interrupts 01a6221a6a51ec arch/mips/pci/msi-octeon.c David Daney 2009-06-29 56 * @desc: MSI descriptor e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 57 * e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 58 * Returns 0 on success. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 59 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 60 int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc) e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 @61 { e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 62 struct msi_msg msg; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 63 u16 control; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 64 int configured_private_bits; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 65 int request_private_bits; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 66 int irq = 0; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 67 int irq_step; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 68 u64 search_mask; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 69 int index; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 70 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 71 /* e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 72 * Read the MSI config to figure out how many IRQs this device e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 73 * wants. Most devices only want 1, which will give e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 74 * configured_private_bits and request_private_bits equal 0. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 75 */ 48c3c38f003c25 arch/mips/pci/msi-octeon.c Yijing Wang 2014-09-23 76 pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 77 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 78 /* e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 79 * If the number of private bits has been configured then use e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 80 * that value instead of the requested number. This gives the e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 81 * driver the chance to override the number of interrupts e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 82 * before calling pci_enable_msi(). e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 83 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 84 configured_private_bits = (control & PCI_MSI_FLAGS_QSIZE) >> 4; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 85 if (configured_private_bits == 0) { e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 86 /* Nothing is configured, so use the hardware requested size */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 87 request_private_bits = (control & PCI_MSI_FLAGS_QMASK) >> 1; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 88 } else { e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 89 /* e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 90 * Use the number of configured bits, assuming the e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 91 * driver wanted to override the hardware request e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 92 * value. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 93 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 94 request_private_bits = configured_private_bits; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 95 } e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 96 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 97 /* e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 98 * The PCI 2.3 spec mandates that there are at most 32 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 99 * interrupts. If this device asks for more, only give it one. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 100 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 101 if (request_private_bits > 5) e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 102 request_private_bits = 0; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 103 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 104 try_only_one: e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 105 /* e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 106 * The IRQs have to be aligned on a power of two based on the e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 107 * number being requested. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 108 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 109 irq_step = 1 << request_private_bits; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 110 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 111 /* Mask with one bit for each IRQ */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 112 search_mask = (1 << irq_step) - 1; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 113 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 114 /* e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 115 * We're going to search msi_free_irq_bitmask_lock for zero e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 116 * bits. This represents an MSI interrupt number that isn't in e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 117 * use. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 118 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 119 spin_lock(&msi_free_irq_bitmask_lock); 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 120 for (index = 0; index < msi_irq_size/64; index++) { e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 121 for (irq = 0; irq < 64; irq += irq_step) { 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 122 if ((msi_free_irq_bitmask[index] & (search_mask << irq)) == 0) { 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 123 msi_free_irq_bitmask[index] |= search_mask << irq; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 124 msi_multiple_irq_bitmask[index] |= (search_mask >> 1) << irq; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 125 goto msi_irq_allocated; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 126 } e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 127 } e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 128 } 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 129 msi_irq_allocated: e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 130 spin_unlock(&msi_free_irq_bitmask_lock); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 131 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 132 /* Make sure the search for available interrupts didn't fail */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 133 if (irq >= 64) { e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 134 if (request_private_bits) { 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 135 pr_err("arch_setup_msi_irq: Unable to find %d free interrupts, trying just one", e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 136 1 << request_private_bits); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 137 request_private_bits = 0; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 138 goto try_only_one; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 139 } else 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 140 panic("arch_setup_msi_irq: Unable to find a free MSI interrupt"); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 141 } e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 142 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 143 /* MSI interrupts start at logical IRQ OCTEON_IRQ_MSI_BIT0 */ 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 144 irq += index*64; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 145 irq += OCTEON_IRQ_MSI_BIT0; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 146 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 147 switch (octeon_dma_bar_type) { e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 148 case OCTEON_DMA_BAR_TYPE_SMALL: e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 149 /* When not using big bar, Bar 0 is based at 128MB */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 150 msg.address_lo = e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 151 ((128ul << 20) + CVMX_PCI_MSI_RCV) & 0xffffffff; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 152 msg.address_hi = ((128ul << 20) + CVMX_PCI_MSI_RCV) >> 32; 7f02c463057fc5 arch/mips/pci/msi-octeon.c Colin Ian King 2014-02-10 153 break; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 154 case OCTEON_DMA_BAR_TYPE_BIG: e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 155 /* When using big bar, Bar 0 is based at 0 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 156 msg.address_lo = (0 + CVMX_PCI_MSI_RCV) & 0xffffffff; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 157 msg.address_hi = (0 + CVMX_PCI_MSI_RCV) >> 32; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 158 break; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 159 case OCTEON_DMA_BAR_TYPE_PCIE: e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 160 /* When using PCIe, Bar 0 is based at 0 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 161 /* FIXME CVMX_NPEI_MSI_RCV* other than 0? */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 162 msg.address_lo = (0 + CVMX_NPEI_PCIE_MSI_RCV) & 0xffffffff; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 163 msg.address_hi = (0 + CVMX_NPEI_PCIE_MSI_RCV) >> 32; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 164 break; d19648d7f3b047 arch/mips/pci/msi-octeon.c Eunbong Song 2014-04-11 165 case OCTEON_DMA_BAR_TYPE_PCIE2: d19648d7f3b047 arch/mips/pci/msi-octeon.c Eunbong Song 2014-04-11 166 /* When using PCIe2, Bar 0 is based at 0 */ d19648d7f3b047 arch/mips/pci/msi-octeon.c Eunbong Song 2014-04-11 167 msg.address_lo = (0 + CVMX_SLI_PCIE_MSI_RCV) & 0xffffffff; d19648d7f3b047 arch/mips/pci/msi-octeon.c Eunbong Song 2014-04-11 168 msg.address_hi = (0 + CVMX_SLI_PCIE_MSI_RCV) >> 32; d19648d7f3b047 arch/mips/pci/msi-octeon.c Eunbong Song 2014-04-11 169 break; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 170 default: ab75dc02c151c9 arch/mips/pci/msi-octeon.c Ralf Baechle 2011-11-17 171 panic("arch_setup_msi_irq: Invalid octeon_dma_bar_type"); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 172 } e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 173 msg.data = irq - OCTEON_IRQ_MSI_BIT0; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 174 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 175 /* Update the number of IRQs the device has available to it */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 176 control &= ~PCI_MSI_FLAGS_QSIZE; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 177 control |= request_private_bits << 4; 48c3c38f003c25 arch/mips/pci/msi-octeon.c Yijing Wang 2014-09-23 178 pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 179 e4ec7989b4e55d arch/mips/pci/msi-octeon.c Thomas Gleixner 2011-03-27 180 irq_set_msi_desc(irq, desc); 83a18912b0e8d2 arch/mips/pci/msi-octeon.c Jiang Liu 2014-11-09 181 pci_write_msi_msg(irq, &msg); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 182 return 0; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 183 } e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 184 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 185 int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 186 { 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 187 struct msi_desc *entry; 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 188 int ret; 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 189 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 190 /* 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 191 * MSI-X is not supported. 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 192 */ 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 193 if (type == PCI_CAP_ID_MSIX) 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 194 return -EINVAL; 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 195 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 196 /* 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 197 * If an architecture wants to support multiple MSI, it needs to 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 198 * override arch_setup_msi_irqs() 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 199 */ 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 200 if (type == PCI_CAP_ID_MSI && nvec > 1) 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 201 return 1; 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 202 bbcffac3a8b60f arch/mips/pci/msi-octeon.c Jiang Liu 2015-07-09 203 for_each_pci_msi_entry(entry, dev) { 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 204 ret = arch_setup_msi_irq(dev, entry); 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 205 if (ret < 0) 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 206 return ret; 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 207 if (ret > 0) 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 208 return -ENOSPC; 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 209 } 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 210 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 211 return 0; 52a0f00b50ea36 arch/mips/pci/msi-octeon.c Chandrakala Chavva 2010-07-26 212 } e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 213 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 214 /** e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 @215 * Called when a device no longer needs its MSI interrupts. All e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 216 * MSI interrupts for the device are freed. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 217 * e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 218 * @irq: The devices first irq number. There may be multple in sequence. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 219 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 220 void arch_teardown_msi_irq(unsigned int irq) e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 221 { e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 222 int number_irqs; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 223 u64 bitmask; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 224 int index = 0; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 225 int irq0; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 226 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 227 if ((irq < OCTEON_IRQ_MSI_BIT0) 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 228 || (irq > msi_irq_size + OCTEON_IRQ_MSI_BIT0)) e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 229 panic("arch_teardown_msi_irq: Attempted to teardown illegal " e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 230 "MSI interrupt (%d)", irq); 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 231 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 232 irq -= OCTEON_IRQ_MSI_BIT0; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 233 index = irq / 64; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 234 irq0 = irq % 64; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 235 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 236 /* e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 237 * Count the number of IRQs we need to free by looking at the e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 238 * msi_multiple_irq_bitmask. Each bit set means that the next e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 239 * IRQ is also owned by this device. e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 240 */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 241 number_irqs = 0; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 242 while ((irq0 + number_irqs < 64) && 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 243 (msi_multiple_irq_bitmask[index] 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 244 & (1ull << (irq0 + number_irqs)))) e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 245 number_irqs++; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 246 number_irqs++; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 247 /* Mask with one bit for each IRQ */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 248 bitmask = (1 << number_irqs) - 1; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 249 /* Shift the mask to the correct bit location */ 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 250 bitmask <<= irq0; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 251 if ((msi_free_irq_bitmask[index] & bitmask) != bitmask) e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 252 panic("arch_teardown_msi_irq: Attempted to teardown MSI " e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 253 "interrupt (%d) not in use", irq); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 254 e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 255 /* Checks are done, update the in use bitmask */ e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 256 spin_lock(&msi_free_irq_bitmask_lock); 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 257 msi_free_irq_bitmask[index] &= ~bitmask; 1aa2b2782a056b arch/mips/pci/msi-octeon.c David Daney 2010-07-26 258 msi_multiple_irq_bitmask[index] &= ~bitmask; e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 259 spin_unlock(&msi_free_irq_bitmask_lock); e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 260 } e8635b484f644c arch/mips/cavium-octeon/msi.c David Daney 2009-04-23 261 :::::: The code at line 215 was first introduced by commit :::::: e8635b484f644c7873e6091f15330c49396f2cbc MIPS: Add Cavium OCTEON PCI support. :::::: TO: David Daney <ddaney@xxxxxxxxxxxxxxxxxx> :::::: CC: Ralf Baechle <ralf@xxxxxxxxxxxxxx> -- 0-DAY CI Kernel Test Service https://01.org/lkp