Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Maarten Lankhorst <dev@lankhorst.se>,
	intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Cc: oe-kbuild-all@lists.linux.dev
Subject: Re: [i915-rt v4 20/20] drm/i915/display: Remove uncore lock from vlv_atomic_update_fifo
Date: Sat, 20 Dec 2025 19:23:14 +0100	[thread overview]
Message-ID: <202512201922.KJN0PFLf-lkp@intel.com> (raw)
In-Reply-To: <20251218163408.97508-21-dev@lankhorst.se>

Hi Maarten,

kernel test robot noticed the following build warnings:

[auto build test WARNING on drm-i915/for-linux-next]
[also build test WARNING on drm-i915/for-linux-next-fixes drm-xe/drm-xe-next drm-tip/drm-tip linus/master v6.19-rc1 next-20251219]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-i915-display-Fix-intel_lpe_audio_irq_handler-for-PREEMPT-RT/20251219-044020
base:   https://gitlab.freedesktop.org/drm/i915/kernel.git for-linux-next
patch link:    https://lore.kernel.org/r/20251218163408.97508-21-dev%40lankhorst.se
patch subject: [i915-rt v4 20/20] drm/i915/display: Remove uncore lock from vlv_atomic_update_fifo
config: x86_64-rhel-9.4 (https://download.01.org/0day-ci/archive/20251220/202512201922.KJN0PFLf-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251220/202512201922.KJN0PFLf-lkp@intel.com/reproduce)

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/202512201922.KJN0PFLf-lkp@intel.com/

All warnings (new ones prefixed by >>):

   In file included from drivers/gpu/drm/i915/gt/intel_engine_types.h:26,
                    from drivers/gpu/drm/i915/gt/intel_context_types.h:17,
                    from drivers/gpu/drm/i915/gem/i915_gem_context_types.h:19,
                    from drivers/gpu/drm/i915/i915_drv.h:40,
                    from drivers/gpu/drm/i915/display/i9xx_wm.c:10:
   drivers/gpu/drm/i915/intel_uncore.h: In function 'intel_uncore_read64_2x32_fw':
   drivers/gpu/drm/i915/intel_uncore.h:455:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'lower'
     455 |         u32 upper lower, old_upper, loop = 0;
         |                   ^~~~~
   drivers/gpu/drm/i915/intel_uncore.h:455:19: error: 'lower' undeclared (first use in this function); did you mean 'islower'?
     455 |         u32 upper lower, old_upper, loop = 0;
         |                   ^~~~~
         |                   islower
   drivers/gpu/drm/i915/intel_uncore.h:455:19: note: each undeclared identifier is reported only once for each function it appears in
   drivers/gpu/drm/i915/intel_uncore.h:455:26: error: 'old_upper' undeclared (first use in this function); did you mean 'si_upper'?
     455 |         u32 upper lower, old_upper, loop = 0;
         |                          ^~~~~~~~~
         |                          si_upper
   drivers/gpu/drm/i915/intel_uncore.h:455:24: warning: left-hand operand of comma expression has no effect [-Wunused-value]
     455 |         u32 upper lower, old_upper, loop = 0;
         |                        ^
   drivers/gpu/drm/i915/intel_uncore.h:455:37: error: 'loop' undeclared (first use in this function)
     455 |         u32 upper lower, old_upper, loop = 0;
         |                                     ^~~~
   drivers/gpu/drm/i915/intel_uncore.h:455:35: warning: left-hand operand of comma expression has no effect [-Wunused-value]
     455 |         u32 upper lower, old_upper, loop = 0;
         |                                   ^
   drivers/gpu/drm/i915/intel_uncore.h:456:9: error: 'upper' undeclared (first use in this function)
     456 |         upper = intel_uncore_read_fw(uncoree, upper_reg);
         |         ^~~~~
   drivers/gpu/drm/i915/intel_uncore.h:456:38: error: 'uncoree' undeclared (first use in this function); did you mean 'uncore'?
     456 |         upper = intel_uncore_read_fw(uncoree, upper_reg);
         |                                      ^~~~~~~
   drivers/gpu/drm/i915/intel_uncore.h:425:55: note: in definition of macro 'intel_uncore_read_fw'
     425 | #define intel_uncore_read_fw(...) __raw_uncore_read32(__VA_ARGS__)
         |                                                       ^~~~~~~~~~~
   drivers/gpu/drm/i915/intel_uncore.h:456:47: error: 'upper_reg' undeclared (first use in this function)
     456 |         upper = intel_uncore_read_fw(uncoree, upper_reg);
         |                                               ^~~~~~~~~
   drivers/gpu/drm/i915/intel_uncore.h:425:55: note: in definition of macro 'intel_uncore_read_fw'
     425 | #define intel_uncore_read_fw(...) __raw_uncore_read32(__VA_ARGS__)
         |                                                       ^~~~~~~~~~~
   drivers/gpu/drm/i915/intel_uncore.h:459:54: error: 'lower_reg' undeclared (first use in this function)
     459 |                 lower = intel_uncore_read_fw(uncore, lower_reg);
         |                                                      ^~~~~~~~~
   drivers/gpu/drm/i915/intel_uncore.h:425:55: note: in definition of macro 'intel_uncore_read_fw'
     425 | #define intel_uncore_read_fw(...) __raw_uncore_read32(__VA_ARGS__)
         |                                                       ^~~~~~~~~~~
   drivers/gpu/drm/i915/intel_uncore.h: In function 'intel_uncore_read64_2x32':
   drivers/gpu/drm/i915/intel_uncore.h:483:15: error: too many arguments to function 'intel_uncore_read64_2x32_fw'
     483 |         ret = intel_uncore_read64_2x32_fw(uncore, lower_reg, upper_reg);
         |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/intel_uncore.h:453:1: note: declared here
     453 | intel_uncore_read64_2x32_fw(struct intel_uncore *uncore)
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/gpu/drm/i915/display/i9xx_wm.c:16:
   drivers/gpu/drm/i915/display/intel_de.h: In function 'intel_de_read64_2x32_fw':
   drivers/gpu/drm/i915/display/intel_de.h:70:16: error: too many arguments to function 'intel_uncore_read64_2x32_fw'
      70 |         return intel_uncore_read64_2x32_fw(__to_uncore(display),
         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/intel_uncore.h:453:1: note: declared here
     453 | intel_uncore_read64_2x32_fw(struct intel_uncore *uncore)
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/display/i9xx_wm.c: In function 'vlv_atomic_update_fifo':
>> drivers/gpu/drm/i915/display/i9xx_wm.c:1867:30: warning: unused variable 'uncore' [-Wunused-variable]
    1867 |         struct intel_uncore *uncore = &dev_priv->uncore;
         |                              ^~~~~~


vim +/uncore +1867 drivers/gpu/drm/i915/display/i9xx_wm.c

94b49d53acece8 Jani Nikula 2023-02-13  1858  
94b49d53acece8 Jani Nikula 2023-02-13  1859  #define VLV_FIFO(plane, value) \
94b49d53acece8 Jani Nikula 2023-02-13  1860  	(((value) << DSPARB_ ## plane ## _SHIFT_VLV) & DSPARB_ ## plane ## _MASK_VLV)
94b49d53acece8 Jani Nikula 2023-02-13  1861  
94b49d53acece8 Jani Nikula 2023-02-13  1862  static void vlv_atomic_update_fifo(struct intel_atomic_state *state,
94b49d53acece8 Jani Nikula 2023-02-13  1863  				   struct intel_crtc *crtc)
94b49d53acece8 Jani Nikula 2023-02-13  1864  {
d0e7412505dc87 Jani Nikula 2025-04-08  1865  	struct intel_display *display = to_intel_display(crtc);
94b49d53acece8 Jani Nikula 2023-02-13  1866  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
94b49d53acece8 Jani Nikula 2023-02-13 @1867  	struct intel_uncore *uncore = &dev_priv->uncore;
94b49d53acece8 Jani Nikula 2023-02-13  1868  	const struct intel_crtc_state *crtc_state =
94b49d53acece8 Jani Nikula 2023-02-13  1869  		intel_atomic_get_new_crtc_state(state, crtc);
94b49d53acece8 Jani Nikula 2023-02-13  1870  	const struct vlv_fifo_state *fifo_state =
94b49d53acece8 Jani Nikula 2023-02-13  1871  		&crtc_state->wm.vlv.fifo_state;
94b49d53acece8 Jani Nikula 2023-02-13  1872  	int sprite0_start, sprite1_start, fifo_size;
94b49d53acece8 Jani Nikula 2023-02-13  1873  	u32 dsparb, dsparb2, dsparb3;
94b49d53acece8 Jani Nikula 2023-02-13  1874  
94b49d53acece8 Jani Nikula 2023-02-13  1875  	if (!crtc_state->fifo_changed)
94b49d53acece8 Jani Nikula 2023-02-13  1876  		return;
94b49d53acece8 Jani Nikula 2023-02-13  1877  
94b49d53acece8 Jani Nikula 2023-02-13  1878  	sprite0_start = fifo_state->plane[PLANE_PRIMARY];
94b49d53acece8 Jani Nikula 2023-02-13  1879  	sprite1_start = fifo_state->plane[PLANE_SPRITE0] + sprite0_start;
94b49d53acece8 Jani Nikula 2023-02-13  1880  	fifo_size = fifo_state->plane[PLANE_SPRITE1] + sprite1_start;
94b49d53acece8 Jani Nikula 2023-02-13  1881  
d35b913f0e1cb0 Jani Nikula 2025-04-08  1882  	drm_WARN_ON(display->drm, fifo_state->plane[PLANE_CURSOR] != 63);
d35b913f0e1cb0 Jani Nikula 2025-04-08  1883  	drm_WARN_ON(display->drm, fifo_size != 511);
94b49d53acece8 Jani Nikula 2023-02-13  1884  
94b49d53acece8 Jani Nikula 2023-02-13  1885  	trace_vlv_fifo_size(crtc, sprite0_start, sprite1_start, fifo_size);
94b49d53acece8 Jani Nikula 2023-02-13  1886  
94b49d53acece8 Jani Nikula 2023-02-13  1887  	/*
94b49d53acece8 Jani Nikula 2023-02-13  1888  	 * uncore.lock serves a double purpose here. It allows us to
94b49d53acece8 Jani Nikula 2023-02-13  1889  	 * use the less expensive I915_{READ,WRITE}_FW() functions, and
94b49d53acece8 Jani Nikula 2023-02-13  1890  	 * it protects the DSPARB registers from getting clobbered by
94b49d53acece8 Jani Nikula 2023-02-13  1891  	 * parallel updates from multiple pipes.
94b49d53acece8 Jani Nikula 2023-02-13  1892  	 *
94b49d53acece8 Jani Nikula 2023-02-13  1893  	 * intel_pipe_update_start() has already disabled interrupts
94b49d53acece8 Jani Nikula 2023-02-13  1894  	 * for us, so a plain spin_lock() is sufficient here.
94b49d53acece8 Jani Nikula 2023-02-13  1895  	 */
94b49d53acece8 Jani Nikula 2023-02-13  1896  
94b49d53acece8 Jani Nikula 2023-02-13  1897  	switch (crtc->pipe) {
94b49d53acece8 Jani Nikula 2023-02-13  1898  	case PIPE_A:
d0e7412505dc87 Jani Nikula 2025-04-08  1899  		dsparb = intel_de_read_fw(display, DSPARB(display));
d0e7412505dc87 Jani Nikula 2025-04-08  1900  		dsparb2 = intel_de_read_fw(display, DSPARB2);
94b49d53acece8 Jani Nikula 2023-02-13  1901  
94b49d53acece8 Jani Nikula 2023-02-13  1902  		dsparb &= ~(VLV_FIFO(SPRITEA, 0xff) |
94b49d53acece8 Jani Nikula 2023-02-13  1903  			    VLV_FIFO(SPRITEB, 0xff));
94b49d53acece8 Jani Nikula 2023-02-13  1904  		dsparb |= (VLV_FIFO(SPRITEA, sprite0_start) |
94b49d53acece8 Jani Nikula 2023-02-13  1905  			   VLV_FIFO(SPRITEB, sprite1_start));
94b49d53acece8 Jani Nikula 2023-02-13  1906  
94b49d53acece8 Jani Nikula 2023-02-13  1907  		dsparb2 &= ~(VLV_FIFO(SPRITEA_HI, 0x1) |
94b49d53acece8 Jani Nikula 2023-02-13  1908  			     VLV_FIFO(SPRITEB_HI, 0x1));
94b49d53acece8 Jani Nikula 2023-02-13  1909  		dsparb2 |= (VLV_FIFO(SPRITEA_HI, sprite0_start >> 8) |
94b49d53acece8 Jani Nikula 2023-02-13  1910  			   VLV_FIFO(SPRITEB_HI, sprite1_start >> 8));
94b49d53acece8 Jani Nikula 2023-02-13  1911  
d0e7412505dc87 Jani Nikula 2025-04-08  1912  		intel_de_write_fw(display, DSPARB(display), dsparb);
d0e7412505dc87 Jani Nikula 2025-04-08  1913  		intel_de_write_fw(display, DSPARB2, dsparb2);
94b49d53acece8 Jani Nikula 2023-02-13  1914  		break;
94b49d53acece8 Jani Nikula 2023-02-13  1915  	case PIPE_B:
d0e7412505dc87 Jani Nikula 2025-04-08  1916  		dsparb = intel_de_read_fw(display, DSPARB(display));
d0e7412505dc87 Jani Nikula 2025-04-08  1917  		dsparb2 = intel_de_read_fw(display, DSPARB2);
94b49d53acece8 Jani Nikula 2023-02-13  1918  
94b49d53acece8 Jani Nikula 2023-02-13  1919  		dsparb &= ~(VLV_FIFO(SPRITEC, 0xff) |
94b49d53acece8 Jani Nikula 2023-02-13  1920  			    VLV_FIFO(SPRITED, 0xff));
94b49d53acece8 Jani Nikula 2023-02-13  1921  		dsparb |= (VLV_FIFO(SPRITEC, sprite0_start) |
94b49d53acece8 Jani Nikula 2023-02-13  1922  			   VLV_FIFO(SPRITED, sprite1_start));
94b49d53acece8 Jani Nikula 2023-02-13  1923  
94b49d53acece8 Jani Nikula 2023-02-13  1924  		dsparb2 &= ~(VLV_FIFO(SPRITEC_HI, 0xff) |
94b49d53acece8 Jani Nikula 2023-02-13  1925  			     VLV_FIFO(SPRITED_HI, 0xff));
94b49d53acece8 Jani Nikula 2023-02-13  1926  		dsparb2 |= (VLV_FIFO(SPRITEC_HI, sprite0_start >> 8) |
94b49d53acece8 Jani Nikula 2023-02-13  1927  			   VLV_FIFO(SPRITED_HI, sprite1_start >> 8));
94b49d53acece8 Jani Nikula 2023-02-13  1928  
d0e7412505dc87 Jani Nikula 2025-04-08  1929  		intel_de_write_fw(display, DSPARB(display), dsparb);
d0e7412505dc87 Jani Nikula 2025-04-08  1930  		intel_de_write_fw(display, DSPARB2, dsparb2);
94b49d53acece8 Jani Nikula 2023-02-13  1931  		break;
94b49d53acece8 Jani Nikula 2023-02-13  1932  	case PIPE_C:
d0e7412505dc87 Jani Nikula 2025-04-08  1933  		dsparb3 = intel_de_read_fw(display, DSPARB3);
d0e7412505dc87 Jani Nikula 2025-04-08  1934  		dsparb2 = intel_de_read_fw(display, DSPARB2);
94b49d53acece8 Jani Nikula 2023-02-13  1935  
94b49d53acece8 Jani Nikula 2023-02-13  1936  		dsparb3 &= ~(VLV_FIFO(SPRITEE, 0xff) |
94b49d53acece8 Jani Nikula 2023-02-13  1937  			     VLV_FIFO(SPRITEF, 0xff));
94b49d53acece8 Jani Nikula 2023-02-13  1938  		dsparb3 |= (VLV_FIFO(SPRITEE, sprite0_start) |
94b49d53acece8 Jani Nikula 2023-02-13  1939  			    VLV_FIFO(SPRITEF, sprite1_start));
94b49d53acece8 Jani Nikula 2023-02-13  1940  
94b49d53acece8 Jani Nikula 2023-02-13  1941  		dsparb2 &= ~(VLV_FIFO(SPRITEE_HI, 0xff) |
94b49d53acece8 Jani Nikula 2023-02-13  1942  			     VLV_FIFO(SPRITEF_HI, 0xff));
94b49d53acece8 Jani Nikula 2023-02-13  1943  		dsparb2 |= (VLV_FIFO(SPRITEE_HI, sprite0_start >> 8) |
94b49d53acece8 Jani Nikula 2023-02-13  1944  			   VLV_FIFO(SPRITEF_HI, sprite1_start >> 8));
94b49d53acece8 Jani Nikula 2023-02-13  1945  
d0e7412505dc87 Jani Nikula 2025-04-08  1946  		intel_de_write_fw(display, DSPARB3, dsparb3);
d0e7412505dc87 Jani Nikula 2025-04-08  1947  		intel_de_write_fw(display, DSPARB2, dsparb2);
94b49d53acece8 Jani Nikula 2023-02-13  1948  		break;
94b49d53acece8 Jani Nikula 2023-02-13  1949  	default:
94b49d53acece8 Jani Nikula 2023-02-13  1950  		break;
94b49d53acece8 Jani Nikula 2023-02-13  1951  	}
94b49d53acece8 Jani Nikula 2023-02-13  1952  
d0e7412505dc87 Jani Nikula 2025-04-08  1953  	intel_de_read_fw(display, DSPARB(display));
94b49d53acece8 Jani Nikula 2023-02-13  1954  }
94b49d53acece8 Jani Nikula 2023-02-13  1955  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

  parent reply	other threads:[~2025-12-20 18:23 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-18 16:33 [i915-rt v4 00/20] drm/i915/display: All patches to make PREEMPT_RT work on i915 + xe Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 01/20] drm/i915/display: Fix intel_lpe_audio_irq_handler for PREEMPT-RT Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 02/20] drm/i915/display: Make get_vblank_counter use intel_de_read_fw() Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 03/20] drm/i915/display: Use intel_de_write_fw in intel_pipe_fastset Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 04/20] drm/i915/display: Make set_pipeconf use the fw variants Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 05/20] drm/i915/display: Move vblank put until after critical section Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 06/20] drm/i915/display: Remove locking from intel_vblank_evade " Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 07/20] drm/i915/display: Handle vlv dsi workaround in scanline_in_safe_range too Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 08/20] drm/i915/display: Make icl_dsi_frame_update use _fw too Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 09/20] drm/i915/display: Enable interrupts earlier on PREEMPT_RT Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 10/20] drm/i915: Use preempt_disable/enable_rt() where recommended Maarten Lankhorst
2025-12-18 16:33 ` [i915-rt v4 11/20] PREEMPT_RT injection Maarten Lankhorst
2025-12-18 16:34 ` [i915-rt v4 12/20] drm/i915/display: Use intel_de_read_fw in colorops Maarten Lankhorst
2025-12-18 16:34 ` [i915-rt v4 13/20] drm/i915/gt: Use spin_lock_irq() instead of local_irq_disable() + spin_lock() Maarten Lankhorst
2025-12-18 16:34 ` [i915-rt v4 14/20] drm/i915: Drop the irqs_disabled() check Maarten Lankhorst
2025-12-18 16:34 ` [i915-rt v4 15/20] drm/i915/guc: Consider also RCU depth in busy loop Maarten Lankhorst
2025-12-18 16:34 ` [i915-rt v4 16/20] Revert "drm/i915: Depend on !PREEMPT_RT." Maarten Lankhorst
2025-12-18 16:34 ` [i915-rt v4 17/20] drm/i915/gt: Fix selftests on PREEMPT_RT Maarten Lankhorst
2025-12-18 16:34 ` [i915-rt v4 18/20] drm/i915/gt: Set stop_timeout() correctly on PREEMPT-RT Maarten Lankhorst
2025-12-18 16:34 ` [i915-rt v4 19/20] drm/i915/display: Do not take uncore lock in i915_get_vblank_counter Maarten Lankhorst
2025-12-18 19:33   ` [i915-rt v4.1] " Maarten Lankhorst
2025-12-20 15:20   ` [i915-rt v4 19/20] " kernel test robot
2025-12-20 15:43   ` kernel test robot
2025-12-21  0:35   ` kernel test robot
2025-12-18 16:34 ` [i915-rt v4 20/20] drm/i915/display: Remove uncore lock from vlv_atomic_update_fifo Maarten Lankhorst
2025-12-18 21:06   ` [i915-rt v4.1] " Maarten Lankhorst
2025-12-18 21:50     ` [i915-rt v4.2] " Maarten Lankhorst
2025-12-20 18:23   ` kernel test robot [this message]
2025-12-18 17:42 ` ✗ Fi.CI.BUILD: failure for drm/i915/display: All patches to make PREEMPT_RT work on i915 + xe. (rev5) Patchwork
2025-12-18 20:08 ` ✗ Fi.CI.BUILD: failure for drm/i915/display: All patches to make PREEMPT_RT work on i915 + xe. (rev6) Patchwork
2025-12-18 21:28 ` ✗ Fi.CI.BUILD: failure for drm/i915/display: All patches to make PREEMPT_RT work on i915 + xe. (rev7) Patchwork
2025-12-18 23:31 ` ✗ i915.CI.BAT: failure for drm/i915/display: All patches to make PREEMPT_RT work on i915 + xe. (rev8) Patchwork

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=202512201922.KJN0PFLf-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=dev@lankhorst.se \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=oe-kbuild-all@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