lkml.org 
[lkml]   [2005]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [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/

\
 
 \ /
  Last update: 2005-04-06 13:31    [W:0.066 / U:0.364 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site