Replace a number of memory barriers with smp_ variants. This means we won't take the unnecessary hit on UP machines. Signed-off-by: Anton Blanchard Signed-off-by: Andrew Morton --- fs/buffer.c | 6 +++--- ipc/mqueue.c | 4 ++-- kernel/kthread.c | 2 +- kernel/profile.c | 2 +- kernel/ptrace.c | 2 +- kernel/stop_machine.c | 10 +++++----- kernel/sys.c | 20 ++++++++++---------- kernel/timer.c | 2 +- lib/rwsem-spinlock.c | 6 +++--- lib/rwsem.c | 4 ++-- mm/mempool.c | 4 ++-- 11 files changed, 31 insertions(+), 31 deletions(-) diff -puN fs/buffer.c~use-smp_mb-wmb-rmb-where-possible fs/buffer.c --- 25/fs/buffer.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.075430184 -0700 +++ 25-akpm/fs/buffer.c 2005-04-29 18:12:25.093427448 -0700 @@ -218,7 +218,7 @@ struct super_block *freeze_bdev(struct b sb = get_super(bdev); if (sb && !(sb->s_flags & MS_RDONLY)) { sb->s_frozen = SB_FREEZE_WRITE; - wmb(); + smp_wmb(); sync_inodes_sb(sb, 0); DQUOT_SYNC(sb); @@ -235,7 +235,7 @@ struct super_block *freeze_bdev(struct b sync_inodes_sb(sb, 1); sb->s_frozen = SB_FREEZE_TRANS; - wmb(); + smp_wmb(); sync_blockdev(sb->s_bdev); @@ -263,7 +263,7 @@ void thaw_bdev(struct block_device *bdev if (sb->s_op->unlockfs) sb->s_op->unlockfs(sb); sb->s_frozen = SB_UNFROZEN; - wmb(); + smp_wmb(); wake_up(&sb->s_wait_unfrozen); drop_super(sb); } diff -puN ipc/mqueue.c~use-smp_mb-wmb-rmb-where-possible ipc/mqueue.c --- 25/ipc/mqueue.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.076430032 -0700 +++ 25-akpm/ipc/mqueue.c 2005-04-29 18:12:25.094427296 -0700 @@ -767,7 +767,7 @@ static inline void pipelined_send(struct list_del(&receiver->list); receiver->state = STATE_PENDING; wake_up_process(receiver->task); - wmb(); + smp_wmb(); receiver->state = STATE_READY; } @@ -786,7 +786,7 @@ static inline void pipelined_receive(str list_del(&sender->list); sender->state = STATE_PENDING; wake_up_process(sender->task); - wmb(); + smp_wmb(); sender->state = STATE_READY; } diff -puN kernel/kthread.c~use-smp_mb-wmb-rmb-where-possible kernel/kthread.c --- 25/kernel/kthread.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.078429728 -0700 +++ 25-akpm/kernel/kthread.c 2005-04-29 18:12:25.095427144 -0700 @@ -174,7 +174,7 @@ int kthread_stop(struct task_struct *k) /* Must init completion *before* thread sees kthread_stop_info.k */ init_completion(&kthread_stop_info.done); - wmb(); + smp_wmb(); /* Now set kthread_should_stop() to true, and wake it up. */ kthread_stop_info.k = k; diff -puN kernel/profile.c~use-smp_mb-wmb-rmb-where-possible kernel/profile.c --- 25/kernel/profile.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.079429576 -0700 +++ 25-akpm/kernel/profile.c 2005-04-29 18:12:25.095427144 -0700 @@ -522,7 +522,7 @@ static int __init create_hash_tables(voi return 0; out_cleanup: prof_on = 0; - mb(); + smp_mb(); on_each_cpu(profile_nop, NULL, 0, 1); for_each_online_cpu(cpu) { struct page *page; diff -puN kernel/ptrace.c~use-smp_mb-wmb-rmb-where-possible kernel/ptrace.c --- 25/kernel/ptrace.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.080429424 -0700 +++ 25-akpm/kernel/ptrace.c 2005-04-29 18:12:25.096426992 -0700 @@ -135,7 +135,7 @@ int ptrace_attach(struct task_struct *ta (current->gid != task->sgid) || (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE)) goto bad; - rmb(); + smp_rmb(); if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE)) goto bad; /* the same process cannot be attached many times */ diff -puN kernel/stop_machine.c~use-smp_mb-wmb-rmb-where-possible kernel/stop_machine.c --- 25/kernel/stop_machine.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.082429120 -0700 +++ 25-akpm/kernel/stop_machine.c 2005-04-29 18:12:25.096426992 -0700 @@ -33,7 +33,7 @@ static int stopmachine(void *cpu) set_cpus_allowed(current, cpumask_of_cpu((int)(long)cpu)); /* Ack: we are alive */ - mb(); /* Theoretically the ack = 0 might not be on this CPU yet. */ + smp_mb(); /* Theoretically the ack = 0 might not be on this CPU yet. */ atomic_inc(&stopmachine_thread_ack); /* Simple state machine */ @@ -43,14 +43,14 @@ static int stopmachine(void *cpu) local_irq_disable(); irqs_disabled = 1; /* Ack: irqs disabled. */ - mb(); /* Must read state first. */ + smp_mb(); /* Must read state first. */ atomic_inc(&stopmachine_thread_ack); } else if (stopmachine_state == STOPMACHINE_PREPARE && !prepared) { /* Everyone is in place, hold CPU. */ preempt_disable(); prepared = 1; - mb(); /* Must read state first. */ + smp_mb(); /* Must read state first. */ atomic_inc(&stopmachine_thread_ack); } /* Yield in first stage: migration threads need to @@ -62,7 +62,7 @@ static int stopmachine(void *cpu) } /* Ack: we are exiting. */ - mb(); /* Must read state first. */ + smp_mb(); /* Must read state first. */ atomic_inc(&stopmachine_thread_ack); if (irqs_disabled) @@ -77,7 +77,7 @@ static int stopmachine(void *cpu) static void stopmachine_set_state(enum stopmachine_state state) { atomic_set(&stopmachine_thread_ack, 0); - wmb(); + smp_wmb(); stopmachine_state = state; while (atomic_read(&stopmachine_thread_ack) != stopmachine_num_threads) cpu_relax(); diff -puN kernel/sys.c~use-smp_mb-wmb-rmb-where-possible kernel/sys.c --- 25/kernel/sys.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.083428968 -0700 +++ 25-akpm/kernel/sys.c 2005-04-29 18:12:25.098426688 -0700 @@ -525,7 +525,7 @@ asmlinkage long sys_setregid(gid_t rgid, if (new_egid != old_egid) { current->mm->dumpable = 0; - wmb(); + smp_wmb(); } if (rgid != (gid_t) -1 || (egid != (gid_t) -1 && egid != old_rgid)) @@ -556,7 +556,7 @@ asmlinkage long sys_setgid(gid_t gid) if(old_egid != gid) { current->mm->dumpable=0; - wmb(); + smp_wmb(); } current->gid = current->egid = current->sgid = current->fsgid = gid; } @@ -565,7 +565,7 @@ asmlinkage long sys_setgid(gid_t gid) if(old_egid != gid) { current->mm->dumpable=0; - wmb(); + smp_wmb(); } current->egid = current->fsgid = gid; } @@ -596,7 +596,7 @@ static int set_user(uid_t new_ruid, int if(dumpclear) { current->mm->dumpable = 0; - wmb(); + smp_wmb(); } current->uid = new_ruid; return 0; @@ -653,7 +653,7 @@ asmlinkage long sys_setreuid(uid_t ruid, if (new_euid != old_euid) { current->mm->dumpable=0; - wmb(); + smp_wmb(); } current->fsuid = current->euid = new_euid; if (ruid != (uid_t) -1 || @@ -703,7 +703,7 @@ asmlinkage long sys_setuid(uid_t uid) if (old_euid != uid) { current->mm->dumpable = 0; - wmb(); + smp_wmb(); } current->fsuid = current->euid = uid; current->suid = new_suid; @@ -748,7 +748,7 @@ asmlinkage long sys_setresuid(uid_t ruid if (euid != current->euid) { current->mm->dumpable = 0; - wmb(); + smp_wmb(); } current->euid = euid; } @@ -798,7 +798,7 @@ asmlinkage long sys_setresgid(gid_t rgid if (egid != current->egid) { current->mm->dumpable = 0; - wmb(); + smp_wmb(); } current->egid = egid; } @@ -845,7 +845,7 @@ asmlinkage long sys_setfsuid(uid_t uid) if (uid != old_fsuid) { current->mm->dumpable = 0; - wmb(); + smp_wmb(); } current->fsuid = uid; } @@ -875,7 +875,7 @@ asmlinkage long sys_setfsgid(gid_t gid) if (gid != old_fsgid) { current->mm->dumpable = 0; - wmb(); + smp_wmb(); } current->fsgid = gid; key_fsgid_changed(current); diff -puN kernel/timer.c~use-smp_mb-wmb-rmb-where-possible kernel/timer.c --- 25/kernel/timer.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.084428816 -0700 +++ 25-akpm/kernel/timer.c 2005-04-29 18:12:25.099426536 -0700 @@ -1007,7 +1007,7 @@ asmlinkage long sys_getppid(void) * Make sure we read the pid before re-reading the * parent pointer: */ - rmb(); + smp_rmb(); parent = me->group_leader->real_parent; if (old != parent) continue; diff -puN lib/rwsem.c~use-smp_mb-wmb-rmb-where-possible lib/rwsem.c --- 25/lib/rwsem.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.086428512 -0700 +++ 25-akpm/lib/rwsem.c 2005-04-29 18:12:25.100426384 -0700 @@ -74,7 +74,7 @@ __rwsem_do_wake(struct rw_semaphore *sem */ list_del(&waiter->list); tsk = waiter->task; - mb(); + smp_mb(); waiter->task = NULL; wake_up_process(tsk); put_task_struct(tsk); @@ -117,7 +117,7 @@ __rwsem_do_wake(struct rw_semaphore *sem waiter = list_entry(next, struct rwsem_waiter, list); next = waiter->list.next; tsk = waiter->task; - mb(); + smp_mb(); waiter->task = NULL; wake_up_process(tsk); put_task_struct(tsk); diff -puN lib/rwsem-spinlock.c~use-smp_mb-wmb-rmb-where-possible lib/rwsem-spinlock.c --- 25/lib/rwsem-spinlock.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.087428360 -0700 +++ 25-akpm/lib/rwsem-spinlock.c 2005-04-29 18:12:25.101426232 -0700 @@ -76,7 +76,7 @@ __rwsem_do_wake(struct rw_semaphore *sem list_del(&waiter->list); tsk = waiter->task; /* Don't touch waiter after ->task has been NULLed */ - mb(); + smp_mb(); waiter->task = NULL; wake_up_process(tsk); put_task_struct(tsk); @@ -91,7 +91,7 @@ __rwsem_do_wake(struct rw_semaphore *sem list_del(&waiter->list); tsk = waiter->task; - mb(); + smp_mb(); waiter->task = NULL; wake_up_process(tsk); put_task_struct(tsk); @@ -123,7 +123,7 @@ __rwsem_wake_one_writer(struct rw_semaph list_del(&waiter->list); tsk = waiter->task; - mb(); + smp_mb(); waiter->task = NULL; wake_up_process(tsk); put_task_struct(tsk); diff -puN mm/mempool.c~use-smp_mb-wmb-rmb-where-possible mm/mempool.c --- 25/mm/mempool.c~use-smp_mb-wmb-rmb-where-possible 2005-04-29 18:12:25.088428208 -0700 +++ 25-akpm/mm/mempool.c 2005-04-29 18:12:25.101426232 -0700 @@ -229,7 +229,7 @@ repeat_alloc: /* Now start performing page reclaim */ gfp_temp = gfp_mask; prepare_to_wait(&pool->wait, &wait, TASK_UNINTERRUPTIBLE); - mb(); + smp_mb(); if (!pool->curr_nr) io_schedule(); finish_wait(&pool->wait, &wait); @@ -250,7 +250,7 @@ void mempool_free(void *element, mempool { unsigned long flags; - mb(); + smp_mb(); if (pool->curr_nr < pool->min_nr) { spin_lock_irqsave(&pool->lock, flags); if (pool->curr_nr < pool->min_nr) { _