sched: walt: Improve the Scheduler

This change is for general scheduler improvement.

Change-Id: If7c9fd9d76d54da94acec15018c82e0d66d4162c
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
This commit is contained in:
Shaleen Agrawal 2021-03-01 14:53:16 -08:00 committed by Rishabh Bhatnagar
parent ab32bc3be6
commit 0a5adea340
2 changed files with 8 additions and 9 deletions

View File

@ -112,6 +112,11 @@ struct walt_task_struct {
bool iowaited;
};
#define wts_to_ts(wts) ({ \
void *__mptr = (void *)(wts); \
((struct task_struct *)(__mptr - \
offsetof(struct task_struct, android_vendor_data1))); })
static inline bool sched_get_wake_up_idle(struct task_struct *p)
{
struct walt_task_struct *wts = (struct walt_task_struct *) p->android_vendor_data1;

View File

@ -2663,7 +2663,6 @@ static void _set_preferred_cluster(struct walt_related_thread_group *grp)
u64 wallclock;
bool prev_skip_min = grp->skip_min;
struct walt_task_struct *wts;
struct list_head *task_list;
if (list_empty(&grp->tasks)) {
grp->skip_min = false;
@ -2686,9 +2685,8 @@ static void _set_preferred_cluster(struct walt_related_thread_group *grp)
if (wallclock - grp->last_update < sched_ravg_window / 10)
return;
list_for_each(task_list, &grp->tasks) {
p = (struct task_struct *) task_list;
wts = (struct walt_task_struct *) p->android_vendor_data1;
list_for_each_entry(wts, &grp->tasks, grp_list) {
p = wts_to_ts(wts);
if (task_boost_policy(p) == SCHED_BOOST_ON_BIG) {
group_boost = true;
break;
@ -3444,12 +3442,10 @@ void walt_fill_ta_data(struct core_ctl_notif_data *data)
struct walt_related_thread_group *grp;
unsigned long flags;
u64 total_demand = 0, wallclock;
struct task_struct *p;
int min_cap_cpu, scale = 1024;
struct walt_sched_cluster *cluster;
int i = 0;
struct walt_task_struct *wts;
struct list_head *task_list;
grp = lookup_related_thread_group(DEFAULT_CGROUP_COLOC_ID);
@ -3461,9 +3457,7 @@ void walt_fill_ta_data(struct core_ctl_notif_data *data)
wallclock = sched_ktime_clock();
list_for_each(task_list, &grp->tasks) {
p = (struct task_struct *) task_list;
wts = (struct walt_task_struct *) p->android_vendor_data1;
list_for_each_entry(wts, &grp->tasks, grp_list) {
if (wts->mark_start < wallclock -
(sched_ravg_window * sched_ravg_hist_size))
continue;