From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755369AbcHSMt6 (ORCPT ); Fri, 19 Aug 2016 08:49:58 -0400 Received: from mail-dm3nam03on0050.outbound.protection.outlook.com ([104.47.41.50]:15496 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754558AbcHSMtq (ORCPT ); Fri, 19 Aug 2016 08:49:46 -0400 X-Greylist: delayed 33101 seconds by postgrey-1.27 at vger.kernel.org; Fri, 19 Aug 2016 08:48:46 EDT Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=xilinx.com; From: Kedareswara rao Appana To: , , , , CC: , , Subject: [PATCH 2/2] net: phy: Fix race conditions in the driver Date: Fri, 19 Aug 2016 18:18:11 +0530 Message-ID: <1471610891-13353-2-git-send-email-appanad@xilinx.com> X-Mailer: git-send-email 2.1.1 In-Reply-To: <1471610891-13353-1-git-send-email-appanad@xilinx.com> References: <1471610891-13353-1-git-send-email-appanad@xilinx.com> X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-22522.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.100;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(199003)(189002)(42186005)(106466001)(2950100001)(229853001)(356003)(48376002)(5001770100001)(305945005)(7846002)(92566002)(50466002)(8676002)(81156014)(81166006)(36756003)(8936002)(50226002)(36386004)(2906002)(90966002)(76176999)(50986999)(103686003)(33646002)(46386002)(11100500001)(45336002)(626004)(19580405001)(63266004)(87936001)(2201001)(586003)(5003940100001)(4326007)(47776003)(19580395003)(189998001)(52956003)(107986001)(5001870100001);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR02MB1713;H:xsj-pvapsmtpgw02;FPR:;SPF:Pass;PTR:xapps1.xilinx.com,unknown-60-100.xilinx.com;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;SN1NAM02FT053;1:cMQJT9M6F3CAR/3uhTAMvs3/cETeFQMpBntTI1Zlf0BIMKFg8cGN2vC5LCWbFT8AW9WTCguyh4z0v+A8F16K6UU1PFj91Hxa1zvjK+t9EiCT/sXhLdk4opx1MPkdrSx7PnQZMdTVLINDZ6WD2avFilgaxwEhY0H0konh5pMdWpa1ljM/Zt1WX3sZV7xu6g2Bgv0nG34S8alQMqAg3i/hE+tX8EPAVgT8m7i+WuDSwn9CWOE5guLW6JGVFH7vcnu3TR3TqaprGKRSwqUa3URVsCyL+PLpN8OswU8VSeyLYziASXMu/6nqq/DgmDvMvQshAvYtlG2VHG0DpsZxZ1zw8nBAgwHa57fYVwAX/LAWp7vX1Qm4MZoQIP24PiGsf7Vx66oZ/KrnHf2YZEOGrWEjfTdd/7O77idK/sqeijdsZEvIpKelBR2qvGuDwPR59L6IwcIVdHivHDrUxlk0jaVBtYTu+f+3dd0dnz6lRdJfRJmcnSmkLUaLS4tqZplVDq7kU+rNem4WnJrlveQDDDi7wFlbfFCusT+EMjrZ57c45VcfRQqiAp9CV13/6AOs/qvRYPVb0GKcObzkTrWvAXdA14jSyefJkGBrqsZ9L3qvmWk= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: b81b8007-1a78-4955-cc15-08d3c82f1db7 X-Microsoft-Exchange-Diagnostics: 1;BLUPR02MB1713;2:wLJ5WU5U/QSWAr1/SLzmidyLxB09humX94ZELbpTAWrlT8XoUtbIAp3yoalcgFnZxnajFs3Lm+gXVsxprolj93Ub7AUtdZATSOO7CX/hqdHyDlo0bHazrqNUHfqbCo7ongTLoHTGRyU4bzuvMpyJ8arf+TG4rdk3FCeskxY2PoldNzTD1hXn5hIyEdUcj2i+;3:DW7EMHoqxAuWPu607C8V9IdRvPej3pAXrGUJWwWitKaxhRUCVR035c8NcqVMYA1elLnMzJk4+/26H0U3NjcrgrqbqJTa42HnbB8RUNaMoHlZDFPvEdWYQkadzsEdG+lfJapBSCclE5EPq20hM0/Otqr32w0EAxdLH+eY4gAbXA+hUXVaHaTktI6EWT4ZI5fbmo996qX5tsieIsV8H3RObiUdpPMoqGDzwxrX+xayUugWlROdvuKyBkmbuKmQH0Ff8xa6/mhUaP+4huZ9uWporQ==;25:ZYX7iCzKEepMP+c6avdFlx7mkAfXfVJVg+hSoEkaI80JMA6aEqnwdcNzz47GIPrew/y8c1z+rp/gHba7DCwUXTv0/hq51IpJkwxCwhKnZvb5xhZBo7BO6jbsbu3p6KEZ8SGXhGI49vzBYs4njs7Cp9kLubnxvmoMJaxMcTkANScNyv2pfGc6uBTUdef8XtWMPowz5oUgjzt2Y7tftWrzkDAurJgglo/QCBH+cYLu8Cx5b/vG3VDUyydsSA4hOPVvzRen1rVgsP5SgHehkNB0mPwOMN93fRbL5eIxGVIbA5kl/WUEK684ZUsuvCStpQSPoiXbRXrhQ1CYvmSkEQOtjRl58lQzdXVuW9VEbr9rMnb/ONwatjBQigMFxovdY2L+0SX1vhHUkWpf6q7ZhX/wZ1TSJdZFD8gHUKVDEAlBeko= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:BLUPR02MB1713; X-Microsoft-Exchange-Diagnostics: 1;BLUPR02MB1713;31:bfrrNYWsHZxZaJ7yA0Ew7Y4jqroe/v1edSoKht4QqMiPOsNyevNyROz/iBVtvP/OMr2feBOO2Q4+jeUVwilEoNtQoerQT7sqQGMw1IV5JnYE64oS1aC/rDCWnEFWw8NMRbjqhyHa5nme/VHvq8B0BR2rf2aRIDbDuSRaeoYKmZa3j/9Hjx/Vm5DjaxKjoijDRSufmKaCNZapAIvHcdX/OKONVHyM7tEJVYicwMO2nlk=;20:PDjx34LRr0h6skykGsmBUwj0Ti/FIQ8E0PFEZuyprFY5vklG9rTWs4ulDeGEQrbu+2jtFlW4dDGf4Ecc41xvMi6uqma2B0fNhHx3lp6ok56D9u7BM1UBaP/UuUoWmhSwSzkyLzFVE1jbXJLQzcivw9Ulx8c9NJO+0n+V4yccrjtWZKlG7RNa9bgeLmGCNyVoeGCRa14noTh5jtNGesca7nmvpv+NVBs6CEj+bSvkU+PbKZ4L1FpUdIQLldTtXRZvO/Qvb4/CjSh8f4wBEZr6DnICjA05clcTHSvlL2JhnL6vTfXW+fIFMK+kX0LA0vEqbo/j4tp0ZSfabnXDY8MLoBAJAAe7MyEOUzZszzBNIlemACXCXa0Xml1+MHMiYiS4WyA1u3g25dZd6mbHK8ZV1TVU6Zi9RBil+JB13HwMaGuo+LDbI3wX7tgo2eVtdhNcqlOkBP+IE/mxROS6O4DfM0io1aqDGuiaMYE1lok4m9VGUJcL3Pce3WStAn8m+qVq X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(13018025)(13023025)(13024025)(13017025)(13015025)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:BLUPR02MB1713;BCL:0;PCL:0;RULEID:;SRVR:BLUPR02MB1713; X-Microsoft-Exchange-Diagnostics: 1;BLUPR02MB1713;4:HrL20WeFrbCu42Kp5eKyNMjyUjQ8Eo084eArYWpNThPJ5gyBzPMEqotExhBkbOLwI+t67bP8M5YZKgRpNWQngDxY0NkJxy3XzFx5lJuzjQ2FQQepZYTzxA95QZ3H0NwzybMvTdP4yArzlf6GZURyCW2hOI2NdBapHzCgXv3UR2J6rIaaEm4S7R4wLQZ4Dt0C6XDpf/gFm2PfV2kEsmMwlwF6nTypE87AjM2mIIJbXpdPk8RX6sbCivIhEC6PW5EcnhTNmKjJHaRcNf5wIGFg+usk+DqWKDaN1SWi7Zgeje6kHNH7euzf8yYudO5PDmQVUkaxEY8Fmf+Tn14TZYziQ0+MXg+oc/Pkt/PaDZym+keqLc38+AcbFCAIg7/vM/5wgna2rKVW4Vg5zl4YEGZ3id7v9f1Sl9Ss85lnHd2CsgSY22WoYE0jPcmuAvulzcxKIw0BU7nh6ixev9yBwZ7fTOVP09Wl0Mm9+amMySY5+t4Q3bR7Bmq16TR6rcXW+MGmteAOqysOJ+XOFz8vlds0zqv2vU36FH8MqFvb53zYTVA= X-Forefront-PRVS: 0039C6E5C5 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR02MB1713;23:jWZnsT5nnEo+cSQUn2hjAMNpr5F0V76tMGMqsDW/7?= =?us-ascii?Q?V3u1ci4tGTvX+xFDhC6346YEyKCOfERxKMZuQLWZcI27mtWuvLno+qoOWC3q?= =?us-ascii?Q?Xl4TTnYhmO7HAdPAXSebLdAsjxo8K/DO6tSmyW5CbWIBMoZ2O4BoME7mXNSY?= =?us-ascii?Q?6Ic4D2raMX0pwp84H598fb93t2icjsG49O9UGvlYxrYzk6WiMFhT/sqXv5xU?= =?us-ascii?Q?uC7mFUJ8ukdOO8RIhVMRLfLfq4hCgGX586dVB9Q0fz6bOkBuENtcx39wMkbB?= =?us-ascii?Q?OSws5Rwj4BOB+PEGa/ktTAJHU1BrOamcFqRR20NLc/2pRKOhux2zxu5cEx0u?= =?us-ascii?Q?0w8E2nKltAyCRmRdlq6eoKk8WjtqVhreY0ZWuZwc39ydvZgqNMn1HDFEIyZr?= =?us-ascii?Q?8alDHjY9rLamtLAwSZf22OvQg2K7yXuBx4DMzJV2qk2EbNlNKySxYKbksY/7?= =?us-ascii?Q?gKPPp+7EhnkPhdYYyCZuWqHboQ9WrdfMU2Qcm3AOzo8iUw4SsqvvyaFBvnM2?= =?us-ascii?Q?YGu1r+P8af7H3/UpP+gFz08gdyH4xXeZmBZScKLIGXzajjYf8aNOXyLl1eWg?= =?us-ascii?Q?YJ2uVfmWMNXKbG1iE0plZwIpFsZ0D1Cp+3ThVjgfsc+VI0OpIHWnRRCHFJxY?= =?us-ascii?Q?YaCGjfqEJy6p0ORqu/f+7wKVt9jm7SOLWUnLfWs5cCaAfM+ejvovvHMncY6X?= =?us-ascii?Q?yWcTFHqUMxOWzfpFh937nE9OciVDLpOIxK/20bM1h1Vi29lg0mcEODeF2wrt?= =?us-ascii?Q?JeU9UWMg1g+tyLIquFEXS00XUyZDb/egefLcHCBRIhuLzoSCZIp6qAOzwKww?= =?us-ascii?Q?qSD3kB1eDto7e8RQ3IcHPh900cOu5GAfSoVpWa2e/Wjnlb1ZQPhg6gQXw4/7?= =?us-ascii?Q?uw1N5hSfPP3eK0TWACUnkdXc3f1wW+zDtOPMfNfHrrgEULZCoWjNJDcsXgU4?= =?us-ascii?Q?QYzJWsGM3oPrxfuMbQ2zT4thIHAVcjRwI5tI1EqHb1tH25LQ7RKrWz2JYKpa?= =?us-ascii?Q?0KbVuoGc3UJAuRrqZHOXMGm8WmYzxQLfac+fTk+GHv9B3bSFYSi6VybjH3ag?= =?us-ascii?Q?K808nHJpMnpIi26bzVRMlXVzEsAAmWUcEV/pcMBHxPQLbq7hUMpsinhkPPBu?= =?us-ascii?Q?uQsVPt1e45XOpV58+iZFVCiucLvRqKC?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR02MB1713;6:4/4x+cxGqNv9cGejx8v2/AIa07WQ4QqfKwhxbjCRqMf/A2TZ+UcnznEqykxZ+MFAVUWscxsb/RDiH01tioxtD6vzm+fRJ8Dj4yQpgyzDslQkMW1a58dszreYnR6D8CfAur+eQfVFrjGy4CVrZwIFzExsmfcuLYIfAX8ThkDXbF8oKNRyiIcWN2vnxGwmN1ENh97eN9ygsmoXZBCwAE69vPV7dnAGmOlTyJ16uR9jSIgZE2/P4YR+uczI8XOvyC46y8o1WJ1uoSFUlzyfEjir7vaNYDXuwbOG84Ef57YIrMVUfy8qYdxb30/cV1AOTUogmaqR2sJOkWOMvfCs3PoOKQ==;5:A0c8zYEWXbNaAtW2X7HZPLDkBWS7NIXDW2xZeI30zK8WryKq0iih/Wj8l0Mg11TS8rQLp7emRkKu7S75apn7xDOsUIKhVpmXqszFDhy6npVng20VLwGEE4cLWwtytovrQAp6xbyWCZzPdeRYdxLmTw==;24:NTYdXiCgX682ep6BAusFKpyAEX38RhkLqb9VqESG1+qN2yQQ24bj9Ri5ctiLxJd6h7/ChWE6iqKBQI3tdb5mmrOzueZRon+rJjZDKZrJziQ=;7:7Np8xtdBlJuBvSUMZtiq6t4VYJVghjw0FzvJXlI8Lagz/WwrAPnl1PFDhku4LnhMLeITcOV4d8nE59dypPok/I4qdzHh2fhDrDLWlHx8xkmg4emSoXTSkp5E0FG03Tf0wIvPdldWECAhm9ibnX3H2CKKEndmnwnapfV8uMKRKyJ93VBDumMvHEgejuZENsanOJB4SofKoA81vaEhPtNvCkFTqEaLxuQY20kHqp9UgoE/s4yK3hjtVS9H+t/7jZju SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Aug 2016 12:48:27.4474 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.100];Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR02MB1713 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch fixes the below race conditions in the driver. ---> Fix Opps after unload the driver as a module ---> Use spin locks where relevant. ---> Take reference on the external phy to prevent issues when phy driver is unloaded. Reported-by: Andrew Lunn Signed-off-by: Kedareswara rao Appana --- drivers/net/phy/xilinx_gmii2rgmii.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/xilinx_gmii2rgmii.c b/drivers/net/phy/xilinx_gmii2rgmii.c index 7336fd0..cdd9d95 100644 --- a/drivers/net/phy/xilinx_gmii2rgmii.c +++ b/drivers/net/phy/xilinx_gmii2rgmii.c @@ -34,6 +34,7 @@ struct gmii2rgmii { struct phy_driver *phy_drv; struct phy_driver conv_phy_drv; int addr; + spinlock_t phy_lock; }; static int xgmiitorgmii_read_status(struct phy_device *phydev) @@ -55,7 +56,7 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev) val |= BMCR_SPEED1000; else if (phydev->speed == SPEED_100) val |= BMCR_SPEED100; - else + else if (phydev->speed == SPEED_10) val |= BMCR_SPEED10; err = mdiobus_write(phydev->mdio.bus, priv->addr, XILINX_GMII2RGMII_REG, @@ -71,6 +72,8 @@ int xgmiitorgmii_probe(struct mdio_device *mdiodev) struct device *dev = &mdiodev->dev; struct device_node *np = dev->of_node, *phy_node; struct gmii2rgmii *priv; + struct mii_bus *bus; + unsigned long flags; priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) @@ -88,17 +91,43 @@ int xgmiitorgmii_probe(struct mdio_device *mdiodev) return -EPROBE_DEFER; } + spin_lock_init(&priv->phy_lock); + + bus = priv->phy_dev->mdio.bus; + if (!try_module_get(bus->owner)) { + dev_err(dev, "failed to get the bus module\n"); + return -EIO; + } + + get_device(&priv->phy_dev->mdio.dev); + priv->addr = mdiodev->addr; priv->phy_drv = priv->phy_dev->drv; memcpy(&priv->conv_phy_drv, priv->phy_dev->drv, sizeof(struct phy_driver)); priv->conv_phy_drv.read_status = xgmiitorgmii_read_status; priv->phy_dev->priv = priv; + spin_lock_irqsave(&priv->phy_lock, flags); priv->phy_dev->drv = &priv->conv_phy_drv; + spin_unlock_irqrestore(&priv->phy_lock, flags); + + dev_set_drvdata(dev, priv); return 0; } +static void xgmiitorgmii_remove(struct mdio_device *mdiodev) +{ + struct gmii2rgmii *priv = dev_get_drvdata(&mdiodev->dev); + struct mii_bus *bus; + + bus = priv->phy_dev->mdio.bus; + + put_device(&priv->phy_dev->mdio.dev); + module_put(bus->owner); + phy_disconnect(priv->phy_dev); +} + static const struct of_device_id xgmiitorgmii_of_match[] = { { .compatible = "xlnx,gmii-to-rgmii-1.0" }, {}, @@ -107,6 +136,7 @@ MODULE_DEVICE_TABLE(of, xgmiitorgmii_of_match); static struct mdio_driver xgmiitorgmii_driver = { .probe = xgmiitorgmii_probe, + .remove = xgmiitorgmii_remove, .mdiodrv.driver = { .name = "xgmiitorgmii", .of_match_table = xgmiitorgmii_of_match, -- 2.1.2