* [PATCH 1/2] sched/deadline: Add cpudl_maximum_dl() @ 2017-06-02 7:31 Byungchul Park 2017-06-02 7:31 ` [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() Byungchul Park 0 siblings, 1 reply; 9+ messages in thread From: Byungchul Park @ 2017-06-02 7:31 UTC (permalink / raw) To: peterz, mingo; +Cc: linux-kernel, juri.lelli, rostedt, kernel-team Current code uses cpudl_maximum() to get the root node's cpu, while it directly accesses the root node using 'cp->elements[0].dl' to get the root node's dl. It would be better and more readible if a function to get the dl is added. So add it. Signed-off-by: Byungchul Park <byungchul.park@lge.com> --- kernel/sched/cpudeadline.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c index fba235c..d4a6963 100644 --- a/kernel/sched/cpudeadline.c +++ b/kernel/sched/cpudeadline.c @@ -108,11 +108,16 @@ static void cpudl_heapify(struct cpudl *cp, int idx) cpudl_heapify_down(cp, idx); } -static inline int cpudl_maximum(struct cpudl *cp) +static inline int cpudl_maximum_cpu(struct cpudl *cp) { return cp->elements[0].cpu; } +static inline u64 cpudl_maximum_dl(struct cpudl *cp) +{ + return cp->elements[0].dl; +} + /* * cpudl_find - find the best (later-dl) CPU in the system * @cp: the cpudl max-heap context @@ -131,9 +136,9 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p, cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) { best_cpu = cpumask_any(later_mask); goto out; - } else if (cpumask_test_cpu(cpudl_maximum(cp), &p->cpus_allowed) && - dl_time_before(dl_se->deadline, cp->elements[0].dl)) { - best_cpu = cpudl_maximum(cp); + } else if (cpumask_test_cpu(cpudl_maximum_cpu(cp), &p->cpus_allowed) && + dl_time_before(dl_se->deadline, cpudl_maximum_dl(cp))) { + best_cpu = cpudl_maximum_cpu(cp); if (later_mask) cpumask_set_cpu(best_cpu, later_mask); } -- 1.9.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() 2017-06-02 7:31 [PATCH 1/2] sched/deadline: Add cpudl_maximum_dl() Byungchul Park @ 2017-06-02 7:31 ` Byungchul Park 2017-06-06 15:12 ` Juri Lelli 0 siblings, 1 reply; 9+ messages in thread From: Byungchul Park @ 2017-06-02 7:31 UTC (permalink / raw) To: peterz, mingo; +Cc: linux-kernel, juri.lelli, rostedt, kernel-team When the heap tree is empty, cp->elements[0].cpu has meaningless value. We need to consider the case. Signed-off-by: Byungchul Park <byungchul.park@lge.com> --- kernel/sched/cpudeadline.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c index d4a6963..9b314a9 100644 --- a/kernel/sched/cpudeadline.c +++ b/kernel/sched/cpudeadline.c @@ -110,7 +110,8 @@ static void cpudl_heapify(struct cpudl *cp, int idx) static inline int cpudl_maximum_cpu(struct cpudl *cp) { - return cp->elements[0].cpu; + int cpu = cp->elements[0].cpu; + return cp->elements[cpu].idx == IDX_INVALID ? -1 : cpu; } static inline u64 cpudl_maximum_dl(struct cpudl *cp) -- 1.9.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() 2017-06-02 7:31 ` [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() Byungchul Park @ 2017-06-06 15:12 ` Juri Lelli 2017-06-06 23:42 ` Byungchul Park 0 siblings, 1 reply; 9+ messages in thread From: Juri Lelli @ 2017-06-06 15:12 UTC (permalink / raw) To: Byungchul Park Cc: peterz, mingo, linux-kernel, juri.lelli, rostedt, kernel-team Hi, On 02/06/17 16:31, Byungchul Park wrote: > When the heap tree is empty, cp->elements[0].cpu has meaningless value. > We need to consider the case. > > Signed-off-by: Byungchul Park <byungchul.park@lge.com> > --- > kernel/sched/cpudeadline.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c > index d4a6963..9b314a9 100644 > --- a/kernel/sched/cpudeadline.c > +++ b/kernel/sched/cpudeadline.c > @@ -110,7 +110,8 @@ static void cpudl_heapify(struct cpudl *cp, int idx) > > static inline int cpudl_maximum_cpu(struct cpudl *cp) > { > - return cp->elements[0].cpu; > + int cpu = cp->elements[0].cpu; > + return cp->elements[cpu].idx == IDX_INVALID ? -1 : cpu; Mmm, don't we get a WARN from cpumask_check() if we return -1 here? Thanks, - Juri ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() 2017-06-06 15:12 ` Juri Lelli @ 2017-06-06 23:42 ` Byungchul Park 2017-06-07 0:14 ` Byungchul Park 0 siblings, 1 reply; 9+ messages in thread From: Byungchul Park @ 2017-06-06 23:42 UTC (permalink / raw) To: Juri Lelli; +Cc: peterz, mingo, linux-kernel, juri.lelli, rostedt, kernel-team On Tue, Jun 06, 2017 at 04:12:25PM +0100, Juri Lelli wrote: > Hi, > > On 02/06/17 16:31, Byungchul Park wrote: > > When the heap tree is empty, cp->elements[0].cpu has meaningless value. Hi, The meaningless value is 0. > > We need to consider the case. > > > > Signed-off-by: Byungchul Park <byungchul.park@lge.com> > > --- > > kernel/sched/cpudeadline.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c > > index d4a6963..9b314a9 100644 > > --- a/kernel/sched/cpudeadline.c > > +++ b/kernel/sched/cpudeadline.c > > @@ -110,7 +110,8 @@ static void cpudl_heapify(struct cpudl *cp, int idx) > > > > static inline int cpudl_maximum_cpu(struct cpudl *cp) > > { > > - return cp->elements[0].cpu; > > + int cpu = cp->elements[0].cpu; > > + return cp->elements[cpu].idx == IDX_INVALID ? -1 : cpu; > > Mmm, don't we get a WARN from cpumask_check() if we return -1 here? The function does not return -1 without my patch. Right? > > Thanks, > > - Juri ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() 2017-06-06 23:42 ` Byungchul Park @ 2017-06-07 0:14 ` Byungchul Park 2017-06-08 14:02 ` Juri Lelli 0 siblings, 1 reply; 9+ messages in thread From: Byungchul Park @ 2017-06-07 0:14 UTC (permalink / raw) To: Juri Lelli; +Cc: peterz, mingo, linux-kernel, juri.lelli, rostedt, kernel-team On Wed, Jun 07, 2017 at 08:42:24AM +0900, Byungchul Park wrote: > On Tue, Jun 06, 2017 at 04:12:25PM +0100, Juri Lelli wrote: > > Hi, > > > > On 02/06/17 16:31, Byungchul Park wrote: > > > When the heap tree is empty, cp->elements[0].cpu has meaningless value. > > Hi, > > The meaningless value is 0. > > > > We need to consider the case. > > > > > > Signed-off-by: Byungchul Park <byungchul.park@lge.com> > > > --- > > > kernel/sched/cpudeadline.c | 3 ++- > > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > > > diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c > > > index d4a6963..9b314a9 100644 > > > --- a/kernel/sched/cpudeadline.c > > > +++ b/kernel/sched/cpudeadline.c > > > @@ -110,7 +110,8 @@ static void cpudl_heapify(struct cpudl *cp, int idx) > > > > > > static inline int cpudl_maximum_cpu(struct cpudl *cp) > > > { > > > - return cp->elements[0].cpu; > > > + int cpu = cp->elements[0].cpu; > > > + return cp->elements[cpu].idx == IDX_INVALID ? -1 : cpu; > > > > Mmm, don't we get a WARN from cpumask_check() if we return -1 here? > > The function does not return -1 without my patch. > > Right? Or the following patch would be needed, instead. ----->8----- >From cada1345bf0ff8e6b5743999509d2abcacd79a9e Mon Sep 17 00:00:00 2001 From: Byungchul Park <byungchul.park@lge.com> Date: Wed, 7 Jun 2017 09:05:34 +0900 Subject: [PATCH 2/2] sched/deadline: Initialize cp->elements[].cpu to an invalid value Currently, when the heap tree is empty, cpudl_maximum_cpu() returns 0, which causes unnecessary migration. It has to return an invalid value e.g. -1 to prevent that. Signed-off-by: Byungchul Park <byungchul.park@lge.com> --- kernel/sched/cpudeadline.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c index d4a6963..0f67cea 100644 --- a/kernel/sched/cpudeadline.c +++ b/kernel/sched/cpudeadline.c @@ -266,8 +266,10 @@ int cpudl_init(struct cpudl *cp) return -ENOMEM; } - for_each_possible_cpu(i) + for_each_possible_cpu(i) { + cp->elements[i].cpu = -1; cp->elements[i].idx = IDX_INVALID; + } return 0; } -- 1.9.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() 2017-06-07 0:14 ` Byungchul Park @ 2017-06-08 14:02 ` Juri Lelli 2017-06-09 2:43 ` Byungchul Park 0 siblings, 1 reply; 9+ messages in thread From: Juri Lelli @ 2017-06-08 14:02 UTC (permalink / raw) To: Byungchul Park Cc: peterz, mingo, linux-kernel, juri.lelli, rostedt, kernel-team On 07/06/17 09:14, Byungchul Park wrote: > On Wed, Jun 07, 2017 at 08:42:24AM +0900, Byungchul Park wrote: > > On Tue, Jun 06, 2017 at 04:12:25PM +0100, Juri Lelli wrote: > > > Hi, > > > > > > On 02/06/17 16:31, Byungchul Park wrote: [...] > > > > > > > > static inline int cpudl_maximum_cpu(struct cpudl *cp) > > > > { > > > > - return cp->elements[0].cpu; > > > > + int cpu = cp->elements[0].cpu; > > > > + return cp->elements[cpu].idx == IDX_INVALID ? -1 : cpu; > > > > > > Mmm, don't we get a WARN from cpumask_check() if we return -1 here? > > > > The function does not return -1 without my patch. > > > > Right? > That's actually my point: with the change you are proposing we will start returning -1 and it looks to me that the WARN will start to fire. What about the below instead (properly splitted in 2 patches I guess, and I'm not sure at all the macro thing is pretty at all) ? --->8--- kernel/sched/cpudeadline.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c index fba235c7d026..32e3dcef2b81 100644 --- a/kernel/sched/cpudeadline.c +++ b/kernel/sched/cpudeadline.c @@ -108,11 +108,17 @@ static void cpudl_heapify(struct cpudl *cp, int idx) cpudl_heapify_down(cp, idx); } -static inline int cpudl_maximum(struct cpudl *cp) -{ - return cp->elements[0].cpu; +#define cpudl_maximum(field) \ +static inline int cpudl_maximum_##field \ +(struct cpudl *cp) \ +{ \ + return cp->elements[0].field; \ } +cpudl_maximum(cpu); +cpudl_maximum(dl); +cpudl_maximum(idx); + /* * cpudl_find - find the best (later-dl) CPU in the system * @cp: the cpudl max-heap context @@ -131,9 +137,10 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p, cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) { best_cpu = cpumask_any(later_mask); goto out; - } else if (cpumask_test_cpu(cpudl_maximum(cp), &p->cpus_allowed) && - dl_time_before(dl_se->deadline, cp->elements[0].dl)) { - best_cpu = cpudl_maximum(cp); + } else if (cpudl_maximum_idx(cp) != IDX_INVALID && + cpumask_test_cpu(cpudl_maximum_cpu(cp), &p->cpus_allowed) && + dl_time_before(dl_se->deadline, cpudl_maximum_dl(cp))) { + best_cpu = cpudl_maximum_cpu(cp); if (later_mask) cpumask_set_cpu(best_cpu, later_mask); } ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() 2017-06-08 14:02 ` Juri Lelli @ 2017-06-09 2:43 ` Byungchul Park 2017-06-09 11:42 ` Juri Lelli 0 siblings, 1 reply; 9+ messages in thread From: Byungchul Park @ 2017-06-09 2:43 UTC (permalink / raw) To: Juri Lelli; +Cc: peterz, mingo, linux-kernel, juri.lelli, rostedt, kernel-team On Thu, Jun 08, 2017 at 03:02:43PM +0100, Juri Lelli wrote: > On 07/06/17 09:14, Byungchul Park wrote: > > On Wed, Jun 07, 2017 at 08:42:24AM +0900, Byungchul Park wrote: > > > On Tue, Jun 06, 2017 at 04:12:25PM +0100, Juri Lelli wrote: > > > > Hi, > > > > > > > > On 02/06/17 16:31, Byungchul Park wrote: > > [...] > > > > > > > > > > > static inline int cpudl_maximum_cpu(struct cpudl *cp) > > > > > { > > > > > - return cp->elements[0].cpu; > > > > > + int cpu = cp->elements[0].cpu; > > > > > + return cp->elements[cpu].idx == IDX_INVALID ? -1 : cpu; > > > > > > > > Mmm, don't we get a WARN from cpumask_check() if we return -1 here? > > > > > > The function does not return -1 without my patch. > > > > > > Right? > > > > That's actually my point: with the change you are proposing we will > start returning -1 and it looks to me that the WARN will start to fire. Hi, I see what you talk about. You are talking about WARN in cpumask_check(). Sorry for missing your words. > What about the below instead (properly splitted in 2 patches I guess, > and I'm not sure at all the macro thing is pretty at all) ? > > --->8--- > kernel/sched/cpudeadline.c | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) > > diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c > index fba235c7d026..32e3dcef2b81 100644 > --- a/kernel/sched/cpudeadline.c > +++ b/kernel/sched/cpudeadline.c > @@ -108,11 +108,17 @@ static void cpudl_heapify(struct cpudl *cp, int idx) > cpudl_heapify_down(cp, idx); > } > > -static inline int cpudl_maximum(struct cpudl *cp) > -{ > - return cp->elements[0].cpu; > +#define cpudl_maximum(field) \ > +static inline int cpudl_maximum_##field \ > +(struct cpudl *cp) \ > +{ \ > + return cp->elements[0].field; \ > } > > +cpudl_maximum(cpu); > +cpudl_maximum(dl); > +cpudl_maximum(idx); > + > /* > * cpudl_find - find the best (later-dl) CPU in the system > * @cp: the cpudl max-heap context > @@ -131,9 +137,10 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p, > cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) { > best_cpu = cpumask_any(later_mask); > goto out; > - } else if (cpumask_test_cpu(cpudl_maximum(cp), &p->cpus_allowed) && > - dl_time_before(dl_se->deadline, cp->elements[0].dl)) { > - best_cpu = cpudl_maximum(cp); > + } else if (cpudl_maximum_idx(cp) != IDX_INVALID && > + cpumask_test_cpu(cpudl_maximum_cpu(cp), &p->cpus_allowed) && > + dl_time_before(dl_se->deadline, cpudl_maximum_dl(cp))) { > + best_cpu = cpudl_maximum_cpu(cp); This would also work and avoid unnecessary warning. I missed the check to avoid it. https://lkml.org/lkml/2017/3/23/175 was an original patch doing it. By the way, frankly speaking, I don't like accessing the cpudl instant several times without protection. I rather prefer the following.. But whatever. I like both. Thnaks, Byungchul ----->8----- diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c index 9b314a9..1d369cf 100644 --- a/kernel/sched/cpudeadline.c +++ b/kernel/sched/cpudeadline.c @@ -137,11 +137,17 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p, cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) { best_cpu = cpumask_any(later_mask); goto out; - } else if (cpumask_test_cpu(cpudl_maximum_cpu(cp), &p->cpus_allowed) && - dl_time_before(dl_se->deadline, cpudl_maximum_dl(cp))) { - best_cpu = cpudl_maximum_cpu(cp); - if (later_mask) - cpumask_set_cpu(best_cpu, later_mask); + } else { + int max_cpu = cpudl_maximum_cpu(cp); + u64 max_dl = cpudl_maximum_dl(cp); + + if (max_cpu != -1 && + cpumask_test_cpu(max_cpu, &p->cpus_allowed) && + dl_time_before(dl_se->deadline, max_dl)) { + best_cpu = max_cpu; + if (later_mask) + cpumask_set_cpu(best_cpu, later_mask); + } } out: ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() 2017-06-09 2:43 ` Byungchul Park @ 2017-06-09 11:42 ` Juri Lelli 2017-06-12 1:43 ` Byungchul Park 0 siblings, 1 reply; 9+ messages in thread From: Juri Lelli @ 2017-06-09 11:42 UTC (permalink / raw) To: Byungchul Park Cc: peterz, mingo, linux-kernel, juri.lelli, rostedt, kernel-team On 09/06/17 11:43, Byungchul Park wrote: > On Thu, Jun 08, 2017 at 03:02:43PM +0100, Juri Lelli wrote: > > On 07/06/17 09:14, Byungchul Park wrote: > > > On Wed, Jun 07, 2017 at 08:42:24AM +0900, Byungchul Park wrote: > > > > On Tue, Jun 06, 2017 at 04:12:25PM +0100, Juri Lelli wrote: > > > > > Hi, > > > > > > > > > > On 02/06/17 16:31, Byungchul Park wrote: > > > > [...] > > > > > > > > > > > > > > static inline int cpudl_maximum_cpu(struct cpudl *cp) > > > > > > { > > > > > > - return cp->elements[0].cpu; > > > > > > + int cpu = cp->elements[0].cpu; > > > > > > + return cp->elements[cpu].idx == IDX_INVALID ? -1 : cpu; > > > > > > > > > > Mmm, don't we get a WARN from cpumask_check() if we return -1 here? > > > > > > > > The function does not return -1 without my patch. > > > > > > > > Right? > > > > > > > That's actually my point: with the change you are proposing we will > > start returning -1 and it looks to me that the WARN will start to fire. > > Hi, > > I see what you talk about. You are talking about WARN in cpumask_check(). > Sorry for missing your words. > > > What about the below instead (properly splitted in 2 patches I guess, > > and I'm not sure at all the macro thing is pretty at all) ? > > > > --->8--- > > kernel/sched/cpudeadline.c | 19 +++++++++++++------ > > 1 file changed, 13 insertions(+), 6 deletions(-) > > > > diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c > > index fba235c7d026..32e3dcef2b81 100644 > > --- a/kernel/sched/cpudeadline.c > > +++ b/kernel/sched/cpudeadline.c > > @@ -108,11 +108,17 @@ static void cpudl_heapify(struct cpudl *cp, int idx) > > cpudl_heapify_down(cp, idx); > > } > > > > -static inline int cpudl_maximum(struct cpudl *cp) > > -{ > > - return cp->elements[0].cpu; > > +#define cpudl_maximum(field) \ > > +static inline int cpudl_maximum_##field \ > > +(struct cpudl *cp) \ > > +{ \ > > + return cp->elements[0].field; \ > > } > > > > +cpudl_maximum(cpu); > > +cpudl_maximum(dl); > > +cpudl_maximum(idx); > > + > > /* > > * cpudl_find - find the best (later-dl) CPU in the system > > * @cp: the cpudl max-heap context > > @@ -131,9 +137,10 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p, > > cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) { > > best_cpu = cpumask_any(later_mask); > > goto out; > > - } else if (cpumask_test_cpu(cpudl_maximum(cp), &p->cpus_allowed) && > > - dl_time_before(dl_se->deadline, cp->elements[0].dl)) { > > - best_cpu = cpudl_maximum(cp); > > + } else if (cpudl_maximum_idx(cp) != IDX_INVALID && > > + cpumask_test_cpu(cpudl_maximum_cpu(cp), &p->cpus_allowed) && > > + dl_time_before(dl_se->deadline, cpudl_maximum_dl(cp))) { > > + best_cpu = cpudl_maximum_cpu(cp); > > This would also work and avoid unnecessary warning. I missed the check > to avoid it. https://lkml.org/lkml/2017/3/23/175 was an original patch > doing it. > > By the way, frankly speaking, I don't like accessing the cpudl instant > several times without protection. I rather prefer the following.. > > But whatever. I like both. > > Thnaks, > Byungchul > > ----->8----- > diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c > index 9b314a9..1d369cf 100644 > --- a/kernel/sched/cpudeadline.c > +++ b/kernel/sched/cpudeadline.c > @@ -137,11 +137,17 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p, > cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) { > best_cpu = cpumask_any(later_mask); > goto out; > - } else if (cpumask_test_cpu(cpudl_maximum_cpu(cp), &p->cpus_allowed) && > - dl_time_before(dl_se->deadline, cpudl_maximum_dl(cp))) { > - best_cpu = cpudl_maximum_cpu(cp); > - if (later_mask) > - cpumask_set_cpu(best_cpu, later_mask); > + } else { > + int max_cpu = cpudl_maximum_cpu(cp); > + u64 max_dl = cpudl_maximum_dl(cp); > + > + if (max_cpu != -1 && > + cpumask_test_cpu(max_cpu, &p->cpus_allowed) && > + dl_time_before(dl_se->deadline, max_dl)) { Don't we access cp 3 times both ways? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() 2017-06-09 11:42 ` Juri Lelli @ 2017-06-12 1:43 ` Byungchul Park 0 siblings, 0 replies; 9+ messages in thread From: Byungchul Park @ 2017-06-12 1:43 UTC (permalink / raw) To: Juri Lelli; +Cc: peterz, mingo, linux-kernel, juri.lelli, rostedt, kernel-team On Fri, Jun 09, 2017 at 12:42:06PM +0100, Juri Lelli wrote: > > > > This would also work and avoid unnecessary warning. I missed the check > > to avoid it. https://lkml.org/lkml/2017/3/23/175 was an original patch > > doing it. > > > > By the way, frankly speaking, I don't like accessing the cpudl instant > > several times without protection. I rather prefer the following.. > > > > But whatever. I like both. > > > > Thnaks, > > Byungchul > > > > ----->8----- > > diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c > > index 9b314a9..1d369cf 100644 > > --- a/kernel/sched/cpudeadline.c > > +++ b/kernel/sched/cpudeadline.c > > @@ -137,11 +137,17 @@ int cpudl_find(struct cpudl *cp, struct task_struct *p, > > cpumask_and(later_mask, cp->free_cpus, &p->cpus_allowed)) { > > best_cpu = cpumask_any(later_mask); > > goto out; > > - } else if (cpumask_test_cpu(cpudl_maximum_cpu(cp), &p->cpus_allowed) && > > - dl_time_before(dl_se->deadline, cpudl_maximum_dl(cp))) { > > - best_cpu = cpudl_maximum_cpu(cp); > > - if (later_mask) > > - cpumask_set_cpu(best_cpu, later_mask); > > + } else { > > + int max_cpu = cpudl_maximum_cpu(cp); > > + u64 max_dl = cpudl_maximum_dl(cp); > > + > > + if (max_cpu != -1 && > > + cpumask_test_cpu(max_cpu, &p->cpus_allowed) && > > + dl_time_before(dl_se->deadline, max_dl)) { > > Don't we access cp 3 times both ways? I wonder if I miss something.. As you said, in most cases it will, but I am not sure if we can guarentee that, regardless of arches or compile optimization level. Sorry if I am wrong. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2017-06-12 1:43 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-06-02 7:31 [PATCH 1/2] sched/deadline: Add cpudl_maximum_dl() Byungchul Park 2017-06-02 7:31 ` [PATCH 2/2] sched/deadline: Don't return invalid cpu in cpudl_maximum_cpu() Byungchul Park 2017-06-06 15:12 ` Juri Lelli 2017-06-06 23:42 ` Byungchul Park 2017-06-07 0:14 ` Byungchul Park 2017-06-08 14:02 ` Juri Lelli 2017-06-09 2:43 ` Byungchul Park 2017-06-09 11:42 ` Juri Lelli 2017-06-12 1:43 ` Byungchul Park
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®