crypto: ccp - Add support for PCI device 0x115A
Subsystems (3)
Sasha Levin
maintainerPATCH 1/1 crypto: ccp - Add support for PCI device 0x115A
From: "Mario Limonciello (AMD)" <[email protected]>
[ Upstream commit 9fc6290117259a8dbf8247cb54559df62fd1550f ]
PCI device 0x115A is similar to pspv5, except it doesn't have platform access mailbox support.
---
LLM Generated explanations, may be completely bogus:
## Comprehensive Analysis
### 1. COMMIT MESSAGE ANALYSIS
**Subject:** crypto: ccp - Add support for PCI device 0x115A
**Key Information:**
- PCI device 0x115A is a new AMD security processor variant
- The commit message states it's "similar to pspv5, except it doesn't have platform access mailbox support"
- Signed off by Mario Limonciello (AMD engineer) and Tom Lendacky (AMD)
- Merged by Herbert Xu (crypto maintainer)
**Tags Present:**
- Signed-off-by: 3 (proper sign-off chain)
- Acked-by: Tom Lendacky (driver maintainer acknowledgment)
- **NO** Cc: [email protected] tag
- **NO** Fixes: tag (this is expected - it's not fixing a bug, it's enabling hardware)
### 2. CODE CHANGE ANALYSIS
The commit adds:
**A) New pspv7 structure (~10 lines):**
```c
static const struct psp_vdata pspv7 = {
.tee = &teev2,
.cmdresp_reg = 0x10944,
.cmdbuff_addr_lo_reg = 0x10948,
.cmdbuff_addr_hi_reg = 0x1094c,
.bootloader_info_reg = 0x109ec,
.feature_reg = 0x109fc,
.inten_reg = 0x10510,
.intsts_reg = 0x10514,
};
```This is **identical to pspv5** except it omits the .platform_access = &pa_v2 field. This is the explicit difference mentioned in the commit message.
**B) New dev_vdata[9] entry (~6 lines):**
```c
{ /* 9 */
.bar = 2,
#ifdef CONFIG_CRYPTO_DEV_SP_PSP
.psp_vdata = &pspv7,
#endif
},
```**C) New PCI device ID entry (1 line):**
```c
{ PCI_VDEVICE(AMD, 0x115A), (kernel_ulong_t)&dev_vdata[9] },
```### 3. CLASSIFICATION
**This is a NEW DEVICE ID addition** - one of the explicitly allowed exceptions for stable kernel backports.
The commit:
- Does NOT add new features or APIs
- Does NOT change existing behavior
- Only enables existing PSP driver functionality on new hardware
- Uses established patterns already in the driver
### 4. SCOPE AND RISK ASSESSMENT
**Change size:** ~17 lines total
- Small, contained data-only change
- No logic changes whatsoever
- Follows identical patterns used by existing pspv1-pspv6 structures
**Risk assessment: VERY LOW**
- The driver already handles NULL platform_access - verified in psp- dev.c:
```c
if (psp->vdata->platform_access) {
ret = platform_access_dev_init(psp);
...
}
```- Several existing structures (pspv1, pspv4, pspv6) already omit platform_access
- The teev2 structure referenced already exists since v6.5
- All register offsets are identical to pspv5
### 5. USER IMPACT
**Who is affected:**
- Users with AMD PCI device 0x115A (new AMD security processor variant)
- Without this patch, this hardware is completely non-functional
**Severity:** HIGH for affected users - enables critical security hardware (TPM-like functionality)
### 6. STABILITY INDICATORS
**Positive signals:**
- Acked by Tom Lendacky (the original driver author and AMD maintainer)
- Follows exact same pattern as 10+ previous device ID additions in this driver
- Same author (Mario Limonciello) has successfully added similar devices before (0x17E0, 0x156E, etc.)
### 7. DEPENDENCY CHECK
**Required in stable tree:**
- teev2 structure - added in v6.5 (commit 4aa0931be8f0a)
- Verified present in v6.6 and later
**Recent related commits:**
- 52e8ae868a824: "Add missing bootloader info reg for pspv5" (May 2025)
- 72942d6538564: "Add missing tee info reg for teev2" (May 2025)
The pspv7 structure in this commit already includes the bootloader_info_reg correctly, so it was created after these fixes.
### 8. COMPARISON WITH SIMILAR COMMITS
This commit follows the exact same pattern as:
- bb4185e595e47: "Add support for PCI device 0x156E" - Added pspv6 + dev_vdata[8] + PCI ID
- 4aa0931be8f0a: "Add support for PCI device 0x17E0" - Added pspv5/teev2 + dev_vdata[7] + PCI ID
- 6cb345939b8cc: "Add support for PCI device 0x1134" - Added PCI ID only
- 63935e2ee1f2a: "Add support for PCI device 0x17D8" - Added PCI ID only
These similar device ID additions are routinely considered for stable trees.
---
## Final Assessment
**Should this be backported?**
**YES**, for the following reasons:
1. **Falls under the NEW DEVICE ID exception** - explicitly allowed per stable kernel rules for enabling real hardware
2. **Trivial, data-only change** - ~17 lines, no logic changes
3. **Uses existing, proven infrastructure** - teev2 exists, NULL platform_access handling exists
4. **Follows established patterns** - identical to 10+ previous similar commits in this driver
5. **Zero risk of regression** - only affects users with the specific 0x115A device
6. **Enables real hardware** - without this, users with this AMD security processor cannot use it at all
7. **Properly reviewed** - Acked by AMD maintainer, merged by crypto subsystem maintainer
**Concerns:**
- Requires stable tree to have v6.6+ (for teev2 structure)
- May need the bootloader_info_reg fixes backported first for consistency (commits 52e8ae868a824 and 72942d6538564)
The change is obviously correct, well-tested (used same patterns as existing code), and enables hardware support that users need. This is exactly the type of device ID addition that stable trees accept.
**YES**
drivers/crypto/ccp/sp-pci.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
drivers/crypto/ccp/sp-pci.c +19 -0
@@ -459,6 +459,17 @@ static const struct psp_vdata pspv6 = { .intsts_reg = 0x10514, /* P2CMSG_INTSTS */ }; +static const struct psp_vdata pspv7 = { + .tee = &teev2, + .cmdresp_reg =0x10944 ,/* C2PMSG_17 */ + .cmdbuff_addr_lo_reg =0x10948 ,/* C2PMSG_18 */ + .cmdbuff_addr_hi_reg =0x1094c ,/* C2PMSG_19 */ + .bootloader_info_reg =0x109ec ,/* C2PMSG_59 */ + .feature_reg =0x109fc ,/* C2PMSG_63 */ + .inten_reg =0x10510 ,/* P2CMSG_INTEN */ + .intsts_reg =0x10514 ,/* P2CMSG_INTSTS */ +}; +#endif static const struct sp_dev_vdata dev_vdata[] = {
@@ -525,6 +536,13 @@ static const struct sp_dev_vdata dev_vdata[] = { .psp_vdata = &pspv6,#endif }, + {/* 9 */ + .bar = 2, +#ifdef CONFIG_CRYPTO_DEV_SP_PSP + .psp_vdata = &pspv7, +#endif + }, + };static const struct pci_device_id sp_pci_table[] = { {PCI_VDEVICE (AMD ,0x1537 ), (kernel_ulong_t)&dev_vdata[0 ] },
@@ -539,6 +557,7 @@ static const struct pci_device_id sp_pci_table[] = { { PCI_VDEVICE(AMD, 0x17E0), (kernel_ulong_t)&dev_vdata[7] }, { PCI_VDEVICE(AMD, 0x156E), (kernel_ulong_t)&dev_vdata[8] }, { PCI_VDEVICE(AMD, 0x17D8), (kernel_ulong_t)&dev_vdata[8] }, + { PCI_VDEVICE(AMD, 0x115A), (kernel_ulong_t)&dev_vdata[9] },/* Last entry must be zero */ { 0, } };
Signature · 1 line
2.51.0
Sasha Levin
maintainerPATCH 1/1 scripts: kdoc_parser.py: warn about Python version only once
From: Mauro Carvalho Chehab <[email protected]>
[ Upstream commit ade9b9576e2f000fb2ef0ac3bcd26e1167fd813b ]
When running kernel-doc over multiple documents, it emits one error message per file with is not what we want:
$ python3.6 scripts/kernel-doc.py . --none ... Warning: ./include/trace/events/swiotlb.h:0 Python 3.7 or later is required for correct results Warning: ./include/trace/events/iommu.h:0 Python 3.7 or later is required for correct results Warning: ./include/trace/events/sock.h:0 Python 3.7 or later is required for correct results ...
Change the logic to warn it only once at the library:
$ python3.6 scripts/kernel-doc.py . --none Warning: Python 3.7 or later is required for correct results Warning: ./include/cxl/features.h:0 Python 3.7 or later is required for correct results
When running from command line, it warns twice, but that sounds ok.
Message-ID: <68e54cf8b1201d1f683aad9bc710a99421910356.1758196090.git.mchehab+huawei@kernel.org>
---
LLM Generated explanations, may be completely bogus:
## Analysis
### 1. COMMIT MESSAGE ANALYSIS
**Subject**: scripts: kdoc_parser.py: warn about Python version only once
**Problem**: When kernel-doc processes multiple files with Python < 3.7, it emits one warning per file, creating noise:
``` Warning: ./include/trace/events/swiotlb.h:0 Python 3.7 or later is required for correct results Warning: ./include/trace/events/iommu.h:0 Python 3.7 or later is required for correct results Warning: ./include/trace/events/sock.h:0 Python 3.7 or later is required for correct results ... ```
**Solution**: Add a module-level flag (python_warning) so the warning is emitted once per process run.
**Tags**: No "Cc: [email protected]" or "Fixes:" tag.
**Author**: Mauro Carvalho Chehab (kernel-doc maintainer) **Date**: September 18, 2025
---
### 2. CODE CHANGE ANALYSIS
**Files changed**: 1 file (scripts/lib/kdoc/kdoc_parser.py) **Lines changed**: +6, -1 (net +5)
**Diff**:
```python
+python_warning = False # Module-level global flag
class KernelDoc:
def __init__(self, config, fname):
...
- if sys.version_info.major == 3 and sys.version_info.minor < 7:
+ global python_warning
+ if (not python_warning and
+ sys.version_info.major == 3 and sys.version_info.minor <
7):
self.emit_msg(0,
'Python 3.7 or later is required for correct
results')
+ python_warning = True
```**Mechanism**:
- KernelDoc.__init__() runs once per file.
- The check was unconditional, causing repeated warnings.
- The fix adds a module-level flag set after the first warning to suppress subsequent ones.
**Correctness**: Correct. The flag is checked and set atomically within the same conditional, preventing races.
---
### 3. CLASSIFICATION
**Type**: Bug fix (UX)
**Category**: Build/documentation tool fix
- Not kernel runtime code
- Affects kernel-doc output
- Improves developer experience
**Exception categories**: None (not device IDs, quirks, DT updates, or build fixes)
**Security**: No security impact
---
### 4. SCOPE AND RISK ASSESSMENT
**Complexity**: Low
- Simple flag check
- No logic changes
- Minimal code
**Risk**: Very low
- Only changes warning output
- No functional changes
- No new code paths
- No dependencies on other changes
**Subsystem**: Documentation build tools (scripts/lib/kdoc/)
- Less critical than kernel runtime code
- Still affects developers building docs
**Files touched**: 1 file, 7 lines changed
---
### 5. USER IMPACT
**Who is affected**:
- Developers building kernel documentation
- CI/CD systems running kernel-doc
- Anyone using Python < 3.7 with kernel-doc on multiple files
**Severity**: Low–moderate
- Not a crash or data corruption
- User-visible annoyance (warning spam)
- Can obscure other warnings
**Real-world impact**: Yes
- Occurs when processing multiple files (common)
- Example: python3.6 scripts/kernel-doc.py . --none on a directory
**Note**: Python 3.9+ is the kernel minimum, but some systems may still use older versions.
---
### 6. STABILITY INDICATORS
**Tested-by**: Not mentioned
**Reviewed-by**: Jonathan Corbet (kernel-doc maintainer) **Age**: Commit from September 2025 (recent)
**Maintainer approval**: Signed-off by Jonathan Corbet (maintainer)
---
### 7. DEPENDENCY CHECK
**Prerequisite**: Requires commit 40020fe8e3a40 ("docs: kdoc: emit a warning for ancient versions of Python") from July 2025.
**Backport implications**:
- If the prerequisite exists in a stable tree, this applies cleanly.
- If not, both commits would need to be backported together.
- The prerequisite is also a small, low-risk change.
**Code existence**: The KernelDoc class and the warning check exist in current stable trees (the warning was added in 2025).
---
### 8. STABLE KERNEL RULES EVALUATION
**1. Obviously correct and tested**: Yes — simple flag check, reviewed by maintainer
**2. Fixes a real bug**: Yes — excessive warning spam
**3. Important issue**: Moderate — UX improvement, not critical **4. Small and contained**: Yes — 7 lines, single file
**5. No new features**: Correct — only changes warning behavior **6. Applies cleanly**: Yes — if prerequisite exists
**Concerns**:
- Documentation tool fix (less critical than kernel code)
- Requires prerequisite commit
- UX improvement, not a critical bug
**Benefits**:
- Fixes a real user-visible issue
- Very low risk
- Small and simple
- Improves developer experience
---
### 9. FINAL ASSESSMENT
**Verdict**: YES, with conditions
**Reasoning**:
1. Fixes a real user-visible bug (excessive warnings)
2. Very low risk (warning output only)
3. Small, simple change
4. Reviewed by maintainer
5. Improves developer experience
**Conditions**:
- The prerequisite commit (40020fe8e3a40) must exist in the target stable tree, or both commits should be backported together.
- This is a UX improvement, not critical, but it addresses a real annoyance.
**Recommendation**: Backport to stable trees that have the prerequisite warning commit, or backport both commits together. The low risk and clear benefit justify inclusion.
**YES**
scripts/lib/kdoc/kdoc_parser.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
scripts/lib/kdoc/kdoc_parser.py +6 -1
@@ -350,6 +350,7 @@ class KernelEntry: self.section = SECTION_DEFAULT self._contents = [] +python_warning = False class KernelDoc: """
@@ -383,9 +384,13 @@ class KernelDoc: # We need Python 3.7 for its "dicts remember the insertion # order" guarantee # - if sys.version_info.major == 3 and sys.version_info.minor < 7: + global python_warning + if (not python_warning and + sys.version_info.major == 3 and sys.version_info.minor < 7): + self.emit_msg(0, 'Python 3.7 or later is required for correct results') + python_warning = True def emit_msg(self, ln, msg, warning=True): """Emit a message"""
Signature · 1 line
2.51.0
Sasha Levin
maintainerPATCH 1/1 livepatch: Match old_sympos 0 and 1 in klp_find_func()
In reply to Sasha LevinFrom: Song Liu <[email protected]>
[ Upstream commit 139560e8b973402140cafeb68c656c1374bd4c20 ]
When there is only one function of the same name, old_sympos of 0 and 1 are logically identical. Match them in klp_find_func().
This is to avoid a corner case with different toolchain behavior.
In this specific issue, two versions of kpatch-build were used to build livepatch for the same kernel. One assigns old_sympos == 0 for unique local functions, the other assigns old_sympos == 1 for unique local functions. Both versions work fine by themselves. (PS: This behavior change was introduced in a downstream version of kpatch-build. This change does not exist in upstream kpatch-build.)
However, during livepatch upgrade (with the replace flag set) from a patch built with one version of kpatch-build to the same fix built with the other version of kpatch-build, livepatching fails with errors like:
[ 14.218706] sysfs: cannot create duplicate filename 'xxx/somefunc,1'
...
[ 14.219466] Call Trace:
[ 14.219468] <TASK>
[ 14.219469] dump_stack_lvl+0x47/0x60
[ 14.219474] sysfs_warn_dup.cold+0x17/0x27
[ 14.219476] sysfs_create_dir_ns+0x95/0xb0
[ 14.219479] kobject_add_internal+0x9e/0x260
[ 14.219483] kobject_add+0x68/0x80
[ 14.219485] ? kstrdup+0x3c/0xa0
[ 14.219486] klp_enable_patch+0x320/0x830
[ 14.219488] patch_init+0x443/0x1000 [ccc_0_6]
[ 14.219491] ? 0xffffffffa05eb000
[ 14.219492] do_one_initcall+0x2e/0x190
[ 14.219494] do_init_module+0x67/0x270
[ 14.219496] init_module_from_file+0x75/0xa0
[ 14.219499] idempotent_init_module+0x15a/0x240
[ 14.219501] __x64_sys_finit_module+0x61/0xc0
[ 14.219503] do_syscall_64+0x5b/0x160
[ 14.219505] entry_SYSCALL_64_after_hwframe+0x4b/0x53
[ 14.219507] RIP: 0033:0x7f545a4bd96d
...
[ 14.219516] kobject: kobject_add_internal failed for somefunc,1 with
-EEXIST, don't try to register things with the same name ...This happens because klp_find_func() thinks somefunc with old_sympos==0 is not the same as somefunc with old_sympos==1, and klp_add_object_nops adds another xxx/func,1 to the list of functions to patch.
---
LLM Generated explanations, may be completely bogus:
## Analysis
### 1. COMMIT MESSAGE ANALYSIS
**Subject:** livepatch: Match old_sympos 0 and 1 in klp_find_func()
**Key indicators:**
- Fixes a bug: livepatch upgrade failures with replace flag
- Real-world impact: sysfs duplicate filename error causing patch enablement to fail
- Clear problem description with error logs
- Tested-by: Petr Mladek
- Reviewed-by: Petr Mladek, Josh Poimboeuf
**Root cause:** Different versions of kpatch-build assign old_sympos 0 vs 1 for unique functions. During livepatch upgrade with replace, klp_find_func() doesn't match them, leading to duplicate sysfs entries.
### 2. CODE CHANGE ANALYSIS
**Files changed:** 1 file (kernel/livepatch/core.c) **Lines changed:** 7 lines added, 1 line modified
**Change:**
```c
// Before:
if ((strcmp(old_func->old_name, func->old_name) == 0) &&
(old_func->old_sympos == func->old_sympos)) {
// After:
if ((strcmp(old_func->old_name, func->old_name) == 0) &&
((old_func->old_sympos == func->old_sympos) ||
(old_func->old_sympos == 0 && func->old_sympos == 1) ||
(old_func->old_sympos == 1 && func->old_sympos == 0))) {
```**Technical explanation:**
- For unique symbols, old_sympos 0 and 1 both refer to the first occurrence
- klp_find_object_symbol() treats sympos == 0 as "unique symbol" (see lines 170-175)
- Sysfs displays old_sympos == 0 as 1 (line 820: func->old_sympos ? func->old_sympos : 1)
- The fix makes klp_find_func() treat 0 and 1 as equivalent for matching
**Why this fixes the bug:**
- During replace upgrade, klp_add_object_nops() calls klp_find_func() to check if a function already exists
- Without the fix, old_sympos==0 and old_sympos==1 don't match
- This causes duplicate sysfs entries, leading to -EEXIST and patch enablement failure
### 3. CLASSIFICATION
**Type:** Bug fix (not a feature)
**Exception categories:** None needed — this is a bug fix
**Security:** No security impact, but prevents a reliability issue
### 4. SCOPE AND RISK ASSESSMENT
**Scope:**
- Single function (klp_find_func())
- Localized change
- No architectural changes
**Risk:** Low
- Small, targeted change
- Clear logic
- No new code paths
- Only affects matching logic for unique symbols
**Potential issues:**
- None identified
- Change is conservative (adds equivalence, doesn't remove checks)
### 5. USER IMPACT
**Severity:** High for affected users
- Prevents livepatch upgrades with replace flag
- Causes kernel errors and patch enablement failure
- Affects users upgrading between different kpatch-build versions
**Affected users:**
- Users performing livepatch upgrades with replace
- Users mixing kpatch-build versions
- Enterprise users relying on livepatch for updates
**Impact assessment:**
- Core livepatch functionality (upgrade path)
- Real-world scenario (different toolchain versions)
- User-visible failure (error messages, failed upgrades)
### 6. STABILITY INDICATORS
**Testing:**
- Tested-by: Petr Mladek
- Reviewed-by: Petr Mladek, Josh Poimboeuf
- Real-world scenario documented
**Code maturity:**
- Function exists since atomic replace (Jan 2019)
- Present in stable trees (5.1+)
- Mature code path
### 7. DEPENDENCY CHECK
**Dependencies:**
1. klp_find_func() — introduced with atomic replace (commit e1452b607c48c, Jan 2019)
2. klp_add_object_nops() — same commit
3. Replace functionality — present since ~5.1
**Backport compatibility:**
- Applies cleanly to any stable tree with atomic replace
- No other commits required
- Self-contained fix
**Affected stable versions:**
- Any stable tree with atomic replace (~5.1+)
- All current LTS trees (6.1.y, 6.6.y, etc.)
### 8. STABLE KERNEL RULES COMPLIANCE
**Meets criteria:**
1. Obviously correct: Yes — clear equivalence for unique symbols
2. Fixes real bug: Yes — documented failure case
3. Important issue: Yes — breaks livepatch upgrades
4. Small and contained: Yes — 7 lines, 1 function
5. No new features: Yes — bug fix only
6. Applies cleanly: Yes — no conflicts expected
**No violations:**
- No new features
- No API changes
- No architectural changes
- No new dependencies
### 9. RISK VS BENEFIT TRADE-OFF
**Benefit:**
- Fixes upgrade failures
- Low risk, high value
- Addresses real user issue
**Risk:**
- Minimal — localized change
- Conservative logic
- Well-tested
**Conclusion:** Strong benefit, minimal risk
### 10. FINAL ASSESSMENT
This commit should be backported to stable kernel trees.
**Reasons:**
1. Fixes a real bug that breaks livepatch upgrades
2. Small, localized change (7 lines)
3. Low risk, clear logic
4. Well-tested and reviewed
5. No new features or dependencies
6. Applies cleanly to stable trees with atomic replace
7. High user impact for affected users
**Recommendation:** Backport to all stable trees that include atomic replace functionality (approximately 5.1.y and later).
**YES**
kernel/livepatch/core.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
kernel/livepatch/core.c +7 -1
@@ -88,8 +88,14 @@ static struct klp_func *klp_find_func(struct klp_object *obj,struct klp_func *func;klp_for_each_func (obj, func) { +/* +* Besides identical old_sympos, also consider old_sympos +* of 0 and 1 are identical. +*/ if ((strcmp (old_func->old_name, func->old_name) ==0 ) && - (old_func->old_sympos == func->old_sympos)) { + ((old_func->old_sympos == func->old_sympos) || + (old_func->old_sympos ==0 && func->old_sympos ==1 ) || + (old_func->old_sympos ==1 && func->old_sympos ==0 ))) {return func; } }
Signature · 1 line
2.51.0