From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Stefan Binding <sbinding@opensource.cirrus.com>,
Takashi Iwai <tiwai@suse.de>, Sasha Levin <sashal@kernel.org>,
perex@perex.cz, tiwai@suse.com, linux-sound@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH AUTOSEL 7.0-6.19] ALSA: hda/realtek: Add support for HP Laptops
Date: Mon, 20 Apr 2026 09:20:13 -0400 [thread overview]
Message-ID: <20260420132314.1023554-219-sashal@kernel.org> (raw)
In-Reply-To: <20260420132314.1023554-1-sashal@kernel.org>
From: Stefan Binding <sbinding@opensource.cirrus.com>
[ Upstream commit 8dbbd39d0605b93a176f2c775dd2b6bb7c7a8adb ]
Add support for HP Auster, Trekker and Agusta G7KX.
Laptops use 2 CS35L41 Amps with HDA, using Internal boost, with I2C
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
Link: https://patch.msgid.link/20260330134651.443439-2-sbinding@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
I now have all the information needed for a comprehensive analysis.
Here's my complete walkthrough:
---
## PHASE 1: COMMIT MESSAGE FORENSICS
### Step 1.1: Subject Line
- **Subsystem**: `ALSA: hda/realtek` (HDA audio codec - Realtek)
- **Action verb**: "Add support" - adding hardware support entries
- **Summary**: Adds PCI quirk entries for HP Auster, Trekker G7JC, and
Agusta G7KX laptops
- Record: [ALSA/HDA Realtek] [Add] [Hardware quirk entries for HP
laptops with CS35L41 amps]
### Step 1.2: Tags
- **Signed-off-by**: Stefan Binding (sbinding@opensource.cirrus.com) -
Cirrus Logic engineer, regular CS35L41 contributor
- **Link**: `https://patch.msgid.link/20260330134651.443439-2-
sbinding@opensource.cirrus.com` - patch 2 of series
- **Signed-off-by**: Takashi Iwai (tiwai@suse.de) - ALSA subsystem
maintainer
- No Fixes: tag (expected for quirk additions)
- No Reported-by: tag (expected - hardware enablement)
- No Cc: stable tag (expected - this is what we're evaluating)
- Record: Standard tags for a quirk addition. Merged by the ALSA
subsystem maintainer.
### Step 1.3: Commit Body
- "Add support for HP Auster, Trekker and Agusta G7KX."
- "Laptops use 2 CS35L41 Amps with HDA, using Internal boost, with I2C"
- This is a standard hardware enablement description from Cirrus Logic.
- Record: Without these quirk entries, the CS35L41 amplifiers on these
HP laptops won't be configured correctly, resulting in no audio output
or broken audio.
### Step 1.4: Hidden Bug Fix?
- Not a hidden bug fix - this is a straightforward hardware enablement
via quirk table entries. However, the absence of these entries means
audio doesn't work on these laptops, which is a real user-facing
issue.
- Record: Not a hidden bug fix. It's a hardware quirk addition, which is
an explicitly allowed exception for stable.
## PHASE 2: DIFF ANALYSIS
### Step 2.1: Inventory
- **Files changed**: 1 file (`sound/hda/codecs/realtek/alc269.c`)
- **Lines added**: 4 (pure additions)
- **Lines removed**: 0
- **Functions modified**: None (only the `alc269_fixup_tbl[]` data table
is changed)
- Record: Single-file, 4-line addition to a data table. Minimal scope.
### Step 2.2: Code Flow Change
Four new `SND_PCI_QUIRK()` entries inserted in sorted order:
1. `0x8e75` → "HP Trekker G7JC" → `ALC287_FIXUP_CS35L41_I2C_2`
2. `0x8f07` → "HP Agusta G7KX" → `ALC287_FIXUP_CS35L41_I2C_2`
3. `0x8f2d` → "HP Auster 14" → `ALC287_FIXUP_CS35L41_I2C_2`
4. `0x8f2e` → "HP Auster 14" → `ALC287_FIXUP_CS35L41_I2C_2`
Before: These PCI subsystem IDs have no quirk entry → generic behavior →
CS35L41 amps not properly configured.
After: These IDs match → `cs35l41_fixup_i2c_two()` is called → 2 CS35L41
amps configured via I2C with internal boost.
### Step 2.3: Bug Mechanism
- Category: **Hardware workaround / device ID addition**
- Without the quirk entry, the HDA codec driver doesn't know these
laptop models have CS35L41 amplifiers that need specific I2C
configuration. Audio will be broken or absent.
### Step 2.4: Fix Quality
- Obviously correct: just adds entries to a sorted lookup table using an
existing fixup
- Minimal/surgical: 4 lines, data-only
- Zero regression risk: only affects the specific HP PCI subsystem IDs
listed
- No code logic changes whatsoever
## PHASE 3: GIT HISTORY INVESTIGATION
### Step 3.1: Blame
- The `ALC287_FIXUP_CS35L41_I2C_2` fixup was introduced in commit
`07bcab93946cd` (January 2022, merged in v5.18). It has been stable
and used by dozens of other HP/ASUS laptop quirk entries ever since.
- Record: The fixup function exists in all active stable trees (v5.18+).
### Step 3.2: No Fixes: tag (expected for quirk additions)
### Step 3.3: File History
- Stefan Binding has numerous similar commits adding CS35L41 quirk
entries for HP laptops: `108c422c495dc` (HP Clipper), `720eebd514c0c`
(HP Trekker), `f8b1ff6555868` (HP Turbine). This is a well-established
pattern.
- Record: Standalone commit, no prerequisites needed.
### Step 3.4: Author
- Stefan Binding is a Cirrus Logic engineer who is the primary
contributor for CS35L41 HDA support. He has dozens of similar commits
over the past 4 years.
- Record: Author is the de facto maintainer of CS35L41 HDA integration.
### Step 3.5: Dependencies
- This is part of a 2-patch series (patch 1/2). Patch 2/2 adds ASUS
laptop quirks. The two patches are completely independent - they add
entries for different manufacturers to the same table.
- `ALC287_FIXUP_CS35L41_I2C_2` already exists (line 6248 in current
tree).
- Record: Fully standalone; no dependencies.
## PHASE 4: MAILING LIST RESEARCH
### Step 4.1: Original Submission
- Found via `b4 am`: Series is "[PATCH v1 0/2] Add support for various
HP and ASUS laptops using CS35L41 HDA"
- Cover letter confirms: "These laptops use Internal boost, with SPI or
I2C."
- v1 only (no revisions needed) - accepted as-is by Takashi Iwai.
- Record: Clean submission, applied without revisions.
### Step 4.2: Reviewers
- Sent to Jaroslav Kysela (ALSA co-maintainer), Takashi Iwai (ALSA
maintainer), linux-sound@vger.kernel.org,
patches@opensource.cirrus.com
- Applied by Takashi Iwai directly.
- Record: Proper review chain through the subsystem maintainer.
### Step 4.3: No bug report (hardware enablement, not a bug report)
### Step 4.4: Series context
- Patch 2/2 adds ASUS quirks; completely independent.
### Step 4.5: Lore blocked by anti-bot protection; unable to search
stable mailing list directly. No stable-specific discussion expected for
a new quirk addition.
## PHASE 5: CODE SEMANTIC ANALYSIS
### Step 5.1: Functions
- No functions modified. Only the `alc269_fixup_tbl[]` static data table
is changed.
### Step 5.2-5.4: Call chain
- The quirk table is consulted during HDA codec probe via
`snd_pci_quirk_lookup()`. When a matching PCI subsystem vendor/device
ID is found, the corresponding fixup function
(`cs35l41_fixup_i2c_two`) is called during codec initialization.
- This is a standard, well-tested path used by 100+ existing quirk
entries.
### Step 5.5: Similar patterns
- 114 existing uses of `ALC287_FIXUP_CS35L41_I2C_2` in the current tree.
This is one of the most commonly used fixups.
## PHASE 6: STABLE TREE ANALYSIS
### Step 6.1: Buggy code in stable?
- The "bug" is the absence of quirk entries for these specific HP laptop
models. The fixup infrastructure exists in all stable trees from v5.18
onward.
- Record: `ALC287_FIXUP_CS35L41_I2C_2` confirmed present in v5.18 (13
uses) and v6.6 (25 uses).
### Step 6.2: Backport complications
- Minor context mismatch: in the mainline diff, entry `0x8e60` shows "HP
Trekker" with `ALC287_FIXUP_CS35L41_I2C_2`, but in the current 7.0
tree, it shows "HP OmniBook 7 Laptop 16-bh0xxx" with
`ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED`. This means the first hunk
context won't match exactly, but the insertion points (after 0x8e62,
after 0x8ee7, after 0x8f0e) all exist and match.
- For older stable trees (pre-6.14), the file is at
`sound/pci/hda/patch_realtek.c` instead of
`sound/hda/codecs/realtek/alc269.c` (file moved in July 2025).
- Record: Minor fuzz needed for 7.0; path adjustment needed for older
trees. Trivial.
### Step 6.3: No related fixes already in stable for these specific PCI
IDs.
## PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT
### Step 7.1
- Subsystem: ALSA/HDA (audio) - **IMPORTANT** level. Audio is critical
for laptop users.
- HP is one of the largest laptop manufacturers globally.
### Step 7.2
- This file is extremely actively maintained - frequent quirk additions
for new laptop models.
## PHASE 8: IMPACT AND RISK ASSESSMENT
### Step 8.1: Affected users
- Users of HP Auster 14, HP Trekker G7JC, and HP Agusta G7KX laptops.
- These are new HP commercial/consumer laptop models.
### Step 8.2: Trigger
- Every boot on these specific laptop models. Audio is broken without
the quirk.
### Step 8.3: Failure mode
- Without the quirk: CS35L41 amplifiers not configured → no audio output
(speakers don't work).
- Severity: HIGH for affected users (audio completely non-functional).
### Step 8.4: Risk-benefit
- **Benefit**: Enables audio on specific HP laptop models. High value
for affected users.
- **Risk**: Essentially zero. Adds 4 entries to a lookup table. Only
affects the exact PCI subsystem IDs listed. Cannot affect any other
hardware.
- **Ratio**: Extremely favorable.
## PHASE 9: FINAL SYNTHESIS
### Step 9.1: Evidence
**FOR backporting:**
- Textbook hardware quirk addition (explicitly listed as an exception in
stable rules)
- 4 lines of pure data additions, zero logic changes
- Uses well-established fixup present since v5.18
- Author is the primary CS35L41 maintainer at Cirrus Logic
- Merged by the ALSA subsystem maintainer (Takashi Iwai)
- Fixes real user-facing issue (broken audio on new HP laptops)
- Identical pattern to dozens of previously-backported quirk entries
**AGAINST backporting:**
- Minor context mismatch requiring trivial adjustment
- File path differs in older stable trees (pre-6.14)
### Step 9.2: Stable Rules Checklist
1. Obviously correct and tested? **YES** - data table entries using
existing fixup
2. Fixes a real bug? **YES** - audio doesn't work on these laptops
without it
3. Important issue? **YES** - complete audio failure on affected
hardware
4. Small and contained? **YES** - 4 lines, single file, data-only
5. No new features or APIs? **CORRECT** - no new features
6. Can apply to stable? **YES** - with minor fuzz for context
### Step 9.3: Exception Category
This is a **hardware quirk addition** - one of the explicitly allowed
exception categories for stable.
### Step 9.4: Decision
Clear YES. This is a textbook example of a stable-worthy hardware quirk
addition.
## Verification
- [Phase 1] Parsed tags: Signed-off-by Stefan Binding (Cirrus Logic),
applied by Takashi Iwai (ALSA maintainer)
- [Phase 2] Diff analysis: 4 lines added to `alc269_fixup_tbl[]` data
table, all using existing `ALC287_FIXUP_CS35L41_I2C_2` fixup
- [Phase 3] git show 07bcab93946cd: confirmed
`ALC287_FIXUP_CS35L41_I2C_2` introduced January 2022 (v5.18)
- [Phase 3] git show v5.18/v6.6 confirmed fixup present: 13 uses in
v5.18, 25 in v6.6
- [Phase 3] git log author: Stefan Binding has dozens of identical quirk
additions (108c422c495dc, 720eebd514c0c, f8b1ff6555868)
- [Phase 4] b4 am: Found 2-patch series, both independent quirk
additions. v1 only, accepted without revision
- [Phase 4] b4 dig -w (on related commit): Sent to ALSA maintainers and
linux-sound list
- [Phase 5] Grep: 114 existing uses of ALC287_FIXUP_CS35L41_I2C_2 in
current tree
- [Phase 6] Fixup definition confirmed at line 6248; all insertion
points (0x8e62, 0x8ee7, 0x8f0e) present in 7.0 tree
- [Phase 6] Context mismatch: 0x8e60 entry differs between mainline and
7.0 (different name/fixup) - minor fuzz needed
- [Phase 6] File renamed from `sound/pci/hda/patch_realtek.c` to
`sound/hda/codecs/realtek/alc269.c` in v6.14 cycle
- [Phase 8] Risk: zero (data-only, only matches specific PCI IDs).
Benefit: high (enables audio on HP laptops)
**YES**
sound/hda/codecs/realtek/alc269.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index d86781e976ac0..44f0fcd20cf51 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -7198,6 +7198,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x8e60, "HP OmniBook 7 Laptop 16-bh0xxx", ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED),
SND_PCI_QUIRK(0x103c, 0x8e61, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x103c, 0x8e62, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
+ SND_PCI_QUIRK(0x103c, 0x8e75, "HP Trekker G7JC", ALC287_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x103c, 0x8e8a, "HP NexusX", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
SND_PCI_QUIRK(0x103c, 0x8e9c, "HP 16 Clipper OmniBook X X360", ALC287_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x103c, 0x8e9d, "HP 17 Turbine OmniBook X UMA", ALC287_FIXUP_CS35L41_I2C_2),
@@ -7219,8 +7220,11 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x8ee4, "HP Bantie A6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
SND_PCI_QUIRK(0x103c, 0x8ee5, "HP Bantie A6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
SND_PCI_QUIRK(0x103c, 0x8ee7, "HP Abe A6U", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
+ SND_PCI_QUIRK(0x103c, 0x8f07, "HP Agusta G7KX", ALC287_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x103c, 0x8f0c, "HP ZBook X G2i 16W", ALC236_FIXUP_HP_GPIO_LED),
SND_PCI_QUIRK(0x103c, 0x8f0e, "HP ZBook X G2i 16W", ALC236_FIXUP_HP_GPIO_LED),
+ SND_PCI_QUIRK(0x103c, 0x8f2d, "HP Auster 14", ALC287_FIXUP_CS35L41_I2C_2),
+ SND_PCI_QUIRK(0x103c, 0x8f2e, "HP Auster 14", ALC287_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x103c, 0x8f40, "HP ZBook 8 G2a 14", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
SND_PCI_QUIRK(0x103c, 0x8f41, "HP ZBook 8 G2a 16", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
SND_PCI_QUIRK(0x103c, 0x8f42, "HP ZBook 8 G2a 14W", ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED),
--
2.53.0
next prev parent reply other threads:[~2026-04-20 13:30 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-20 13:16 [PATCH AUTOSEL 7.0-5.10] ASoC: tas2552: Allow audio enable GPIO to sleep Sasha Levin
2026-04-20 13:16 ` [PATCH AUTOSEL 7.0-5.10] ASoC: Intel: bytcr_rt5651: Fix MCLK leak on platform_clock_control error Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-6.18] ALSA: usb-audio: Add iface reset and delay quirk for HUAWEI USB-C HEADSET Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 6.18] ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14IMH9 Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-5.10] ALSA: aoa/tas: Fix OF node leak on probe failure Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-5.10] ASoC: ti: davinci-mcasp: Add system suspend/resume support Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 6.18] ALSA: asihpi: avoid write overflow check warning Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-5.10] ASoC: rt5640: Handle 0Hz sysclk during stream shutdown Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-5.10] ALSA: compress: Refuse to update timestamps for unconfigured streams Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-5.10] ASoC: Intel: cht_bsw_rt5672: Fix MCLK leak on platform_clock_control error Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-5.10] ASoC: codecs: wcd-clsh: Always update buck/flyback on transitions on transitions Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 6.18] ALSA:usb:qcom: add AUXILIARY_BUS to Kconfig dependencies Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 6.18] ASoC: SDCA: Fix overwritten var within for loop Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.19] ASoC: sdw_utils: Add CS42L43B codec info Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.1] ASoC: mxs-sgtl5000: disable MCLK on error paths of mxs_sgtl5000_probe() Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 6.18] ASoC: amd: acp: update DMI quirk and add ACP DMIC for Lenovo platforms Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 6.18] ALSA: hda/realtek: Add HP ENVY Laptop 13-ba0xxx quirk Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 6.18] ALSA: usb-audio: Fix quirk flags for NeuralDSP Quad Cortex Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 6.18] ASoC: amd: yc: Add DMI quirk for ASUS EXPERTBOOK BM1403CDA Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 6.18] ALSA: hda/realtek: Add quirk for Lenovo Yoga Slim 7 14AKP10 Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 6.18] ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14IAH10 Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 6.18] ASoC: stm32_sai: fix incorrect BCLK polarity for DSP_A/B, LEFT_J Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 6.18] ASoC: amd: yc: Add DMI quirk for Thin A15 B7VF Sasha Levin
2026-04-20 13:20 ` Sasha Levin [this message]
2026-04-20 13:20 ` [PATCH AUTOSEL 7.0-6.12] ALSA: hda/realtek: Add quirk for Acer PT316-51S headset mic Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 7.0-6.18] ALSA: usb-audio: add Studio 1824 support Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 7.0-6.1] ASoC: amd: yc: Add MSI Vector A16 HX A8WHG to quirk table Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 6.18] ALSA: hda/realtek: Add quirk for Samsung Book2 Pro 360 (NP950QED) Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 6.18] ALSA: hda/realtek: Add mute LED quirk for HP Pavilion 15-eg0xxx Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 6.18] ASoC: SOF: topology: reject invalid vendor array size in token parser Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-6.12] ALSA: pcm: Use pcm_lib_apply_appl_ptr() in x32 sync_ptr Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 6.18] ASoC: soc-core: call missing INIT_LIST_HEAD() for card_aux_list Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-5.10] ASoC: Intel: bytcr_rt5640: Fix MCLK leak on platform_clock_control error Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-6.6] ALSA: hda/realtek: Add quirk for HP Spectre x360 14-ea Sasha Levin
2026-04-20 13:22 ` [PATCH AUTOSEL 7.0-6.18] ALSA: usb-audio: Add quirk flags for Feaulle Rainbow Sasha Levin
2026-04-20 13:22 ` [PATCH AUTOSEL 6.18] ALSA: hda/realtek: add HP Laptop 15-fd0xxx mute LED quirk Sasha Levin
2026-04-20 13:22 ` [PATCH AUTOSEL 6.18] ALSA: hda/realtek: Add quirk for ASUS ROG Flow Z13-KJP GZ302EAC Sasha Levin
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=20260420132314.1023554-219-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=patches@lists.linux.dev \
--cc=perex@perex.cz \
--cc=sbinding@opensource.cirrus.com \
--cc=stable@vger.kernel.org \
--cc=tiwai@suse.com \
--cc=tiwai@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox