In the 64-bit kernel, the semaphore structure (like the 32-bit kernel) has waking and count fields swizzled so they line up the same in a 64-bit double word for either endian. However, the semaphore-helper.h function waking_non_zero_interruptible still has specialized code for little-endian manipulation of the fields as though they are swapped. Patch is attached, and fixes a pipe deadlock I was seeing (both the reader and writer were down'ing the semaphore). patch is against 2.5, but should be clean against 2.4 also. Kip