All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
To: kbuild test robot <lkp@intel.com>
Cc: "kbuild-all@01.org" <kbuild-all@01.org>,
	"lorenzo.pieralisi@arm.com" <lorenzo.pieralisi@arm.com>,
	"robin.murphy@arm.com" <robin.murphy@arm.com>,
	"jean-philippe.brucker@arm.com" <jean-philippe.brucker@arm.com>,
	"will.deacon@arm.com" <will.deacon@arm.com>,
	"mark.rutland@arm.com" <mark.rutland@arm.com>,
	"Guohanjun (Hanjun Guo)" <guohanjun@huawei.com>,
	John Garry <john.garry@huawei.com>,
	"pabba@codeaurora.org" <pabba@codeaurora.org>,
	"vkilari@codeaurora.org" <vkilari@codeaurora.org>,
	"rruigrok@codeaurora.org" <rruigrok@codeaurora.org>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	Linuxarm <linuxarm@huawei.com>
Subject: RE: [PATCH v4 3/4] perf/smmuv3: Add MSI irq support
Date: Wed, 17 Oct 2018 09:48:53 +0000	[thread overview]
Message-ID: <5FC3163CFD30C246ABAA99954A238FA83879F3FB@FRAEML521-MBX.china.huawei.com> (raw)
In-Reply-To: <201810171145.mGVw4SgU%fengguang.wu@intel.com>



> -----Original Message-----
> From: kbuild test robot [mailto:lkp@intel.com]
> Sent: 17 October 2018 04:36
> To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
> Cc: kbuild-all@01.org; lorenzo.pieralisi@arm.com; robin.murphy@arm.com;
> jean-philippe.brucker@arm.com; will.deacon@arm.com;
> mark.rutland@arm.com; Guohanjun (Hanjun Guo) <guohanjun@huawei.com>;
> John Garry <john.garry@huawei.com>; pabba@codeaurora.org;
> vkilari@codeaurora.org; rruigrok@codeaurora.org; linux-
> acpi@vger.kernel.org; linux-kernel@vger.kernel.org; linux-arm-
> kernel@lists.infradead.org; Linuxarm <linuxarm@huawei.com>;
> neil.m.leeder@gmail.com
> Subject: Re: [PATCH v4 3/4] perf/smmuv3: Add MSI irq support
> 
> Hi Shameer,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on linux-sof-driver/master]
> [also build test ERROR on v4.19-rc8 next-20181016]
> [if your patch is applied to the wrong git tree, please drop us a note to help
> improve the system]
> 
> url:    https://github.com/0day-ci/linux/commits/Shameer-Kolothum/arm64-
> SMMUv3-PMU-driver-with-IORT-support/20181017-063949
> base:   https://github.com/thesofproject/linux master
> config: sh-allmodconfig (attached as .config)
> compiler: sh4-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
> reproduce:
>         wget https://raw.githubusercontent.com/intel/lkp-
> tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # save the attached .config to linux build tree
>         GCC_VERSION=7.2.0 make.cross ARCH=sh
> 
> All error/warnings (new ones prefixed by >>):
> 
>    In file included from include/linux/kernel.h:11:0,
>                     from include/linux/list.h:9,
>                     from include/linux/resource_ext.h:17,
>                     from include/linux/acpi.h:26,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    drivers//perf/arm_smmuv3_pmu.c: In function
> 'smmu_pmu_counter_set_value':
>    include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-
> count-overflow]
>     #define BIT(nr)   (1UL << (nr))
>                            ^
>    drivers//perf/arm_smmuv3_pmu.c:152:31: note: in expansion of macro 'BIT'
>      if (smmu_pmu->counter_mask & BIT(32))
>                                   ^~~
>    drivers//perf/arm_smmuv3_pmu.c: In function
> 'smmu_pmu_counter_get_value':
>    include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-
> count-overflow]
>     #define BIT(nr)   (1UL << (nr))
>                            ^
>    drivers//perf/arm_smmuv3_pmu.c:162:31: note: in expansion of macro 'BIT'
>      if (smmu_pmu->counter_mask & BIT(32))
>                                   ^~~
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_free_msis':
> >> drivers//perf/arm_smmuv3_pmu.c:601:2: error: implicit declaration of
> function 'platform_msi_domain_free_irqs'; did you mean
> 'platform_get_device_id'? [-Werror=implicit-function-declaration]
>      platform_msi_domain_free_irqs(dev);
>      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ok. This is probably because of the COMPILE_TEST added to patch #2 and
this one will have dependency on PCI/PCI_MSI. I will remove that in next
revision.

Thanks,
Shameer

>      platform_get_device_id
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_setup_msi':
> >> drivers//perf/arm_smmuv3_pmu.c:632:8: error: implicit declaration of
> function 'platform_msi_domain_alloc_irqs'; did you mean
> 'platform_device_alloc'? [-Werror=implicit-function-declaration]
>      ret = platform_msi_domain_alloc_irqs(dev, 1, smmu_pmu_write_msi_msg);
>            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>            platform_device_alloc
>    In file included from include/linux/list.h:9:0,
>                     from include/linux/resource_ext.h:17,
>                     from include/linux/acpi.h:26,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/kernel.h:961:26: note: in definition of macro 'container_of'
>      void *__mptr = (void *)(ptr);     \
>                              ^~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    In file included from include/linux/ioport.h:13:0,
>                     from include/linux/acpi.h:25,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/compiler.h:316:19: note: in definition of macro
> '__compiletime_assert'
>       bool __cond = !(condition);    \
>                       ^~~~~~~~~
>    include/linux/compiler.h:339:2: note: in expansion of macro
> '_compiletime_assert'
>      _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
>      ^~~~~~~~~~~~~~~~~~~
>    include/linux/build_bug.h:45:37: note: in expansion of macro
> 'compiletime_assert'
>     #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
>                                         ^~~~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:2: note: in expansion of macro
> 'BUILD_BUG_ON_MSG'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>      ^~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:20: note: in expansion of macro '__same_type'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>                        ^~~~~~~~~~~
>    include/linux/list.h:366:2: note: in expansion of macro 'container_of'
>      container_of(ptr, type, member)
>      ^~~~~~~~~~~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/compiler.h:316:19: note: in definition of macro
> '__compiletime_assert'
>       bool __cond = !(condition);    \
>                       ^~~~~~~~~
>    include/linux/compiler.h:339:2: note: in expansion of macro
> '_compiletime_assert'
>      _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
>      ^~~~~~~~~~~~~~~~~~~
>    include/linux/build_bug.h:45:37: note: in expansion of macro
> 'compiletime_assert'
>     #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
>                                         ^~~~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:2: note: in expansion of macro
> 'BUILD_BUG_ON_MSG'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>      ^~~~~~~~~~~~~~~~
>    include/linux/kernel.h:963:6: note: in expansion of macro '__same_type'
>         !__same_type(*(ptr), void),   \
>          ^~~~~~~~~~~
>    include/linux/list.h:366:2: note: in expansion of macro 'container_of'
>      container_of(ptr, type, member)
>      ^~~~~~~~~~~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_probe':
>    drivers//perf/arm_smmuv3_pmu.c:745:64: warning: format '%llx' expects
> argument of type 'long long unsigned int', but argument 4 has type
> 'resource_size_t {aka unsigned int}' [-Wformat=]
>      name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "smmuv3_pmcg_%llx",
>                                                                 ~~~^
>                                                                 %x
>    cc1: some warnings being treated as errors
> 
> vim +601 drivers//perf/arm_smmuv3_pmu.c
> 
>    596
>    597	static void smmu_pmu_free_msis(void *data)
>    598	{
>    599		struct device *dev = data;
>    600
>  > 601		platform_msi_domain_free_irqs(dev);
>    602	}
>    603
>    604	static void smmu_pmu_write_msi_msg(struct msi_desc *desc, struct
> msi_msg *msg)
>    605	{
>    606		phys_addr_t doorbell;
>    607		struct device *dev = msi_desc_to_dev(desc);
>    608		struct smmu_pmu *pmu = dev_get_drvdata(dev);
>    609
>    610		doorbell = (((u64)msg->address_hi) << 32) | msg->address_lo;
>    611		doorbell &= MSI_CFG0_ADDR_MASK;
>    612
>    613		writeq_relaxed(doorbell, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG0);
>    614		writel_relaxed(msg->data, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG1);
>    615		writel_relaxed(MSI_CFG2_MEMATTR_DEVICE_nGnRE,
>    616			       pmu->reg_base + SMMU_PMCG_IRQ_CFG2);
>    617	}
>    618
>    619	static void smmu_pmu_setup_msi(struct smmu_pmu *pmu)
>    620	{
>    621		struct msi_desc *desc;
>    622		struct device *dev = pmu->dev;
>    623		int ret;
>    624
>    625		/* Clear MSI address reg */
>    626		writeq_relaxed(0, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG0);
>    627
>    628		/* MSI supported or not */
>    629		if (!(readl(pmu->reg_base + SMMU_PMCG_CFGR) &
> SMMU_PMCG_CFGR_MSI))
>    630			return;
>    631
>  > 632		ret = platform_msi_domain_alloc_irqs(dev, 1,
> smmu_pmu_write_msi_msg);
>    633		if (ret) {
>    634			dev_warn(dev, "failed to allocate MSIs\n");
>    635			return;
>    636		}
>    637
>  > 638		desc = first_msi_entry(dev);
>    639		if (desc)
>    640			pmu->irq = desc->irq;
>    641
>    642		/* Add callback to free MSIs on teardown */
>    643		devm_add_action(dev, smmu_pmu_free_msis, dev);
>    644	}
>    645
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

WARNING: multiple messages have this Message-ID (diff)
From: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
To: kbuild test robot <lkp@intel.com>
Cc: "kbuild-all@01.org" <kbuild-all@01.org>,
	"lorenzo.pieralisi@arm.com" <lorenzo.pieralisi@arm.com>,
	"robin.murphy@arm.com" <robin.murphy@arm.com>,
	"jean-philippe.brucker@arm.com" <jean-philippe.brucker@arm.com>,
	"will.deacon@arm.com" <will.deacon@arm.com>,
	"mark.rutland@arm.com" <mark.rutland@arm.com>,
	"Guohanjun (Hanjun Guo)" <guohanjun@huawei.com>,
	John Garry <john.garry@huawei.com>,
	"pabba@codeaurora.org" <pabba@codeaurora.org>,
	"vkilari@codeaurora.org" <vkilari@codeaurora.org>,
	"rruigrok@codeaurora.org" <rruigrok@codeaurora.org>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	Linuxarm <linuxarm@huawei.com>,
	"neil.m.leeder@gmail.com" <neil.m.leeder@gmail.com>
Subject: RE: [PATCH v4 3/4] perf/smmuv3: Add MSI irq support
Date: Wed, 17 Oct 2018 09:48:53 +0000	[thread overview]
Message-ID: <5FC3163CFD30C246ABAA99954A238FA83879F3FB@FRAEML521-MBX.china.huawei.com> (raw)
In-Reply-To: <201810171145.mGVw4SgU%fengguang.wu@intel.com>



> -----Original Message-----
> From: kbuild test robot [mailto:lkp@intel.com]
> Sent: 17 October 2018 04:36
> To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
> Cc: kbuild-all@01.org; lorenzo.pieralisi@arm.com; robin.murphy@arm.com;
> jean-philippe.brucker@arm.com; will.deacon@arm.com;
> mark.rutland@arm.com; Guohanjun (Hanjun Guo) <guohanjun@huawei.com>;
> John Garry <john.garry@huawei.com>; pabba@codeaurora.org;
> vkilari@codeaurora.org; rruigrok@codeaurora.org; linux-
> acpi@vger.kernel.org; linux-kernel@vger.kernel.org; linux-arm-
> kernel@lists.infradead.org; Linuxarm <linuxarm@huawei.com>;
> neil.m.leeder@gmail.com
> Subject: Re: [PATCH v4 3/4] perf/smmuv3: Add MSI irq support
> 
> Hi Shameer,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on linux-sof-driver/master]
> [also build test ERROR on v4.19-rc8 next-20181016]
> [if your patch is applied to the wrong git tree, please drop us a note to help
> improve the system]
> 
> url:    https://github.com/0day-ci/linux/commits/Shameer-Kolothum/arm64-
> SMMUv3-PMU-driver-with-IORT-support/20181017-063949
> base:   https://github.com/thesofproject/linux master
> config: sh-allmodconfig (attached as .config)
> compiler: sh4-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
> reproduce:
>         wget https://raw.githubusercontent.com/intel/lkp-
> tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # save the attached .config to linux build tree
>         GCC_VERSION=7.2.0 make.cross ARCH=sh
> 
> All error/warnings (new ones prefixed by >>):
> 
>    In file included from include/linux/kernel.h:11:0,
>                     from include/linux/list.h:9,
>                     from include/linux/resource_ext.h:17,
>                     from include/linux/acpi.h:26,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    drivers//perf/arm_smmuv3_pmu.c: In function
> 'smmu_pmu_counter_set_value':
>    include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-
> count-overflow]
>     #define BIT(nr)   (1UL << (nr))
>                            ^
>    drivers//perf/arm_smmuv3_pmu.c:152:31: note: in expansion of macro 'BIT'
>      if (smmu_pmu->counter_mask & BIT(32))
>                                   ^~~
>    drivers//perf/arm_smmuv3_pmu.c: In function
> 'smmu_pmu_counter_get_value':
>    include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-
> count-overflow]
>     #define BIT(nr)   (1UL << (nr))
>                            ^
>    drivers//perf/arm_smmuv3_pmu.c:162:31: note: in expansion of macro 'BIT'
>      if (smmu_pmu->counter_mask & BIT(32))
>                                   ^~~
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_free_msis':
> >> drivers//perf/arm_smmuv3_pmu.c:601:2: error: implicit declaration of
> function 'platform_msi_domain_free_irqs'; did you mean
> 'platform_get_device_id'? [-Werror=implicit-function-declaration]
>      platform_msi_domain_free_irqs(dev);
>      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ok. This is probably because of the COMPILE_TEST added to patch #2 and
this one will have dependency on PCI/PCI_MSI. I will remove that in next
revision.

Thanks,
Shameer

>      platform_get_device_id
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_setup_msi':
> >> drivers//perf/arm_smmuv3_pmu.c:632:8: error: implicit declaration of
> function 'platform_msi_domain_alloc_irqs'; did you mean
> 'platform_device_alloc'? [-Werror=implicit-function-declaration]
>      ret = platform_msi_domain_alloc_irqs(dev, 1, smmu_pmu_write_msi_msg);
>            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>            platform_device_alloc
>    In file included from include/linux/list.h:9:0,
>                     from include/linux/resource_ext.h:17,
>                     from include/linux/acpi.h:26,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/kernel.h:961:26: note: in definition of macro 'container_of'
>      void *__mptr = (void *)(ptr);     \
>                              ^~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    In file included from include/linux/ioport.h:13:0,
>                     from include/linux/acpi.h:25,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/compiler.h:316:19: note: in definition of macro
> '__compiletime_assert'
>       bool __cond = !(condition);    \
>                       ^~~~~~~~~
>    include/linux/compiler.h:339:2: note: in expansion of macro
> '_compiletime_assert'
>      _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
>      ^~~~~~~~~~~~~~~~~~~
>    include/linux/build_bug.h:45:37: note: in expansion of macro
> 'compiletime_assert'
>     #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
>                                         ^~~~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:2: note: in expansion of macro
> 'BUILD_BUG_ON_MSG'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>      ^~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:20: note: in expansion of macro '__same_type'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>                        ^~~~~~~~~~~
>    include/linux/list.h:366:2: note: in expansion of macro 'container_of'
>      container_of(ptr, type, member)
>      ^~~~~~~~~~~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/compiler.h:316:19: note: in definition of macro
> '__compiletime_assert'
>       bool __cond = !(condition);    \
>                       ^~~~~~~~~
>    include/linux/compiler.h:339:2: note: in expansion of macro
> '_compiletime_assert'
>      _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
>      ^~~~~~~~~~~~~~~~~~~
>    include/linux/build_bug.h:45:37: note: in expansion of macro
> 'compiletime_assert'
>     #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
>                                         ^~~~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:2: note: in expansion of macro
> 'BUILD_BUG_ON_MSG'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>      ^~~~~~~~~~~~~~~~
>    include/linux/kernel.h:963:6: note: in expansion of macro '__same_type'
>         !__same_type(*(ptr), void),   \
>          ^~~~~~~~~~~
>    include/linux/list.h:366:2: note: in expansion of macro 'container_of'
>      container_of(ptr, type, member)
>      ^~~~~~~~~~~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_probe':
>    drivers//perf/arm_smmuv3_pmu.c:745:64: warning: format '%llx' expects
> argument of type 'long long unsigned int', but argument 4 has type
> 'resource_size_t {aka unsigned int}' [-Wformat=]
>      name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "smmuv3_pmcg_%llx",
>                                                                 ~~~^
>                                                                 %x
>    cc1: some warnings being treated as errors
> 
> vim +601 drivers//perf/arm_smmuv3_pmu.c
> 
>    596
>    597	static void smmu_pmu_free_msis(void *data)
>    598	{
>    599		struct device *dev = data;
>    600
>  > 601		platform_msi_domain_free_irqs(dev);
>    602	}
>    603
>    604	static void smmu_pmu_write_msi_msg(struct msi_desc *desc, struct
> msi_msg *msg)
>    605	{
>    606		phys_addr_t doorbell;
>    607		struct device *dev = msi_desc_to_dev(desc);
>    608		struct smmu_pmu *pmu = dev_get_drvdata(dev);
>    609
>    610		doorbell = (((u64)msg->address_hi) << 32) | msg->address_lo;
>    611		doorbell &= MSI_CFG0_ADDR_MASK;
>    612
>    613		writeq_relaxed(doorbell, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG0);
>    614		writel_relaxed(msg->data, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG1);
>    615		writel_relaxed(MSI_CFG2_MEMATTR_DEVICE_nGnRE,
>    616			       pmu->reg_base + SMMU_PMCG_IRQ_CFG2);
>    617	}
>    618
>    619	static void smmu_pmu_setup_msi(struct smmu_pmu *pmu)
>    620	{
>    621		struct msi_desc *desc;
>    622		struct device *dev = pmu->dev;
>    623		int ret;
>    624
>    625		/* Clear MSI address reg */
>    626		writeq_relaxed(0, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG0);
>    627
>    628		/* MSI supported or not */
>    629		if (!(readl(pmu->reg_base + SMMU_PMCG_CFGR) &
> SMMU_PMCG_CFGR_MSI))
>    630			return;
>    631
>  > 632		ret = platform_msi_domain_alloc_irqs(dev, 1,
> smmu_pmu_write_msi_msg);
>    633		if (ret) {
>    634			dev_warn(dev, "failed to allocate MSIs\n");
>    635			return;
>    636		}
>    637
>  > 638		desc = first_msi_entry(dev);
>    639		if (desc)
>    640			pmu->irq = desc->irq;
>    641
>    642		/* Add callback to free MSIs on teardown */
>    643		devm_add_action(dev, smmu_pmu_free_msis, dev);
>    644	}
>    645
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

WARNING: multiple messages have this Message-ID (diff)
From: shameerali.kolothum.thodi@huawei.com (Shameerali Kolothum Thodi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 3/4] perf/smmuv3: Add MSI irq support
Date: Wed, 17 Oct 2018 09:48:53 +0000	[thread overview]
Message-ID: <5FC3163CFD30C246ABAA99954A238FA83879F3FB@FRAEML521-MBX.china.huawei.com> (raw)
In-Reply-To: <201810171145.mGVw4SgU%fengguang.wu@intel.com>



> -----Original Message-----
> From: kbuild test robot [mailto:lkp at intel.com]
> Sent: 17 October 2018 04:36
> To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
> Cc: kbuild-all at 01.org; lorenzo.pieralisi at arm.com; robin.murphy at arm.com;
> jean-philippe.brucker at arm.com; will.deacon at arm.com;
> mark.rutland at arm.com; Guohanjun (Hanjun Guo) <guohanjun@huawei.com>;
> John Garry <john.garry@huawei.com>; pabba at codeaurora.org;
> vkilari at codeaurora.org; rruigrok at codeaurora.org; linux-
> acpi at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-
> kernel at lists.infradead.org; Linuxarm <linuxarm@huawei.com>;
> neil.m.leeder at gmail.com
> Subject: Re: [PATCH v4 3/4] perf/smmuv3: Add MSI irq support
> 
> Hi Shameer,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on linux-sof-driver/master]
> [also build test ERROR on v4.19-rc8 next-20181016]
> [if your patch is applied to the wrong git tree, please drop us a note to help
> improve the system]
> 
> url:    https://github.com/0day-ci/linux/commits/Shameer-Kolothum/arm64-
> SMMUv3-PMU-driver-with-IORT-support/20181017-063949
> base:   https://github.com/thesofproject/linux master
> config: sh-allmodconfig (attached as .config)
> compiler: sh4-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
> reproduce:
>         wget https://raw.githubusercontent.com/intel/lkp-
> tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # save the attached .config to linux build tree
>         GCC_VERSION=7.2.0 make.cross ARCH=sh
> 
> All error/warnings (new ones prefixed by >>):
> 
>    In file included from include/linux/kernel.h:11:0,
>                     from include/linux/list.h:9,
>                     from include/linux/resource_ext.h:17,
>                     from include/linux/acpi.h:26,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    drivers//perf/arm_smmuv3_pmu.c: In function
> 'smmu_pmu_counter_set_value':
>    include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-
> count-overflow]
>     #define BIT(nr)   (1UL << (nr))
>                            ^
>    drivers//perf/arm_smmuv3_pmu.c:152:31: note: in expansion of macro 'BIT'
>      if (smmu_pmu->counter_mask & BIT(32))
>                                   ^~~
>    drivers//perf/arm_smmuv3_pmu.c: In function
> 'smmu_pmu_counter_get_value':
>    include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-
> count-overflow]
>     #define BIT(nr)   (1UL << (nr))
>                            ^
>    drivers//perf/arm_smmuv3_pmu.c:162:31: note: in expansion of macro 'BIT'
>      if (smmu_pmu->counter_mask & BIT(32))
>                                   ^~~
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_free_msis':
> >> drivers//perf/arm_smmuv3_pmu.c:601:2: error: implicit declaration of
> function 'platform_msi_domain_free_irqs'; did you mean
> 'platform_get_device_id'? [-Werror=implicit-function-declaration]
>      platform_msi_domain_free_irqs(dev);
>      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ok. This is probably because of the COMPILE_TEST added to patch #2 and
this one will have dependency on PCI/PCI_MSI. I will remove that in next
revision.

Thanks,
Shameer

>      platform_get_device_id
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_setup_msi':
> >> drivers//perf/arm_smmuv3_pmu.c:632:8: error: implicit declaration of
> function 'platform_msi_domain_alloc_irqs'; did you mean
> 'platform_device_alloc'? [-Werror=implicit-function-declaration]
>      ret = platform_msi_domain_alloc_irqs(dev, 1, smmu_pmu_write_msi_msg);
>            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>            platform_device_alloc
>    In file included from include/linux/list.h:9:0,
>                     from include/linux/resource_ext.h:17,
>                     from include/linux/acpi.h:26,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/kernel.h:961:26: note: in definition of macro 'container_of'
>      void *__mptr = (void *)(ptr);     \
>                              ^~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    In file included from include/linux/ioport.h:13:0,
>                     from include/linux/acpi.h:25,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/compiler.h:316:19: note: in definition of macro
> '__compiletime_assert'
>       bool __cond = !(condition);    \
>                       ^~~~~~~~~
>    include/linux/compiler.h:339:2: note: in expansion of macro
> '_compiletime_assert'
>      _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
>      ^~~~~~~~~~~~~~~~~~~
>    include/linux/build_bug.h:45:37: note: in expansion of macro
> 'compiletime_assert'
>     #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
>                                         ^~~~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:2: note: in expansion of macro
> 'BUILD_BUG_ON_MSG'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>      ^~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:20: note: in expansion of macro '__same_type'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>                        ^~~~~~~~~~~
>    include/linux/list.h:366:2: note: in expansion of macro 'container_of'
>      container_of(ptr, type, member)
>      ^~~~~~~~~~~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    include/linux/msi.h:114:38: error: 'struct device' has no member named
> 'msi_list'
>     #define dev_to_msi_list(dev)  (&(dev)->msi_list)
>                                          ^
>    include/linux/compiler.h:316:19: note: in definition of macro
> '__compiletime_assert'
>       bool __cond = !(condition);    \
>                       ^~~~~~~~~
>    include/linux/compiler.h:339:2: note: in expansion of macro
> '_compiletime_assert'
>      _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
>      ^~~~~~~~~~~~~~~~~~~
>    include/linux/build_bug.h:45:37: note: in expansion of macro
> 'compiletime_assert'
>     #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
>                                         ^~~~~~~~~~~~~~~~~~
>    include/linux/kernel.h:962:2: note: in expansion of macro
> 'BUILD_BUG_ON_MSG'
>      BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>      ^~~~~~~~~~~~~~~~
>    include/linux/kernel.h:963:6: note: in expansion of macro '__same_type'
>         !__same_type(*(ptr), void),   \
>          ^~~~~~~~~~~
>    include/linux/list.h:366:2: note: in expansion of macro 'container_of'
>      container_of(ptr, type, member)
>      ^~~~~~~~~~~~
>    include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
>      list_entry((ptr)->next, type, member)
>      ^~~~~~~~~~
>    include/linux/msi.h:116:2: note: in expansion of macro 'list_first_entry'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>      ^~~~~~~~~~~~~~~~
>    include/linux/msi.h:116:19: note: in expansion of macro 'dev_to_msi_list'
>      list_first_entry(dev_to_msi_list((dev)), struct msi_desc, list)
>                       ^~~~~~~~~~~~~~~
> >> drivers//perf/arm_smmuv3_pmu.c:638:9: note: in expansion of macro
> 'first_msi_entry'
>      desc = first_msi_entry(dev);
>             ^~~~~~~~~~~~~~~
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_probe':
>    drivers//perf/arm_smmuv3_pmu.c:745:64: warning: format '%llx' expects
> argument of type 'long long unsigned int', but argument 4 has type
> 'resource_size_t {aka unsigned int}' [-Wformat=]
>      name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "smmuv3_pmcg_%llx",
>                                                                 ~~~^
>                                                                 %x
>    cc1: some warnings being treated as errors
> 
> vim +601 drivers//perf/arm_smmuv3_pmu.c
> 
>    596
>    597	static void smmu_pmu_free_msis(void *data)
>    598	{
>    599		struct device *dev = data;
>    600
>  > 601		platform_msi_domain_free_irqs(dev);
>    602	}
>    603
>    604	static void smmu_pmu_write_msi_msg(struct msi_desc *desc, struct
> msi_msg *msg)
>    605	{
>    606		phys_addr_t doorbell;
>    607		struct device *dev = msi_desc_to_dev(desc);
>    608		struct smmu_pmu *pmu = dev_get_drvdata(dev);
>    609
>    610		doorbell = (((u64)msg->address_hi) << 32) | msg->address_lo;
>    611		doorbell &= MSI_CFG0_ADDR_MASK;
>    612
>    613		writeq_relaxed(doorbell, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG0);
>    614		writel_relaxed(msg->data, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG1);
>    615		writel_relaxed(MSI_CFG2_MEMATTR_DEVICE_nGnRE,
>    616			       pmu->reg_base + SMMU_PMCG_IRQ_CFG2);
>    617	}
>    618
>    619	static void smmu_pmu_setup_msi(struct smmu_pmu *pmu)
>    620	{
>    621		struct msi_desc *desc;
>    622		struct device *dev = pmu->dev;
>    623		int ret;
>    624
>    625		/* Clear MSI address reg */
>    626		writeq_relaxed(0, pmu->reg_base +
> SMMU_PMCG_IRQ_CFG0);
>    627
>    628		/* MSI supported or not */
>    629		if (!(readl(pmu->reg_base + SMMU_PMCG_CFGR) &
> SMMU_PMCG_CFGR_MSI))
>    630			return;
>    631
>  > 632		ret = platform_msi_domain_alloc_irqs(dev, 1,
> smmu_pmu_write_msi_msg);
>    633		if (ret) {
>    634			dev_warn(dev, "failed to allocate MSIs\n");
>    635			return;
>    636		}
>    637
>  > 638		desc = first_msi_entry(dev);
>    639		if (desc)
>    640			pmu->irq = desc->irq;
>    641
>    642		/* Add callback to free MSIs on teardown */
>    643		devm_add_action(dev, smmu_pmu_free_msis, dev);
>    644	}
>    645
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

  reply	other threads:[~2018-10-17  9:48 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-16 12:49 [PATCH v4 0/4] arm64 SMMUv3 PMU driver with IORT support Shameer Kolothum
2018-10-16 12:49 ` Shameer Kolothum
2018-10-16 12:49 ` Shameer Kolothum
2018-10-16 12:49 ` [PATCH v4 1/4] acpi: arm64: add iort support for PMCG Shameer Kolothum
2018-10-16 12:49   ` Shameer Kolothum
2018-10-16 12:49   ` Shameer Kolothum
2018-10-16 12:49 ` [PATCH v4 2/4] perf: add arm64 smmuv3 pmu driver Shameer Kolothum
2018-10-16 12:49   ` Shameer Kolothum
2018-10-16 12:49   ` Shameer Kolothum
2018-10-17 21:53   ` kbuild test robot
2018-10-17 21:53     ` kbuild test robot
2018-10-18  9:26     ` Shameerali Kolothum Thodi
2018-10-18  9:26       ` Shameerali Kolothum Thodi
2018-10-18  9:26       ` Shameerali Kolothum Thodi
2018-10-20  4:50   ` kbuild test robot
2018-10-20  4:50     ` kbuild test robot
2018-10-16 12:49 ` [PATCH v4 3/4] perf/smmuv3: Add MSI irq support Shameer Kolothum
2018-10-16 12:49   ` Shameer Kolothum
2018-10-16 12:49   ` Shameer Kolothum
2018-10-17  3:35   ` kbuild test robot
2018-10-17  3:35     ` kbuild test robot
2018-10-17  9:48     ` Shameerali Kolothum Thodi [this message]
2018-10-17  9:48       ` Shameerali Kolothum Thodi
2018-10-17  9:48       ` Shameerali Kolothum Thodi
2018-10-17 15:42   ` kbuild test robot
2018-10-17 15:42     ` kbuild test robot
2018-10-17 15:42     ` kbuild test robot
2018-10-16 12:49 ` [PATCH v4 4/4] perf/smmuv3_pmu: Enable HiSilicon Erratum 162001800 quirk Shameer Kolothum
2018-10-16 12:49   ` Shameer Kolothum
2018-10-16 12:49   ` Shameer Kolothum
2018-10-18 11:43   ` Robin Murphy
2018-10-18 11:43     ` Robin Murphy
2018-10-18 13:34     ` Shameerali Kolothum Thodi
2018-10-18 13:34       ` Shameerali Kolothum Thodi
2018-10-18 13:34       ` Shameerali Kolothum Thodi
2018-10-18 15:27       ` Shameerali Kolothum Thodi
2018-10-18 15:27         ` Shameerali Kolothum Thodi
2018-10-18 15:27         ` Shameerali Kolothum Thodi
2018-11-09 16:50         ` Shameerali Kolothum Thodi
2018-11-09 16:50           ` Shameerali Kolothum Thodi
2018-11-09 16:50           ` Shameerali Kolothum Thodi
2018-11-26 18:45         ` Robin Murphy
2018-11-26 18:45           ` Robin Murphy
2018-11-26 18:45           ` Robin Murphy
2018-11-27 13:23           ` Shameerali Kolothum Thodi
2018-11-27 13:23             ` Shameerali Kolothum Thodi
2018-11-27 13:23             ` Shameerali Kolothum Thodi

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=5FC3163CFD30C246ABAA99954A238FA83879F3FB@FRAEML521-MBX.china.huawei.com \
    --to=shameerali.kolothum.thodi@huawei.com \
    --cc=guohanjun@huawei.com \
    --cc=jean-philippe.brucker@arm.com \
    --cc=john.garry@huawei.com \
    --cc=kbuild-all@01.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=lkp@intel.com \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=pabba@codeaurora.org \
    --cc=robin.murphy@arm.com \
    --cc=rruigrok@codeaurora.org \
    --cc=vkilari@codeaurora.org \
    --cc=will.deacon@arm.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.