• R
    percpu_ref: introduce PERCPU_REF_ALLOW_REINIT flag · 02f53f5e
    Roman Gushchin 提交于
    to #26323588
    
    commit 09ed79d6d75f06cc963a78f25463251b0a758dc7 upstream.
    
    In most cases percpu reference counters are not switched to the
    percpu mode after they reach the atomic mode. Some obvious exceptions
    are reference counters which are initialized into the atomic
    mode (using PERCPU_REF_INIT_ATOMIC and PERCPU_REF_INIT_DEAD flags),
    and there are few other exceptions.
    
    But in most cases there is no way back, and once the reference counter
    is switched to the atomic mode, there is no reason to wait for
    percpu_ref_exit() to release the percpu memory. Of course, the size
    of a single counter is not so big, but because it can pin the whole
    percpu block in memory, the memory footprint can be noticeable
    (e.g. on my 32 CPUs machine a percpu block is 8Mb large).
    
    To make releasing of the percpu memory as early as possible, let's
    introduce the PERCPU_REF_ALLOW_REINIT flag with the following semantics:
    it has to be set in order to switch a percpu reference counter to the
    percpu mode after the initialization. PERCPU_REF_INIT_ATOMIC and
    PERCPU_REF_INIT_DEAD flags will implicitly assume PERCPU_REF_ALLOW_REINIT.
    
    This patch doesn't introduce any functional change to avoid any
    regressions. It will be done later in the patchset after adjusting
    all call sites, which are reviving percpu counters.
    Signed-off-by: NRoman Gushchin <guro@fb.com>
    Acked-by: NTejun Heo <tj@kernel.org>
    Signed-off-by: NDennis Zhou <dennis@kernel.org>
    Signed-off-by: NJoseph Qi <joseph.qi@linux.alibaba.com>
    Acked-by: NXiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
    02f53f5e
percpu-refcount.h 10.4 KB