From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F5BE3264F9 for ; Fri, 8 May 2026 22:35:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778279735; cv=none; b=CH68zHZrXSCEJkGxDS21+GK8S5lQq/l1KPkbH9gbD7VW2Whld7FayS6WzwVlwK+GFpmFnnYQ9x4WQ8Z/9qzEG3iUHaL9LNF+FlGtWh08xoCkgRRPtRpYf1AbLGDoqntjxWtlMxo83dmzk7Vr7Sj+LSGMa3UHKG9+/jHFSgR/03E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778279735; c=relaxed/simple; bh=jgoLyTJUC2DaQZjW2lRPv7tRz+Xp8O5y2vmzcJ8Cqow=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=scflXPMz+cHEw2lGtkNGUR3t2axw9oq/rpImxsXvFroxBNIND4mTZ+zUIE85XsHtn6xNjxvIOuek+xlA6WtY7pxERacGpjVqzvhQkJv0ZPYQIUkBdfVUndoFGjuhBuo9G3PJnYpEQ80wEUzIgBlswmydh/4PHfUDCF8Uqw+EUeM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=n6a8oGki; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="n6a8oGki" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-baa8c78ac7fso370197166b.0 for ; Fri, 08 May 2026 15:35:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778279732; x=1778884532; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=FZDAeJpt5wP846YrGUXohA2+OtQiagVtYiHK2L2jIog=; b=n6a8oGki+F0myMefY3vxUFae7RzQf3lPLpI3syQYblSrHrnX/fBSTuu0RsatUWYCwq f4vj+UGDfohFjo6McZQiFqlh/6WiQ0l5LIlK6I+Rcz27IUTXQN3ey/aycM4TyQekZ0RP dZPqPlFPtdrcpG/6WkS9Bkwow9jjPCjyydCd+eDPY+rT0Cb1F1Poap7/HLt3P3VzPJnO gUyRHDY+wRUGDqK+euvve8WFYo1pCBumkzfcYj7iTkhupNlauc42tTYEitR7eFkNrRIB U2WdW/xXCfl4TIH67hdLUhoki3f5DBA1PhYRapC9mrBhmTGB89Yu4m4MvLVWG9VMW/cZ PHTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778279732; x=1778884532; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FZDAeJpt5wP846YrGUXohA2+OtQiagVtYiHK2L2jIog=; b=YslTymy0xIwz/HjayMxMU5+w1yB1Z/0DzXSHi6He/HOeWbLKGMBgEBd0BmnCKuCn2A B/oaDCzvys2osHjTnGjFV0wieFr3F7DXj/bgVqENfUx0PCRHyNZ7YraS01/B3VdA35sp 7wZYs8ofGYPFDH/zfbeFEefT/SblDlaVKazERDspC1n7IBZ6XHquI6l/B9wSOAzq7mn2 9x15PrE9GP6KW2apj/Q1uPqk64cFbsCsQn4mf4AMkVO7bedD6pclPHeTFiUsl7yVRrn4 nzchJ4v+T04BchjZT1YSDlMsYvX5lcmencV4UdAWn5144GHTyme7ODh/DdP+JSFecw+v mf6Q== X-Forwarded-Encrypted: i=1; AFNElJ/KGGW53cf0SJpp7jF2AIYo8BpbXD3L/27dBGxIaLaejvpVSDF0LpDoOATbxrHvMHlzr8OHHVWdu51ZxcE=@vger.kernel.org X-Gm-Message-State: AOJu0Yz5p9DcrarS7ecFFbKysQ9h4aQ/jClaHLhVGp97YMwJ1r1B+9YB csJa1BAeQ0PI6sVwjNMy5TQetnESFyCDlk6Z+BE7mZitUt2doBYM8+Xj X-Gm-Gg: Acq92OFNZTNSgQj1St3oQaRK5FnqYj2sUFYXja2LtQ5jVWMJv00T0cNyp26v8jyvVsh e4PEOOlpo/TXlScy9Nl9kv0sK8+WxwgBHm98EJe/YKJlOoOzAXJRqpDrWfyaR24+4Mwuq2p1lEo k77vwFlUY4TADgCm3bVhPLFGCPr2Ey0N8p3I6yVyd5555F3lXox7XPLhCo370uhr8Ui3czV5aRH fbKztK25/T0btczSNdEYudcgC0yHBJ3Rq5uWA/4r/Mj7ovdVYamxR5ZjIfAQgmsCqlST21Dh0jE X7uA01TI2gqqKyr13zVX6OmFCMspMgXne+sdbNTztOM/RakCicf4dtIPsaGg9EDHLpz9muZa9MS bmKGYBoQH4p67V9CcV2GlrCc7+B88HKQTkzDC6hgs5lqyQB8AhpwAWVBtVQxkVURbV9c9zzPhQ0 Ed3jgZ9eZ17/IiyqBhgA/Y29l0Ed+vDBrBohwhXdLkQSliENaRfys9xK/wQ7e1sYxEpSGMbPoX0 CPWVPZ5 X-Received: by 2002:a17:907:fd8a:b0:bc2:1dab:3ea0 with SMTP id a640c23a62f3a-bc56aa45b32mr789198766b.8.1778279731722; Fri, 08 May 2026 15:35:31 -0700 (PDT) Received: from powerpenguini-l140cu (staticline-31-183-167-127.toya.net.pl. [31.183.167.127]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bcac3a8063dsm143968066b.41.2026.05.08.15.35.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 15:35:30 -0700 (PDT) From: =?UTF-8?q?Mateusz=20Ja=C5=9Bkiewicz?= To: Thomas Renninger , Shuah Khan , "John B . Wyatt IV" , John Kacur Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Mateusz=20Ja=C5=9Bkiewicz?= Subject: [PATCH] cpupower: Implement powercap enabled setters Date: Sat, 9 May 2026 00:35:24 +0200 Message-ID: <20260508223524.1314573-1-jaskiewiczteo@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit powercap_set_enabled() and powercap_zone_set_enabled() are part of the public libcpupower API, but both currently return success without updating sysfs. Write the requested value to the matching enabled attribute so callers can actually enable or disable the powercap control type or zone, and report write failures back to the caller. Signed-off-by: Mateusz Jaƛkiewicz --- tools/power/cpupower/lib/powercap.c | 43 +++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/tools/power/cpupower/lib/powercap.c b/tools/power/cpupower/lib/powercap.c index 94a0c69e5..6d8b83428 100644 --- a/tools/power/cpupower/lib/powercap.c +++ b/tools/power/cpupower/lib/powercap.c @@ -70,6 +70,27 @@ static int sysfs_get_enabled(char *path, int *mode) return ret; } +static int sysfs_set_enabled(const char *path, int mode) +{ + char yes_no; + int fd; + ssize_t ret; + + if (mode != 0 && mode != 1) + return -1; + + yes_no = mode ? '1' : '0'; + fd = open(path, O_WRONLY); + if (-1 == fd) + return -1; + ret = write(fd, &yes_no, 1); + if (ret != 1) { + close(fd); + return -1; + } + return close(fd); +} + int powercap_get_enabled(int *mode) { char path[SYSFS_PATH_MAX] = PATH_TO_POWERCAP "/intel-rapl/enabled"; @@ -77,17 +98,13 @@ int powercap_get_enabled(int *mode) return sysfs_get_enabled(path, mode); } -/* - * TODO: implement function. Returns dummy 0 for now. - */ int powercap_set_enabled(int mode) { - return 0; + return sysfs_set_enabled(PATH_TO_RAPL "/enabled", mode); } - /* * Hardcoded, because rapl is the only powercap implementation -- * this needs to get more generic if more powercap implementations + * this needs to get more generic if more powercap implementations * should show up */ int powercap_get_driver(char *driver, int buflen) @@ -180,8 +197,18 @@ int powercap_zone_get_enabled(struct powercap_zone *zone, int *mode) int powercap_zone_set_enabled(struct powercap_zone *zone, int mode) { - /* To be done if needed */ - return 0; + char path[SYSFS_PATH_MAX]; + int ret; + + if (!zone) + return -1; + + ret = snprintf(path, sizeof(path), "%s/%s/enabled", + PATH_TO_POWERCAP, zone->sys_name); + if (ret < 0 || ret >= (int)sizeof(path)) + return -1; + + return sysfs_set_enabled(path, mode); } -- 2.54.0