Messages in this thread | | | Date | Thu, 27 Jan 2011 11:13:50 +0900 | From | KAMEZAWA Hiroyuki <> | Subject | Re: [BUGFIX v2] memcg: fix res_counter_read_u64 lock aware (Was Re: [PATCH] oom: handle overflow in mem_cgroup_out_of_memory() |
| |
On Wed, 26 Jan 2011 17:57:22 -0800 Andrew Morton <akpm@linux-foundation.org> wrote:
> On Thu, 27 Jan 2011 10:43:39 +0900 KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote: > > > --- mmotm-0125.orig/kernel/res_counter.c > > +++ mmotm-0125/kernel/res_counter.c > > @@ -126,10 +126,24 @@ ssize_t res_counter_read(struct res_coun > > pos, buf, s - buf); > > } > > > > +#if BITS_PER_LONG == 32 > > +u64 res_counter_read_u64(struct res_counter *counter, int member) > > +{ > > + unsigned long flags; > > + u64 ret; > > + > > + spin_lock_irqsave(&counter->lock, flags); > > + ret = *res_counter_member(counter, member); > > + spin_unlock_irqrestore(&counter->lock, flags); > > + > > + return ret; > > +} > > +#else > > u64 res_counter_read_u64(struct res_counter *counter, int member) > > { > > return *res_counter_member(counter, member); > > } > > +#endif > > _irqsave is only needed if the lock will be taken from irq context. > Does that happen? > I just obey current desing of res_counter, as bugfix. This counter is designed to be safe against irq context. Adding CC: to Balbir.
To be honest, it has never happened since res_counter is introduced. I imagine there was a big plan when this counter was designed. But I think it will be never called other than memcg because cpu, blkio controller haven't use res_counter, finally. And memcg tends to use per-cpu counter because of performance.
If I need to remove irq flags from this function, I'll do in another patch which changes total design of res_counter and make it not safe agaisnt irq context.
Thanks, -Kame
| |