On Fri 19-01-24 04:13:21, Kemeng Shi wrote: > The single variant of flex_proportions is not used. Simply remove it. > > Signed-off-by: Kemeng Shi <shikemeng@xxxxxxxxxxxxxxx> Yup. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > include/linux/flex_proportions.h | 32 ------------- > lib/flex_proportions.c | 77 -------------------------------- > 2 files changed, 109 deletions(-) > > diff --git a/include/linux/flex_proportions.h b/include/linux/flex_proportions.h > index 3e378b1fb0bc..e9a72fd0bfe7 100644 > --- a/include/linux/flex_proportions.h > +++ b/include/linux/flex_proportions.h > @@ -38,38 +38,6 @@ int fprop_global_init(struct fprop_global *p, gfp_t gfp); > void fprop_global_destroy(struct fprop_global *p); > bool fprop_new_period(struct fprop_global *p, int periods); > > -/* > - * ---- SINGLE ---- > - */ > -struct fprop_local_single { > - /* the local events counter */ > - unsigned long events; > - /* Period in which we last updated events */ > - unsigned int period; > - raw_spinlock_t lock; /* Protect period and numerator */ > -}; > - > -#define INIT_FPROP_LOCAL_SINGLE(name) \ > -{ .lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \ > -} > - > -int fprop_local_init_single(struct fprop_local_single *pl); > -void fprop_local_destroy_single(struct fprop_local_single *pl); > -void __fprop_inc_single(struct fprop_global *p, struct fprop_local_single *pl); > -void fprop_fraction_single(struct fprop_global *p, > - struct fprop_local_single *pl, unsigned long *numerator, > - unsigned long *denominator); > - > -static inline > -void fprop_inc_single(struct fprop_global *p, struct fprop_local_single *pl) > -{ > - unsigned long flags; > - > - local_irq_save(flags); > - __fprop_inc_single(p, pl); > - local_irq_restore(flags); > -} > - > /* > * ---- PERCPU ---- > */ > diff --git a/lib/flex_proportions.c b/lib/flex_proportions.c > index 83332fefa6f4..84ecccddc771 100644 > --- a/lib/flex_proportions.c > +++ b/lib/flex_proportions.c > @@ -83,83 +83,6 @@ bool fprop_new_period(struct fprop_global *p, int periods) > return true; > } > > -/* > - * ---- SINGLE ---- > - */ > - > -int fprop_local_init_single(struct fprop_local_single *pl) > -{ > - pl->events = 0; > - pl->period = 0; > - raw_spin_lock_init(&pl->lock); > - return 0; > -} > - > -void fprop_local_destroy_single(struct fprop_local_single *pl) > -{ > -} > - > -static void fprop_reflect_period_single(struct fprop_global *p, > - struct fprop_local_single *pl) > -{ > - unsigned int period = p->period; > - unsigned long flags; > - > - /* Fast path - period didn't change */ > - if (pl->period == period) > - return; > - raw_spin_lock_irqsave(&pl->lock, flags); > - /* Someone updated pl->period while we were spinning? */ > - if (pl->period >= period) { > - raw_spin_unlock_irqrestore(&pl->lock, flags); > - return; > - } > - /* Aging zeroed our fraction? */ > - if (period - pl->period < BITS_PER_LONG) > - pl->events >>= period - pl->period; > - else > - pl->events = 0; > - pl->period = period; > - raw_spin_unlock_irqrestore(&pl->lock, flags); > -} > - > -/* Event of type pl happened */ > -void __fprop_inc_single(struct fprop_global *p, struct fprop_local_single *pl) > -{ > - fprop_reflect_period_single(p, pl); > - pl->events++; > - percpu_counter_add(&p->events, 1); > -} > - > -/* Return fraction of events of type pl */ > -void fprop_fraction_single(struct fprop_global *p, > - struct fprop_local_single *pl, > - unsigned long *numerator, unsigned long *denominator) > -{ > - unsigned int seq; > - s64 num, den; > - > - do { > - seq = read_seqcount_begin(&p->sequence); > - fprop_reflect_period_single(p, pl); > - num = pl->events; > - den = percpu_counter_read_positive(&p->events); > - } while (read_seqcount_retry(&p->sequence, seq)); > - > - /* > - * Make fraction <= 1 and denominator > 0 even in presence of percpu > - * counter errors > - */ > - if (den <= num) { > - if (num) > - den = num; > - else > - den = 1; > - } > - *denominator = den; > - *numerator = num; > -} > - > /* > * ---- PERCPU ---- > */ > -- > 2.30.0 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR