From patchwork Wed Nov 1 23:19:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 833137 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=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="aPmEbtNy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yS41p5QVPz9s82 for ; Thu, 2 Nov 2017 10:19:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933537AbdKAXT4 (ORCPT ); Wed, 1 Nov 2017 19:19:56 -0400 Received: from mail-by2nam03on0070.outbound.protection.outlook.com ([104.47.42.70]:42050 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933449AbdKAXTy (ORCPT ); Wed, 1 Nov 2017 19:19:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=vITHKgSCUtU0qYvSxQHFmVsb4kRONPuI03hclRY6014=; b=aPmEbtNyYTgvXNLNXl5LQ/IbRL7+bYac6njZ9EXXRgQpfeBZkUtn7McWV3Kv+ID2mTPnHBbd4bjeswKEsSPK8x+0Q9A2y8FPRw6cCJ6QWULGqB6P7sB8NuQZ63t5ElP8XEL2EVcCUSwWDtZ7b6jqAh/RJS3Rm2Wy24YDbIWNiYY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.156) by BN6PR07MB3172.namprd07.prod.outlook.com (10.172.105.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.197.13; Wed, 1 Nov 2017 23:19:52 +0000 Date: Wed, 1 Nov 2017 16:19:49 -0700 From: Felix Manlunas To: davem@davemloft.net Cc: netdev@vger.kernel.org, raghu.vatsavayi@cavium.com, derek.chickles@cavium.com, satananda.burla@cavium.com, vijaya.guvva@cavium.com Subject: [PATCH net-next] liquidio: synchronize VF representor names with NIC firmware Message-ID: <20171101231949.GA21755@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: MWHPR1701CA0022.namprd17.prod.outlook.com (10.172.58.32) To BN6PR07MB3172.namprd07.prod.outlook.com (10.172.105.142) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4137bbe4-2dcc-4ffe-b65b-08d5217f0e32 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(2017052603199); SRVR:BN6PR07MB3172; X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 3:U8RT+144E5yGYvt3BzwHTQo45RoE4Sx6uhSNoUJYHfixeHjKiFV2tmQlUSrvNSNmS87jVzlz2ac2dXcuTgrWmCvu5zyLzvIHUIg8QowwP50xOtss3OQb7E2+xuO3RKlJwtWpQfukEf80wOjqlyOObxd04HakFH7V2VBPk9+ETY6wMaBvui07f6jrA/FZJQUI5WT33NNqz18ciQAThGKclrzYpoopMhNczsPuMJSoRdj+ciDidIqmKc/D8QzQEnex; 25:dOhJmrOp1mJN3kKwaBNaFik7QGohCzkIdsTeD1CYwslb+bTl4teIXuXc1bhgM9ypqmNpPrM8Q9OwW2iSQIAhN0LAHO3PK375/4o72zufbOYNMJ5H6EFyi/0cCMjXsITjq5WPh/olzP34Avaa4vjz21U2A7Ba8vK7dtNMfTc6CK0NK6GtiMo9rnT37JfALcfcFvurRD1JB0qiYVcS/otPjHCRUrCxbV6FgMvrYduna8o5l5E7fBoyK1AuNkmPX+Z/SWPQZrRjf1al0CKTyKbJfO9HAbRcfkFjz9SPGmnY9ULTeBrprakFVseNPmZHLDTycEwzsOZYOMqQI8k7F/+fiA==; 31:YAJjm7Jw9zf6SQI4kJ5LLcjB7E7mW1sXTEEZs4CLphnHKomTQARxBMkwJSwVfzKao/992M3zTL9+Nmmo4brEQf3aopJl3sVBeoA2zRPSIKR8Tiy4W97eIJuLU2L1MKRmHMsnMMjbsfWLkkYSZzCsO8ckPwRIUG8LAQHpHMA/xGPG20UWP6EaN5UBEez93NJpwpNqX5df5Kc41X9eDF/nPqjjogSb29IyVcNnevU+wJs= X-MS-TrafficTypeDiagnostic: BN6PR07MB3172: X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 20:KG4kpKbSVdZKXMhvE5Cj6Zlx6xVvfxtz8CUFBMNEtoFxloxvoto6eERadRvniKwK/2NyyXjn4YIlkQOLl5MTSaPdwV2Q50mPj0KSU9nhIpePUk/6RUtfKgsNGq0fkSDs6OIIojDycFRe4cLaV/Pir4T/JF/8D39dsg+yfIfhIHxNfbQ/z3ie9723No3NUI9gtafNUWkXAFGJvxkKPxh9vJ4jJZgujH+5hmfp8ekX4qpp7FP+PewIUtYFXhgXC+9JgVF+ulVwBiGbmOsCHcS2ke/evM0vLEPv4F1boGrIzty2T/jx7yHDo14dPCm9C/oH4ssUhh2zPi4btm9ZX/PzVuPxNB8805MP+WPArFGj7tiDf3dXLGPuyTxBPB+t/yimDc4BDBPdHMN5EdajB+JGdwI9d5B7j+OjuIL8DPBpJ7r4e1IIFvDqz5zSdd5CMTW3EyXDCFcJPPyLdpsuYiF5IheQOWPohBHEbuOrBAzydR6GpgaKjwkyw9+2JOsCX2qj; 4:0Eqfw+Paq7sC/WdnuGofcmOr7tuP98pcQhfnY1bf4+QyCN80BxEHLExT4OyFVLU1a/FMy91SlU0EDQt/CVol25k84iHnj4JBkBxZhA4pSeFZcCe6QLNM+/081SpV9vNLlhX5CIKnp2O1JaC75Ueq4zuKYSMfITbWWol0uq7syGo2BQYMU7AZotNRZ/t8BUVW+b+Hz1q4Pw51i1TrXB8E5w+XjKq+knrVUbiU88qWcHCExnchnTvNYqPa1yEEmWBrPjgEJhNuMafr6ogdtHu2oQ== X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3231020)(3002001)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(6041248)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123562025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BN6PR07MB3172; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BN6PR07MB3172; X-Forefront-PRVS: 0478C23FE0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6069001)(346002)(376002)(189002)(199003)(16526018)(97736004)(189998001)(83506002)(4326008)(86362001)(575784001)(101416001)(107886003)(6486002)(25786009)(72206003)(478600001)(54356999)(47776003)(50986999)(305945005)(66066001)(6496005)(53936002)(58126008)(81156014)(8676002)(81166006)(16586007)(7736002)(6916009)(6666003)(316002)(8936002)(1076002)(23726003)(3846002)(5660300001)(50466002)(2906002)(76506005)(33656002)(6116002)(68736007)(2361001)(2351001)(106356001)(105586002)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR07MB3172; H:localhost; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 23:Im/X0/qUmkpupGiwHggC+dWorkygWPuo6Q+m4kMreJCjqjRp7nDsNtnXK2sRmcXvC3SlJ/FkJQc++u/kCjMBQ9tes6DnMBPvqWyHxCqgzRfJegzN3s46GKdesgsoa71ylfW34njlru+9PSUJfk8WDbBme9fQ/7ZwSuti9AzFKgl4amXyZlztRIiLXmocCkX9asFrvT2LtuDpSqMBB0t6/QLyknCegxcpcM9MPGPs/0ivsNSTxldepzfnceRBZDTdQI1ejBhmRYlP5cVmaqUykadYk/fX+W2A8AkK/gNahcB05CcSI3s0Zohsp93uMH8HTPTp2N7+26BOx73zZQb08/bsnNLndaYqtCtTqhfKcLdeiCiSLk259mtj5T6pI0rykHvokS4upwF+7L1Us+XM2AARE9G/q1ZhwcYk0eezdhlRffUEEVdMTGec6IXuAsEgsJy91lqJTjYbWgTOgqQSIn+30PCajVd0CRY7jm0ACZye93+B/bKuNAz0frXqrO9U6lMtTT7GWKEM0b3H+ARMb6/pugsBlTYyd9yqafBpNsKE7IYRvC1mYvNF84MH98AHg1NZDS1YQT3rXyhiIFFkzVHK0hRpgx28jOcSR6/XjNzYt1a0+oMFdtnfiTMyyRrlISFcs/Vk5/5k6Y4jVVQwDYPY9AQTmNxrknMtAWzurQ+BohDzPIPyRhgHiIp5hFbh6az682C6bLWNxpw9HydcF+tmggMSmi3qwQtTwjhBZpm0ABVmlOpaeGgMbJq0E9+gqsujzdczTxkNqAEUu41aIOLiuFdlT5Fc5TbuS/JjLQ0ZKHpJGmGSppZQ/FSIyWZTU+nmI0k93loIEftokiubUQigpwP+NzSJZpr06lpUOh8AXUpVAItkqVxEa4cm5sKZw4gu3LvA/A8Q2fxk03H0D4t8ICRb8hO9i/DTRK2EK1aG41a7Ka4VLR1hbBdXki+MjQtA/8ua3OQHaUuHer7+NINd/dguI8FK9Qv7RAIPPaWEa2CfRCUi/J23WitANN5Bjrs+Uw+wAM0MvLfoOSGODzsBo6+a9jrlPD9q/yLuYypBASVoy0e5yH1v3GRoush8haErWvnVYH0SYIGEBrM4M6FK9Qwcb6vzauvOQ4X6ViZRY+/LCKwPKnkvpj9x8AsuFbgiExwWj85efj9dBumaXO4Kd6e8pTaPE5woeTSsgvk= X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB3172; 6:4hAuophvkggJWqxp+C5W8VWGUxppyysItTh9NewnQIVKl+J5L1TIVRyIF5FJ//CqHnCDTY4c3/JoKAjO7XH9SlHlD/5hUm0978xlXXOmpresNJuZA/naY0BZRAxqgOCygm47QTkNSKSihupUOwiZgERuFr3/vWTf/CI3e+mhuMJUJ/MtGf0AqIeO9bdkpw9wibQIKiSu6Fpi0GwrIal+xzRhbVjxfnfgSHfQ346rMV4sd9sJzePUIGn/4P3xQUAuB6SvUt7wI6patxoUW9ZuAdTz6wxqM5g7wdyrW5bxFkRlYx6SrS7y6ANgQh6zXL+G7LfNKgt/ZGZLg+LbF7mDF1RDiHPWPeec/x1lH7u78s4=; 5:0N1N0UdjlcsWQxsIZnCrucSjg1qsC4mbJ3Q/c+SiI2vr4SEKWwYorufAFKyLICXauwHb94KcvYpF7CrSYsG7b2NdeCkEwYBZx5msSJdSmaiG3zL7Y99hgo9MZlTUmWCfPsiaz/V7d7s0fK3nf778bgKL/TSXlhHn6pZEDcFzsfc=; 24:Hzqp8Tu9BTOVi6hsxxxUb613UAOcpaBnrz1lyJjJLZzKHfN41heStYuAZVYWCqfKh7J4ZkiYlKVob1B0qbeptZjEU1B9urzPx+17fyxM5fk=; 7:SX31kcOIHU8zgvTghnnw4EmQD+23fi/NBLrvSUD9+1eKBvrdHuICR54KAJ9cyepiK7rzrvQp74QRKlQBgIheg0WqiKD+mZyNAGbUha2GvjSRF/iW3Jhy/cnlAXtfIyyKlDRd8TnyYJ6v8EbbXFlKJmO1Snk9S0WARduV/5NRqS2Gy3muk/7DHmMjhq1Wf3FLsBTIJOgQyAlRKX5JRrOpwccig+/kOcP7bI6L+lehs/w4jFoWpcT95No/zWJ1hmsb SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Nov 2017 23:19:52.3685 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4137bbe4-2dcc-4ffe-b65b-08d5217f0e32 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR07MB3172 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vijaya Mohan Guvva LiquidIO firmware supports a vswitch that needs to know the names of the VF representors in the host to maintain compatibility for direct programming using external Openflow agents. So, for each VF representor, send its name to the firmware when it gets registered and when its name changes. Signed-off-by: Vijaya Mohan Guvva Signed-off-by: Raghu Vatsavayi Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_main.c | 15 +++++ drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c | 68 ++++++++++++++++++++++ drivers/net/ethernet/cavium/liquidio/lio_vf_rep.h | 2 + .../net/ethernet/cavium/liquidio/liquidio_common.h | 8 ++- 4 files changed, 92 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index f27f0af..f05045a 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -1639,6 +1639,10 @@ static void liquidio_remove(struct pci_dev *pdev) if (oct_dev->watchdog_task) kthread_stop(oct_dev->watchdog_task); + if (!oct_dev->octeon_id && + oct_dev->fw_info.app_cap_flags & LIQUIDIO_SWITCHDEV_CAP) + lio_vf_rep_modexit(); + if (oct_dev->app_mode && (oct_dev->app_mode == CVM_DRV_NIC_APP)) liquidio_stop_nic_module(oct_dev); @@ -4029,6 +4033,17 @@ static int liquidio_init_nic_module(struct octeon_device *oct) goto octnet_init_failure; } + /* Call vf_rep_modinit if the firmware is switchdev capable + * and do it from the first liquidio function probed. + */ + if (!oct->octeon_id && + oct->fw_info.app_cap_flags & LIQUIDIO_SWITCHDEV_CAP) { + if (lio_vf_rep_modinit()) { + liquidio_stop_nic_module(oct); + goto octnet_init_failure; + } + } + liquidio_ptp_init(oct); dev_dbg(&oct->pci_dev->dev, "Network interfaces ready\n"); diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c index de0c80d..2adafa3 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c @@ -625,3 +625,71 @@ static void lio_vf_rep_get_stats64(struct net_device *dev, oct->vf_rep_list.num_vfs = 0; } + +static int +lio_vf_rep_netdev_event(struct notifier_block *nb, + unsigned long event, void *ptr) +{ + struct net_device *ndev = netdev_notifier_info_to_dev(ptr); + struct lio_vf_rep_desc *vf_rep; + struct lio_vf_rep_req rep_cfg; + struct octeon_device *oct; + int ret; + + switch (event) { + case NETDEV_REGISTER: + case NETDEV_CHANGENAME: + break; + + default: + return NOTIFY_DONE; + } + + if (ndev->netdev_ops != &lio_vf_rep_ndev_ops) + return NOTIFY_DONE; + + vf_rep = netdev_priv(ndev); + oct = vf_rep->oct; + + if (strlen(ndev->name) > LIO_IF_NAME_SIZE) { + dev_err(&oct->pci_dev->dev, + "Device name change sync failed as the size is > %d\n", + LIO_IF_NAME_SIZE); + return NOTIFY_DONE; + } + + memset(&rep_cfg, 0, sizeof(rep_cfg)); + rep_cfg.req_type = LIO_VF_REP_REQ_DEVNAME; + rep_cfg.ifidx = vf_rep->ifidx; + strncpy(rep_cfg.rep_name.name, ndev->name, LIO_IF_NAME_SIZE); + + ret = lio_vf_rep_send_soft_command(oct, &rep_cfg, + sizeof(rep_cfg), NULL, 0); + if (ret) + dev_err(&oct->pci_dev->dev, + "vf_rep netdev name change failed with err %d\n", ret); + + return NOTIFY_DONE; +} + +static struct notifier_block lio_vf_rep_netdev_notifier = { + .notifier_call = lio_vf_rep_netdev_event, +}; + +int +lio_vf_rep_modinit(void) +{ + if (register_netdevice_notifier(&lio_vf_rep_netdev_notifier)) { + pr_err("netdev notifier registration failed\n"); + return -EFAULT; + } + + return 0; +} + +void +lio_vf_rep_modexit(void) +{ + if (unregister_netdevice_notifier(&lio_vf_rep_netdev_notifier)) + pr_err("netdev notifier unregister failed\n"); +} diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.h b/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.h index 5a9ec98..bb3cedc 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.h +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_rep.h @@ -44,4 +44,6 @@ struct lio_vf_rep_sc_ctx { int lio_vf_rep_create(struct octeon_device *oct); void lio_vf_rep_destroy(struct octeon_device *oct); +int lio_vf_rep_modinit(void); +void lio_vf_rep_modexit(void); #endif diff --git a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h index 441cc78..3bcdda8 100644 --- a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h +++ b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h @@ -928,7 +928,8 @@ enum lio_vf_rep_req_type { LIO_VF_REP_REQ_NONE, LIO_VF_REP_REQ_STATE, LIO_VF_REP_REQ_MTU, - LIO_VF_REP_REQ_STATS + LIO_VF_REP_REQ_STATS, + LIO_VF_REP_REQ_DEVNAME }; enum { @@ -936,12 +937,17 @@ enum { LIO_VF_REP_STATE_UP }; +#define LIO_IF_NAME_SIZE 16 struct lio_vf_rep_req { u8 req_type; u8 ifidx; u8 rsvd[6]; union { + struct lio_vf_rep_name { + char name[LIO_IF_NAME_SIZE]; + } rep_name; + struct lio_vf_rep_mtu { u32 mtu; u32 rsvd;