From patchwork Thu Mar 22 06:30:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 889236 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="JSKxS+73"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 406Gyf6zfwz9s1l for ; Thu, 22 Mar 2018 17:31:06 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752204AbeCVGbE (ORCPT ); Thu, 22 Mar 2018 02:31:04 -0400 Received: from mail-by2nam03on0066.outbound.protection.outlook.com ([104.47.42.66]:26432 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752004AbeCVGbC (ORCPT ); Thu, 22 Mar 2018 02:31:02 -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=4AGyzY3nU+zPiqLdgn+o598Vrrlkz8OOwAH0dMWBgGs=; b=JSKxS+73++6Ne+7X2QIkLqApSsduSkNoJ68oNSp+Zb5vk66YvYqUUKEAkrXH2HgUgd96iYyGOIleD6J5ZdFufKaUqKGZYb4CckSGacv82eS5bPrNn9ikGsS5zOsE7tY1ITRV6Ge2SJofG58Wbt9VdZEdFgdAffD27mHX4io1/Ck= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.156) by BN7PR07MB4212.namprd07.prod.outlook.com (2603:10b6:406:b2::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.609.10; Thu, 22 Mar 2018 06:30:58 +0000 Date: Wed, 21 Mar 2018 23:30:54 -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, felix.manlunas@cavium.com, intiyaz.basha@cavium.com Subject: [PATCH V2 net-next] liquidio: Added support for trusted VF Message-ID: <20180322063054.GA5037@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: CO2PR04CA0088.namprd04.prod.outlook.com (2603:10b6:104:6::14) To BN7PR07MB4212.namprd07.prod.outlook.com (2603:10b6:406:b2::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 542cf29f-5a32-4927-9405-08d58fbe79b1 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:BN7PR07MB4212; X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4212; 3:N75LL88ptZVauU0+UVeVxosPOvGdWCrikC44as4jgVgVSp1RbjtiqI1vv0cUFHFrIm3eCgFz4hZuX3dUOgOgqBeqia0aINTuWaCiRHpNYbHy7gxnQyJgTf8TngI2PM5hoUQKND21fwei4L7waEtVGaUtptWh6GcvM2RFjwOYPzDE0mX8Xs1f7QFmeTekzEVZeegbz2SrGiiBxRCaDU97IDJttXwJJMLZvfoiJvH5ujN6B+ajgyvOmybZTeuXMxlG; 25:vh2zhjyaSMn1Xq3BRx8SHAnyvPfXzNjAAWoJCwHBlcEPaiDkGbNmbeOEbbgE7+lcX+u1THLBI3TZpVk5JEBbgXpQhS0eVm4Ij4ZL9oXJIu7H+jLDjeAWVH1JQgleErYboTM30mDLK1pjwCQByNzgs5308gBrkGFnjO4fxvyVat9nQJDTUkIU/PrNpexeIUYrkQLk9ihkV5uA3C3l0dQ2m61r+e+UIhBMfrTAodLYAE95ehjDcQE/v1B9/epAlkmcwPSJzPvSJRNUsruaDlPD7Kjz/2i/C/9yrOlWUc45X0il/YHQee9kNMzaYkEtIBAPPrGf3VoV2hbb7qzXNtYFFw==; 31:Z/tFZNfDLlkNqGE40aXMzJ9vuVffTz97cpXrJB3Ulb5lGfch+IkQt5sZ23o+/JANxaMmszHmky86OhmY5eoqIsI4gUGY5B/jlu0HYyD8uE9OTmvErtkOR/ObekD92mK9VjuiVLq2aapSv+ujEd65APV5oDll7uLQa75FCRtRUJOuSUOEuQHgg0epeMquOcYJKlwkikKdfewAqRsHLfiEltjZ07kkQF772+W3FxOQpTI= X-MS-TrafficTypeDiagnostic: BN7PR07MB4212: X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4212; 20:oihh4G0s+i31f+IreOI5jjx3U6gsYK7Fx6fu5MMJorbSHFUm3P7OtlTIZy2pJdJSkQxQpnvC9/o8Evfmfc2FzFvvuu2GtXghvSKmVVJDnzEGpV8Lf0ildwSkVZeo8XSb4Mh+Onls1O1lt/G/Mr9vERPA8UratCs7Y1LGhGbZ3EEGmaEKexVEK+S/VLbMhemQtMkz6Hy3fUibEVdWoLo57IHm/E8BPigFTjE0CpUhL+lF3pbxv37NplIOFjeEAnfz9ksGcwkglg/Nl0hkA4dNOBTYBAP81T3lXrAARhyE+UOz7tqfut/vlPgLSvEMF4P33/lq49Pu167+C5cgb4aec5I/W+gOGU8noA83afmXurfsCx/o6b7Tnkxv2srxFtk0BcKctdSGtdGy7g/WKNG0iTMJXzsXo0y39+4tfw8Oh9wsWCkg8mDqeAXBNqqwI790s5lL0KUGLGMfU3rVtLIa0Z2f+Co+TE09zCbcigXkl56evPei2dnk+bzUwYSflQaC; 4:GrVlB4vnwBDhUSYDUlrhuIGrDmxqtlUR5mrJ8npWrc8fmIk7akn/mvfAUVPcFL5lyOzK1yHYN9/GFfMQ0K5MIMh3jJmlRYQRw5N5POf0FBvQwLK3TXKv3+HxR4K1yePkvEgPR6h77iJmYIj/5TV8vMk7raiZ/jf+x4qXtc7AnAfOgI1c74k0AaNjrbnM5nlrKSiSLqBbVy+vF5rdTjzgDVpIPn8Cw2NxmW+cUJIspQOaQEkCKOfP40EQoBoYXiTJwZ0Tp6l9UcUszyQmHnqsZw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231221)(944501327)(52105095)(10201501046)(3002001)(6041310)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(6072148)(201708071742011); SRVR:BN7PR07MB4212; BCL:0; PCL:0; RULEID:; SRVR:BN7PR07MB4212; X-Forefront-PRVS: 0619D53754 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(396003)(39380400002)(346002)(39850400004)(366004)(376002)(54534003)(189003)(199004)(8936002)(186003)(72206003)(6666003)(81156014)(6916009)(81166006)(25786009)(86362001)(575784001)(53936002)(33656002)(50466002)(107886003)(47776003)(8676002)(5660300001)(7736002)(3846002)(23726003)(1076002)(4326008)(2906002)(2351001)(106356001)(2361001)(6486002)(59450400001)(52116002)(6496006)(76506005)(26005)(386003)(105586002)(305945005)(6116002)(66066001)(58126008)(97736004)(316002)(16586007)(16526019)(478600001)(68736007)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN7PR07MB4212; 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; BN7PR07MB4212; 23:ee+xxvObLdMwhcLMyWmYD7CwqcVura9e2niNtCd8zajuPDUuNYgZ+t0iXe19vhB2gZsmNZsI5sCbBQWpxj+9ijeI95lnsIIJ6GubdRe5QDg6J/L0V4Mzff9ZQp0ukTRUCNKADjd+O9PmgScY8tycxPW6B5I5dhJrCN+xOy54qLH9rRefi0cVpuKbWqNah7CdvKJwrUhSFT/kiebOSl3jLHXmOk462w6farrCcfVE5GZKYh/5M+EdkMnyXjyg3FzBtDPNFBhAtXPvy0D9evPQgjIJ+3p2v97tAq2TAB+NgUiBL+auMY4/jCteO//qojbl8Vn49uq262uDu3T3Y4cRkfX+Gpa4KCN8pCLoYerE5+4vKESz0Ww2+Tg9+jW55iKhhkXKkxf6wbypvAtu5o1NyXiB0sxovFVmDXmBMdtvKWsOY3sdOv2Gg6nR+8Gc/6LMI3XJnLJLevX4TUd8UaJz7WgLt2xLEQZ2x5YBFpVPGtc3baMt2mtkrxfDOnGmC2kzSmDwCQ10hHitPZyROHCeV0I4Lh+rbEl6DO+n+0+h/1ZsIrCoMb06qyPfpEieXBoCFoL0zLFre3HTyMUpAtzlJannrO5P0oL9Noi1yDylGtEKR6y06FVVo2Qv6enZ+YbQPf73au5uC/IpRKRWZW2gU8B50vGF8nt21spi+NGd3y0is1JtF3TxPkE9tu2l6DrCRL2I0bR+YOVpfLVlFZmnkaL2RcQeyGAtBLhvzsyd1zw0lWEKxs3C+dZlSXHDfgUYN8VJk3w174zvzf+INWI8m5NSTd+HCSiz1NoP+/eu4wT0t0dgW1rm3PKchdKw8e8lIeQZJMbb3MYc3cTgyqe7tHIIFjyzBuN1oEAE5tXyPkfsYR3NferR6HXwjc5RY9Zl/s3g5gqT+dYi1uqB8qdPr6PCpSaMXBjkdmiRZhlpJSMBGoE2gfiADNfda+VqI+IiiMD3eYLUJDruXllVWf6J33F6r5VLnrlJyfWImL4wK2X1c2IkQeR/SIZ+CyYoNBN6jAomeqByGavsqz5z2RGGL62NT5Jh46agq95PEECz3Gj8fZkwR2VWM3c7GyxA4fx/M5E9w9QpOa7F2kh2M8yGQIxguMIIcpf/785+OmON2ZwVfZALdN90hqeHC8tzwK9FI07CSSBazaskg3RvOvhDMWlnpz8HKir92TF9kvVG1LFpqS8WnjitECCeLn8EmNqzg6vRBp1/oioVJX3LUvQsLKM14Ry+PmHnToSSyv5tyZ0= X-Microsoft-Antispam-Message-Info: 8QQ/fSGsCmyQzpmy9FFcAKg8JwKExgHHdpTZqHkLDQ9U/GRIgausoaUgTKgX2+9WhJRQc2wrRShY4gaG2aA5UhICyECZOL/Ie/qx1FPVvdVsEQeWJs38aa1EI7IpFKI7BBwMz+jwGgV6K5jCA8palt2lhbpILouskhiR4cSKUrnyOEDFDY6i9JJ9zdaF3bSQ X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4212; 6:a1lnerV7CTBBp1I+Uc3jMk+2MUZabOzqMVk2puLJTT4HZ76cGisVHyN4x+ovFU8BV6yvgMpKPobwpFQVLuIDlGCmcZ45FFXXotKm7htn0Yddk/3b4eVlztENC82eqy2F09Pbhh6JAFJc+Y7YAhRYvWO4Tid1nUBzLiaR4X6JIJnt8NbBfeST7bO8m3jz3eaf62xsYFnwoF+ZWcxlhYkSKYTIQUjNkZ7TdDoSPaxJc2aMLK++CsaXBkeZTX0C+R3Q70YQ2qDXSsAnqSl/2At6Uy0VyERrGjtZASrW2Pqijmqkg1tFvgAoiw3CN5Yrk0pirFKOgWXc1kXLo2/OUUJRyok0gJk6IZrmxn8gN0XfJFtT6i3CxldGnhpbk4iPMn1igIopv9ivZKQePzjr/797I+8idAnPC7KUV93uJf/dwgI79Wiwkk2eiViv6ZnQ6LM9m2Kx2lpAiK5rZJvwkb179w==; 5:JxF7s4Lfgaaijwo3jozNjBkJShVc5R0hb2xLCcI3CmH0FlWcjUie+ZthsxUylrC76zCkrVLrzfrsdTwE8R6VzRVAaTtiuQbRu4axKitHm62YponuJm3Y0ahNjfrwxMEAMfm1w6Wqls7lJ8ebzaZbeLj/JxWszIdVu3L3ltRkj9M=; 24:5y/yu1ofomfC/f39J54Q/ivt8gZ9bDt6MkpWl4By4jA+n05tgrpYtbpfOCgwEUiDuXfoBawNKysNoeEjWYHyEVaKq0p/BBeI5fZ5U9NGYkU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4212; 7:NhxGE1zDkLypm9FoEGfo6H1hqnnmZjOC5iHJnmIrfR2ybx8KMHcBrsR6w0LHZvFCSoJ4m6wZY0OyKNgC2IMl0N8rL8fGroG6Nk0OZS3XjdyfFgrgT5LJL2DB/Bn/4fY3CjULI1TLWXYob08DOlNmnEe/ZCffOrQsY3LFB71BLXxEdryl4Xc2xt3SHH0OnXBWkK36uFkxLIlnNWSOlFLQSGdixltsxZ3ouTqJJa951OuKJu8TcqVJe4/FsAw7k2cy X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2018 06:30:58.9001 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 542cf29f-5a32-4927-9405-08d58fbe79b1 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR07MB4212 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Intiyaz Basha When a VF is trusted, all promiscuous traffic will only be sent to that VF. In normal operation promiscuous traffic is sent to the PF. There can be only one trusted VF per PF Signed-off-by: Intiyaz Basha Signed-off-by: Felix Manlunas --- Patch Change Log: V1 -> V2: Used completion in place of wait queue drivers/net/ethernet/cavium/liquidio/lio_main.c | 116 +++++++++++++++++++++ .../net/ethernet/cavium/liquidio/liquidio_common.h | 7 ++ .../net/ethernet/cavium/liquidio/octeon_device.h | 2 + 3 files changed, 125 insertions(+) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index 140085b..21280cb 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -91,6 +91,11 @@ static int octeon_console_debug_enabled(u32 console) */ #define LIO_SYNC_OCTEON_TIME_INTERVAL_MS 60000 +struct lio_trusted_vf_ctx { + struct completion complete; + int status; +}; + struct liquidio_rx_ctl_context { int octeon_id; @@ -3265,10 +3270,120 @@ static int liquidio_get_vf_config(struct net_device *netdev, int vfidx, ether_addr_copy(&ivi->mac[0], macaddr); ivi->vlan = oct->sriov_info.vf_vlantci[vfidx] & VLAN_VID_MASK; ivi->qos = oct->sriov_info.vf_vlantci[vfidx] >> VLAN_PRIO_SHIFT; + if (oct->sriov_info.trusted_vf.active && + oct->sriov_info.trusted_vf.id == vfidx) + ivi->trusted = true; + else + ivi->trusted = false; ivi->linkstate = oct->sriov_info.vf_linkstate[vfidx]; return 0; } +static void trusted_vf_callback(struct octeon_device *oct_dev, + u32 status, void *ptr) +{ + struct octeon_soft_command *sc = (struct octeon_soft_command *)ptr; + struct lio_trusted_vf_ctx *ctx; + + ctx = (struct lio_trusted_vf_ctx *)sc->ctxptr; + ctx->status = status; + + complete(&ctx->complete); +} + +static int liquidio_send_vf_trust_cmd(struct lio *lio, int vfidx, bool trusted) +{ + struct octeon_device *oct = lio->oct_dev; + struct lio_trusted_vf_ctx *ctx; + struct octeon_soft_command *sc; + int ctx_size, retval; + + ctx_size = sizeof(struct lio_trusted_vf_ctx); + sc = octeon_alloc_soft_command(oct, 0, 0, ctx_size); + + ctx = (struct lio_trusted_vf_ctx *)sc->ctxptr; + init_completion(&ctx->complete); + + sc->iq_no = lio->linfo.txpciq[0].s.q_no; + + /* vfidx is 0 based, but vf_num (param1) is 1 based */ + octeon_prepare_soft_command(oct, sc, OPCODE_NIC, + OPCODE_NIC_SET_TRUSTED_VF, 0, vfidx + 1, + trusted); + + sc->callback = trusted_vf_callback; + sc->callback_arg = sc; + sc->wait_time = 1000; + + retval = octeon_send_soft_command(oct, sc); + if (retval == IQ_SEND_FAILED) { + retval = -1; + } else { + /* Wait for response or timeout */ + if (wait_for_completion_timeout(&ctx->complete, + msecs_to_jiffies(2000))) + retval = ctx->status; + else + retval = -1; + } + + octeon_free_soft_command(oct, sc); + + return retval; +} + +static int liquidio_set_vf_trust(struct net_device *netdev, int vfidx, + bool setting) +{ + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct = lio->oct_dev; + + if (strcmp(oct->fw_info.liquidio_firmware_version, "1.7.1") < 0) { + /* trusted vf is not supported by firmware older than 1.7.1 */ + return -EOPNOTSUPP; + } + + if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) { + netif_info(lio, drv, lio->netdev, "Invalid vfidx %d\n", vfidx); + return -EINVAL; + } + + if (setting) { + /* Set */ + + if (oct->sriov_info.trusted_vf.active && + oct->sriov_info.trusted_vf.id == vfidx) + return 0; + + if (oct->sriov_info.trusted_vf.active) { + netif_info(lio, drv, lio->netdev, "More than one trusted VF is not allowed\n"); + return -EPERM; + } + } else { + /* Clear */ + + if (!oct->sriov_info.trusted_vf.active) + return 0; + } + + if (!liquidio_send_vf_trust_cmd(lio, vfidx, setting)) { + if (setting) { + oct->sriov_info.trusted_vf.id = vfidx; + oct->sriov_info.trusted_vf.active = true; + } else { + oct->sriov_info.trusted_vf.active = false; + } + + netif_info(lio, drv, lio->netdev, "VF %u is %strusted\n", vfidx, + setting ? "" : "not "); + } else { + netif_info(lio, drv, lio->netdev, "Failed to set VF trusted\n"); + return -1; + } + + return 0; +} + static int liquidio_set_vf_link_state(struct net_device *netdev, int vfidx, int linkstate) { @@ -3399,6 +3514,7 @@ static int liquidio_set_vf_link_state(struct net_device *netdev, int vfidx, .ndo_set_vf_mac = liquidio_set_vf_mac, .ndo_set_vf_vlan = liquidio_set_vf_vlan, .ndo_get_vf_config = liquidio_get_vf_config, + .ndo_set_vf_trust = liquidio_set_vf_trust, .ndo_set_vf_link_state = liquidio_set_vf_link_state, }; diff --git a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h index ecc1682..82a783d 100644 --- a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h +++ b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h @@ -84,6 +84,7 @@ enum octeon_tag_type { #define OPCODE_NIC_IF_CFG 0x09 #define OPCODE_NIC_VF_DRV_NOTICE 0x0A #define OPCODE_NIC_INTRMOD_PARAMS 0x0B +#define OPCODE_NIC_SET_TRUSTED_VF 0x13 #define OPCODE_NIC_SYNC_OCTEON_TIME 0x14 #define VF_DRV_LOADED 1 #define VF_DRV_REMOVED -1 @@ -918,6 +919,12 @@ struct oct_intrmod_cfg { } s; }; +struct lio_trusted_vf { + uint64_t active: 1; + uint64_t id : 8; + uint64_t reserved: 55; +}; + struct lio_time { s64 sec; /* seconds */ s64 nsec; /* nanoseconds */ diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.h b/drivers/net/ethernet/cavium/liquidio/octeon_device.h index 63b0c75..91937cc 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_device.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.h @@ -370,6 +370,8 @@ struct octeon_sriov_info { u32 sriov_enabled; + struct lio_trusted_vf trusted_vf; + /*lookup table that maps DPI ring number to VF pci_dev struct pointer*/ struct pci_dev *dpiring_to_vfpcidev_lut[MAX_POSSIBLE_VFS];