lkml.org 
[lkml]   [2012]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC][PATCH v2] ACPI: Ignore invalid _PSS entries, but use valid ones
    On Fri, May 04, 2012 at 05:25:13PM +0200, Marco Aurelio da Costa wrote:
    > From: Marco Aurelio da Costa <costa@gamic.com>
    > [v2: Fixes suggested by Konrad]
    > Signed-off-by: Marco Aurelio da Costa <costa@gamic.com>

    Heh. You didn't compile test this version did you?
    >
    > The EliteBook 8560W has non-initialized entries in its _PSS ACPI
    > table. Instead of bailing out when the first non-initialized entry is
    > found, ignore it and use only the valid entries. Only bail out if there
    > is no valid entry at all.
    >
    > ---
    > --- linux-3.3.3/drivers/acpi/processor_perflib.c.orig 2012-04-24
    > 22:18:23.288041268 +0200
    > +++ linux-3.3.3/drivers/acpi/processor_perflib.c 2012-05-04
    > 17:22:57.400034613 +0200
    > @@ -311,6 +311,7 @@ static int acpi_processor_get_performanc
    > struct acpi_buffer state = { 0, NULL };
    > union acpi_object *pss = NULL;
    > int i;
    > + int last_invalid = -1;
    >
    >
    > status = acpi_evaluate_object(pr->handle, "_PSS", NULL, &buffer);
    > @@ -372,14 +373,32 @@ static int acpi_processor_get_performanc
    > ((u32)(px->core_frequency * 1000) !=
    > (px->core_frequency * 1000))) {
    > printk(KERN_ERR FW_BUG PREFIX
    > - "Invalid BIOS _PSS frequency: 0x%llx MHz\n",
    > - px->core_frequency);
    > - result = -EFAULT;
    > - kfree(pr->performance->states);
    > - goto end;
    > + "Invalid BIOS _PSS frequency found for processor %d: 0x%llx MHz\n",
    > + pr->id, px->core_frequency);
    > + if (last_invalidi == -1)

    Hrmm. invalidi?

    > + last_invalid = i;
    > + } else {
    > + if (last_invalid != -1) {
    > + /*
    > + * Copy this valid entry over last_invalid entry
    > + */
    > + memcpy(&(pr->performance->states[last_invalid]),
    > + px, sizeof(struct acpi_processor_px));
    > + ++last_invalid;
    > + }
    > }
    > }
    >
    > + if (last_invalid == 0) {
    > + printk(KERN_ERR FW_BUG PREFIX
    > + "No valid BIOS _PSS frequency found for processor %d\n", pr->id);
    > + result = -EFAULT;
    > + kfree(pr->performance->states);

    Just as a precaution - also do this pls:

    pr->performance->states = NULL?

    > + }
    > +
    > + if (last_invalid > 0)
    > + pr->performance->state_count = last_invalid;
    > +
    > end:
    > kfree(buffer.pointer);
    >
    > --
    > Marco Costa
    > Customer Support
    > --
    > GAMIC mbH
    > Roermonder Strasse, 151
    > 52072 Aachen
    > Germany
    > --
    > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
    > the body of a message to majordomo@vger.kernel.org
    > More majordomo info at http://vger.kernel.org/majordomo-info.html


    \
     
     \ /
      Last update: 2012-05-04 18:21    [W:0.028 / U:59.852 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site