Messages in this thread Patch in this message | | | Date | Thu, 6 Jul 2006 10:16:39 +0200 | From | Ingo Molnar <> | Subject | [patch] spinlocks: remove 'volatile' |
| |
* Linus Torvalds <torvalds@osdl.org> wrote:
> I wonder if we should remove the "volatile". There really isn't > anything _good_ that gcc can do with it, but we've seen gcc code > generation do stupid things before just because "volatile" seems to > just disable even proper normal working.
yeah. I tried this and it indeed slashed 42K off text size (0.2%):
text data bss dec filename 20779489 6073834 3075176 29928499 vmlinux.volatile 20736884 6073834 3075176 29885894 vmlinux.non-volatile
i booted the resulting allyesconfig bzImage and everything seems to be working fine. Find patch below.
Ingo
------------------> Subject: spinlocks: remove 'volatile' From: Ingo Molnar <mingo@elte.hu>
remove 'volatile' from the spinlock types, it causes gcc to generate really bad code. (and it's pointless anyway)
this reduces the non-debug SMP kernel's size by 0.2% (!).
Signed-off-by: Ingo Molnar <mingo@elte.hu> --- include/asm-i386/spinlock_types.h | 4 ++-- include/asm-x86_64/spinlock_types.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
Index: linux/include/asm-i386/spinlock_types.h =================================================================== --- linux.orig/include/asm-i386/spinlock_types.h +++ linux/include/asm-i386/spinlock_types.h @@ -6,13 +6,13 @@ #endif typedef struct { - volatile unsigned int slock; + unsigned int slock; } raw_spinlock_t; #define __RAW_SPIN_LOCK_UNLOCKED { 1 } typedef struct { - volatile unsigned int lock; + unsigned int lock; } raw_rwlock_t; #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } Index: linux/include/asm-x86_64/spinlock_types.h =================================================================== --- linux.orig/include/asm-x86_64/spinlock_types.h +++ linux/include/asm-x86_64/spinlock_types.h @@ -6,13 +6,13 @@ #endif typedef struct { - volatile unsigned int slock; + unsigned int slock; } raw_spinlock_t; #define __RAW_SPIN_LOCK_UNLOCKED { 1 } typedef struct { - volatile unsigned int lock; + unsigned int lock; } raw_rwlock_t; #define __RAW_RW_LOCK_UNLOCKED { RW_LOCK_BIAS } - 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/
| |