[COMMON] kernel: cpu: fix conflict
authorYoungmin Nam <youngmin.nam@samsung.com>
Thu, 2 May 2019 08:43:32 +0000 (17:43 +0900)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:24:58 +0000 (20:24 +0300)
Change-Id: I1fa521368b3dffbd7bb572dac10e403c7bd07d2b
Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
drivers/cpufreq/exynos-acme.c
drivers/soc/samsung/exynos-cpupm.c
drivers/soc/samsung/exynos-topology.c
include/linux/tick.h
init/Kconfig
kernel/sched/cpufreq_schedutil.c
kernel/sched/ems/lbt.c
kernel/sched/ems/ontime.c
kernel/sched/fair.c
kernel/sched/sched.h
kernel/time/tick-sched.c

index d2d57de2bc639fd3a52b2564a1e01575ad52cdcd..6c21803192fbf1627a5d3b91e9676ce8b585a0af 100644 (file)
@@ -814,7 +814,7 @@ EXPORT_SYMBOL(exynos_pstate_get_boost_freq);
 #define SCALE_SIZE     2
 
 static ssize_t show_cpufreq_table(struct kobject *kobj,
-                               struct attribute *attr, char *buf)
+                               struct kobj_attribute *attr, char *buf)
 {
        struct exynos_cpufreq_domain *domain;
        ssize_t count = 0;
@@ -839,7 +839,7 @@ static ssize_t show_cpufreq_table(struct kobject *kobj,
 }
 
 static ssize_t show_cpufreq_min_limit(struct kobject *kobj,
-                               struct attribute *attr, char *buf)
+                               struct kobj_attribute *attr, char *buf)
 {
        struct exynos_cpufreq_domain *domain;
        unsigned int pm_qos_min;
@@ -875,7 +875,7 @@ static ssize_t show_cpufreq_min_limit(struct kobject *kobj,
 }
 
 static ssize_t store_cpufreq_min_limit(struct kobject *kobj,
-                               struct attribute *attr, const char *buf,
+                               struct kobj_attribute *attr, const char *buf,
                                size_t count)
 {
        struct exynos_cpufreq_domain *domain;
@@ -932,7 +932,7 @@ static ssize_t store_cpufreq_min_limit(struct kobject *kobj,
 }
 
 static ssize_t store_cpufreq_min_limit_wo_boost(struct kobject *kobj,
-                               struct attribute *attr, const char *buf,
+                               struct kobj_attribute *attr, const char *buf,
                                size_t count)
 {
        struct exynos_cpufreq_domain *domain;
@@ -987,7 +987,7 @@ static ssize_t store_cpufreq_min_limit_wo_boost(struct kobject *kobj,
 }
 
 static ssize_t show_cpufreq_max_limit(struct kobject *kobj,
-                               struct attribute *attr, char *buf)
+                               struct kobj_attribute *attr, char *buf)
 {
        struct exynos_cpufreq_domain *domain;
        unsigned int pm_qos_max;
@@ -1044,7 +1044,7 @@ static void disable_domain_cpus(struct exynos_cpufreq_domain *domain)
        exynos_cpuhp_request("ACME", mask, 0);
 }
 
-static ssize_t store_cpufreq_max_limit(struct kobject *kobj, struct attribute *attr,
+static ssize_t store_cpufreq_max_limit(struct kobject *kobj, struct kobj_attribute *attr,
                                        const char *buf, size_t count)
 {
        struct exynos_cpufreq_domain *domain;
@@ -1097,15 +1097,15 @@ static ssize_t store_cpufreq_max_limit(struct kobject *kobj, struct attribute *a
        return count;
 }
 
-static struct global_attr cpufreq_table =
+static struct kobj_attribute cpufreq_table =
 __ATTR(cpufreq_table, S_IRUGO, show_cpufreq_table, NULL);
-static struct global_attr cpufreq_min_limit =
+static struct kobj_attribute cpufreq_min_limit =
 __ATTR(cpufreq_min_limit, S_IRUGO | S_IWUSR,
                show_cpufreq_min_limit, store_cpufreq_min_limit);
-static struct global_attr cpufreq_min_limit_wo_boost =
+static struct kobj_attribute cpufreq_min_limit_wo_boost =
 __ATTR(cpufreq_min_limit_wo_boost, S_IRUGO | S_IWUSR,
                show_cpufreq_min_limit, store_cpufreq_min_limit_wo_boost);
-static struct global_attr cpufreq_max_limit =
+static struct kobj_attribute cpufreq_max_limit =
 __ATTR(cpufreq_max_limit, S_IRUGO | S_IWUSR,
                show_cpufreq_max_limit, store_cpufreq_max_limit);
 
index 69d56dc274fcb862728f4cf10621d03f6c541403..e3aad7c59b22d922648bc065ac766550cd8df5b6 100644 (file)
@@ -536,7 +536,7 @@ void enable_power_mode(int cpu, int type)
 /* get sleep length of given cpu from tickless framework */
 static s64 get_sleep_length(int cpu)
 {
-       return ktime_to_us(tick_nohz_get_sleep_length_cpu(cpu));
+       return ktime_to_us(ktime_sub(*(get_next_event_cpu(cpu)), ktime_get()));
 }
 
 static int cpus_busy(int target_residency, const struct cpumask *cpus)
index e08501433bc196ea54d52018edffc4a3141aec71..381621f5944d8915bf471e1e2ac89c582f5ccb16 100644 (file)
@@ -21,7 +21,7 @@
 #include <linux/of.h>
 #include <linux/sched.h>
 #include <linux/sched/topology.h>
-#include <linux/sched_energy.h>
+#include <linux/sched/energy.h>
 #include <linux/slab.h>
 #include <linux/string.h>
 
index bd8219943a91439192e275f0242b8168db59256d..7aa8d168a5d6f3f0af7ff1181d90daf92ecefadb 100644 (file)
@@ -314,4 +314,6 @@ static inline void tick_nohz_task_switch(void)
                __tick_nohz_task_switch();
 }
 
+extern ktime_t *get_next_event_cpu(unsigned int cpu);
+
 #endif
index d276e56b2d06af60b1fc0e697bd21b0bdff4173a..8234cda66b5f40d111001482b0bc6acbde6f35fa 100644 (file)
@@ -638,7 +638,7 @@ menu "FAIR Scheuler tunables"
 
 choice
        prompt "Utilization's PELT half-Life"
-       default PELT_UTIL_HALFLIFE_32
+       default PELT_UTIL_HALFLIFE_16
        help
          Allows choosing one of the possible values for the PELT half-life to
          be used for the update of the utilization of tasks and CPUs.
index 14fac84cfa7ff7084bc47eb5b2c19a8abed66a13..0995b753a116c8477064aa29272f144ac6594f54 100644 (file)
@@ -841,9 +841,9 @@ static void sugov_stop_slack(int cpu)
                del_timer_sync(&sg_exynos->timer);
 }
 
-static s64 get_next_event_time_ms(void)
+static s64 get_next_event_time_ms(int cpu)
 {
-       return ktime_to_us(tick_nohz_get_sleep_length());
+       return ktime_to_us(ktime_sub(*(get_next_event_cpu(cpu)), ktime_get()));
 }
 
 static int sugov_need_slack_timer(unsigned int cpu)
@@ -855,7 +855,7 @@ static int sugov_need_slack_timer(unsigned int cpu)
                return 0;
 
        if (sg_cpu->util > sg_exynos->min &&
-               get_next_event_time_ms() > sg_exynos->expired_time)
+               get_next_event_time_ms(cpu) > sg_exynos->expired_time)
                return 1;
 
        return 0;
index 74587979cb8b8480bc26cfd1cb232fd8ff98650c..80c4d968e79e990c5b7da2415b12aa0bd6267c44 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/cpuidle.h>
 #include <linux/pm_qos.h>
 #include <linux/ems.h>
-#include <linux/sched_energy.h>
+#include <linux/sched/energy.h>
 
 #include <trace/events/ems.h>
 
index 0706e62dfae06661f7becfc3a8061a0e4c5ec829..64044105b42ffd935b06d6658994e575be8757fc 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/cpuidle.h>
 #include <linux/pm_qos.h>
 #include <linux/ems.h>
-#include <linux/sched_energy.h>
+#include <linux/sched/energy.h>
 
 #include <trace/events/ems.h>
 
index 3740af6b5157853b7fd893ba4cf788f567b305b4..9e841ceed1ecbe7f1563bd8258248b624391ef3f 100644 (file)
@@ -282,21 +282,21 @@ const struct sched_class fair_sched_class;
  * CFS operations on generic schedulable entities:
  */
 
-#ifdef CONFIG_FAIR_GROUP_SCHED
+extern int cpu_util_wake(int cpu, struct task_struct *p);
 
-/* cpu runqueue to which this cfs_rq is attached */
-static inline struct rq *rq_of(struct cfs_rq *cfs_rq)
+#define entity_is_task(se)     1
+
+static inline struct task_struct *task_of(struct sched_entity *se)
 {
-       return cfs_rq->rq;
+       return container_of(se, struct task_struct, se);
 }
 
-/* An entity is a task if it doesn't "own" a runqueue */
-#define entity_is_task(se)     (!se->my_q)
+#ifdef CONFIG_FAIR_GROUP_SCHED
 
-static inline struct task_struct *task_of(struct sched_entity *se)
+/* cpu runqueue to which this cfs_rq is attached */
+static inline struct rq *rq_of(struct cfs_rq *cfs_rq)
 {
-       SCHED_WARN_ON(!entity_is_task(se));
-       return container_of(se, struct task_struct, se);
+       return cfs_rq->rq;
 }
 
 /* Walk up scheduling entities hierarchy */
@@ -443,18 +443,11 @@ find_matching_se(struct sched_entity **se, struct sched_entity **pse)
 
 #else  /* !CONFIG_FAIR_GROUP_SCHED */
 
-static inline struct task_struct *task_of(struct sched_entity *se)
-{
-       return container_of(se, struct task_struct, se);
-}
-
 static inline struct rq *rq_of(struct cfs_rq *cfs_rq)
 {
        return container_of(cfs_rq, struct rq, cfs);
 }
 
-#define entity_is_task(se)     1
-
 #define for_each_sched_entity(se) \
                for (; se; se = NULL)
 
@@ -5842,7 +5835,7 @@ static unsigned long __cpu_norm_util(unsigned long util, unsigned long capacity)
  *
  * Return: the (estimated) utilization for the specified CPU
  */
-static inline unsigned long cpu_util(int cpu)
+unsigned long cpu_util(int cpu)
 {
        struct cfs_rq *cfs_rq;
        unsigned int util;
@@ -5895,73 +5888,6 @@ static inline unsigned long cpu_util_freq(int cpu)
 #endif
 }
 
-/*
- * cpu_util_wake: Compute CPU utilization with any contributions from
- * the waking task p removed.
- */
-static unsigned long cpu_util_wake(int cpu, struct task_struct *p)
-{
-       struct cfs_rq *cfs_rq;
-       unsigned int util;
-
-#ifdef CONFIG_SCHED_WALT
-       /*
-        * WALT does not decay idle tasks in the same manner
-        * as PELT, so it makes little sense to subtract task
-        * utilization from cpu utilization. Instead just use
-        * cpu_util for this case.
-        */
-       if (likely(!walt_disabled && sysctl_sched_use_walt_cpu_util))
-               return cpu_util(cpu);
-#endif
-
-       /* Task has no contribution or is new */
-       if (cpu != task_cpu(p) || !READ_ONCE(p->se.avg.last_update_time))
-               return cpu_util(cpu);
-
-       cfs_rq = &cpu_rq(cpu)->cfs;
-       util = READ_ONCE(cfs_rq->avg.util_avg);
-
-       /* Discount task's blocked util from CPU's util */
-       util -= min_t(unsigned int, util, task_util(p));
-
-       /*
-        * Covered cases:
-        *
-        * a) if *p is the only task sleeping on this CPU, then:
-        *      cpu_util (== task_util) > util_est (== 0)
-        *    and thus we return:
-        *      cpu_util_wake = (cpu_util - task_util) = 0
-        *
-        * b) if other tasks are SLEEPING on this CPU, which is now exiting
-        *    IDLE, then:
-        *      cpu_util >= task_util
-        *      cpu_util > util_est (== 0)
-        *    and thus we discount *p's blocked utilization to return:
-        *      cpu_util_wake = (cpu_util - task_util) >= 0
-        *
-        * c) if other tasks are RUNNABLE on that CPU and
-        *      util_est > cpu_util
-        *    then we use util_est since it returns a more restrictive
-        *    estimation of the spare capacity on that CPU, by just
-        *    considering the expected utilization of tasks already
-        *    runnable on that CPU.
-        *
-        * Cases a) and b) are covered by the above code, while case c) is
-        * covered by the following code when estimated utilization is
-        * enabled.
-        */
-       if (sched_feat(UTIL_EST))
-               util = max(util, READ_ONCE(cfs_rq->avg.util_est.enqueued));
-
-       /*
-        * Utilization (estimated) can exceed the CPU capacity, thus let's
-        * clamp to the maximum CPU capacity to ensure consistency with
-        * the cpu_util call.
-        */
-       return min_t(unsigned long, util, capacity_orig_of(cpu));
-}
-
 static unsigned long group_max_util(struct energy_env *eenv, int cpu_idx)
 {
        unsigned long max_util = 0;
index bb96dbe19bc9d18beb114b2dd15b2e8e1ebb625d..d0462f3c4a749167719d96896a1b7c5bf341b09a 100644 (file)
@@ -1927,6 +1927,8 @@ extern unsigned int sysctl_sched_use_walt_cpu_util;
 extern unsigned int walt_ravg_window;
 extern bool walt_disabled;
 
+extern unsigned long cpu_util(int cpu);
+
 #endif /* CONFIG_SMP */
 
 static inline void sched_rt_avg_update(struct rq *rq, u64 rt_delta)
index 710505b026dd1bce6cf5257bfb0a1b7805ccf764..af837eecb5bac6d820411c7bd1c8f56ce6714149 100644 (file)
@@ -44,6 +44,11 @@ struct tick_sched *tick_get_tick_sched(int cpu)
        return &per_cpu(tick_cpu_sched, cpu);
 }
 
+ktime_t *get_next_event_cpu(unsigned int cpu)
+{
+       return &(per_cpu(tick_cpu_device, cpu).evtdev->next_event);
+}
+
 #if defined(CONFIG_NO_HZ_COMMON) || defined(CONFIG_HIGH_RES_TIMERS)
 /*
  * The time, when the last jiffy update happened. Protected by jiffies_lock.