From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6AFD1C433DB for ; Thu, 7 Jan 2021 21:44:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 34EBD23447 for ; Thu, 7 Jan 2021 21:44:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727900AbhAGVoL (ORCPT ); Thu, 7 Jan 2021 16:44:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726477AbhAGVoK (ORCPT ); Thu, 7 Jan 2021 16:44:10 -0500 Received: from mail-il1-x130.google.com (mail-il1-x130.google.com [IPv6:2607:f8b0:4864:20::130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D584EC0612F5 for ; Thu, 7 Jan 2021 13:43:29 -0800 (PST) Received: by mail-il1-x130.google.com with SMTP id e7so8202548ile.7 for ; Thu, 07 Jan 2021 13:43:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fJ4v45NoIZ+t1M1C1eHleEMvQbIjZTEYVfq//dDizkw=; b=EQU3k60PvNiGGG7GPIgzpKNA/pxjiUJ19/U+90uG1U+JWM1AU52EV5T1AEIRGId6lI 5JtApHQedmgEq8iJTLJrvsaMKF/ipq+A7VAiw6yMzmzBEaz0DsQfp4BgwO8DPSKd+e5/ 3JTngG+kGTwf/JQF6uYyGPFqa3pHj99Bidmbs+wKigvQnt6CS3L8YYS86U/AU7bdv+9L uhECRwxZuBnTQ1BwUrjiKvnNrvXSmIiqQwYlQitlMf1jJKuefXbO4Cryc7mDFoC8y4Ha LSXSO1EvZfDO1CK5Tdm3Zk2tHr8MrRSprj8yW7qvcdpPpMfg3bh2fkgyFwSrpibRaBPb KTuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fJ4v45NoIZ+t1M1C1eHleEMvQbIjZTEYVfq//dDizkw=; b=O1qhGBdquvteDIT8sNaWPVJ89Vd5WOrJ3eD9Xx43DaxxQOJFp5Py8jheLjkOkUpv+M CAS5m9bFK/HMnDCwBo2Cxw3Dl0PvUrhntZEklQpojxzq6Zh3WhDfLExczwPGbBZKuo7s +QeZHh6Xa74hOG40QGSuAQy8syOGv7UoLu5CxEguLr6cyCxZFyGZVPr20CuxExXgib5P 6FfRlPETdRjDM49vVxi3RKoeC/wvFjPH3Yu7XUBYNJAHzZmNXGHdWyvaNNNSRJOmIsgZ NSOWiMsPQiTsFZxHiuu4KXodMfRBYxzZNTPIYG2V+8aH0vw45V24oiMjPB3RJ4qtfL/f p3Ng== X-Gm-Message-State: AOAM531rAA2+szsLXu7Yph70cD05jfXY2LLD+1hYqSfesJD9CP9yOkhU ihEGTAIowGiIQFLev0bAtO8fgw== X-Google-Smtp-Source: ABdhPJwzeb220It6gmQeLbWKNHQwLJQyt9s/3fSdsC0Kr4fcw9s1ZxgCLHedhMJoJ+M1g/oBGUgfhw== X-Received: by 2002:a92:d348:: with SMTP id a8mr824917ilh.255.1610055809270; Thu, 07 Jan 2021 13:43:29 -0800 (PST) Received: from beast.localdomain (c-73-185-129-58.hsd1.mn.comcast.net. [73.185.129.58]) by smtp.gmail.com with ESMTPSA id f10sm5218260ilq.64.2021.01.07.13.43.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Jan 2021 13:43:28 -0800 (PST) From: Alex Elder To: davem@davemloft.net, kuba@kernel.org Cc: evgreen@chromium.org, bjorn.andersson@linaro.org, cpratapa@codeaurora.org, subashab@codeaurora.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net 0/2] net: ipa: fix a suspend hang Date: Thu, 7 Jan 2021 15:43:23 -0600 Message-Id: <20210107214325.7077-1-elder@linaro.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The IPA driver's PM suspend callback stops all channels, and its resume callback restarts them again. Part of stopping a channel is disabling NAPI and disabling its I/O completion interrupt. When stopping a channel, the IPA driver currently disables NAPI before disabling the interrupt. It also re-enables interrupts before re-enabling NAPI. The interrupt handler can therefore be called while NAPI is disabled. If the interrupt signaling a transfer completion occurs while NAPI is disabled, NAPI polling will not be scheduled to process that completion. That processing will be delayed, occuring only when a subsequent interrupt schedules NAPI polling when NAPI is enabled again. The second patch in this series reorders the NAPI and interrupt control calls. The completion interrupt is disabled before NAPI when stopping a channel, and re-enabled after NAPI when starting. This way polling to handle the completion of a transfer can begin immediately when handling its interrupt. And if a completion occurs while the interrupt is disabled, the handler will trigger polling when interrupts are enabled again. The first patch adds a flag that prevents the poll function from re-enabling the interrupt when stopping. Without this fix in place we would occasionally see a hang while stopping channels during suspend. -Alex Alex Elder (2): net: ipa: introduce atomic channel STOPPING flag net: ipa: re-enable NAPI before enabling interrupt drivers/net/ipa/gsi.c | 15 ++++++++++++--- drivers/net/ipa/gsi.h | 6 ++++++ 2 files changed, 18 insertions(+), 3 deletions(-) -- 2.20.1