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.