From d68426b572008ceaf1cf01d009da35141048aaa2 Mon Sep 17 00:00:00 2001 From: Jan Kara Date: Fri, 1 Jun 2012 00:42:06 +0200 Subject: [PATCH] --- yaml --- r: 320248 b: refs/heads/master c: e78d4833c03e28205b3d983f0c4e586ee34785fd h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/lib/flex_proportions.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index ac1894d27215..e2ae671eb5d2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f3109a51f8dc88e8a94f620240b7474b91bed37a +refs/heads/master: e78d4833c03e28205b3d983f0c4e586ee34785fd diff --git a/trunk/lib/flex_proportions.c b/trunk/lib/flex_proportions.c index e02a3883ae01..c785554f9523 100644 --- a/trunk/lib/flex_proportions.c +++ b/trunk/lib/flex_proportions.c @@ -62,13 +62,18 @@ void fprop_global_destroy(struct fprop_global *p) */ bool fprop_new_period(struct fprop_global *p, int periods) { - u64 events = percpu_counter_sum(&p->events); + u64 events; + unsigned long flags; + local_irq_save(flags); + events = percpu_counter_sum(&p->events); /* * Don't do anything if there are no events. */ - if (events <= 1) + if (events <= 1) { + local_irq_restore(flags); return false; + } write_seqcount_begin(&p->sequence); if (periods < 64) events -= events >> periods; @@ -76,6 +81,7 @@ bool fprop_new_period(struct fprop_global *p, int periods) percpu_counter_add(&p->events, -events); p->period += periods; write_seqcount_end(&p->sequence); + local_irq_restore(flags); return true; }