From patchwork Fri Aug 18 00:02:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 802980 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="NuBT40CQ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xYNZh5GlXz9t3m for ; Fri, 18 Aug 2017 10:03:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932068AbdHRADG (ORCPT ); Thu, 17 Aug 2017 20:03:06 -0400 Received: from mail-cys01nam02on0064.outbound.protection.outlook.com ([104.47.37.64]:35392 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753342AbdHRADF (ORCPT ); Thu, 17 Aug 2017 20:03:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=UQnra5reaKbSDZBFlgYnsEkmr+P7jOqidA8Xa0O9d8o=; b=NuBT40CQj0vwdt/Ff9IWuEGJwzDtoioS322cMffrEa82SsNA/hquG6Syx3ILpPFS0lNL6o0j6u6Dbl+Bb1fBUijeCHEvPhxal49aObveCByravicXoiCdgoebldYFdIqMJCwn35uC3FPaAnyuLWe5yaQZHj7ZI2B/rBwx0+LdD0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Thomas.Lendacky@amd.com; Received: from tlendack-t1.amdoffice.net (165.204.77.1) by DM5PR12MB1148.namprd12.prod.outlook.com (10.168.236.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1362.18; Fri, 18 Aug 2017 00:03:03 +0000 From: Tom Lendacky Subject: [PATCH net-next v1 06/14] amd-xgbe: Add support to handle device renaming To: netdev@vger.kernel.org Cc: David Miller Date: Thu, 17 Aug 2017 19:02:58 -0500 Message-ID: <20170818000258.10005.86785.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170818000201.10005.36182.stgit@tlendack-t1.amdoffice.net> References: <20170818000201.10005.36182.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: MWHPR06CA0011.namprd06.prod.outlook.com (10.174.172.152) To DM5PR12MB1148.namprd12.prod.outlook.com (10.168.236.143) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: db1bf90c-1250-42cd-0ba8-08d4e5cc7f3f X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(48565401081)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DM5PR12MB1148; X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1148; 3:90xSxmpEe6WjLZQ+oEv94fGe8rIjGYheDccGejqTy/imNjN9FxTBfuH6s/xsHTRHwBG5byBFvJqe6mmpQxcCFZZlxeOAHTEs9369M3iv6xUJAiVjq69y4dbQtb4LBKOaG6DHlLZbsiN47NcNy/IAi8rPLHjfXMWahbD4kfP5oLtJMFx1bkUmi5l7DGoVd0GCdcQnJ3iPemf7IA8PUxVaN1wUsaVvaBEVwfRGxbIZ1bOBcJtAsobtqukeiAnvoeLj; 25:v06B7Gx20GlLxW+uyLjvFR16JzEPqt45u/MjWyq1qtBhYO4oT7/zYFLxR6QydSJenWl5gXNhBqg6sPslBNBXcwwsA8Dh7SHYU2FD5izkLl3ipLWoWNXvu+Xr2uYrd1Xr5NixJqA/c0HpmMsW1tF1tqSxrVaAUkxuETzgqrm8q/J7wWaDYswz5jFgcUQ8n/Ble5yK4JtvujU+tX2KiPMVOKMY9CTyU0KVGoRahhfckN5pLURC6WwJGew6Sv9odXGcBWzDp3iRTtX2F07l32AR5pIOUaZgFJl9eQBsr3vCpSV1NzpqzR4p2595C/NnejLysWhrBse1L+qKDD7PAuAQbg==; 31:WwhArsuCCe0hy2Jbeh5Pwyk0CV0ufsM4jYITHtghIiyoVyxLb6UUDKWHlVbrTxl+kYdGt7tGA4jWX6C34I39vl5ISK0SPxFO0XxVOyEiv/HaCFEZzo62YAshw1MzyeE0wXOP0Gm9X6QZZL1oIXlEhOW2oJ0uFknZawbNl9P/7pPaL+8jp+nsI38Afli5vSxzUEZFlBg/vlZkqgYmgv8Kal4gMjdvFv2q9z4bd7NqBe0= X-MS-TrafficTypeDiagnostic: DM5PR12MB1148: X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1148; 20:Ciyd0a8EU1mCs07l6XJ23oGXCk6n5spoZGLqanzLaeyhRNFwigYsfgNq8PPmEbFM9ca3APHuuCfdFWTF3YOnUvFIeIGawbo8c5kDLkaJKY+v/ZPT1SYkrzHuLJAJFGdG92MOPpeY6k7k+xtZAqYQfAR0ObjAAYPnriODvpE6TV5drkwKNBT4GODRN1A0Axh0HQdAPHa7JdWmI7FA6ik0Dlv2DUDNZ3tIYBAbCSA5k8ISG6iaFeWcDUkzjX6Yk+o0TiI2mTK1YC8R5ka36/mAk+VjvBc8eL8SCpTM7xPTlhpqzMXFRrlhpVInxOOrP7F0jecnZxN2oABVY5X/HMbM3qAEafS4ilCh2E834ZsT8SBq0nSVfg3ngEcCOeLC45pmHK6bhjR8jYY4szSmwTj/P7MJG2VrIsM6mePpFLSKlervzWAp+nGulcfY9W+ZpKazwH6k7Fx4VSaTZ8gZ7u8MVpVmiZ1Xp7HQ97pfC0oxOgmPbpsrMgCLk2xsAqCRLHnq; 4:X2SUmXzdzSbYZvDU56fJUVBno9oU6pE9nDUPvHbPhI4jaIF0zbReOlbgYwE9KHfY1HA79HwXHH9tO/7W7cdkeU2saf3WqvAKYpQMm8kRkavd4J0EqtINDQWPtCT9g3uU9mO+z0XxgzQ6PMtZxQRz06+MI6i7wSxYn50dL32G1orv91tF7CMf1503SiyG/VMqmWXWedtZ9747qsKdd8njLy5NqHfQbSYIODkgGsiD6Z4e7nrZTOFH6Mo7G3zvaq2Ob7lna4G4LpN/uAQHpuRSk5oSUnSJ9yyziAVMkxYmq80= X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(20161123562025)(20161123560025)(20161123555025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR12MB1148; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR12MB1148; X-Forefront-PRVS: 040359335D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(7370300001)(6009001)(199003)(189002)(66066001)(47776003)(6666003)(2906002)(6916009)(2950100002)(6506006)(55016002)(4326008)(110136004)(189998001)(69596002)(9686003)(53936002)(50466002)(478600001)(7350300001)(54356999)(76176999)(106356001)(83506001)(6116002)(101416001)(25786009)(103116003)(23676002)(68736007)(3846002)(1076002)(50986999)(105586002)(42186005)(5660300001)(86362001)(305945005)(2351001)(575784001)(7736002)(72206003)(33646002)(2361001)(4001350100001)(81156014)(81166006)(53416004)(97746001)(97736004)(8676002)(230700001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB1148; H:tlendack-t1.amdoffice.net; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTVQUjEyTUIxMTQ4OzIzOmQ3czRuVFZGZUNJT1dsa0pFTzNZYnFxOFFs?= =?utf-8?B?T2wzbmdPcVFuQWYyVnUwUUFIbUtQQjhSeE9ud0crcWlTZmZEZGRBYTY2SWd1?= =?utf-8?B?STU2aExSS0FWZTVNSXRSUXhHNWU4cDR5VURJeVhOQ1I4N05OYXk3WkNCTHcr?= =?utf-8?B?YkVDaVBKV2M4ZnBGaDdVR3k3M003M01RRks0SFdNRmt6Y3U4eHlWUitwc2Rq?= =?utf-8?B?WU5FYzlwVERSekF2czNHMFloUEZjTlR2cXF3NlFGd3hCTGZoVDRsNlJ3K1FD?= =?utf-8?B?SnVzaXhyajM5bU1XQy95bmZmMXhER0tvQVJrZnZ2NXdNVU02WXRyUzhNcTFz?= =?utf-8?B?TlhsSXhSM0kvakNzT3NzV0duWkdZUjdJNExxeXdjWWJPM09rZTc5bnczUks3?= =?utf-8?B?UHhxbFZGNXdiV1BKTVRScnc0ckp2d2ZBOVdBWGxENWJOL1V2aWxHeHg3MWlS?= =?utf-8?B?V3cwVlhZK0d1MkZ6T1VpVHJkVzUzV0pxMWp5RHdTWGJQNjN1RXJJUSt0V0kw?= =?utf-8?B?WHFzMVRrN0FNbDdVV0VNMG54eWkzMDlyUEZlNElmd3pJZ1g3WVh6THhsWUNk?= =?utf-8?B?Nk1UZklNeVdBMzhYaEc1YUFpZFpRK3BwcllqbXI0anRCSWsyVGtsaXlNRWVG?= =?utf-8?B?bUNFc1NqYmNHMkJYcldQTGZLZzl2UXhGZDhCN1dBdW5mZm1ZRkVOVW54Mmxu?= =?utf-8?B?Wnh4SThqRmxSWmtHK2k5cHNjRFlxTVFsY3JyZHJUbmZKSmkxT3NEWmZLSXZ1?= =?utf-8?B?cjZjeG5zbjdpMkhYcG9aYzlrMFJoR2pVdlpiZDJacktSK2NMNUJnYU9HMDh1?= =?utf-8?B?K0lEWDlZTUdFbmpMdDMzVytGeHBpUitVdmM1R1gvT1BwS2NYWjRtQ29MRXdm?= =?utf-8?B?N2xKRlhnZW9PQVlMaGtKSEdUelJ0WFI5SkloV05ZY1VYcmJPVGZvTGtEVE5s?= =?utf-8?B?OVJqcXdBbnFTZkY5d3ZwaDdGL3EyNUJkcWpmZWFZa1Rtb21teFo2c3AvVlYx?= =?utf-8?B?ZnU3bEtQa1BNSlJ6VkZXUVorUkxNUXB2UDFqZEhNaGwwb2xwdWVpODRWYU9N?= =?utf-8?B?b0pVZzhPYmlyMEtOdURub3czUUJURHNkRlZodk1pbTFMcWd5Ti84dlR1bllG?= =?utf-8?B?Y3FlK2Q1bUNXN2NlNFcyd0hWSFNQeVdZcmZkL1piL0JqbVpUS2dGbnhUSWR1?= =?utf-8?B?Q1hpUm01bnh4dVhkem5YSTNIN25mdzdNVU82ekNUVUQ5MklsVWVNZmJLcUpt?= =?utf-8?B?SW5xZnovb1ZOZVEvK1RyVHJpNVZ2RWwxeUVTa3VucTdXU2FDSzl0MngxTnNR?= =?utf-8?B?eDRpVnV6YjhTRk8ybTBNelN5RmM1RjVSWlpmOFBJdUxzSFprb2hwUnd4a2d3?= =?utf-8?B?MldEMnZCSXZodHFKN0JoQXB4STg1ZGpPYkVJa2FkNUV0OVhkY1NaNlpZbjBn?= =?utf-8?B?cXA2ajV1MFBTLzk1anFScGUzUlNka3R0bjJJeVU2TzN3eTFoK09yNDVUUGhB?= =?utf-8?B?TFFaNllnaGg0d2s0NTdSeUFuMHA1b3FaQk9tNDBPYkl4NkdXL3JiU21oY0Fa?= =?utf-8?B?bVNTMmVHcHVaQTJwalVaR21nTDhWaEwxWVBLTUJWOU8rU0kvbmp3K0s5UUZs?= =?utf-8?B?R2RtZmNXcDNHZW13Ym9PYng4NEwxYTZ1M3FqMmpVdUhiS3A3YzhGL3hSMjd2?= =?utf-8?B?dG50bVMwREJqOTRwSDZ0SnZ3bDU4QVlwWU01Z2p4bWg4VGkva2NmWjBlaGtJ?= =?utf-8?B?L3d3SWVvc01YTm11TWlrQT09?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1148; 6:xTEzjAbZ3brYSTyEwxIahl/b2OleL1o8MxLE/QcmGYN/eGB8RpJT1NGRaec61YaHT7/1urY/xvJNjASKeB6xGuv3gp0Wu7+PtkQvdcR/0ZWeugrB1KebK1Obbf5eEhgTdNwCGwUvAzezKCb71z1HztG1b8ejH85uBsyNvD8KsEDextPjQgVVQOCcleCDsxi7WVj7Ha0gRsnrgzgjV/7UUKKtNRd4D04fKNMZnCjbcz9nGo/+09Jl53NgEAbDnif0GJcJGU5YFHC99Q7+q8PW9tRY5/PTfpqEp2o25fzDdp3foVfMSPBEsvl8t7ma3Pyq5IInXBLWp4lR4MdDUPyMmQ==; 5:qaZDmxxJlCk49UTSWWQNwqilMp8EtcKUnTYt0tandEJNelMdw8oN08MyR5pR7tKpAhLjiunpngCCZe2/JFUm/FMDiU1yIO46FDm7xKxCUz6nQW6ykG2T4/POtkWo6yFxzbqxBTjLKYFK17hnXuCrtA==; 24:gqRfAsJKSevTu1jVj4KJjmfvgeKWEw/ng5C3+5LhiTF+Bmw+FgwyIWoAK06faPqoy+emFyOfAAgMEsKk54qlmz/GzjyQpxDx5q7Rgwv85jI=; 7:cp34vk//qkWJWj+Yf1dJ/XXTh5SjrVRPY5+uz6GN+1TjDG+nV2ahPJhT9F1Hx/xH0UPMThhvK+RZ8bLb7WB0paldGpqXHi83/eVCSiSeB8hxTfHOzM063x/0eB3VftHWN1hys0P1PFZZYSGUaIWoimXVkUp3dOwTs61Y6BUS73dGSZjeXbMpA04MhxQz6M1xtyUrKvNDFKM/k26REULujywbmVE6L/Jb8XPEGIocWbE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1148; 20:VbjILYQKLjlsn35Ci0NORSBwarWFpt0DOxhfz02S5m+9tyy79u51EmuzL4ftyW4fEX8Y3WxL4qYomRux3oShhdODayEXRqnDalcw3/wEoHje7wgjV0YRVq6fafFvHE8IoT+h3VZl/1xmjO8U6ZLM1ftgyRnadYdMZ/3HMb3t+rF2DIfuJEaTPWRXyyoOfAI58Mi/cjEHVp/hnsCdlCiXVMxqsd7BburEuv4LwC8O3O6iGMAwl4qoLBYLwdI595va X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2017 00:03:03.2634 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1148 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Many of the names used by the driver are based upon the name of the device found during device probe. Move the formatting of the names into the device open function so that any renaming that occurs before the device is brought up will be accounted for. This also means moving the creation of some named workqueues into the device open path. Add support to register for net events so that if a device is renamed the corresponding debugfs directory can be renamed. Signed-off-by: Tom Lendacky --- drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c | 25 +++++++++ drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 44 +++++++++++++++- drivers/net/ethernet/amd/xgbe/xgbe-main.c | 72 +++++++++++--------------- drivers/net/ethernet/amd/xgbe/xgbe.h | 5 +- 4 files changed, 100 insertions(+), 46 deletions(-) diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c index 7409705..e79a0bd 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c @@ -678,3 +678,28 @@ void xgbe_debugfs_exit(struct xgbe_prv_data *pdata) debugfs_remove_recursive(pdata->xgbe_debugfs); pdata->xgbe_debugfs = NULL; } + +void xgbe_debugfs_rename(struct xgbe_prv_data *pdata) +{ + struct dentry *pfile; + char *buf; + + if (!pdata->xgbe_debugfs) + return; + + buf = kasprintf(GFP_KERNEL, "amd-xgbe-%s", pdata->netdev->name); + if (!buf) + return; + + if (!strcmp(pdata->xgbe_debugfs->d_name.name, buf)) + goto out; + + pfile = debugfs_rename(pdata->xgbe_debugfs->d_parent, + pdata->xgbe_debugfs, + pdata->xgbe_debugfs->d_parent, buf); + if (!pfile) + netdev_err(pdata->netdev, "debugfs_rename failed\n"); + +out: + kfree(buf); +} diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c index 2fd9b80..d6d29d8 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c @@ -887,7 +887,7 @@ static int xgbe_request_irqs(struct xgbe_prv_data *pdata) (unsigned long)pdata); ret = devm_request_irq(pdata->dev, pdata->dev_irq, xgbe_isr, 0, - netdev->name, pdata); + netdev_name(netdev), pdata); if (ret) { netdev_alert(netdev, "error requesting irq %d\n", pdata->dev_irq); @@ -1589,16 +1589,42 @@ static int xgbe_open(struct net_device *netdev) DBGPR("-->xgbe_open\n"); + /* Create the various names based on netdev name */ + snprintf(pdata->an_name, sizeof(pdata->an_name) - 1, "%s-pcs", + netdev_name(netdev)); + + snprintf(pdata->ecc_name, sizeof(pdata->ecc_name) - 1, "%s-ecc", + netdev_name(netdev)); + + snprintf(pdata->i2c_name, sizeof(pdata->i2c_name) - 1, "%s-i2c", + netdev_name(netdev)); + + /* Create workqueues */ + pdata->dev_workqueue = + create_singlethread_workqueue(netdev_name(netdev)); + if (!pdata->dev_workqueue) { + netdev_err(netdev, "device workqueue creation failed\n"); + return -ENOMEM; + } + + pdata->an_workqueue = + create_singlethread_workqueue(pdata->an_name); + if (!pdata->an_workqueue) { + netdev_err(netdev, "phy workqueue creation failed\n"); + ret = -ENOMEM; + goto err_dev_wq; + } + /* Reset the phy settings */ ret = xgbe_phy_reset(pdata); if (ret) - return ret; + goto err_an_wq; /* Enable the clocks */ ret = clk_prepare_enable(pdata->sysclk); if (ret) { netdev_alert(netdev, "dma clk_prepare_enable failed\n"); - return ret; + goto err_an_wq; } ret = clk_prepare_enable(pdata->ptpclk); @@ -1651,6 +1677,12 @@ static int xgbe_open(struct net_device *netdev) err_sysclk: clk_disable_unprepare(pdata->sysclk); +err_an_wq: + destroy_workqueue(pdata->an_workqueue); + +err_dev_wq: + destroy_workqueue(pdata->dev_workqueue); + return ret; } @@ -1674,6 +1706,12 @@ static int xgbe_close(struct net_device *netdev) clk_disable_unprepare(pdata->ptpclk); clk_disable_unprepare(pdata->sysclk); + flush_workqueue(pdata->an_workqueue); + destroy_workqueue(pdata->an_workqueue); + + flush_workqueue(pdata->dev_workqueue); + destroy_workqueue(pdata->dev_workqueue); + set_bit(XGBE_DOWN, &pdata->dev_state); DBGPR("<--xgbe_close\n"); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c index 53a425c..c5ff385 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c @@ -120,6 +120,7 @@ #include #include #include +#include #include "xgbe.h" #include "xgbe-common.h" @@ -399,35 +400,6 @@ int xgbe_config_netdev(struct xgbe_prv_data *pdata) return ret; } - /* Create the PHY/ANEG name based on netdev name */ - snprintf(pdata->an_name, sizeof(pdata->an_name) - 1, "%s-pcs", - netdev_name(netdev)); - - /* Create the ECC name based on netdev name */ - snprintf(pdata->ecc_name, sizeof(pdata->ecc_name) - 1, "%s-ecc", - netdev_name(netdev)); - - /* Create the I2C name based on netdev name */ - snprintf(pdata->i2c_name, sizeof(pdata->i2c_name) - 1, "%s-i2c", - netdev_name(netdev)); - - /* Create workqueues */ - pdata->dev_workqueue = - create_singlethread_workqueue(netdev_name(netdev)); - if (!pdata->dev_workqueue) { - netdev_err(netdev, "device workqueue creation failed\n"); - ret = -ENOMEM; - goto err_netdev; - } - - pdata->an_workqueue = - create_singlethread_workqueue(pdata->an_name); - if (!pdata->an_workqueue) { - netdev_err(netdev, "phy workqueue creation failed\n"); - ret = -ENOMEM; - goto err_wq; - } - if (IS_REACHABLE(CONFIG_PTP_1588_CLOCK)) xgbe_ptp_register(pdata); @@ -439,14 +411,6 @@ int xgbe_config_netdev(struct xgbe_prv_data *pdata) pdata->rx_ring_count); return 0; - -err_wq: - destroy_workqueue(pdata->dev_workqueue); - -err_netdev: - unregister_netdev(netdev); - - return ret; } void xgbe_deconfig_netdev(struct xgbe_prv_data *pdata) @@ -461,18 +425,42 @@ void xgbe_deconfig_netdev(struct xgbe_prv_data *pdata) unregister_netdev(netdev); pdata->phy_if.phy_exit(pdata); +} - flush_workqueue(pdata->an_workqueue); - destroy_workqueue(pdata->an_workqueue); +static int xgbe_netdev_event(struct notifier_block *nb, unsigned long event, + void *data) +{ + struct net_device *netdev = netdev_notifier_info_to_dev(data); + struct xgbe_prv_data *pdata = netdev_priv(netdev); - flush_workqueue(pdata->dev_workqueue); - destroy_workqueue(pdata->dev_workqueue); + if (netdev->netdev_ops != xgbe_get_netdev_ops()) + goto out; + + switch (event) { + case NETDEV_CHANGENAME: + xgbe_debugfs_rename(pdata); + break; + + default: + break; + } + +out: + return NOTIFY_DONE; } +static struct notifier_block xgbe_netdev_notifier = { + .notifier_call = xgbe_netdev_event, +}; + static int __init xgbe_mod_init(void) { int ret; + ret = register_netdevice_notifier(&xgbe_netdev_notifier); + if (ret) + return ret; + ret = xgbe_platform_init(); if (ret) return ret; @@ -489,6 +477,8 @@ static void __exit xgbe_mod_exit(void) xgbe_pci_exit(); xgbe_platform_exit(); + + unregister_netdevice_notifier(&xgbe_netdev_notifier); } module_init(xgbe_mod_init); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h index 8a3fb9d..4932a44 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h @@ -130,6 +130,7 @@ #include #include #include +#include #define XGBE_DRV_NAME "amd-xgbe" #define XGBE_DRV_VERSION "1.0.3" @@ -1181,7 +1182,6 @@ struct xgbe_prv_data { struct tasklet_struct tasklet_i2c; struct tasklet_struct tasklet_an; -#ifdef CONFIG_DEBUG_FS struct dentry *xgbe_debugfs; unsigned int debugfs_xgmac_reg; @@ -1195,7 +1195,6 @@ struct xgbe_prv_data { unsigned int debugfs_phydev_mmd; unsigned int debugfs_phydev_reg; -#endif }; /* Function prototypes*/ @@ -1244,9 +1243,11 @@ void xgbe_dump_rx_desc(struct xgbe_prv_data *, struct xgbe_ring *, #ifdef CONFIG_DEBUG_FS void xgbe_debugfs_init(struct xgbe_prv_data *); void xgbe_debugfs_exit(struct xgbe_prv_data *); +void xgbe_debugfs_rename(struct xgbe_prv_data *pdata); #else static inline void xgbe_debugfs_init(struct xgbe_prv_data *pdata) {} static inline void xgbe_debugfs_exit(struct xgbe_prv_data *pdata) {} +static inline void xgbe_debugfs_rename(struct xgbe_prv_data *pdata) {} #endif /* CONFIG_DEBUG_FS */ /* NOTE: Uncomment for function trace log messages in KERNEL LOG */