Linux Framebuffer Layer development
 help / color / mirror / Atom feed
From: Julia Lawall <julia.lawall@inria.fr>
To: Comfort Oyewole <coyewole7@gmail.com>
Cc: gregkh@linuxfoundation.org, andy@kernel.org,
	oe-kbuild-all@lists.linux.dev,  outreachy@lists.linux.dev,
	linux-staging@lists.linux.dev,  linux-fbdev@vger.kernel.org,
	Julia.Lawall@inria.fr
Subject: Re: [PATCH v2] staging: fbtft: remove trailing semicolons from macro definitionsandy@kernel.org
Date: Mon, 19 Oct 2026 07:08:00 -0400 (EDT)	[thread overview]
Message-ID: <f647826f-2686-dc67-cff6-9e8810aa565@inria.fr> (raw)
In-Reply-To: <202610191356.9yPxs182-lkp@intel.com>



On Mon, 19 Oct 2026, kernel test robot wrote:

> Hi Comfort,
>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on staging/staging-testing]
>
> url:    https://github.com/intel-lab-lkp/linux/commits/Comfort-Oyewole/staging-fbtft-remove-trailing-semicolons-from-macro-definitionsandy-kernel-org/20261018-185028
> base:   staging/staging-testing
> patch link:    https://lore.kernel.org/r/atUG5LbCbePRNn5M%40ubuntu
> patch subject: [PATCH v2] staging: fbtft: remove trailing semicolons from macro definitionsandy@kernel.org
> config: sh-randconfig-1001-20261019 (https://download.01.org/0day-ci/archive/20261019/202610191356.9yPxs182-lkp@intel.com/config)
> compiler: sh4-linux-gcc (GCC) 16.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261019/202610191356.9yPxs182-lkp@intel.com/reproduce)

Comfort,

Did you compile your kernel?  You need to check that you get a .o file for
every files that you modify.  But that is not a 100% guarantee, when the
change you make are under an #ifdef.  In that case, you have to check that
the containing #ifdefs resolve to true so the code is compiled.  If it
seems complex, you can try adding an error at the point of the code you
modified to be sure that compiling gives the corresponding error message.

julia


>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202610191356.9yPxs182-lkp@intel.com/
>
> All error/warnings (new ones prefixed by >>):
>
>      284 | static int fbtft_driver_probe_spi(struct spi_device *spi)                       \
>          | ^~~~~~
>    drivers/staging/fbtft/fbtft.h:366:1: note: in expansion of macro 'FBTFT_SPI_DRIVER'
>      366 | FBTFT_SPI_DRIVER(_name, _comp_vend "," _comp_dev, _display, spi_ids)            \
>          | ^~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:302:18: error: 'fbtft_driver_probe_spi' undeclared here (not in a function); did you mean 'fbtft_driver_remove_spi'?
>      302 |         .probe = fbtft_driver_probe_spi,                                        \
>          |                  ^~~~~~~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:366:1: note: in expansion of macro 'FBTFT_SPI_DRIVER'
>      366 | FBTFT_SPI_DRIVER(_name, _comp_vend "," _comp_dev, _display, spi_ids)            \
>          | ^~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    In file included from include/linux/device.h:32,
>                     from include/linux/acpi.h:15,
>                     from include/linux/i2c.h:13,
>                     from include/uapi/linux/fb.h:6,
>                     from include/linux/fb.h:5,
>                     from drivers/staging/fbtft/fbtft.h:7:
>    include/linux/device/driver.h:267:1: error: expected ',' or ';' before 'static'
>      267 | static int __init __driver##_init(void) \
>          | ^~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c: In function '__inittest':
>    drivers/staging/fbtft/fbtft.h:368:19: error: 'fbtft_driver_spi_driver_init' undeclared (first use in this function); did you mean 'fbtft_driver_spi_driver'?
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          |                   ^~~~~~~~~~~~~~~~~~~~~~~
>    include/linux/module.h:133:18: note: in definition of macro 'module_init'
>      133 |         { return initfn; }                                      \
>          |                  ^~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:368:19: note: each undeclared identifier is reported only once for each function it appears in
>    include/linux/module.h:133:18: note: in definition of macro 'module_init'
>      133 |         { return initfn; }                                      \
>          |                  ^~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    In file included from include/linux/compiler_types.h:88,
>                     from <command-line>:
>    drivers/staging/fbtft/fb_sh1106.c: At top level:
>    drivers/staging/fbtft/fbtft.h:368:19: error: 'fbtft_driver_spi_driver_init' undeclared here (not in a function); did you mean 'fbtft_driver_spi_driver'?
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          |                   ^~~~~~~~~~~~~~~~~~~~~~~
>    include/linux/compiler_attributes.h:92:65: note: in definition of macro '__copy'
>       92 | # define __copy(symbol)                 __attribute__((__copy__(symbol)))
>          |                                                                 ^~~~~~
>    include/linux/device/driver.h:271:1: note: in expansion of macro 'module_init'
>      271 | module_init(__driver##_init); \
>          | ^~~~~~~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    include/linux/module.h:134:13: error: 'init_module' aliased to undefined symbol 'fbtft_driver_spi_driver_init'
>      134 |         int init_module(void) __copy(initfn)                    \
>          |             ^~~~~~~~~~~
>    include/linux/device/driver.h:271:1: note: in expansion of macro 'module_init'
>      271 | module_init(__driver##_init); \
>          | ^~~~~~~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
> >> include/linux/module.h:247:17: error: '__mod_device_table__kmod_fb_sh1106__spi__spi_ids' aliased to undefined symbol 'spi_ids'
>      247 |         __PASTE(__mod_device_table__,   \
>          |                 ^~~~~~~~~~~~~~~~~~~~
>    include/linux/compiler_types.h:15:24: note: in definition of macro '___PASTE'
>       15 | #define ___PASTE(a, b) a##b
>          |                        ^
>    include/linux/module.h:247:9: note: in expansion of macro '__PASTE'
>      247 |         __PASTE(__mod_device_table__,   \
>          |         ^~~~~~~
>    include/linux/module.h:256:21: note: in expansion of macro '__mod_device_table'
>      256 | static typeof(name) __mod_device_table(type, name)                      \
>          |                     ^~~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fbtft.h:364:1: note: in expansion of macro 'MODULE_DEVICE_TABLE'
>      364 | MODULE_DEVICE_TABLE(spi, spi_ids)                                               \
>          | ^~~~~~~~~~~~~~~~~~~
>    drivers/staging/fbtft/fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
> >> drivers/staging/fbtft/fb_sh1106.c:154:29: warning: 'display' defined but not used [-Wunused-variable]
>      154 | static struct fbtft_display display = {
>          |                             ^~~~~~~
> --
>      284 | static int fbtft_driver_probe_spi(struct spi_device *spi)                       \
>          | ^~~~~~
>    fbtft.h:366:1: note: in expansion of macro 'FBTFT_SPI_DRIVER'
>      366 | FBTFT_SPI_DRIVER(_name, _comp_vend "," _comp_dev, _display, spi_ids)            \
>          | ^~~~~~~~~~~~~~~~
>    fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    fbtft.h:302:18: error: 'fbtft_driver_probe_spi' undeclared here (not in a function); did you mean 'fbtft_driver_remove_spi'?
>      302 |         .probe = fbtft_driver_probe_spi,                                        \
>          |                  ^~~~~~~~~~~~~~~~~~~~~~
>    fbtft.h:366:1: note: in expansion of macro 'FBTFT_SPI_DRIVER'
>      366 | FBTFT_SPI_DRIVER(_name, _comp_vend "," _comp_dev, _display, spi_ids)            \
>          | ^~~~~~~~~~~~~~~~
>    fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    In file included from include/linux/device.h:32,
>                     from include/linux/acpi.h:15,
>                     from include/linux/i2c.h:13,
>                     from include/uapi/linux/fb.h:6,
>                     from include/linux/fb.h:5,
>                     from fbtft.h:7:
>    include/linux/device/driver.h:267:1: error: expected ',' or ';' before 'static'
>      267 | static int __init __driver##_init(void) \
>          | ^~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    fb_sh1106.c: In function '__inittest':
>    fbtft.h:368:19: error: 'fbtft_driver_spi_driver_init' undeclared (first use in this function); did you mean 'fbtft_driver_spi_driver'?
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          |                   ^~~~~~~~~~~~~~~~~~~~~~~
>    include/linux/module.h:133:18: note: in definition of macro 'module_init'
>      133 |         { return initfn; }                                      \
>          |                  ^~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    fbtft.h:368:19: note: each undeclared identifier is reported only once for each function it appears in
>    include/linux/module.h:133:18: note: in definition of macro 'module_init'
>      133 |         { return initfn; }                                      \
>          |                  ^~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    In file included from include/linux/compiler_types.h:88,
>                     from <command-line>:
>    fb_sh1106.c: At top level:
>    fbtft.h:368:19: error: 'fbtft_driver_spi_driver_init' undeclared here (not in a function); did you mean 'fbtft_driver_spi_driver'?
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          |                   ^~~~~~~~~~~~~~~~~~~~~~~
>    include/linux/compiler_attributes.h:92:65: note: in definition of macro '__copy'
>       92 | # define __copy(symbol)                 __attribute__((__copy__(symbol)))
>          |                                                                 ^~~~~~
>    include/linux/device/driver.h:271:1: note: in expansion of macro 'module_init'
>      271 | module_init(__driver##_init); \
>          | ^~~~~~~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    include/linux/module.h:134:13: error: 'init_module' aliased to undefined symbol 'fbtft_driver_spi_driver_init'
>      134 |         int init_module(void) __copy(initfn)                    \
>          |             ^~~~~~~~~~~
>    include/linux/device/driver.h:271:1: note: in expansion of macro 'module_init'
>      271 | module_init(__driver##_init); \
>          | ^~~~~~~~~~~
>    include/linux/spi/spi.h:408:9: note: in expansion of macro 'module_driver'
>      408 |         module_driver(__spi_driver, spi_register_driver, \
>          |         ^~~~~~~~~~~~~
>    fbtft.h:368:1: note: in expansion of macro 'module_spi_driver'
>      368 | module_spi_driver(fbtft_driver_spi_driver)
>          | ^~~~~~~~~~~~~~~~~
>    fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
> >> include/linux/module.h:247:17: error: '__mod_device_table__kmod_fb_sh1106__spi__spi_ids' aliased to undefined symbol 'spi_ids'
>      247 |         __PASTE(__mod_device_table__,   \
>          |                 ^~~~~~~~~~~~~~~~~~~~
>    include/linux/compiler_types.h:15:24: note: in definition of macro '___PASTE'
>       15 | #define ___PASTE(a, b) a##b
>          |                        ^
>    include/linux/module.h:247:9: note: in expansion of macro '__PASTE'
>      247 |         __PASTE(__mod_device_table__,   \
>          |         ^~~~~~~
>    include/linux/module.h:256:21: note: in expansion of macro '__mod_device_table'
>      256 | static typeof(name) __mod_device_table(type, name)                      \
>          |                     ^~~~~~~~~~~~~~~~~~
>    fbtft.h:364:1: note: in expansion of macro 'MODULE_DEVICE_TABLE'
>      364 | MODULE_DEVICE_TABLE(spi, spi_ids)                                               \
>          | ^~~~~~~~~~~~~~~~~~~
>    fb_sh1106.c:173:1: note: in expansion of macro 'FBTFT_REGISTER_SPI_DRIVER'
>      173 | FBTFT_REGISTER_SPI_DRIVER(DRVNAME, "sinowealth", "sh1106", &display);
>          | ^~~~~~~~~~~~~~~~~~~~~~~~~
>    fb_sh1106.c:154:29: warning: 'display' defined but not used [-Wunused-variable]
>      154 | static struct fbtft_display display = {
>          |                             ^~~~~~~
>
>
> vim +247 include/linux/module.h
>
> ^1da177e4c3f415 Linus Torvalds 2005-04-16  240
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  241  /*
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  242   * Format: __mod_device_table__kmod_<modname>__<type>__<name>
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  243   * Parts of the string `__kmod_` and `__` are used as delimiters when parsing
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  244   * a symbol in file2alias.c
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  245   */
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  246  #define __mod_device_table(type, name)	\
> 83fb49389bbe07d Alexey Gladkov 2025-09-18 @247  	__PASTE(__mod_device_table__,	\
> 9025688bf6d427e Josh Poimboeuf 2025-10-20  248  	__PASTE(kmod_,			\
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  249  	__PASTE(__KBUILD_MODNAME,	\
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  250  	__PASTE(__,			\
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  251  	__PASTE(type,			\
> 9025688bf6d427e Josh Poimboeuf 2025-10-20  252  	__PASTE(__, name))))))
> 83fb49389bbe07d Alexey Gladkov 2025-09-18  253
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
>

  reply	other threads:[~2026-10-19 11:08 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-18 17:50 [PATCH v2] staging: fbtft: remove trailing semicolons from macro definitionsandy@kernel.org Comfort Oyewole
2026-10-19  3:44 ` kernel test robot
2026-10-19 11:08   ` Julia Lawall [this message]
2026-10-19  4:05 ` kernel test robot
2026-10-19  9:32 ` Andy Shevchenko

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=f647826f-2686-dc67-cff6-9e8810aa565@inria.fr \
    --to=julia.lawall@inria.fr \
    --cc=andy@kernel.org \
    --cc=coyewole7@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-staging@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=outreachy@lists.linux.dev \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox