On Mon, Feb 21, 2022 at 12:31:17PM +0100, Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote: > What about memcg_rstat_updated()? It does: > > | x = __this_cpu_add_return(stats_updates, abs(val)); > | if (x > MEMCG_CHARGE_BATCH) { > | atomic_add(x / MEMCG_CHARGE_BATCH, &stats_flush_threshold); > | __this_cpu_write(stats_updates, 0); > | } > > The writes to stats_updates can happen from IRQ-context and with > disabled preemption only. So this is not good, right? These counters serve as a hint for aggregating per-cpu per-cgroup stats. If they were systematically mis-updated, it could manifest by missing "refresh signal" from the given CPU. OTOH, this lagging is also meant to by limited by elapsed time thanks to periodic flushing. This could affect freshness of the stats not their accuracy though. HTH, Michal