--- x/lib/flex_proportions.c +++ y/lib/flex_proportions.c @@ -64,12 +64,14 @@ void fprop_global_destroy(struct fprop_g bool fprop_new_period(struct fprop_global *p, int periods) { s64 events = percpu_counter_sum(&p->events); + unsigned long flags; /* * Don't do anything if there are no events. */ if (events <= 1) return false; + local_irq_save(flags); preempt_disable_nested(); write_seqcount_begin(&p->sequence); if (periods < 64) @@ -79,6 +81,7 @@ bool fprop_new_period(struct fprop_globa p->period += periods; write_seqcount_end(&p->sequence); preempt_enable_nested(); + local_irq_restore(flags); return true; }