From patchwork Wed Apr 20 14:42:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Goodbody X-Patchwork-Id: 8890721 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 72FB09F39A for ; Wed, 20 Apr 2016 14:49:44 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9C79220268 for ; Wed, 20 Apr 2016 14:49:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A058F20260 for ; Wed, 20 Apr 2016 14:49:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754475AbcDTOtm (ORCPT ); Wed, 20 Apr 2016 10:49:42 -0400 Received: from mail1.bemta14.messagelabs.com ([193.109.254.113]:56198 "EHLO mail1.bemta14.messagelabs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754340AbcDTOtl (ORCPT ); Wed, 20 Apr 2016 10:49:41 -0400 X-Greylist: delayed 398 seconds by postgrey-1.27 at vger.kernel.org; Wed, 20 Apr 2016 10:49:40 EDT Received: from [194.106.220.51] by server-9.bemta-14.messagelabs.com id 22/77-02960-17597175; Wed, 20 Apr 2016 14:42:57 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrEIsWRWlGSWpSXmKPExsVyU6aHU7dwqni 4wZYbChZzzrewWKycwmJxedccNovZS/pZLK4+KLc4tkDMYv8VLwd2j29fJ7F4bFl5k8nj+I3t TB6fN8kFsESxZuYl5VcksGbcOryEpeCPeMXZnSdZGhj7RLoYuTiEBDYwStzr6mbrYuTkYBMwk 9j1ah07iC0iICNxtH8BG0gRs8AlRol5s7tZQBLCAiESO3b1sILYLAKqEu8vXAezeQX8JBo/X2 fqYuTgkBCQk1hwIR0kzCngL7Hp+UpmEFsIqGTTlUY2iHJBiZMzn4CNZBaQkDj44gVUjbbE8j1 9YDdICChIzF61gQnCTpE4tHwZVNxaou3vB/YJjAKzkIyahWTUAkamVYwaxalFZalFuoZGeklF mekZJbmJmTm6hoYmermpxcWJ6ak5iUnFesn5uZsYgWHNAAQ7GM9Ocz7EKMnBpCTK+6ZJPFyIL yk/pTIjsTgjvqg0J7X4EKMMB4eSBO/XyUA5waLU9NSKtMwcYITBpCU4eJREeJWmAKV5iwsSc4 sz0yFSpxgVpcR51UESAiCJjNI8uDZYVF9ilJUS5mUEOkSIpyC1KDezBFX+FaM4B6OSMO9LkO0 8mXklcNNfAS1mAlrMf1cUZHFJIkJKqoGx2y/O7FKD5KZnMXfN1kiJH30YFvTM51WPjY21Qk30 oe3/pPo7ZZ8c3KMYkHAkSbX10DMnp5CVru9zolalCJQcd1BdtPn94m1rnjhnzz6yxKbLZ6t4/ zXu+D+rcm+W/LTcL3DfUac5vLlMwf1G0aEb/6zuH7My3LG4gsnrdRWf9fSn8381f2FQYinOSD TUYi4qTgQAQ8mKj+UCAAA= X-Env-Sender: andrew.goodbody@cambrionix.com X-Msg-Ref: server-4.tower-92.messagelabs.com!1461163377!27755875!1 X-Originating-IP: [217.28.140.9] X-StarScan-Received: X-StarScan-Version: 8.28; banners=-,-,- X-VirusChecked: Checked Received: (qmail 30851 invoked from network); 20 Apr 2016 14:42:57 -0000 Received: from smtp.hs20.net (HELO outlook.hs20.net) (217.28.140.9) by server-4.tower-92.messagelabs.com with AES256-SHA encrypted SMTP; 20 Apr 2016 14:42:57 -0000 Received: from cbrx-fw01.CBRX.LOCAL (46.17.166.30) by THHSTE15D2BE2.hs20.net (192.168.251.32) with Microsoft SMTP Server (TLS) id 15.0.1130.7; Wed, 20 Apr 2016 15:42:55 +0100 From: Andrew Goodbody To: CC: , , , , , , Andrew Goodbody Subject: [PATCH 1/1] Revert "Prevent NUll pointer dereference with two PHYs on cpsw" Date: Wed, 20 Apr 2016 15:42:29 +0100 Message-ID: <1461163349-24696-2-git-send-email-andrew.goodbody@cambrionix.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1461163349-24696-1-git-send-email-andrew.goodbody@cambrionix.com> References: <1461163349-24696-1-git-send-email-andrew.goodbody@cambrionix.com> MIME-Version: 1.0 X-Originating-IP: [46.17.166.30] X-ClientProxiedBy: SEHSTE15FE06.hs20.net (172.18.251.46) To THHSTE15D2BE2.hs20.net (192.168.251.32) X-EXCLAIMER-MD-CONFIG: 266e7a57-cddd-49fd-bdea-19bca6d40303 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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. Tested-by: Tony Lindgren --- 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;