# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2005/01/20 21:52:27-05:00 len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org # [ACPI] Make the bm_activity depend on "jiffies", instead of numbers # of the check being called. This means bus mastering activity # is assumed if bm_check isn't called; and multiple calls during # one jiffy will be |='ed. # # Signed-off-by: Dominik Brodowski # Signed-off-by: Len Brown # # include/acpi/processor.h # 2005/01/20 21:52:11-05:00 len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org +1 -0 # jiffies-based bus-master activity history # # drivers/acpi/processor_idle.c # 2005/01/20 21:52:11-05:00 len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org +14 -1 # jiffies-based bus-master activity history # diff -Nru a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c --- a/drivers/acpi/processor_idle.c 2005-01-20 22:45:19 -05:00 +++ b/drivers/acpi/processor_idle.c 2005-01-20 22:45:19 -05:00 @@ -193,8 +193,18 @@ */ if (pr->flags.bm_check) { u32 bm_status = 0; + unsigned long diff = jiffies - pr->power.bm_check_timestamp; - pr->power.bm_activity <<= 1; + if (diff > 32) + diff = 32; + + while (diff) { + /* if we didn't get called, assume there was busmaster activity */ + diff--; + if (diff) + pr->power.bm_activity |= 0x1; + pr->power.bm_activity <<= 1; + } acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status, ACPI_MTX_DO_NOT_LOCK); @@ -213,6 +223,9 @@ || (inb_p(errata.piix4.bmisx + 0x0A) & 0x01)) pr->power.bm_activity++; } + + pr->power.bm_check_timestamp = jiffies; + /* * Apply bus mastering demotion policy. Automatically demote * to avoid a faulty transition. Note that the processor diff -Nru a/include/acpi/processor.h b/include/acpi/processor.h --- a/include/acpi/processor.h 2005-01-20 22:45:19 -05:00 +++ b/include/acpi/processor.h 2005-01-20 22:45:19 -05:00 @@ -54,6 +54,7 @@ struct acpi_processor_power { struct acpi_processor_cx *state; + unsigned long bm_check_timestamp; u32 default_state; u32 bm_activity; int count;