On Fri, May 7, 2010 at 8:33 PM, Demelier David <demelier.da...@gmail.com> wrote:
> Le Vendredi 07 mai 2010 à 18:22 +0200, Giovanni Trematerra a écrit :
>> On Fri, May 7, 2010 at 2:08 PM, Demelier David <demelier.da...@gmail.com> 
>> wrote:
>> > Hi,
>> >        I noticed that pluggin the AC adaptor when I boot without it does 
>> > not
>> >        panic. It only panic when removing it.
>> >
>> >        Maybe that could help ?
>> >
>>
>> Good to know. The problem lies somewhere when performance state change.
>> In your case it happens when you remove AC adaptor. Let's hope someone on
>> acpi@ ml comes up with a good idea.
>>
>
> Okay so for the moment no change, I'll wait for someone with an idea
> that could solve my problem. For me because the panic only happens when
> changing profile from ac plugged -> ac unplugged (and not the reverse) I
> would think it's a cpu related acpi issue.
>

I looked deeper and it seems to me that when you unplug the AC
adapter, acpi_cpu_notify calls acpi_cpu_cx_cst that try to allocate a
new cx_ptr->p_lvlx  via acpi_PkgGas.
If acpi_PkgGas set cx_ptr->p_lvlx to NULL for any reasons you'll have
the panic that you reported.
A solution would be to set acpi_cpu_hook to NULL so acpi_cpu_idle won't call it.
I need some time to have a patch because of the possible race between
acpi_cpu_notify and
acpi_cpu_idle during set acpi_cpu_hook to NULL.
if you have time and want panic your system you could try the attached
patch, just to be
sure that we catch it.

Thanks

--
Gianni
Index: sys/dev/acpica/acpi_cpu.c
===================================================================
--- sys/dev/acpica/acpi_cpu.c   (revision 207947)
+++ sys/dev/acpica/acpi_cpu.c   (working copy)
@@ -609,7 +609,9 @@ acpi_cpu_generic_cx_probe(struct acpi_cpu_softc *s
            cx_ptr->trans_lat = AcpiGbl_FADT.C2Latency;
            cx_ptr++;
            sc->cpu_cx_count++;
-       }
+       } else
+               panic("%s: Cannot allocate resource %d for C3 state", __func__, 
+                   cx_ptr->res_type);
     }
     if (sc->cpu_p_blk_len < 6)
        return;
@@ -625,7 +627,9 @@ acpi_cpu_generic_cx_probe(struct acpi_cpu_softc *s
            cx_ptr->trans_lat = AcpiGbl_FADT.C3Latency;
            cx_ptr++;
            sc->cpu_cx_count++;
-       }
+       } else
+               panic("%s: Cannot allocate resource %d for C3 state", __func__, 
+                   cx_ptr->res_type);
     }
 }
 
@@ -732,7 +736,8 @@ acpi_cpu_cx_cst(struct acpi_cpu_softc *sc)
                             cx_ptr->trans_lat));
            cx_ptr++;
            sc->cpu_cx_count++;
-       }
+       } else
+               panic("Got it! acpi_PkgGas set p_lvlx to NULL");
     }
     AcpiOsFree(buf.Pointer);
 
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to