From patchwork Fri Jun 19 14:31:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 191232 Delivered-To: patch@linaro.org Received: by 2002:a92:cf06:0:0:0:0:0 with SMTP id c6csp647473ilo; Fri, 19 Jun 2020 08:50:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzkYABeP//CuRpNmmqGHhbjOfyVfjN7XPSNvzQj1GZEhiB1YPmokF1DoqVV6g3QvVez781n X-Received: by 2002:a50:c013:: with SMTP id r19mr3768222edb.340.1592581805221; Fri, 19 Jun 2020 08:50:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592581805; cv=none; d=google.com; s=arc-20160816; b=1BftKnHjFvuk3da7vQHZsrP6Sdkguw9tJ2U6xr53EixNOwVCrOvnkK3ddAAYnNfabn tbrSFsNmLC1vKwayZ70NRIdalOk0M7AT2cFFQkBmINsz0bzUPSzvMY8X7oOxpv3szrHZ 9F/UGGGWfCue+bm0iMCBFl8+gF8C5SEmeuEupvoVCztnZLEeWa1apeqpwefaAbq/z/gW N3PaaonjayL27c4Rhes5vI9un+SBKbA1zDcUtWzjnJMALBV3rdD9xprndFrWiYnJY70+ wvXsPAQ1q6b6qrLxYV2uI0yHymteuZ7otkM0iYA1orrlWopw7ImGM7SRfDrFYj4KDgfW 6ANA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=aXE7EgtAhgD24anDXLe1P6u9oF1DF/EWe2R7gGYzwcg=; b=jIXL/96HNhyc4zqC9E8caL13sZT8gpAmG6FQ5oJS4YOxXXh+jmMjEYYzZAKPz/DMjy KDvdH9vGhCGeZeWXSyqqHqRQJ05kNzm3Sb0g1GJmHLDkfzmdlEVQyMxeKb5BSATYoB4k csmSqytqnfOwI++F1SKmbHBLx1g+6kaVVX22rGupdHGbyb+jd8pSzCZl5j3fhDPboTFL HqoaGfajrzmCBT4Yvjvba6oJIytNmr15yU8SleUrb5eGgGyU3ECz3qVjwGEiH98TnvGe Wv9V1BEFvA4y5UkZ5k3Ke1eNP1QLmqZiHWnS0qgaPnckyUjFnyLRLnPlV5dDT3OsZFE6 fMVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=tgRsmqGN; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c11si4080700edr.522.2020.06.19.08.50.05; Fri, 19 Jun 2020 08:50:05 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=tgRsmqGN; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2393352AbgFSPuC (ORCPT + 15 others); Fri, 19 Jun 2020 11:50:02 -0400 Received: from mail.kernel.org ([198.145.29.99]:56634 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2393340AbgFSPYy (ORCPT ); Fri, 19 Jun 2020 11:24:54 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id AAB9321548; Fri, 19 Jun 2020 15:24:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592580293; bh=/WXHUUPc1w97z44Y0YVUkz4p30wFHJ30MGCDQ+SgazA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tgRsmqGNTMjf2AqcNSpj8wyyIGaBecbYyDDmvxYtkVDTpKAfP/PzbtAVFBGZbY+4h vy524RPNrtQS3SzEPWxvancgoGNclrT+Ky/Qk3LCB3wJmGWeadhXqKAXxiNqGNIJ6R Yz3MlM0kV1Bun7pfRoMbf4QSoSF7ntUmh8+r75M4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alex Elder , "David S. Miller" , Sasha Levin Subject: [PATCH 5.7 195/376] net: ipa: do not clear interrupt in gsi_channel_start() Date: Fri, 19 Jun 2020 16:31:53 +0200 Message-Id: <20200619141719.575985108@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200619141710.350494719@linuxfoundation.org> References: <20200619141710.350494719@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Alex Elder [ Upstream commit 195ef57f870070cb02f2f3b99a63d69e8e8f798e ] In gsi_channel_start() there is harmless-looking comment "Clear the channel's event ring interrupt in case it's pending". The intent was to avoid getting spurious interrupts when first bringing up a channel. However we now use channel stop/start to implement suspend and resume, and an interrupt pending at the time we resume is actually something we don't want to ignore. The very first time we bring up the channel we do not expect an interrupt to be pending, and even if it were, the effect would simply be to schedule NAPI on that channel, which would find nothing to do, which is not a problem. Stop clearing any pending IEOB interrupt in gsi_channel_start(). That leaves one caller of the trivial function gsi_isr_ieob_clear(). Get rid of that function and just open-code it in gsi_isr_ieob() instead. This fixes a problem where suspend/resume IPA v4.2 would get stuck when resuming after a suspend. Signed-off-by: Alex Elder Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ipa/gsi.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) -- 2.25.1 diff --git a/drivers/net/ipa/gsi.c b/drivers/net/ipa/gsi.c index 8d9ca1c335e8..043a675e1be1 100644 --- a/drivers/net/ipa/gsi.c +++ b/drivers/net/ipa/gsi.c @@ -238,11 +238,6 @@ static void gsi_irq_ieob_enable(struct gsi *gsi, u32 evt_ring_id) iowrite32(val, gsi->virt + GSI_CNTXT_SRC_IEOB_IRQ_MSK_OFFSET); } -static void gsi_isr_ieob_clear(struct gsi *gsi, u32 mask) -{ - iowrite32(mask, gsi->virt + GSI_CNTXT_SRC_IEOB_IRQ_CLR_OFFSET); -} - static void gsi_irq_ieob_disable(struct gsi *gsi, u32 evt_ring_id) { u32 val; @@ -756,7 +751,6 @@ static void gsi_channel_deprogram(struct gsi_channel *channel) int gsi_channel_start(struct gsi *gsi, u32 channel_id) { struct gsi_channel *channel = &gsi->channel[channel_id]; - u32 evt_ring_id = channel->evt_ring_id; int ret; mutex_lock(&gsi->mutex); @@ -765,9 +759,6 @@ int gsi_channel_start(struct gsi *gsi, u32 channel_id) mutex_unlock(&gsi->mutex); - /* Clear the channel's event ring interrupt in case it's pending */ - gsi_isr_ieob_clear(gsi, BIT(evt_ring_id)); - gsi_channel_thaw(channel); return ret; @@ -1071,7 +1062,7 @@ static void gsi_isr_ieob(struct gsi *gsi) u32 event_mask; event_mask = ioread32(gsi->virt + GSI_CNTXT_SRC_IEOB_IRQ_OFFSET); - gsi_isr_ieob_clear(gsi, event_mask); + iowrite32(event_mask, gsi->virt + GSI_CNTXT_SRC_IEOB_IRQ_CLR_OFFSET); while (event_mask) { u32 evt_ring_id = __ffs(event_mask);