Re: [PATCH v2] of/irq: Consider device address size in interrupt map walk

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Stefan,

kernel test robot noticed the following build errors:

[auto build test ERROR on robh/for-next]
[also build test ERROR on powerpc/next pci/next pci/for-linus linus/master v6.11-rc2 next-20240808]
[cannot apply to powerpc/fixes]
[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/Stefan-Wiehler/of-irq-Consider-device-address-size-in-interrupt-map-walk/20240807-215113
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
patch link:    https://lore.kernel.org/r/20240807134032.1364503-2-stefan.wiehler%40nokia.com
patch subject: [PATCH v2] of/irq: Consider device address size in interrupt map walk
config: i386-buildonly-randconfig-003-20240809 (https://download.01.org/0day-ci/archive/20240809/202408090801.AcBWUFAJ-lkp@xxxxxxxxx/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240809/202408090801.AcBWUFAJ-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/202408090801.AcBWUFAJ-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

   drivers/pci/of_property.c: In function 'of_pci_prop_intr_map':
   drivers/pci/of_property.c:234:47: warning: passing argument 2 of 'of_irq_parse_raw' makes integer from pointer without a cast [-Wint-conversion]
     234 |                 ret = of_irq_parse_raw(laddr, &out_irq[i]);
         |                                               ^~~~~~~~~~~
         |                                               |
         |                                               struct of_phandle_args *
   In file included from drivers/pci/of_property.c:8:
   include/linux/of_irq.h:35:53: note: expected 'u32' {aka 'unsigned int'} but argument is of type 'struct of_phandle_args *'
      35 | extern int of_irq_parse_raw(const __be32 *addr, u32 addrsize,
         |                                                 ~~~~^~~~~~~~
>> drivers/pci/of_property.c:234:23: error: too few arguments to function 'of_irq_parse_raw'
     234 |                 ret = of_irq_parse_raw(laddr, &out_irq[i]);
         |                       ^~~~~~~~~~~~~~~~
   In file included from drivers/pci/of_property.c:8:
   include/linux/of_irq.h:35:12: note: declared here
      35 | extern int of_irq_parse_raw(const __be32 *addr, u32 addrsize,
         |            ^~~~~~~~~~~~~~~~


vim +/of_irq_parse_raw +234 drivers/pci/of_property.c

dc12273fa3d8a8 Herve Codina 2024-05-27  205  
407d1a51921e9f Lizhi Hou    2023-08-15  206  static int of_pci_prop_intr_map(struct pci_dev *pdev, struct of_changeset *ocs,
407d1a51921e9f Lizhi Hou    2023-08-15  207  				struct device_node *np)
407d1a51921e9f Lizhi Hou    2023-08-15  208  {
33efa29e825636 Lizhi Hou    2023-09-29  209  	u32 i, addr_sz[OF_PCI_MAX_INT_PIN] = { 0 }, map_sz = 0;
407d1a51921e9f Lizhi Hou    2023-08-15  210  	struct of_phandle_args out_irq[OF_PCI_MAX_INT_PIN];
407d1a51921e9f Lizhi Hou    2023-08-15  211  	__be32 laddr[OF_PCI_ADDRESS_CELLS] = { 0 };
407d1a51921e9f Lizhi Hou    2023-08-15  212  	u32 int_map_mask[] = { 0xffff00, 0, 0, 7 };
407d1a51921e9f Lizhi Hou    2023-08-15  213  	struct device_node *pnode;
407d1a51921e9f Lizhi Hou    2023-08-15  214  	struct pci_dev *child;
407d1a51921e9f Lizhi Hou    2023-08-15  215  	u32 *int_map, *mapp;
407d1a51921e9f Lizhi Hou    2023-08-15  216  	int ret;
407d1a51921e9f Lizhi Hou    2023-08-15  217  	u8 pin;
407d1a51921e9f Lizhi Hou    2023-08-15  218  
407d1a51921e9f Lizhi Hou    2023-08-15  219  	pnode = pci_device_to_OF_node(pdev->bus->self);
407d1a51921e9f Lizhi Hou    2023-08-15  220  	if (!pnode)
407d1a51921e9f Lizhi Hou    2023-08-15  221  		pnode = pci_bus_to_OF_node(pdev->bus);
407d1a51921e9f Lizhi Hou    2023-08-15  222  
407d1a51921e9f Lizhi Hou    2023-08-15  223  	if (!pnode) {
407d1a51921e9f Lizhi Hou    2023-08-15  224  		pci_err(pdev, "failed to get parent device node");
407d1a51921e9f Lizhi Hou    2023-08-15  225  		return -EINVAL;
407d1a51921e9f Lizhi Hou    2023-08-15  226  	}
407d1a51921e9f Lizhi Hou    2023-08-15  227  
407d1a51921e9f Lizhi Hou    2023-08-15  228  	laddr[0] = cpu_to_be32((pdev->bus->number << 16) | (pdev->devfn << 8));
407d1a51921e9f Lizhi Hou    2023-08-15  229  	for (pin = 1; pin <= OF_PCI_MAX_INT_PIN;  pin++) {
407d1a51921e9f Lizhi Hou    2023-08-15  230  		i = pin - 1;
407d1a51921e9f Lizhi Hou    2023-08-15  231  		out_irq[i].np = pnode;
407d1a51921e9f Lizhi Hou    2023-08-15  232  		out_irq[i].args_count = 1;
407d1a51921e9f Lizhi Hou    2023-08-15  233  		out_irq[i].args[0] = pin;
407d1a51921e9f Lizhi Hou    2023-08-15 @234  		ret = of_irq_parse_raw(laddr, &out_irq[i]);
407d1a51921e9f Lizhi Hou    2023-08-15  235  		if (ret) {
33efa29e825636 Lizhi Hou    2023-09-29  236  			out_irq[i].np = NULL;
33efa29e825636 Lizhi Hou    2023-09-29  237  			pci_dbg(pdev, "parse irq %d failed, ret %d", pin, ret);
407d1a51921e9f Lizhi Hou    2023-08-15  238  			continue;
407d1a51921e9f Lizhi Hou    2023-08-15  239  		}
33efa29e825636 Lizhi Hou    2023-09-29  240  		of_property_read_u32(out_irq[i].np, "#address-cells",
407d1a51921e9f Lizhi Hou    2023-08-15  241  				     &addr_sz[i]);
407d1a51921e9f Lizhi Hou    2023-08-15  242  	}
407d1a51921e9f Lizhi Hou    2023-08-15  243  
407d1a51921e9f Lizhi Hou    2023-08-15  244  	list_for_each_entry(child, &pdev->subordinate->devices, bus_list) {
407d1a51921e9f Lizhi Hou    2023-08-15  245  		for (pin = 1; pin <= OF_PCI_MAX_INT_PIN; pin++) {
407d1a51921e9f Lizhi Hou    2023-08-15  246  			i = pci_swizzle_interrupt_pin(child, pin) - 1;
33efa29e825636 Lizhi Hou    2023-09-29  247  			if (!out_irq[i].np)
33efa29e825636 Lizhi Hou    2023-09-29  248  				continue;
407d1a51921e9f Lizhi Hou    2023-08-15  249  			map_sz += 5 + addr_sz[i] + out_irq[i].args_count;
407d1a51921e9f Lizhi Hou    2023-08-15  250  		}
407d1a51921e9f Lizhi Hou    2023-08-15  251  	}
407d1a51921e9f Lizhi Hou    2023-08-15  252  
33efa29e825636 Lizhi Hou    2023-09-29  253  	/*
33efa29e825636 Lizhi Hou    2023-09-29  254  	 * Parsing interrupt failed for all pins. In this case, it does not
33efa29e825636 Lizhi Hou    2023-09-29  255  	 * need to generate interrupt-map property.
33efa29e825636 Lizhi Hou    2023-09-29  256  	 */
33efa29e825636 Lizhi Hou    2023-09-29  257  	if (!map_sz)
33efa29e825636 Lizhi Hou    2023-09-29  258  		return 0;
33efa29e825636 Lizhi Hou    2023-09-29  259  
407d1a51921e9f Lizhi Hou    2023-08-15  260  	int_map = kcalloc(map_sz, sizeof(u32), GFP_KERNEL);
e6f7d27df5d208 Duoming Zhou 2024-03-03  261  	if (!int_map)
e6f7d27df5d208 Duoming Zhou 2024-03-03  262  		return -ENOMEM;
407d1a51921e9f Lizhi Hou    2023-08-15  263  	mapp = int_map;
407d1a51921e9f Lizhi Hou    2023-08-15  264  
407d1a51921e9f Lizhi Hou    2023-08-15  265  	list_for_each_entry(child, &pdev->subordinate->devices, bus_list) {
407d1a51921e9f Lizhi Hou    2023-08-15  266  		for (pin = 1; pin <= OF_PCI_MAX_INT_PIN; pin++) {
33efa29e825636 Lizhi Hou    2023-09-29  267  			i = pci_swizzle_interrupt_pin(child, pin) - 1;
33efa29e825636 Lizhi Hou    2023-09-29  268  			if (!out_irq[i].np)
33efa29e825636 Lizhi Hou    2023-09-29  269  				continue;
33efa29e825636 Lizhi Hou    2023-09-29  270  
407d1a51921e9f Lizhi Hou    2023-08-15  271  			*mapp = (child->bus->number << 16) |
407d1a51921e9f Lizhi Hou    2023-08-15  272  				(child->devfn << 8);
407d1a51921e9f Lizhi Hou    2023-08-15  273  			mapp += OF_PCI_ADDRESS_CELLS;
407d1a51921e9f Lizhi Hou    2023-08-15  274  			*mapp = pin;
407d1a51921e9f Lizhi Hou    2023-08-15  275  			mapp++;
407d1a51921e9f Lizhi Hou    2023-08-15  276  			*mapp = out_irq[i].np->phandle;
407d1a51921e9f Lizhi Hou    2023-08-15  277  			mapp++;
407d1a51921e9f Lizhi Hou    2023-08-15  278  			if (addr_sz[i]) {
407d1a51921e9f Lizhi Hou    2023-08-15  279  				ret = of_property_read_u32_array(out_irq[i].np,
407d1a51921e9f Lizhi Hou    2023-08-15  280  								 "reg", mapp,
407d1a51921e9f Lizhi Hou    2023-08-15  281  								 addr_sz[i]);
407d1a51921e9f Lizhi Hou    2023-08-15  282  				if (ret)
407d1a51921e9f Lizhi Hou    2023-08-15  283  					goto failed;
407d1a51921e9f Lizhi Hou    2023-08-15  284  			}
407d1a51921e9f Lizhi Hou    2023-08-15  285  			mapp += addr_sz[i];
407d1a51921e9f Lizhi Hou    2023-08-15  286  			memcpy(mapp, out_irq[i].args,
407d1a51921e9f Lizhi Hou    2023-08-15  287  			       out_irq[i].args_count * sizeof(u32));
407d1a51921e9f Lizhi Hou    2023-08-15  288  			mapp += out_irq[i].args_count;
407d1a51921e9f Lizhi Hou    2023-08-15  289  		}
407d1a51921e9f Lizhi Hou    2023-08-15  290  	}
407d1a51921e9f Lizhi Hou    2023-08-15  291  
407d1a51921e9f Lizhi Hou    2023-08-15  292  	ret = of_changeset_add_prop_u32_array(ocs, np, "interrupt-map", int_map,
407d1a51921e9f Lizhi Hou    2023-08-15  293  					      map_sz);
407d1a51921e9f Lizhi Hou    2023-08-15  294  	if (ret)
407d1a51921e9f Lizhi Hou    2023-08-15  295  		goto failed;
407d1a51921e9f Lizhi Hou    2023-08-15  296  
407d1a51921e9f Lizhi Hou    2023-08-15  297  	ret = of_changeset_add_prop_u32(ocs, np, "#interrupt-cells", 1);
407d1a51921e9f Lizhi Hou    2023-08-15  298  	if (ret)
407d1a51921e9f Lizhi Hou    2023-08-15  299  		goto failed;
407d1a51921e9f Lizhi Hou    2023-08-15  300  
407d1a51921e9f Lizhi Hou    2023-08-15  301  	ret = of_changeset_add_prop_u32_array(ocs, np, "interrupt-map-mask",
407d1a51921e9f Lizhi Hou    2023-08-15  302  					      int_map_mask,
407d1a51921e9f Lizhi Hou    2023-08-15  303  					      ARRAY_SIZE(int_map_mask));
407d1a51921e9f Lizhi Hou    2023-08-15  304  	if (ret)
407d1a51921e9f Lizhi Hou    2023-08-15  305  		goto failed;
407d1a51921e9f Lizhi Hou    2023-08-15  306  
407d1a51921e9f Lizhi Hou    2023-08-15  307  	kfree(int_map);
407d1a51921e9f Lizhi Hou    2023-08-15  308  	return 0;
407d1a51921e9f Lizhi Hou    2023-08-15  309  
407d1a51921e9f Lizhi Hou    2023-08-15  310  failed:
407d1a51921e9f Lizhi Hou    2023-08-15  311  	kfree(int_map);
407d1a51921e9f Lizhi Hou    2023-08-15  312  	return ret;
407d1a51921e9f Lizhi Hou    2023-08-15  313  }
407d1a51921e9f Lizhi Hou    2023-08-15  314  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux