Here is a version that works if CONFIG_PTE_64BIT is defined. If we like this, I can simplify the pte_update so we dont need the (unsigned long)(p+1) - 4) trick anymore. Let me know.
- kumar #ifdef CONFIG_PTE_64BIT static inline unsigned long long pte_update(pte_t *p, unsigned long clr, unsigned long set) { unsigned long long old; unsigned long tmp; __asm__ __volatile__("\ 1: lwarx %L0,0,%4\n\ lwzx %0,0,%3\n\ andc %1,%L0,%5\n\ or %1,%1,%6\n\ stwcx. %1,0,%4\n\ bne- 1b" : "=&r" (old), "=&r" (tmp), "=m" (*p) : "r" (p), "r" ((unsigned long)(p) + 4), "r" (clr), "r" (set), "m" (*p) : "cc" ); return old; } #else ... code that exists today ... #endif