On Mon, 22 Apr 2013 13:47:22 +0800 liguang <lig.f...@cn.fujitsu.com> wrote:
> originally, 'data->flags = CSD_FLAG_LOCK', > and we use 'data->flags &= ~CSD_FLAG_LOCK' > for csd_unlock, they are not symmetrix operations > so use '|=' instead of '='. > though, now data->flags only hold CSD_FLAG_LOCK, > it's not so meaningful to use '|=' to set 1 bit, > and '&= ~' to clear 1 bit. > > Signed-off-by: liguang <lig.f...@cn.fujitsu.com> > --- > kernel/smp.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/kernel/smp.c b/kernel/smp.c > index 1818dc0..2d5deb4 100644 > --- a/kernel/smp.c > +++ b/kernel/smp.c > @@ -109,7 +109,7 @@ static void csd_lock_wait(struct call_single_data *data) > static void csd_lock(struct call_single_data *data) > { > csd_lock_wait(data); > - data->flags = CSD_FLAG_LOCK; > + data->flags |= CSD_FLAG_LOCK; > > /* call_single_data.flags is in fact presently a boolean - we only use one bit in that word. We could remove all the &=, |=, & and | operations on call_single_data.flags and treat it as a boolean. That would probably result in faster and smaller code. But leaving the other 31 bits alone and reserved-for-future-use is not a bad thing. But if we're going to do that we should do it consistently. I rewrote your changelog ;) From: liguang <lig.f...@cn.fujitsu.com> Subject: kernel/smp.c: use '|=' for csd_lock csd_lock() uses assignment to data->flags rather than |=. That is not buggy at present because only one bit (CSD_FLAG_LOCK) is defined in call_single_data.flags. But it will become buggy if we later add another flag, so fix it now. Signed-off-by: liguang <lig.f...@cn.fujitsu.com> Cc: Peter Zijlstra <a.p.zijls...@chello.nl> Cc: Oleg Nesterov <o...@redhat.com> Cc: Ingo Molnar <mi...@elte.hu> Signed-off-by: Andrew Morton <a...@linux-foundation.org> --- kernel/smp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff -puN kernel/smp.c~kernel-smpc-use-=-for-csd_lock kernel/smp.c --- a/kernel/smp.c~kernel-smpc-use-=-for-csd_lock +++ a/kernel/smp.c @@ -110,7 +110,7 @@ static void csd_lock_wait(struct call_si static void csd_lock(struct call_single_data *data) { csd_lock_wait(data); - data->flags = CSD_FLAG_LOCK; + data->flags |= CSD_FLAG_LOCK; /* * prevent CPU from reordering the above assignment _ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/