From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Calvin Owens <calvin@wbinvd.org>, Len Brown <len.brown@intel.com>,
Sasha Levin <sashal@kernel.org>,
lenb@kernel.org, linux-pm@vger.kernel.org
Subject: [PATCH AUTOSEL 6.16-6.12] tools/power turbostat: Handle cap_get_proc() ENOSYS
Date: Sun, 10 Aug 2025 12:51:57 -0400 [thread overview]
Message-ID: <20250810165158.1888206-15-sashal@kernel.org> (raw)
In-Reply-To: <20250810165158.1888206-1-sashal@kernel.org>
From: Calvin Owens <calvin@wbinvd.org>
[ Upstream commit d34fe509f5f76d9dc36291242d67c6528027ebbd ]
Kernels configured with CONFIG_MULTIUSER=n have no cap_get_proc().
Check for ENOSYS to recognize this case, and continue on to
attempt to access the requested MSRs (such as temperature).
Signed-off-by: Calvin Owens <calvin@wbinvd.org>
Signed-off-by: Len Brown <len.brown@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
**Backport Status: YES**
This commit should be backported to stable kernel trees for the
following reasons:
## Bug Fix Nature
The commit fixes a clear bug where turbostat fails to work on kernels
configured with `CONFIG_MULTIUSER=n`. Without this fix, turbostat would
incorrectly fail when `cap_get_proc()` returns NULL with `ENOSYS`,
preventing users from accessing MSRs (like temperature readings) even
when they should be able to.
## Small and Contained Change
The fix is minimal - only 9 lines added, 1 line removed. The change is
entirely contained within the `check_for_cap_sys_rawio()` function in
turbostat.c:
- It adds a check for `errno == ENOSYS` when `cap_get_proc()` returns
NULL
- Returns 0 (success) in this specific case to allow MSR access attempts
to proceed
- Preserves the original error handling (return 1) for all other failure
cases
## No Side Effects or Architectural Changes
The change doesn't introduce any new features or architectural
modifications. It simply adds proper error handling for a specific
configuration scenario that was previously not handled correctly. The
logic flow remains the same for all other cases - only the ENOSYS case
gets special treatment.
## User Impact
This affects real users running embedded or specialized Linux systems
with `CONFIG_MULTIUSER=n` (single-user mode kernels). Without this fix,
turbostat is completely broken on such systems, unable to read MSRs for
temperature monitoring and other power management features.
## Stable Tree Criteria Compliance
The fix meets stable kernel criteria:
- **Fixes a real bug**: turbostat failure on CONFIG_MULTIUSER=n kernels
- **Already upstream**: The commit is in the mainline kernel
- **Minimal risk**: The change only affects the specific error case and
doesn't alter behavior for normal configurations
- **Clear and obvious**: The fix is straightforward - checking for
ENOSYS and handling it appropriately
## Tool-Specific Nature
Since this is a userspace tool fix (tools/power/x86/turbostat/), it has
even lower risk of causing kernel regressions while providing immediate
benefit to affected users.
The commit is an ideal candidate for stable backporting as it fixes a
specific, reproducible issue with minimal code changes and no risk to
systems where `CONFIG_MULTIUSER=y` (the common case).
tools/power/x86/turbostat/turbostat.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index 46ee85216373..00fdb6589bea 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -6573,8 +6573,16 @@ int check_for_cap_sys_rawio(void)
int ret = 0;
caps = cap_get_proc();
- if (caps == NULL)
+ if (caps == NULL) {
+ /*
+ * CONFIG_MULTIUSER=n kernels have no cap_get_proc()
+ * Allow them to continue and attempt to access MSRs
+ */
+ if (errno == ENOSYS)
+ return 0;
+
return 1;
+ }
if (cap_get_flag(caps, CAP_SYS_RAWIO, CAP_EFFECTIVE, &cap_flag_value)) {
ret = 1;
--
2.39.5
next prev parent reply other threads:[~2025-08-10 16:52 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-10 16:51 [PATCH AUTOSEL 6.16-5.10] block: avoid possible overflow for chunk_sectors check in blk_stack_limits() Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-6.12] tools/power turbostat: Handle non-root legacy-uncore sysfs permissions Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-6.12] ALSA: hda/realtek: add LG gram 16Z90R-A to alc269 fixup table Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-6.12] lib/sbitmap: convert shallow_depth from one word to the whole sbitmap Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-6.1] ASoC: Intel: avs: Fix uninitialized pointer error in probe() Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-6.12] smb: client: don't call init_waitqueue_head(&info->conn_wait) twice in _smbd_get_connection Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-5.4] pNFS: Fix stripe mapping in block/scsi layout Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-5.4] pNFS: Fix uninited ptr deref " Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-5.4] net: phy: smsc: add proper reset flags for LAN8710A Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-6.15] ASoC: Intel: sof_sdw: Add quirk for Alienware Area 51 (2025) 0CCC SKU Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16] regmap: irq: Free the regmap-irq mutex Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-6.12] tools/power turbostat: Fix build with musl Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16] irqchip/mvebu-gicp: Clear pending interrupts on init Sasha Levin
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-5.4] pNFS: Fix disk addr range check in block/scsi layout Sasha Levin
2025-08-10 16:51 ` Sasha Levin [this message]
2025-08-10 16:51 ` [PATCH AUTOSEL 6.16-5.4] pNFS: Handle RPC size limit for layoutcommits 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=20250810165158.1888206-15-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=calvin@wbinvd.org \
--cc=len.brown@intel.com \
--cc=lenb@kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=patches@lists.linux.dev \
--cc=stable@vger.kernel.org \
/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