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=-9.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,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 647AFC169C4 for ; Thu, 31 Jan 2019 19:32:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2495D20B1F for ; Thu, 31 Jan 2019 19:32:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="HotdtOvS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727858AbfAaTcB (ORCPT ); Thu, 31 Jan 2019 14:32:01 -0500 Received: from mail-pl1-f193.google.com ([209.85.214.193]:33197 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726994AbfAaTcA (ORCPT ); Thu, 31 Jan 2019 14:32:00 -0500 Received: by mail-pl1-f193.google.com with SMTP id z23so1941307plo.0 for ; Thu, 31 Jan 2019 11:32:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id; bh=3MRZQLI3KSl44Fbu5G0NnZ8R2yfiFKYxAdLbiGY5B+M=; b=HotdtOvSX5eGhzBE/LSKTFChNJhyhU9KPvPNrD1Sf3rvQ2skrfHy0x7ELr448tswfH HGgZNEnWmXsCwshk7lKtGDCLt3w7+GukDulFRbCgdWOvqkPWleMS46cHXTiMsST8Pk9M HSEY5eqAwNfprFRrQUmfnRG4K/5rE17Wx8iXg= 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; bh=3MRZQLI3KSl44Fbu5G0NnZ8R2yfiFKYxAdLbiGY5B+M=; b=Gs6sAlnvr/I2kZ+7Lv3Rv9uXeHfnVn7umtIltrbC5PQLjzymtiQH33xSDOLBXqvrYO 7g2pJpOg2XjLb7QJ84LVgCQtxFV4Vig/WMFLjBL1sg6ZuUwfQz5oEEBUNX9zwK9dxxEo QXDiV6AMr+JbND5Qus/UP0DUiLWCxP5G0piC/iLrbO1+tUtoV1pTLQg/dcGH09XyyG15 HPhjNDPKJG6Wm+31JR1kDUiGaWjTkDlceb0S/2SqeWdVFDTnmpAUJzoFK5baRhUrPFlz v/jag8/yrtTy+c17yEqd3yoT1DoiKymWTINmP72N5xOsy8voMTR8jwB9LAZT07q9xV2E dW0A== X-Gm-Message-State: AJcUukfJYxNPlpbLJ7DUsNW0YSht1JqG5a6pysjK5VzTb52v/zmgOWRI sbWOXMwZxMH9MRXJJcNrrR45+uy/Nvo= X-Google-Smtp-Source: ALg8bN7MtwoRCLo7FoQc0R2XoKXxGFgPGA1fXdLQDZmUixpwEPLjgXofTQGWYWc7uNS+YSPSj/00TA== X-Received: by 2002:a17:902:bb05:: with SMTP id l5mr36740560pls.230.1548963120014; Thu, 31 Jan 2019 11:32:00 -0800 (PST) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id g6sm7425180pgq.18.2019.01.31.11.31.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 Jan 2019 11:31:59 -0800 (PST) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org Subject: [PATCH net] bnxt_en: Disable interrupts when allocating CP rings or NQs. Date: Thu, 31 Jan 2019 14:31:48 -0500 Message-Id: <1548963108-9839-1-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When calling firmware to allocate a CP ring or NQ, an interrupt associated with that ring may be generated immediately before the doorbell is even setup after the firmware call returns. When servicing the interrupt, the driver may crash when trying to access the doorbell. Fix it by disabling interrupt on that vector until the doorbell is set up. Fixes: 697197e5a173 ("bnxt_en: Re-structure doorbells.") Signed-off-by: Michael Chan --- Please queue this for 4.20 stable as well. Thanks. drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 6a51287..8bc7e49 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -4973,12 +4973,18 @@ static int bnxt_hwrm_ring_alloc(struct bnxt *bp) struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring; struct bnxt_ring_struct *ring = &cpr->cp_ring_struct; u32 map_idx = ring->map_idx; + unsigned int vector; + vector = bp->irq_tbl[map_idx].vector; + disable_irq_nosync(vector); rc = hwrm_ring_alloc_send_msg(bp, ring, type, map_idx); - if (rc) + if (rc) { + enable_irq(vector); goto err_out; + } bnxt_set_db(bp, &cpr->cp_db, type, map_idx, ring->fw_ring_id); bnxt_db_nq(bp, &cpr->cp_db, cpr->cp_raw_cons); + enable_irq(vector); bp->grp_info[i].cp_fw_ring_id = ring->fw_ring_id; if (!i) { -- 2.5.1