Re: [PATCH] : ACPI : Add the MWAIT C-state mask to avoid overflow

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



applied.


--
Len Brown, Intel Open Source Technology Center

On Sun, 4 Jan 2009, Zhao Yakui wrote:

> Subject: ACPI: Add the MWAIT C-state mask to avoid overflow
> From: Zhao Yakui <yakui.zhao@xxxxxxxxx>
> 
> The Cx Register address obtained from the _CST object is used as the mait
> hints if the register type is FFixedHW. And it is used to check whether
> the Cx type is supported or not.
> 
> On some boxes the following Cx state package is obtained from _CST object:
>     >{
>                 ResourceTemplate ()
>                 {
>                     Register (FFixedHW,
>                         0x01,               // Bit Width
>                         0x02,               // Bit Offset
>                         0x0000000000889759, // Address
>                         0x03,               // Access Size
>                         )
>                 },
> 
>                 0x03,
>                 0xF5,
>                 0x015E }
>    In such case we should use the bit[7:4] of Cx address to check whether
> the Cx type is supported or not.
> 
> Add the MWAIT C-state mask to avoid overflow 
> 
> Signed-off-by: Zhao Yakui <yakui.zhao@xxxxxxxxx>
> Acked-by:Venki Pallipadi <venkatesh.pallipadi@xxxxxxxxx>
> ---
>  arch/x86/kernel/acpi/cstate.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> Index: linux-2.6/arch/x86/kernel/acpi/cstate.c
> ===================================================================
> --- linux-2.6.orig/arch/x86/kernel/acpi/cstate.c
> +++ linux-2.6/arch/x86/kernel/acpi/cstate.c
> @@ -56,6 +56,7 @@ static struct cstate_entry *cpu_cstate_e
>  static short mwait_supported[ACPI_PROCESSOR_MAX_POWER];
>  
>  #define MWAIT_SUBSTATE_MASK	(0xf)
> +#define MWAIT_CSTATE_MASK	(0xf)
>  #define MWAIT_SUBSTATE_SIZE	(4)
>  
>  #define CPUID_MWAIT_LEAF (5)
> @@ -98,7 +99,8 @@ int acpi_processor_ffh_cstate_probe(unsi
>  	cpuid(CPUID_MWAIT_LEAF, &eax, &ebx, &ecx, &edx);
>  
>  	/* Check whether this particular cx_type (in CST) is supported or not */
> -	cstate_type = (cx->address >> MWAIT_SUBSTATE_SIZE) + 1;
> +	cstate_type = ((cx->address >> MWAIT_SUBSTATE_SIZE) &
> +			MWAIT_CSTATE_MASK) + 1;
>  	edx_part = edx >> (cstate_type * MWAIT_SUBSTATE_SIZE);
>  	num_cstate_subtype = edx_part & MWAIT_SUBSTATE_MASK;
>  
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> Subject: ACPI: Add the MWAIT C-state mask to avoid overflow
> From: Zhao Yakui <yakui.zhao@xxxxxxxxx>
> 
> The Cx Register address obtained from the _CST object is used as the mait
> hints if the register type is FFixedHW. And it is used to check whether
> the Cx type is supported or not.
> 
> On some boxes the following Cx state package is obtained from _CST object:
>     >{
>                 ResourceTemplate ()
>                 {
>                     Register (FFixedHW,
>                         0x01,               // Bit Width
>                         0x02,               // Bit Offset
>                         0x0000000000889759, // Address
>                         0x03,               // Access Size
>                         )
>                 },
> 
>                 0x03,
>                 0xF5,
>                 0x015E }
>    In such case we should use the bit[7:4] of Cx address to check whether
> the Cx type is supported or not.
> 
> Add the MWAIT C-state mask to avoid overflow 
> 
> Signed-off-by: Zhao Yakui <yakui.zhao@xxxxxxxxx>
> Acked-by:Venki Pallipadi <venkatesh.pallipadi@xxxxxxxxx>
> ---
>  arch/x86/kernel/acpi/cstate.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> Index: linux-2.6/arch/x86/kernel/acpi/cstate.c
> ===================================================================
> --- linux-2.6.orig/arch/x86/kernel/acpi/cstate.c
> +++ linux-2.6/arch/x86/kernel/acpi/cstate.c
> @@ -56,6 +56,7 @@ static struct cstate_entry *cpu_cstate_e
>  static short mwait_supported[ACPI_PROCESSOR_MAX_POWER];
>  
>  #define MWAIT_SUBSTATE_MASK	(0xf)
> +#define MWAIT_CSTATE_MASK	(0xf)
>  #define MWAIT_SUBSTATE_SIZE	(4)
>  
>  #define CPUID_MWAIT_LEAF (5)
> @@ -98,7 +99,8 @@ int acpi_processor_ffh_cstate_probe(unsi
>  	cpuid(CPUID_MWAIT_LEAF, &eax, &ebx, &ecx, &edx);
>  
>  	/* Check whether this particular cx_type (in CST) is supported or not */
> -	cstate_type = (cx->address >> MWAIT_SUBSTATE_SIZE) + 1;
> +	cstate_type = ((cx->address >> MWAIT_SUBSTATE_SIZE) &
> +			MWAIT_CSTATE_MASK) + 1;
>  	edx_part = edx >> (cstate_type * MWAIT_SUBSTATE_SIZE);
>  	num_cstate_subtype = edx_part & MWAIT_SUBSTATE_MASK;
>  
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux