From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oi1-f181.google.com (mail-oi1-f181.google.com [209.85.167.181]) (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 311E822D7B9 for ; Mon, 11 May 2026 21:01:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778533292; cv=none; b=WhvqY013CW+lfY3bHZNfYBKQqsRcuAAaAX5MOjdwx7bw8tmqNAPeXemVoILR0nhXs7Rl4kcxVMZrLz8mdpyehzwls5jvGDoE+Y0EFquVeoLkxmkGS2hcGgvFN/Vq6X/iLQl5Aejgsl8A2v0Kh8afYjL9jR8h1O/xg6JKt4dVY8Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778533292; c=relaxed/simple; bh=MbyntfESUSQ376pq7l61Mm9i+0drVptg+gEMrNuoL+I=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=p66Jgr7W/8HojBj61ph9ERboMaS1lnBCsbqC48ti+mYIFiz2mhpwOYE9rHOqERvuW9w4b+WiBiad1V6D+J561h5IW1Nkf3JRMbe9NgXtmg1cDjdkafIEyYyd558J93UF1Jh+yAXmYGhJ6IBJE3esWfl2rC5tzalsTA7ZMNd+vww= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linuxfoundation.org; spf=pass smtp.mailfrom=linuxfoundation.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=R/2JPElX; arc=none smtp.client-ip=209.85.167.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linuxfoundation.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linuxfoundation.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="R/2JPElX" Received: by mail-oi1-f181.google.com with SMTP id 5614622812f47-479d4df9035so3796536b6e.0 for ; Mon, 11 May 2026 14:01:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; t=1778533289; x=1779138089; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=tRjN2gtjd4eOAWZYX56Cs+TAhwG0rqDE9fnVl6jT2Iw=; b=R/2JPElXeDpkAVArXYU+Vt+ufQPgYyl7qm+Bi6CZOjeEO3OibG6TMyFhejFAhBXT8l eqpB1FMvmqnQTpDEGBFlSs00M1WocNzoYwv7snGQ9L6AGlHLMb4i4mIp0Ps9vdPYFANX gnQF8AaS4k3wUnzJaKB7VmX819vtja8bU0WMk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778533289; x=1779138089; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=tRjN2gtjd4eOAWZYX56Cs+TAhwG0rqDE9fnVl6jT2Iw=; b=BRPBww/SdIP5/UDfoTSY3+zTjUYGnEIfl+YBTJQQ2NjTR/6WEgyo+Y3L9+uPZvglWf 2/mXgY7HhrG+PV/iAOhOqcc178vakTZpbjYgUZJp+jQV/uapCSXr1nTteGVTn20PpEC3 TBo2nPObRekbx4EpujQZfltCdO3bxy1y+NEi4QrSz+XNICAfOnJdmfZ0oNONElfBEQjI G1q06wZ58ESyZ20LOJ/ayjnvZJXYsczIfiQvPiEf6DiIN8dBeYQl+wrPWnoU/i3FZTua HDf6vHSMTve/b1gjmpAKCfjXXeulaF6HPwtUK2juUD8GpF2r87bBGQstS3fdYah5saWW gvYQ== X-Forwarded-Encrypted: i=1; AFNElJ9J4BJ0HPONrIErXwq1kg0/rt2BiLQZcPI/Xx8NvVqR+Y36w3JVS93ys+XBLX/fP3CXdwz9bjDDpHBdzLE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1XQM1F2jyPz4ara84JO5MCrhBFakmQedeuamkownOoEs5IEBn 9HY82TqeCq8wmSYBPdv4NRE+Prr36ltvFCu2E0WWEA1OqFeoNgkQxmgLtRWeji346eg= X-Gm-Gg: Acq92OHzcVbUKyrP75u3OoMHDzmEPs9Bz7Lw/EPxs1NTRz9g9rKHPy1xFIwGw2/Bqiz DA6m44ZYEekkY3TbqkQs3KkTOKVuNFSLEFHHz9aLhw0ZWNA0clryHFrCUgo7EkfWl8WiBNtxp4d HkD8vs765RduM/zMjOD07Cz8B1jdp6gHUsQYfX2Ak1zl7Xdidui4w1GMJ6iPfv6KyVwnzBFLpRn Bvy+w/EQY+raPZQTAg02x59d6JctNk34WubNZICjlDib2YiiBzQ52YbcfyGBJ4b4EJ4w5z4LfuR nug/EoJkjEVP/jSMBluZReB6b5st12Uz6JmKf3Sq+CoHo8p+M/2VxLgDBMsWTH9kvzoC1L+g7U1 CLuUpFHkPY/6pjmHnP7MjJzFvX3Hi48c+Wt4XU/Xy2simEmz7w2vth5u2czeEbw70n3WgJoBrGz bH8hj/DEOywmMHnpI6opLBL0MfAg4pma8= X-Received: by 2002:a05:6808:4701:b0:479:fd47:6fac with SMTP id 5614622812f47-48293c4f3efmr815555b6e.12.1778533289166; Mon, 11 May 2026 14:01:29 -0700 (PDT) Received: from [192.168.1.14] ([38.15.57.99]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-435570ac625sm10999052fac.1.2026.05.11.14.01.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 May 2026 14:01:28 -0700 (PDT) Message-ID: <60d4f650-84fc-4697-8390-98d9e9ebed31@linuxfoundation.org> Date: Mon, 11 May 2026 15:01:27 -0600 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] cpupower: Implement powercap enabled setters To: =?UTF-8?Q?Mateusz_Ja=C5=9Bkiewicz?= , Thomas Renninger , Shuah Khan , "John B . Wyatt IV" , John Kacur Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Shuah Khan References: <20260508223524.1314573-1-jaskiewiczteo@gmail.com> Content-Language: en-US From: Shuah Khan In-Reply-To: <20260508223524.1314573-1-jaskiewiczteo@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 5/8/26 16:35, Mateusz Jaśkiewicz wrote: > 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; The default is enabled. You could check the current value and then do a write. > + > + yes_no = mode ? '1' : '0'; > + fd = open(path, O_WRONLY); > + if (-1 == fd) I prefer fd == value convention. Also checking fd < 0 is better than == -1 and printing error message calling perror() > + 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)) Drop the typecast > + return -1; > + > + return sysfs_set_enabled(path, mode); > } > > thanks, -- Shuah