* drivers/gpu/drm/i915/display/intel_ddi.c:1746:2: warning: Value stored to 'port_mask' is never read [clang-analyzer-deadcode.DeadStores]
@ 2022-02-10 19:25 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-02-10 19:25 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 21135 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
CC: Lucas De Marchi <lucas.demarchi@intel.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: e3c85076d7a6f986445b9008be7e7f83d1b0780a
commit: 87bd8498690b4adc916ef35dd3b4d72ec83e5fa6 drm/i915: Use .disable_clock() for pll sanitation
date: 12 months ago
:::::: branch date: 6 hours ago
:::::: commit date: 12 months ago
config: i386-randconfig-c001-20220207 (https://download.01.org/0day-ci/archive/20220211/202202110347.CLYseEuf-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 0d8850ae2cae85d49bea6ae0799fa41c7202c05c)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=87bd8498690b4adc916ef35dd3b4d72ec83e5fa6
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 87bd8498690b4adc916ef35dd3b4d72ec83e5fa6
# save the config file to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=i386 clang-analyzer
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
drivers/hwmon/f71882fg.c:1792:16: note: Taking false branch
int val, nr = to_sensor_dev_attr_2(devattr)->index;
^
include/linux/hwmon-sysfs.h:51:2: note: expanded from macro 'to_sensor_dev_attr_2'
container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr)
^
include/linux/kernel.h:694:2: note: expanded from macro 'container_of'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^
include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^
include/linux/compiler_types.h:326:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:314:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:306:3: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^
drivers/hwmon/f71882fg.c:1792:16: note: Loop condition is false. Exiting loop
int val, nr = to_sensor_dev_attr_2(devattr)->index;
^
include/linux/hwmon-sysfs.h:51:2: note: expanded from macro 'to_sensor_dev_attr_2'
container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr)
^
include/linux/kernel.h:694:2: note: expanded from macro 'container_of'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^
include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^
include/linux/compiler_types.h:326:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:314:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:304:2: note: expanded from macro '__compiletime_assert'
do { \
^
drivers/hwmon/f71882fg.c:1794:6: note: Assuming the condition is false
if (data->pwm_enable & (1 << (2 * nr)))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/hwmon/f71882fg.c:1794:2: note: Taking false branch
if (data->pwm_enable & (1 << (2 * nr)))
^
drivers/hwmon/f71882fg.c:1800:6: note: Calling 'fan_from_reg'
/ fan_from_reg(data->fan_full_speed[nr]);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/hwmon/f71882fg.c:1147:9: note: Assuming 'reg' is 0
return reg ? (1500000 / reg) : 0;
^~~
drivers/hwmon/f71882fg.c:1147:9: note: '?' condition is false
drivers/hwmon/f71882fg.c:1147:2: note: Returning zero
return reg ? (1500000 / reg) : 0;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/hwmon/f71882fg.c:1800:6: note: Returning from 'fan_from_reg'
/ fan_from_reg(data->fan_full_speed[nr]);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/hwmon/f71882fg.c:1800:4: note: Division by zero
/ fan_from_reg(data->fan_full_speed[nr]);
~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
22 warnings generated.
Suppressed 22 warnings (22 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
>> drivers/gpu/drm/i915/display/intel_ddi.c:1746:2: warning: Value stored to 'port_mask' is never read [clang-analyzer-deadcode.DeadStores]
port_mask = BIT(encoder->port);
^
drivers/gpu/drm/i915/display/intel_ddi.c:1746:2: note: Value stored to 'port_mask' is never read
drivers/gpu/drm/i915/display/intel_ddi.c:2099:2: warning: Value stored to 'intel_dp' is never read [clang-analyzer-deadcode.DeadStores]
intel_dp = enc_to_intel_dp(encoder);
^ ~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/i915/display/intel_ddi.c:2099:2: note: Value stored to 'intel_dp' is never read
intel_dp = enc_to_intel_dp(encoder);
^ ~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/i915/display/intel_ddi.c:2115:2: warning: Value stored to 'intel_dp' is never read [clang-analyzer-deadcode.DeadStores]
intel_dp = enc_to_intel_dp(encoder);
^ ~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/i915/display/intel_ddi.c:2115:2: note: Value stored to 'intel_dp' is never read
intel_dp = enc_to_intel_dp(encoder);
^ ~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
fs/xfs/xfs_fsmap.c:352:26: warning: Access to field 'bc_mp' results in a dereference of a null pointer (loaded from variable 'cur') [clang-analyzer-core.NullDereference]
struct xfs_mount *mp = cur->bc_mp;
^
fs/xfs/xfs_fsmap.c:707:9: note: Calling '__xfs_getfsmap_datadev'
return __xfs_getfsmap_datadev(tp, keys, info,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:584:6: note: Assuming 'eofs' is > field 'fmr_physical'
if (keys[0].fmr_physical >= eofs)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:584:2: note: Taking false branch
if (keys[0].fmr_physical >= eofs)
^
fs/xfs/xfs_fsmap.c:586:6: note: Assuming 'eofs' is > field 'fmr_physical'
if (keys[1].fmr_physical >= eofs)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:586:2: note: Taking false branch
if (keys[1].fmr_physical >= eofs)
^
fs/xfs/xfs_fsmap.c:599:6: note: Assuming 'error' is 0
if (error)
^~~~~
fs/xfs/xfs_fsmap.c:599:2: note: Taking false branch
if (error)
^
fs/xfs/xfs_fsmap.c:614:30: note: Assuming 'end_ag' is < field 'agno'
for (info->agno = start_ag; info->agno <= end_ag; info->agno++) {
^~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:614:2: note: Loop condition is false. Execution continues on line 663
for (info->agno = start_ag; info->agno <= end_ag; info->agno++) {
^
fs/xfs/xfs_fsmap.c:664:10: note: Calling 'xfs_getfsmap_datadev_rmapbt_query'
error = query_fn(tp, info, &bt_cur, priv);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:689:12: note: Field 'last' is true
if (info->last)
^
fs/xfs/xfs_fsmap.c:689:2: note: Taking true branch
if (info->last)
^
fs/xfs/xfs_fsmap.c:690:38: note: Passing null pointer value via 1st parameter 'cur'
return xfs_getfsmap_datadev_helper(*curpp, &info->high, info);
^~~~~~
fs/xfs/xfs_fsmap.c:690:10: note: Calling 'xfs_getfsmap_datadev_helper'
return xfs_getfsmap_datadev_helper(*curpp, &info->high, info);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:352:26: note: Access to field 'bc_mp' results in a dereference of a null pointer (loaded from variable 'cur')
struct xfs_mount *mp = cur->bc_mp;
^~~
fs/xfs/xfs_fsmap.c:370:26: warning: Access to field 'bc_mp' results in a dereference of a null pointer (loaded from variable 'cur') [clang-analyzer-core.NullDereference]
struct xfs_mount *mp = cur->bc_mp;
^
fs/xfs/xfs_fsmap.c:744:9: note: Calling '__xfs_getfsmap_datadev'
return __xfs_getfsmap_datadev(tp, keys, info,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:584:6: note: Assuming 'eofs' is > field 'fmr_physical'
if (keys[0].fmr_physical >= eofs)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:584:2: note: Taking false branch
if (keys[0].fmr_physical >= eofs)
^
fs/xfs/xfs_fsmap.c:586:6: note: Assuming 'eofs' is > field 'fmr_physical'
if (keys[1].fmr_physical >= eofs)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/xfs/xfs_fsmap.c:586:2: note: Taking false branch
if (keys[1].fmr_physical >= eofs)
^
fs/xfs/xfs_fsmap.c:599:6: note: 'error' is 0
if (error)
^~~~~
fs/xfs/xfs_fsmap.c:599:2: note: Taking false branch
if (error)
^
fs/xfs/xfs_fsmap.c:614:30: note: Assuming 'end_ag' is < field 'agno'
vim +/port_mask +1746 drivers/gpu/drm/i915/display/intel_ddi.c
c27e917e2bda74 drivers/gpu/drm/i915/intel_ddi.c Paulo Zanoni 2018-04-27 1719
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1720 void icl_sanitize_encoder_pll_mapping(struct intel_encoder *encoder)
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1721 {
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1722 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1723 u32 port_mask;
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1724 bool ddi_clk_needed;
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1725
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1726 /*
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1727 * In case of DP MST, we sanitize the primary encoder only, not the
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1728 * virtual ones.
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1729 */
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1730 if (encoder->type == INTEL_OUTPUT_DP_MST)
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1731 return;
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1732
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1733 if (!encoder->base.crtc && intel_encoder_is_dp(encoder)) {
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1734 u8 pipe_mask;
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1735 bool is_mst;
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1736
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1737 intel_ddi_get_encoder_pipes(encoder, &pipe_mask, &is_mst);
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1738 /*
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1739 * In the unlikely case that BIOS enables DP in MST mode, just
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1740 * warn since our MST HW readout is incomplete.
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1741 */
1de143cc5b6021 drivers/gpu/drm/i915/display/intel_ddi.c Pankaj Bharadiya 2020-02-20 1742 if (drm_WARN_ON(&dev_priv->drm, is_mst))
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1743 return;
30f5ccfa8c8a0f drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-07 1744 }
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1745
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 @1746 port_mask = BIT(encoder->port);
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1747 ddi_clk_needed = encoder->base.crtc;
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1748
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1749 if (encoder->type == INTEL_OUTPUT_DSI) {
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1750 struct intel_encoder *other_encoder;
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1751
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1752 port_mask = intel_dsi_encoder_ports(encoder);
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1753 /*
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1754 * Sanity check that we haven't incorrectly registered another
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1755 * encoder using any of the ports of this DSI encoder.
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1756 */
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1757 for_each_intel_encoder(&dev_priv->drm, other_encoder) {
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1758 if (other_encoder == encoder)
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1759 continue;
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1760
1de143cc5b6021 drivers/gpu/drm/i915/display/intel_ddi.c Pankaj Bharadiya 2020-02-20 1761 if (drm_WARN_ON(&dev_priv->drm,
1de143cc5b6021 drivers/gpu/drm/i915/display/intel_ddi.c Pankaj Bharadiya 2020-02-20 1762 port_mask & BIT(other_encoder->port)))
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1763 return;
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1764 }
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1765 /*
942d1cf48eae3f drivers/gpu/drm/i915/intel_ddi.c Vandita Kulkarni 2019-03-25 1766 * For DSI we keep the ddi clocks gated
942d1cf48eae3f drivers/gpu/drm/i915/intel_ddi.c Vandita Kulkarni 2019-03-25 1767 * except during enable/disable sequence.
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1768 */
942d1cf48eae3f drivers/gpu/drm/i915/intel_ddi.c Vandita Kulkarni 2019-03-25 1769 ddi_clk_needed = false;
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1770 }
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1771
87bd8498690b4a drivers/gpu/drm/i915/display/intel_ddi.c Ville Syrjälä 2021-02-05 1772 if (!ddi_clk_needed && encoder->disable_clock)
87bd8498690b4a drivers/gpu/drm/i915/display/intel_ddi.c Ville Syrjälä 2021-02-05 1773 encoder->disable_clock(encoder);
1dd07e56a3f1b3 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-29 1774 }
70332ac539c5c5 drivers/gpu/drm/i915/intel_ddi.c Imre Deak 2018-11-01 1775
:::::: The code at line 1746 was first introduced by commit
:::::: 1dd07e56a3f1b38a68f3dbd263a4badc53ae274a drm/i915/icl: Sanitize DDI port clock gating for DSI ports
:::::: TO: Imre Deak <imre.deak@intel.com>
:::::: CC: Jani Nikula <jani.nikula@intel.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-02-10 19:25 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-10 19:25 drivers/gpu/drm/i915/display/intel_ddi.c:1746:2: warning: Value stored to 'port_mask' is never read [clang-analyzer-deadcode.DeadStores] kernel test robot
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.