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] [day] [month] [year] [list]
Message-ID: <20160328084920.21ac8f81@icelake>
Date:	Mon, 28 Mar 2016 08:49:20 -0700
From:	Jacob Pan <jacob.jun.pan@...ux.intel.com>
To:	Jacob Pan <jacob.jun.pan@...ux.intel.com>
Cc:	LKML <linux-kernel@...r.kernel.org>,
	Linux PM <linux-pm@...r.kernel.org>,
	Zhang Rui <rui.zhang@...el.com>,
	Srinivas Pandruvada <srinivas.pandruvada@...ux.intel.com>,
	Rafael Wysocki <rafael.j.wysocki@...el.com>,
	Len Brown <len.brown@...el.com>
Subject: Re: [PATCH] thermal/powerclamp: remove cpu whitelist

On Thu, 17 Mar 2016 11:26:13 -0700
Jacob Pan <jacob.jun.pan@...ux.intel.com> wrote:

> Powerclamp works by aligning idle time to achieve package level
> idle states, aka cstates. As long as one of the package cstates
> is available, synchronized idle injection is meaningful.
> 
> This patch replaces the CPU whitelist with CPU feature and
> package cstate counter check such that we don't have to modify
> this whitelist for every new CPU.
> 
Rui/Rafael,

Any comments on this?

Jacob

> Signed-off-by: Jacob Pan <jacob.jun.pan@...ux.intel.com>
> ---
>  drivers/thermal/intel_powerclamp.c | 47
> ++++++++------------------------------ 1 file changed, 9
> insertions(+), 38 deletions(-)
> 
> diff --git a/drivers/thermal/intel_powerclamp.c
> b/drivers/thermal/intel_powerclamp.c index 6c79588..015ce2e 100644
> --- a/drivers/thermal/intel_powerclamp.c
> +++ b/drivers/thermal/intel_powerclamp.c
> @@ -510,12 +510,6 @@ static int start_power_clamp(void)
>  	unsigned long cpu;
>  	struct task_struct *thread;
>  
> -	/* check if pkg cstate counter is completely 0, abort in
> this case */
> -	if (!has_pkg_state_counter()) {
> -		pr_err("pkg cstate counter not functional, abort\n");
> -		return -EINVAL;
> -	}
> -
>  	set_target_ratio = clamp(set_target_ratio, 0U,
> MAX_TARGET_RATIO - 1); /* prevent cpu hotplug */
>  	get_online_cpus();
> @@ -672,35 +666,11 @@ static struct thermal_cooling_device_ops
> powerclamp_cooling_ops = { .set_cur_state = powerclamp_set_cur_state,
>  };
>  
> -/* runs on Nehalem and later */
>  static const struct x86_cpu_id intel_powerclamp_ids[] __initconst = {
> -	{ X86_VENDOR_INTEL, 6, 0x1a},
> -	{ X86_VENDOR_INTEL, 6, 0x1c},
> -	{ X86_VENDOR_INTEL, 6, 0x1e},
> -	{ X86_VENDOR_INTEL, 6, 0x1f},
> -	{ X86_VENDOR_INTEL, 6, 0x25},
> -	{ X86_VENDOR_INTEL, 6, 0x26},
> -	{ X86_VENDOR_INTEL, 6, 0x2a},
> -	{ X86_VENDOR_INTEL, 6, 0x2c},
> -	{ X86_VENDOR_INTEL, 6, 0x2d},
> -	{ X86_VENDOR_INTEL, 6, 0x2e},
> -	{ X86_VENDOR_INTEL, 6, 0x2f},
> -	{ X86_VENDOR_INTEL, 6, 0x37},
> -	{ X86_VENDOR_INTEL, 6, 0x3a},
> -	{ X86_VENDOR_INTEL, 6, 0x3c},
> -	{ X86_VENDOR_INTEL, 6, 0x3d},
> -	{ X86_VENDOR_INTEL, 6, 0x3e},
> -	{ X86_VENDOR_INTEL, 6, 0x3f},
> -	{ X86_VENDOR_INTEL, 6, 0x45},
> -	{ X86_VENDOR_INTEL, 6, 0x46},
> -	{ X86_VENDOR_INTEL, 6, 0x47},
> -	{ X86_VENDOR_INTEL, 6, 0x4c},
> -	{ X86_VENDOR_INTEL, 6, 0x4d},
> -	{ X86_VENDOR_INTEL, 6, 0x4e},
> -	{ X86_VENDOR_INTEL, 6, 0x4f},
> -	{ X86_VENDOR_INTEL, 6, 0x56},
> -	{ X86_VENDOR_INTEL, 6, 0x57},
> -	{ X86_VENDOR_INTEL, 6, 0x5e},
> +	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
> X86_FEATURE_MWAIT },
> +	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
> X86_FEATURE_ARAT },
> +	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
> X86_FEATURE_NONSTOP_TSC },
> +	{ X86_VENDOR_INTEL, X86_FAMILY_ANY, X86_MODEL_ANY,
> X86_FEATURE_CONSTANT_TSC}, {}
>  };
>  MODULE_DEVICE_TABLE(x86cpu, intel_powerclamp_ids);
> @@ -712,11 +682,12 @@ static int __init powerclamp_probe(void)
>  				boot_cpu_data.x86,
> boot_cpu_data.x86_model); return -ENODEV;
>  	}
> -	if (!boot_cpu_has(X86_FEATURE_NONSTOP_TSC) ||
> -		!boot_cpu_has(X86_FEATURE_CONSTANT_TSC) ||
> -		!boot_cpu_has(X86_FEATURE_MWAIT) ||
> -		!boot_cpu_has(X86_FEATURE_ARAT))
> +
> +	/* The goal for idle time alignment is to achieve package
> cstate. */
> +	if (!has_pkg_state_counter()) {
> +		pr_info("No package C-state available");
>  		return -ENODEV;
> +	}
>  
>  	/* find the deepest mwait value */
>  	find_target_mwait();

[Jacob Pan]

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ