From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760094AbcALPFb (ORCPT ); Tue, 12 Jan 2016 10:05:31 -0500 Received: from mout.kundenserver.de ([217.72.192.75]:63038 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751112AbcALPF3 (ORCPT ); Tue, 12 Jan 2016 10:05:29 -0500 From: Arnd Bergmann To: netdev@vger.kernel.org Cc: "David S. Miller" , Michael Chan , Jeffrey Huang , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] net: bnxt: always return values from _bnxt_get_max_rings Date: Tue, 12 Jan 2016 16:05:08 +0100 Message-ID: <4309490.qRrvvx0n1Q@wuerfel> User-Agent: KMail/4.11.5 (Linux/3.16.0-10-generic; KDE/4.11.5; x86_64; ; ) MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:1SiCr4peCTNQcXkHRpbnnBcrKiqcpXAH1rx5JaKkwWdaaPWV+0E c0jYxbAh3q9Ajmz5iKhffy2Gk5tEa8HesAteNWM2980ipu37JRW2IOLSFJ/JM28USl5hNYf jS33PrmYykK7idGuIQ1ezvX5H1iOcmVJbStGKxO9gpTN2RsWoc3FsfnenUwZCT/EkZnICvH OZOG0PewcCU/UUAP3sb5Q== X-UI-Out-Filterresults: notjunk:1;V01:K0:1ovtIA9q9Sg=:ecLLsyL7uY3EP2SZGjOzEt If8zTFtrQVXFmiREoqV/ux2GhUc7Rj5LrYBw34r60ZhHWKtm2wWUTNtpMp9glyv8K/5WLNJIT U6WqJxw270mT2YvLt6bQbTfC5Xz26PWd7XGiT8Oauti+p+NmnoVPC6tsXYS2rwMsOrkIFLShG bTYR/fwF1THFy8UVp5iDZnAWEwr076f0QCG36Mw1SY7EbNRpUr4zgA41v++rdAWdc9yItpG50 WrUO2Q8wOJ+mV/vJZOfvyNiuQEDtBGFLKMGwP2lzXQRfLx9DAqU92YMcPEmKpzVMzfJPOkPPn z9RhoMunPwynuekQqRI5/1NFZZ3ZvGkyVWV6cR2nEWwhbVvEzNq7Rgn2m1cH9Rw252YrUSx6P m6EUWRUWc5PdQdx9m/i6nXiHi2nr1jKIbyoDnfSFAmala0w5AYWiOKvc95CCJjElrtRsXFm/E XPAP/wFuRKcj+IsvIGw/pGNOxNyZrPftSG0PM4eqWYc0BJ2z1p9l+ekvSgxrS87F8ebA0wTKg o/ZChKqu8/rScvgtd+RGeGPl1Q1awHeqd1GVysd1IAKeMbpsv9XDJaKeDutL7jq2X9wDCcEwQ Gdt8tJhpZsrWfcQoNzE5lKLJFIZxYLbNCiGYMxY9IYCYQLiT15OnO7kBigmwvk+enAH6y3SiK HmkhFUVAqte0mGWpY5+VNgSceHJm16u99MtI2ZEcrd+hndFgeCGZRtgZ9Qds6zwKsMLWr1pDb C9ml9yE1U2TyF9N0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Newly added code in the bnxt driver uses a couple of variables that are never initialized when CONFIG_BNXT_SRIOV is not set, and gcc correctly warns about that: In file included from include/linux/list.h:8:0, from include/linux/module.h:9, from drivers/net/ethernet/broadcom/bnxt/bnxt.c:10: drivers/net/ethernet/broadcom/bnxt/bnxt.c: In function 'bnxt_get_max_rings': include/linux/kernel.h:794:26: warning: 'cp' may be used uninitialized in this function [-Wmaybe-uninitialized] include/linux/kernel.h:794:26: warning: 'tx' may be used uninitialized in this function [-Wmaybe-uninitialized] drivers/net/ethernet/broadcom/bnxt/bnxt.c:5730:11: warning: 'rx' may be used uninitialized in this function [-Wmaybe-uninitialized] drivers/net/ethernet/broadcom/bnxt/bnxt.c:5736:6: note: 'rx' was declared here This changes the condition so that we fall back to using the PF data if VF is not available, and always initialize the variables to something useful. Signed-off-by: Arnd Bergmann Fixes: 6e6c5a57fbe1 ("bnxt_en: Modify bnxt_get_max_rings() to support shared or non shared rings.") --- This is the fix that made most sense to me, but that doesn't mean it's the right thing to do for this driver, so please check carefully whether falling back to PF is actually the correct behavior. I'm assuming that BNXT_PF(bp) is meant to always be true if CONFIG_BNXT_SRIOV is disabled, but I have not verified if this is guaranteed. diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 287bfb79ea2d..df835f5e46d8 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -5711,21 +5711,23 @@ static void _bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx, { int max_ring_grps = 0; - if (BNXT_PF(bp)) { - *max_tx = bp->pf.max_tx_rings; - *max_rx = bp->pf.max_rx_rings; - *max_cp = min_t(int, bp->pf.max_irqs, bp->pf.max_cp_rings); - *max_cp = min_t(int, *max_cp, bp->pf.max_stat_ctxs); - max_ring_grps = bp->pf.max_hw_ring_grps; - } else { #ifdef CONFIG_BNXT_SRIOV + if (!BNXT_PF(bp)) { *max_tx = bp->vf.max_tx_rings; *max_rx = bp->vf.max_rx_rings; *max_cp = min_t(int, bp->vf.max_irqs, bp->vf.max_cp_rings); *max_cp = min_t(int, *max_cp, bp->vf.max_stat_ctxs); max_ring_grps = bp->vf.max_hw_ring_grps; + } else #endif + { + *max_tx = bp->pf.max_tx_rings; + *max_rx = bp->pf.max_rx_rings; + *max_cp = min_t(int, bp->pf.max_irqs, bp->pf.max_cp_rings); + *max_cp = min_t(int, *max_cp, bp->pf.max_stat_ctxs); + max_ring_grps = bp->pf.max_hw_ring_grps; } + if (bp->flags & BNXT_FLAG_AGG_RINGS) *max_rx >>= 1; *max_rx = min_t(int, *max_rx, max_ring_grps);