Re: [PATCH 3/3 v4] mm/vmalloc: Cache the vmalloc memory info

From: Ingo Molnar
Date: Mon Aug 24 2015 - 03:47:22 EST



* Ingo Molnar <mingo@xxxxxxxxxx> wrote:

> +/*
> + * Return a consistent snapshot of the current vmalloc allocation
> + * statistics, for /proc/meminfo:
> + */
> +void get_vmalloc_info(struct vmalloc_info *vmi)
> +{
> + int gen = READ_ONCE(vmap_info_gen);
> +
> + /*
> + * If the generation counter of the cache matches that of
> + * the vmalloc generation counter then return the cache:
> + */
> + if (READ_ONCE(vmap_info_cache_gen) == gen) {
> + int gen_after;
> +
> + /*
> + * The two read barriers make sure that we read
> + * 'gen', 'vmap_info_cache' and 'gen_after' in
> + * precisely that order:
> + */
> + smp_rmb();
> + *vmi = vmap_info_cache;
> +
> + smp_rmb();
> + gen_after = READ_ONCE(vmap_info_gen);
> +
> + /* The cache is still valid: */
> + if (gen == gen_after)
> + return;
> +
> + /* Ok, the cache got invalidated just now, regenerate it */
> + gen = gen_after;
> + }

One more detail: I just realized that with the read barriers, the READ_ONCE()
accesses are not needed anymore - the barriers and the control dependencies are
enough.

This will further simplify the code.

Thanks,

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/