{"id":807346,"url":"http://patchwork.ozlabs.org/api/patches/807346/?format=json","web_url":"http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20170829231812.18206-3-dann.frazier@canonical.com/","project":{"id":15,"url":"http://patchwork.ozlabs.org/api/projects/15/?format=json","name":"Ubuntu Kernel","link_name":"ubuntu-kernel","list_id":"kernel-team.lists.ubuntu.com","list_email":"kernel-team@lists.ubuntu.com","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170829231812.18206-3-dann.frazier@canonical.com>","list_archive_url":null,"date":"2017-08-29T23:18:12","name":"[2/2,Artful] clocksource/drivers/arm_arch_timer: Avoid infinite recursion when ftrace is enabled","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"167a74c4d37c216f196eda8abec942ae04f24753","submitter":{"id":9337,"url":"http://patchwork.ozlabs.org/api/people/9337/?format=json","name":"dann frazier","email":"dann.frazier@canonical.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20170829231812.18206-3-dann.frazier@canonical.com/mbox/","series":[{"id":502,"url":"http://patchwork.ozlabs.org/api/series/502/?format=json","web_url":"http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=502","date":"2017-08-29T23:18:10","name":"[1/2,Artful] clocksource/drivers/arm_arch_timer: Fix mem frame loop initialization","version":1,"mbox":"http://patchwork.ozlabs.org/series/502/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/807346/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/807346/checks/","tags":{},"related":[],"headers":{"Return-Path":"<kernel-team-bounces@lists.ubuntu.com>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com\n\t(client-ip=91.189.94.19; helo=huckleberry.canonical.com;\n\tenvelope-from=kernel-team-bounces@lists.ubuntu.com;\n\treceiver=<UNKNOWN>)","Received":["from huckleberry.canonical.com (huckleberry.canonical.com\n\t[91.189.94.19])\n\tby ozlabs.org (Postfix) with ESMTP id 3xhl1x6jw4z9sMN;\n\tWed, 30 Aug 2017 09:18:45 +1000 (AEST)","from localhost ([127.0.0.1] helo=huckleberry.canonical.com)\n\tby huckleberry.canonical.com with esmtp (Exim 4.76)\n\t(envelope-from <kernel-team-bounces@lists.ubuntu.com>)\n\tid 1dmpmN-0003FN-20; Tue, 29 Aug 2017 23:18:43 +0000","from complete.lackof.org ([198.49.126.79])\n\tby huckleberry.canonical.com with esmtps\n\t(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.76) (envelope-from <dannf@dannf.org>) id 1dmpmE-0003BL-LE\n\tfor kernel-team@lists.ubuntu.com; Tue, 29 Aug 2017 23:18:34 +0000","from localhost (c-107-2-141-92.hsd1.co.comcast.net [107.2.141.92])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (Client did not present a certificate)\n\tby complete.lackof.org (Postfix) with ESMTPSA id 8F7F033E0064\n\tfor <kernel-team@lists.ubuntu.com>;\n\tTue, 29 Aug 2017 17:18:31 -0600 (MDT)"],"From":"dann frazier <dann.frazier@canonical.com>","To":"kernel-team@lists.ubuntu.com","Subject":"[PATCH 2/2][Artful] clocksource/drivers/arm_arch_timer: Avoid\n\tinfinite recursion when ftrace is enabled","Date":"Tue, 29 Aug 2017 17:18:12 -0600","Message-Id":"<20170829231812.18206-3-dann.frazier@canonical.com>","X-Mailer":"git-send-email 2.14.1","In-Reply-To":"<20170829231812.18206-1-dann.frazier@canonical.com>","References":"<20170829231812.18206-1-dann.frazier@canonical.com>","X-Spam-Status":"No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY\n\tautolearn=unavailable version=3.3.2","X-Spam-Checker-Version":"SpamAssassin 3.3.2 (2011-06-06) on\n\tcomplete.lackof.org","X-BeenThere":"kernel-team@lists.ubuntu.com","X-Mailman-Version":"2.1.14","Precedence":"list","List-Id":"Kernel team discussions <kernel-team.lists.ubuntu.com>","List-Unsubscribe":"<https://lists.ubuntu.com/mailman/options/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=unsubscribe>","List-Archive":"<https://lists.ubuntu.com/archives/kernel-team>","List-Post":"<mailto:kernel-team@lists.ubuntu.com>","List-Help":"<mailto:kernel-team-request@lists.ubuntu.com?subject=help>","List-Subscribe":"<https://lists.ubuntu.com/mailman/listinfo/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=subscribe>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"kernel-team-bounces@lists.ubuntu.com","Sender":"kernel-team-bounces@lists.ubuntu.com"},"content":"From: Ding Tianhong <dingtianhong@huawei.com>\n\nBugLink: https://bugs.launchpad.net/bugs/1713821\n\nOn platforms with an arch timer erratum workaround, it's possible for\narch_timer_reg_read_stable() to recurse into itself when certain\ntracing options are enabled, leading to stack overflows and related\nproblems.\n\nFor example, when PREEMPT_TRACER and FUNCTION_GRAPH_TRACER are\nselected, it's possible to trigger this with:\n\n$ mount -t debugfs nodev /sys/kernel/debug/\n$ echo function_graph > /sys/kernel/debug/tracing/current_tracer\n\nThe problem is that in such cases, preempt_disable() instrumentation\nattempts to acquire a timestamp via trace_clock(), resulting in a call\nback to arch_timer_reg_read_stable(), and hence recursion.\n\nThis patch changes arch_timer_reg_read_stable() to use\npreempt_{disable,enable}_notrace(), which avoids this.\n\nThis problem is similar to the fixed by upstream commit 96b3d28bf4\n(\"sched/clock: Prevent tracing recursion in sched_clock_cpu()\").\n\nFixes: 6acc71ccac71 (\"arm64: arch_timer: Allows a CPU-specific erratum to only affect a subset of CPUs\")\nSigned-off-by: Ding Tianhong <dingtianhong@huawei.com>\nAcked-by: Mark Rutland <mark.rutland@arm.com>\nAcked-by: Marc Zyngier <marc.zyngier@arm.com>\nSigned-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>\n(cherry picked from commit adb4f11e0a8f4e29900adb2b7af28b6bbd5c1fa4)\nSigned-off-by: dann frazier <dann.frazier@canonical.com>\n---\n arch/arm64/include/asm/arch_timer.h | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)","diff":"diff --git a/arch/arm64/include/asm/arch_timer.h b/arch/arm64/include/asm/arch_timer.h\nindex 74d08e44a651..a652ce0a5cb2 100644\n--- a/arch/arm64/include/asm/arch_timer.h\n+++ b/arch/arm64/include/asm/arch_timer.h\n@@ -65,13 +65,13 @@ DECLARE_PER_CPU(const struct arch_timer_erratum_workaround *,\n \tu64 _val;\t\t\t\t\t\t\t\\\n \tif (needs_unstable_timer_counter_workaround()) {\t\t\\\n \t\tconst struct arch_timer_erratum_workaround *wa;\t\t\\\n-\t\tpreempt_disable();\t\t\t\t\t\\\n+\t\tpreempt_disable_notrace();\t\t\t\t\\\n \t\twa = __this_cpu_read(timer_unstable_counter_workaround); \\\n \t\tif (wa && wa->read_##reg)\t\t\t\t\\\n \t\t\t_val = wa->read_##reg();\t\t\t\\\n \t\telse\t\t\t\t\t\t\t\\\n \t\t\t_val = read_sysreg(reg);\t\t\t\\\n-\t\tpreempt_enable();\t\t\t\t\t\\\n+\t\tpreempt_enable_notrace();\t\t\t\t\\\n \t} else {\t\t\t\t\t\t\t\\\n \t\t_val = read_sysreg(reg);\t\t\t\t\\\n \t}\t\t\t\t\t\t\t\t\\\n","prefixes":["2/2","Artful"]}