Hello, Waiman. On Fri, Apr 08, 2016 at 12:16:20PM -0400, Waiman Long wrote: > +/** > + * __percpu_stats_add - add given count to percpu value > + * @pcs : Pointer to percpu_stats structure > + * @stat: The statistics count that needs to be updated > + * @cnt: The value to be added to the statistics count > + */ > +void __percpu_stats_add(struct percpu_stats *pcs, int stat, int cnt) > +{ > + /* > + * u64_stats_update_begin/u64_stats_update_end alone are not safe > + * against recursive add on the same CPU caused by interrupt. > + * So we need to set the PCPU_STAT_INTSAFE flag if this is required. > + */ > + if (IS_STATS64(pcs)) { > + uint64_t *pstats64; > + unsigned long flags; > + > + pstats64 = get_cpu_ptr(pcs->stats64); > + if (pcs->flags & PCPU_STAT_INTSAFE) > + local_irq_save(flags); > + > + u64_stats_update_begin(&pcs->sync); > + pstats64[stat] += cnt; > + u64_stats_update_end(&pcs->sync); > + > + if (pcs->flags & PCPU_STAT_INTSAFE) > + local_irq_restore(flags); > + > + put_cpu_ptr(pcs->stats64); > + } > +} Heh, that's a handful, and, right, u64_stats needs separate irq protection. I'm not sure. If we have to do the above, it's likely that it'll perform worse than percpu_counter on 32bits. On 64bits, percpu_counter would incur extra preempt_disable/enable() operations but that comes from it not using this_cpu_add_return(). I wonder whether it'd be better to either use percpu_counter instead or if necessary extend it to handle multiple counters. What do you think? Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html