Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp943713pxb; Wed, 6 Apr 2022 05:00:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyM+aJxAfzsSn/cEy+r3KTpQoVQyhBkJIVlg0wQQOYzopZ+fQ4a9wO2FNagaOxuATSggCvU X-Received: by 2002:a17:903:1210:b0:14f:973e:188d with SMTP id l16-20020a170903121000b0014f973e188dmr8245285plh.61.1649246435032; Wed, 06 Apr 2022 05:00:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649246435; cv=none; d=google.com; s=arc-20160816; b=L9yhMRZxIr/djlh1/2OBHPVa0bMnwGdwSFmY9Ds5ionshxlZ1FB3QzJ7a9+CWiHdij 5i5iZ7bd5XStxsfpkJ2oaXjeK65jXFAFNwAhLASu5esOZ84fulL+TDDJn5J4p1CNefLH JYY5VUNP6+UOiZcv4sdCVLunqxiJTngaM/fa9rJisRDFJZPetVmx+fquA8yl+F//fK9o Kutt53SgbRKgjlBcH15R6HeWQiQ3guAxZC2XDpYsQU95vCkkqYzjX7XSUiIlL4VED1mp GcvGVjcSv1Q5S8P35kFkyPwX/RJhRWOTpiBYL1kWIs6D+u4nxYkO9wAd79t9v07e0bJS MZbQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=7PNaS5vw2VAhwsPGmR3belMLNM5OaZGvIyNJYeM34z4=; b=bNni0PDywEJ7ooGS4Yy6y6UjjHw2FIXtnK3gWBuG6vnCdoYC4GbEW0xCFAGmpigbej 41QbXsqAYUerYSDEeV96n5wpu3Ea809XO5S8aptLw0syxYzkjrac+fBnzFEKiHGN+7gS 486lJzvkbPOewSWnAa7wKADHnbeDwbTK6r5SahcAtAmkKrUVPdapBdnk9GebEuI5WmMa GGKRGD88mHukd93yibE5tnjBdTV1vkmmQV9Cwti1JVlfLEL6Gr/d6RrLxvS9W11NFY4b KhokylqzMMObqchEIMs4j6/HI0USwQhhQNGsIr+jVuTZauXoputvRYfTDlIc+VXbeAA9 AzcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=MfGfuq0Z; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id on14-20020a17090b1d0e00b001bd14e01f20si5253842pjb.14.2022.04.06.05.00.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Apr 2022 05:00:35 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=MfGfuq0Z; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 4CAB04BDAD3; Wed, 6 Apr 2022 03:24:00 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1443737AbiDFBPz (ORCPT + 99 others); Tue, 5 Apr 2022 21:15:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59108 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356214AbiDEKX3 (ORCPT ); Tue, 5 Apr 2022 06:23:29 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A927BAB86; Tue, 5 Apr 2022 03:07:48 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id CD0EFB81B7A; Tue, 5 Apr 2022 10:07:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1C63FC385A2; Tue, 5 Apr 2022 10:07:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649153265; bh=MYXKRL6zh+SFfUS482sv3pgx8X+jfhG4h+6uNd7kH6E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MfGfuq0ZKBHeV5m7fFAsnq54loGklAkmjDfZPT5eIk/xHFrDVV3PbAeq6tvcgwikl Qi/BlEUakg6U218wO0q5OZg5udI9GlvK3N9u3M5+Fy9VRxSXcG8f8XboBvlEPO47gJ tZQSrgz31h3sozKVExz/oW56ouFakuYLjKWUp5Y4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Linus Walleij , Arend van Spriel , Hector Martin , Andy Shevchenko , Kalle Valo Subject: [PATCH 5.10 123/599] brcmfmac: pcie: Fix crashes due to early IRQs Date: Tue, 5 Apr 2022 09:26:57 +0200 Message-Id: <20220405070302.498797711@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405070258.802373272@linuxfoundation.org> References: <20220405070258.802373272@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Hector Martin commit b50255c83b914defd61a57fbc81d452334b63f4c upstream. The driver was enabling IRQs before the message processing was initialized. This could cause IRQs to come in too early and crash the driver. Instead, move the IRQ enable and hostready to a bus preinit function, at which point everything is properly initialized. Fixes: 9e37f045d5e7 ("brcmfmac: Adding PCIe bus layer support.") Reviewed-by: Linus Walleij Reviewed-by: Arend van Spriel Cc: stable@vger.kernel.org Signed-off-by: Hector Martin Reviewed-by: Andy Shevchenko Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20220131160713.245637-7-marcan@marcan.st Signed-off-by: Greg Kroah-Hartman --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c @@ -1306,6 +1306,18 @@ static void brcmf_pcie_down(struct devic { } +static int brcmf_pcie_preinit(struct device *dev) +{ + struct brcmf_bus *bus_if = dev_get_drvdata(dev); + struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie; + + brcmf_dbg(PCIE, "Enter\n"); + + brcmf_pcie_intr_enable(buspub->devinfo); + brcmf_pcie_hostready(buspub->devinfo); + + return 0; +} static int brcmf_pcie_tx(struct device *dev, struct sk_buff *skb) { @@ -1414,6 +1426,7 @@ static int brcmf_pcie_reset(struct devic } static const struct brcmf_bus_ops brcmf_pcie_bus_ops = { + .preinit = brcmf_pcie_preinit, .txdata = brcmf_pcie_tx, .stop = brcmf_pcie_down, .txctl = brcmf_pcie_tx_ctlpkt, @@ -1786,9 +1799,6 @@ static void brcmf_pcie_setup(struct devi init_waitqueue_head(&devinfo->mbdata_resp_wait); - brcmf_pcie_intr_enable(devinfo); - brcmf_pcie_hostready(devinfo); - ret = brcmf_attach(&devinfo->pdev->dev); if (ret) goto fail;