Re: patch acpi-remove-locking-from-pm1x_sts-register-reads.patch added to 2.6.28-stable tree

From: Stefan Lippers-Hollmann
Date: Sun Feb 08 2009 - 19:24:57 EST


Hi

On Sonntag, 8. Februar 2009, gregkh@xxxxxxx wrote:
>
> This is a note to let you know that we have just queued up the patch titled
>
> Subject: ACPI: remove locking from PM1x_STS register reads
>
> to the 2.6.28-stable tree. Its filename is
>
> acpi-remove-locking-from-pm1x_sts-register-reads.patch
[...]
> From a2b7b01c072435b7832ab392167545a1b38cabc3 Mon Sep 17 00:00:00 2001
> From: Len Brown <len.brown@xxxxxxxxx>
> Date: Wed, 28 Jan 2009 12:47:15 -0500
> Subject: ACPI: remove locking from PM1x_STS register reads
>
> From: Len Brown <len.brown@xxxxxxxxx>
>
> commit a2b7b01c072435b7832ab392167545a1b38cabc3 upstream.
>
> PM1a_STS and PM1b_STS are twins that get OR'd together
> on reads, and all writes are repeated to both.
>
> The fields in PM1x_STS are single bits only,
> there are no multi-bit fields.
>
> So it is not necessary to lock PM1x_STS reads against
> writes because it is impossible to read an intermediate
> value of a single bit. It will either be 0 or 1,
> even if a write is in progress during the read.
> Reads are asynchronous to writes no matter if a lock
> is used or not.
>
> Signed-off-by: Len Brown <len.brown@xxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>

This patch fails to compile on 2.6.28.4 + queue-2.6.28 (and 2.6.27 as
well):


BUILD arch/x86/boot/bzImage
Root device is (254, 1)
Setup is 11676 bytes (padded to 11776 bytes).
System is 2175 kB
CRC d4d9303a
Kernel: arch/x86/boot/bzImage is ready (#1)
ERROR: "acpi_get_register_unlocked" [drivers/acpi/processor.ko] undefined!
make[4]: *** [__modpost] Error 1
make[3]: *** [modules] Error 2


because it seems to depend on the larger changes started in, but not
limited to:


From ecfbbc7b46f74ca48b9f42132739114c9e70f8e4 Mon Sep 17 00:00:00 2001
From: Bob Moore <robert.moore@xxxxxxxxx>
Date: Wed, 31 Dec 2008 02:55:32 +0800
Subject: [PATCH] ACPICA: New: acpi_read and acpi_write public interfaces

Changed the acpi_hw_low_level_read and acpi_hw_low_level_write functions to
the public acpi_read and acpi_write to allow direct access to
ACPI registers. Removed the "width" parameter since the width
can be obtained from the input GAS structure. Updated the FADT
initialization to setup the GAS structures with the proper
widths. Some widths are still hardcoded because many FADTs have
incorrect register lengths.

Signed-off-by: Bob Moore <robert.moore@xxxxxxxxx
Signed-off-by: Lin Ming <ming.m.lin@xxxxxxxxx>
Signed-off-by: Len Brown <len.brown@xxxxxxxxx>


acpi_get_register_unlocked() seems to be a new feature and lots of h/w
interfaces have been converted to use it for 2.6.29-git, a quick grep
reveals:


From 7db5d82d0278b506441ab6025f0c6ce2f2aa3019 Mon Sep 17 00:00:00 2001
From: Bob Moore <robert.moore@xxxxxxxxx>
Date: Tue, 30 Dec 2008 11:04:48 +0800
Subject: [PATCH] ACPICA: Move all public H/W interfaces to new hwxface

From 95b482a8d31116f3f5c2a5089569393234d06385 Mon Sep 17 00:00:00 2001
From: Len Brown <len.brown@xxxxxxxxx>
Date: Fri, 9 Jan 2009 00:13:17 -0500
Subject: [PATCH] ACPICA: create acpica/ directory

From 9fdd54f206722ecee7fd7ba9dba26140450e7c32 Mon Sep 17 00:00:00 2001
From: Len Brown <len.brown@xxxxxxxxx>
Date: Fri, 6 Feb 2009 12:24:17 -0500
Subject: [PATCH] ACPI: delete CPU_IDLE=n code


and this patch, amounting to rather large changes in total.

> drivers/acpi/processor_idle.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> --- a/drivers/acpi/processor_idle.c
> +++ b/drivers/acpi/processor_idle.c
> @@ -446,7 +446,7 @@ static void acpi_processor_idle(void)
>
> pr->power.bm_activity <<= diff;
>
> - acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status);
> + acpi_get_register_unlocked(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status);
> if (bm_status) {
> pr->power.bm_activity |= 0x1;
> acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1);
> @@ -1382,7 +1382,7 @@ static int acpi_idle_bm_check(void)
> {
> u32 bm_status = 0;
>
> - acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status);
> + acpi_get_register_unlocked(ACPI_BITREG_BUS_MASTER_STATUS, &bm_status);
> if (bm_status)
> acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS, 1);
> /*

Regards
Stefan Lippers-Hollmann

Attachment: signature.asc
Description: This is a digitally signed message part.