Messages in this thread Patch in this message | | | Date | Fri, 01 Apr 2005 15:55:11 -0800 | From | Frank Rowand <> | Subject | Re: [PATCH 0/5] ppc RT: Realtime preempt support for PPC |
| |
Ingo Molnar wrote: > * Frank Rowand <frowand@mvista.com> wrote: > > >>< more stuff deleted > >> >>I'm working on the architecture support for realtime on PPC64 now. If >>the lock field of struct raw_rwlock_t is a long instead of int then >>/proc/meminfo shows MemFree decreasing from 485608 kB to 485352 kB. >> >>Do you have a preference for lock to be long instead of int? >> >>Do you know if any of the other 64 bit architectures would have an >>issue with int? > > > that would be nice to know. I have no preference, other than if possible > it should be unified, no #ifdefs or other conditionals. > > Ingo
I looked at all the architectures and found that the disparity of the type of the "lock" field in struct rwlock_t is even larger than I had indicated in my earlier email. I am attaching a proof of concept patch to handle this. If this looks like a good method to you then I will create a real patch against your current patch, and include i386, mips, x86_64, and ppc.
Index: linux-2.6.10/include/linux/rt_lock.h =================================================================== --- linux-2.6.10.orig/include/linux/rt_lock.h +++ linux-2.6.10/include/linux/rt_lock.h @@ -37,8 +37,9 @@ typedef struct { * but only one writer. */ #ifdef CONFIG_SMP +#include <asm/raw_spinlock.h> typedef struct { - volatile unsigned long lock; + ARCH_RAW_RWLOCK_LOCK # ifdef CONFIG_DEBUG_SPINLOCK unsigned magic; # endif Index: linux-2.6.10/include/asm-ppc/raw_spinlock.h =================================================================== --- /dev/null +++ linux-2.6.10/include/asm-ppc/raw_spinlock.h @@ -0,0 +1,6 @@ +#ifndef __ASM_RAW_SPINLOCK_H +#define __ASM_RAW_SPINLOCK_H + +#define ARCH_RAW_RWLOCK_LOCK volatile signed int lock; + +#endif /* __ASM_RAW_SPINLOCK_H */ Index: linux-2.6.10/include/asm-i386/raw_spinlock.h =================================================================== --- /dev/null +++ linux-2.6.10/include/asm-i386/raw_spinlock.h @@ -0,0 +1,6 @@ +#ifndef __ASM_RAW_SPINLOCK_H +#define __ASM_RAW_SPINLOCK_H + +#define ARCH_RAW_RWLOCK_LOCK volatile unsigned int lock; + +#endif /* __ASM_RAW_SPINLOCK_H */
For the curious, the implementations of the "lock" field are listed below:
rwlock_t lock implemented as a spinlock field and a counter field
include/asm-parisc/spinlock.h include/asm-sh/spinlock.h
rwlock_t lock implemented as a 31 bit counter field and a 1 bit write lock field include/asm-ia64/spinlock.h
rwlock_t lock implemented as a 1 bit write lock field and a 31 bit counter field include/asm-alpha/spinlock.h
rwlock_t lock implemented as an unsigned int field
include/asm-arm/spinlock.h include/asm-i386/spinlock.h include/asm-mips/spinlock.h include/asm-x86_64/spinlock.h include/asm-sparc/spinlock.h include/asm-sparc64/spinlock.h #ifdef CONFIG_DEBUG_SPINLOCK
rwlock_t lock implemented as a signed int field
include/asm-m32r/spinlock.h include/asm-ppc64/spinlock.h include/asm-ppc/spinlock.h
rwlock_t lock implemented as an unsigned long field
include/asm-s390/spinlock.h
rwlock_t lock implemented as an unsigned int (_not_ in a structure)
include/asm-sparc64/spinlock.h #ifdef CONFIG_DEBUG_SPINLOCK
SMP rwlock_t not supported (no SMP support)
include/asm-arm26/spinlock.h include/asm-frv/spinlock.h include/asm-h8300/spinlock.h include/asm-m68knommu/spinlock.h include/asm-m68k/spinlock.h include/asm-sh64/spinlock.h
-Frank -- Frank Rowand <frank_rowand@mvista.com> MontaVista Software, Inc
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |