All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/gpu/drm/rcar-du/rcar_du_crtc.c:737: undefined reference to `rcar_lvds_clk_enable'
@ 2020-05-09 12:55 ` kbuild test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kbuild test robot @ 2020-05-09 12:55 UTC (permalink / raw)
  To: Masahiro Yamada; +Cc: kbuild-all, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 8295 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   d5eeab8d7e269e8cfc53b915bccd7bd30485bcbf
commit: def2fbffe62c00c330c7f41584a356001179c59c kconfig: allow symbols implied by y to become m
date:   8 weeks ago
config: arm64-randconfig-r024-20200509 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout def2fbffe62c00c330c7f41584a356001179c59c
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=arm64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   aarch64-linux-ld: drivers/gpu/drm/rcar-du/rcar_du_crtc.o: in function `rcar_du_crtc_atomic_enable':
>> drivers/gpu/drm/rcar-du/rcar_du_crtc.c:737: undefined reference to `rcar_lvds_clk_enable'
   drivers/gpu/drm/rcar-du/rcar_du_crtc.c:737:(.text+0x1408): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `rcar_lvds_clk_enable'
   aarch64-linux-ld: drivers/gpu/drm/rcar-du/rcar_du_crtc.o: in function `rcar_du_crtc_atomic_disable':
>> drivers/gpu/drm/rcar-du/rcar_du_crtc.c:771: undefined reference to `rcar_lvds_clk_disable'
   drivers/gpu/drm/rcar-du/rcar_du_crtc.c:771:(.text+0x19bc): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `rcar_lvds_clk_disable'
   aarch64-linux-ld: drivers/gpu/drm/rcar-du/rcar_du_drv.o: in function `rcar_du_init':
>> drivers/gpu/drm/rcar-du/rcar_du_drv.c:613: undefined reference to `rcar_du_of_init'
   drivers/gpu/drm/rcar-du/rcar_du_drv.c:613:(.init.text+0x18): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `rcar_du_of_init'
   aarch64-linux-ld: drivers/gpu/drm/rcar-du/rcar_du_encoder.o: in function `rcar_du_encoder_init':
>> drivers/gpu/drm/rcar-du/rcar_du_encoder.c:107: undefined reference to `rcar_lvds_dual_link'
   drivers/gpu/drm/rcar-du/rcar_du_encoder.c:107:(.text+0x1e8): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `rcar_lvds_dual_link'

vim +737 drivers/gpu/drm/rcar-du/rcar_du_crtc.c

b8a43032a7b8d7 Laurent Pinchart 2018-11-24  711  
0b20a0f8c3cb6f Laurent Pinchart 2017-06-30  712  static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc,
0b20a0f8c3cb6f Laurent Pinchart 2017-06-30  713  				       struct drm_crtc_state *old_state)
4bf8e1962f91ee Laurent Pinchart 2013-06-19  714  {
4bf8e1962f91ee Laurent Pinchart 2013-06-19  715  	struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  716  	struct rcar_du_crtc_state *rstate = to_rcar_crtc_state(crtc->state);
b764f2f66ed48c Kieran Bingham   2019-03-15  717  	struct rcar_du_device *rcdu = rcrtc->dev;
4bf8e1962f91ee Laurent Pinchart 2013-06-19  718  
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  719  	if (rcrtc->cmm)
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  720  		rcar_cmm_enable(rcrtc->cmm);
f66ee304ae8990 Laurent Pinchart 2013-06-14  721  	rcar_du_crtc_get(rcrtc);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  722  
a6cc417d3eee4a Laurent Pinchart 2019-01-17  723  	/*
a6cc417d3eee4a Laurent Pinchart 2019-01-17  724  	 * On D3/E3 the dot clock is provided by the LVDS encoder attached to
a6cc417d3eee4a Laurent Pinchart 2019-01-17  725  	 * the DU channel. We need to enable its clock output explicitly if
a6cc417d3eee4a Laurent Pinchart 2019-01-17  726  	 * the LVDS output is disabled.
a6cc417d3eee4a Laurent Pinchart 2019-01-17  727  	 */
a6cc417d3eee4a Laurent Pinchart 2019-01-17  728  	if (rcdu->info->lvds_clk_mask & BIT(rcrtc->index) &&
a6cc417d3eee4a Laurent Pinchart 2019-01-17  729  	    rstate->outputs == BIT(RCAR_DU_OUTPUT_DPAD0)) {
a6cc417d3eee4a Laurent Pinchart 2019-01-17  730  		struct rcar_du_encoder *encoder =
a6cc417d3eee4a Laurent Pinchart 2019-01-17  731  			rcdu->encoders[RCAR_DU_OUTPUT_LVDS0 + rcrtc->index];
a6cc417d3eee4a Laurent Pinchart 2019-01-17  732  		const struct drm_display_mode *mode =
a6cc417d3eee4a Laurent Pinchart 2019-01-17  733  			&crtc->state->adjusted_mode;
35a61fe9218a9d Boris Brezillon  2019-12-03  734  		struct drm_bridge *bridge;
a6cc417d3eee4a Laurent Pinchart 2019-01-17  735  
35a61fe9218a9d Boris Brezillon  2019-12-03  736  		bridge = drm_bridge_chain_get_first_bridge(&encoder->base);
35a61fe9218a9d Boris Brezillon  2019-12-03 @737  		rcar_lvds_clk_enable(bridge, mode->clock * 1000);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  738  	}
a6cc417d3eee4a Laurent Pinchart 2019-01-17  739  
4bf8e1962f91ee Laurent Pinchart 2013-06-19  740  	rcar_du_crtc_start(rcrtc);
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  741  
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  742  	/*
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  743  	 * TODO: The chip manual indicates that CMM tables should be written
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  744  	 * after the DU channel has been activated. Investigate the impact
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  745  	 * of this restriction on the first displayed frame.
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  746  	 */
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  747  	rcar_du_cmm_setup(crtc);
beff155a7eae6d Laurent Pinchart 2015-02-20  748  }
beff155a7eae6d Laurent Pinchart 2015-02-20  749  
64581714b58bc3 Laurent Pinchart 2017-06-30  750  static void rcar_du_crtc_atomic_disable(struct drm_crtc *crtc,
64581714b58bc3 Laurent Pinchart 2017-06-30  751  					struct drm_crtc_state *old_state)
beff155a7eae6d Laurent Pinchart 2015-02-20  752  {
beff155a7eae6d Laurent Pinchart 2015-02-20  753  	struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  754  	struct rcar_du_crtc_state *rstate = to_rcar_crtc_state(old_state);
b764f2f66ed48c Kieran Bingham   2019-03-15  755  	struct rcar_du_device *rcdu = rcrtc->dev;
beff155a7eae6d Laurent Pinchart 2015-02-20  756  
4bf8e1962f91ee Laurent Pinchart 2013-06-19  757  	rcar_du_crtc_stop(rcrtc);
f66ee304ae8990 Laurent Pinchart 2013-06-14  758  	rcar_du_crtc_put(rcrtc);
beff155a7eae6d Laurent Pinchart 2015-02-20  759  
a6cc417d3eee4a Laurent Pinchart 2019-01-17  760  	if (rcdu->info->lvds_clk_mask & BIT(rcrtc->index) &&
a6cc417d3eee4a Laurent Pinchart 2019-01-17  761  	    rstate->outputs == BIT(RCAR_DU_OUTPUT_DPAD0)) {
a6cc417d3eee4a Laurent Pinchart 2019-01-17  762  		struct rcar_du_encoder *encoder =
a6cc417d3eee4a Laurent Pinchart 2019-01-17  763  			rcdu->encoders[RCAR_DU_OUTPUT_LVDS0 + rcrtc->index];
35a61fe9218a9d Boris Brezillon  2019-12-03  764  		struct drm_bridge *bridge;
a6cc417d3eee4a Laurent Pinchart 2019-01-17  765  
a6cc417d3eee4a Laurent Pinchart 2019-01-17  766  		/*
a6cc417d3eee4a Laurent Pinchart 2019-01-17  767  		 * Disable the LVDS clock output, see
a6cc417d3eee4a Laurent Pinchart 2019-01-17  768  		 * rcar_du_crtc_atomic_enable().
a6cc417d3eee4a Laurent Pinchart 2019-01-17  769  		 */
35a61fe9218a9d Boris Brezillon  2019-12-03  770  		bridge = drm_bridge_chain_get_first_bridge(&encoder->base);
35a61fe9218a9d Boris Brezillon  2019-12-03 @771  		rcar_lvds_clk_disable(bridge);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  772  	}
a6cc417d3eee4a Laurent Pinchart 2019-01-17  773  
6dd47cfd03a058 Laurent Pinchart 2017-02-10  774  	spin_lock_irq(&crtc->dev->event_lock);
6dd47cfd03a058 Laurent Pinchart 2017-02-10  775  	if (crtc->state->event) {
6dd47cfd03a058 Laurent Pinchart 2017-02-10  776  		drm_crtc_send_vblank_event(crtc, crtc->state->event);
6dd47cfd03a058 Laurent Pinchart 2017-02-10  777  		crtc->state->event = NULL;
6dd47cfd03a058 Laurent Pinchart 2017-02-10  778  	}
6dd47cfd03a058 Laurent Pinchart 2017-02-10  779  	spin_unlock_irq(&crtc->dev->event_lock);
4bf8e1962f91ee Laurent Pinchart 2013-06-19  780  }
4bf8e1962f91ee Laurent Pinchart 2013-06-19  781  

:::::: The code at line 737 was first introduced by commit
:::::: 35a61fe9218a9d32a93447bdcca1d0f167cd0433 drm: Stop accessing encoder->bridge directly

:::::: TO: Boris Brezillon <boris.brezillon@collabora.com>
:::::: CC: Boris Brezillon <boris.brezillon@collabora.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37598 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* drivers/gpu/drm/rcar-du/rcar_du_crtc.c:737: undefined reference to `rcar_lvds_clk_enable'
@ 2020-05-09 12:55 ` kbuild test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kbuild test robot @ 2020-05-09 12:55 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 8411 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   d5eeab8d7e269e8cfc53b915bccd7bd30485bcbf
commit: def2fbffe62c00c330c7f41584a356001179c59c kconfig: allow symbols implied by y to become m
date:   8 weeks ago
config: arm64-randconfig-r024-20200509 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout def2fbffe62c00c330c7f41584a356001179c59c
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=arm64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   aarch64-linux-ld: drivers/gpu/drm/rcar-du/rcar_du_crtc.o: in function `rcar_du_crtc_atomic_enable':
>> drivers/gpu/drm/rcar-du/rcar_du_crtc.c:737: undefined reference to `rcar_lvds_clk_enable'
   drivers/gpu/drm/rcar-du/rcar_du_crtc.c:737:(.text+0x1408): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `rcar_lvds_clk_enable'
   aarch64-linux-ld: drivers/gpu/drm/rcar-du/rcar_du_crtc.o: in function `rcar_du_crtc_atomic_disable':
>> drivers/gpu/drm/rcar-du/rcar_du_crtc.c:771: undefined reference to `rcar_lvds_clk_disable'
   drivers/gpu/drm/rcar-du/rcar_du_crtc.c:771:(.text+0x19bc): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `rcar_lvds_clk_disable'
   aarch64-linux-ld: drivers/gpu/drm/rcar-du/rcar_du_drv.o: in function `rcar_du_init':
>> drivers/gpu/drm/rcar-du/rcar_du_drv.c:613: undefined reference to `rcar_du_of_init'
   drivers/gpu/drm/rcar-du/rcar_du_drv.c:613:(.init.text+0x18): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `rcar_du_of_init'
   aarch64-linux-ld: drivers/gpu/drm/rcar-du/rcar_du_encoder.o: in function `rcar_du_encoder_init':
>> drivers/gpu/drm/rcar-du/rcar_du_encoder.c:107: undefined reference to `rcar_lvds_dual_link'
   drivers/gpu/drm/rcar-du/rcar_du_encoder.c:107:(.text+0x1e8): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `rcar_lvds_dual_link'

vim +737 drivers/gpu/drm/rcar-du/rcar_du_crtc.c

b8a43032a7b8d7 Laurent Pinchart 2018-11-24  711  
0b20a0f8c3cb6f Laurent Pinchart 2017-06-30  712  static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc,
0b20a0f8c3cb6f Laurent Pinchart 2017-06-30  713  				       struct drm_crtc_state *old_state)
4bf8e1962f91ee Laurent Pinchart 2013-06-19  714  {
4bf8e1962f91ee Laurent Pinchart 2013-06-19  715  	struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  716  	struct rcar_du_crtc_state *rstate = to_rcar_crtc_state(crtc->state);
b764f2f66ed48c Kieran Bingham   2019-03-15  717  	struct rcar_du_device *rcdu = rcrtc->dev;
4bf8e1962f91ee Laurent Pinchart 2013-06-19  718  
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  719  	if (rcrtc->cmm)
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  720  		rcar_cmm_enable(rcrtc->cmm);
f66ee304ae8990 Laurent Pinchart 2013-06-14  721  	rcar_du_crtc_get(rcrtc);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  722  
a6cc417d3eee4a Laurent Pinchart 2019-01-17  723  	/*
a6cc417d3eee4a Laurent Pinchart 2019-01-17  724  	 * On D3/E3 the dot clock is provided by the LVDS encoder attached to
a6cc417d3eee4a Laurent Pinchart 2019-01-17  725  	 * the DU channel. We need to enable its clock output explicitly if
a6cc417d3eee4a Laurent Pinchart 2019-01-17  726  	 * the LVDS output is disabled.
a6cc417d3eee4a Laurent Pinchart 2019-01-17  727  	 */
a6cc417d3eee4a Laurent Pinchart 2019-01-17  728  	if (rcdu->info->lvds_clk_mask & BIT(rcrtc->index) &&
a6cc417d3eee4a Laurent Pinchart 2019-01-17  729  	    rstate->outputs == BIT(RCAR_DU_OUTPUT_DPAD0)) {
a6cc417d3eee4a Laurent Pinchart 2019-01-17  730  		struct rcar_du_encoder *encoder =
a6cc417d3eee4a Laurent Pinchart 2019-01-17  731  			rcdu->encoders[RCAR_DU_OUTPUT_LVDS0 + rcrtc->index];
a6cc417d3eee4a Laurent Pinchart 2019-01-17  732  		const struct drm_display_mode *mode =
a6cc417d3eee4a Laurent Pinchart 2019-01-17  733  			&crtc->state->adjusted_mode;
35a61fe9218a9d Boris Brezillon  2019-12-03  734  		struct drm_bridge *bridge;
a6cc417d3eee4a Laurent Pinchart 2019-01-17  735  
35a61fe9218a9d Boris Brezillon  2019-12-03  736  		bridge = drm_bridge_chain_get_first_bridge(&encoder->base);
35a61fe9218a9d Boris Brezillon  2019-12-03 @737  		rcar_lvds_clk_enable(bridge, mode->clock * 1000);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  738  	}
a6cc417d3eee4a Laurent Pinchart 2019-01-17  739  
4bf8e1962f91ee Laurent Pinchart 2013-06-19  740  	rcar_du_crtc_start(rcrtc);
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  741  
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  742  	/*
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  743  	 * TODO: The chip manual indicates that CMM tables should be written
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  744  	 * after the DU channel has been activated. Investigate the impact
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  745  	 * of this restriction on the first displayed frame.
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  746  	 */
78b6bb1d24dbf0 Jacopo Mondi     2019-10-17  747  	rcar_du_cmm_setup(crtc);
beff155a7eae6d Laurent Pinchart 2015-02-20  748  }
beff155a7eae6d Laurent Pinchart 2015-02-20  749  
64581714b58bc3 Laurent Pinchart 2017-06-30  750  static void rcar_du_crtc_atomic_disable(struct drm_crtc *crtc,
64581714b58bc3 Laurent Pinchart 2017-06-30  751  					struct drm_crtc_state *old_state)
beff155a7eae6d Laurent Pinchart 2015-02-20  752  {
beff155a7eae6d Laurent Pinchart 2015-02-20  753  	struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  754  	struct rcar_du_crtc_state *rstate = to_rcar_crtc_state(old_state);
b764f2f66ed48c Kieran Bingham   2019-03-15  755  	struct rcar_du_device *rcdu = rcrtc->dev;
beff155a7eae6d Laurent Pinchart 2015-02-20  756  
4bf8e1962f91ee Laurent Pinchart 2013-06-19  757  	rcar_du_crtc_stop(rcrtc);
f66ee304ae8990 Laurent Pinchart 2013-06-14  758  	rcar_du_crtc_put(rcrtc);
beff155a7eae6d Laurent Pinchart 2015-02-20  759  
a6cc417d3eee4a Laurent Pinchart 2019-01-17  760  	if (rcdu->info->lvds_clk_mask & BIT(rcrtc->index) &&
a6cc417d3eee4a Laurent Pinchart 2019-01-17  761  	    rstate->outputs == BIT(RCAR_DU_OUTPUT_DPAD0)) {
a6cc417d3eee4a Laurent Pinchart 2019-01-17  762  		struct rcar_du_encoder *encoder =
a6cc417d3eee4a Laurent Pinchart 2019-01-17  763  			rcdu->encoders[RCAR_DU_OUTPUT_LVDS0 + rcrtc->index];
35a61fe9218a9d Boris Brezillon  2019-12-03  764  		struct drm_bridge *bridge;
a6cc417d3eee4a Laurent Pinchart 2019-01-17  765  
a6cc417d3eee4a Laurent Pinchart 2019-01-17  766  		/*
a6cc417d3eee4a Laurent Pinchart 2019-01-17  767  		 * Disable the LVDS clock output, see
a6cc417d3eee4a Laurent Pinchart 2019-01-17  768  		 * rcar_du_crtc_atomic_enable().
a6cc417d3eee4a Laurent Pinchart 2019-01-17  769  		 */
35a61fe9218a9d Boris Brezillon  2019-12-03  770  		bridge = drm_bridge_chain_get_first_bridge(&encoder->base);
35a61fe9218a9d Boris Brezillon  2019-12-03 @771  		rcar_lvds_clk_disable(bridge);
a6cc417d3eee4a Laurent Pinchart 2019-01-17  772  	}
a6cc417d3eee4a Laurent Pinchart 2019-01-17  773  
6dd47cfd03a058 Laurent Pinchart 2017-02-10  774  	spin_lock_irq(&crtc->dev->event_lock);
6dd47cfd03a058 Laurent Pinchart 2017-02-10  775  	if (crtc->state->event) {
6dd47cfd03a058 Laurent Pinchart 2017-02-10  776  		drm_crtc_send_vblank_event(crtc, crtc->state->event);
6dd47cfd03a058 Laurent Pinchart 2017-02-10  777  		crtc->state->event = NULL;
6dd47cfd03a058 Laurent Pinchart 2017-02-10  778  	}
6dd47cfd03a058 Laurent Pinchart 2017-02-10  779  	spin_unlock_irq(&crtc->dev->event_lock);
4bf8e1962f91ee Laurent Pinchart 2013-06-19  780  }
4bf8e1962f91ee Laurent Pinchart 2013-06-19  781  

:::::: The code at line 737 was first introduced by commit
:::::: 35a61fe9218a9d32a93447bdcca1d0f167cd0433 drm: Stop accessing encoder->bridge directly

:::::: TO: Boris Brezillon <boris.brezillon@collabora.com>
:::::: CC: Boris Brezillon <boris.brezillon@collabora.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37598 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-05-09 13:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-09 12:55 drivers/gpu/drm/rcar-du/rcar_du_crtc.c:737: undefined reference to `rcar_lvds_clk_enable' kbuild test robot
2020-05-09 12:55 ` kbuild 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.