lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 28 May 2024 12:27:26 +0300 (EEST)
From: Ilpo Järvinen <ilpo.jarvinen@...ux.intel.com>
To: "Luke D. Jones" <luke@...nes.dev>, Hans de Goede <hdegoede@...hat.com>
cc: corentin.chary@...il.com, platform-driver-x86@...r.kernel.org, 
    LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 7/9] platform/x86: asus-wmi: add enable/disable CPU
 cores

Hi,

Hans, please check my question below.

On Tue, 28 May 2024, Luke D. Jones wrote:

> Exposes the WMI functions for enable/disable of performance and
> efficiency cores on some laptop models (largely Intel only).
> 
> Signed-off-by: Luke D. Jones <luke@...nes.dev>
> ---

> diff --git a/Documentation/ABI/testing/sysfs-platform-asus-wmi b/Documentation/ABI/testing/sysfs-platform-asus-wmi
> index 3b4eeea75b7b..ac881e72e374 100644
> --- a/Documentation/ABI/testing/sysfs-platform-asus-wmi
> +++ b/Documentation/ABI/testing/sysfs-platform-asus-wmi
> @@ -226,3 +226,22 @@ Description:
>  		Set panel to UHD or FHD mode
>  			* 0 - UHD,
>  			* 1 - FHD
> +
> +What:		/sys/devices/platform/<platform>/cores_enabled
> +Date:		Jun 2024
> +KernelVersion:	6.11
> +Contact:	"Luke Jones" <luke@...nes.dev>
> +Description:
> +		Enable/disable efficiency and performance cores. The format is
> +		0x[E][P] where [E] is the efficiency core count, and [P] is
> +		the perfromance core count. If the core count is a single digit

performance

> +		it is preceded by a 0 such as 0x0406; E=4, P=6, 0x1006; E=10, P=6
> +
> +What:		/sys/devices/platform/<platform>/cores_max
> +Date:		Jun 2024
> +KernelVersion:	6.11
> +Contact:	"Luke Jones" <luke@...nes.dev>
> +Description:
> +		Show the maximum performance and efficiency core countin format
> +		0x[E][P] where [E] is the efficiency core count, and [P] is
> +		the perfromance core count.

performance

> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 4b045f1828f1..f62a36dfcd4b 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -815,6 +815,46 @@ static ssize_t panel_fhd_store(struct device *dev,
>  WMI_SIMPLE_SHOW(panel_fhd, "%d\n", ASUS_WMI_DEVID_PANEL_FHD);
>  static DEVICE_ATTR_RW(panel_fhd);
>  
> +/* Efficiency and Performance core control **********************************/
> +static ssize_t cores_enabled_store(struct device *dev,
> +				    struct device_attribute *attr,
> +				    const char *buf, size_t count)
> +{
> +	struct asus_wmi *asus = dev_get_drvdata(dev);
> +	int result, err;
> +	u32 cores, max;
> +
> +	result = kstrtou32(buf, 16, &cores);
> +	if (result)
> +		return result;
> +
> +	err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_CORES_MAX, &max);
> +	if (err < 0)
> +		return err;
> +
> +	if (cores > max) {

This only checks one part of it and the P part can contain whatever 
garbage as long as E is small enough?

But I'm not sure if it's good idea to have these two changed through the 
same sysfs file, I'm leaning more on that it would be better to split the 
interface for P and E.

Hans, what you think about this?

> +		pr_warn("Core count 0x%x exceeds max: 0x%x\n", cores, max);
> +		return -EIO;
> +	}
> +
> +	err = asus_wmi_set_devstate(ASUS_WMI_DEVID_CORES_SET, cores, &result);
> +	if (err) {
> +		pr_warn("Failed to set cores_enabled: %d\n", err);
> +		return err;
> +	}
> +
> +	pr_info("Enabled core count changed, reboot required\n");
> +	sysfs_notify(&asus->platform_device->dev.kobj, NULL, "cores_enabled");
> +
> +	return count;
> +}

> @@ -4131,6 +4173,9 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
>  		devid = ASUS_WMI_DEVID_PANEL_OD;
>  	else if (attr == &dev_attr_panel_fhd.attr)
>  		devid = ASUS_WMI_DEVID_PANEL_FHD;
> +	else if (attr == &dev_attr_cores_enabled.attr
> +		|| attr == &dev_attr_cores_max.attr)

Wrong alignment.

-- 
 i.


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ