lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 1 Dec 2021 10:20:24 +0100
From:   Dietmar Eggemann <dietmar.eggemann@....com>
To:     Qais Yousef <qais.yousef@....com>,
        Valentin Schneider <valentin.schneider@....com>
Cc:     "Peter Zijlstra (Intel)" <peterz@...radead.org>,
        Ingo Molnar <mingo@...nel.org>,
        Vincent Guittot <vincent.guittot@...aro.org>,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH] sched/uclamp: Fix rq->uclamp_max not set on first enqueue

On 30.11.21 16:41, Qais Yousef wrote:
> On 11/30/21 12:29, Valentin Schneider wrote:
>> On 30/11/21 11:23, Qais Yousef wrote:
>>> Hi Valentin
>>>
>>> On 11/26/21 10:51, Valentin Schneider wrote:
>>>> On 25/11/21 16:52, Qais Yousef wrote:
>>>>> Commit d81ae8aac85c ("sched/uclamp: Fix initialization of struct
>>>>> uclamp_rq") introduced a bug where uclamp_max of the rq is not reset to
>>>>> match the woken up task's uclamp_max when the rq is idle. This only
>>>>> impacts the first wake up after enabling the static key. And it only

LGTM.

Tested-by: Dietmar Eggemann <dietmar.eggemann@....com>

Tested with rt-app:

   "tasks": {
        "task_n1": {
            "util_min": 0,
            "util_max": 369,
            "loop": 1,
            "phases": {
                "p000001": {                     
                    "loop": 5,
                    "run": 800,
                    "timer": {
                        "period": 16000,
                        "ref": "task_n1"
                    }
                }
            },
            "policy": "SCHED_OTHER"
        }
    }

w/o patch:

/*  missing (1) since rq->uclamp_flags = UCLAMP_FLAG_IDLE is not set initially */
[75.002086] (3) uclamp_rq_inc_id() CPU5 p=[task_n1-0 1693] uc_se->value=369 uc_rq->value=1024
/* first dequeue to _uclamp_ idle set UCLAMP_FLAG_IDLE */
[75.013851] (2) uclamp_idle_value() CPU5 p=[task_n1-0 1693] clamp_id=1 value=369
[75.017972] (1) uclamp_idle_reset() CPU5 p=[task_n1-0 1693] clamp_id=0 value=0
/* UCLAMP_FLAG_IDLE is set -> set rq->uclamp[UCLAMP_MAX].value to *369* */
[75.017984] (1) uclamp_idle_reset() CPU5 p=[task_n1-0 1693] clamp_id=1 value=369
[75.017995] (3) uclamp_rq_inc_id() CPU5 p=[task_n1-0 1693] uc_se->value=369 uc_rq->value=*369*

w/ patch:

[63.393974] (1) uclamp_idle_reset() CPU5 p=[task_n1-0 1700] clamp_id=0 value=0
/* UCLAMP_FLAG_IDLE is set -> set rq->uclamp[UCLAMP_MAX].value to *369* */
[63.401269] (1) uclamp_idle_reset() CPU5 p=[task_n1-0 1700] clamp_id=1 value=369
[63.415513] (3) uclamp_rq_inc_id() CPU5 p=[task_n1-0 1700] uc_se->value=369 uc_rq->value=*369*
/* first dequeue to _uclamp_ idle set UCLAMP_FLAG_IDLE (again) */
[63.434781] (2) uclamp_idle_value() CPU5 p=[task_n1-0 1700] clamp_id=1 value=369
[63.449681] (1) uclamp_idle_reset() CPU5 p=[task_n1-0 1700] clamp_id=0 value=0
[63.449691] (1) uclamp_idle_reset() CPU5 p=[task_n1-0 1700] clamp_id=1 value=369
[63.449699] (3) uclamp_rq_inc_id() CPU5 p=[task_n1-0 1700] uc_se->value=369 uc_rq->value=369

[...]

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ