All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-next:master 2102/2463] drivers/ptp/ptp_ocp.c:2000:16: warning: operator '?:' has lower precedence than '&'; '&' will be evaluated first
@ 2021-09-16 12:26 ` kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-09-16 12:26 UTC (permalink / raw)
  To: Jonathan Lemon; +Cc: llvm, kbuild-all, Linux Memory Management List

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   368847b165bbfbdcf0bd4c96b167893dcdb13aba
commit: a62a56d04e63cf0ececb5dd339811f0a14b7e77c [2102/2463] ptp: ocp: Enable 4th timestamper / PPS generator
config: x86_64-randconfig-a005-20210916 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 8cbbd7e0b2aa21ce7e416cfb63d9965518948c35)
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/next/linux-next.git/commit/?id=a62a56d04e63cf0ececb5dd339811f0a14b7e77c
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout a62a56d04e63cf0ececb5dd339811f0a14b7e77c
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64 

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

All warnings (new ones prefixed by >>):

>> drivers/ptp/ptp_ocp.c:2000:16: warning: operator '?:' has lower precedence than '&'; '&' will be evaluated first [-Wbitwise-conditional-parentheses]
                              on & map ? " ON" : "OFF", src);
                              ~~~~~~~~ ^
   drivers/ptp/ptp_ocp.c:2000:16: note: place parentheses around the '&' expression to silence this warning
                              on & map ? " ON" : "OFF", src);
                                       ^
                              (       )
   drivers/ptp/ptp_ocp.c:2000:16: note: place parentheses around the '?:' expression to evaluate it first
                              on & map ? " ON" : "OFF", src);
                                       ^
                                   (                  )
   drivers/ptp/ptp_ocp.c:2004:16: warning: operator '?:' has lower precedence than '&'; '&' will be evaluated first [-Wbitwise-conditional-parentheses]
                              on & map ? " ON" : "OFF", src);
                              ~~~~~~~~ ^
   drivers/ptp/ptp_ocp.c:2004:16: note: place parentheses around the '&' expression to silence this warning
                              on & map ? " ON" : "OFF", src);
                                       ^
                              (       )
   drivers/ptp/ptp_ocp.c:2004:16: note: place parentheses around the '?:' expression to evaluate it first
                              on & map ? " ON" : "OFF", src);
                                       ^
                                   (                  )
   2 warnings generated.


vim +2000 drivers/ptp/ptp_ocp.c

  1934	
  1935	static int
  1936	ptp_ocp_summary_show(struct seq_file *s, void *data)
  1937	{
  1938		struct device *dev = s->private;
  1939		struct ptp_system_timestamp sts;
  1940		u32 sma_in, sma_out, ctrl, val;
  1941		struct ts_reg __iomem *ts_reg;
  1942		struct timespec64 ts;
  1943		struct ptp_ocp *bp;
  1944		const char *src;
  1945		bool on, map;
  1946		char *buf;
  1947	
  1948		buf = (char *)__get_free_page(GFP_KERNEL);
  1949		if (!buf)
  1950			return -ENOMEM;
  1951	
  1952		bp = dev_get_drvdata(dev);
  1953		sma_in = ioread32(&bp->sma->gpio1);
  1954		sma_out = ioread32(&bp->sma->gpio2);
  1955	
  1956		seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp));
  1957	
  1958		sma1_show(dev, NULL, buf);
  1959		seq_printf(s, "   sma1: %s", buf);
  1960	
  1961		sma2_show(dev, NULL, buf);
  1962		seq_printf(s, "   sma2: %s", buf);
  1963	
  1964		sma3_show(dev, NULL, buf);
  1965		seq_printf(s, "   sma3: %s", buf);
  1966	
  1967		sma4_show(dev, NULL, buf);
  1968		seq_printf(s, "   sma4: %s", buf);
  1969	
  1970		if (bp->ts0) {
  1971			ts_reg = bp->ts0->mem;
  1972			on = ioread32(&ts_reg->enable);
  1973			src = "GNSS";
  1974			seq_printf(s, "%7s: %s, src: %s\n", "TS0",
  1975				   on ? " ON" : "OFF", src);
  1976		}
  1977	
  1978		if (bp->ts1) {
  1979			ts_reg = bp->ts1->mem;
  1980			on = ioread32(&ts_reg->enable);
  1981			src = gpio_map(sma_in, 2, "sma1", "sma2", "----");
  1982			seq_printf(s, "%7s: %s, src: %s\n", "TS1",
  1983				   on ? " ON" : "OFF", src);
  1984		}
  1985	
  1986		if (bp->ts2) {
  1987			ts_reg = bp->ts2->mem;
  1988			on = ioread32(&ts_reg->enable);
  1989			src = gpio_map(sma_in, 3, "sma1", "sma2", "----");
  1990			seq_printf(s, "%7s: %s, src: %s\n", "TS2",
  1991				   on ? " ON" : "OFF", src);
  1992		}
  1993	
  1994		if (bp->pps) {
  1995			ts_reg = bp->pps->mem;
  1996			src = "PHC";
  1997			on = ioread32(&ts_reg->enable);
  1998			map = !!(bp->pps_req_map & OCP_REQ_TIMESTAMP);
  1999			seq_printf(s, "%7s: %s, src: %s\n", "TS3",
> 2000				   on & map ? " ON" : "OFF", src);
  2001	
  2002			map = !!(bp->pps_req_map & OCP_REQ_PPS);
  2003			seq_printf(s, "%7s: %s, src: %s\n", "PPS",
  2004				   on & map ? " ON" : "OFF", src);
  2005		}
  2006	
  2007		if (bp->irig_out) {
  2008			ctrl = ioread32(&bp->irig_out->ctrl);
  2009			on = ctrl & IRIG_M_CTRL_ENABLE;
  2010			val = ioread32(&bp->irig_out->status);
  2011			gpio_multi_map(buf, sma_out, 4, "sma3", "sma4", "----");
  2012			seq_printf(s, "%7s: %s, error: %d, mode %d, out: %s\n", "IRIG",
  2013				   on ? " ON" : "OFF", val, (ctrl >> 16), buf);
  2014		}
  2015	
  2016		if (bp->irig_in) {
  2017			on = ioread32(&bp->irig_in->ctrl) & IRIG_S_CTRL_ENABLE;
  2018			val = ioread32(&bp->irig_in->status);
  2019			src = gpio_map(sma_in, 4, "sma1", "sma2", "----");
  2020			seq_printf(s, "%7s: %s, error: %d, src: %s\n", "IRIG in",
  2021				   on ? " ON" : "OFF", val, src);
  2022		}
  2023	
  2024		if (bp->dcf_out) {
  2025			on = ioread32(&bp->dcf_out->ctrl) & DCF_M_CTRL_ENABLE;
  2026			val = ioread32(&bp->dcf_out->status);
  2027			gpio_multi_map(buf, sma_out, 5, "sma3", "sma4", "----");
  2028			seq_printf(s, "%7s: %s, error: %d, out: %s\n", "DCF",
  2029				   on ? " ON" : "OFF", val, buf);
  2030		}
  2031	
  2032		if (bp->dcf_in) {
  2033			on = ioread32(&bp->dcf_in->ctrl) & DCF_S_CTRL_ENABLE;
  2034			val = ioread32(&bp->dcf_in->status);
  2035			src = gpio_map(sma_in, 5, "sma1", "sma2", "----");
  2036			seq_printf(s, "%7s: %s, error: %d, src: %s\n", "DCF in",
  2037				   on ? " ON" : "OFF", val, src);
  2038		}
  2039	
  2040		if (bp->nmea_out) {
  2041			on = ioread32(&bp->nmea_out->ctrl) & 1;
  2042			val = ioread32(&bp->nmea_out->status);
  2043			seq_printf(s, "%7s: %s, error: %d\n", "NMEA",
  2044				   on ? " ON" : "OFF", val);
  2045		}
  2046	
  2047		/* compute src for PPS1, used below. */
  2048		if (bp->pps_select) {
  2049			val = ioread32(&bp->pps_select->gpio1);
  2050			if (val & 0x01)
  2051				src = gpio_map(sma_in, 0, "sma1", "sma2", "----");
  2052			else if (val & 0x02)
  2053				src = "MAC";
  2054			else if (val & 0x04)
  2055				src = "GNSS";
  2056			else
  2057				src = "----";
  2058		} else {
  2059			src = "?";
  2060		}
  2061	
  2062		/* assumes automatic switchover/selection */
  2063		val = ioread32(&bp->reg->select);
  2064		switch (val >> 16) {
  2065		case 0:
  2066			sprintf(buf, "----");
  2067			break;
  2068		case 2:
  2069			sprintf(buf, "IRIG");
  2070			break;
  2071		case 3:
  2072			sprintf(buf, "%s via PPS1", src);
  2073			break;
  2074		case 6:
  2075			sprintf(buf, "DCF");
  2076			break;
  2077		default:
  2078			strcpy(buf, "unknown");
  2079			break;
  2080		}
  2081		val = ioread32(&bp->reg->status);
  2082		seq_printf(s, "%7s: %s, state: %s\n", "PHC src", buf,
  2083			   val & OCP_STATUS_IN_SYNC ? "sync" : "unsynced");
  2084	
  2085		/* reuses PPS1 src from earlier */
  2086		seq_printf(s, "MAC PPS1 src: %s\n", src);
  2087	
  2088		src = gpio_map(sma_in, 1, "sma1", "sma2", "GNSS2");
  2089		seq_printf(s, "MAC PPS2 src: %s\n", src);
  2090	
  2091		if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts)) {
  2092			struct timespec64 sys_ts;
  2093			s64 pre_ns, post_ns, ns;
  2094	
  2095			pre_ns = timespec64_to_ns(&sts.pre_ts);
  2096			post_ns = timespec64_to_ns(&sts.post_ts);
  2097			ns = (pre_ns + post_ns) / 2;
  2098			ns += (s64)bp->utc_tai_offset * NSEC_PER_SEC;
  2099			sys_ts = ns_to_timespec64(ns);
  2100	
  2101			seq_printf(s, "%7s: %lld.%ld == %ptT TAI\n", "PHC",
  2102				   ts.tv_sec, ts.tv_nsec, &ts);
  2103			seq_printf(s, "%7s: %lld.%ld == %ptT UTC offset %d\n", "SYS",
  2104				   sys_ts.tv_sec, sys_ts.tv_nsec, &sys_ts,
  2105				   bp->utc_tai_offset);
  2106			seq_printf(s, "%7s: PHC:SYS offset: %lld  window: %lld\n", "",
  2107				   timespec64_to_ns(&ts) - ns,
  2108				   post_ns - pre_ns);
  2109		}
  2110	
  2111		free_page((unsigned long)buf);
  2112		return 0;
  2113	}
  2114	DEFINE_SHOW_ATTRIBUTE(ptp_ocp_summary);
  2115	

---
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: 40214 bytes --]

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

* [linux-next:master 2102/2463] drivers/ptp/ptp_ocp.c:2000:16: warning: operator '?:' has lower precedence than '&'; '&' will be evaluated first
@ 2021-09-16 12:26 ` kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-09-16 12:26 UTC (permalink / raw)
  To: kbuild-all

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   368847b165bbfbdcf0bd4c96b167893dcdb13aba
commit: a62a56d04e63cf0ececb5dd339811f0a14b7e77c [2102/2463] ptp: ocp: Enable 4th timestamper / PPS generator
config: x86_64-randconfig-a005-20210916 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 8cbbd7e0b2aa21ce7e416cfb63d9965518948c35)
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/next/linux-next.git/commit/?id=a62a56d04e63cf0ececb5dd339811f0a14b7e77c
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout a62a56d04e63cf0ececb5dd339811f0a14b7e77c
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64 

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

All warnings (new ones prefixed by >>):

>> drivers/ptp/ptp_ocp.c:2000:16: warning: operator '?:' has lower precedence than '&'; '&' will be evaluated first [-Wbitwise-conditional-parentheses]
                              on & map ? " ON" : "OFF", src);
                              ~~~~~~~~ ^
   drivers/ptp/ptp_ocp.c:2000:16: note: place parentheses around the '&' expression to silence this warning
                              on & map ? " ON" : "OFF", src);
                                       ^
                              (       )
   drivers/ptp/ptp_ocp.c:2000:16: note: place parentheses around the '?:' expression to evaluate it first
                              on & map ? " ON" : "OFF", src);
                                       ^
                                   (                  )
   drivers/ptp/ptp_ocp.c:2004:16: warning: operator '?:' has lower precedence than '&'; '&' will be evaluated first [-Wbitwise-conditional-parentheses]
                              on & map ? " ON" : "OFF", src);
                              ~~~~~~~~ ^
   drivers/ptp/ptp_ocp.c:2004:16: note: place parentheses around the '&' expression to silence this warning
                              on & map ? " ON" : "OFF", src);
                                       ^
                              (       )
   drivers/ptp/ptp_ocp.c:2004:16: note: place parentheses around the '?:' expression to evaluate it first
                              on & map ? " ON" : "OFF", src);
                                       ^
                                   (                  )
   2 warnings generated.


vim +2000 drivers/ptp/ptp_ocp.c

  1934	
  1935	static int
  1936	ptp_ocp_summary_show(struct seq_file *s, void *data)
  1937	{
  1938		struct device *dev = s->private;
  1939		struct ptp_system_timestamp sts;
  1940		u32 sma_in, sma_out, ctrl, val;
  1941		struct ts_reg __iomem *ts_reg;
  1942		struct timespec64 ts;
  1943		struct ptp_ocp *bp;
  1944		const char *src;
  1945		bool on, map;
  1946		char *buf;
  1947	
  1948		buf = (char *)__get_free_page(GFP_KERNEL);
  1949		if (!buf)
  1950			return -ENOMEM;
  1951	
  1952		bp = dev_get_drvdata(dev);
  1953		sma_in = ioread32(&bp->sma->gpio1);
  1954		sma_out = ioread32(&bp->sma->gpio2);
  1955	
  1956		seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp));
  1957	
  1958		sma1_show(dev, NULL, buf);
  1959		seq_printf(s, "   sma1: %s", buf);
  1960	
  1961		sma2_show(dev, NULL, buf);
  1962		seq_printf(s, "   sma2: %s", buf);
  1963	
  1964		sma3_show(dev, NULL, buf);
  1965		seq_printf(s, "   sma3: %s", buf);
  1966	
  1967		sma4_show(dev, NULL, buf);
  1968		seq_printf(s, "   sma4: %s", buf);
  1969	
  1970		if (bp->ts0) {
  1971			ts_reg = bp->ts0->mem;
  1972			on = ioread32(&ts_reg->enable);
  1973			src = "GNSS";
  1974			seq_printf(s, "%7s: %s, src: %s\n", "TS0",
  1975				   on ? " ON" : "OFF", src);
  1976		}
  1977	
  1978		if (bp->ts1) {
  1979			ts_reg = bp->ts1->mem;
  1980			on = ioread32(&ts_reg->enable);
  1981			src = gpio_map(sma_in, 2, "sma1", "sma2", "----");
  1982			seq_printf(s, "%7s: %s, src: %s\n", "TS1",
  1983				   on ? " ON" : "OFF", src);
  1984		}
  1985	
  1986		if (bp->ts2) {
  1987			ts_reg = bp->ts2->mem;
  1988			on = ioread32(&ts_reg->enable);
  1989			src = gpio_map(sma_in, 3, "sma1", "sma2", "----");
  1990			seq_printf(s, "%7s: %s, src: %s\n", "TS2",
  1991				   on ? " ON" : "OFF", src);
  1992		}
  1993	
  1994		if (bp->pps) {
  1995			ts_reg = bp->pps->mem;
  1996			src = "PHC";
  1997			on = ioread32(&ts_reg->enable);
  1998			map = !!(bp->pps_req_map & OCP_REQ_TIMESTAMP);
  1999			seq_printf(s, "%7s: %s, src: %s\n", "TS3",
> 2000				   on & map ? " ON" : "OFF", src);
  2001	
  2002			map = !!(bp->pps_req_map & OCP_REQ_PPS);
  2003			seq_printf(s, "%7s: %s, src: %s\n", "PPS",
  2004				   on & map ? " ON" : "OFF", src);
  2005		}
  2006	
  2007		if (bp->irig_out) {
  2008			ctrl = ioread32(&bp->irig_out->ctrl);
  2009			on = ctrl & IRIG_M_CTRL_ENABLE;
  2010			val = ioread32(&bp->irig_out->status);
  2011			gpio_multi_map(buf, sma_out, 4, "sma3", "sma4", "----");
  2012			seq_printf(s, "%7s: %s, error: %d, mode %d, out: %s\n", "IRIG",
  2013				   on ? " ON" : "OFF", val, (ctrl >> 16), buf);
  2014		}
  2015	
  2016		if (bp->irig_in) {
  2017			on = ioread32(&bp->irig_in->ctrl) & IRIG_S_CTRL_ENABLE;
  2018			val = ioread32(&bp->irig_in->status);
  2019			src = gpio_map(sma_in, 4, "sma1", "sma2", "----");
  2020			seq_printf(s, "%7s: %s, error: %d, src: %s\n", "IRIG in",
  2021				   on ? " ON" : "OFF", val, src);
  2022		}
  2023	
  2024		if (bp->dcf_out) {
  2025			on = ioread32(&bp->dcf_out->ctrl) & DCF_M_CTRL_ENABLE;
  2026			val = ioread32(&bp->dcf_out->status);
  2027			gpio_multi_map(buf, sma_out, 5, "sma3", "sma4", "----");
  2028			seq_printf(s, "%7s: %s, error: %d, out: %s\n", "DCF",
  2029				   on ? " ON" : "OFF", val, buf);
  2030		}
  2031	
  2032		if (bp->dcf_in) {
  2033			on = ioread32(&bp->dcf_in->ctrl) & DCF_S_CTRL_ENABLE;
  2034			val = ioread32(&bp->dcf_in->status);
  2035			src = gpio_map(sma_in, 5, "sma1", "sma2", "----");
  2036			seq_printf(s, "%7s: %s, error: %d, src: %s\n", "DCF in",
  2037				   on ? " ON" : "OFF", val, src);
  2038		}
  2039	
  2040		if (bp->nmea_out) {
  2041			on = ioread32(&bp->nmea_out->ctrl) & 1;
  2042			val = ioread32(&bp->nmea_out->status);
  2043			seq_printf(s, "%7s: %s, error: %d\n", "NMEA",
  2044				   on ? " ON" : "OFF", val);
  2045		}
  2046	
  2047		/* compute src for PPS1, used below. */
  2048		if (bp->pps_select) {
  2049			val = ioread32(&bp->pps_select->gpio1);
  2050			if (val & 0x01)
  2051				src = gpio_map(sma_in, 0, "sma1", "sma2", "----");
  2052			else if (val & 0x02)
  2053				src = "MAC";
  2054			else if (val & 0x04)
  2055				src = "GNSS";
  2056			else
  2057				src = "----";
  2058		} else {
  2059			src = "?";
  2060		}
  2061	
  2062		/* assumes automatic switchover/selection */
  2063		val = ioread32(&bp->reg->select);
  2064		switch (val >> 16) {
  2065		case 0:
  2066			sprintf(buf, "----");
  2067			break;
  2068		case 2:
  2069			sprintf(buf, "IRIG");
  2070			break;
  2071		case 3:
  2072			sprintf(buf, "%s via PPS1", src);
  2073			break;
  2074		case 6:
  2075			sprintf(buf, "DCF");
  2076			break;
  2077		default:
  2078			strcpy(buf, "unknown");
  2079			break;
  2080		}
  2081		val = ioread32(&bp->reg->status);
  2082		seq_printf(s, "%7s: %s, state: %s\n", "PHC src", buf,
  2083			   val & OCP_STATUS_IN_SYNC ? "sync" : "unsynced");
  2084	
  2085		/* reuses PPS1 src from earlier */
  2086		seq_printf(s, "MAC PPS1 src: %s\n", src);
  2087	
  2088		src = gpio_map(sma_in, 1, "sma1", "sma2", "GNSS2");
  2089		seq_printf(s, "MAC PPS2 src: %s\n", src);
  2090	
  2091		if (!ptp_ocp_gettimex(&bp->ptp_info, &ts, &sts)) {
  2092			struct timespec64 sys_ts;
  2093			s64 pre_ns, post_ns, ns;
  2094	
  2095			pre_ns = timespec64_to_ns(&sts.pre_ts);
  2096			post_ns = timespec64_to_ns(&sts.post_ts);
  2097			ns = (pre_ns + post_ns) / 2;
  2098			ns += (s64)bp->utc_tai_offset * NSEC_PER_SEC;
  2099			sys_ts = ns_to_timespec64(ns);
  2100	
  2101			seq_printf(s, "%7s: %lld.%ld == %ptT TAI\n", "PHC",
  2102				   ts.tv_sec, ts.tv_nsec, &ts);
  2103			seq_printf(s, "%7s: %lld.%ld == %ptT UTC offset %d\n", "SYS",
  2104				   sys_ts.tv_sec, sys_ts.tv_nsec, &sys_ts,
  2105				   bp->utc_tai_offset);
  2106			seq_printf(s, "%7s: PHC:SYS offset: %lld  window: %lld\n", "",
  2107				   timespec64_to_ns(&ts) - ns,
  2108				   post_ns - pre_ns);
  2109		}
  2110	
  2111		free_page((unsigned long)buf);
  2112		return 0;
  2113	}
  2114	DEFINE_SHOW_ATTRIBUTE(ptp_ocp_summary);
  2115	

---
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: 40214 bytes --]

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

end of thread, other threads:[~2021-09-16 12:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-16 12:26 [linux-next:master 2102/2463] drivers/ptp/ptp_ocp.c:2000:16: warning: operator '?:' has lower precedence than '&'; '&' will be evaluated first kernel test robot
2021-09-16 12:26 ` 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.