All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Samuel Holland <samuel@sholland.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Marc Zyngier <maz@kernel.org>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Albert Ou <aou@eecs.berkeley.edu>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
	Samuel Holland <samuel@sholland.org>,
	Bartosz Golaszewski <brgl@bgdev.pl>, Guo Ren <guoren@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Russell King <linux@armlinux.org.uk>,
	Wei Xu <xuwei5@hisilicon.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org
Subject: Re: [PATCH v2 2/6] genirq: GENERIC_IRQ_IPI depends on SMP
Date: Mon, 20 Jun 2022 12:26:24 +0800	[thread overview]
Message-ID: <202206201217.WYwGH37h-lkp@intel.com> (raw)
In-Reply-To: <20220616064028.57933-3-samuel@sholland.org>

Hi Samuel,

I love your patch! Yet something to improve:

[auto build test ERROR on tip/irq/core]
[also build test ERROR on soc/for-next linus/master v5.19-rc2 next-20220617]
[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]

url:    https://github.com/intel-lab-lkp/linux/commits/Samuel-Holland/genirq-irqchip-RISC-V-PLIC-cleanup-and-optimization/20220616-144300
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git ac165aab469895de059a4a191a2e04ddb5421d0e
config: mips-allnoconfig (https://download.01.org/0day-ci/archive/20220620/202206201217.WYwGH37h-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af6d2a0b6825e71965f3e2701a63c239fa0ad70f)
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
        # install mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/f8ac62a249f067a05a64eec484ac235137f2c36e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Samuel-Holland/genirq-irqchip-RISC-V-PLIC-cleanup-and-optimization/20220616-144300
        git checkout f8ac62a249f067a05a64eec484ac235137f2c36e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash drivers/irqchip/

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 >>):

>> drivers/irqchip/irq-mips-gic.c:479:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
                         ^
   drivers/irqchip/irq-mips-gic.c:510:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
                         ^
   drivers/irqchip/irq-mips-gic.c:558:6: warning: no previous prototype for function 'gic_irq_domain_free' [-Wmissing-prototypes]
   void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
        ^
   drivers/irqchip/irq-mips-gic.c:558:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
   ^
   static 
>> drivers/irqchip/irq-mips-gic.c:565:3: error: field designator 'alloc' does not refer to any field in type 'const struct irq_domain_ops'
           .alloc = gic_irq_domain_alloc,
            ^
>> drivers/irqchip/irq-mips-gic.c:566:3: error: field designator 'free' does not refer to any field in type 'const struct irq_domain_ops'
           .free = gic_irq_domain_free,
            ^
   drivers/irqchip/irq-mips-gic.c:608:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   ret = irq_domain_set_hwirq_and_chip(d, virq + i, hwirq,
                         ^
>> drivers/irqchip/irq-mips-gic.c:614:42: error: no member named 'parent' in 'struct irq_domain'
                   ret = irq_domain_set_hwirq_and_chip(d->parent, virq + i, hwirq,
                                                       ~  ^
   drivers/irqchip/irq-mips-gic.c:668:3: error: field designator 'alloc' does not refer to any field in type 'const struct irq_domain_ops'
           .alloc = gic_ipi_domain_alloc,
            ^
   drivers/irqchip/irq-mips-gic.c:669:3: error: field designator 'free' does not refer to any field in type 'const struct irq_domain_ops'
           .free = gic_ipi_domain_free,
            ^
>> drivers/irqchip/irq-mips-gic.c:783:19: error: call to undeclared function 'irq_domain_add_hierarchy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
           gic_ipi_domain = irq_domain_add_hierarchy(gic_irq_domain,
                            ^
   drivers/irqchip/irq-mips-gic.c:783:19: note: did you mean 'irq_domain_is_hierarchy'?
   include/linux/irqdomain.h:591:20: note: 'irq_domain_is_hierarchy' declared here
   static inline bool irq_domain_is_hierarchy(struct irq_domain *domain)
                      ^
>> drivers/irqchip/irq-mips-gic.c:783:17: warning: incompatible integer to pointer conversion assigning to 'struct irq_domain *' from 'int' [-Wint-conversion]
           gic_ipi_domain = irq_domain_add_hierarchy(gic_irq_domain,
                          ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   2 warnings and 9 errors generated.


vim +/irq_domain_set_hwirq_and_chip +479 drivers/irqchip/irq-mips-gic.c

b87281e7f205ed Paul Burton         2017-04-20  464  
8ada00a650ec7e Matt Redfearn       2017-04-20  465  static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq,
8ada00a650ec7e Matt Redfearn       2017-04-20  466  			      irq_hw_number_t hwirq)
b87281e7f205ed Paul Burton         2017-04-20  467  {
da61fcf9d62a05 Paul Burton         2017-10-31  468  	struct gic_all_vpes_chip_data *cd;
63b746b19fa660 Paul Burton         2017-10-31  469  	unsigned long flags;
63b746b19fa660 Paul Burton         2017-10-31  470  	unsigned int intr;
da61fcf9d62a05 Paul Burton         2017-10-31  471  	int err, cpu;
63b746b19fa660 Paul Burton         2017-10-31  472  	u32 map;
6a33fa2b87513f Paul Burton         2016-08-19  473  
8ada00a650ec7e Matt Redfearn       2017-04-20  474  	if (hwirq >= GIC_SHARED_HWIRQ_BASE) {
b87281e7f205ed Paul Burton         2017-04-20  475  		/* verify that shared irqs don't conflict with an IPI irq */
b87281e7f205ed Paul Burton         2017-04-20  476  		if (test_bit(GIC_HWIRQ_TO_SHARED(hwirq), ipi_resrv))
b87281e7f205ed Paul Burton         2017-04-20  477  			return -EBUSY;
b87281e7f205ed Paul Burton         2017-04-20  478  
e875bd66dfb68f Paul Burton         2016-09-13 @479  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
e875bd66dfb68f Paul Burton         2016-09-13  480  						    &gic_level_irq_controller,
e875bd66dfb68f Paul Burton         2016-09-13  481  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  482  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  483  			return err;
b87281e7f205ed Paul Burton         2017-04-20  484  
18416e45b76189 Marc Zyngier        2017-08-18  485  		irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq)));
b87281e7f205ed Paul Burton         2017-04-20  486  		return gic_shared_irq_domain_map(d, virq, hwirq, 0);
b87281e7f205ed Paul Burton         2017-04-20  487  	}
b87281e7f205ed Paul Burton         2017-04-20  488  
63b746b19fa660 Paul Burton         2017-10-31  489  	intr = GIC_HWIRQ_TO_LOCAL(hwirq);
63b746b19fa660 Paul Burton         2017-10-31  490  	map = GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin;
63b746b19fa660 Paul Burton         2017-10-31  491  
dd098a0e031928 Marc Zyngier        2021-10-21  492  	/*
dd098a0e031928 Marc Zyngier        2021-10-21  493  	 * If adding support for more per-cpu interrupts, keep the the
dd098a0e031928 Marc Zyngier        2021-10-21  494  	 * array in gic_all_vpes_irq_cpu_online() in sync.
dd098a0e031928 Marc Zyngier        2021-10-21  495  	 */
63b746b19fa660 Paul Burton         2017-10-31  496  	switch (intr) {
e875bd66dfb68f Paul Burton         2016-09-13  497  	case GIC_LOCAL_INT_TIMER:
63b746b19fa660 Paul Burton         2017-10-31  498  		/* CONFIG_MIPS_CMP workaround (see __gic_init) */
63b746b19fa660 Paul Burton         2017-10-31  499  		map = GIC_MAP_PIN_MAP_TO_PIN | timer_cpu_pin;
df561f6688fef7 Gustavo A. R. Silva 2020-08-23  500  		fallthrough;
e875bd66dfb68f Paul Burton         2016-09-13  501  	case GIC_LOCAL_INT_PERFCTR:
e875bd66dfb68f Paul Burton         2016-09-13  502  	case GIC_LOCAL_INT_FDC:
e875bd66dfb68f Paul Burton         2016-09-13  503  		/*
e875bd66dfb68f Paul Burton         2016-09-13  504  		 * HACK: These are all really percpu interrupts, but
e875bd66dfb68f Paul Burton         2016-09-13  505  		 * the rest of the MIPS kernel code does not use the
e875bd66dfb68f Paul Burton         2016-09-13  506  		 * percpu IRQ API for them.
e875bd66dfb68f Paul Burton         2016-09-13  507  		 */
da61fcf9d62a05 Paul Burton         2017-10-31  508  		cd = &gic_all_vpes_chip_data[intr];
da61fcf9d62a05 Paul Burton         2017-10-31  509  		cd->map = map;
b87281e7f205ed Paul Burton         2017-04-20  510  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  511  						    &gic_all_vpes_local_irq_controller,
da61fcf9d62a05 Paul Burton         2017-10-31  512  						    cd);
b87281e7f205ed Paul Burton         2017-04-20  513  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  514  			return err;
b87281e7f205ed Paul Burton         2017-04-20  515  
e875bd66dfb68f Paul Burton         2016-09-13  516  		irq_set_handler(virq, handle_percpu_irq);
e875bd66dfb68f Paul Burton         2016-09-13  517  		break;
e875bd66dfb68f Paul Burton         2016-09-13  518  
e875bd66dfb68f Paul Burton         2016-09-13  519  	default:
b87281e7f205ed Paul Burton         2017-04-20  520  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  521  						    &gic_local_irq_controller,
b87281e7f205ed Paul Burton         2017-04-20  522  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  523  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  524  			return err;
b87281e7f205ed Paul Burton         2017-04-20  525  
e875bd66dfb68f Paul Burton         2016-09-13  526  		irq_set_handler(virq, handle_percpu_devid_irq);
e875bd66dfb68f Paul Burton         2016-09-13  527  		irq_set_percpu_devid(virq);
e875bd66dfb68f Paul Burton         2016-09-13  528  		break;
e875bd66dfb68f Paul Burton         2016-09-13  529  	}
e875bd66dfb68f Paul Burton         2016-09-13  530  
63b746b19fa660 Paul Burton         2017-10-31  531  	if (!gic_local_irq_is_routable(intr))
63b746b19fa660 Paul Burton         2017-10-31  532  		return -EPERM;
63b746b19fa660 Paul Burton         2017-10-31  533  
63b746b19fa660 Paul Burton         2017-10-31  534  	spin_lock_irqsave(&gic_lock, flags);
da61fcf9d62a05 Paul Burton         2017-10-31  535  	for_each_online_cpu(cpu) {
da61fcf9d62a05 Paul Burton         2017-10-31  536  		write_gic_vl_other(mips_cm_vp_id(cpu));
6d4d367d0e9ffa Paul Burton         2019-06-05  537  		write_gic_vo_map(mips_gic_vx_map_reg(intr), map);
63b746b19fa660 Paul Burton         2017-10-31  538  	}
63b746b19fa660 Paul Burton         2017-10-31  539  	spin_unlock_irqrestore(&gic_lock, flags);
63b746b19fa660 Paul Burton         2017-10-31  540  
63b746b19fa660 Paul Burton         2017-10-31  541  	return 0;
e875bd66dfb68f Paul Burton         2016-09-13  542  }
6a33fa2b87513f Paul Burton         2016-08-19  543  
8ada00a650ec7e Matt Redfearn       2017-04-20  544  static int gic_irq_domain_alloc(struct irq_domain *d, unsigned int virq,
8ada00a650ec7e Matt Redfearn       2017-04-20  545  				unsigned int nr_irqs, void *arg)
8ada00a650ec7e Matt Redfearn       2017-04-20  546  {
8ada00a650ec7e Matt Redfearn       2017-04-20  547  	struct irq_fwspec *fwspec = arg;
8ada00a650ec7e Matt Redfearn       2017-04-20  548  	irq_hw_number_t hwirq;
8ada00a650ec7e Matt Redfearn       2017-04-20  549  
8ada00a650ec7e Matt Redfearn       2017-04-20  550  	if (fwspec->param[0] == GIC_SHARED)
8ada00a650ec7e Matt Redfearn       2017-04-20  551  		hwirq = GIC_SHARED_TO_HWIRQ(fwspec->param[1]);
8ada00a650ec7e Matt Redfearn       2017-04-20  552  	else
8ada00a650ec7e Matt Redfearn       2017-04-20  553  		hwirq = GIC_LOCAL_TO_HWIRQ(fwspec->param[1]);
8ada00a650ec7e Matt Redfearn       2017-04-20  554  
8ada00a650ec7e Matt Redfearn       2017-04-20  555  	return gic_irq_domain_map(d, virq, hwirq);
8ada00a650ec7e Matt Redfearn       2017-04-20  556  }
8ada00a650ec7e Matt Redfearn       2017-04-20  557  
b87281e7f205ed Paul Burton         2017-04-20  558  void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
b87281e7f205ed Paul Burton         2017-04-20  559  			 unsigned int nr_irqs)
b87281e7f205ed Paul Burton         2017-04-20  560  {
e9de688dac6534 Andrew Bresticker   2014-09-18  561  }
e9de688dac6534 Andrew Bresticker   2014-09-18  562  
b87281e7f205ed Paul Burton         2017-04-20  563  static const struct irq_domain_ops gic_irq_domain_ops = {
b87281e7f205ed Paul Burton         2017-04-20  564  	.xlate = gic_irq_domain_xlate,
b87281e7f205ed Paul Burton         2017-04-20 @565  	.alloc = gic_irq_domain_alloc,
b87281e7f205ed Paul Burton         2017-04-20 @566  	.free = gic_irq_domain_free,
8ada00a650ec7e Matt Redfearn       2017-04-20  567  	.map = gic_irq_domain_map,
b87281e7f205ed Paul Burton         2017-04-20  568  };
b87281e7f205ed Paul Burton         2017-04-20  569  
b87281e7f205ed Paul Burton         2017-04-20  570  static int gic_ipi_domain_xlate(struct irq_domain *d, struct device_node *ctrlr,
b87281e7f205ed Paul Burton         2017-04-20  571  				const u32 *intspec, unsigned int intsize,
b87281e7f205ed Paul Burton         2017-04-20  572  				irq_hw_number_t *out_hwirq,
b87281e7f205ed Paul Burton         2017-04-20  573  				unsigned int *out_type)
b87281e7f205ed Paul Burton         2017-04-20  574  {
b87281e7f205ed Paul Burton         2017-04-20  575  	/*
b87281e7f205ed Paul Burton         2017-04-20  576  	 * There's nothing to translate here. hwirq is dynamically allocated and
b87281e7f205ed Paul Burton         2017-04-20  577  	 * the irq type is always edge triggered.
b87281e7f205ed Paul Burton         2017-04-20  578  	 * */
b87281e7f205ed Paul Burton         2017-04-20  579  	*out_hwirq = 0;
b87281e7f205ed Paul Burton         2017-04-20  580  	*out_type = IRQ_TYPE_EDGE_RISING;
b87281e7f205ed Paul Burton         2017-04-20  581  
b87281e7f205ed Paul Burton         2017-04-20  582  	return 0;
b87281e7f205ed Paul Burton         2017-04-20  583  }
b87281e7f205ed Paul Burton         2017-04-20  584  
b87281e7f205ed Paul Burton         2017-04-20  585  static int gic_ipi_domain_alloc(struct irq_domain *d, unsigned int virq,
2af70a962070fd Qais Yousef         2015-12-08  586  				unsigned int nr_irqs, void *arg)
2af70a962070fd Qais Yousef         2015-12-08  587  {
b87281e7f205ed Paul Burton         2017-04-20  588  	struct cpumask *ipimask = arg;
2af70a962070fd Qais Yousef         2015-12-08  589  	irq_hw_number_t hwirq, base_hwirq;
2af70a962070fd Qais Yousef         2015-12-08  590  	int cpu, ret, i;
2af70a962070fd Qais Yousef         2015-12-08  591  
f8dcd9e81797ae Paul Burton         2017-04-20  592  	base_hwirq = find_first_bit(ipi_available, gic_shared_intrs);
b87281e7f205ed Paul Burton         2017-04-20  593  	if (base_hwirq == gic_shared_intrs)
2af70a962070fd Qais Yousef         2015-12-08  594  		return -ENOMEM;
2af70a962070fd Qais Yousef         2015-12-08  595  
2af70a962070fd Qais Yousef         2015-12-08  596  	/* check that we have enough space */
2af70a962070fd Qais Yousef         2015-12-08  597  	for (i = base_hwirq; i < nr_irqs; i++) {
f8dcd9e81797ae Paul Burton         2017-04-20  598  		if (!test_bit(i, ipi_available))
2af70a962070fd Qais Yousef         2015-12-08  599  			return -EBUSY;
2af70a962070fd Qais Yousef         2015-12-08  600  	}
f8dcd9e81797ae Paul Burton         2017-04-20  601  	bitmap_clear(ipi_available, base_hwirq, nr_irqs);
2af70a962070fd Qais Yousef         2015-12-08  602  
2af70a962070fd Qais Yousef         2015-12-08  603  	/* map the hwirq for each cpu consecutively */
2af70a962070fd Qais Yousef         2015-12-08  604  	i = 0;
b87281e7f205ed Paul Burton         2017-04-20  605  	for_each_cpu(cpu, ipimask) {
2af70a962070fd Qais Yousef         2015-12-08  606  		hwirq = GIC_SHARED_TO_HWIRQ(base_hwirq + i);
2af70a962070fd Qais Yousef         2015-12-08  607  
2af70a962070fd Qais Yousef         2015-12-08  608  		ret = irq_domain_set_hwirq_and_chip(d, virq + i, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  609  						    &gic_edge_irq_controller,
b87281e7f205ed Paul Burton         2017-04-20  610  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  611  		if (ret)
b87281e7f205ed Paul Burton         2017-04-20  612  			goto error;
b87281e7f205ed Paul Burton         2017-04-20  613  
b87281e7f205ed Paul Burton         2017-04-20 @614  		ret = irq_domain_set_hwirq_and_chip(d->parent, virq + i, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  615  						    &gic_edge_irq_controller,
2af70a962070fd Qais Yousef         2015-12-08  616  						    NULL);
2af70a962070fd Qais Yousef         2015-12-08  617  		if (ret)
2af70a962070fd Qais Yousef         2015-12-08  618  			goto error;
2af70a962070fd Qais Yousef         2015-12-08  619  
b87281e7f205ed Paul Burton         2017-04-20  620  		ret = irq_set_irq_type(virq + i, IRQ_TYPE_EDGE_RISING);
b87281e7f205ed Paul Burton         2017-04-20  621  		if (ret)
b87281e7f205ed Paul Burton         2017-04-20  622  			goto error;
6a33fa2b87513f Paul Burton         2016-08-19  623  
2af70a962070fd Qais Yousef         2015-12-08  624  		ret = gic_shared_irq_domain_map(d, virq + i, hwirq, cpu);
2af70a962070fd Qais Yousef         2015-12-08  625  		if (ret)
2af70a962070fd Qais Yousef         2015-12-08  626  			goto error;
2af70a962070fd Qais Yousef         2015-12-08  627  
2af70a962070fd Qais Yousef         2015-12-08  628  		i++;
2af70a962070fd Qais Yousef         2015-12-08  629  	}
2af70a962070fd Qais Yousef         2015-12-08  630  
2af70a962070fd Qais Yousef         2015-12-08  631  	return 0;
2af70a962070fd Qais Yousef         2015-12-08  632  error:
f8dcd9e81797ae Paul Burton         2017-04-20  633  	bitmap_set(ipi_available, base_hwirq, nr_irqs);
2af70a962070fd Qais Yousef         2015-12-08  634  	return ret;
2af70a962070fd Qais Yousef         2015-12-08  635  }
2af70a962070fd Qais Yousef         2015-12-08  636  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Samuel Holland <samuel@sholland.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Marc Zyngier <maz@kernel.org>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Albert Ou <aou@eecs.berkeley.edu>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
	Samuel Holland <samuel@sholland.org>,
	Bartosz Golaszewski <brgl@bgdev.pl>, Guo Ren <guoren@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Russell King <linux@armlinux.org.uk>,
	Wei Xu <xuwei5@hisilicon.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org
Subject: Re: [PATCH v2 2/6] genirq: GENERIC_IRQ_IPI depends on SMP
Date: Mon, 20 Jun 2022 12:26:24 +0800	[thread overview]
Message-ID: <202206201217.WYwGH37h-lkp@intel.com> (raw)
In-Reply-To: <20220616064028.57933-3-samuel@sholland.org>

Hi Samuel,

I love your patch! Yet something to improve:

[auto build test ERROR on tip/irq/core]
[also build test ERROR on soc/for-next linus/master v5.19-rc2 next-20220617]
[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]

url:    https://github.com/intel-lab-lkp/linux/commits/Samuel-Holland/genirq-irqchip-RISC-V-PLIC-cleanup-and-optimization/20220616-144300
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git ac165aab469895de059a4a191a2e04ddb5421d0e
config: mips-allnoconfig (https://download.01.org/0day-ci/archive/20220620/202206201217.WYwGH37h-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af6d2a0b6825e71965f3e2701a63c239fa0ad70f)
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
        # install mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/f8ac62a249f067a05a64eec484ac235137f2c36e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Samuel-Holland/genirq-irqchip-RISC-V-PLIC-cleanup-and-optimization/20220616-144300
        git checkout f8ac62a249f067a05a64eec484ac235137f2c36e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash drivers/irqchip/

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 >>):

>> drivers/irqchip/irq-mips-gic.c:479:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
                         ^
   drivers/irqchip/irq-mips-gic.c:510:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
                         ^
   drivers/irqchip/irq-mips-gic.c:558:6: warning: no previous prototype for function 'gic_irq_domain_free' [-Wmissing-prototypes]
   void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
        ^
   drivers/irqchip/irq-mips-gic.c:558:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
   ^
   static 
>> drivers/irqchip/irq-mips-gic.c:565:3: error: field designator 'alloc' does not refer to any field in type 'const struct irq_domain_ops'
           .alloc = gic_irq_domain_alloc,
            ^
>> drivers/irqchip/irq-mips-gic.c:566:3: error: field designator 'free' does not refer to any field in type 'const struct irq_domain_ops'
           .free = gic_irq_domain_free,
            ^
   drivers/irqchip/irq-mips-gic.c:608:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   ret = irq_domain_set_hwirq_and_chip(d, virq + i, hwirq,
                         ^
>> drivers/irqchip/irq-mips-gic.c:614:42: error: no member named 'parent' in 'struct irq_domain'
                   ret = irq_domain_set_hwirq_and_chip(d->parent, virq + i, hwirq,
                                                       ~  ^
   drivers/irqchip/irq-mips-gic.c:668:3: error: field designator 'alloc' does not refer to any field in type 'const struct irq_domain_ops'
           .alloc = gic_ipi_domain_alloc,
            ^
   drivers/irqchip/irq-mips-gic.c:669:3: error: field designator 'free' does not refer to any field in type 'const struct irq_domain_ops'
           .free = gic_ipi_domain_free,
            ^
>> drivers/irqchip/irq-mips-gic.c:783:19: error: call to undeclared function 'irq_domain_add_hierarchy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
           gic_ipi_domain = irq_domain_add_hierarchy(gic_irq_domain,
                            ^
   drivers/irqchip/irq-mips-gic.c:783:19: note: did you mean 'irq_domain_is_hierarchy'?
   include/linux/irqdomain.h:591:20: note: 'irq_domain_is_hierarchy' declared here
   static inline bool irq_domain_is_hierarchy(struct irq_domain *domain)
                      ^
>> drivers/irqchip/irq-mips-gic.c:783:17: warning: incompatible integer to pointer conversion assigning to 'struct irq_domain *' from 'int' [-Wint-conversion]
           gic_ipi_domain = irq_domain_add_hierarchy(gic_irq_domain,
                          ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   2 warnings and 9 errors generated.


vim +/irq_domain_set_hwirq_and_chip +479 drivers/irqchip/irq-mips-gic.c

b87281e7f205ed Paul Burton         2017-04-20  464  
8ada00a650ec7e Matt Redfearn       2017-04-20  465  static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq,
8ada00a650ec7e Matt Redfearn       2017-04-20  466  			      irq_hw_number_t hwirq)
b87281e7f205ed Paul Burton         2017-04-20  467  {
da61fcf9d62a05 Paul Burton         2017-10-31  468  	struct gic_all_vpes_chip_data *cd;
63b746b19fa660 Paul Burton         2017-10-31  469  	unsigned long flags;
63b746b19fa660 Paul Burton         2017-10-31  470  	unsigned int intr;
da61fcf9d62a05 Paul Burton         2017-10-31  471  	int err, cpu;
63b746b19fa660 Paul Burton         2017-10-31  472  	u32 map;
6a33fa2b87513f Paul Burton         2016-08-19  473  
8ada00a650ec7e Matt Redfearn       2017-04-20  474  	if (hwirq >= GIC_SHARED_HWIRQ_BASE) {
b87281e7f205ed Paul Burton         2017-04-20  475  		/* verify that shared irqs don't conflict with an IPI irq */
b87281e7f205ed Paul Burton         2017-04-20  476  		if (test_bit(GIC_HWIRQ_TO_SHARED(hwirq), ipi_resrv))
b87281e7f205ed Paul Burton         2017-04-20  477  			return -EBUSY;
b87281e7f205ed Paul Burton         2017-04-20  478  
e875bd66dfb68f Paul Burton         2016-09-13 @479  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
e875bd66dfb68f Paul Burton         2016-09-13  480  						    &gic_level_irq_controller,
e875bd66dfb68f Paul Burton         2016-09-13  481  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  482  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  483  			return err;
b87281e7f205ed Paul Burton         2017-04-20  484  
18416e45b76189 Marc Zyngier        2017-08-18  485  		irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq)));
b87281e7f205ed Paul Burton         2017-04-20  486  		return gic_shared_irq_domain_map(d, virq, hwirq, 0);
b87281e7f205ed Paul Burton         2017-04-20  487  	}
b87281e7f205ed Paul Burton         2017-04-20  488  
63b746b19fa660 Paul Burton         2017-10-31  489  	intr = GIC_HWIRQ_TO_LOCAL(hwirq);
63b746b19fa660 Paul Burton         2017-10-31  490  	map = GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin;
63b746b19fa660 Paul Burton         2017-10-31  491  
dd098a0e031928 Marc Zyngier        2021-10-21  492  	/*
dd098a0e031928 Marc Zyngier        2021-10-21  493  	 * If adding support for more per-cpu interrupts, keep the the
dd098a0e031928 Marc Zyngier        2021-10-21  494  	 * array in gic_all_vpes_irq_cpu_online() in sync.
dd098a0e031928 Marc Zyngier        2021-10-21  495  	 */
63b746b19fa660 Paul Burton         2017-10-31  496  	switch (intr) {
e875bd66dfb68f Paul Burton         2016-09-13  497  	case GIC_LOCAL_INT_TIMER:
63b746b19fa660 Paul Burton         2017-10-31  498  		/* CONFIG_MIPS_CMP workaround (see __gic_init) */
63b746b19fa660 Paul Burton         2017-10-31  499  		map = GIC_MAP_PIN_MAP_TO_PIN | timer_cpu_pin;
df561f6688fef7 Gustavo A. R. Silva 2020-08-23  500  		fallthrough;
e875bd66dfb68f Paul Burton         2016-09-13  501  	case GIC_LOCAL_INT_PERFCTR:
e875bd66dfb68f Paul Burton         2016-09-13  502  	case GIC_LOCAL_INT_FDC:
e875bd66dfb68f Paul Burton         2016-09-13  503  		/*
e875bd66dfb68f Paul Burton         2016-09-13  504  		 * HACK: These are all really percpu interrupts, but
e875bd66dfb68f Paul Burton         2016-09-13  505  		 * the rest of the MIPS kernel code does not use the
e875bd66dfb68f Paul Burton         2016-09-13  506  		 * percpu IRQ API for them.
e875bd66dfb68f Paul Burton         2016-09-13  507  		 */
da61fcf9d62a05 Paul Burton         2017-10-31  508  		cd = &gic_all_vpes_chip_data[intr];
da61fcf9d62a05 Paul Burton         2017-10-31  509  		cd->map = map;
b87281e7f205ed Paul Burton         2017-04-20  510  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  511  						    &gic_all_vpes_local_irq_controller,
da61fcf9d62a05 Paul Burton         2017-10-31  512  						    cd);
b87281e7f205ed Paul Burton         2017-04-20  513  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  514  			return err;
b87281e7f205ed Paul Burton         2017-04-20  515  
e875bd66dfb68f Paul Burton         2016-09-13  516  		irq_set_handler(virq, handle_percpu_irq);
e875bd66dfb68f Paul Burton         2016-09-13  517  		break;
e875bd66dfb68f Paul Burton         2016-09-13  518  
e875bd66dfb68f Paul Burton         2016-09-13  519  	default:
b87281e7f205ed Paul Burton         2017-04-20  520  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  521  						    &gic_local_irq_controller,
b87281e7f205ed Paul Burton         2017-04-20  522  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  523  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  524  			return err;
b87281e7f205ed Paul Burton         2017-04-20  525  
e875bd66dfb68f Paul Burton         2016-09-13  526  		irq_set_handler(virq, handle_percpu_devid_irq);
e875bd66dfb68f Paul Burton         2016-09-13  527  		irq_set_percpu_devid(virq);
e875bd66dfb68f Paul Burton         2016-09-13  528  		break;
e875bd66dfb68f Paul Burton         2016-09-13  529  	}
e875bd66dfb68f Paul Burton         2016-09-13  530  
63b746b19fa660 Paul Burton         2017-10-31  531  	if (!gic_local_irq_is_routable(intr))
63b746b19fa660 Paul Burton         2017-10-31  532  		return -EPERM;
63b746b19fa660 Paul Burton         2017-10-31  533  
63b746b19fa660 Paul Burton         2017-10-31  534  	spin_lock_irqsave(&gic_lock, flags);
da61fcf9d62a05 Paul Burton         2017-10-31  535  	for_each_online_cpu(cpu) {
da61fcf9d62a05 Paul Burton         2017-10-31  536  		write_gic_vl_other(mips_cm_vp_id(cpu));
6d4d367d0e9ffa Paul Burton         2019-06-05  537  		write_gic_vo_map(mips_gic_vx_map_reg(intr), map);
63b746b19fa660 Paul Burton         2017-10-31  538  	}
63b746b19fa660 Paul Burton         2017-10-31  539  	spin_unlock_irqrestore(&gic_lock, flags);
63b746b19fa660 Paul Burton         2017-10-31  540  
63b746b19fa660 Paul Burton         2017-10-31  541  	return 0;
e875bd66dfb68f Paul Burton         2016-09-13  542  }
6a33fa2b87513f Paul Burton         2016-08-19  543  
8ada00a650ec7e Matt Redfearn       2017-04-20  544  static int gic_irq_domain_alloc(struct irq_domain *d, unsigned int virq,
8ada00a650ec7e Matt Redfearn       2017-04-20  545  				unsigned int nr_irqs, void *arg)
8ada00a650ec7e Matt Redfearn       2017-04-20  546  {
8ada00a650ec7e Matt Redfearn       2017-04-20  547  	struct irq_fwspec *fwspec = arg;
8ada00a650ec7e Matt Redfearn       2017-04-20  548  	irq_hw_number_t hwirq;
8ada00a650ec7e Matt Redfearn       2017-04-20  549  
8ada00a650ec7e Matt Redfearn       2017-04-20  550  	if (fwspec->param[0] == GIC_SHARED)
8ada00a650ec7e Matt Redfearn       2017-04-20  551  		hwirq = GIC_SHARED_TO_HWIRQ(fwspec->param[1]);
8ada00a650ec7e Matt Redfearn       2017-04-20  552  	else
8ada00a650ec7e Matt Redfearn       2017-04-20  553  		hwirq = GIC_LOCAL_TO_HWIRQ(fwspec->param[1]);
8ada00a650ec7e Matt Redfearn       2017-04-20  554  
8ada00a650ec7e Matt Redfearn       2017-04-20  555  	return gic_irq_domain_map(d, virq, hwirq);
8ada00a650ec7e Matt Redfearn       2017-04-20  556  }
8ada00a650ec7e Matt Redfearn       2017-04-20  557  
b87281e7f205ed Paul Burton         2017-04-20  558  void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
b87281e7f205ed Paul Burton         2017-04-20  559  			 unsigned int nr_irqs)
b87281e7f205ed Paul Burton         2017-04-20  560  {
e9de688dac6534 Andrew Bresticker   2014-09-18  561  }
e9de688dac6534 Andrew Bresticker   2014-09-18  562  
b87281e7f205ed Paul Burton         2017-04-20  563  static const struct irq_domain_ops gic_irq_domain_ops = {
b87281e7f205ed Paul Burton         2017-04-20  564  	.xlate = gic_irq_domain_xlate,
b87281e7f205ed Paul Burton         2017-04-20 @565  	.alloc = gic_irq_domain_alloc,
b87281e7f205ed Paul Burton         2017-04-20 @566  	.free = gic_irq_domain_free,
8ada00a650ec7e Matt Redfearn       2017-04-20  567  	.map = gic_irq_domain_map,
b87281e7f205ed Paul Burton         2017-04-20  568  };
b87281e7f205ed Paul Burton         2017-04-20  569  
b87281e7f205ed Paul Burton         2017-04-20  570  static int gic_ipi_domain_xlate(struct irq_domain *d, struct device_node *ctrlr,
b87281e7f205ed Paul Burton         2017-04-20  571  				const u32 *intspec, unsigned int intsize,
b87281e7f205ed Paul Burton         2017-04-20  572  				irq_hw_number_t *out_hwirq,
b87281e7f205ed Paul Burton         2017-04-20  573  				unsigned int *out_type)
b87281e7f205ed Paul Burton         2017-04-20  574  {
b87281e7f205ed Paul Burton         2017-04-20  575  	/*
b87281e7f205ed Paul Burton         2017-04-20  576  	 * There's nothing to translate here. hwirq is dynamically allocated and
b87281e7f205ed Paul Burton         2017-04-20  577  	 * the irq type is always edge triggered.
b87281e7f205ed Paul Burton         2017-04-20  578  	 * */
b87281e7f205ed Paul Burton         2017-04-20  579  	*out_hwirq = 0;
b87281e7f205ed Paul Burton         2017-04-20  580  	*out_type = IRQ_TYPE_EDGE_RISING;
b87281e7f205ed Paul Burton         2017-04-20  581  
b87281e7f205ed Paul Burton         2017-04-20  582  	return 0;
b87281e7f205ed Paul Burton         2017-04-20  583  }
b87281e7f205ed Paul Burton         2017-04-20  584  
b87281e7f205ed Paul Burton         2017-04-20  585  static int gic_ipi_domain_alloc(struct irq_domain *d, unsigned int virq,
2af70a962070fd Qais Yousef         2015-12-08  586  				unsigned int nr_irqs, void *arg)
2af70a962070fd Qais Yousef         2015-12-08  587  {
b87281e7f205ed Paul Burton         2017-04-20  588  	struct cpumask *ipimask = arg;
2af70a962070fd Qais Yousef         2015-12-08  589  	irq_hw_number_t hwirq, base_hwirq;
2af70a962070fd Qais Yousef         2015-12-08  590  	int cpu, ret, i;
2af70a962070fd Qais Yousef         2015-12-08  591  
f8dcd9e81797ae Paul Burton         2017-04-20  592  	base_hwirq = find_first_bit(ipi_available, gic_shared_intrs);
b87281e7f205ed Paul Burton         2017-04-20  593  	if (base_hwirq == gic_shared_intrs)
2af70a962070fd Qais Yousef         2015-12-08  594  		return -ENOMEM;
2af70a962070fd Qais Yousef         2015-12-08  595  
2af70a962070fd Qais Yousef         2015-12-08  596  	/* check that we have enough space */
2af70a962070fd Qais Yousef         2015-12-08  597  	for (i = base_hwirq; i < nr_irqs; i++) {
f8dcd9e81797ae Paul Burton         2017-04-20  598  		if (!test_bit(i, ipi_available))
2af70a962070fd Qais Yousef         2015-12-08  599  			return -EBUSY;
2af70a962070fd Qais Yousef         2015-12-08  600  	}
f8dcd9e81797ae Paul Burton         2017-04-20  601  	bitmap_clear(ipi_available, base_hwirq, nr_irqs);
2af70a962070fd Qais Yousef         2015-12-08  602  
2af70a962070fd Qais Yousef         2015-12-08  603  	/* map the hwirq for each cpu consecutively */
2af70a962070fd Qais Yousef         2015-12-08  604  	i = 0;
b87281e7f205ed Paul Burton         2017-04-20  605  	for_each_cpu(cpu, ipimask) {
2af70a962070fd Qais Yousef         2015-12-08  606  		hwirq = GIC_SHARED_TO_HWIRQ(base_hwirq + i);
2af70a962070fd Qais Yousef         2015-12-08  607  
2af70a962070fd Qais Yousef         2015-12-08  608  		ret = irq_domain_set_hwirq_and_chip(d, virq + i, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  609  						    &gic_edge_irq_controller,
b87281e7f205ed Paul Burton         2017-04-20  610  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  611  		if (ret)
b87281e7f205ed Paul Burton         2017-04-20  612  			goto error;
b87281e7f205ed Paul Burton         2017-04-20  613  
b87281e7f205ed Paul Burton         2017-04-20 @614  		ret = irq_domain_set_hwirq_and_chip(d->parent, virq + i, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  615  						    &gic_edge_irq_controller,
2af70a962070fd Qais Yousef         2015-12-08  616  						    NULL);
2af70a962070fd Qais Yousef         2015-12-08  617  		if (ret)
2af70a962070fd Qais Yousef         2015-12-08  618  			goto error;
2af70a962070fd Qais Yousef         2015-12-08  619  
b87281e7f205ed Paul Burton         2017-04-20  620  		ret = irq_set_irq_type(virq + i, IRQ_TYPE_EDGE_RISING);
b87281e7f205ed Paul Burton         2017-04-20  621  		if (ret)
b87281e7f205ed Paul Burton         2017-04-20  622  			goto error;
6a33fa2b87513f Paul Burton         2016-08-19  623  
2af70a962070fd Qais Yousef         2015-12-08  624  		ret = gic_shared_irq_domain_map(d, virq + i, hwirq, cpu);
2af70a962070fd Qais Yousef         2015-12-08  625  		if (ret)
2af70a962070fd Qais Yousef         2015-12-08  626  			goto error;
2af70a962070fd Qais Yousef         2015-12-08  627  
2af70a962070fd Qais Yousef         2015-12-08  628  		i++;
2af70a962070fd Qais Yousef         2015-12-08  629  	}
2af70a962070fd Qais Yousef         2015-12-08  630  
2af70a962070fd Qais Yousef         2015-12-08  631  	return 0;
2af70a962070fd Qais Yousef         2015-12-08  632  error:
f8dcd9e81797ae Paul Burton         2017-04-20  633  	bitmap_set(ipi_available, base_hwirq, nr_irqs);
2af70a962070fd Qais Yousef         2015-12-08  634  	return ret;
2af70a962070fd Qais Yousef         2015-12-08  635  }
2af70a962070fd Qais Yousef         2015-12-08  636  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Samuel Holland <samuel@sholland.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Marc Zyngier <maz@kernel.org>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Albert Ou <aou@eecs.berkeley.edu>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
	Samuel Holland <samuel@sholland.org>,
	Bartosz Golaszewski <brgl@bgdev.pl>, Guo Ren <guoren@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Russell King <linux@armlinux.org.uk>,
	Wei Xu <xuwei5@hisilicon.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org
Subject: Re: [PATCH v2 2/6] genirq: GENERIC_IRQ_IPI depends on SMP
Date: Mon, 20 Jun 2022 12:26:24 +0800	[thread overview]
Message-ID: <202206201217.WYwGH37h-lkp@intel.com> (raw)
In-Reply-To: <20220616064028.57933-3-samuel@sholland.org>

Hi Samuel,

I love your patch! Yet something to improve:

[auto build test ERROR on tip/irq/core]
[also build test ERROR on soc/for-next linus/master v5.19-rc2 next-20220617]
[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]

url:    https://github.com/intel-lab-lkp/linux/commits/Samuel-Holland/genirq-irqchip-RISC-V-PLIC-cleanup-and-optimization/20220616-144300
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git ac165aab469895de059a4a191a2e04ddb5421d0e
config: mips-allnoconfig (https://download.01.org/0day-ci/archive/20220620/202206201217.WYwGH37h-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af6d2a0b6825e71965f3e2701a63c239fa0ad70f)
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
        # install mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/f8ac62a249f067a05a64eec484ac235137f2c36e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Samuel-Holland/genirq-irqchip-RISC-V-PLIC-cleanup-and-optimization/20220616-144300
        git checkout f8ac62a249f067a05a64eec484ac235137f2c36e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash drivers/irqchip/

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 >>):

>> drivers/irqchip/irq-mips-gic.c:479:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
                         ^
   drivers/irqchip/irq-mips-gic.c:510:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
                         ^
   drivers/irqchip/irq-mips-gic.c:558:6: warning: no previous prototype for function 'gic_irq_domain_free' [-Wmissing-prototypes]
   void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
        ^
   drivers/irqchip/irq-mips-gic.c:558:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
   ^
   static 
>> drivers/irqchip/irq-mips-gic.c:565:3: error: field designator 'alloc' does not refer to any field in type 'const struct irq_domain_ops'
           .alloc = gic_irq_domain_alloc,
            ^
>> drivers/irqchip/irq-mips-gic.c:566:3: error: field designator 'free' does not refer to any field in type 'const struct irq_domain_ops'
           .free = gic_irq_domain_free,
            ^
   drivers/irqchip/irq-mips-gic.c:608:9: error: call to undeclared function 'irq_domain_set_hwirq_and_chip'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
                   ret = irq_domain_set_hwirq_and_chip(d, virq + i, hwirq,
                         ^
>> drivers/irqchip/irq-mips-gic.c:614:42: error: no member named 'parent' in 'struct irq_domain'
                   ret = irq_domain_set_hwirq_and_chip(d->parent, virq + i, hwirq,
                                                       ~  ^
   drivers/irqchip/irq-mips-gic.c:668:3: error: field designator 'alloc' does not refer to any field in type 'const struct irq_domain_ops'
           .alloc = gic_ipi_domain_alloc,
            ^
   drivers/irqchip/irq-mips-gic.c:669:3: error: field designator 'free' does not refer to any field in type 'const struct irq_domain_ops'
           .free = gic_ipi_domain_free,
            ^
>> drivers/irqchip/irq-mips-gic.c:783:19: error: call to undeclared function 'irq_domain_add_hierarchy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
           gic_ipi_domain = irq_domain_add_hierarchy(gic_irq_domain,
                            ^
   drivers/irqchip/irq-mips-gic.c:783:19: note: did you mean 'irq_domain_is_hierarchy'?
   include/linux/irqdomain.h:591:20: note: 'irq_domain_is_hierarchy' declared here
   static inline bool irq_domain_is_hierarchy(struct irq_domain *domain)
                      ^
>> drivers/irqchip/irq-mips-gic.c:783:17: warning: incompatible integer to pointer conversion assigning to 'struct irq_domain *' from 'int' [-Wint-conversion]
           gic_ipi_domain = irq_domain_add_hierarchy(gic_irq_domain,
                          ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   2 warnings and 9 errors generated.


vim +/irq_domain_set_hwirq_and_chip +479 drivers/irqchip/irq-mips-gic.c

b87281e7f205ed Paul Burton         2017-04-20  464  
8ada00a650ec7e Matt Redfearn       2017-04-20  465  static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq,
8ada00a650ec7e Matt Redfearn       2017-04-20  466  			      irq_hw_number_t hwirq)
b87281e7f205ed Paul Burton         2017-04-20  467  {
da61fcf9d62a05 Paul Burton         2017-10-31  468  	struct gic_all_vpes_chip_data *cd;
63b746b19fa660 Paul Burton         2017-10-31  469  	unsigned long flags;
63b746b19fa660 Paul Burton         2017-10-31  470  	unsigned int intr;
da61fcf9d62a05 Paul Burton         2017-10-31  471  	int err, cpu;
63b746b19fa660 Paul Burton         2017-10-31  472  	u32 map;
6a33fa2b87513f Paul Burton         2016-08-19  473  
8ada00a650ec7e Matt Redfearn       2017-04-20  474  	if (hwirq >= GIC_SHARED_HWIRQ_BASE) {
b87281e7f205ed Paul Burton         2017-04-20  475  		/* verify that shared irqs don't conflict with an IPI irq */
b87281e7f205ed Paul Burton         2017-04-20  476  		if (test_bit(GIC_HWIRQ_TO_SHARED(hwirq), ipi_resrv))
b87281e7f205ed Paul Burton         2017-04-20  477  			return -EBUSY;
b87281e7f205ed Paul Burton         2017-04-20  478  
e875bd66dfb68f Paul Burton         2016-09-13 @479  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
e875bd66dfb68f Paul Burton         2016-09-13  480  						    &gic_level_irq_controller,
e875bd66dfb68f Paul Burton         2016-09-13  481  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  482  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  483  			return err;
b87281e7f205ed Paul Burton         2017-04-20  484  
18416e45b76189 Marc Zyngier        2017-08-18  485  		irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq)));
b87281e7f205ed Paul Burton         2017-04-20  486  		return gic_shared_irq_domain_map(d, virq, hwirq, 0);
b87281e7f205ed Paul Burton         2017-04-20  487  	}
b87281e7f205ed Paul Burton         2017-04-20  488  
63b746b19fa660 Paul Burton         2017-10-31  489  	intr = GIC_HWIRQ_TO_LOCAL(hwirq);
63b746b19fa660 Paul Burton         2017-10-31  490  	map = GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin;
63b746b19fa660 Paul Burton         2017-10-31  491  
dd098a0e031928 Marc Zyngier        2021-10-21  492  	/*
dd098a0e031928 Marc Zyngier        2021-10-21  493  	 * If adding support for more per-cpu interrupts, keep the the
dd098a0e031928 Marc Zyngier        2021-10-21  494  	 * array in gic_all_vpes_irq_cpu_online() in sync.
dd098a0e031928 Marc Zyngier        2021-10-21  495  	 */
63b746b19fa660 Paul Burton         2017-10-31  496  	switch (intr) {
e875bd66dfb68f Paul Burton         2016-09-13  497  	case GIC_LOCAL_INT_TIMER:
63b746b19fa660 Paul Burton         2017-10-31  498  		/* CONFIG_MIPS_CMP workaround (see __gic_init) */
63b746b19fa660 Paul Burton         2017-10-31  499  		map = GIC_MAP_PIN_MAP_TO_PIN | timer_cpu_pin;
df561f6688fef7 Gustavo A. R. Silva 2020-08-23  500  		fallthrough;
e875bd66dfb68f Paul Burton         2016-09-13  501  	case GIC_LOCAL_INT_PERFCTR:
e875bd66dfb68f Paul Burton         2016-09-13  502  	case GIC_LOCAL_INT_FDC:
e875bd66dfb68f Paul Burton         2016-09-13  503  		/*
e875bd66dfb68f Paul Burton         2016-09-13  504  		 * HACK: These are all really percpu interrupts, but
e875bd66dfb68f Paul Burton         2016-09-13  505  		 * the rest of the MIPS kernel code does not use the
e875bd66dfb68f Paul Burton         2016-09-13  506  		 * percpu IRQ API for them.
e875bd66dfb68f Paul Burton         2016-09-13  507  		 */
da61fcf9d62a05 Paul Burton         2017-10-31  508  		cd = &gic_all_vpes_chip_data[intr];
da61fcf9d62a05 Paul Burton         2017-10-31  509  		cd->map = map;
b87281e7f205ed Paul Burton         2017-04-20  510  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  511  						    &gic_all_vpes_local_irq_controller,
da61fcf9d62a05 Paul Burton         2017-10-31  512  						    cd);
b87281e7f205ed Paul Burton         2017-04-20  513  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  514  			return err;
b87281e7f205ed Paul Burton         2017-04-20  515  
e875bd66dfb68f Paul Burton         2016-09-13  516  		irq_set_handler(virq, handle_percpu_irq);
e875bd66dfb68f Paul Burton         2016-09-13  517  		break;
e875bd66dfb68f Paul Burton         2016-09-13  518  
e875bd66dfb68f Paul Burton         2016-09-13  519  	default:
b87281e7f205ed Paul Burton         2017-04-20  520  		err = irq_domain_set_hwirq_and_chip(d, virq, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  521  						    &gic_local_irq_controller,
b87281e7f205ed Paul Burton         2017-04-20  522  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  523  		if (err)
b87281e7f205ed Paul Burton         2017-04-20  524  			return err;
b87281e7f205ed Paul Burton         2017-04-20  525  
e875bd66dfb68f Paul Burton         2016-09-13  526  		irq_set_handler(virq, handle_percpu_devid_irq);
e875bd66dfb68f Paul Burton         2016-09-13  527  		irq_set_percpu_devid(virq);
e875bd66dfb68f Paul Burton         2016-09-13  528  		break;
e875bd66dfb68f Paul Burton         2016-09-13  529  	}
e875bd66dfb68f Paul Burton         2016-09-13  530  
63b746b19fa660 Paul Burton         2017-10-31  531  	if (!gic_local_irq_is_routable(intr))
63b746b19fa660 Paul Burton         2017-10-31  532  		return -EPERM;
63b746b19fa660 Paul Burton         2017-10-31  533  
63b746b19fa660 Paul Burton         2017-10-31  534  	spin_lock_irqsave(&gic_lock, flags);
da61fcf9d62a05 Paul Burton         2017-10-31  535  	for_each_online_cpu(cpu) {
da61fcf9d62a05 Paul Burton         2017-10-31  536  		write_gic_vl_other(mips_cm_vp_id(cpu));
6d4d367d0e9ffa Paul Burton         2019-06-05  537  		write_gic_vo_map(mips_gic_vx_map_reg(intr), map);
63b746b19fa660 Paul Burton         2017-10-31  538  	}
63b746b19fa660 Paul Burton         2017-10-31  539  	spin_unlock_irqrestore(&gic_lock, flags);
63b746b19fa660 Paul Burton         2017-10-31  540  
63b746b19fa660 Paul Burton         2017-10-31  541  	return 0;
e875bd66dfb68f Paul Burton         2016-09-13  542  }
6a33fa2b87513f Paul Burton         2016-08-19  543  
8ada00a650ec7e Matt Redfearn       2017-04-20  544  static int gic_irq_domain_alloc(struct irq_domain *d, unsigned int virq,
8ada00a650ec7e Matt Redfearn       2017-04-20  545  				unsigned int nr_irqs, void *arg)
8ada00a650ec7e Matt Redfearn       2017-04-20  546  {
8ada00a650ec7e Matt Redfearn       2017-04-20  547  	struct irq_fwspec *fwspec = arg;
8ada00a650ec7e Matt Redfearn       2017-04-20  548  	irq_hw_number_t hwirq;
8ada00a650ec7e Matt Redfearn       2017-04-20  549  
8ada00a650ec7e Matt Redfearn       2017-04-20  550  	if (fwspec->param[0] == GIC_SHARED)
8ada00a650ec7e Matt Redfearn       2017-04-20  551  		hwirq = GIC_SHARED_TO_HWIRQ(fwspec->param[1]);
8ada00a650ec7e Matt Redfearn       2017-04-20  552  	else
8ada00a650ec7e Matt Redfearn       2017-04-20  553  		hwirq = GIC_LOCAL_TO_HWIRQ(fwspec->param[1]);
8ada00a650ec7e Matt Redfearn       2017-04-20  554  
8ada00a650ec7e Matt Redfearn       2017-04-20  555  	return gic_irq_domain_map(d, virq, hwirq);
8ada00a650ec7e Matt Redfearn       2017-04-20  556  }
8ada00a650ec7e Matt Redfearn       2017-04-20  557  
b87281e7f205ed Paul Burton         2017-04-20  558  void gic_irq_domain_free(struct irq_domain *d, unsigned int virq,
b87281e7f205ed Paul Burton         2017-04-20  559  			 unsigned int nr_irqs)
b87281e7f205ed Paul Burton         2017-04-20  560  {
e9de688dac6534 Andrew Bresticker   2014-09-18  561  }
e9de688dac6534 Andrew Bresticker   2014-09-18  562  
b87281e7f205ed Paul Burton         2017-04-20  563  static const struct irq_domain_ops gic_irq_domain_ops = {
b87281e7f205ed Paul Burton         2017-04-20  564  	.xlate = gic_irq_domain_xlate,
b87281e7f205ed Paul Burton         2017-04-20 @565  	.alloc = gic_irq_domain_alloc,
b87281e7f205ed Paul Burton         2017-04-20 @566  	.free = gic_irq_domain_free,
8ada00a650ec7e Matt Redfearn       2017-04-20  567  	.map = gic_irq_domain_map,
b87281e7f205ed Paul Burton         2017-04-20  568  };
b87281e7f205ed Paul Burton         2017-04-20  569  
b87281e7f205ed Paul Burton         2017-04-20  570  static int gic_ipi_domain_xlate(struct irq_domain *d, struct device_node *ctrlr,
b87281e7f205ed Paul Burton         2017-04-20  571  				const u32 *intspec, unsigned int intsize,
b87281e7f205ed Paul Burton         2017-04-20  572  				irq_hw_number_t *out_hwirq,
b87281e7f205ed Paul Burton         2017-04-20  573  				unsigned int *out_type)
b87281e7f205ed Paul Burton         2017-04-20  574  {
b87281e7f205ed Paul Burton         2017-04-20  575  	/*
b87281e7f205ed Paul Burton         2017-04-20  576  	 * There's nothing to translate here. hwirq is dynamically allocated and
b87281e7f205ed Paul Burton         2017-04-20  577  	 * the irq type is always edge triggered.
b87281e7f205ed Paul Burton         2017-04-20  578  	 * */
b87281e7f205ed Paul Burton         2017-04-20  579  	*out_hwirq = 0;
b87281e7f205ed Paul Burton         2017-04-20  580  	*out_type = IRQ_TYPE_EDGE_RISING;
b87281e7f205ed Paul Burton         2017-04-20  581  
b87281e7f205ed Paul Burton         2017-04-20  582  	return 0;
b87281e7f205ed Paul Burton         2017-04-20  583  }
b87281e7f205ed Paul Burton         2017-04-20  584  
b87281e7f205ed Paul Burton         2017-04-20  585  static int gic_ipi_domain_alloc(struct irq_domain *d, unsigned int virq,
2af70a962070fd Qais Yousef         2015-12-08  586  				unsigned int nr_irqs, void *arg)
2af70a962070fd Qais Yousef         2015-12-08  587  {
b87281e7f205ed Paul Burton         2017-04-20  588  	struct cpumask *ipimask = arg;
2af70a962070fd Qais Yousef         2015-12-08  589  	irq_hw_number_t hwirq, base_hwirq;
2af70a962070fd Qais Yousef         2015-12-08  590  	int cpu, ret, i;
2af70a962070fd Qais Yousef         2015-12-08  591  
f8dcd9e81797ae Paul Burton         2017-04-20  592  	base_hwirq = find_first_bit(ipi_available, gic_shared_intrs);
b87281e7f205ed Paul Burton         2017-04-20  593  	if (base_hwirq == gic_shared_intrs)
2af70a962070fd Qais Yousef         2015-12-08  594  		return -ENOMEM;
2af70a962070fd Qais Yousef         2015-12-08  595  
2af70a962070fd Qais Yousef         2015-12-08  596  	/* check that we have enough space */
2af70a962070fd Qais Yousef         2015-12-08  597  	for (i = base_hwirq; i < nr_irqs; i++) {
f8dcd9e81797ae Paul Burton         2017-04-20  598  		if (!test_bit(i, ipi_available))
2af70a962070fd Qais Yousef         2015-12-08  599  			return -EBUSY;
2af70a962070fd Qais Yousef         2015-12-08  600  	}
f8dcd9e81797ae Paul Burton         2017-04-20  601  	bitmap_clear(ipi_available, base_hwirq, nr_irqs);
2af70a962070fd Qais Yousef         2015-12-08  602  
2af70a962070fd Qais Yousef         2015-12-08  603  	/* map the hwirq for each cpu consecutively */
2af70a962070fd Qais Yousef         2015-12-08  604  	i = 0;
b87281e7f205ed Paul Burton         2017-04-20  605  	for_each_cpu(cpu, ipimask) {
2af70a962070fd Qais Yousef         2015-12-08  606  		hwirq = GIC_SHARED_TO_HWIRQ(base_hwirq + i);
2af70a962070fd Qais Yousef         2015-12-08  607  
2af70a962070fd Qais Yousef         2015-12-08  608  		ret = irq_domain_set_hwirq_and_chip(d, virq + i, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  609  						    &gic_edge_irq_controller,
b87281e7f205ed Paul Burton         2017-04-20  610  						    NULL);
b87281e7f205ed Paul Burton         2017-04-20  611  		if (ret)
b87281e7f205ed Paul Burton         2017-04-20  612  			goto error;
b87281e7f205ed Paul Burton         2017-04-20  613  
b87281e7f205ed Paul Burton         2017-04-20 @614  		ret = irq_domain_set_hwirq_and_chip(d->parent, virq + i, hwirq,
b87281e7f205ed Paul Burton         2017-04-20  615  						    &gic_edge_irq_controller,
2af70a962070fd Qais Yousef         2015-12-08  616  						    NULL);
2af70a962070fd Qais Yousef         2015-12-08  617  		if (ret)
2af70a962070fd Qais Yousef         2015-12-08  618  			goto error;
2af70a962070fd Qais Yousef         2015-12-08  619  
b87281e7f205ed Paul Burton         2017-04-20  620  		ret = irq_set_irq_type(virq + i, IRQ_TYPE_EDGE_RISING);
b87281e7f205ed Paul Burton         2017-04-20  621  		if (ret)
b87281e7f205ed Paul Burton         2017-04-20  622  			goto error;
6a33fa2b87513f Paul Burton         2016-08-19  623  
2af70a962070fd Qais Yousef         2015-12-08  624  		ret = gic_shared_irq_domain_map(d, virq + i, hwirq, cpu);
2af70a962070fd Qais Yousef         2015-12-08  625  		if (ret)
2af70a962070fd Qais Yousef         2015-12-08  626  			goto error;
2af70a962070fd Qais Yousef         2015-12-08  627  
2af70a962070fd Qais Yousef         2015-12-08  628  		i++;
2af70a962070fd Qais Yousef         2015-12-08  629  	}
2af70a962070fd Qais Yousef         2015-12-08  630  
2af70a962070fd Qais Yousef         2015-12-08  631  	return 0;
2af70a962070fd Qais Yousef         2015-12-08  632  error:
f8dcd9e81797ae Paul Burton         2017-04-20  633  	bitmap_set(ipi_available, base_hwirq, nr_irqs);
2af70a962070fd Qais Yousef         2015-12-08  634  	return ret;
2af70a962070fd Qais Yousef         2015-12-08  635  }
2af70a962070fd Qais Yousef         2015-12-08  636  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-06-20  4:27 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-16  6:40 [PATCH v2 0/6] genirq/irqchip: RISC-V PLIC cleanup and optimization Samuel Holland
2022-06-16  6:40 ` Samuel Holland
2022-06-16  6:40 ` Samuel Holland
2022-06-16  6:40 ` [PATCH v2 1/6] genirq: GENERIC_IRQ_EFFECTIVE_AFF_MASK depends on SMP Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40 ` [PATCH v2 2/6] genirq: GENERIC_IRQ_IPI " Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-20  4:26   ` kernel test robot [this message]
2022-06-20  4:26     ` kernel test robot
2022-06-20  4:26     ` kernel test robot
2022-06-16  6:40 ` [PATCH v2 3/6] genirq: Refactor accessors to use irq_data_get_affinity_mask Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40 ` [PATCH v2 4/6] genirq: Provide an IRQ affinity mask in non-SMP configs Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-18  9:01   ` Marc Zyngier
2022-06-18  9:01     ` Marc Zyngier
2022-06-18  9:01     ` Marc Zyngier
2022-06-21  4:03     ` Samuel Holland
2022-06-21  4:03       ` Samuel Holland
2022-06-21  4:03       ` Samuel Holland
2022-06-21  8:06       ` Marc Zyngier
2022-06-21  8:06         ` Marc Zyngier
2022-06-21  8:06         ` Marc Zyngier
2022-06-16  6:40 ` [PATCH v2 5/6] irqchip/sifive-plic: Make better use of the effective affinity mask Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40 ` [PATCH v2 6/6] irqchip/sifive-plic: Separate the enable and mask operations Samuel Holland
2022-06-16  6:40   ` Samuel Holland
2022-06-16  6:40   ` Samuel Holland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202206201217.WYwGH37h-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=brgl@bgdev.pl \
    --cc=guoren@kernel.org \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux@armlinux.org.uk \
    --cc=llvm@lists.linux.dev \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=samuel@sholland.org \
    --cc=tglx@linutronix.de \
    --cc=xuwei5@hisilicon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.