From: kernel test robot <lkp@intel.com>
To: Leo Yan <leo.yan@linaro.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Mike Leach <mike.leach@linaro.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
Leo Yan <leo.yan@linaro.org>
Subject: Re: [PATCH v2 3/4] coresight: etm4x: Don't trace PID for non-root PID namespace
Date: Tue, 14 Dec 2021 05:45:08 +0800 [thread overview]
Message-ID: <202112140527.RSkgSFCc-lkp@intel.com> (raw)
In-Reply-To: <20211213121323.1887180-4-leo.yan@linaro.org>
Hi Leo,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v5.16-rc5]
[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/0day-ci/linux/commits/Leo-Yan/coresight-etm-Correct-PID-tracing-for-non-root-namespace/20211213-201632
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 2585cf9dfaaddf00b069673f27bb3f8530e2039c
config: arm64-randconfig-r034-20211213 (https://download.01.org/0day-ci/archive/20211214/202112140527.RSkgSFCc-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project b6a2ddb6c8ac29412b1361810972e15221fa021c)
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 arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/0day-ci/linux/commit/dd716cd12b2f0e47fcc2b0e3e9172e4e70ad4877
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Leo-Yan/coresight-etm-Correct-PID-tracing-for-non-root-namespace/20211213-201632
git checkout dd716cd12b2f0e47fcc2b0e3e9172e4e70ad4877
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/hwtracing/coresight/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> drivers/hwtracing/coresight/coresight-etm4x-core.c:661:6: error: implicit declaration of function 'task_is_in_init_pid_ns' [-Werror,-Wimplicit-function-declaration]
task_is_in_init_pid_ns(current))
^
1 error generated.
vim +/task_is_in_init_pid_ns +661 drivers/hwtracing/coresight/coresight-etm4x-core.c
606
607 static int etm4_parse_event_config(struct coresight_device *csdev,
608 struct perf_event *event)
609 {
610 int ret = 0;
611 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
612 struct etmv4_config *config = &drvdata->config;
613 struct perf_event_attr *attr = &event->attr;
614 unsigned long cfg_hash;
615 int preset;
616
617 /* Clear configuration from previous run */
618 memset(config, 0, sizeof(struct etmv4_config));
619
620 if (attr->exclude_kernel)
621 config->mode = ETM_MODE_EXCL_KERN;
622
623 if (attr->exclude_user)
624 config->mode = ETM_MODE_EXCL_USER;
625
626 /* Always start from the default config */
627 etm4_set_default_config(config);
628
629 /* Configure filters specified on the perf cmd line, if any. */
630 ret = etm4_set_event_filters(drvdata, event);
631 if (ret)
632 goto out;
633
634 /* Go from generic option to ETMv4 specifics */
635 if (attr->config & BIT(ETM_OPT_CYCACC)) {
636 config->cfg |= BIT(4);
637 /* TRM: Must program this for cycacc to work */
638 config->ccctlr = ETM_CYC_THRESHOLD_DEFAULT;
639 }
640 if (attr->config & BIT(ETM_OPT_TS)) {
641 /*
642 * Configure timestamps to be emitted at regular intervals in
643 * order to correlate instructions executed on different CPUs
644 * (CPU-wide trace scenarios).
645 */
646 ret = etm4_config_timestamp_event(drvdata);
647
648 /*
649 * No need to go further if timestamp intervals can't
650 * be configured.
651 */
652 if (ret)
653 goto out;
654
655 /* bit[11], Global timestamp tracing bit */
656 config->cfg |= BIT(11);
657 }
658
659 /* Only trace contextID when runs in root PID namespace */
660 if ((attr->config & BIT(ETM_OPT_CTXTID)) &&
> 661 task_is_in_init_pid_ns(current))
662 /* bit[6], Context ID tracing bit */
663 config->cfg |= BIT(ETM4_CFG_BIT_CTXTID);
664
665 /*
666 * If set bit ETM_OPT_CTXTID2 in perf config, this asks to trace VMID
667 * for recording CONTEXTIDR_EL2. Do not enable VMID tracing if the
668 * kernel is not running in EL2.
669 */
670 if (attr->config & BIT(ETM_OPT_CTXTID2)) {
671 if (!is_kernel_in_hyp_mode()) {
672 ret = -EINVAL;
673 goto out;
674 }
675
676 /* Only trace virtual contextID when runs in root PID namespace */
677 if (task_is_in_init_pid_ns(current))
678 config->cfg |= BIT(ETM4_CFG_BIT_VMID) |
679 BIT(ETM4_CFG_BIT_VMID_OPT);
680 }
681
682 /* return stack - enable if selected and supported */
683 if ((attr->config & BIT(ETM_OPT_RETSTK)) && drvdata->retstack)
684 /* bit[12], Return stack enable bit */
685 config->cfg |= BIT(12);
686
687 /*
688 * Set any selected configuration and preset.
689 *
690 * This extracts the values of PMU_FORMAT_ATTR(configid) and PMU_FORMAT_ATTR(preset)
691 * in the perf attributes defined in coresight-etm-perf.c.
692 * configid uses bits 63:32 of attr->config2, preset uses bits 3:0 of attr->config.
693 * A zero configid means no configuration active, preset = 0 means no preset selected.
694 */
695 if (attr->config2 & GENMASK_ULL(63, 32)) {
696 cfg_hash = (u32)(attr->config2 >> 32);
697 preset = attr->config & 0xF;
698 ret = cscfg_csdev_enable_active_config(csdev, cfg_hash, preset);
699 }
700
701 out:
702 return ret;
703 }
704
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Leo Yan <leo.yan@linaro.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Mike Leach <mike.leach@linaro.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
Leo Yan <leo.yan@linaro.org>
Subject: Re: [PATCH v2 3/4] coresight: etm4x: Don't trace PID for non-root PID namespace
Date: Tue, 14 Dec 2021 05:45:08 +0800 [thread overview]
Message-ID: <202112140527.RSkgSFCc-lkp@intel.com> (raw)
In-Reply-To: <20211213121323.1887180-4-leo.yan@linaro.org>
Hi Leo,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v5.16-rc5]
[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/0day-ci/linux/commits/Leo-Yan/coresight-etm-Correct-PID-tracing-for-non-root-namespace/20211213-201632
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 2585cf9dfaaddf00b069673f27bb3f8530e2039c
config: arm64-randconfig-r034-20211213 (https://download.01.org/0day-ci/archive/20211214/202112140527.RSkgSFCc-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project b6a2ddb6c8ac29412b1361810972e15221fa021c)
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 arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/0day-ci/linux/commit/dd716cd12b2f0e47fcc2b0e3e9172e4e70ad4877
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Leo-Yan/coresight-etm-Correct-PID-tracing-for-non-root-namespace/20211213-201632
git checkout dd716cd12b2f0e47fcc2b0e3e9172e4e70ad4877
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/hwtracing/coresight/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> drivers/hwtracing/coresight/coresight-etm4x-core.c:661:6: error: implicit declaration of function 'task_is_in_init_pid_ns' [-Werror,-Wimplicit-function-declaration]
task_is_in_init_pid_ns(current))
^
1 error generated.
vim +/task_is_in_init_pid_ns +661 drivers/hwtracing/coresight/coresight-etm4x-core.c
606
607 static int etm4_parse_event_config(struct coresight_device *csdev,
608 struct perf_event *event)
609 {
610 int ret = 0;
611 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
612 struct etmv4_config *config = &drvdata->config;
613 struct perf_event_attr *attr = &event->attr;
614 unsigned long cfg_hash;
615 int preset;
616
617 /* Clear configuration from previous run */
618 memset(config, 0, sizeof(struct etmv4_config));
619
620 if (attr->exclude_kernel)
621 config->mode = ETM_MODE_EXCL_KERN;
622
623 if (attr->exclude_user)
624 config->mode = ETM_MODE_EXCL_USER;
625
626 /* Always start from the default config */
627 etm4_set_default_config(config);
628
629 /* Configure filters specified on the perf cmd line, if any. */
630 ret = etm4_set_event_filters(drvdata, event);
631 if (ret)
632 goto out;
633
634 /* Go from generic option to ETMv4 specifics */
635 if (attr->config & BIT(ETM_OPT_CYCACC)) {
636 config->cfg |= BIT(4);
637 /* TRM: Must program this for cycacc to work */
638 config->ccctlr = ETM_CYC_THRESHOLD_DEFAULT;
639 }
640 if (attr->config & BIT(ETM_OPT_TS)) {
641 /*
642 * Configure timestamps to be emitted at regular intervals in
643 * order to correlate instructions executed on different CPUs
644 * (CPU-wide trace scenarios).
645 */
646 ret = etm4_config_timestamp_event(drvdata);
647
648 /*
649 * No need to go further if timestamp intervals can't
650 * be configured.
651 */
652 if (ret)
653 goto out;
654
655 /* bit[11], Global timestamp tracing bit */
656 config->cfg |= BIT(11);
657 }
658
659 /* Only trace contextID when runs in root PID namespace */
660 if ((attr->config & BIT(ETM_OPT_CTXTID)) &&
> 661 task_is_in_init_pid_ns(current))
662 /* bit[6], Context ID tracing bit */
663 config->cfg |= BIT(ETM4_CFG_BIT_CTXTID);
664
665 /*
666 * If set bit ETM_OPT_CTXTID2 in perf config, this asks to trace VMID
667 * for recording CONTEXTIDR_EL2. Do not enable VMID tracing if the
668 * kernel is not running in EL2.
669 */
670 if (attr->config & BIT(ETM_OPT_CTXTID2)) {
671 if (!is_kernel_in_hyp_mode()) {
672 ret = -EINVAL;
673 goto out;
674 }
675
676 /* Only trace virtual contextID when runs in root PID namespace */
677 if (task_is_in_init_pid_ns(current))
678 config->cfg |= BIT(ETM4_CFG_BIT_VMID) |
679 BIT(ETM4_CFG_BIT_VMID_OPT);
680 }
681
682 /* return stack - enable if selected and supported */
683 if ((attr->config & BIT(ETM_OPT_RETSTK)) && drvdata->retstack)
684 /* bit[12], Return stack enable bit */
685 config->cfg |= BIT(12);
686
687 /*
688 * Set any selected configuration and preset.
689 *
690 * This extracts the values of PMU_FORMAT_ATTR(configid) and PMU_FORMAT_ATTR(preset)
691 * in the perf attributes defined in coresight-etm-perf.c.
692 * configid uses bits 63:32 of attr->config2, preset uses bits 3:0 of attr->config.
693 * A zero configid means no configuration active, preset = 0 means no preset selected.
694 */
695 if (attr->config2 & GENMASK_ULL(63, 32)) {
696 cfg_hash = (u32)(attr->config2 >> 32);
697 preset = attr->config & 0xF;
698 ret = cscfg_csdev_enable_active_config(csdev, cfg_hash, preset);
699 }
700
701 out:
702 return ret;
703 }
704
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH v2 3/4] coresight: etm4x: Don't trace PID for non-root PID namespace
Date: Tue, 14 Dec 2021 05:45:08 +0800 [thread overview]
Message-ID: <202112140527.RSkgSFCc-lkp@intel.com> (raw)
In-Reply-To: <20211213121323.1887180-4-leo.yan@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 6009 bytes --]
Hi Leo,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v5.16-rc5]
[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/0day-ci/linux/commits/Leo-Yan/coresight-etm-Correct-PID-tracing-for-non-root-namespace/20211213-201632
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 2585cf9dfaaddf00b069673f27bb3f8530e2039c
config: arm64-randconfig-r034-20211213 (https://download.01.org/0day-ci/archive/20211214/202112140527.RSkgSFCc-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project b6a2ddb6c8ac29412b1361810972e15221fa021c)
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 arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/0day-ci/linux/commit/dd716cd12b2f0e47fcc2b0e3e9172e4e70ad4877
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Leo-Yan/coresight-etm-Correct-PID-tracing-for-non-root-namespace/20211213-201632
git checkout dd716cd12b2f0e47fcc2b0e3e9172e4e70ad4877
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/hwtracing/coresight/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> drivers/hwtracing/coresight/coresight-etm4x-core.c:661:6: error: implicit declaration of function 'task_is_in_init_pid_ns' [-Werror,-Wimplicit-function-declaration]
task_is_in_init_pid_ns(current))
^
1 error generated.
vim +/task_is_in_init_pid_ns +661 drivers/hwtracing/coresight/coresight-etm4x-core.c
606
607 static int etm4_parse_event_config(struct coresight_device *csdev,
608 struct perf_event *event)
609 {
610 int ret = 0;
611 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
612 struct etmv4_config *config = &drvdata->config;
613 struct perf_event_attr *attr = &event->attr;
614 unsigned long cfg_hash;
615 int preset;
616
617 /* Clear configuration from previous run */
618 memset(config, 0, sizeof(struct etmv4_config));
619
620 if (attr->exclude_kernel)
621 config->mode = ETM_MODE_EXCL_KERN;
622
623 if (attr->exclude_user)
624 config->mode = ETM_MODE_EXCL_USER;
625
626 /* Always start from the default config */
627 etm4_set_default_config(config);
628
629 /* Configure filters specified on the perf cmd line, if any. */
630 ret = etm4_set_event_filters(drvdata, event);
631 if (ret)
632 goto out;
633
634 /* Go from generic option to ETMv4 specifics */
635 if (attr->config & BIT(ETM_OPT_CYCACC)) {
636 config->cfg |= BIT(4);
637 /* TRM: Must program this for cycacc to work */
638 config->ccctlr = ETM_CYC_THRESHOLD_DEFAULT;
639 }
640 if (attr->config & BIT(ETM_OPT_TS)) {
641 /*
642 * Configure timestamps to be emitted at regular intervals in
643 * order to correlate instructions executed on different CPUs
644 * (CPU-wide trace scenarios).
645 */
646 ret = etm4_config_timestamp_event(drvdata);
647
648 /*
649 * No need to go further if timestamp intervals can't
650 * be configured.
651 */
652 if (ret)
653 goto out;
654
655 /* bit[11], Global timestamp tracing bit */
656 config->cfg |= BIT(11);
657 }
658
659 /* Only trace contextID when runs in root PID namespace */
660 if ((attr->config & BIT(ETM_OPT_CTXTID)) &&
> 661 task_is_in_init_pid_ns(current))
662 /* bit[6], Context ID tracing bit */
663 config->cfg |= BIT(ETM4_CFG_BIT_CTXTID);
664
665 /*
666 * If set bit ETM_OPT_CTXTID2 in perf config, this asks to trace VMID
667 * for recording CONTEXTIDR_EL2. Do not enable VMID tracing if the
668 * kernel is not running in EL2.
669 */
670 if (attr->config & BIT(ETM_OPT_CTXTID2)) {
671 if (!is_kernel_in_hyp_mode()) {
672 ret = -EINVAL;
673 goto out;
674 }
675
676 /* Only trace virtual contextID when runs in root PID namespace */
677 if (task_is_in_init_pid_ns(current))
678 config->cfg |= BIT(ETM4_CFG_BIT_VMID) |
679 BIT(ETM4_CFG_BIT_VMID_OPT);
680 }
681
682 /* return stack - enable if selected and supported */
683 if ((attr->config & BIT(ETM_OPT_RETSTK)) && drvdata->retstack)
684 /* bit[12], Return stack enable bit */
685 config->cfg |= BIT(12);
686
687 /*
688 * Set any selected configuration and preset.
689 *
690 * This extracts the values of PMU_FORMAT_ATTR(configid) and PMU_FORMAT_ATTR(preset)
691 * in the perf attributes defined in coresight-etm-perf.c.
692 * configid uses bits 63:32 of attr->config2, preset uses bits 3:0 of attr->config.
693 * A zero configid means no configuration active, preset = 0 means no preset selected.
694 */
695 if (attr->config2 & GENMASK_ULL(63, 32)) {
696 cfg_hash = (u32)(attr->config2 >> 32);
697 preset = attr->config & 0xF;
698 ret = cscfg_csdev_enable_active_config(csdev, cfg_hash, preset);
699 }
700
701 out:
702 return ret;
703 }
704
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next prev parent reply other threads:[~2021-12-13 21:46 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-13 12:13 [PATCH v2 0/4] coresight: etm: Correct PID tracing for non-root namespace Leo Yan
2021-12-13 12:13 ` Leo Yan
2021-12-13 12:13 ` [PATCH v2 1/4] coresight: etm4x: Add lock for reading virtual context ID comparator Leo Yan
2021-12-13 12:13 ` Leo Yan
2021-12-13 12:13 ` [PATCH v2 2/4] coresight: etm4x: Don't use virtual contextID for non-root PID namespace Leo Yan
2021-12-13 12:13 ` Leo Yan
2021-12-13 19:47 ` kernel test robot
2021-12-13 19:47 ` kernel test robot
2021-12-13 19:47 ` kernel test robot
2021-12-13 12:13 ` [PATCH v2 3/4] coresight: etm4x: Don't trace PID " Leo Yan
2021-12-13 12:13 ` Leo Yan
2021-12-13 21:45 ` kernel test robot [this message]
2021-12-13 21:45 ` kernel test robot
2021-12-13 21:45 ` kernel test robot
2021-12-13 12:13 ` [PATCH v2 4/4] coresight: etm3x: " Leo Yan
2021-12-13 12:13 ` Leo Yan
2021-12-13 19:16 ` kernel test robot
2021-12-13 19:16 ` kernel test robot
2021-12-13 19:16 ` kernel test robot
2021-12-14 4:46 ` Leo Yan
2021-12-14 4:46 ` Leo Yan
2021-12-14 4:46 ` Leo Yan
2021-12-16 8:54 ` Rong Chen
2021-12-16 8:54 ` Rong Chen
2021-12-16 8:54 ` Rong Chen
2021-12-14 10:59 ` [PATCH v2 0/4] coresight: etm: Correct PID tracing for non-root namespace Suzuki K Poulose
2021-12-14 10:59 ` Suzuki K Poulose
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=202112140527.RSkgSFCc-lkp@intel.com \
--to=lkp@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=coresight@lists.linaro.org \
--cc=kbuild-all@lists.01.org \
--cc=leo.yan@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=mathieu.poirier@linaro.org \
--cc=mike.leach@linaro.org \
--cc=suzuki.poulose@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.