/* Kernel memory accounting disabled? */
 static bool cgroup_memory_nokmem __ro_after_init;
 
-/* Whether the swap controller is active */
-#ifdef CONFIG_MEMCG_SWAP
-static bool cgroup_memory_noswap __initdata;
-
-static DEFINE_STATIC_KEY_FALSE(memcg_swap_enabled_key);
-static inline bool memcg_swap_enabled(void)
-{
-       return static_branch_likely(&memcg_swap_enabled_key);
-}
-#else
-static inline bool memcg_swap_enabled(void)
-{
-       return false;
-}
-#endif
-
 #ifdef CONFIG_CGROUP_WRITEBACK
 static DECLARE_WAIT_QUEUE_HEAD(memcg_cgwb_frn_waitq);
 #endif
 /* Whether legacy memory+swap accounting is active */
 static bool do_memsw_account(void)
 {
-       return !cgroup_subsys_on_dfl(memory_cgrp_subsys) && memcg_swap_enabled();
+       return !cgroup_subsys_on_dfl(memory_cgrp_subsys);
 }
 
 #define THRESHOLDS_EVENTS_TARGET 128
        if (!mem_cgroup_is_root(memcg))
                page_counter_uncharge(&memcg->memory, nr_entries);
 
-       if (memcg_swap_enabled() && memcg != swap_memcg) {
+       if (memcg != swap_memcg) {
                if (!mem_cgroup_is_root(swap_memcg))
                        page_counter_charge(&swap_memcg->memsw, nr_entries);
                page_counter_uncharge(&memcg->memsw, nr_entries);
 
        memcg = mem_cgroup_id_get_online(memcg);
 
-       if (memcg_swap_enabled() && !mem_cgroup_is_root(memcg) &&
+       if (!mem_cgroup_is_root(memcg) &&
            !page_counter_try_charge(&memcg->swap, nr_pages, &counter)) {
                memcg_memory_event(memcg, MEMCG_SWAP_MAX);
                memcg_memory_event(memcg, MEMCG_SWAP_FAIL);
        rcu_read_lock();
        memcg = mem_cgroup_from_id(id);
        if (memcg) {
-               if (memcg_swap_enabled() && !mem_cgroup_is_root(memcg)) {
+               if (!mem_cgroup_is_root(memcg)) {
                        if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
                                page_counter_uncharge(&memcg->swap, nr_pages);
                        else
 {
        long nr_swap_pages = get_nr_swap_pages();
 
-       if (!memcg_swap_enabled() || !cgroup_subsys_on_dfl(memory_cgrp_subsys))
+       if (mem_cgroup_disabled() || do_memsw_account())
                return nr_swap_pages;
        for (; memcg != root_mem_cgroup; memcg = parent_mem_cgroup(memcg))
                nr_swap_pages = min_t(long, nr_swap_pages,
 
        if (vm_swap_full())
                return true;
-       if (!memcg_swap_enabled() || !cgroup_subsys_on_dfl(memory_cgrp_subsys))
+       if (do_memsw_account())
                return false;
 
        memcg = folio_memcg(folio);
 
 static int __init setup_swap_account(char *s)
 {
-       bool res;
-
-       if (!kstrtobool(s, &res))
-               cgroup_memory_noswap = !res;
+       pr_warn_once("The swapaccount= commandline option is deprecated. "
+                    "Please report your usecase to linux-mm@kvack.org if you "
+                    "depend on this functionality.\n");
        return 1;
 }
 __setup("swapaccount=", setup_swap_account);
 };
 #endif /* CONFIG_MEMCG_KMEM && CONFIG_ZSWAP */
 
-/*
- * If mem_cgroup_swap_init() is implemented as a subsys_initcall()
- * instead of a core_initcall(), this could mean cgroup_memory_noswap still
- * remains set to false even when memcg is disabled via "cgroup_disable=memory"
- * boot parameter. This may result in premature OOPS inside
- * mem_cgroup_get_nr_swap_pages() function in corner cases.
- */
 static int __init mem_cgroup_swap_init(void)
 {
-       /* No memory control -> no swap control */
        if (mem_cgroup_disabled())
-               cgroup_memory_noswap = true;
-
-       if (cgroup_memory_noswap)
                return 0;
 
-       static_branch_enable(&memcg_swap_enabled_key);
-
        WARN_ON(cgroup_add_dfl_cftypes(&memory_cgrp_subsys, swap_files));
        WARN_ON(cgroup_add_legacy_cftypes(&memory_cgrp_subsys, memsw_files));
 #if defined(CONFIG_MEMCG_KMEM) && defined(CONFIG_ZSWAP)
 #endif
        return 0;
 }
-core_initcall(mem_cgroup_swap_init);
+subsys_initcall(mem_cgroup_swap_init);
 
 #endif /* CONFIG_MEMCG_SWAP */