From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AIpwx4+MvkxXfzSiFFRNGmxJFF1JK4nrkKxQXYcK/pAtLXyHlOgqOw5GxqpPMXx2kTW9izZ5z0oM ARC-Seal: i=1; a=rsa-sha256; t=1522168968; cv=none; d=google.com; s=arc-20160816; b=kd+m+Hs9/Rv1Jvmjk4TdKaF4a1U2Rux5vDwf9rSNrRK3v9+t7lBPU/i0foMfvIcGy4 aaqibOH3lXM3JnPjPc0MJ2QTTm2hKcwkSM1l0Ze81EIpkZSKU49XSbTxOWbTr0p3ym/B cBVqtxMrVanTZn9bXOyoPQcz1BHejhBs38Xn/MNSCdUFU/tX6SKqp6uK/a8D0a7+Dc4L nozz8nIs5KWwDaGGU6iM55/Vk/5MahKU4TZraPmlQyT6YKJ7QBBqbhBYE88OAwYk5jo1 USbviopAA94UNCY0RBF51qgOTrdyWeVdBfEePPpZSu0hPVirmrJdEwlJHjxYhzRTMcIP w6sg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=XYgW/ngCyQQAzzYT3siWyaXePmgNNeUeAyAKmKLDs2E=; b=Gbeug/qmZVwdrSyZ4Ci/Phe0WXsNyaTG7x5RNe4YXdnNcpedXQmNG7RN6DsFS2bzsU /5ezXVnZwD43VN4GvU+xD1q4D1RdjW4AFIhUakwhcy5XfGCcGW5HRN+HUYuzlHMJRyOj STUVS64NJ7+xbPDV9BDD9Yh/i910Kg5eUA5Y2X+IRC4AsI5qKnJG5hKZgvq3TwywXqVE wiZeyJpwapG3N4AE7okEBJXEMj3hjX66C7Qwiw2kS3JcqAfGstLJS6h7z6W4B+y5jC9c sJcHh8cGuwVeIFOQE743vqvMptGJXAg7ApvBiIUPZ7dWvOvJcPp12Fj+I+A0jjkH/KN2 zWTg== ARC-Authentication-Results: i=1; mx.google.com; spf=softfail (google.com: domain of transitioning gregkh@linuxfoundation.org does not designate 90.92.61.202 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning gregkh@linuxfoundation.org does not designate 90.92.61.202 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ephraim Park , Song Liu , "Peter Zijlstra (Intel)" , jolsa@redhat.com, kernel-team@fb.com, Alexander Shishkin , Arnaldo Carvalho de Melo , Linus Torvalds , Stephane Eranian , Thomas Gleixner , Vince Weaver , Ingo Molnar Subject: [PATCH 4.15 095/105] perf/core: Fix ctx_event_type in ctx_resched() Date: Tue, 27 Mar 2018 18:28:15 +0200 Message-Id: <20180327162803.870967820@linuxfoundation.org> X-Mailer: git-send-email 2.16.3 In-Reply-To: <20180327162757.813009222@linuxfoundation.org> References: <20180327162757.813009222@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-LABELS: =?utf-8?b?IlxcU2VudCI=?= X-GMAIL-THRID: =?utf-8?q?1596109534205598912?= X-GMAIL-MSGID: =?utf-8?q?1596109848153114579?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: 4.15-stable review patch. If anyone has any objections, please let me know. ------------------ From: Song Liu commit bd903afeb504db5655a45bb4cf86f38be5b1bf62 upstream. In ctx_resched(), EVENT_FLEXIBLE should be sched_out when EVENT_PINNED is added. However, ctx_resched() calculates ctx_event_type before checking this condition. As a result, pinned events will NOT get higher priority than flexible events. The following shows this issue on an Intel CPU (where ref-cycles can only use one hardware counter). 1. First start: perf stat -C 0 -e ref-cycles -I 1000 2. Then, in the second console, run: perf stat -C 0 -e ref-cycles:D -I 1000 The second perf uses pinned events, which is expected to have higher priority. However, because it failed in ctx_resched(). It is never run. This patch fixes this by calculating ctx_event_type after re-evaluating event_type. Reported-by: Ephraim Park Signed-off-by: Song Liu Signed-off-by: Peter Zijlstra (Intel) Cc: Cc: Cc: Alexander Shishkin Cc: Arnaldo Carvalho de Melo Cc: Jiri Olsa Cc: Linus Torvalds Cc: Stephane Eranian Cc: Thomas Gleixner Cc: Vince Weaver Fixes: 487f05e18aa4 ("perf/core: Optimize event rescheduling on active contexts") Link: http://lkml.kernel.org/r/20180306055504.3283731-1-songliubraving@fb.com Signed-off-by: Ingo Molnar Signed-off-by: Greg Kroah-Hartman --- kernel/events/core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -2246,7 +2246,7 @@ static void ctx_resched(struct perf_cpu_ struct perf_event_context *task_ctx, enum event_type_t event_type) { - enum event_type_t ctx_event_type = event_type & EVENT_ALL; + enum event_type_t ctx_event_type; bool cpu_event = !!(event_type & EVENT_CPU); /* @@ -2256,6 +2256,8 @@ static void ctx_resched(struct perf_cpu_ if (event_type & EVENT_PINNED) event_type |= EVENT_FLEXIBLE; + ctx_event_type = event_type & EVENT_ALL; + perf_pmu_disable(cpuctx->ctx.pmu); if (task_ctx) task_ctx_sched_out(cpuctx, task_ctx, event_type);