I hope this bug was not the result of my cc'ing Linus
on some emails and not on others, because this bug is a mistake
that I made a few weeks ago and then fixed when it was immediately
pointed out to me by some smart person on the acpi list.
The test "((1 << bit_granularity) -1) & ~mask" will always
fail on x86+gcc if bit_granularity == 32, because the value of 1<<32
on x86 + gcc-2.95.2 is 1, not 0. The value of 1<<n is not defined
in ANSI C when n >= bitsizeof(result), so we should not do this anyhow.
Anyhow, here is a patch that should fix the problem.
--
Adam J. Richter __ ______________ 4880 Stevens Creek Blvd, Suite 104
[EMAIL PROTECTED] \ / San Jose, California 95129-1034
+1 408 261-6630 | g g d r a s i l United States of America
fax +1 408 261-6631 "Free Software For The Rest Of Us."
--- linux-2.4.1/drivers/acpi/interpreter/amfldio.c Mon Jan 29 10:15:59 2001
+++ linux/drivers/acpi/interpreter/amfldio.c Wed Jan 31 05:23:48 2001
@@ -415,7 +415,8 @@
/* Check if update rule needs to be applied (not if mask is all ones)
*/
- if (((1 << bit_granularity) -1) & ~mask) {
+ /* The left shift drops the bits we want to ignore. */
+ if ((~mask << (sizeof(mask)*8 - bit_granularity)) != 0) {
/*
* Read the current contents of the byte/word/dword containing
* the field, and merge with the new field value.