* [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers @ 2014-11-28 3:36 Ethan Zhao 2014-11-28 3:36 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Ethan Zhao @ 2014-11-28 3:36 UTC (permalink / raw) To: dirk.j.brandewie, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly, Ethan Zhao Oracle Sun servers(X86) have power capping features that work via ACPI _PPC method, patch No.1 is used to skip this driver if Oracle Sun server and _PPC detected. Patch No.2 introduces a kernel command line parameter for those who would like to enable intel_pstate on Sun X86 servers and be aware of the risk of no power capping capability working and try to get better performance. Compiled and tested with stable-3.18-rc5 on Oracle Sun server X4-2 series. Thanks test and review by Linda Knippers <linda.knippers@hp.com> and the suggestion,review from Dirk Brandewie <dirk.j.brandewie@intel.com>. -- v2: fix break HP Proliant issue. v3: expand the hardware vendor list. v4: refine code and doc Ethan Zhao (2): intel_pstate: skip this driver if Sun server has _PPC method intel_pstate: add kernel parameter to force loading on Sun X86 servers. Documentation/kernel-parameters.txt | 5 ++++ drivers/cpufreq/intel_pstate.c | 49 ++++++++++++++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 4 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method 2014-11-28 3:36 [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers Ethan Zhao @ 2014-11-28 3:36 ` Ethan Zhao 2014-11-28 5:20 ` Yasuaki Ishimatsu 2014-11-28 3:36 ` [PATCH 2/2 V6] intel_pstate: add kernel parameter to force loading on Sun X86 servers Ethan Zhao 2014-11-28 3:36 ` Ethan Zhao 2 siblings, 1 reply; 10+ messages in thread From: Ethan Zhao @ 2014-11-28 3:36 UTC (permalink / raw) To: dirk.j.brandewie, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly, Ethan Zhao, Dirk Brandewie Oracle Sun X86 servers have dynamic power capping capability that works via ACPI _PPC method etc, so skip loading this driver if Sun server has ACPI _PPC enabled. Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> Tested-by: Linda Knippers <linda.knippers@hp.com> --- v2: fix break HP Proliant issue. v3: expand the hardware vendor list. v4: refine code. drivers/cpufreq/intel_pstate.c | 45 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index 27bb6d3..1bb62ca 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -943,15 +943,46 @@ static bool intel_pstate_no_acpi_pss(void) return true; } +static bool intel_pstate_has_acpi_ppc(void) +{ + int i; + + for_each_possible_cpu(i) { + struct acpi_processor *pr = per_cpu(processors, i); + + if (!pr) + continue; + if (acpi_has_method(pr->handle, "_PPC")) + return true; + } + return false; +} + +enum { + PSS, + PCC, +}; + struct hw_vendor_info { u16 valid; char oem_id[ACPI_OEM_ID_SIZE]; char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; + int oem_pwr_table; }; /* Hardware vendor-specific info that has its own power management modes */ static struct hw_vendor_info vendor_info[] = { - {1, "HP ", "ProLiant"}, + {1, "HP ", "ProLiant", PSS}, + {1, "ORACLE", "X4-2 ", PCC}, + {1, "ORACLE", "X4-2L ", PCC}, + {1, "ORACLE", "X4-2B ", PCC}, + {1, "ORACLE", "X3-2 ", PCC}, + {1, "ORACLE", "X3-2L ", PCC}, + {1, "ORACLE", "X3-2B ", PCC}, + {1, "ORACLE", "X4470M2 ", PCC}, + {1, "ORACLE", "X4270M3 ", PCC}, + {1, "ORACLE", "X4270M2 ", PCC}, + {1, "ORACLE", "X4170M2 ", PCC}, {0, "", ""}, }; @@ -966,15 +997,21 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) for (v_info = vendor_info; v_info->valid; v_info++) { if (!strncmp(hdr.oem_id, v_info->oem_id, ACPI_OEM_ID_SIZE) && - !strncmp(hdr.oem_table_id, v_info->oem_table_id, ACPI_OEM_TABLE_ID_SIZE) && - intel_pstate_no_acpi_pss()) - return true; + !strncmp(hdr.oem_table_id, v_info->oem_table_id, + ACPI_OEM_TABLE_ID_SIZE)) + switch (v_info->oem_pwr_table) { + case PSS: + return intel_pstate_no_acpi_pss(); + case PCC: + return intel_pstate_has_acpi_ppc(); + } } return false; } #else /* CONFIG_ACPI not enabled */ static inline bool intel_pstate_platform_pwr_mgmt_exists(void) { return false; } +static inline bool intel_pstate_has_acpi_ppc(void) { return false; } #endif /* CONFIG_ACPI */ static int __init intel_pstate_init(void) -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method 2014-11-28 3:36 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao @ 2014-11-28 5:20 ` Yasuaki Ishimatsu 2014-12-01 1:26 ` ethan zhao 0 siblings, 1 reply; 10+ messages in thread From: Yasuaki Ishimatsu @ 2014-11-28 5:20 UTC (permalink / raw) To: Ethan Zhao, dirk.j.brandewie, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly, Dirk Brandewie (2014/11/28 12:36), Ethan Zhao wrote: > Oracle Sun X86 servers have dynamic power capping capability that works via > ACPI _PPC method etc, so skip loading this driver if Sun server has ACPI _PPC > enabled. > > Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> > Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> > Tested-by: Linda Knippers <linda.knippers@hp.com> > --- > v2: fix break HP Proliant issue. > v3: expand the hardware vendor list. > v4: refine code. > > drivers/cpufreq/intel_pstate.c | 45 ++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 41 insertions(+), 4 deletions(-) > > diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c > index 27bb6d3..1bb62ca 100644 > --- a/drivers/cpufreq/intel_pstate.c > +++ b/drivers/cpufreq/intel_pstate.c > @@ -943,15 +943,46 @@ static bool intel_pstate_no_acpi_pss(void) > return true; > } > > +static bool intel_pstate_has_acpi_ppc(void) > +{ > + int i; > + > + for_each_possible_cpu(i) { > + struct acpi_processor *pr = per_cpu(processors, i); > + > + if (!pr) > + continue; > + if (acpi_has_method(pr->handle, "_PPC")) > + return true; > + } > + return false; > +} > + > +enum { > + PSS, > + PCC, > +}; What does PCC stand for? Is it PPC? Thanks, Yasuaki Ishimatsu > + > struct hw_vendor_info { > u16 valid; > char oem_id[ACPI_OEM_ID_SIZE]; > char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; > + int oem_pwr_table; > }; > > /* Hardware vendor-specific info that has its own power management modes */ > static struct hw_vendor_info vendor_info[] = { > - {1, "HP ", "ProLiant"}, > + {1, "HP ", "ProLiant", PSS}, > + {1, "ORACLE", "X4-2 ", PCC}, > + {1, "ORACLE", "X4-2L ", PCC}, > + {1, "ORACLE", "X4-2B ", PCC}, > + {1, "ORACLE", "X3-2 ", PCC}, > + {1, "ORACLE", "X3-2L ", PCC}, > + {1, "ORACLE", "X3-2B ", PCC}, > + {1, "ORACLE", "X4470M2 ", PCC}, > + {1, "ORACLE", "X4270M3 ", PCC}, > + {1, "ORACLE", "X4270M2 ", PCC}, > + {1, "ORACLE", "X4170M2 ", PCC}, > {0, "", ""}, > }; > > @@ -966,15 +997,21 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) > > for (v_info = vendor_info; v_info->valid; v_info++) { > if (!strncmp(hdr.oem_id, v_info->oem_id, ACPI_OEM_ID_SIZE) && > - !strncmp(hdr.oem_table_id, v_info->oem_table_id, ACPI_OEM_TABLE_ID_SIZE) && > - intel_pstate_no_acpi_pss()) > - return true; > + !strncmp(hdr.oem_table_id, v_info->oem_table_id, > + ACPI_OEM_TABLE_ID_SIZE)) > + switch (v_info->oem_pwr_table) { > + case PSS: > + return intel_pstate_no_acpi_pss(); > + case PCC: > + return intel_pstate_has_acpi_ppc(); > + } > } > > return false; > } > #else /* CONFIG_ACPI not enabled */ > static inline bool intel_pstate_platform_pwr_mgmt_exists(void) { return false; } > +static inline bool intel_pstate_has_acpi_ppc(void) { return false; } > #endif /* CONFIG_ACPI */ > > static int __init intel_pstate_init(void) > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method 2014-11-28 5:20 ` Yasuaki Ishimatsu @ 2014-12-01 1:26 ` ethan zhao 0 siblings, 0 replies; 10+ messages in thread From: ethan zhao @ 2014-12-01 1:26 UTC (permalink / raw) To: Yasuaki Ishimatsu Cc: dirk.j.brandewie, viresh.kumar, rjw, corbet, linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly, Dirk Brandewie Yasuaki, On 2014/11/28 13:20, Yasuaki Ishimatsu wrote: > (2014/11/28 12:36), Ethan Zhao wrote: >> Oracle Sun X86 servers have dynamic power capping capability that works via >> ACPI _PPC method etc, so skip loading this driver if Sun server has ACPI _PPC >> enabled. >> >> Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> >> Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> >> Tested-by: Linda Knippers <linda.knippers@hp.com> >> --- >> v2: fix break HP Proliant issue. >> v3: expand the hardware vendor list. >> v4: refine code. >> >> drivers/cpufreq/intel_pstate.c | 45 ++++++++++++++++++++++++++++++++++++++---- >> 1 file changed, 41 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c >> index 27bb6d3..1bb62ca 100644 >> --- a/drivers/cpufreq/intel_pstate.c >> +++ b/drivers/cpufreq/intel_pstate.c >> @@ -943,15 +943,46 @@ static bool intel_pstate_no_acpi_pss(void) >> return true; >> } >> >> +static bool intel_pstate_has_acpi_ppc(void) >> +{ >> + int i; >> + >> + for_each_possible_cpu(i) { >> + struct acpi_processor *pr = per_cpu(processors, i); >> + >> + if (!pr) >> + continue; >> + if (acpi_has_method(pr->handle, "_PPC")) >> + return true; >> + } >> + return false; >> +} >> + >> +enum { >> + PSS, >> + PCC, >> +}; > What does PCC stand for? Is it PPC? Good catch, should be PPC, not PCC. > Thanks, > Yasuaki Ishimatsu > >> + >> struct hw_vendor_info { >> u16 valid; >> char oem_id[ACPI_OEM_ID_SIZE]; >> char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; >> + int oem_pwr_table; >> }; >> >> /* Hardware vendor-specific info that has its own power management modes */ >> static struct hw_vendor_info vendor_info[] = { >> - {1, "HP ", "ProLiant"}, >> + {1, "HP ", "ProLiant", PSS}, >> + {1, "ORACLE", "X4-2 ", PCC}, >> + {1, "ORACLE", "X4-2L ", PCC}, >> + {1, "ORACLE", "X4-2B ", PCC}, >> + {1, "ORACLE", "X3-2 ", PCC}, >> + {1, "ORACLE", "X3-2L ", PCC}, >> + {1, "ORACLE", "X3-2B ", PCC}, >> + {1, "ORACLE", "X4470M2 ", PCC}, >> + {1, "ORACLE", "X4270M3 ", PCC}, >> + {1, "ORACLE", "X4270M2 ", PCC}, >> + {1, "ORACLE", "X4170M2 ", PCC}, >> {0, "", ""}, >> }; >> >> @@ -966,15 +997,21 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) >> >> for (v_info = vendor_info; v_info->valid; v_info++) { >> if (!strncmp(hdr.oem_id, v_info->oem_id, ACPI_OEM_ID_SIZE) && >> - !strncmp(hdr.oem_table_id, v_info->oem_table_id, ACPI_OEM_TABLE_ID_SIZE) && >> - intel_pstate_no_acpi_pss()) >> - return true; >> + !strncmp(hdr.oem_table_id, v_info->oem_table_id, >> + ACPI_OEM_TABLE_ID_SIZE)) >> + switch (v_info->oem_pwr_table) { >> + case PSS: >> + return intel_pstate_no_acpi_pss(); >> + case PCC: >> + return intel_pstate_has_acpi_ppc(); >> + } >> } >> >> return false; >> } >> #else /* CONFIG_ACPI not enabled */ >> static inline bool intel_pstate_platform_pwr_mgmt_exists(void) { return false; } >> +static inline bool intel_pstate_has_acpi_ppc(void) { return false; } >> #endif /* CONFIG_ACPI */ >> >> static int __init intel_pstate_init(void) >> > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2 V6] intel_pstate: add kernel parameter to force loading on Sun X86 servers. 2014-11-28 3:36 [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers Ethan Zhao 2014-11-28 3:36 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao @ 2014-11-28 3:36 ` Ethan Zhao 2014-11-28 3:36 ` Ethan Zhao 2 siblings, 0 replies; 10+ messages in thread From: Ethan Zhao @ 2014-11-28 3:36 UTC (permalink / raw) To: dirk.j.brandewie, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly, Ethan Zhao To force loading on Oracle Sun X86 servers, provide one kernel command line parameter intel_pstate = ora_force For those who be aware of the risk of no power capping capabily working and try to get better performance with this driver. Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> --- v2: change to hardware vendor specific naming parameter. v4: refine code and doc. v5&v6: fix a typo in doc. Documentation/kernel-parameters.txt | 5 +++++ drivers/cpufreq/intel_pstate.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 479f332..7d0983e 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -1446,6 +1446,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted. disable Do not enable intel_pstate as the default scaling driver for the supported processors + ora_force + Force loading intel_pstate on Oracle Sun Servers(X86). + only for those who be aware of the risk of no power capping + capability working and try to get better performance with this + driver. intremap= [X86-64, Intel-IOMMU] on enable Interrupt Remapping (default) diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index 1bb62ca..2654e13 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -866,6 +866,7 @@ static struct cpufreq_driver intel_pstate_driver = { }; static int __initdata no_load; +static unsigned int ora_force; static int intel_pstate_msrs_not_valid(void) { @@ -1003,7 +1004,8 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) case PSS: return intel_pstate_no_acpi_pss(); case PCC: - return intel_pstate_has_acpi_ppc(); + return intel_pstate_has_acpi_ppc() && + (!ora_force); } } @@ -1078,6 +1080,8 @@ static int __init intel_pstate_setup(char *str) if (!strcmp(str, "disable")) no_load = 1; + if (!strcmp(str, "ora_force")) + ora_force = 1; return 0; } early_param("intel_pstate", intel_pstate_setup); -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/2 V6] intel_pstate: add kernel parameter to force loading on Sun X86 servers. 2014-11-28 3:36 [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers Ethan Zhao 2014-11-28 3:36 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao 2014-11-28 3:36 ` [PATCH 2/2 V6] intel_pstate: add kernel parameter to force loading on Sun X86 servers Ethan Zhao @ 2014-11-28 3:36 ` Ethan Zhao 2014-12-02 18:24 ` Kristen Carlson Accardi 2 siblings, 1 reply; 10+ messages in thread From: Ethan Zhao @ 2014-11-28 3:36 UTC (permalink / raw) To: dirk.j.brandewie, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly, Ethan Zhao To force loading on Oracle Sun X86 servers, provide one kernel command line parameter intel_pstate = ora_force For those who be aware of the risk of no power capping capabily working and try to get better performance with this driver. Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> --- v2: change to hardware vendor specific naming parameter. v4: refine code and doc. v5&v6: fix a typo in doc. Documentation/kernel-parameters.txt | 5 +++++ drivers/cpufreq/intel_pstate.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 479f332..7d0983e 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -1446,6 +1446,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted. disable Do not enable intel_pstate as the default scaling driver for the supported processors + ora_force + Force loading intel_pstate on Oracle Sun Servers(X86). + only for those who be aware of the risk of no power capping + capability working and try to get better performance with this + driver. intremap= [X86-64, Intel-IOMMU] on enable Interrupt Remapping (default) diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index 1bb62ca..2654e13 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -866,6 +866,7 @@ static struct cpufreq_driver intel_pstate_driver = { }; static int __initdata no_load; +static unsigned int ora_force; static int intel_pstate_msrs_not_valid(void) { @@ -1003,7 +1004,8 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) case PSS: return intel_pstate_no_acpi_pss(); case PCC: - return intel_pstate_has_acpi_ppc(); + return intel_pstate_has_acpi_ppc() && + (!ora_force); } } @@ -1078,6 +1080,8 @@ static int __init intel_pstate_setup(char *str) if (!strcmp(str, "disable")) no_load = 1; + if (!strcmp(str, "ora_force")) + ora_force = 1; return 0; } early_param("intel_pstate", intel_pstate_setup); -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2 V6] intel_pstate: add kernel parameter to force loading on Sun X86 servers. 2014-11-28 3:36 ` Ethan Zhao @ 2014-12-02 18:24 ` Kristen Carlson Accardi 2014-12-03 0:49 ` ethan zhao 0 siblings, 1 reply; 10+ messages in thread From: Kristen Carlson Accardi @ 2014-12-02 18:24 UTC (permalink / raw) To: Ethan Zhao Cc: dirk.j.brandewie, viresh.kumar, rjw, corbet, linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly On Fri, 28 Nov 2014 12:36:17 +0900 Ethan Zhao <ethan.zhao@oracle.com> wrote: > To force loading on Oracle Sun X86 servers, provide one kernel command line > parameter > > intel_pstate = ora_force > > For those who be aware of the risk of no power capping capabily working and > try to get better performance with this driver. So, is this something you'd expect users to use on production systems, or is it just for debug? Thanks, Kristen > > Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> > --- > v2: change to hardware vendor specific naming parameter. > v4: refine code and doc. > v5&v6: fix a typo in doc. > > Documentation/kernel-parameters.txt | 5 +++++ > drivers/cpufreq/intel_pstate.c | 6 +++++- > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt > index 479f332..7d0983e 100644 > --- a/Documentation/kernel-parameters.txt > +++ b/Documentation/kernel-parameters.txt > @@ -1446,6 +1446,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted. > disable > Do not enable intel_pstate as the default > scaling driver for the supported processors > + ora_force > + Force loading intel_pstate on Oracle Sun Servers(X86). > + only for those who be aware of the risk of no power capping > + capability working and try to get better performance with this > + driver. > > intremap= [X86-64, Intel-IOMMU] > on enable Interrupt Remapping (default) > diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c > index 1bb62ca..2654e13 100644 > --- a/drivers/cpufreq/intel_pstate.c > +++ b/drivers/cpufreq/intel_pstate.c > @@ -866,6 +866,7 @@ static struct cpufreq_driver intel_pstate_driver = { > }; > > static int __initdata no_load; > +static unsigned int ora_force; > > static int intel_pstate_msrs_not_valid(void) > { > @@ -1003,7 +1004,8 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) > case PSS: > return intel_pstate_no_acpi_pss(); > case PCC: > - return intel_pstate_has_acpi_ppc(); > + return intel_pstate_has_acpi_ppc() && > + (!ora_force); > } > } > > @@ -1078,6 +1080,8 @@ static int __init intel_pstate_setup(char *str) > > if (!strcmp(str, "disable")) > no_load = 1; > + if (!strcmp(str, "ora_force")) > + ora_force = 1; > return 0; > } > early_param("intel_pstate", intel_pstate_setup); ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2 V6] intel_pstate: add kernel parameter to force loading on Sun X86 servers. 2014-12-02 18:24 ` Kristen Carlson Accardi @ 2014-12-03 0:49 ` ethan zhao 0 siblings, 0 replies; 10+ messages in thread From: ethan zhao @ 2014-12-03 0:49 UTC (permalink / raw) To: Kristen Carlson Accardi Cc: dirk.j.brandewie, viresh.kumar, rjw, corbet, linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly Kristen, On 2014/12/3 2:24, Kristen Carlson Accardi wrote: > On Fri, 28 Nov 2014 12:36:17 +0900 > Ethan Zhao <ethan.zhao@oracle.com> wrote: > >> To force loading on Oracle Sun X86 servers, provide one kernel command line >> parameter >> >> intel_pstate = ora_force >> >> For those who be aware of the risk of no power capping capabily working and >> try to get better performance with this driver. > So, is this something you'd expect users to use on production systems, > or is it just for debug? Till now, we couldn't make the decision that users couldn't use intel_pstate on product systems at all, So we leave one gate, and we could do something even the binary kernel was shipped to user. of course, a lot of test and debug need to be done in the future. It is possible for users to use it on their product system if they are aware of all the risk. Thanks, Ethan > > Thanks, > Kristen > >> Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> >> --- >> v2: change to hardware vendor specific naming parameter. >> v4: refine code and doc. >> v5&v6: fix a typo in doc. >> >> Documentation/kernel-parameters.txt | 5 +++++ >> drivers/cpufreq/intel_pstate.c | 6 +++++- >> 2 files changed, 10 insertions(+), 1 deletion(-) >> >> diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt >> index 479f332..7d0983e 100644 >> --- a/Documentation/kernel-parameters.txt >> +++ b/Documentation/kernel-parameters.txt >> @@ -1446,6 +1446,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted. >> disable >> Do not enable intel_pstate as the default >> scaling driver for the supported processors >> + ora_force >> + Force loading intel_pstate on Oracle Sun Servers(X86). >> + only for those who be aware of the risk of no power capping >> + capability working and try to get better performance with this >> + driver. >> >> intremap= [X86-64, Intel-IOMMU] >> on enable Interrupt Remapping (default) >> diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c >> index 1bb62ca..2654e13 100644 >> --- a/drivers/cpufreq/intel_pstate.c >> +++ b/drivers/cpufreq/intel_pstate.c >> @@ -866,6 +866,7 @@ static struct cpufreq_driver intel_pstate_driver = { >> }; >> >> static int __initdata no_load; >> +static unsigned int ora_force; >> >> static int intel_pstate_msrs_not_valid(void) >> { >> @@ -1003,7 +1004,8 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) >> case PSS: >> return intel_pstate_no_acpi_pss(); >> case PCC: >> - return intel_pstate_has_acpi_ppc(); >> + return intel_pstate_has_acpi_ppc() && >> + (!ora_force); >> } >> } >> >> @@ -1078,6 +1080,8 @@ static int __init intel_pstate_setup(char *str) >> >> if (!strcmp(str, "disable")) >> no_load = 1; >> + if (!strcmp(str, "ora_force")) >> + ora_force = 1; >> return 0; >> } >> early_param("intel_pstate", intel_pstate_setup); ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers @ 2014-11-28 3:33 Ethan Zhao 2014-11-28 3:33 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao 0 siblings, 1 reply; 10+ messages in thread From: Ethan Zhao @ 2014-11-28 3:33 UTC (permalink / raw) To: dirk.j.brandewie, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly, Ethan Zhao Oracle Sun servers(X86) have power capping features that work via ACPI _PPC method, patch No.1 is used to skip this driver if Oracle Sun server and _PPC detected. Patch No.2 introduces a kernel command line parameter for those who would like to enable intel_pstate on Sun X86 servers and be aware of the risk of no power capping capability working and try to get better performance. Compiled and tested with stable-3.18-rc5 on Oracle Sun server X4-2 series. Thanks test and review by Linda Knippers <linda.knippers@hp.com> and the suggestion,review from Dirk Brandewie <dirk.j.brandewie@intel.com>. -- v2: fix break HP Proliant issue. v3: expand the hardware vendor list. v4: refine code and doc Ethan Zhao (2): intel_pstate: skip this driver if Sun server has _PPC method intel_pstate: add kernel parameter to force loading on Sun X86 servers. Documentation/kernel-parameters.txt | 5 ++++ drivers/cpufreq/intel_pstate.c | 49 ++++++++++++++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 4 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method 2014-11-28 3:33 [PATCH 0/2 V4] intel_pstate: skip this driver if hit " Ethan Zhao @ 2014-11-28 3:33 ` Ethan Zhao 0 siblings, 0 replies; 10+ messages in thread From: Ethan Zhao @ 2014-11-28 3:33 UTC (permalink / raw) To: dirk.j.brandewie, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, joe.jin, brian.maly, Ethan Zhao, Dirk Brandewie Oracle Sun X86 servers have dynamic power capping capability that works via ACPI _PPC method etc, so skip loading this driver if Sun server has ACPI _PPC enabled. Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> Tested-by: Linda Knippers <linda.knippers@hp.com> --- v2: fix break HP Proliant issue. v3: expand the hardware vendor list. v4: refine code. drivers/cpufreq/intel_pstate.c | 45 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index 27bb6d3..1bb62ca 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -943,15 +943,46 @@ static bool intel_pstate_no_acpi_pss(void) return true; } +static bool intel_pstate_has_acpi_ppc(void) +{ + int i; + + for_each_possible_cpu(i) { + struct acpi_processor *pr = per_cpu(processors, i); + + if (!pr) + continue; + if (acpi_has_method(pr->handle, "_PPC")) + return true; + } + return false; +} + +enum { + PSS, + PCC, +}; + struct hw_vendor_info { u16 valid; char oem_id[ACPI_OEM_ID_SIZE]; char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; + int oem_pwr_table; }; /* Hardware vendor-specific info that has its own power management modes */ static struct hw_vendor_info vendor_info[] = { - {1, "HP ", "ProLiant"}, + {1, "HP ", "ProLiant", PSS}, + {1, "ORACLE", "X4-2 ", PCC}, + {1, "ORACLE", "X4-2L ", PCC}, + {1, "ORACLE", "X4-2B ", PCC}, + {1, "ORACLE", "X3-2 ", PCC}, + {1, "ORACLE", "X3-2L ", PCC}, + {1, "ORACLE", "X3-2B ", PCC}, + {1, "ORACLE", "X4470M2 ", PCC}, + {1, "ORACLE", "X4270M3 ", PCC}, + {1, "ORACLE", "X4270M2 ", PCC}, + {1, "ORACLE", "X4170M2 ", PCC}, {0, "", ""}, }; @@ -966,15 +997,21 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) for (v_info = vendor_info; v_info->valid; v_info++) { if (!strncmp(hdr.oem_id, v_info->oem_id, ACPI_OEM_ID_SIZE) && - !strncmp(hdr.oem_table_id, v_info->oem_table_id, ACPI_OEM_TABLE_ID_SIZE) && - intel_pstate_no_acpi_pss()) - return true; + !strncmp(hdr.oem_table_id, v_info->oem_table_id, + ACPI_OEM_TABLE_ID_SIZE)) + switch (v_info->oem_pwr_table) { + case PSS: + return intel_pstate_no_acpi_pss(); + case PCC: + return intel_pstate_has_acpi_ppc(); + } } return false; } #else /* CONFIG_ACPI not enabled */ static inline bool intel_pstate_platform_pwr_mgmt_exists(void) { return false; } +static inline bool intel_pstate_has_acpi_ppc(void) { return false; } #endif /* CONFIG_ACPI */ static int __init intel_pstate_init(void) -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers @ 2014-11-27 8:35 Ethan Zhao 2014-11-27 8:35 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao 0 siblings, 1 reply; 10+ messages in thread From: Ethan Zhao @ 2014-11-27 8:35 UTC (permalink / raw) To: dirk.j.brandewie, linda.knippers, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, Ethan Zhao Oracle Sun servers(X86) have power capping features that work via ACPI _PPC method, patch No.1 is used to skip this driver if Oracle Sun server and _PPC detected. Patch No.2 introduces a kernel command line parameter for those who would like to enable intel_pstate on Sun X86 servers and be aware of the risk of no power capping capability working and try to get better performance. Compiled and tested with stable-3.18-rc5 on Oracle Sun server X4-2 series. Thanks test and review by Linda Knippers <linda.knippers@hp.com> and the suggestion,review from Dirk Brandewie <dirk.j.brandewie@intel.com>. -- v2: fix break HP Proliant issue. v3: expand the hardware vendor list. v4: refine code and doc Ethan Zhao (2): intel_pstate: skip this driver if Sun server has _PPC method intel_pstate: add kernel parameter to force loading on Sun X86 servers. Documentation/kernel-parameters.txt | 5 ++++ drivers/cpufreq/intel_pstate.c | 49 ++++++++++++++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 4 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method 2014-11-27 8:35 [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers Ethan Zhao @ 2014-11-27 8:35 ` Ethan Zhao 0 siblings, 0 replies; 10+ messages in thread From: Ethan Zhao @ 2014-11-27 8:35 UTC (permalink / raw) To: dirk.j.brandewie, linda.knippers, viresh.kumar, rjw, corbet Cc: linux-doc, linux-kernel, linux-pm, ethan.kernel, Ethan Zhao, Dirk Brandewie Oracle Sun X86 servers have dynamic power capping capability that works via ACPI _PPC method etc, so skip loading this driver if Sun server has ACPI _PPC enabled. Signed-off-by: Ethan Zhao <ethan.zhao@oracle.com> Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> Tested-by: Linda Knippers <linda.knippers@hp.com> --- v2: fix break HP Proliant issue. v3: expand the hardware vendor list. v4: refine code. drivers/cpufreq/intel_pstate.c | 45 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index 27bb6d3..1bb62ca 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -943,15 +943,46 @@ static bool intel_pstate_no_acpi_pss(void) return true; } +static bool intel_pstate_has_acpi_ppc(void) +{ + int i; + + for_each_possible_cpu(i) { + struct acpi_processor *pr = per_cpu(processors, i); + + if (!pr) + continue; + if (acpi_has_method(pr->handle, "_PPC")) + return true; + } + return false; +} + +enum { + PSS, + PCC, +}; + struct hw_vendor_info { u16 valid; char oem_id[ACPI_OEM_ID_SIZE]; char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; + int oem_pwr_table; }; /* Hardware vendor-specific info that has its own power management modes */ static struct hw_vendor_info vendor_info[] = { - {1, "HP ", "ProLiant"}, + {1, "HP ", "ProLiant", PSS}, + {1, "ORACLE", "X4-2 ", PCC}, + {1, "ORACLE", "X4-2L ", PCC}, + {1, "ORACLE", "X4-2B ", PCC}, + {1, "ORACLE", "X3-2 ", PCC}, + {1, "ORACLE", "X3-2L ", PCC}, + {1, "ORACLE", "X3-2B ", PCC}, + {1, "ORACLE", "X4470M2 ", PCC}, + {1, "ORACLE", "X4270M3 ", PCC}, + {1, "ORACLE", "X4270M2 ", PCC}, + {1, "ORACLE", "X4170M2 ", PCC}, {0, "", ""}, }; @@ -966,15 +997,21 @@ static bool intel_pstate_platform_pwr_mgmt_exists(void) for (v_info = vendor_info; v_info->valid; v_info++) { if (!strncmp(hdr.oem_id, v_info->oem_id, ACPI_OEM_ID_SIZE) && - !strncmp(hdr.oem_table_id, v_info->oem_table_id, ACPI_OEM_TABLE_ID_SIZE) && - intel_pstate_no_acpi_pss()) - return true; + !strncmp(hdr.oem_table_id, v_info->oem_table_id, + ACPI_OEM_TABLE_ID_SIZE)) + switch (v_info->oem_pwr_table) { + case PSS: + return intel_pstate_no_acpi_pss(); + case PCC: + return intel_pstate_has_acpi_ppc(); + } } return false; } #else /* CONFIG_ACPI not enabled */ static inline bool intel_pstate_platform_pwr_mgmt_exists(void) { return false; } +static inline bool intel_pstate_has_acpi_ppc(void) { return false; } #endif /* CONFIG_ACPI */ static int __init intel_pstate_init(void) -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2014-12-03 0:49 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-11-28 3:36 [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers Ethan Zhao 2014-11-28 3:36 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao 2014-11-28 5:20 ` Yasuaki Ishimatsu 2014-12-01 1:26 ` ethan zhao 2014-11-28 3:36 ` [PATCH 2/2 V6] intel_pstate: add kernel parameter to force loading on Sun X86 servers Ethan Zhao 2014-11-28 3:36 ` Ethan Zhao 2014-12-02 18:24 ` Kristen Carlson Accardi 2014-12-03 0:49 ` ethan zhao -- strict thread matches above, loose matches on Subject: below -- 2014-11-28 3:33 [PATCH 0/2 V4] intel_pstate: skip this driver if hit " Ethan Zhao 2014-11-28 3:33 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao 2014-11-27 8:35 [PATCH 0/2 V4] intel_pstate: skip this driver if hit Sun X86 servers Ethan Zhao 2014-11-27 8:35 ` [PATCH 1/2 V4] intel_pstate: skip this driver if Sun server has _PPC method Ethan Zhao
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).