x86/resctrl: Make resctrl_mounted checks explicit
[linux-2.6-microblaze.git] / arch / x86 / kernel / cpu / resctrl / rdtgroup.c
index e42cbdf..857fbbc 100644 (file)
@@ -42,6 +42,9 @@ LIST_HEAD(rdt_all_groups);
 /* list of entries for the schemata file */
 LIST_HEAD(resctrl_schema_all);
 
+/* The filesystem can only be mounted once. */
+bool resctrl_mounted;
+
 /* Kernel fs node for "info" directory under root */
 static struct kernfs_node *kn_info;
 
@@ -881,7 +884,7 @@ int proc_resctrl_show(struct seq_file *s, struct pid_namespace *ns,
        mutex_lock(&rdtgroup_mutex);
 
        /* Return empty if resctrl has not been mounted. */
-       if (!static_branch_unlikely(&rdt_enable_key)) {
+       if (!resctrl_mounted) {
                seq_puts(s, "res:\nmon:\n");
                goto unlock;
        }
@@ -2608,7 +2611,7 @@ static int rdt_get_tree(struct fs_context *fc)
        /*
         * resctrl file system can only be mounted once.
         */
-       if (static_branch_unlikely(&rdt_enable_key)) {
+       if (resctrl_mounted) {
                ret = -EBUSY;
                goto out;
        }
@@ -2669,8 +2672,10 @@ static int rdt_get_tree(struct fs_context *fc)
        if (rdt_mon_capable)
                static_branch_enable_cpuslocked(&rdt_mon_enable_key);
 
-       if (rdt_alloc_capable || rdt_mon_capable)
+       if (rdt_alloc_capable || rdt_mon_capable) {
                static_branch_enable_cpuslocked(&rdt_enable_key);
+               resctrl_mounted = true;
+       }
 
        if (is_mbm_enabled()) {
                r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
@@ -2944,6 +2949,7 @@ static void rdt_kill_sb(struct super_block *sb)
        static_branch_disable_cpuslocked(&rdt_alloc_enable_key);
        static_branch_disable_cpuslocked(&rdt_mon_enable_key);
        static_branch_disable_cpuslocked(&rdt_enable_key);
+       resctrl_mounted = false;
        kernfs_kill_sb(sb);
        mutex_unlock(&rdtgroup_mutex);
        cpus_read_unlock();
@@ -3913,7 +3919,7 @@ void resctrl_offline_domain(struct rdt_resource *r, struct rdt_domain *d)
         * If resctrl is mounted, remove all the
         * per domain monitor data directories.
         */
-       if (static_branch_unlikely(&rdt_mon_enable_key))
+       if (resctrl_mounted && static_branch_unlikely(&rdt_mon_enable_key))
                rmdir_mondata_subdir_allrdtgrp(r, d->id);
 
        if (is_mbm_enabled())
@@ -3990,8 +3996,13 @@ int resctrl_online_domain(struct rdt_resource *r, struct rdt_domain *d)
        if (is_llc_occupancy_enabled())
                INIT_DELAYED_WORK(&d->cqm_limbo, cqm_handle_limbo);
 
-       /* If resctrl is mounted, add per domain monitor data directories. */
-       if (static_branch_unlikely(&rdt_mon_enable_key))
+       /*
+        * If the filesystem is not mounted then only the default resource group
+        * exists. Creation of its directories is deferred until mount time
+        * by rdt_get_tree() calling mkdir_mondata_all().
+        * If resctrl is mounted, add per domain monitor data directories.
+        */
+       if (resctrl_mounted && static_branch_unlikely(&rdt_mon_enable_key))
                mkdir_mondata_subdir_allrdtgrp(r, d);
 
        return 0;