All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com>
To: Dave Airlie <airlied@gmail.com>, Simona Vetter <simona.vetter@ffwll.ch>
Cc: "Jani Nikula" <jani.nikula@linux.intel.com>,
	"Joonas Lahtinen" <joonas.lahtinen@linux.intel.com>,
	"Tvrtko Ursulin" <tursulin@ursulin.net>,
	"Rodrigo Vivi" <rodrigo.vivi@intel.com>,
	"Thomas Zimmermann" <tzimmermann@suse.de>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	"Maxime Ripard" <mripard@kernel.org>,
	"Matthew Brost" <matthew.brost@intel.com>,
	"Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
	"Oded Gabbay" <ogabbay@kernel.org>,
	dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org, dim-tools@lists.freedesktop.org
Subject: [PULL] drm-xe-next
Date: Thu, 14 May 2026 15:20:41 +0200	[thread overview]
Message-ID: <agXMKRRl1oxB204x@fedora> (raw)

Hi, Dave & Simona

The drm-xe-next PR for this week:

Series highlights:

- Support run ticks for multi-queue use case
  11/11 patches pushed
  In multi-queue scenarios the CTX_TIMESTAMP represents run ticks of all
  queues combined. To determine individual queue run ticks, QUEUE TIMESTAMP
  must be used instead. The series adds support to read QUEUE TIMESTAMP for
  multi-queue use cases, including LRC snapshot support, trace events, and
  the infrastructure to capture queue run times for active queues.
  (Umesh Nerlige Ramappa, Matthew Brost)

- Refactor functions implementing the blt batch
  3/3 patches
  Functions implementing batch buffers for blitter instructions (MEM_SET,
  MEM_COPY, XY_FAST_COPY, XY_FAST_COLOR) used hardcoded fixed instruction
  lengths. Replaces these with a helper function that returns the correct
  length based on the platform, as preparatory work for upcoming platforms
  where these instruction lengths will increase.
  (Balasubramani Vivekanandan)

- drm/xe/memirq: Update interrupt handler logic
  2/2 patches
  A new programming note for memory-based interrupts was released. Updates
  the interrupt handler to follow the new note and stops enabling all
  GT_MI_USER_INTERRUPTs to avoid unnecessary empty processing cycles.
  (Michal Wajdeczko)

- drm/xe/dma-buf: UAF and race condition fixes
  2/2 patches
  Fixes two use-after-free and race conditions in the dma-buf import path.
  The invalidate_mappings hook could be called back into with a partially
  initialized or already freed buffer object. Fixes this by moving the
  attach step until after the buffer object is fully set up.
  (Matthew Auld)

- drm/xe/multi_queue: Code refactor and cleanup
  2/2 patches
  Removes a redundant assignment in guc_exec_queue_run_job and refactors
  the CGP_SYNC send path to reduce code size and improve clarity.
  (Niranjana Vishwanathapura)

- More MERTOA WA's
  4/4 patches
  Two hardware workarounds for the MERTOA OA unit. Wa_14026746987
  restricts the supported OA format to XE_OAM_FORMAT_MPEC8u32_B8_C8.
  Wa_14026779378 blocks the SYS_MEM_LAT_MEASURE_EN bit to prevent memory
  corruption. Also includes a refactor of oa_unit_supports_oa_format and
  a new val argument to xe_oa_is_valid_config_reg.
  (Ashutosh Dixit)

Individual commits:

- drm/xe: Drop unused ggtt_balloon field (Michal Wajdeczko)
- drm/xe/devcoredump: Drop a FIXME in devcoredump (Shekhar Chauhan)
- drm/xe/eustall: Return ENODEV from read if EU stall registers get reset (Harish Chegondi)
- drm/xe: Make decision to use Xe2-style blitter instructions a feature flag (Matt Roper)
- drm/xe: Convert stolen memory over to ttm_range_manager (Sanjay Yadav)
- drm/xe/madvise: Track purgeability with BO-local counters (Arvind Yadav)
- drm/xe/cri: Add new PCI IDs (Balasubramani Vivekanandan)
- drm/xe/xe_survivability: Simplify runtime survivability error handling (Mallesh Koujalagi)
- drm/xe/guc: Exclude indirect ring state page from ADS engine state size (Satyanarayana K V P)
- drm/xe/hw_error: Cleanup array map (Raag Jadav)
- drm/xe/pf: Fix MMIO access using PF view instead of VF view during migration (Shuicheng Lin)
- drm/xe/pf: Fix EAGAIN sign in pf_migration_consume() (Shuicheng Lin)

Thanks,
Thomas

drm-xe-next-2026-05-14:
Driver Changes:

- drm/xe/cri: Add new PCI IDs (Balasubramani Vivekanandan)
- drm/xe/memirq: Enable GT_MI_USER_INTERRUPT only (Michal Wajdeczko)
- drm/xe/memirq: Update interrupt handler logic (Michal Wajdeczko)
- drm/xe: Drop unused ggtt_balloon field (Michal Wajdeczko)
- drm/xe: Refactor emit_xy_fast_copy and emit_mem_copy functions (Balasubramani Vivekanandan)
- drm/xe: Refactor emit_clear_link_copy (Balasubramani Vivekanandan)
- drm/xe: Refactor emit_clear_main_copy (Balasubramani Vivekanandan)
- drm/xe/devcoredump: Drop a FIXME in devcoredump (Shekhar Chauhan)
- drm/xe/oa: MERTOA Wa_14026779378 (Ashutosh Dixit)
- drm/xe/oa: Add val arg to xe_oa_is_valid_config_reg (Ashutosh Dixit)
- drm/xe/oa: MERTOA Wa_14026746987 (Ashutosh Dixit)
- drm/xe/oa: Refactor oa_unit_supports_oa_format (Ashutosh Dixit)
- drm/xe/dma-buf: fix UAF with retry loop (Matthew Auld)
- drm/xe/dma-buf: handle empty bo and UAF races (Matthew Auld)
- drm/xe/multi_queue: Whitelist QUEUE_TIMESTAMP register (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Use QUEUE_TIMESTAMP as job timestamp for multi-queue (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Add trace event for the multi queue timestamp (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Capture queue run times for active queues (Umesh Nerlige Ramappa)
- drm/xe/lrc: Refactor out engine id to hwe conversion (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Add helpers to access CS QUEUE TIMESTAMP from lrc (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Store primary LRC and position info in LRC (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Refactor check for multi queue support for engine class (Umesh Nerlige Ramappa)
- drm/xe/lrc: Refactor xe_lrc_timestamp to simplify logic (Umesh Nerlige Ramappa)
- drm/xe: Add timestamp_ms to LRC snapshot (Matthew Brost)
- drm/xe/lrc: Use 64 bit ctx timestamp in the LRC snapshot (Umesh Nerlige Ramappa)
- drm/xe/eustall: Return ENODEV from read if EU stall registers get reset (Harish Chegondi)
- drm/xe/multi_queue: Refactor CGP_SYNC send path (Niranjana Vishwanathapura)
- drm/xe/multi_queue: Remove redundant assignment in guc_exec_queue_run_job (Niranjana Vishwanathapura)
- drm/xe: Make decision to use Xe2-style blitter instructions a feature flag (Matt Roper)
- drm/xe: Convert stolen memory over to ttm_range_manager (Sanjay Yadav)
- drm/xe/madvise: Track purgeability with BO-local counters (Arvind Yadav)
- drm/xe/xe_survivability: Simplify runtime survivability error handling (Mallesh Koujalagi)
- drm/xe/guc: Exclude indirect ring state page from ADS engine state size (Satyanarayana K V P)
- drm/xe/hw_error: Cleanup array map (Raag Jadav)
- drm/xe/pf: Fix MMIO access using PF view instead of VF view during migration (Shuicheng Lin)
- drm/xe/pf: Fix EAGAIN sign in pf_migration_consume() (Shuicheng Lin)
The following changes since commit f96538285cfdbb3acf5e3356e0bb88c38815790b:

  Merge tag 'drm-misc-next-2026-05-07' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-next (2026-05-08 14:16:04 +1000)

are available in the Git repository at:

  https://gitlab.freedesktop.org/drm/xe/kernel.git tags/drm-xe-next-2026-05-14

for you to fetch changes up to 2ddedd4b7b7c329dd65358025cba8652675bec3d:

  drm/xe/memirq: Enable GT_MI_USER_INTERRUPT only (2026-05-13 20:11:21 +0200)

----------------------------------------------------------------
Driver Changes:

- drm/xe/cri: Add new PCI IDs (Balasubramani Vivekanandan)
- drm/xe/memirq: Enable GT_MI_USER_INTERRUPT only (Michal Wajdeczko)
- drm/xe/memirq: Update interrupt handler logic (Michal Wajdeczko)
- drm/xe: Drop unused ggtt_balloon field (Michal Wajdeczko)
- drm/xe: Refactor emit_xy_fast_copy and emit_mem_copy functions (Balasubramani Vivekanandan)
- drm/xe: Refactor emit_clear_link_copy (Balasubramani Vivekanandan)
- drm/xe: Refactor emit_clear_main_copy (Balasubramani Vivekanandan)
- drm/xe/devcoredump: Drop a FIXME in devcoredump (Shekhar Chauhan)
- drm/xe/oa: MERTOA Wa_14026779378 (Ashutosh Dixit)
- drm/xe/oa: Add val arg to xe_oa_is_valid_config_reg (Ashutosh Dixit)
- drm/xe/oa: MERTOA Wa_14026746987 (Ashutosh Dixit)
- drm/xe/oa: Refactor oa_unit_supports_oa_format (Ashutosh Dixit)
- drm/xe/dma-buf: fix UAF with retry loop (Matthew Auld)
- drm/xe/dma-buf: handle empty bo and UAF races (Matthew Auld)
- drm/xe/multi_queue: Whitelist QUEUE_TIMESTAMP register (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Use QUEUE_TIMESTAMP as job timestamp for multi-queue (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Add trace event for the multi queue timestamp (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Capture queue run times for active queues (Umesh Nerlige Ramappa)
- drm/xe/lrc: Refactor out engine id to hwe conversion (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Add helpers to access CS QUEUE TIMESTAMP from lrc (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Store primary LRC and position info in LRC (Umesh Nerlige Ramappa)
- drm/xe/multi_queue: Refactor check for multi queue support for engine class (Umesh Nerlige Ramappa)
- drm/xe/lrc: Refactor xe_lrc_timestamp to simplify logic (Umesh Nerlige Ramappa)
- drm/xe: Add timestamp_ms to LRC snapshot (Matthew Brost)
- drm/xe/lrc: Use 64 bit ctx timestamp in the LRC snapshot (Umesh Nerlige Ramappa)
- drm/xe/eustall: Return ENODEV from read if EU stall registers get reset (Harish Chegondi)
- drm/xe/multi_queue: Refactor CGP_SYNC send path (Niranjana Vishwanathapura)
- drm/xe/multi_queue: Remove redundant assignment in guc_exec_queue_run_job (Niranjana Vishwanathapura)
- drm/xe: Make decision to use Xe2-style blitter instructions a feature flag (Matt Roper)
- drm/xe: Convert stolen memory over to ttm_range_manager (Sanjay Yadav)
- drm/xe/madvise: Track purgeability with BO-local counters (Arvind Yadav)
- drm/xe/xe_survivability: Simplify runtime survivability error handling (Mallesh Koujalagi)
- drm/xe/guc: Exclude indirect ring state page from ADS engine state size (Satyanarayana K V P)
- drm/xe/hw_error: Cleanup array map (Raag Jadav)
- drm/xe/pf: Fix MMIO access using PF view instead of VF view during migration (Shuicheng Lin)
- drm/xe/pf: Fix EAGAIN sign in pf_migration_consume() (Shuicheng Lin)

----------------------------------------------------------------
Arvind Yadav (1):
      drm/xe/madvise: Track purgeability with BO-local counters

Ashutosh Dixit (4):
      drm/xe/oa: Refactor oa_unit_supports_oa_format
      drm/xe/oa: MERTOA Wa_14026746987
      drm/xe/oa: Add val arg to xe_oa_is_valid_config_reg
      drm/xe/oa: MERTOA Wa_14026779378

Balasubramani Vivekanandan (4):
      drm/xe/cri: Add new PCI IDs
      drm/xe: Refactor emit_clear_main_copy
      drm/xe: Refactor emit_clear_link_copy
      drm/xe: Refactor emit_xy_fast_copy and emit_mem_copy functions

Harish Chegondi (1):
      drm/xe/eustall: Return ENODEV from read if EU stall registers get reset

Mallesh Koujalagi (1):
      drm/xe/xe_survivability: Simplify runtime survivability error handling

Matt Roper (1):
      drm/xe: Make decision to use Xe2-style blitter instructions a feature flag

Matthew Auld (2):
      drm/xe/dma-buf: handle empty bo and UAF races
      drm/xe/dma-buf: fix UAF with retry loop

Matthew Brost (1):
      drm/xe: Add timestamp_ms to LRC snapshot

Michal Wajdeczko (3):
      drm/xe: Drop unused ggtt_balloon field
      drm/xe/memirq: Update interrupt handler logic
      drm/xe/memirq: Enable GT_MI_USER_INTERRUPT only

Niranjana Vishwanathapura (2):
      drm/xe/multi_queue: Remove redundant assignment in guc_exec_queue_run_job
      drm/xe/multi_queue: Refactor CGP_SYNC send path

Raag Jadav (1):
      drm/xe/hw_error: Cleanup array map

Sanjay Yadav (1):
      drm/xe: Convert stolen memory over to ttm_range_manager

Satyanarayana K V P (1):
      drm/xe/guc: Exclude indirect ring state page from ADS engine state size

Shekhar Chauhan (1):
      drm/xe/devcoredump: Drop a FIXME in devcoredump

Shuicheng Lin (2):
      drm/xe/pf: Fix EAGAIN sign in pf_migration_consume()
      drm/xe/pf: Fix MMIO access using PF view instead of VF view during migration

Thomas Hellström (1):
      Merge drm/drm-next into drm-xe-next

Umesh Nerlige Ramappa (10):
      drm/xe/lrc: Use 64 bit ctx timestamp in the LRC snapshot
      drm/xe/lrc: Refactor xe_lrc_timestamp to simplify logic
      drm/xe/multi_queue: Refactor check for multi queue support for engine class
      drm/xe/multi_queue: Store primary LRC and position info in LRC
      drm/xe/multi_queue: Add helpers to access CS QUEUE TIMESTAMP from lrc
      drm/xe/lrc: Refactor out engine id to hwe conversion
      drm/xe/multi_queue: Capture queue run times for active queues
      drm/xe/multi_queue: Add trace event for the multi queue timestamp
      drm/xe/multi_queue: Use QUEUE_TIMESTAMP as job timestamp for multi-queue
      drm/xe/multi_queue: Whitelist QUEUE_TIMESTAMP register

 drivers/gpu/drm/xe/display/xe_display_bo.c        |   2 +-
 drivers/gpu/drm/xe/instructions/xe_gpu_commands.h |   4 +-
 drivers/gpu/drm/xe/regs/xe_engine_regs.h          |   4 +
 drivers/gpu/drm/xe/regs/xe_lrc_layout.h           |   3 +
 drivers/gpu/drm/xe/regs/xe_oa_regs.h              |   3 +
 drivers/gpu/drm/xe/tests/xe_migrate.c             |   2 +-
 drivers/gpu/drm/xe/xe_bo.c                        |  22 +-
 drivers/gpu/drm/xe/xe_bo.h                        |  88 +++++++-
 drivers/gpu/drm/xe/xe_bo_types.h                  |  28 ++-
 drivers/gpu/drm/xe/xe_device_types.h              |   3 +
 drivers/gpu/drm/xe/xe_device_wa_oob.rules         |   2 +
 drivers/gpu/drm/xe/xe_dma_buf.c                   |  80 ++++---
 drivers/gpu/drm/xe/xe_eu_stall.c                  |  40 +++-
 drivers/gpu/drm/xe/xe_exec_queue.c                |  14 +-
 drivers/gpu/drm/xe/xe_gt.h                        |  15 ++
 drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c     |   8 +-
 drivers/gpu/drm/xe/xe_gt_types.h                  |   7 +
 drivers/gpu/drm/xe/xe_guc_ads.c                   |   5 +-
 drivers/gpu/drm/xe/xe_guc_capture.c               |   6 -
 drivers/gpu/drm/xe/xe_guc_submit.c                |  69 ++----
 drivers/gpu/drm/xe/xe_hw_error.c                  |  32 ++-
 drivers/gpu/drm/xe/xe_lrc.c                       | 253 +++++++++++++++++-----
 drivers/gpu/drm/xe/xe_lrc.h                       |  12 +-
 drivers/gpu/drm/xe/xe_lrc_types.h                 |  11 +
 drivers/gpu/drm/xe/xe_memirq.c                    |  32 ++-
 drivers/gpu/drm/xe/xe_migrate.c                   |  75 ++++---
 drivers/gpu/drm/xe/xe_oa.c                        |  40 ++--
 drivers/gpu/drm/xe/xe_pci.c                       |   9 +
 drivers/gpu/drm/xe/xe_reg_whitelist.c             |  14 ++
 drivers/gpu/drm/xe/xe_res_cursor.h                |  14 +-
 drivers/gpu/drm/xe/xe_ring_ops.c                  |   8 +-
 drivers/gpu/drm/xe/xe_sriov_pf_migration.c        |   7 +-
 drivers/gpu/drm/xe/xe_survivability_mode.c        |  14 +-
 drivers/gpu/drm/xe/xe_survivability_mode.h        |   2 +-
 drivers/gpu/drm/xe/xe_tile_types.h                |   2 -
 drivers/gpu/drm/xe/xe_trace_lrc.h                 |  27 +++
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c            |  64 ++----
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h            |  12 +
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c              |  11 +-
 drivers/gpu/drm/xe/xe_vm.c                        |  51 ++++-
 drivers/gpu/drm/xe/xe_vm_madvise.c                | 162 +-------------
 drivers/gpu/drm/xe/xe_vm_madvise.h                |   2 -
 include/drm/intel/pciids.h                        |   6 +-
 43 files changed, 779 insertions(+), 486 deletions(-)

             reply	other threads:[~2026-05-14 13:20 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-14 13:20 Thomas Hellstrom [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-04-30 13:00 [PULL] drm-xe-next Thomas Hellstrom
2026-03-27  3:24 Matthew Brost
2026-03-26  4:44 Matthew Brost
2026-03-12 14:57 Matthew Brost
2026-03-02 22:40 Matthew Brost
2026-01-15 16:16 Rodrigo Vivi
2025-12-30  9:58 Thomas Hellstrom
2025-12-19 22:41 Rodrigo Vivi
2025-11-14 10:49 Thomas Hellstrom
2025-11-17 20:56 ` Dave Airlie
2025-11-18  8:34   ` Thomas Hellström
2025-11-05 16:53 Thomas Hellstrom
2025-10-28 11:16 Thomas Hellstrom
2025-10-31 17:46 ` Simona Vetter
2025-10-20  8:31 Thomas Hellstrom
2025-10-24 11:26 ` Simona Vetter
2025-09-19 14:53 Lucas De Marchi
2025-08-29 22:00 Lucas De Marchi
2025-07-15 18:21 Rodrigo Vivi
2025-07-10 22:16 Rodrigo Vivi
2025-07-11  9:12 ` Simona Vetter
2025-07-11  9:25 ` Simona Vetter
2025-06-18 20:05 Rodrigo Vivi
2025-05-08 16:01 Thomas Hellstrom
2025-04-28 16:03 Thomas Hellstrom
2025-04-28 14:27 Thomas Hellstrom
2025-04-28 15:40 ` Thomas Hellström
2025-04-17 10:22 Thomas Hellstrom
2025-03-07  8:02 Lucas De Marchi
2025-03-07 14:51 ` Lucas De Marchi
2025-03-07 19:04   ` Lucas De Marchi
2025-02-24 18:50 Lucas De Marchi
2025-01-10 14:54 Rodrigo Vivi
2025-01-07 19:01 Rodrigo Vivi
2024-12-11 23:27 Rodrigo Vivi
2024-10-31 11:50 Thomas Hellstrom
2024-10-24 17:52 Thomas Hellstrom
2024-10-24 19:22 ` Matthew Brost
2024-10-25  7:30   ` Thomas Hellström
2024-10-25  9:34     ` Jani Nikula
2024-10-25 10:45       ` Thomas Hellström
2024-10-25 22:26         ` Matthew Brost
2024-10-17  9:32 Thomas Hellstrom
2024-10-10  9:56 Thomas Hellstrom
2024-09-06  2:29 Lucas De Marchi
2024-08-28 19:18 Lucas De Marchi
2024-08-22 20:55 Lucas De Marchi
2024-08-27 10:51 ` Daniel Vetter
2024-07-30 22:39 Lucas De Marchi
2024-07-02 19:02 Rodrigo Vivi
2024-07-05  8:18 ` Daniel Vetter
2024-06-26 22:32 Rodrigo Vivi
2024-06-06 21:43 Rodrigo Vivi
2024-04-23 12:54 Thomas Hellstrom
2024-02-26  3:21 Lucas De Marchi
2024-02-26  9:58 ` Daniel Vetter
2024-02-26 10:46 ` Daniel Stone
2024-02-26 14:16   ` Lucas De Marchi
2023-12-15 22:28 Rodrigo Vivi
2023-12-17 12:35 ` Oded Gabbay
2023-12-17 12:35   ` Oded Gabbay
2023-12-18 12:09 ` Oded Gabbay
2023-12-18 12:09   ` Oded Gabbay
2023-12-18 14:27 ` Oded Gabbay
2023-12-18 14:27   ` Oded Gabbay
2023-12-19  7:17   ` Ohad Sharabi
2023-12-19  9:15   ` Dani Liberman

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=agXMKRRl1oxB204x@fedora \
    --to=thomas.hellstrom@linux.intel.com \
    --cc=airlied@gmail.com \
    --cc=dim-tools@lists.freedesktop.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=joonas.lahtinen@linux.intel.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=matthew.brost@intel.com \
    --cc=mripard@kernel.org \
    --cc=ogabbay@kernel.org \
    --cc=rodrigo.vivi@intel.com \
    --cc=simona.vetter@ffwll.ch \
    --cc=tursulin@ursulin.net \
    --cc=tzimmermann@suse.de \
    /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 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.