#endif /* !CONFIG_SMP */
 
+#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)
+extern void rebuild_sched_domains_energy(void);
+#else
+static inline void rebuild_sched_domains_energy(void)
+{
+}
+#endif
+
 #ifndef arch_scale_cpu_capacity
 /**
  * arch_scale_cpu_capacity - get the capacity scale factor of a given CPU.
 
 cpufreq_governor_init(schedutil_gov);
 
 #ifdef CONFIG_ENERGY_MODEL
-extern bool sched_energy_update;
-extern struct mutex sched_energy_mutex;
-
 static void rebuild_sd_workfn(struct work_struct *work)
 {
-       mutex_lock(&sched_energy_mutex);
-       sched_energy_update = true;
-       rebuild_sched_domains();
-       sched_energy_update = false;
-       mutex_unlock(&sched_energy_mutex);
+       rebuild_sched_domains_energy();
 }
 static DECLARE_WORK(rebuild_sd_work, rebuild_sd_workfn);
 
 
 DEFINE_MUTEX(sched_energy_mutex);
 bool sched_energy_update;
 
+void rebuild_sched_domains_energy(void)
+{
+       mutex_lock(&sched_energy_mutex);
+       sched_energy_update = true;
+       rebuild_sched_domains();
+       sched_energy_update = false;
+       mutex_unlock(&sched_energy_mutex);
+}
+
 #ifdef CONFIG_PROC_SYSCTL
 int sched_energy_aware_handler(struct ctl_table *table, int write,
                void *buffer, size_t *lenp, loff_t *ppos)
        ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
        if (!ret && write) {
                state = static_branch_unlikely(&sched_energy_present);
-               if (state != sysctl_sched_energy_aware) {
-                       mutex_lock(&sched_energy_mutex);
-                       sched_energy_update = 1;
-                       rebuild_sched_domains();
-                       sched_energy_update = 0;
-                       mutex_unlock(&sched_energy_mutex);
-               }
+               if (state != sysctl_sched_energy_aware)
+                       rebuild_sched_domains_energy();
        }
 
        return ret;