From patchwork Sun Sep 12 16:34:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 510336 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=-19.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, MIME_HEADER_CTYPE_ONLY, SPF_HELO_NONE, SPF_PASS, T_TVD_MIME_NO_HEADERS, 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 94B4FC433FE for ; Sun, 12 Sep 2021 16:35:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 73A0A608FB for ; Sun, 12 Sep 2021 16:35:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235027AbhILQgY (ORCPT ); Sun, 12 Sep 2021 12:36:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234105AbhILQgW (ORCPT ); Sun, 12 Sep 2021 12:36:22 -0400 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A2C11C061574 for ; Sun, 12 Sep 2021 09:35:07 -0700 (PDT) Received: by mail-pj1-x102f.google.com with SMTP id j1so4633011pjv.3 for ; Sun, 12 Sep 2021 09:35:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jcxCnmCF89EF94Yi+tyhGdj+WFK48Xq5HdyYgb0z3J8=; b=PKBDiJX8PYf9os/aL1ULf3RVmOdqbt8PEv149uRIZw/MhvM0F0kYY6shtPtW0PIwpj aeXvkBcfGaLAAfWnKsAo8pXxn0Z44L1edoe6Su4nydd5Y170HnXE+mxNOIVuUPxEEqn9 AGv+mWAjZndKF/MCEJ+52UKj6i4Y0d48bCsyc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jcxCnmCF89EF94Yi+tyhGdj+WFK48Xq5HdyYgb0z3J8=; b=lpQUyUhVWDsginyDo+6S2GolWAW179euicI7aiGSuzK2iD/MdwTdh18Tx64qKzhFO6 AZjWDxEZYrneLDqCLAnwPacgLRNcPMSwHU7x+CTaZWI3Bbks63DXGQKHLMqu3FRaesXR +nMXRw5O1+iDta5S9YJm0Z/8JQjUKo8ThLJziYvWenfzs59PPG/wsaxbwC2sysxgFWe3 XTxpxXJ1JcLfO8I8hPyLfBknqagR0WqGtO3lNgv9tOC91K+bG3LHCnSFbOObnCs/1koF 1SUj+UdpKxfqHYpdzldAkSOoz8jgQ2IJ4KobTEcwMfsBPcasiDQovUYZcKWx2hQPB8Qy NhYg== X-Gm-Message-State: AOAM532Rlc2W6vzwV267PFet5Kp/YLblLIVvHof22HIgg90vBNo5lUGq 3gIn1HYAGjAuPQeyr6lF3Fmn3w== X-Google-Smtp-Source: ABdhPJwzZkveoZBwhs9VhcQiVEVIxQQOFsBE/STrO8VH5akhvwnO6dd6fuPiB2QbGZ5KEMXgRPbGNw== X-Received: by 2002:a17:90a:de16:: with SMTP id m22mr8388465pjv.38.1631464506693; Sun, 12 Sep 2021 09:35:06 -0700 (PDT) Received: from localhost.swdvt.lab.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id l22sm5444224pgo.45.2021.09.12.09.35.05 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 12 Sep 2021 09:35:05 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org, kuba@kernel.org, edwin.peer@broadcom.com, gospo@broadcom.com Subject: [PATCH net 3/3] bnxt_en: Clean up completion ring page arrays completely Date: Sun, 12 Sep 2021 12:34:49 -0400 Message-Id: <1631464489-8046-4-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1631464489-8046-1-git-send-email-michael.chan@broadcom.com> References: <1631464489-8046-1-git-send-email-michael.chan@broadcom.com> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We recently changed the completion ring page arrays to be dynamically allocated to better support the expanded range of ring depths. The cleanup path for this was not quite complete. It might cause the shutdown path to crash if we need to abort before the completion ring arrays have been allocated and initialized. Fix it by initializing the ring_mem->pg_arr to NULL after freeing the completion ring page array. Add a check in bnxt_free_ring() to skip referencing the rmem->pg_arr if it is NULL. Fixes: 03c7448790b8 ("bnxt_en: Don't use static arrays for completion ring pages") Reviewed-by: Andy Gospodarek Reviewed-by: Edwin Peer Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 9f9806f1c0fc..f32431a7e5a6 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -2912,6 +2912,9 @@ static void bnxt_free_ring(struct bnxt *bp, struct bnxt_ring_mem_info *rmem) struct pci_dev *pdev = bp->pdev; int i; + if (!rmem->pg_arr) + goto skip_pages; + for (i = 0; i < rmem->nr_pages; i++) { if (!rmem->pg_arr[i]) continue; @@ -2921,6 +2924,7 @@ static void bnxt_free_ring(struct bnxt *bp, struct bnxt_ring_mem_info *rmem) rmem->pg_arr[i] = NULL; } +skip_pages: if (rmem->pg_tbl) { size_t pg_tbl_size = rmem->nr_pages * 8; @@ -3240,10 +3244,14 @@ static int bnxt_alloc_tx_rings(struct bnxt *bp) static void bnxt_free_cp_arrays(struct bnxt_cp_ring_info *cpr) { + struct bnxt_ring_struct *ring = &cpr->cp_ring_struct; + kfree(cpr->cp_desc_ring); cpr->cp_desc_ring = NULL; + ring->ring_mem.pg_arr = NULL; kfree(cpr->cp_desc_mapping); cpr->cp_desc_mapping = NULL; + ring->ring_mem.dma_arr = NULL; } static int bnxt_alloc_cp_arrays(struct bnxt_cp_ring_info *cpr, int n)