Re: CPU C-state storange on Panasonic TOUGH BOOK CF-R9

From: Norikatsu Shigemura <nork_at_FreeBSD.org>
Date: Sun, 12 Sep 2010 19:05:37 +0900
Hi avg.

On Sun, 12 Sep 2010 12:36:06 +0300
Andriy Gapon <avg_at_icyb.net.ua> wrote:
> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> > --- sys/dev/acpica/acpi_cpu.c.orig	2010-09-12 01:31:38.144243000 +0900
> > +++ sys/dev/acpica/acpi_cpu.c	2010-09-12 18:06:14.651938193 +0900
> > _at__at_ -597,7 +597,7 _at__at_
	:
> >      gas.BitWidth = 8;
> > -    if (AcpiGbl_FADT.C2Latency <= 100) {
> > +    if (AcpiGbl_FADT.C2Latency <= 1000) {
> >  	gas.Address = sc->cpu_p_blk + 4;
> >  	acpi_bus_alloc_gas(sc->cpu_dev, &cx_ptr->res_type, &sc->cpu_rid,
	:
> >      /* Validate and allocate resources for C3 (P_LVL3). */
> > -    if (AcpiGbl_FADT.C3Latency <= 1000 && !(cpu_quirks & CPU_QUIRK_NO_C3)) {
> > +    if (AcpiGbl_FADT.C3Latency <= 10000 && !(cpu_quirks & CPU_QUIRK_NO_C3)) {
> >  	gas.Address = sc->cpu_p_blk + 5;
> >  	acpi_bus_alloc_gas(sc->cpu_dev, &cx_ptr->res_type, &sc->cpu_rid, &gas,
	:
> The above changes are incorrect.
> > _at__at_ -690,7 +690,7 _at__at_
	:
> >  	case ACPI_STATE_C2:
> > -	    if (cx_ptr->trans_lat > 100) {
> > +	    if (cx_ptr->trans_lat > 1000) {
> >  		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
	:
> >  	default:
> > -	    if (cx_ptr->trans_lat > 1000 ||
> > +	    if (cx_ptr->trans_lat > 10000 ||
> >  		(cpu_quirks & CPU_QUIRK_NO_C3) != 0) {
	: 
> You should simply remove the check instead of bumping the threshold.

	I re-tried to test following patch.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- sys/dev/acpica/acpi_cpu.c.orig	2010-09-12 01:31:38.144243000 +0900
+++ sys/dev/acpica/acpi_cpu.c	2010-09-12 18:47:56.057309965 +0900
_at__at_ -690,19 +690,13 _at__at_
 	    sc->cpu_cx_count++;
 	    continue;
 	case ACPI_STATE_C2:
-	    if (cx_ptr->trans_lat > 100) {
-		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-				 "acpi_cpu%d: C2[%d] not available.\n",
-				 device_get_unit(sc->cpu_dev), i));
-		continue;
-	    }
-	    sc->cpu_non_c3 = i;
-	    break;
+	    ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+	    		 "acpi_cpu%d: C2[%d] not available.\n",
+	    		 device_get_unit(sc->cpu_dev), i));
+	    continue;
 	case ACPI_STATE_C3:
 	default:
-	    if (cx_ptr->trans_lat > 1000 ||
-		(cpu_quirks & CPU_QUIRK_NO_C3) != 0) {
-
+	    if (cpu_quirks & CPU_QUIRK_NO_C3) {
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				 "acpi_cpu%d: C3[%d] not available.\n",
 				 device_get_unit(sc->cpu_dev), i));
_at__at_ -731,6 +725,9 _at__at_
 	    cx_ptr++;
 	    sc->cpu_cx_count++;
 	}
+else {
+device_printf(sc->cpu_dev, "cx_ptr->p_lvlx IS NULL.\n");
+}
     }
     AcpiOsFree(buf.Pointer);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

	But not works:-(.
	Please see also attached dmesg.txt.

> > 	But cx_lowest is not changed:
> Why do you expect it to be changed?

	Sorry, I forgot about *_cx_lowest="LOW" in /etc/rc.conf.
	I wrote following setting to /etc/rc.conf.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
performance_cx_lowest="LOW"
economy_cx_lowest="LOW"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

	Thank you.

-- 
Norikatsu Shigemura <nork_at_FreeBSD.org>

Received on Sun Sep 12 2010 - 08:05:44 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:07 UTC