From patchwork Wed Nov 29 16:31:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nam Cao X-Patchwork-Id: 17284 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a5a7:0:b0:403:3b70:6f57 with SMTP id d7csp460255vqn; Wed, 29 Nov 2023 08:32:37 -0800 (PST) X-Google-Smtp-Source: AGHT+IHxkZ5riQhuqvWKz065a3Xm6lVBhLEUeby7yT1wjKuvjT0buNITwX+DiVu2GcMC5bkBITFy X-Received: by 2002:a05:6a20:938b:b0:180:ebec:da1e with SMTP id x11-20020a056a20938b00b00180ebecda1emr22682379pzh.21.1701275557155; Wed, 29 Nov 2023 08:32:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701275557; cv=none; d=google.com; s=arc-20160816; b=g0WuA+XPuE0LHK/hd/I2mrUSqU+76TTCI2+nTJKsOEg/FrvDhuP+DvUefY42Y+lDjF 8+6ss8LmaNm65tYqLUeM+fNFrTlpvAHJP4H84l+ymKU+HroxlHGq3Mtk/EP8JMm2by4F Qx1V7RT9uvDOWQvX1tZ2hOPzzxxqntxFEVD/k+jc7a0b9QBVnLRI7qzdGcJ4d/dn7bMn Ihuq+u7mjime70EC2mXzTsRDSPghOZC7gLEcaXGTaJxLUH+EBP9Gu7E5KNBbmXBojFEV VbFmQE7V5js1pGE9rp+oZ14TGRhQ0SPDWoj0vXUPeI+h42FV8jt5285L5ubrfo/SxDEA 1R/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:dkim-signature:dkim-signature:from; bh=wgM6REurFe0euNPRsJDjg3HXoLEfDSQ4SWRzMt9M5cI=; fh=FpEFgSTsD9KOdZrv5i/8e/czx6Pnhsq5lU2kOotSX/I=; b=tDyqRqoKrPl6aRnkUDpVdMxw7g+9FYve/+mvpYVbbc0kapjyWxyIhnh/VyzXg0quxn sPcPOeP77piAboPBKDX1rQgIhCxhojyvJDiydFz2Qxsi7+bOpb/M/djJK05lVdzbqGZT cCjUh862p3MAs5EPw8uNvrqvEXuLg7YCBwkM/F86WcbzN9TOuPQb+vx5XhjCXAHmQlD9 2sb0O0isD2bWPqKcES3m/50dgmBojoPXGpmwFZD0DoDCi6/CAMG3N0SDRnEthg/tWpDl WfcFQ3GNAl+ydMmdJnlV85MEF2NRB9QO8zkgtaCYDFgxx6Ec9UXwFW0We7ROtoQIncd2 aTrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=XpqxKD4q; dkim=neutral (no key) header.i=@linutronix.de header.b=78QriPAc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id j9-20020a056a00234900b0068e47f1fc7esi15171863pfj.159.2023.11.29.08.32.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 08:32:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=XpqxKD4q; dkim=neutral (no key) header.i=@linutronix.de header.b=78QriPAc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id E341F80A6EF6; Wed, 29 Nov 2023 08:32:32 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229954AbjK2QcY (ORCPT + 99 others); Wed, 29 Nov 2023 11:32:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46858 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229518AbjK2QcX (ORCPT ); Wed, 29 Nov 2023 11:32:23 -0500 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0B423BF; Wed, 29 Nov 2023 08:32:30 -0800 (PST) From: Nam Cao DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1701275548; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=wgM6REurFe0euNPRsJDjg3HXoLEfDSQ4SWRzMt9M5cI=; b=XpqxKD4qG4IArSrfbweYlaVcHx5kpYWy0Fqnhl7xxcyCd+SwoUhjJYaPSRB/Ei/3jhjZkX VH8jZ+40xLF248HPNpe/HZq2ON4qzAZGoKdqcOYOXl2BICeGo1MhLaHbBekMYO7R1OTO1s O6Hcv3rBMJD/hRBVadpfqCJRtm/Ir112/N00belHKO3DfAsEitj8eRYWq1MothKK/wc2lM 5tLecwZJooVolLjDPkFileVyWxLWnjyM5d7Q9OY+QkJ4yEJ11erb+vqdBWF3oacArwmMjA sp/7oDwwpfAfziwJhTHOXsvpAeTQZFjynfy/Y2+ztiJ5jalgUq5Pv+usmzmbMw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1701275548; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=wgM6REurFe0euNPRsJDjg3HXoLEfDSQ4SWRzMt9M5cI=; b=78QriPAcEvZ6gzjZS4NXrw2dqKDfscF3IfvztobeI6yP+Q+8MqK0H+86nx0AgLQqgHAwVR afyoW1AmUv1McxAQ== To: linus.walleij@linaro.org, broonie@kernel.org, linux-arm-kernel@lists.infradead.org, linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Nam Cao Subject: [PATCH v2 0/2] spi: spl022: fix sleeping in interrupt context Date: Wed, 29 Nov 2023 17:31:54 +0100 Message-Id: MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Wed, 29 Nov 2023 08:32:33 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783905391850067118 X-GMAIL-MSGID: 1783916718382108969 Hi, While running the spl022, I got the following warning: BUG: sleeping function called from invalid context at drivers/spi/spi.c:1428 This is because between spi transfers, spi_transfer_delay_exec() (who may sleep if the delay is >10us) is called in interrupt context. This is a problem for anyone who runs this driver and need more than 10us delay. Patch 1 adds an error reporting mechanism, needed by patch 2 who switch to use the default spi_transfer_one_message(), which fix the problem. The series is tested with polling transfer mode and interrupt transfer mode. I can't test the DMA mode, so some help testing here is very appreciated. One question: This series is quite big for stable trees, so how can we backport this fix? We can: - Let it be released, and get tested for some time. After a while without any reported problem, backport it. - Have a small patch which fixes this problem. One idea I have is to switch the current interrupt handler to threaded interrupt handler, and switch from existing use of tasklet to workqueue. So that the driver can safely sleep if needed. And then add this series on top of that. - other options that I miss? Best regards, Nam v2: add some documents for the new flag. No functional change. Nam Cao (2): spi: introduce SPI_TRANS_FAIL_IO for error reporting spi: spl022: switch to use default spi_transfer_one_message() drivers/spi/spi-pl022.c | 372 +++++++--------------------------------- drivers/spi/spi.c | 3 + include/linux/spi/spi.h | 12 +- 3 files changed, 77 insertions(+), 310 deletions(-)