Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3718041imm; Mon, 18 Jun 2018 02:55:08 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKmeexRl2U0HA7Y5n5EsnMv9JAjemz0YkYRFA0b4Fbe+wouhPK5o1LFLWESaLbSJmcA7Iff X-Received: by 2002:a17:902:141:: with SMTP id 59-v6mr4214282plb.181.1529315708303; Mon, 18 Jun 2018 02:55:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529315708; cv=none; d=google.com; s=arc-20160816; b=DjKLl8JubOdPoOiWtdCIwvJS+Cjl1iPI7DDjjbcNEbQny3vJrUifc2zQlRchjZWNXB gHeuMKDLHQhvpzyaeShIZEVJNk2G96Yav6Bk0aur1oFh1cVlk7cYDD8NsGEP3scA1EhF W/vhDUWMngoAUWqsDkxrPHeRin733XH6BwVicOp4M/Inkp2o2/aBI//w1gL46Vwa0K5y M8ni5Whqa3T6Egy9gRlF5X7O3cuKu6VXxKgg0qcq7FzwmTRB1zKzdDEQpFjQMzKdcnLa 45iNDhg0GiamT7UiN1MJI6tRi7FXC8xurX0kZRcZnazUUBVssoZQIHoUvUKA2xd3Mwbd RMAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=fQfRiBaLCzB8y+aQ38QILcIqgPculOMHme3nGpKY3fE=; b=vvqC8R9yzT9h/rRWYE9CfDiHmh4HJl4f12AbDPUmOVBbrc+i8ccCDCAMjHF1tPlgbj yw+T6w6vMuKjn1EExc5zVyG8ga6hlZE7kyS+aOkLB55a/QN20cnwnpasHQSHlMp3QJNl zBoc7iTcbZTYCqrmNRXdcSHyjEEOIEtZa4cf0LBVQ9th0iUXJIguwTXmSnwNA0Ajll8I W7gz7siJZHEDQVBaZxrdsdaX0maQ518Nxu8qB2ddxDbIG+4jZtUf3zUUE3AKcgqQzY5U BKAO3+7Fue9WqvXdtPnFnHI9Kl7LRzP7jjCnmH6tlB5vJLnsZMMSgzeAJmPlGA3IpOoO n1ZA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n64-v6si14665436pfh.210.2018.06.18.02.54.54; Mon, 18 Jun 2018 02:55:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935693AbeFRIUk (ORCPT + 99 others); Mon, 18 Jun 2018 04:20:40 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:55118 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964908AbeFRIUh (ORCPT ); Mon, 18 Jun 2018 04:20:37 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 76E01C7A; Mon, 18 Jun 2018 08:20:36 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jakub Kicinski , Dirk van der Merwe , "David S. Miller" , Sasha Levin Subject: [PATCH 4.16 119/279] nfp: dont depend on eth_tbl being available Date: Mon, 18 Jun 2018 10:11:44 +0200 Message-Id: <20180618080613.735533647@linuxfoundation.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180618080608.851973560@linuxfoundation.org> References: <20180618080608.851973560@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jakub Kicinski [ Upstream commit c55ca688ed99a9cb79367aee2ed2ff6cb80fc039 ] For very very old generation of the management FW Ethernet port information table may theoretically not be available. This in turn will cause the nfp_port structures to not be allocated. Make sure we don't crash the kernel when there is no eth_tbl: RIP: 0010:nfp_net_pci_probe+0xf2/0xb40 [nfp] ... Call Trace: nfp_pci_probe+0x6de/0xab0 [nfp] local_pci_probe+0x47/0xa0 work_for_cpu_fn+0x1a/0x30 process_one_work+0x1de/0x3e0 Found while working with broken/development version of management FW. Fixes: a5950182c00e ("nfp: map mac_stats and vf_cfg BARs") Fixes: 93da7d9660ee ("nfp: provide nfp_port to of nfp_net_get_mac_addr()") Signed-off-by: Jakub Kicinski Reviewed-by: Dirk van der Merwe Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/netronome/nfp/flower/main.c | 2 - drivers/net/ethernet/netronome/nfp/nfp_app_nic.c | 2 - drivers/net/ethernet/netronome/nfp/nfp_main.h | 4 ++ drivers/net/ethernet/netronome/nfp/nfp_net_main.c | 31 ++++++++++++---------- 4 files changed, 23 insertions(+), 16 deletions(-) --- a/drivers/net/ethernet/netronome/nfp/flower/main.c +++ b/drivers/net/ethernet/netronome/nfp/flower/main.c @@ -358,7 +358,7 @@ nfp_flower_spawn_phy_reprs(struct nfp_ap } SET_NETDEV_DEV(repr, &priv->nn->pdev->dev); - nfp_net_get_mac_addr(app->pf, port); + nfp_net_get_mac_addr(app->pf, repr, port); cmsg_port_id = nfp_flower_cmsg_phys_port(phys_port); err = nfp_repr_init(app, repr, --- a/drivers/net/ethernet/netronome/nfp/nfp_app_nic.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_app_nic.c @@ -69,7 +69,7 @@ int nfp_app_nic_vnic_alloc(struct nfp_ap if (err) return err < 0 ? err : 0; - nfp_net_get_mac_addr(app->pf, nn->port); + nfp_net_get_mac_addr(app->pf, nn->dp.netdev, nn->port); return 0; } --- a/drivers/net/ethernet/netronome/nfp/nfp_main.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_main.h @@ -171,7 +171,9 @@ void nfp_net_pci_remove(struct nfp_pf *p int nfp_hwmon_register(struct nfp_pf *pf); void nfp_hwmon_unregister(struct nfp_pf *pf); -void nfp_net_get_mac_addr(struct nfp_pf *pf, struct nfp_port *port); +void +nfp_net_get_mac_addr(struct nfp_pf *pf, struct net_device *netdev, + struct nfp_port *port); bool nfp_ctrl_tx(struct nfp_net *nn, struct sk_buff *skb); --- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c @@ -67,23 +67,26 @@ /** * nfp_net_get_mac_addr() - Get the MAC address. * @pf: NFP PF handle + * @netdev: net_device to set MAC address on * @port: NFP port structure * * First try to get the MAC address from NSP ETH table. If that * fails generate a random address. */ -void nfp_net_get_mac_addr(struct nfp_pf *pf, struct nfp_port *port) +void +nfp_net_get_mac_addr(struct nfp_pf *pf, struct net_device *netdev, + struct nfp_port *port) { struct nfp_eth_table_port *eth_port; eth_port = __nfp_port_get_eth_port(port); if (!eth_port) { - eth_hw_addr_random(port->netdev); + eth_hw_addr_random(netdev); return; } - ether_addr_copy(port->netdev->dev_addr, eth_port->mac_addr); - ether_addr_copy(port->netdev->perm_addr, eth_port->mac_addr); + ether_addr_copy(netdev->dev_addr, eth_port->mac_addr); + ether_addr_copy(netdev->perm_addr, eth_port->mac_addr); } static struct nfp_eth_table_port * @@ -511,16 +514,18 @@ static int nfp_net_pci_map_mem(struct nf return PTR_ERR(mem); } - min_size = NFP_MAC_STATS_SIZE * (pf->eth_tbl->max_index + 1); - pf->mac_stats_mem = nfp_rtsym_map(pf->rtbl, "_mac_stats", - "net.macstats", min_size, - &pf->mac_stats_bar); - if (IS_ERR(pf->mac_stats_mem)) { - if (PTR_ERR(pf->mac_stats_mem) != -ENOENT) { - err = PTR_ERR(pf->mac_stats_mem); - goto err_unmap_ctrl; + if (pf->eth_tbl) { + min_size = NFP_MAC_STATS_SIZE * (pf->eth_tbl->max_index + 1); + pf->mac_stats_mem = nfp_rtsym_map(pf->rtbl, "_mac_stats", + "net.macstats", min_size, + &pf->mac_stats_bar); + if (IS_ERR(pf->mac_stats_mem)) { + if (PTR_ERR(pf->mac_stats_mem) != -ENOENT) { + err = PTR_ERR(pf->mac_stats_mem); + goto err_unmap_ctrl; + } + pf->mac_stats_mem = NULL; } - pf->mac_stats_mem = NULL; } pf->vf_cfg_mem = nfp_net_pf_map_rtsym(pf, "net.vfcfg",