2014-12-01 02:32:53

by Ethan Zhao

[permalink] [raw]
Subject: [PATCH 1/2 V6] intel_pstate: skip this driver if Sun server has _PPC method

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 <[email protected]>
Signed-off-by: Dirk Brandewie <[email protected]>
Tested-by: Linda Knippers <[email protected]>
---
v2: fix break HP Proliant issue.
v3: expand the hardware vendor list.
v4: refine code.
v5v6: change enum PCC to PPC.

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,
+ PPC,
+};
+
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 ", PPC},
+ {1, "ORACLE", "X4-2L ", PPC},
+ {1, "ORACLE", "X4-2B ", PPC},
+ {1, "ORACLE", "X3-2 ", PPC},
+ {1, "ORACLE", "X3-2L ", PPC},
+ {1, "ORACLE", "X3-2B ", PPC},
+ {1, "ORACLE", "X4470M2 ", PPC},
+ {1, "ORACLE", "X4270M3 ", PPC},
+ {1, "ORACLE", "X4270M2 ", PPC},
+ {1, "ORACLE", "X4170M2 ", PPC},
{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 PPC:
+ 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


2014-12-01 15:11:56

by Dirk Brandewie

[permalink] [raw]
Subject: Re: [PATCH 1/2 V6] intel_pstate: skip this driver if Sun server has _PPC method

On 11/30/2014 06:32 PM, 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 <[email protected]>
> Signed-off-by: Dirk Brandewie <[email protected]>
> Tested-by: Linda Knippers <[email protected]>

In the future you should not add other peoples Signed-off-by or Tested-by
tags unless they have explicitly told you can do so. Other than that I
am fine with this patch.

--Dirk
> ---
> v2: fix break HP Proliant issue.
> v3: expand the hardware vendor list.
> v4: refine code.
> v5v6: change enum PCC to PPC.
>
> 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,
> + PPC,
> +};
> +
> 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 ", PPC},
> + {1, "ORACLE", "X4-2L ", PPC},
> + {1, "ORACLE", "X4-2B ", PPC},
> + {1, "ORACLE", "X3-2 ", PPC},
> + {1, "ORACLE", "X3-2L ", PPC},
> + {1, "ORACLE", "X3-2B ", PPC},
> + {1, "ORACLE", "X4470M2 ", PPC},
> + {1, "ORACLE", "X4270M3 ", PPC},
> + {1, "ORACLE", "X4270M2 ", PPC},
> + {1, "ORACLE", "X4170M2 ", PPC},
> {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 PPC:
> + 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)
>

2014-12-01 22:03:56

by Linda Knippers

[permalink] [raw]
Subject: Re: [PATCH 1/2 V6] intel_pstate: skip this driver if Sun server has _PPC method

On 12/1/2014 10:11 AM, Dirk Brandewie wrote:
> On 11/30/2014 06:32 PM, 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 <[email protected]>
>> Signed-off-by: Dirk Brandewie <[email protected]>
>> Tested-by: Linda Knippers <[email protected]>
>
> In the future you should not add other peoples Signed-off-by or Tested-by
> tags unless they have explicitly told you can do so. Other than that I
> am fine with this patch.

I hadn't previously testing this version of the patch but I have now so I'm
now ok with the Tested-by.

Thanks,

--ljk
>
> --Dirk
>> ---
>> v2: fix break HP Proliant issue.
>> v3: expand the hardware vendor list.
>> v4: refine code.
>> v5v6: change enum PCC to PPC.
>>
>> 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,
>> + PPC,
>> +};
>> +
>> 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 ", PPC},
>> + {1, "ORACLE", "X4-2L ", PPC},
>> + {1, "ORACLE", "X4-2B ", PPC},
>> + {1, "ORACLE", "X3-2 ", PPC},
>> + {1, "ORACLE", "X3-2L ", PPC},
>> + {1, "ORACLE", "X3-2B ", PPC},
>> + {1, "ORACLE", "X4470M2 ", PPC},
>> + {1, "ORACLE", "X4270M3 ", PPC},
>> + {1, "ORACLE", "X4270M2 ", PPC},
>> + {1, "ORACLE", "X4170M2 ", PPC},
>> {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 PPC:
>> + 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)
>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

2014-12-02 01:03:06

by Ethan Zhao

[permalink] [raw]
Subject: Re: [PATCH 1/2 V6] intel_pstate: skip this driver if Sun server has _PPC method

Dirk,

On 2014/12/1 23:11, Dirk Brandewie wrote:
> On 11/30/2014 06:32 PM, 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 <[email protected]>
>> Signed-off-by: Dirk Brandewie <[email protected]>
>> Tested-by: Linda Knippers <[email protected]>
>
> In the future you should not add other peoples Signed-off-by or Tested-by
> tags unless they have explicitly told you can do so. Other than that I
> am fine with this patch.
Got it. many thanks.

Ethan
>
> --Dirk
>> ---
>> v2: fix break HP Proliant issue.
>> v3: expand the hardware vendor list.
>> v4: refine code.
>> v5v6: change enum PCC to PPC.
>>
>> 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,
>> + PPC,
>> +};
>> +
>> 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 ", PPC},
>> + {1, "ORACLE", "X4-2L ", PPC},
>> + {1, "ORACLE", "X4-2B ", PPC},
>> + {1, "ORACLE", "X3-2 ", PPC},
>> + {1, "ORACLE", "X3-2L ", PPC},
>> + {1, "ORACLE", "X3-2B ", PPC},
>> + {1, "ORACLE", "X4470M2 ", PPC},
>> + {1, "ORACLE", "X4270M3 ", PPC},
>> + {1, "ORACLE", "X4270M2 ", PPC},
>> + {1, "ORACLE", "X4170M2 ", PPC},
>> {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 PPC:
>> + 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)
>>
>

2014-12-02 18:22:42

by Kristen Carlson Accardi

[permalink] [raw]
Subject: Re: [PATCH 1/2 V6] intel_pstate: skip this driver if Sun server has _PPC method

On Mon, 1 Dec 2014 11:32:08 +0900
Ethan Zhao <[email protected]> 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 <[email protected]>
> Signed-off-by: Dirk Brandewie <[email protected]>
> Tested-by: Linda Knippers <[email protected]>

Acked-by: Kristen Carlson Accardi <[email protected]>

> ---
> v2: fix break HP Proliant issue.
> v3: expand the hardware vendor list.
> v4: refine code.
> v5v6: change enum PCC to PPC.
>
> 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,
> + PPC,
> +};
> +
> 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 ", PPC},
> + {1, "ORACLE", "X4-2L ", PPC},
> + {1, "ORACLE", "X4-2B ", PPC},
> + {1, "ORACLE", "X3-2 ", PPC},
> + {1, "ORACLE", "X3-2L ", PPC},
> + {1, "ORACLE", "X3-2B ", PPC},
> + {1, "ORACLE", "X4470M2 ", PPC},
> + {1, "ORACLE", "X4270M3 ", PPC},
> + {1, "ORACLE", "X4270M2 ", PPC},
> + {1, "ORACLE", "X4170M2 ", PPC},
> {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 PPC:
> + 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)

2014-12-03 01:57:48

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH 1/2 V6] intel_pstate: skip this driver if Sun server has _PPC method

On Tuesday, December 02, 2014 10:22:31 AM Kristen Carlson Accardi wrote:
> On Mon, 1 Dec 2014 11:32:08 +0900
> Ethan Zhao <[email protected]> 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 <[email protected]>
> > Signed-off-by: Dirk Brandewie <[email protected]>
> > Tested-by: Linda Knippers <[email protected]>
>
> Acked-by: Kristen Carlson Accardi <[email protected]>

Patch queued up for 3.19-rc1, thanks!

> > ---
> > v2: fix break HP Proliant issue.
> > v3: expand the hardware vendor list.
> > v4: refine code.
> > v5v6: change enum PCC to PPC.
> >
> > 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,
> > + PPC,
> > +};
> > +
> > 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 ", PPC},
> > + {1, "ORACLE", "X4-2L ", PPC},
> > + {1, "ORACLE", "X4-2B ", PPC},
> > + {1, "ORACLE", "X3-2 ", PPC},
> > + {1, "ORACLE", "X3-2L ", PPC},
> > + {1, "ORACLE", "X3-2B ", PPC},
> > + {1, "ORACLE", "X4470M2 ", PPC},
> > + {1, "ORACLE", "X4270M3 ", PPC},
> > + {1, "ORACLE", "X4270M2 ", PPC},
> > + {1, "ORACLE", "X4170M2 ", PPC},
> > {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 PPC:
> > + 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)
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

2014-12-04 02:24:52

by Ethan Zhao

[permalink] [raw]
Subject: Re: [PATCH 1/2 V6] intel_pstate: skip this driver if Sun server has _PPC method

if could please append

Tested-by: Alexey Kodanev <[email protected]>

He has helped to test this patch on Lenovo machines.

Thanks,
Ethan

On 2014/12/3 10:19, Rafael J. Wysocki wrote:
> On Tuesday, December 02, 2014 10:22:31 AM Kristen Carlson Accardi wrote:
>> On Mon, 1 Dec 2014 11:32:08 +0900
>> Ethan Zhao <[email protected]> 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 <[email protected]>
>>> Signed-off-by: Dirk Brandewie <[email protected]>
>>> Tested-by: Linda Knippers <[email protected]>
>> Acked-by: Kristen Carlson Accardi <[email protected]>
> Patch queued up for 3.19-rc1, thanks!
>
>>> ---
>>> v2: fix break HP Proliant issue.
>>> v3: expand the hardware vendor list.
>>> v4: refine code.
>>> v5v6: change enum PCC to PPC.
>>>
>>> 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,
>>> + PPC,
>>> +};
>>> +
>>> 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 ", PPC},
>>> + {1, "ORACLE", "X4-2L ", PPC},
>>> + {1, "ORACLE", "X4-2B ", PPC},
>>> + {1, "ORACLE", "X3-2 ", PPC},
>>> + {1, "ORACLE", "X3-2L ", PPC},
>>> + {1, "ORACLE", "X3-2B ", PPC},
>>> + {1, "ORACLE", "X4470M2 ", PPC},
>>> + {1, "ORACLE", "X4270M3 ", PPC},
>>> + {1, "ORACLE", "X4270M2 ", PPC},
>>> + {1, "ORACLE", "X4170M2 ", PPC},
>>> {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 PPC:
>>> + 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)
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html

2014-12-04 23:34:08

by Yasuaki Ishimatsu

[permalink] [raw]
Subject: Re: [PATCH 1/2 V6] intel_pstate: skip this driver if Sun server has _PPC method

(2014/12/01 11:32), 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 <[email protected]>
> Signed-off-by: Dirk Brandewie <[email protected]>
> Tested-by: Linda Knippers <[email protected]>
> ---
Looks good to me.

Reviewed-by: Yasuaki Ishimatsu <[email protected]>

Thanks,
Yasuaki Ishimatsu

> v2: fix break HP Proliant issue.
> v3: expand the hardware vendor list.
> v4: refine code.
> v5v6: change enum PCC to PPC.
>
> 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,
> + PPC,
> +};
> +
> 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 ", PPC},
> + {1, "ORACLE", "X4-2L ", PPC},
> + {1, "ORACLE", "X4-2B ", PPC},
> + {1, "ORACLE", "X3-2 ", PPC},
> + {1, "ORACLE", "X3-2L ", PPC},
> + {1, "ORACLE", "X3-2B ", PPC},
> + {1, "ORACLE", "X4470M2 ", PPC},
> + {1, "ORACLE", "X4270M3 ", PPC},
> + {1, "ORACLE", "X4270M2 ", PPC},
> + {1, "ORACLE", "X4170M2 ", PPC},
> {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 PPC:
> + 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)
>