From patchwork Fri Mar 16 22:40:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 887192 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; 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="byJeOZtb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4030lZ3z24z9sSf for ; Sat, 17 Mar 2018 09:40:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751887AbeCPWkI (ORCPT ); Fri, 16 Mar 2018 18:40:08 -0400 Received: from mail-bn3nam01on0061.outbound.protection.outlook.com ([104.47.33.61]:31531 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750915AbeCPWkG (ORCPT ); Fri, 16 Mar 2018 18:40:06 -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=BoUZ/rKU02a5MDFlNuejrv51ZkdcABEmeYgX23RO/80=; b=byJeOZtbzXDPQnwtwx2zFSLyJ5Kw/mwtE7zeoRBRwUPH7Q+C5mE6O8nzyZ9dEo9A9lchabyNrcPSnI8fWWZ7z7GGi3uinMzoEsmN/nS5oEn/SpJKJtDamWivRXI+rCU8XDFbYtWyiYBPRKS8/u76WvV6GXB+2MP8NeKGw67Eqj8= Received: from localhost (50.233.148.156) by SN6PR07MB4223.namprd07.prod.outlook.com (2603:10b6:805:62::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.548.13; Fri, 16 Mar 2018 22:40:04 +0000 Date: Fri, 16 Mar 2018 15:40:02 -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, intiyaz.basha@cavium.com, felix.manlunas@cavium.com Subject: [PATCH net-next] liquidio: Added support for trusted VF Message-ID: <20180316224002.GA2507@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: BYAPR03CA0014.namprd03.prod.outlook.com (2603:10b6:a02:a8::27) To SN6PR07MB4223.namprd07.prod.outlook.com (2603:10b6:805:62::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 32d33b33-4f7e-4493-1393-08d58b8edc7e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:SN6PR07MB4223; X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4223; 3:LbGbzvRW+zG5pcMcwCwpPBli22d6nrh0/4A7VCr8244QNKqeUtHEmb1hPpBESlx3AOoEschw9DkpyGCJHElDXedPboYyY6pO101+MhRiP2vLTECEBEA7MUwwAUjM4Y/r3FhBQJpmrzBLonYmAtj2tDIsqOJQr2morLDUocrgkMbsi7sJNXMV0hjU9MNUnR6RRJeQxUDQZMNAVxIV2T3qlX1vcu/nAjVrEDxSlo1cH2mFGavO8JImXSdom5lQtT13; 25:vx5dNcgSk3y/mKf30vGYomiB9O8UnG+moGT65k289C3Ufeq5Y3/fLB2abuRwX8AfRV0TBceDEtZ0qGF3TjELF6nRfmHL/PSgf8T3CFhY5glOgaerqXgLoucOuVPAXn++hhg5wYrYUUGWTPSrEyzzNyzVlRW/hVbav5TA5YsQQwi3TYcJOF2LvhO875YCyYhaCt3vB/JFZrtt9r9wuAuuxrHgFP3/hE4jjVZEEAm6EksFybxUXTjKqN4zwawOfochz8DczcyDNK4Dr//SvcScHr0ykeqQc1jdyhiMrg8CDMalQ5YhbhrtmYDON6j6uhGTN69O7/SBvQNVwy1LE9czRQ==; 31:1oIzAMSCIhn4pU8yNQ82agQxXY/mrm6B5TDEv7ZZldyHK9qk6SW5pqaKojaXnhozsegDKqmB65IVP0XjV3ddmWBX136JFJaaPqMsk7EgFuBRoHdxA22LHEvpXtidpixBIgWNTUNTy6uGdizvSOxwxIv5O040S4BGktKMd25uWmpI/xNHcH884w9pwTuv+TBfmqcsUQhBw8J6XH/kCbEo6pYU/xAG25a9Bi5HHQXN+UM= X-MS-TrafficTypeDiagnostic: SN6PR07MB4223: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4223; 20:Yu4W2t0+vlpqpshxtcPxJHS45gqx2yPALtxWmfwLzPpdGjK+BwxYwGfLdTg+rJl7r2onBmhZFWlCe5pc594wtAyPOxsc0MNV6eaXhJSefSdxnwcNm7MczNxDOukBYLWMlva9SxqIO4C0ks0OLgAq/ubd3HfjTLYGYIzOhXeh/qRgPqvE5bIqpOQah18Oq5YLwzV2690UoZPv4BQS8YqoUWF4wqObURwjKbBjJ+jIrwhYoTF6MgSPLbQ9DssMOd6lIkCpgJUwPZiCgbrm3xYli5XdKE15CMXl9aUxJ3pAN407JSE4b/hYoaN+5CFm7ZMYIx3l0MSRl4CgqPkKDkfOl/g52X8kZGhbSFtznVC5hey5q+J+r2Ff8KVrOJl5wNuhf9nBQUhR1tZwGYsKUx6q0ONtF2kEz7kbNYotb8SOZc8sFya6WW3Ub7lRNBqFSSXEup3okRFrhVkpRRXcicN2RLob6fO8QMV002H5Pcdjj0V0fSnBvC7lWwyjl1raqbwv; 4:4YMyMd+YlekKyGMS3+pPBR3MHI5vIgjTE/lpUT9FEdF9uxqcYsPv5qyeIutc4RUAIrDfRk9RFk5a9TjWeLKcukk/l5qMldkVk0S9Urbb5XeUizZ0ZpcE28ZDSRdcUAQtI5SHjoPk+XMLrQvu48m/eCorRANa/s2lJOGX8n0w713ebvJa4V4A1uIu9NO2QTaX5zvT8YWFupK7PFNuq7EQYd9BGM0w/Ul1FGsPl2sXVYSzQP/eFlVR0tOVW+HFFFxGM5o2i2YcWzdBDBOqsk6wJg== 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)(3231221)(944501285)(52105095)(10201501046)(93006095)(93001095)(3002001)(6041310)(20161123560045)(20161123558120)(20161123564045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:SN6PR07MB4223; BCL:0; PCL:0; RULEID:; SRVR:SN6PR07MB4223; X-Forefront-PRVS: 0613912E23 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(39380400002)(39860400002)(366004)(346002)(376002)(396003)(189003)(199004)(106356001)(81166006)(52116002)(575784001)(86362001)(6496006)(53936002)(5660300001)(107886003)(386003)(25786009)(8936002)(6916009)(97736004)(66066001)(81156014)(26005)(47776003)(7736002)(33656002)(23726003)(6486002)(6116002)(2361001)(3846002)(76506005)(16586007)(1076002)(59450400001)(2351001)(105586002)(68736007)(478600001)(316002)(58126008)(4326008)(8676002)(16526019)(186003)(50466002)(2906002)(305945005)(72206003)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN6PR07MB4223; 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; SN6PR07MB4223; 23:Ke/Y/3EdMcrWdCumHYnWOPUo3ZTtHsZPcv9nsulzN52DhBCa74Z1p/oB7iIIwT2EoiIoVrr/kQNUNf3AH4VNIJQDWGsqpo+eCqm9mwrtiLDzcItHgbikCFCnzGSd/d/xzgY+HWNOn/yt3/jB1bUUEbD0iAQ+Qla/0hNY82LmZMzCNY/fqI5cb7vovG2pXqdfHscwNzPo0rMw+bPHNZoACDqsL7YCN1LAOqrJj1KTzlosXYSAlBy6VE67Zi0CiARBwdD1Fcq27h9heJbLC+LSx9lFSjkhiXLqTyQpLzxbYc9UIEwIJC0SO4B0awWPwZjHsKLuBMjEgqHaN1CDSyIk5tY3uMqg9skl/A4NeFpNzNZCibkawQPjeozIFWQ40iGcDXmNBgh/JdtsCnCdsI6eoYzlSS5DnCucfnLGvRlTkLLFSh190q5egTSE2IHVFeXLs5Lp0p+YRv5rL6BdNPfNAEozmPHR8tyq4hs+zdAmUgWrtG63cXM7Z96eFsl8hmrXFUI87P/DU7jfXmxBvvs4XxJDdKKzUyxKP+DJZmIwf52Ao4CoXv8g7w8G78DUfmcF1Zf73ZPV8LL9zkTgCmvJU3yyKlinAAUPLbl0G+BTVyj+DPeg8PEujeVDI3HtGRkXNBUyhmlGbqs3aaCdFxDDwHC4Gneu1SF0gunsJEYX+IlrjphIOkh8V0hoWy8v1nbEa844iiRTw1bYxnPuzfJN4TMoXM6pjqH2eIyDUasCHDBYoo/wK20LpXOldAFCYFNILIwPVgCtCFreONldpU5iIbJWrvtdUiI8icPO7X/doC6CVpStTBL5fczYleW1XZsnF2V/8echTspToMQU+TfkLA5RqNxOAixdaiiD98QAVoSQUPHVjw0vffzOEPXh5KVMJv4IUtgrCzeK4zlidn173AAObx0jy1SZd12vQamoPoh2I7TULHzpjZvQlm83R8+5oS+v+UMDai1Io1ewNmJKJ8bNHCNFD+j8TwSfjyG1xmmWCtD7WawS8K1aBoUyKaVHgiq0rvQABIEP7hDMVWCnWirJkCHlZBS5uzrIwV+Wy5xHFwYEZZzWiKM0VVwmSgAvO9rRyl7JGf4zvn9ZEzncYpYXYdaQRXiYhV3OrzzN3+M60tzBaRtWWz3E7Qxz7RImbJk7ybGUiinGZTP9sGdL+npk3bekqzj6eiZPDXN7nMgDKyyKOxyxpEok/b3PJ2qK X-Microsoft-Antispam-Message-Info: r4l6oN2wzmYu0b7lq3WPZsaX7n24lseNglG3YjE4kEMFnHPGh6E0O3AXxOkr2Tl5OeONM1jtAkTTNySho0FS2PCcId28ekJfa8J4PheHbnfDCicg+no135Ncu5tz4VrAoim5mx7w8v6re8FKqJX4KN4gJj8fKnHoY+2nLL5eslXisRfLzsf49VZZ4NAj97rl X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4223; 6:rWAw/FL3d5L05oHdG9ulUppSPlEGQ7ejCFj4c3UeLkTc1EixwJxEavvrMd0bKDRXCBpRunTLk1M65UFaWKw0FNmv4VpWX53F7Asqk1Cgim2BL6Mj+hTtriPIWVFQ+77JBYweGMR5wVT9eYbjQS0uapwWhU0ojPaVJi6Qx3M6ic+aBqyUCLOQzXsg6Cq1QuDCNXw4zmeGD7OmQR75c9AZ8BVnc7P1AV1s31wYPyZzvX9mCUG8LHMj5tIyYFHf2aW7xGVsQdVEzbg6spCJf3PXl33S7eUnN4/nhXt0qqZj3J8rLn7bn15QAqu7KPz3rhegHnqRQOzA/WqttbSfYMgoQ8L8JtayShkw5kx0IKOXif8=; 5:BYPQjlTttv+/H+0NFLxI3W5IcY9w7JH+gwxFEH+NzvYzxc07nGpS/7aVXNd58EZwWkr7fExke7dPvuewaY6ZyR/JirPLnlXzZAWi+mcB2ZXI8MSY03BG8xwT9Y3GviooUTv25aIklHTPCqMpuQ5pMAAqG9mp+ZkFY/42a3PNCdU=; 24:0R2CP19cJQ6uJ8e4iTgAehdoSfQ/hBrW1yXURrFkxGj/SPYH4IxrRdZcdjoNFESpgegcYHF38LZVYfLxHPiMlxm5/Vj1PJKKoebYUa06Nt8=; 7:ELylGcFCT6p3kcae6XKAYoneImwhlBBSs8BGVUNJgkFG2fXInJtfDzGe5wBF9kIkL4jMjPyAAUzLlmVitWFujtHXnXb2/ZaNQ+sjau5t0DSKIGjdvWgMPU6DGkYE0qWvNDG3XJiCxG1/S8JdaOR0+GS8KJoASwGanuPCBT9xT/X3cbZTR3QYugGCdwEDn8DgobB6Bup3PiG5+nx6SN44ayX1pkUembfO99E1DZr+98XaPD86B5nMepHTqgLuHBcX SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2018 22:40:04.2410 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 32d33b33-4f7e-4493-1393-08d58b8edc7e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR07MB4223 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 Acked-by: Satanand Burla Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_main.c | 125 +++++++++++++++++++++ .../net/ethernet/cavium/liquidio/liquidio_common.h | 7 ++ .../net/ethernet/cavium/liquidio/octeon_device.h | 2 + 3 files changed, 134 insertions(+) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index 140085b..c14b87a 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -91,6 +91,12 @@ static int octeon_console_debug_enabled(u32 console) */ #define LIO_SYNC_OCTEON_TIME_INTERVAL_MS 60000 +struct lio_trusted_vf_ctx { + wait_queue_head_t wc; + int cond; + int status; +}; + struct liquidio_rx_ctl_context { int octeon_id; @@ -3265,10 +3271,128 @@ 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; + WRITE_ONCE(ctx->cond, 1); + + /* This barrier is required to be sure that the response has + * been written fully before waking up the handler + */ + wmb(); + + wake_up_interruptible(&ctx->wc); +} + +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; + WRITE_ONCE(ctx->cond, 0); + init_waitqueue_head(&ctx->wc); + + 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 { + /* Sleep on a wait queue till the cond flag indicates that the + * response arrived or timed-out. + */ + if (sleep_cond(&ctx->wc, &ctx->cond) == -EINTR) + return -1; + + retval = ctx->status; + } + + 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 +3523,7 @@ static const struct net_device_ops lionetdevops = { .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 @@ union oct_nic_if_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];