From patchwork Thu Jul 18 14:16:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 169212 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp2467786ilk; Thu, 18 Jul 2019 07:17:04 -0700 (PDT) X-Google-Smtp-Source: APXvYqzis1EvFBaleTSsV/2eQjC58Is3cMNQKdfxlNuHv3OJVZ098R+gj0QjIgNjqCqReFmrJ7sJ X-Received: by 2002:a65:6294:: with SMTP id f20mr49240883pgv.349.1563459424652; Thu, 18 Jul 2019 07:17:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563459424; cv=none; d=google.com; s=arc-20160816; b=f9dvPTHZpMoX5JSlm12aHvh1uJ3Geju4u58exznabBhQjl1UFekZY1Vs916md8b+Ni uKXIlq+sRcSbpHtpdyHR9Bx/EqbnyhsRH9++PGEPhYFDxbYmn2E5gnEg9BFR6QbhLeio yUYGiDp4LQMVdUSL72g8L6EhShIAJCM0+jzxPp6xRHkJabw7qCuF+jdTsd4+PUl4b+1r Dk2B+f6RYW5i/jdudLzYS9jJUDrW93yDb1KNPtZJZ5Z4qwb3qTY00lQXn7gZa4iJWWEI 8oe0zhpTST3O6WaaKShsxJF9K4Efd9HzH+kR49G5J6DMKh1Q9hFObsrUTp9YhW8mhBIl W+vQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=qKwmGzIJo6452dh5ts4oSdoCpsoT1Kb7+rMJoiIABTA=; b=eU1RP3SHh692CdYhXvdBz3hM3KB3Sx1nMA+1JUmlEMH+bQ+Omw2JFAR1PeTuPFLqT0 0Po7Z/yw1+DA00Q2ONskcmFY1u+UAwY3l2vjSsSduJUrZziQPYy8A1nIDu9+eUyD+Lpo SkuKmhHiZ3r7XcbLLHo/0p0KVxsuyeYksuBq5HkPd2wVZ0thcKhZFguAD3X1RuHcY+5g Af5kS+Ib8MLK0bI23MMXbUE7me9Z5IHirhpPsoQS9lB+tkomtJz+T+/lG/1Wd/qPHZbL jFkz3IA40g7twdJ3AghTv1GtLBCA4v3LhNi6WLsPTNMeYD7jXS5IWl5PQ+dQZM9FLkn9 Fchw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q23si24422451pjp.63.2019.07.18.07.17.04; Thu, 18 Jul 2019 07:17:04 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390641AbfGRORD (ORCPT + 29 others); Thu, 18 Jul 2019 10:17:03 -0400 Received: from mout.kundenserver.de ([212.227.17.13]:59357 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390605AbfGRORC (ORCPT ); Thu, 18 Jul 2019 10:17:02 -0400 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.145]) with ESMTPA (Nemesis) id 1MdNHa-1iNS2127Qe-00ZLMK; Thu, 18 Jul 2019 16:16:53 +0200 From: Arnd Bergmann To: Hans Verkuil , Mauro Carvalho Chehab Cc: Arnd Bergmann , Johan Korsnes , Nicolas Dufresne , Gabriel Francisco Mandaji , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com Subject: [PATCH] media: vivid: work around high stack usage with clang Date: Thu, 18 Jul 2019 16:16:43 +0200 Message-Id: <20190718141652.3323402-1-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 MIME-Version: 1.0 X-Provags-ID: V03:K1:pQKRRjSAwPvJe/DxyiorcFmR6g4THfSDWMYc4p1kZ8aLckuM0qr xiClQ7AIVuxhBy+lGsPSBjcs77ak3SReRcHc5Am7mqZgcmrz9f4AoLd3JloLdNFEQglNegX 6jdTth3eX4T4XaZYZZVQjYzBNeckqyHawmVjOWSrwzLGx4S2Tp/SgN1edqnon9OwZxy0rr+ ftQgSnAn9XDmMOCvB2ebA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:8NGldS+p5eQ=:By0jRMiqfFn2SYMphKkJGN i3yDPSR68JLDHktBXZ/qviTIEXWjHGJIdnA1VW72vr/hIz3WOnGbh7uZdJqfKdg5W5XuegFHI CjIkleZu201NWQ+tOktdMjcBbsF8z7rAOJvJd0rM7BXwi3fayjvf8l7SVubOp3GgyiqE9akGY KwzerfPyAtao1W+byoBidehfl987Lw4pHrMLUv7d5lru4Qg5Rxwcs0EM1yaUUMp52PI0R9oEg L+WvO2ty8u789v/03RE9d/S1OgvvOIGsj8dun2hMJ04PHuPnbj5+h6uKlhohhxfffam01eYT8 9kKMawa1wwQ28ZB0wQtX1QaakIsJ+xDEL63P54/GxBsGNrVINo8NT/2gc0MpkproSgjZ6SCWS h5lJOb5BVBClB3WcPG5+8U2SM3oV8m/oZJSIZ3ewHFCPImc5ulF1iJP6a2xGssg2yzPbP25+a d/S7rlHcj+CxpFnLBqMKthxqafWyqaud59fXGcSTybzxX+Fc38wWBiYu0rjynB1/6wUEUok9d QBdwA7Pl6CjsbMpH8SarPDXByn6sQs7cSZt2u3bpIGfsOOm2KC/kwn2EDjDhY9KgStKqyX/sM Fae6snP4LKzacTQ6bqMOe/8a1LfqWfS/5eH+ijSfqkslnL7hpZ0nHeZFdA/Pa1Glrb7NM+xjr nIdJuXqpjFhUmg3rj+0cf8okhl6YlHouWlE/0mBoF4mQ1GXOO69SEcd5TJGhIJ91ltRZvYb9q Xc7tFuIOp6ppiw+kpl1+2E7ACbzQatv09fxO6A== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Building a KASAN-enabled kernel with clang ends up in a case where too much is inlined into vivid_thread_vid_cap() and the stack usage grows a lot, possibly when the register allocation fails to produce efficient code and spills a lot of temporaries to the stack. This uses more than twice the amount of stack than the sum of the individual functions when they are not inlined: drivers/media/platform/vivid/vivid-kthread-cap.c:766:12: error: stack frame size of 2208 bytes in function 'vivid_thread_vid_cap' [-Werror,-Wframe-larger-than=] Marking two of the key functions in here as 'noinline_for_stack' avoids the pathological case in clang without any apparent downside for gcc. Signed-off-by: Arnd Bergmann --- Not sure how much effort we want to put into fixing clang to not get into this case. I could open an llvm bug report if something thinks this has a chance of getting fixed there. --- drivers/media/platform/vivid/vivid-kthread-cap.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) -- 2.20.0 Acked-by: Nick Desaulniers diff --git a/drivers/media/platform/vivid/vivid-kthread-cap.c b/drivers/media/platform/vivid/vivid-kthread-cap.c index 6cf495a7d5cc..4f94897e6303 100644 --- a/drivers/media/platform/vivid/vivid-kthread-cap.c +++ b/drivers/media/platform/vivid/vivid-kthread-cap.c @@ -232,8 +232,8 @@ static void *plane_vaddr(struct tpg_data *tpg, struct vivid_buffer *buf, return vbuf; } -static int vivid_copy_buffer(struct vivid_dev *dev, unsigned p, u8 *vcapbuf, - struct vivid_buffer *vid_cap_buf) +static noinline_for_stack int vivid_copy_buffer(struct vivid_dev *dev, unsigned p, + u8 *vcapbuf, struct vivid_buffer *vid_cap_buf) { bool blank = dev->must_blank[vid_cap_buf->vb.vb2_buf.index]; struct tpg_data *tpg = &dev->tpg; @@ -670,7 +670,8 @@ static void vivid_cap_update_frame_period(struct vivid_dev *dev) dev->cap_frame_period = f_period; } -static void vivid_thread_vid_cap_tick(struct vivid_dev *dev, int dropped_bufs) +static noinline_for_stack void vivid_thread_vid_cap_tick(struct vivid_dev *dev, + int dropped_bufs) { struct vivid_buffer *vid_cap_buf = NULL; struct vivid_buffer *vbi_cap_buf = NULL;