From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B63E2A0487 for ; Thu, 4 Jul 2019 01:44:19 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7581225D9; Thu, 4 Jul 2019 01:44:15 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id CAED02956; Thu, 4 Jul 2019 01:44:11 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x63NeIgg021952; Wed, 3 Jul 2019 16:44:11 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=v/0mhnYfRCrQ8N5fI8OELOGbMFJTGiUgDOyZIpBJFaM=; b=RuSe0BWXRXZG0pRHKg0tnOssXDBWLu9XIYsNdr+n3V+FM3nByNgUeprmwTQNuOBKtN7i I7zqJTsmndLH+/k+iOoEg+gd7bkVQuAZa8bcAFsL6UtF7us1gBPDtYXB19CvrU2YL7uW xMDynXpUk64R9OTHqAGjXAubR40gy1O1IJIX6WU3DJP8FDQD+x5Wf/rAJ0+hNfWe63Q5 uIcWSJQDOAyy8gDj/t588QdXjpGe9ZhZW5eFaUQI4nks7zEX1PxNi1yr7lEmvWHw/qzw rj97xwnlNUeSsewODwAoizysl5RAE/bxBJXV5rGepCbUoivG/rPNnc7geVp/VJIAJV73 kA== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0b-0016f401.pphosted.com with ESMTP id 2tgtf72vgt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 03 Jul 2019 16:44:11 -0700 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 3 Jul 2019 16:44:08 -0700 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Wed, 3 Jul 2019 16:44:08 -0700 Received: from irv1user08.caveonetworks.com (unknown [10.104.116.105]) by maili.marvell.com (Postfix) with ESMTP id C82753F7043; Wed, 3 Jul 2019 16:44:08 -0700 (PDT) Received: (from rmody@localhost) by irv1user08.caveonetworks.com (8.14.4/8.14.4/Submit) id x63Ni8Ks011800; Wed, 3 Jul 2019 16:44:08 -0700 X-Authentication-Warning: irv1user08.caveonetworks.com: rmody set sender to rmody@marvell.com using -f From: Rasesh Mody To: CC: Rasesh Mody , , , Date: Wed, 3 Jul 2019 16:43:13 -0700 Message-ID: <20190703234313.10782-3-rmody@marvell.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20190703234313.10782-1-rmody@marvell.com> References: <20190703234313.10782-1-rmody@marvell.com> MIME-Version: 1.0 Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-07-03_06:, , signatures=0 Subject: [dpdk-dev] [PATCH 3/3] net/bnx2x: fix fastpath SB allocation for SRIOV X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" For SRIOV, fastpath status blocks are not allocated resulting in segfault. Separate out fastpath DMA allocation/free from rest of memory allocation/free. It is now done as part of NIC load/unload. Comment indentation changes in bnx2x_alloc_hsi_mem() and bnx2x_free_hsi_mem() APIs. Fixes: f0219d98defd ("net/bnx2x: fix interrupt flood") Cc: stable@dpdk.org Signed-off-by: Rasesh Mody --- drivers/net/bnx2x/bnx2x.c | 117 +++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 57 deletions(-) diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c index 877f5b73d..1a088269f 100644 --- a/drivers/net/bnx2x/bnx2x.c +++ b/drivers/net/bnx2x/bnx2x.c @@ -2120,6 +2120,9 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link bnx2x_free_mem(sc); } + /* free the host hardware/software hsi structures */ + bnx2x_free_hsi_mem(sc); + bnx2x_free_fw_stats_mem(sc); sc->state = BNX2X_STATE_CLOSED; @@ -2403,9 +2406,6 @@ static void bnx2x_free_mem(struct bnx2x_softc *sc) ecore_ilt_mem_op(sc, ILT_MEMOP_FREE); bnx2x_free_ilt_lines_mem(sc); - - /* free the host hardware/software hsi structures */ - bnx2x_free_hsi_mem(sc); } static int bnx2x_alloc_mem(struct bnx2x_softc *sc) @@ -2456,13 +2456,6 @@ static int bnx2x_alloc_mem(struct bnx2x_softc *sc) return -1; } - /* allocate the host hardware/software hsi structures */ - if (bnx2x_alloc_hsi_mem(sc) != 0) { - PMD_DRV_LOG(ERR, sc, "bnx2x_alloc_hsi_mem was failed"); - bnx2x_free_mem(sc); - return -ENXIO; - } - return 0; } @@ -7242,6 +7235,14 @@ int bnx2x_nic_load(struct bnx2x_softc *sc) } } + /* allocate the host hardware/software hsi structures */ + if (bnx2x_alloc_hsi_mem(sc) != 0) { + PMD_DRV_LOG(ERR, sc, "bnx2x_alloc_hsi_mem was failed"); + sc->state = BNX2X_STATE_CLOSED; + rc = -ENOMEM; + goto bnx2x_nic_load_error0; + } + if (bnx2x_alloc_fw_stats_mem(sc) != 0) { sc->state = BNX2X_STATE_CLOSED; rc = -ENOMEM; @@ -7457,6 +7458,7 @@ int bnx2x_nic_load(struct bnx2x_softc *sc) bnx2x_nic_load_error0: bnx2x_free_fw_stats_mem(sc); + bnx2x_free_hsi_mem(sc); bnx2x_free_mem(sc); return rc; @@ -8902,9 +8904,9 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc) uint32_t i; if (IS_PF(sc)) { -/************************/ -/* DEFAULT STATUS BLOCK */ -/************************/ + /************************/ + /* DEFAULT STATUS BLOCK */ + /************************/ if (bnx2x_dma_alloc(sc, sizeof(struct host_sp_status_block), &sc->def_sb_dma, "def_sb", @@ -8914,9 +8916,9 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc) sc->def_sb = (struct host_sp_status_block *)sc->def_sb_dma.vaddr; -/***************/ -/* EVENT QUEUE */ -/***************/ + /***************/ + /* EVENT QUEUE */ + /***************/ if (bnx2x_dma_alloc(sc, BNX2X_PAGE_SIZE, &sc->eq_dma, "ev_queue", @@ -8927,9 +8929,9 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc) sc->eq = (union event_ring_elem *)sc->eq_dma.vaddr; -/*************/ -/* SLOW PATH */ -/*************/ + /*************/ + /* SLOW PATH */ + /*************/ if (bnx2x_dma_alloc(sc, sizeof(struct bnx2x_slowpath), &sc->sp_dma, "sp", @@ -8941,9 +8943,9 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc) sc->sp = (struct bnx2x_slowpath *)sc->sp_dma.vaddr; -/*******************/ -/* SLOW PATH QUEUE */ -/*******************/ + /*******************/ + /* SLOW PATH QUEUE */ + /*******************/ if (bnx2x_dma_alloc(sc, BNX2X_PAGE_SIZE, &sc->spq_dma, "sp_queue", @@ -8956,9 +8958,9 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc) sc->spq = (struct eth_spe *)sc->spq_dma.vaddr; -/***************************/ -/* FW DECOMPRESSION BUFFER */ -/***************************/ + /***************************/ + /* FW DECOMPRESSION BUFFER */ + /***************************/ if (bnx2x_dma_alloc(sc, FW_BUF_SIZE, &sc->gz_buf_dma, "fw_buf", RTE_CACHE_LINE_SIZE) != 0) { @@ -8982,9 +8984,9 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc) fp->sc = sc; fp->index = i; -/*******************/ -/* FP STATUS BLOCK */ -/*******************/ + /*******************/ + /* FP STATUS BLOCK */ + /*******************/ snprintf(buf, sizeof(buf), "fp_%d_sb", i); if (bnx2x_dma_alloc(sc, sizeof(union bnx2x_host_hc_status_block), @@ -9015,49 +9017,50 @@ void bnx2x_free_hsi_mem(struct bnx2x_softc *sc) for (i = 0; i < sc->num_queues; i++) { fp = &sc->fp[i]; -/*******************/ -/* FP STATUS BLOCK */ -/*******************/ + /*******************/ + /* FP STATUS BLOCK */ + /*******************/ memset(&fp->status_block, 0, sizeof(fp->status_block)); bnx2x_dma_free(&fp->sb_dma); } - /***************************/ - /* FW DECOMPRESSION BUFFER */ - /***************************/ - - bnx2x_dma_free(&sc->gz_buf_dma); - sc->gz_buf = NULL; + if (IS_PF(sc)) { + /***************************/ + /* FW DECOMPRESSION BUFFER */ + /***************************/ - /*******************/ - /* SLOW PATH QUEUE */ - /*******************/ + bnx2x_dma_free(&sc->gz_buf_dma); + sc->gz_buf = NULL; - bnx2x_dma_free(&sc->spq_dma); - sc->spq = NULL; + /*******************/ + /* SLOW PATH QUEUE */ + /*******************/ - /*************/ - /* SLOW PATH */ - /*************/ + bnx2x_dma_free(&sc->spq_dma); + sc->spq = NULL; - bnx2x_dma_free(&sc->sp_dma); - sc->sp = NULL; + /*************/ + /* SLOW PATH */ + /*************/ - /***************/ - /* EVENT QUEUE */ - /***************/ + bnx2x_dma_free(&sc->sp_dma); + sc->sp = NULL; - bnx2x_dma_free(&sc->eq_dma); - sc->eq = NULL; + /***************/ + /* EVENT QUEUE */ + /***************/ - /************************/ - /* DEFAULT STATUS BLOCK */ - /************************/ + bnx2x_dma_free(&sc->eq_dma); + sc->eq = NULL; - bnx2x_dma_free(&sc->def_sb_dma); - sc->def_sb = NULL; + /************************/ + /* DEFAULT STATUS BLOCK */ + /************************/ + bnx2x_dma_free(&sc->def_sb_dma); + sc->def_sb = NULL; + } } /* -- 2.18.0