Messages in this thread | | | Date | Mon, 6 Jun 2022 09:44:44 +0200 | From | Jan Kara <> | Subject | Re: [PATCH] lib/flex_proportions.c: Remove local_irq_ops in fprop_new_period() |
| |
On Sat 04-06-22 21:15:02, wuchi wrote: > The commit <e78d4833c03e28> (lib: Fix possible deadlock in flexible > proportion code) adds the local_irq_ops because percpu_counter_{sum > |add} ops'lock can cause deadlock by interrupts. Now percpu_counter > _{sum|add} ops use raw_spin_(un)lock_irq*, so revert the commit and > resolve the conflict. > > Signed-off-by: wuchi <wuchi.zero@gmail.com>
Yes, good point. Thanks for cleaning this up. Feel free to add:
Reviewed-by: Jan Kara <jack@suse.cz>
I guess Andrew will pickup this patch, or should I do it Andrew?
Honza
> --- > lib/flex_proportions.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/lib/flex_proportions.c b/lib/flex_proportions.c > index 53e7eb1dd76c..05cccbcf1661 100644 > --- a/lib/flex_proportions.c > +++ b/lib/flex_proportions.c > @@ -63,18 +63,13 @@ void fprop_global_destroy(struct fprop_global *p) > */ > bool fprop_new_period(struct fprop_global *p, int periods) > { > - s64 events; > - unsigned long flags; > + s64 events = percpu_counter_sum(&p->events); > > - local_irq_save(flags); > - events = percpu_counter_sum(&p->events); > /* > * Don't do anything if there are no events. > */ > - if (events <= 1) { > - local_irq_restore(flags); > + if (events <= 1) > return false; > - } > write_seqcount_begin(&p->sequence); > if (periods < 64) > events -= events >> periods; > @@ -82,7 +77,6 @@ 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; > } > -- > 2.20.1 > -- Jan Kara <jack@suse.com> SUSE Labs, CR
| |