Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751590AbcDTPPP (ORCPT ); Wed, 20 Apr 2016 11:15:15 -0400 Received: from mail1.bemta14.messagelabs.com ([193.109.254.118]:57890 "EHLO mail1.bemta14.messagelabs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751285AbcDTPPM (ORCPT ); Wed, 20 Apr 2016 11:15:12 -0400 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrIIsWRWlGSWpSXmKPExsVyU6aHU/fnHPF wgz0bFCzmnG9hsVg5hcXi8q45bBazl/SzWFx9UG5xbIGYxf4rXg7sHt++TmLx2LLyJpPH8Rvb mTw+b5ILYIlizcxLyq9IYM3Yv/IGU8ESyYrWu8vYGhgXiXYxcnEICWxglLj7v5+1i5GTg03AT GLXq3XsILaIgIzE0f4FbCBFzAKXGCXmze5mAUkIC4RL/NjYzgRiswioSjw9+xismVfAT2Lv8a +MXYwcHBICchILLqSDhDkF/CW+zl4LNlMIqOTkwy1MEOWCEidnPgEbySwgIXHwxQtmiBptieV 7+sDqJQQUJGav2sAEYadI3N4/gxHCtpZo+/uBfQKjwCwko2YhGbWAkWkVo3pxalFZapGusV5S UWZ6RkluYmaOrqGhiV5uanFxYnpqTmJSsV5yfu4mRmBQMwDBDsa7fc6HGCU5mJREed80iYcL8 SXlp1RmJBZnxBeV5qQWH2KU4eBQkuA9MBsoJ1iUmp5akZaZA4wvmLQEB4+SCO8DkDRvcUFibn FmOkTqFKOilDjvTJCEAEgiozQPrg0W05cYZaWEeRmBDhHiKUgtys0sQZV/xSjOwagkzPsUZAp PZl4J3PRXQIuZgBbz3xUFWVySiJCSamC8yrCN/8nd07O2LXun3XOdacWBJqZppgz5tQ7LTPXC T3ZPqmvg49We8H9jQ8Hruca56rpt+89UntpWYRd++IKZ3Kc5bI0mDCx2+1ecCs+MefLlMqvr3 oSnS/UmBr6+aruu+l3e3K4pJdd8PJ+F81ql3p1RtGGdifPmi1arhH8XP1P5obs+YXWfEktxRq KhFnNRcSIA1S/YOeQCAAA= X-Env-Sender: andrew.goodbody@cambrionix.com X-Msg-Ref: server-16.tower-91.messagelabs.com!1461165303!27865799!6 X-Originating-IP: [217.28.140.9] X-StarScan-Received: X-StarScan-Version: 8.28; banners=-,-,- X-VirusChecked: Checked From: Andrew Goodbody To: CC: , , , , , , Andrew Goodbody Subject: [PATCH v2 1/1] Revert "Prevent NUll pointer dereference with two PHYs on cpsw" Date: Wed, 20 Apr 2016 16:14:51 +0100 Message-ID: <1461165291-25043-2-git-send-email-andrew.goodbody@cambrionix.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1461165291-25043-1-git-send-email-andrew.goodbody@cambrionix.com> References: <1461165291-25043-1-git-send-email-andrew.goodbody@cambrionix.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [46.17.166.30] X-ClientProxiedBy: SEHSTE15FE03.hs20.net (172.18.251.43) To THHSTE15D2BE2.hs20.net (192.168.251.32) X-EXCLAIMER-MD-CONFIG: 266e7a57-cddd-49fd-bdea-19bca6d40303 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3235 Lines: 99 This reverts commit cfe255600154f0072d4a8695590dbd194dfd1aeb This can result in a "Unable to handle kernel paging request" during boot. This was due to using an uninitialised struct member, data->slaves. Signed-off-by: Andrew Goodbody Tested-by: Tony Lindgren --- v2 No code change, added signoff and collected tested-by drivers/net/ethernet/ti/cpsw.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 2cd67a5..54bcc38 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -349,7 +349,6 @@ struct cpsw_slave { struct cpsw_slave_data *data; struct phy_device *phy; struct net_device *ndev; - struct device_node *phy_node; u32 port_vlan; u32 open_stat; }; @@ -368,6 +367,7 @@ struct cpsw_priv { spinlock_t lock; struct platform_device *pdev; struct net_device *ndev; + struct device_node *phy_node; struct napi_struct napi_rx; struct napi_struct napi_tx; struct device *dev; @@ -1142,8 +1142,8 @@ static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv) cpsw_ale_add_mcast(priv->ale, priv->ndev->broadcast, 1 << slave_port, 0, 0, ALE_MCAST_FWD_2); - if (slave->phy_node) - slave->phy = of_phy_connect(priv->ndev, slave->phy_node, + if (priv->phy_node) + slave->phy = of_phy_connect(priv->ndev, priv->phy_node, &cpsw_adjust_link, 0, slave->data->phy_if); else slave->phy = phy_connect(priv->ndev, slave->data->phy_id, @@ -2025,8 +2025,7 @@ static int cpsw_probe_dt(struct cpsw_priv *priv, if (strcmp(slave_node->name, "slave")) continue; - priv->slaves[i].phy_node = - of_parse_phandle(slave_node, "phy-handle", 0); + priv->phy_node = of_parse_phandle(slave_node, "phy-handle", 0); parp = of_get_property(slave_node, "phy_id", &lenp); if (of_phy_is_fixed_link(slave_node)) { struct device_node *phy_node; @@ -2267,22 +2266,12 @@ static int cpsw_probe(struct platform_device *pdev) /* Select default pin state */ pinctrl_pm_select_default_state(&pdev->dev); - data = &priv->data; - priv->slaves = devm_kzalloc(&pdev->dev, - sizeof(struct cpsw_slave) * data->slaves, - GFP_KERNEL); - if (!priv->slaves) { - ret = -ENOMEM; - goto clean_runtime_disable_ret; - } - for (i = 0; i < data->slaves; i++) - priv->slaves[i].slave_num = i; - if (cpsw_probe_dt(priv, pdev)) { dev_err(&pdev->dev, "cpsw: platform data missing\n"); ret = -ENODEV; goto clean_runtime_disable_ret; } + data = &priv->data; if (is_valid_ether_addr(data->slave_data[0].mac_addr)) { memcpy(priv->mac_addr, data->slave_data[0].mac_addr, ETH_ALEN); @@ -2294,6 +2283,16 @@ static int cpsw_probe(struct platform_device *pdev) memcpy(ndev->dev_addr, priv->mac_addr, ETH_ALEN); + priv->slaves = devm_kzalloc(&pdev->dev, + sizeof(struct cpsw_slave) * data->slaves, + GFP_KERNEL); + if (!priv->slaves) { + ret = -ENOMEM; + goto clean_runtime_disable_ret; + } + for (i = 0; i < data->slaves; i++) + priv->slaves[i].slave_num = i; + priv->slaves[0].ndev = ndev; priv->emac_port = 0; -- 2.5.0