From patchwork Wed Mar 16 20:41:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 12783175 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BCA26C433EF for ; Wed, 16 Mar 2022 20:42:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352919AbiCPUnP (ORCPT ); Wed, 16 Mar 2022 16:43:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358003AbiCPUnN (ORCPT ); Wed, 16 Mar 2022 16:43:13 -0400 Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30072.outbound.protection.outlook.com [40.107.3.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DD7E46E4CE for ; Wed, 16 Mar 2022 13:41:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Nm7labUeEOc8CTlkzy7s5TCVMPL3cRKjwluRUajQ58W+en6gi9+7hpx/GsgvkvortpVmqqksr+yQMRojYY3yB0hWe1UvtCEjId2Ma66BDgX8uJz6p47i+v/FRwRMWONVdaQpXfDecH2bIQcydxtQ4UhgwLESLMwW52d5BPMQLfsbUXsRKVQZS05N7ieZJppIHfMhDbYBUjzAW5rMKLsVZ0Wen4RQ3FYFRAHJsO+qvWPy76QoBojQIjI1L3NUFETSDAgJNMDioinE0bsHPHp4aWOfmQ8qWkdjD4lPcQQHp3NX15B7dBlcq4HThK3Zr/w+HrVZikqz6KmQ0t0zV17AIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zSK4qY/h5RLh3AKzFZSGlvOmJIcy3i0pOk/MiHU2x0Y=; b=OUqIDvoMQSNrFCFPXlEN3SP4kZPX0ZErIyhYj4ar3oS92/NjmLvbvmJXX7fLGiZqYUIbSExhQ0T4dNW3rXNifnGjHPqIsPp/dWvynMFhdzR8WcKmMKI8lNk1PQOEpQF9JCClY2RikRYZdaPcB8JZoYOuKjWsqcdpYv1mQIfRk9gj30ChLrXfdUn0e8TIdSaqiC6as6ugytQPmoAxABWDP98uRHfM8/NmDwNsLPJyyMAPHiuG3sq7q27BUC3i7QC2LZ8wxK8DalQQdRyRxeGAcWe6SpjUWu9doRNSGNz3KsPMu7/ZYNf8HAN+IfubxsXrkOMYjR5rZ+LdPWqPaVlrgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zSK4qY/h5RLh3AKzFZSGlvOmJIcy3i0pOk/MiHU2x0Y=; b=CTdelRfVdYHa3Tpjh/p6FdmG4TwlNlt3s9yN8kH1mjZhrn+a9/RmEKFouVc7pGgKkaI0oRJh17Rw0Rl+nTuo4g2EWO2PLvBXtxS9HdDEVY8ONdOOQX3+Okigxyet9zmra6edLCmnn6Of1nfW/Ndhy5LG4rwiDwJQcw/czv2QJMw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) by AM9PR04MB8398.eurprd04.prod.outlook.com (2603:10a6:20b:3b7::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.15; Wed, 16 Mar 2022 20:41:54 +0000 Received: from AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f]) by AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f%6]) with mapi id 15.20.5081.015; Wed, 16 Mar 2022 20:41:54 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Jakub Kicinski , "David S. Miller" , Florian Fainelli , Andrew Lunn , Vivien Didelot , Vladimir Oltean , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com Subject: [PATCH net-next 1/6] net: mscc: ocelot: refactor policer work out of ocelot_setup_tc_cls_matchall Date: Wed, 16 Mar 2022 22:41:39 +0200 Message-Id: <20220316204144.2679277-2-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220316204144.2679277-1-vladimir.oltean@nxp.com> References: <20220316204144.2679277-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: AM6PR08CA0037.eurprd08.prod.outlook.com (2603:10a6:20b:c0::25) To AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c5948152-001b-499a-a803-08da078d6837 X-MS-TrafficTypeDiagnostic: AM9PR04MB8398:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Psn8WwAHKafLkKaflp26HR8HUGOr0WQH7uE1EoRwz1A1la8mps/1w8lHNMeq8wBESdlr+36xtyNJMG9wU+KeiKoQn4t3ZmwSzEh2/y9zXTzalDQRhpFvfh7IBOZqrtHWFP5VPCDtQbAnAxc7XI627/LXT45g2J0QYTDYMijruiNFr7JT74ZKJIDJtGjQOFS9QX8zn+risk2FIv9Ii3DUlOu1eA/l9bXrdw9byhtSYDuWVcyDZYzzd6KsxNugTGa0q3LJC43XCgv/mPQRvaVKnVBpzJxn4QN6jNZiSpQZbgh//gkDHs2/wjF4s41UKPrUmbu+1b6g7yRBeNPhiJQjI02X9cN2vHKWDPWKawV5Xi5tOfxKDRowhSbZCxcklXZdztWQcw19xnSg7E3zqCq7fI2bm+56x/fiC6R+LFI/vBh6xrq75WAHo/gMkgmHz7ZWOrEwZqwyc7LaaTVGXCrt4XIU2H8ix8zQ+6bkrbDQ1w01qugwTnLgcYWeuI5Vl0tdd3ABnj55SoHY+kfkRjXJ4mG343iRxLKtbpXCBviakkHX89WSCLa7KqrUSrP+qQV9jp+lm/oDaonwZBw+p1/K4BpwC9N8Pdfeg9cxmlrL5YdOgv4JWsBWx+nT2woUInYXBVgXjBR5uVJlrfWMZubVXJh9pkaxHDFRC22m1TZiBrZBwxgkgqdUw9nGOdGt6AHQOrGyN15w9iM23z49vk533A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5121.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(8936002)(2906002)(6916009)(54906003)(4326008)(6666004)(8676002)(26005)(186003)(86362001)(316002)(44832011)(36756003)(6486002)(38350700002)(66556008)(5660300002)(83380400001)(66946007)(66476007)(2616005)(6512007)(1076003)(508600001)(52116002)(38100700002)(6506007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XMdHWdtwPzcTr5VACXKi/bg5iqRjMfwOaoifiy5UDaH8/JcjnFsEy0SErrcAACuwnIIMiftgNsYEDCVdXMXLT0GQoshDoE9/9UMWpjiAgUr5m3fOWXahwAHUSeZTfwAaxLITQU7lCP9c/r/rSOIY/rMHhy+vx+zUxcYGsePIwsZc67c7sXboXpVnzKI62SE1u0yvk//Zm9oPi4rp4lFWPIZdAqIcVtYnWNhDmMGh7pnECgyCu19or/+JJVNWOaWtD/jjlNosVQnRaOVfMTHym3olmDhRP+ggoAwjjZoxhXfGhEYo5+i49S88Yl8Q1Kq09z9CUECPo9jkgVsLEOfDSE3sHq5VuRU2g+Z84ac4qYmzinyy6s6XnaIxdNCwjDKGRo8B6QrUL5keHPEgzA9qvQ1UzVa8vDJPcVaIcJkcuB4TQ2vSFU3SBWo57+RnVfjMg8oiaFffkjwWLP4hV5pHLU+zmzEyA+XzNft2S+nduBX7JQSdykC3MPvyxrFX0meXLl3DpQhOVeQY7rhn1GrxXEXh4SsuG0z8K0cUQFQBjgungFkDwfgR/1Uw3Xq/no7QfBB47+jN6vingqbHlrzxvRUVhuM6NZsbYw8aUwsbYTkuBuRW9ho5ITmTHjWaC39HfVL5jQkl8GrzMAfAIFiLNY4xHvCB6hrEVMSw/21Tyy5xKPetaM+/v5gi8ccAAXQv4WuX0ORSC6enOmNuwmZXAn9K3y0s+WVa1SAJDnT46xuUHTBx2bLoVqAI6c5UQ5dQO5EfTU1/SFXIbNtAel6tFun56gJ6q6ss/+VI0uh1g4Vwm18sIigUq7KNEii+ACUi/e3i/LKHEy4qNZYJiwDtEq7m1VEssOH1mjbUdHOa2REb/5y1vG5LRWJkizlh4bThzQlXwqJteLR8j/+QQ+QLE0R+NxIfjHN6YhBLik4LvdMordKJhqZJ+Fsr8MzelJ96DKahnY0XS8LFvhcxFbny+aby+TQKe1vJyFcYOE/EACw3inEtYCpWQ+s2BAPHE0PKfO3Yecm1F/nhcg8lof+5eXYFu5qzpUa0aLjhypGlhIVD5SWDSArXBiRei6wqbNU8D3p/Xepx7UfJ2syO7cf3gvyoe+I4uObgklvKMOH9QGAF+QkYhieqv9ESB3Pjxj4aY26MO6SylMOL1g3FSIJMaiwQ8t7btwnXYPxPimsYd6c8D2O2YpVfVZH0acHbPB1U5vLnI9gGlkasvT0kdQ/v1AkektkzQJkJ6wcl7TM45pUIUACsjBEJ7Zn1ip7w4jaqIfORARroOr5PCNYYVhvPhc66EIgEWrLn2S/EuwybvH2XNQa5NwvJC/+DOYCqTm2neY9AfYZcPZohxO6eVFz5ZdC0kl5zocupDBfYaM8k+qyrj+iAs3RksTn49NKtJ06FTGxGpP9FMRxIam+9g4x6ZQgs6B3eQW5KQaA7VJRbNNRNhR6pfV2qZy1IxBPNFp0IJQwqlA4HPAhHzTEkOzqfRw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c5948152-001b-499a-a803-08da078d6837 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5121.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2022 20:41:54.8794 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: G1oqikxTx8KnlS3Sftbq0gayeyLmSAz1OQo2rbSdK/tuyJl73kYQysGmTTo7fuUKytxEtiuP0Gd7uZvJpI0bwg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8398 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org In preparation for adding port mirroring support to the ocelot driver, the dispatching function ocelot_setup_tc_cls_matchall() must be free of action-specific code. Move port policer creation and deletion to separate functions. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/ocelot_net.c | 110 ++++++++++++++++--------- 1 file changed, 71 insertions(+), 39 deletions(-) diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/mscc/ocelot_net.c index 5767e38c0c5a..a95e2fbbb975 100644 --- a/drivers/net/ethernet/mscc/ocelot_net.c +++ b/drivers/net/ethernet/mscc/ocelot_net.c @@ -216,14 +216,14 @@ int ocelot_setup_tc_cls_flower(struct ocelot_port_private *priv, } } -static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, - struct tc_cls_matchall_offload *f, - bool ingress) +static int ocelot_setup_tc_cls_matchall_police(struct ocelot_port_private *priv, + struct tc_cls_matchall_offload *f, + bool ingress, + struct netlink_ext_ack *extack) { - struct netlink_ext_ack *extack = f->common.extack; + struct flow_action_entry *action = &f->rule->action.entries[0]; struct ocelot *ocelot = priv->port.ocelot; struct ocelot_policer pol = { 0 }; - struct flow_action_entry *action; int port = priv->chip_port; int err; @@ -232,6 +232,58 @@ static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, return -EOPNOTSUPP; } + if (priv->tc.police_id && priv->tc.police_id != f->cookie) { + NL_SET_ERR_MSG_MOD(extack, + "Only one policer per port is supported"); + return -EEXIST; + } + + err = ocelot_policer_validate(&f->rule->action, action, extack); + if (err) + return err; + + pol.rate = (u32)div_u64(action->police.rate_bytes_ps, 1000) * 8; + pol.burst = action->police.burst; + + err = ocelot_port_policer_add(ocelot, port, &pol); + if (err) { + NL_SET_ERR_MSG_MOD(extack, "Could not add policer"); + return err; + } + + priv->tc.police_id = f->cookie; + priv->tc.offload_cnt++; + + return 0; +} + +static int ocelot_del_tc_cls_matchall_police(struct ocelot_port_private *priv, + struct netlink_ext_ack *extack) +{ + struct ocelot *ocelot = priv->port.ocelot; + int port = priv->chip_port; + int err; + + err = ocelot_port_policer_del(ocelot, port); + if (err) { + NL_SET_ERR_MSG_MOD(extack, + "Could not delete policer"); + return err; + } + + priv->tc.police_id = 0; + priv->tc.offload_cnt--; + + return 0; +} + +static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, + struct tc_cls_matchall_offload *f, + bool ingress) +{ + struct netlink_ext_ack *extack = f->common.extack; + struct flow_action_entry *action; + switch (f->command) { case TC_CLSMATCHALL_REPLACE: if (!flow_offload_has_one_action(&f->rule->action)) { @@ -248,47 +300,27 @@ static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, action = &f->rule->action.entries[0]; - if (action->id != FLOW_ACTION_POLICE) { + switch (action->id) { + case FLOW_ACTION_POLICE: + return ocelot_setup_tc_cls_matchall_police(priv, f, + ingress, + extack); + break; + default: NL_SET_ERR_MSG_MOD(extack, "Unsupported action"); return -EOPNOTSUPP; } - if (priv->tc.police_id && priv->tc.police_id != f->cookie) { - NL_SET_ERR_MSG_MOD(extack, - "Only one policer per port is supported"); - return -EEXIST; - } - - err = ocelot_policer_validate(&f->rule->action, action, - extack); - if (err) - return err; - - pol.rate = (u32)div_u64(action->police.rate_bytes_ps, 1000) * 8; - pol.burst = action->police.burst; - - err = ocelot_port_policer_add(ocelot, port, &pol); - if (err) { - NL_SET_ERR_MSG_MOD(extack, "Could not add policer"); - return err; - } - - priv->tc.police_id = f->cookie; - priv->tc.offload_cnt++; - return 0; + break; case TC_CLSMATCHALL_DESTROY: - if (priv->tc.police_id != f->cookie) + action = &f->rule->action.entries[0]; + + if (f->cookie == priv->tc.police_id) + return ocelot_del_tc_cls_matchall_police(priv, extack); + else return -ENOENT; - err = ocelot_port_policer_del(ocelot, port); - if (err) { - NL_SET_ERR_MSG_MOD(extack, - "Could not delete policer"); - return err; - } - priv->tc.police_id = 0; - priv->tc.offload_cnt--; - return 0; + break; case TC_CLSMATCHALL_STATS: default: return -EOPNOTSUPP; From patchwork Wed Mar 16 20:41:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 12783176 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6A65C433F5 for ; Wed, 16 Mar 2022 20:42:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358044AbiCPUnW (ORCPT ); Wed, 16 Mar 2022 16:43:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1357969AbiCPUnO (ORCPT ); Wed, 16 Mar 2022 16:43:14 -0400 Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30072.outbound.protection.outlook.com [40.107.3.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5FC726E35E for ; Wed, 16 Mar 2022 13:41:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lwE8o2uhpmivNGsJjpJmuWEZTBnfcCrGQsIMUIFQSbOW00tfRf1J33hlDkYWa+sM/o/Cg8Pp2kDCHiypnYKkj03pV4HkXUuvhvAGPssfPdx52BmfvXaeVOTdF/7u+f9EQa4xwt9Rcbv+h2rSg6D6PF7ilbXKYPhKps1ljJk4Fvif2KoGclPksgf+v4kj9S/PsQqPz9JnBiJp7bs/oEYptfajygbT+OhOM8tVAcBYRubTjz5/GbC14v4zLwqGaV+w9QI3YrOl+/LyRdoTzS+xYWkasf/rr/KgkNjt9Q0YFvLdBDen4BfrcRDQzYA1B1ziFvdWOKfCDNlDOEZXltwflQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Zkg3r5gCL+Me9G1/cwyESYVVCIjnNPZ2VHBzIX0pcCM=; b=f6a3dhhUdxtXNsWXo6xW9mn9im1SHXcrVW4SSnxMxI0ZNpoxPcrksnjtvySWwE/IN3Nt5KXGMGenfWVrwuFRmHtMICI2WeSpkjQluQAi+MH6JLNnRXD82Zefp1y453IpM5B1PZtW1K0QQAqc2SwJB9VbNXjT39HtBmm5qsyucG7PprDYbNHvv6bXV0aS09icF3kLV5vQ8mHEp1tQ8nqeRhgFwFhC58eThowxjzTZ/14qGzEemc0m7OBICRJlnyqoZPVQz9T37gkv0UEp+WiXiO5H83pX1PlZLwvMFG8chawyk5sdn3xkGPLbq6wE73vQDxIgmx5Qrt2TwqyTWp4xoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zkg3r5gCL+Me9G1/cwyESYVVCIjnNPZ2VHBzIX0pcCM=; b=Wro5tGopSp/8/D9ilf1jVE3RkxIAsG+nD0a5ZHYNlQpDI9Mvm9yqYx/jEMIaQ01rzlIU5jsnAjQGnB8r/qc8/CAK5b6aSq2XQ0lz2Ltmz30NWV5kubGJnmwyjj4b1eA0tTyZKjjnp7SSnUo+w0dQ7BAu8PZpgZRnmswFU3MrAnY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) by AM9PR04MB8398.eurprd04.prod.outlook.com (2603:10a6:20b:3b7::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.15; Wed, 16 Mar 2022 20:41:55 +0000 Received: from AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f]) by AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f%6]) with mapi id 15.20.5081.015; Wed, 16 Mar 2022 20:41:55 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Jakub Kicinski , "David S. Miller" , Florian Fainelli , Andrew Lunn , Vivien Didelot , Vladimir Oltean , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com Subject: [PATCH net-next 2/6] net: mscc: ocelot: add port mirroring support using tc-matchall Date: Wed, 16 Mar 2022 22:41:40 +0200 Message-Id: <20220316204144.2679277-3-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220316204144.2679277-1-vladimir.oltean@nxp.com> References: <20220316204144.2679277-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: AM6PR08CA0037.eurprd08.prod.outlook.com (2603:10a6:20b:c0::25) To AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8ca1c419-b957-4900-0240-08da078d68b6 X-MS-TrafficTypeDiagnostic: AM9PR04MB8398:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DgcPAv9Hg6Owvl2N/SwSn4Z7rb/LxdCBOCnbRJGowu0fvyoS/HnBM2H///9BKVnxvIm+W98tikaJ5imehnjHJoA44SRg35gwxE+/4m6prT39POsUlvXVOk6/gP34W0cU0pQH3qD76ggRb1wraBkSQQac0oUO9Z8qO3YhAjC5B8K+j6vjmgMS0mze4B6qgTmKzphmzjVDbWNj/p5kP5A6USqUKVPe7hWbMDFsKa9sB95g8ir6XFOP4wtMz08ob+ZHu/80nMm+2vXME3VMX/lB/xmb7m1HVWS7xelRYOqFh8mgTuD9T3uVnUqrRSx5rHpCQ5segDVjJkGCXtDd5PHg/RBAdlfB5yADrU5BkIKKJFq5Emi8VkTTKG8oUalhtLt1XhaoqE6Qq3gmSti0zVITDRnvCT5M8ZmOesgcuAaItWLgIefqk0FdBe6Orohd1Sbjw6XOhxvmCl3GDw66ragW8VPsl0ZI5mRsz6WUd0rKrKSLYEixo5u0POud3nTMY6gKv7MSnkvPMWBFRB8k4L5ZQyeX4TzJq7MTa6X61FemAkzV7M9Q6V4pn92xgyaU8MIWNKLAVztwwyz+SVnBaJ+oz6Z6A3PglQXDVbPa9nZ4KH451bEJLHWXr8jlwMiTNFBHLbt9VIJYiSm6f6N91CnVnwYI0mDk4OWj3+kTIstCgyOgUfVX+gxTvc7V2xPmIF1VUIxozJjjkdP78QB8n1U6Pg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5121.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(8936002)(2906002)(6916009)(54906003)(4326008)(6666004)(8676002)(26005)(186003)(86362001)(316002)(44832011)(36756003)(6486002)(38350700002)(66556008)(5660300002)(83380400001)(66946007)(66476007)(2616005)(6512007)(1076003)(508600001)(52116002)(38100700002)(6506007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2q43ToYZsE/kbhT1fGKkO6i6Lnzf7YbNGBPYxngDy4tINyq31ZlSW2dajs0GLgAeueno5DK926lJMUF3c5a2bMUfZoAyx3fkwnUQtUhzBWTmDZb3cTVjVqvb4i96TN3sFFvqmYF8doUh7FRLsYvOz59Sml2Myexlfq6vkcvV2c/iY9ohY4ryfmzVp17MUlA16zMq87AXjqIWl03tdremSYs1c4KUYBYWe6N8fJT69Uk5iXuFaLkGwChqp7AgSqpdlfMJ7vytOfmBl3TEY1s/WDaFUg4NgjF6V+8wUqcu/Fl2HIGicgVUIPAh5IbpzKInVNyKtEDHhfmywkyLuuBfYBChFp5mlpCIL1K3Go8dBem37VyWLZsWecR1oAMAGuiI3oosWIokWUYbpS+D7T+JZpbSSdrFPY3Yq3qHQDM2x7RE2RH9/KQNYDfhPHyCK34K6ZmMA+25V3emjFo71mXUdR8y/6pvjJm8zK6IJ1of7rlHcz9l4yu6Pah/9eNbKXz8k4FGPnHHJ7wU7ba1OOi4k3RwJ+8kZE/3CklWtFLefrFPXsjnPx38Nclqsc7sl+/7P8Qf5kNo9xEAsCuo1Q/FtrEdO+Y3IoaF42Z8MYKEi+zaVedPKo0l8RgcaAN49uRUaRr7RSN47uMzGAtONs5VEATm5pugAU9ZDyhSzxZBb35UrP6b+V6QG+U2CiMTuqew3q1axDl3TAvlbJ0cf62NXlFSP/pWbSKVolkLjsTaLUPN0EtAThFJjaizUTmDFDGvFPDIV7OKn+c3b1IfL55dUDj4yR5B/90r4xzaoJU8/egBkT+ghFPs4OTL1qJuEqYTpo0Z76rU9685+LpdopVnz4jyKLyxuVRKILxehSCFL9NYXTOzWX4W5msAzn855z2a8FfO3NzW4C3QuP1SplPJ1QYmQpc0Y8GPcEV68PwpEeFe5RALCsonSR0EaeSz8G2IJo/SiWU9ALLltlkqy5oLEvx4LqDVsSFMsjyDSJWd9CHk3HifAu4TSSA1QiRZoCqv7UQjbfCadxY/USFNDgM1z4GwAR75bNj//SZIaVhuS90oMrHKF3ZSixalVSN5tXPs7IlCi5h8C7PWrfF4oy3Q6J0KzkroJ5Gqfe4VEH9mRIWjn877eAPZ67Woc7diLtCbiQFT95RByHZSbOAhDyktGfyJEIAMjaYxkhnc7mDAz9R7GAbgB97T8TVbos7QfrWXN1FYIyXScNBqnduxiLWVBtgaO8kRuozcWrR4MSlLAHWbyDaghyH1Fb4WP5un1Nvju1iN7jQT/U9EKdATzPCsSa9wr0ORvlhAaxftOo+YVRZBZWpR4bANf+k8RiFejEsRqE62CnQ75nOzC1N2QnMRvaGe3UkX1fP6JoGqt6zngbRMK9GWf1zsCP8BqM1uZx8Y6EHVBKDhnunTCJAAT/F51TpqbgC9vf+j0ku4AFc7FkPsDttQdCGMy+y1KviZEgJ06IZG9FR7uRe3LNX27ilgng== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ca1c419-b957-4900-0240-08da078d68b6 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5121.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2022 20:41:55.6763 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XenGyXoJlTpWMEftyXJDa3JRHieGA3PMX0tevGPK8QdWACPWDPvT53iBm/H2YjDR7R1Q6AejAXsRn9Vu9YbMQw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8398 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Ocelot switches perform port-based ingress mirroring if ANA:PORT:PORT_CFG field SRC_MIRROR_ENA is set, and egress mirroring if the port is in ANA:ANA:EMIRRORPORTS. Both ingress-mirrored and egress-mirrored frames are copied to the port mask from ANA:ANA:MIRRORPORTS. So the choice of limiting to a single mirror port via ocelot_mirror_get() and ocelot_mirror_put() may seem bizarre, but the hardware model doesn't map very well to the user space model. If the user wants to mirror the ingress of swp1 towards swp2 and the ingress of swp3 towards swp4, we'd have to program ANA:ANA:MIRRORPORTS with BIT(2) | BIT(4), and that would make swp1 be mirrored towards swp4 too, and swp3 towards swp2. But there are no tc-matchall rules to describe those actions. Now, we could offload a matchall rule with multiple mirred actions, one per desired mirror port, and force the user to stick to the multi-action rule format for subsequent matchall filters. But both DSA and ocelot have the flow_offload_has_one_action() check for the matchall offload, plus the fact that it will get cumbersome to cross-check matchall mirrors with flower mirrors (which will be added in the next patch). As a result, we limit the configuration to a single mirror port, with the possibility of lifting the restriction in the future. Frames injected from the CPU don't get egress-mirrored, since they are sent with the BYPASS bit in the injection frame header, and this bypasses the analyzer module (effectively also the mirroring logic). I don't know what to do/say about this. Functionality was tested with: tc qdisc add dev swp3 clsact tc filter add dev swp3 ingress \ matchall skip_sw \ action mirred egress mirror dev swp1 and pinging through swp3, while seeing that the ICMP replies are mirrored towards swp1. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/ocelot.c | 76 ++++++++++++++++++++++++++ drivers/net/ethernet/mscc/ocelot.h | 3 +- drivers/net/ethernet/mscc/ocelot_net.c | 73 ++++++++++++++++++++++++- include/soc/mscc/ocelot.h | 9 +++ 4 files changed, 159 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c index a26d613088ef..d38a9b498490 100644 --- a/drivers/net/ethernet/mscc/ocelot.c +++ b/drivers/net/ethernet/mscc/ocelot.c @@ -3023,6 +3023,82 @@ int ocelot_port_del_dscp_prio(struct ocelot *ocelot, int port, u8 dscp, u8 prio) } EXPORT_SYMBOL_GPL(ocelot_port_del_dscp_prio); +static struct ocelot_mirror *ocelot_mirror_get(struct ocelot *ocelot, int to, + struct netlink_ext_ack *extack) +{ + struct ocelot_mirror *m = ocelot->mirror; + + if (m) { + if (m->to != to) { + NL_SET_ERR_MSG_MOD(extack, + "Mirroring already configured towards different egress port"); + return ERR_PTR(-EBUSY); + } + + refcount_inc(&m->refcount); + return m; + } + + m = kzalloc(sizeof(*m), GFP_KERNEL); + if (!m) + return ERR_PTR(-ENOMEM); + + m->to = to; + refcount_set(&m->refcount, 1); + ocelot->mirror = m; + + /* Program the mirror port to hardware */ + ocelot_write(ocelot, BIT(to), ANA_MIRRORPORTS); + + return m; +} + +static void ocelot_mirror_put(struct ocelot *ocelot) +{ + struct ocelot_mirror *m = ocelot->mirror; + + if (!refcount_dec_and_test(&m->refcount)) + return; + + ocelot_write(ocelot, 0, ANA_MIRRORPORTS); + ocelot->mirror = NULL; + kfree(m); +} + +int ocelot_port_mirror_add(struct ocelot *ocelot, int from, int to, + bool ingress, struct netlink_ext_ack *extack) +{ + struct ocelot_mirror *m = ocelot_mirror_get(ocelot, to, extack); + + if (IS_ERR(m)) + return PTR_ERR(m); + + if (ingress) { + ocelot_rmw_gix(ocelot, ANA_PORT_PORT_CFG_SRC_MIRROR_ENA, + ANA_PORT_PORT_CFG_SRC_MIRROR_ENA, + ANA_PORT_PORT_CFG, from); + } else { + ocelot_rmw(ocelot, BIT(from), BIT(from), + ANA_EMIRRORPORTS); + } + + return 0; +} +EXPORT_SYMBOL_GPL(ocelot_port_mirror_add); + +void ocelot_port_mirror_del(struct ocelot *ocelot, int from, bool ingress) +{ + if (ingress) { + ocelot_rmw_gix(ocelot, 0, ANA_PORT_PORT_CFG_SRC_MIRROR_ENA, + ANA_PORT_PORT_CFG, from); + } else { + ocelot_rmw(ocelot, 0, BIT(from), ANA_EMIRRORPORTS); + } + + ocelot_mirror_put(ocelot); +} +EXPORT_SYMBOL_GPL(ocelot_port_mirror_del); + void ocelot_init_port(struct ocelot *ocelot, int port) { struct ocelot_port *ocelot_port = ocelot->ports[port]; diff --git a/drivers/net/ethernet/mscc/ocelot.h b/drivers/net/ethernet/mscc/ocelot.h index f8dc0d75eb5d..d5bd525e7ec2 100644 --- a/drivers/net/ethernet/mscc/ocelot.h +++ b/drivers/net/ethernet/mscc/ocelot.h @@ -38,7 +38,8 @@ struct ocelot_port_tc { bool block_shared; unsigned long offload_cnt; - + unsigned long ingress_mirred_id; + unsigned long egress_mirred_id; unsigned long police_id; }; diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/mscc/ocelot_net.c index a95e2fbbb975..247bc105bdd2 100644 --- a/drivers/net/ethernet/mscc/ocelot_net.c +++ b/drivers/net/ethernet/mscc/ocelot_net.c @@ -20,6 +20,8 @@ #define OCELOT_MAC_QUIRKS OCELOT_QUIRK_QSGMII_PORTS_MUST_BE_UP +static bool ocelot_netdevice_dev_check(const struct net_device *dev); + static struct ocelot *devlink_port_to_ocelot(struct devlink_port *dlp) { return devlink_priv(dlp->devlink); @@ -257,6 +259,49 @@ static int ocelot_setup_tc_cls_matchall_police(struct ocelot_port_private *priv, return 0; } +static int ocelot_setup_tc_cls_matchall_mirred(struct ocelot_port_private *priv, + struct tc_cls_matchall_offload *f, + bool ingress, + struct netlink_ext_ack *extack) +{ + struct flow_action *action = &f->rule->action; + struct ocelot *ocelot = priv->port.ocelot; + struct ocelot_port_private *other_priv; + const struct flow_action_entry *a; + int err; + + if (f->common.protocol != htons(ETH_P_ALL)) + return -EOPNOTSUPP; + + if (!flow_action_basic_hw_stats_check(action, extack)) + return -EOPNOTSUPP; + + a = &action->entries[0]; + if (!a->dev) + return -EINVAL; + + if (!ocelot_netdevice_dev_check(a->dev)) { + NL_SET_ERR_MSG_MOD(extack, + "Destination not an ocelot port"); + return -EOPNOTSUPP; + } + + other_priv = netdev_priv(a->dev); + + err = ocelot_port_mirror_add(ocelot, priv->chip_port, + other_priv->chip_port, ingress, extack); + if (err) + return err; + + if (ingress) + priv->tc.ingress_mirred_id = f->cookie; + else + priv->tc.egress_mirred_id = f->cookie; + priv->tc.offload_cnt++; + + return 0; +} + static int ocelot_del_tc_cls_matchall_police(struct ocelot_port_private *priv, struct netlink_ext_ack *extack) { @@ -277,6 +322,24 @@ static int ocelot_del_tc_cls_matchall_police(struct ocelot_port_private *priv, return 0; } +static int ocelot_del_tc_cls_matchall_mirred(struct ocelot_port_private *priv, + bool ingress, + struct netlink_ext_ack *extack) +{ + struct ocelot *ocelot = priv->port.ocelot; + int port = priv->chip_port; + + ocelot_port_mirror_del(ocelot, port, ingress); + + if (ingress) + priv->tc.ingress_mirred_id = 0; + else + priv->tc.egress_mirred_id = 0; + priv->tc.offload_cnt--; + + return 0; +} + static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, struct tc_cls_matchall_offload *f, bool ingress) @@ -294,7 +357,7 @@ static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, if (priv->tc.block_shared) { NL_SET_ERR_MSG_MOD(extack, - "Rate limit is not supported on shared blocks"); + "Matchall offloads not supported on shared blocks"); return -EOPNOTSUPP; } @@ -306,6 +369,10 @@ static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, ingress, extack); break; + case FLOW_ACTION_MIRRED: + return ocelot_setup_tc_cls_matchall_mirred(priv, f, + ingress, + extack); default: NL_SET_ERR_MSG_MOD(extack, "Unsupported action"); return -EOPNOTSUPP; @@ -317,6 +384,10 @@ static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, if (f->cookie == priv->tc.police_id) return ocelot_del_tc_cls_matchall_police(priv, extack); + else if (f->cookie == priv->tc.ingress_mirred_id || + f->cookie == priv->tc.egress_mirred_id) + return ocelot_del_tc_cls_matchall_mirred(priv, ingress, + extack); else return -ENOENT; diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 4d51e2a7120f..9b4e6c78d0f4 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -642,6 +642,11 @@ struct ocelot_lag_fdb { struct list_head list; }; +struct ocelot_mirror { + refcount_t refcount; + int to; +}; + struct ocelot_port { struct ocelot *ocelot; @@ -723,6 +728,7 @@ struct ocelot { struct ocelot_vcap_block block[3]; struct ocelot_vcap_policer vcap_pol; struct vcap_props *vcap; + struct ocelot_mirror *mirror; struct ocelot_psfp_list psfp; @@ -908,6 +914,9 @@ int ocelot_get_max_mtu(struct ocelot *ocelot, int port); int ocelot_port_policer_add(struct ocelot *ocelot, int port, struct ocelot_policer *pol); int ocelot_port_policer_del(struct ocelot *ocelot, int port); +int ocelot_port_mirror_add(struct ocelot *ocelot, int from, int to, + bool ingress, struct netlink_ext_ack *extack); +void ocelot_port_mirror_del(struct ocelot *ocelot, int from, bool ingress); int ocelot_cls_flower_replace(struct ocelot *ocelot, int port, struct flow_cls_offload *f, bool ingress); int ocelot_cls_flower_destroy(struct ocelot *ocelot, int port, From patchwork Wed Mar 16 20:41:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 12783177 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C90CC433EF for ; Wed, 16 Mar 2022 20:42:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358014AbiCPUnX (ORCPT ); Wed, 16 Mar 2022 16:43:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35826 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358003AbiCPUnP (ORCPT ); Wed, 16 Mar 2022 16:43:15 -0400 Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30072.outbound.protection.outlook.com [40.107.3.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B74586E4F7 for ; Wed, 16 Mar 2022 13:42:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FW+fGCoXDifgZgjaQJd8f/qP8hM0SuM23kz5ifEZNNs6iJe8q/M1+JbXQ+KFFXCqEulpxzQcG9ZctgfMn2Lpxt40FcjuasjRYogl68SVlqQ8ivhZ02MAZK/mUwsT22yQbIvYDmYkNJdZCKo+S4apJQD8u/1fMP9CcKR1QdzWkBMTM3oTNTGI0YQkp52byKNSlV2UKYvT5+dvx7f4mXO0Eeesw+cYyuzoEAWR+hsx7gnlizqLI/pL6K/zfNHd08c611hnb9ag+sOeyoc+0H6l8Fu3aQR+5U+GgWho57katkstZ0HBxQ/He9ov+NZBRNP/MmPGN/bUiDfiA3xWvi0z0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0LRXOLk0xFXjevUMFgZEThdvIF4AMUKQveREGmHaft4=; b=I1dEapPAQYxIoBynvpCBw9S5Ft3g/6cOf3qEB5HDabntMQiDWj4pnGzxk+pla+aZTrJ3atkggjuGOxCKdOM6Uk3VLQMNsKSx8pJ7b/oL9WfpQBjdRFQirXZF3NmjZPs4Xf04F2ikM8yM3uHZTgTFACWMXukrg/g3Je+C/UxmHQlPYEic1/EuqpGPo57i4kh7mdrZMAGLEKP43nQ3u7vDXj1U3oS7VFRHsYHDctqvJD0k1KtWTYrEFT5CF0dc7NWR60gSHTJMZQJUHQTiKi7MP3pGZy+R14ERBB8oQce3D2iXXpiQFt7rGHdg9iSQO4YCucKveBmh+MDwSoEK1yYG6g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0LRXOLk0xFXjevUMFgZEThdvIF4AMUKQveREGmHaft4=; b=DT5AeQKXKIWgcYZKHM8CHsI0y63sZ2ywzBOUlu+SkyS4AVZlZmOINrTBUVQe2Hnz0vKuRh0eIJEzbKkse2zidA84xubV1FqOf6gxRPCc5kNAFapzh/09sgl5EnZuLVmyFcFQuallJK38dQoNdNLfA9VJOkQD22i7cfO89PAC8YQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) by AM9PR04MB8398.eurprd04.prod.outlook.com (2603:10a6:20b:3b7::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.15; Wed, 16 Mar 2022 20:41:56 +0000 Received: from AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f]) by AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f%6]) with mapi id 15.20.5081.015; Wed, 16 Mar 2022 20:41:56 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Jakub Kicinski , "David S. Miller" , Florian Fainelli , Andrew Lunn , Vivien Didelot , Vladimir Oltean , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com Subject: [PATCH net-next 3/6] net: mscc: ocelot: establish functions for handling VCAP aux resources Date: Wed, 16 Mar 2022 22:41:41 +0200 Message-Id: <20220316204144.2679277-4-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220316204144.2679277-1-vladimir.oltean@nxp.com> References: <20220316204144.2679277-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: AM6PR08CA0037.eurprd08.prod.outlook.com (2603:10a6:20b:c0::25) To AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 99045e8b-80f8-402e-20fb-08da078d6939 X-MS-TrafficTypeDiagnostic: AM9PR04MB8398:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BF/YcqLJ0derPLAKsVdHRlF5X4sTmrdcHTzYOOgoTue32Ea/p2x0JWFqGL3t+45bmCmG0zElq7t/SBZBVTuCLNaqKzW340Bv6KsF3UR8Nhu8DaB1V80wzhkiozx/2pbqerzlZVsUSV019KqQM8/kwrs0NNhyEQW7PbrQ1K+KJ7AMAjSlikQ3ON38w96fe88rdc40i1jdc8AHDDsD/co1qTHETWV4eHYp6LZr/K8uwqOEFqzKUL4QsAOkrwedmRfuZxnU+MZUysN2kaIjPJ0SfGUZHiWVK25WkzY40oIaJ0iu7LSGtUjt1t4SEtaKo/nbRcRRwj4Fm8hgSXWCb21/2Evoyn4wVfX1lr2ZLtK1azOYR/wm8LZKhycMQP6+lW6v6RtmCx62gTOkoOsz86Rvt0PwK/H3IzJ907XT+etK+BOhyaTxGd3n+TVBtR7rEMQN9OBoHjM+audieKOP7AKIhTsbzUt1TKLnfMoZIJCJZBRagRpT5PzwzGur+4GNW5oJNcizgvoNAcoLIdshtX4HE3VgiM8T0oRhth9nRl+VeOvUpEGsMKID0RIAqG/GISlje98hlVaMyOrpNu2AGMHlt87wqDEIPQ3QXlzds+gz3da14J9wMWqzBCqIFY/ReEm95bs3pmzbSjydR8w7K8o61V0oEK/w1Zv6dcZ8As5TS/OBtKZ2ZjTPQNgtNxbIfiEXH/NaGiuNG8Z6ysa4kOHr0g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5121.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(8936002)(2906002)(6916009)(54906003)(4326008)(6666004)(8676002)(26005)(186003)(86362001)(316002)(44832011)(36756003)(6486002)(38350700002)(66556008)(5660300002)(83380400001)(66946007)(66476007)(2616005)(6512007)(1076003)(508600001)(52116002)(38100700002)(6506007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HyU1D7RKjJibWVhChIZb3a5oNAuMYI1F1Sw9KOAmSx9H5pPoIVDBsXCGXCh7OPgFZVkBg+FZFpwEd64BHN/hjfAAKJ+OggUL0GUP8IoZ+UMzQ32Ut9pRFJuBXbGTPzF/X6qoNsR6WEYN6x6KZKFvxoDbx2EFRpXUQbJwRewbJyM3jgL97P0APywflsQT+N57a/2XqkPmP3KzNau2tM4hf75uTGPoK4BIh6x4QSm0EeaG/A5Hg5kt1OFvgafZMWFJ9i8nBa9Ddon3p8OhkkUqSasRHVCBDNWFQNtevS6BW2ug/0oSIdY7pD+RPp7fX/YmzKza2teYmzF2sxHCeTdmmx69eKA/e6rv18+hGcSLP6X99DyZLdkBzo5axR8g/iZtYEUCgP8YwIdZH8i+Ucp25ZweMmRDECK7+Vydfq7OTxb0hQXUvtZQhxf70nd1nMSQuWeaLPPtI5R33ixbupcQx8OAZGwjlRR0G9eHxxOSslgZsjToRg32gNEDYjZOEdycyOFjVEzOriYGRqaje+vjHtFtX8gG/fKFJw6VYSgdmA1nuS2EIvPT42DA1rX+3QVJmHh1FFY5OUQH4xtCAQ2bXi/m1Z302rGT+9tVyWWn9+hS/mnw2zPeJ3qhETuqWfykUSOnTC6w8GkZA/rhIeocRTPKQQpfqzhJ95RsmpiYNohyV04b+XeTrT077qciZq1TA8XbgXf0KNFUMHhFbLTHuNugde96WFR7w6lsWK/J295w0Nsp7FyDYHu/BO7d6tvGGj8oGYXnty9o8DqWmm0Jf61jyY6Z3FxPVHFXTibh7gKlzzqFXvU0MVelCm+hrb7TVGYoQq/xUo+iF7t8ziNmPIIPZhXFZa41bt8ue+ExqQWwlzaAmPxEYSgLloXcwqU3IS4uQLBcWwIVhHE/offB+p/E5f7hxPg/hvj1saQsyQpaXCCgUo/jJiu69dkLqtAe0Z+LWYGjmw1aziv9uWkqJhPGNYZcFgxL0UlVyjH+LXKbYcTqR629LvXQYm2iDeW1YJRaali8bvnzmKYY2oNbiDfoGfJ6V+cTURYqoQzYxiZ63rIIt+HUx4dNz/FJf+4gzFa4LLRkHYqrGBBqYSI5DuT7meCkIG5sr0KoSUFh4U9udRNuaxLLaXiwFCuV+ZlTsmGd73eLPCMEQBXt9JiIjNmbNt2QXFcmdAYD/MWT5eCuVfeeZREmzxRTb/wSsQmX7b9E3+uqN/38Rns+Fnp6d0zTpNLewwxBfs48+/YZHtqGy+motbaglqfJJLbbVQpib7vXKnxQbQCGl5w89KaIFrsKdmyjXV5owPYpOEuLU/RDGQ8FQcfComcjCJx0jCnr1fMcJVJbF2w4pPX1Sw+la6uPFhxB+IAKmkzeSRN2tel2q85J2cz1FsepPVPQQHPKFKCGhF9B7b3jMTZkZXX7NiF0f9+Y08/odqfwkuo2V+3iJMwLdNJJGffpB0q4JmU2ocb6YCSK4+iJujkzMB3zcg== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 99045e8b-80f8-402e-20fb-08da078d6939 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5121.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2022 20:41:56.5043 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3plLPoQHec8PF2/Xpal5JBuLBBc2ADapHHQc292PBOEK/hToidxGJACnrEfMcyAfG14TSwcTy6pxM41SVQY4dA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8398 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Some VCAP filters utilize resources which are global to the switch, like for example VCAP IS2 policers take an index into a global policer pool. In commit c9a7fe1238e5 ("net: mscc: ocelot: add action of police on vcap_is2"), Xiaoliang expressed this by hooking into the low-level ocelot_vcap_filter_add_to_block() and ocelot_vcap_block_remove_filter() functions, and allocating/freeing the policers from there. Evaluating the code, there probably isn't a better place, but we'll need to do something similar for the mirror ports, and the code will start to look even more hacked up than it is right now. Create two ocelot_vcap_filter_{add,del}_aux_resources() functions to contain the madness, and pollute less the body of other functions such as ocelot_vcap_filter_add_to_block(). Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/ocelot_vcap.c | 41 ++++++++++++++++++------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/mscc/ocelot_vcap.c b/drivers/net/ethernet/mscc/ocelot_vcap.c index b976d480aeb3..829fb55ea9dc 100644 --- a/drivers/net/ethernet/mscc/ocelot_vcap.c +++ b/drivers/net/ethernet/mscc/ocelot_vcap.c @@ -955,12 +955,11 @@ int ocelot_vcap_policer_del(struct ocelot *ocelot, u32 pol_ix) } EXPORT_SYMBOL(ocelot_vcap_policer_del); -static int ocelot_vcap_filter_add_to_block(struct ocelot *ocelot, - struct ocelot_vcap_block *block, - struct ocelot_vcap_filter *filter) +static int +ocelot_vcap_filter_add_aux_resources(struct ocelot *ocelot, + struct ocelot_vcap_filter *filter, + struct netlink_ext_ack *extack) { - struct ocelot_vcap_filter *tmp; - struct list_head *pos, *n; int ret; if (filter->block_id == VCAP_IS2 && filter->action.police_ena) { @@ -970,6 +969,30 @@ static int ocelot_vcap_filter_add_to_block(struct ocelot *ocelot, return ret; } + return 0; +} + +static void +ocelot_vcap_filter_del_aux_resources(struct ocelot *ocelot, + struct ocelot_vcap_filter *filter) +{ + if (filter->block_id == VCAP_IS2 && filter->action.police_ena) + ocelot_vcap_policer_del(ocelot, filter->action.pol_ix); +} + +static int ocelot_vcap_filter_add_to_block(struct ocelot *ocelot, + struct ocelot_vcap_block *block, + struct ocelot_vcap_filter *filter, + struct netlink_ext_ack *extack) +{ + struct ocelot_vcap_filter *tmp; + struct list_head *pos, *n; + int ret; + + ret = ocelot_vcap_filter_add_aux_resources(ocelot, filter, extack); + if (ret) + return ret; + block->count++; if (list_empty(&block->rules)) { @@ -1168,7 +1191,7 @@ int ocelot_vcap_filter_add(struct ocelot *ocelot, } /* Add filter to the linked list */ - ret = ocelot_vcap_filter_add_to_block(ocelot, block, filter); + ret = ocelot_vcap_filter_add_to_block(ocelot, block, filter, extack); if (ret) return ret; @@ -1199,11 +1222,7 @@ static void ocelot_vcap_block_remove_filter(struct ocelot *ocelot, list_for_each_entry_safe(tmp, n, &block->rules, list) { if (ocelot_vcap_filter_equal(filter, tmp)) { - if (tmp->block_id == VCAP_IS2 && - tmp->action.police_ena) - ocelot_vcap_policer_del(ocelot, - tmp->action.pol_ix); - + ocelot_vcap_filter_del_aux_resources(ocelot, tmp); list_del(&tmp->list); kfree(tmp); } From patchwork Wed Mar 16 20:41:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 12783179 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87876C433EF for ; Wed, 16 Mar 2022 20:42:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358036AbiCPUn0 (ORCPT ); Wed, 16 Mar 2022 16:43:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35996 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358052AbiCPUnW (ORCPT ); Wed, 16 Mar 2022 16:43:22 -0400 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2068.outbound.protection.outlook.com [40.107.21.68]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B990B6E572 for ; Wed, 16 Mar 2022 13:42:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CpEwy8Ku6MAJlSL5Hfi9wXSnfPTQbmtnNqJ3jmuUnIw5xEGiqfRkic9s78t3G4Y40LYCbBQgdGe3vRv8W+PGUm0vA5hTG7MmBVu58YIBgcLRw6/trDwiMw8gI4tXGbLYLxUiKc/Ci+Fo9oXVf4SdFmoAPV/OszrKIdIYb90RmRB16GqhRFabKOEUU810E8aD8j78J5wrmnrrz/sYRksQkLQUDQvxee9QssFyZd8PU8lrn07quMUkpLDFC1oQH/UF1569OTq9RjxdA/BpTPiolFQI/nojz3eHD2RJ7rgUjT22GKZRhi3gdzWPuwN+iCnbsO2AzlsjKG5V4Ok/K9IlVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=TjFXhUMgr7VmvSTmSI5BaU6AGVlKmBhtZ0ryBvyM4oU=; b=hXA1gVWEikr+pw6YOeczhvY/xypTDiuxGUwP0fpbWBMBr8DdYHAzCUgp3t07YjjHLrJAitsBOEzqcbuf5mxMLLqmVL04632X9EjVoYsiL7CW8M29Ro/UWzfNCh3PvR8DuyJlByfjnFYEvQV35kdUgfcKKWudj0RzTT1OVtvteXFiugvdOrnYjM0z2NjpZIiBZ7b/xcS3eesBj6WjCGv0Utau/QQEHnNkTx8fj8bWOZQBAIlzu9Wb0HZ7nb4nIzMZJRFxuMTBDroEKhyexXN3V5qbUWWoZdX/3iCHLcNChhRyi0fHCjiK2tQoUArN1/pD7O61Dnx8bzJ11vw1Swkyng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TjFXhUMgr7VmvSTmSI5BaU6AGVlKmBhtZ0ryBvyM4oU=; b=deFbo+rfFs0Li2zz2GA/M8BKtTKtCHRwrRJf9C4Cw6ePvdw7xz2MY79GEJ0Xf74PKkVrg+UqbQC22OLhlcGhbfjuv8UVN90ut5I57sAynQ8VfPIb0duhYtjJUaeXfVs7hI3og6Ka8PNn5ZkWyuVTvOKwYrUPL9dlbrNHRch3Iyc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5061.29; Wed, 16 Mar 2022 20:41:57 +0000 Received: from AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f]) by AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f%6]) with mapi id 15.20.5081.015; Wed, 16 Mar 2022 20:41:57 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Jakub Kicinski , "David S. Miller" , Florian Fainelli , Andrew Lunn , Vivien Didelot , Vladimir Oltean , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com Subject: [PATCH net-next 4/6] net: mscc: ocelot: offload per-flow mirroring using tc-mirred and VCAP IS2 Date: Wed, 16 Mar 2022 22:41:42 +0200 Message-Id: <20220316204144.2679277-5-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220316204144.2679277-1-vladimir.oltean@nxp.com> References: <20220316204144.2679277-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: AM6PR08CA0037.eurprd08.prod.outlook.com (2603:10a6:20b:c0::25) To AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6bfa8889-8eab-461e-7b1c-08da078d69b7 X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: j2Gj2j7z6wqchMEzwjV+Q2vI1qa+77YcZYHOh9I81uaZYaYWipGIBVuay0YGoNL1n71tlM2FKnMkawo1TipD9Ny3Zd8eOLghtAHGj6lwpIu8JokJQ3amqOojSI/vxgG3YgaVebTUzDKX1cwCnIfiWwl62nFsf5hKeLGqS5vhVKmHWv6cakjZl9XcRQC47J1CFwza094zL9Em29r1wUrXAuo9FRQaJmh0if/kDC6P8zBeWBhX9LqReO6/RD+2FIjCkKTiHZrn5pAgnFczVlM0ZfxNRDZpP5GOzRNja8GuBBjFjeP1EqqTEvmvhqlyOGTd+frtEf0Jne431E5I5Mxx3NSsCStl29+Zi77AnPKPxM3NvxoZELz9O7C5v9xpmsd13AhH968bpBVV+lDaMTuZXegbB6NXS0EPXHF499NG4/XepGlRsdSy0/wmmsNf/viG97fclmk5rD64oTIUf3qMP5td9rIjJyGYyYjLbT7D/KJGna7b7nNVtsKGjCRnqp3VlR5Meoo8s1G9fNL1g78ovCuYVx5PobkknS21H3kjOSszHU85nloHTz2VtQDZtW6crI8dtV8ieN6qjWjNB8E3m6x+g9YAl7n9arrZ6iZJCNDhBBlHlJG4OuChBAFuxRAyHx8FJTUFpSt4dcKACG5SyIZjCTi2oQtE7UU4mLWKjSaTFr6venIvoUkY/iRVABcshhPdEyzsFLFsd8lbJKKK6w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5121.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(38100700002)(38350700002)(86362001)(6916009)(316002)(6486002)(54906003)(5660300002)(36756003)(8936002)(44832011)(8676002)(66946007)(4326008)(66556008)(66476007)(2906002)(83380400001)(2616005)(1076003)(6506007)(508600001)(6512007)(6666004)(52116002)(186003)(26005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +SXUWKCEyvEZ0FCBWY57zHlXWRs1133PibvDf+2m8CON/BAAVckel4TlpTy72ldECSCg0rrkbaqv+k+cFWZUsly2IHMuYh8/cfqXqQcxUO5HetJEbdh+iNtC4CLewG6DqxZV/mixdF1wdlbEk+huW7bikHB+FhGByU65JzWT4xiWrIMjIPv8E+Hoy989pKO4V1L7vICQuq27iSZLHF5zFocRYNDUWblJ9n1fJnvbnLsQhCk8h4keXumvTvrkVcW/5EYrII12RNllZKowX0Lkf8oQJqe0NY7rNvlpIEld0q6+OsCnHuT8biOhZTIhf7isBKW9BVLO7ugNIdhMi+d5BTF78zB0dunZNCQLnHYHA31T3ytaEG4OR/SJUlKT8+n2h5RQmGjOz9AJXcHOdIE1AWm7+LX3jYnc7ZKtDdYgXznZ7QY1qqKm4mFlaW8n2Q3vqKIIG0dJHVAKWopZiUSXRN8FtWYMNNglEBt5nGIa/N1uB02fUXhAWDbM3dnXc3TpTupmE53QwAK+4IXSfA3yl5WKclRvSI/z9q7gnJoJ/9842lMmRDNg/v4YuOl4+S5AMqTW63qDIjpJKXVXydMek7InBkEofVBQaBKzO5n+QJ3l6or7X2KOZiyv09y3dAud+S6Tq2j621FwSbtAUcAoA25ZEOLit5QalBo9hr57BTU/xw2HZklhf/oYrB7cntlZJyR6sS/Ok7O2NhIbIFhdD+4107b9YgDE+GSK9owliYe8wPFqXP/nBTPp6Y2XdGIyTJmyS9bi809W13kPaQEJJnALP2ti/kQyjg+/HfzyHeb2Tx5LhF3OoaTgDyG7Ip4Ofx6ASlXTAsraROvDgrBoHwAXAunPdEuWy8WtRwlfyepSDTl3CaiHOYiVua5vFAja5bFMaU8CB/Kz/KD2aHm8tkPm6Cs9oSg420DSLSfDlRMH78gelzrn7SzNh3q+coTOYHF+v2jefzMvyY2GXxBCrPWdnFBJdbU9WgLH2J0npb2kJtFCLOplkPbj0VT6MQreD9e/sA6SmDxYIvfLyOGohEaZwGSJGAeQ0BREI3sVa2zCu7Q1ZyV1ydKgnKVCjVLjm94oSGTvbgvIssCMYwAQxPvnRv27wTX8wHyOK8YsHXvvPNUEKdPw/jrcPPt7W430mdoq4xo6FLzim549cAZ30U0u6QmjcK0cd6tiSbnbTXP3bGkYP+OFtDc/2EgHkMkYMB+RaWymizJbJdfJNID/JDiVnId4/c5KYhg1rViaBKuzoUIuHe/h3JKwkFvMJ4DrtM5sBraFbIzKisv/3umMGUJ+KpziHsZ8TsKuNopJ5lhQCBU/Ir56noSkUB3qh/1m4U3Mt2yXb8meo6CgZgTxKXE+vnWK4f/AcjlkyHLpZ98EG4fydi0yt04Pk3227cojfTaXA9Td91Vuj6PJhIPFAAnmX5RnKhzxT7bKFIO/L4pKFZRwHOej5D0olupm+aPd1tfvedhQuwEDCFQt1MRVrw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6bfa8889-8eab-461e-7b1c-08da078d69b7 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5121.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2022 20:41:57.3636 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vlcSDO+UvTNcY999klPGwHZAL9TweZkHrGQzQNHMePEuHdcCjDXJhffF6oP+ngeg2kCbw9DXBVnVCg6nM3UunA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Per-flow mirroring with the VCAP IS2 TCAM (in itself handled as an offload for tc-flower) is done by setting the MIRROR_ENA bit from the action vector of the filter. The packet is mirrored to the port mask configured in the ANA:ANA:MIRRORPORTS register (the same port mask as the destinations for port-based mirroring). Functionality was tested with: tc qdisc add dev swp3 clsact tc filter add dev swp3 ingress protocol ip \ flower skip_sw ip_proto icmp \ action mirred egress mirror dev swp1 and pinging through swp3, while seeing that the ICMP replies are mirrored towards swp1. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/ocelot.c | 6 +++--- drivers/net/ethernet/mscc/ocelot.h | 4 ++++ drivers/net/ethernet/mscc/ocelot_flower.c | 21 +++++++++++++++++++++ drivers/net/ethernet/mscc/ocelot_vcap.c | 12 ++++++++++++ include/soc/mscc/ocelot_vcap.h | 2 ++ 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c index d38a9b498490..e443bd8b2d09 100644 --- a/drivers/net/ethernet/mscc/ocelot.c +++ b/drivers/net/ethernet/mscc/ocelot.c @@ -3023,8 +3023,8 @@ int ocelot_port_del_dscp_prio(struct ocelot *ocelot, int port, u8 dscp, u8 prio) } EXPORT_SYMBOL_GPL(ocelot_port_del_dscp_prio); -static struct ocelot_mirror *ocelot_mirror_get(struct ocelot *ocelot, int to, - struct netlink_ext_ack *extack) +struct ocelot_mirror *ocelot_mirror_get(struct ocelot *ocelot, int to, + struct netlink_ext_ack *extack) { struct ocelot_mirror *m = ocelot->mirror; @@ -3053,7 +3053,7 @@ static struct ocelot_mirror *ocelot_mirror_get(struct ocelot *ocelot, int to, return m; } -static void ocelot_mirror_put(struct ocelot *ocelot) +void ocelot_mirror_put(struct ocelot *ocelot) { struct ocelot_mirror *m = ocelot->mirror; diff --git a/drivers/net/ethernet/mscc/ocelot.h b/drivers/net/ethernet/mscc/ocelot.h index d5bd525e7ec2..d0fa8ab6cc81 100644 --- a/drivers/net/ethernet/mscc/ocelot.h +++ b/drivers/net/ethernet/mscc/ocelot.h @@ -112,6 +112,10 @@ int ocelot_trap_add(struct ocelot *ocelot, int port, void (*populate)(struct ocelot_vcap_filter *f)); int ocelot_trap_del(struct ocelot *ocelot, int port, unsigned long cookie); +struct ocelot_mirror *ocelot_mirror_get(struct ocelot *ocelot, int to, + struct netlink_ext_ack *extack); +void ocelot_mirror_put(struct ocelot *ocelot); + extern struct notifier_block ocelot_netdevice_nb; extern struct notifier_block ocelot_switchdev_nb; extern struct notifier_block ocelot_switchdev_blocking_nb; diff --git a/drivers/net/ethernet/mscc/ocelot_flower.c b/drivers/net/ethernet/mscc/ocelot_flower.c index bd9525867caa..03b5e59d033e 100644 --- a/drivers/net/ethernet/mscc/ocelot_flower.c +++ b/drivers/net/ethernet/mscc/ocelot_flower.c @@ -359,6 +359,27 @@ static int ocelot_flower_parse_action(struct ocelot *ocelot, int port, filter->action.port_mask = BIT(egress_port); filter->type = OCELOT_VCAP_FILTER_OFFLOAD; break; + case FLOW_ACTION_MIRRED: + if (filter->block_id != VCAP_IS2) { + NL_SET_ERR_MSG_MOD(extack, + "Mirror action can only be offloaded to VCAP IS2"); + return -EOPNOTSUPP; + } + if (filter->goto_target != -1) { + NL_SET_ERR_MSG_MOD(extack, + "Last action must be GOTO"); + return -EOPNOTSUPP; + } + egress_port = ocelot->ops->netdev_to_port(a->dev); + if (egress_port < 0) { + NL_SET_ERR_MSG_MOD(extack, + "Destination not an ocelot port"); + return -EOPNOTSUPP; + } + filter->egress_port.value = egress_port; + filter->action.mirror_ena = true; + filter->type = OCELOT_VCAP_FILTER_OFFLOAD; + break; case FLOW_ACTION_VLAN_POP: if (filter->block_id != VCAP_IS1) { NL_SET_ERR_MSG_MOD(extack, diff --git a/drivers/net/ethernet/mscc/ocelot_vcap.c b/drivers/net/ethernet/mscc/ocelot_vcap.c index 829fb55ea9dc..c8701ac955a8 100644 --- a/drivers/net/ethernet/mscc/ocelot_vcap.c +++ b/drivers/net/ethernet/mscc/ocelot_vcap.c @@ -335,6 +335,7 @@ static void is2_action_set(struct ocelot *ocelot, struct vcap_data *data, vcap_action_set(vcap, data, VCAP_IS2_ACT_MASK_MODE, a->mask_mode); vcap_action_set(vcap, data, VCAP_IS2_ACT_PORT_MASK, a->port_mask); + vcap_action_set(vcap, data, VCAP_IS2_ACT_MIRROR_ENA, a->mirror_ena); vcap_action_set(vcap, data, VCAP_IS2_ACT_POLICE_ENA, a->police_ena); vcap_action_set(vcap, data, VCAP_IS2_ACT_POLICE_IDX, a->pol_ix); vcap_action_set(vcap, data, VCAP_IS2_ACT_CPU_QU_NUM, a->cpu_qu_num); @@ -960,8 +961,16 @@ ocelot_vcap_filter_add_aux_resources(struct ocelot *ocelot, struct ocelot_vcap_filter *filter, struct netlink_ext_ack *extack) { + struct ocelot_mirror *m; int ret; + if (filter->block_id == VCAP_IS2 && filter->action.mirror_ena) { + m = ocelot_mirror_get(ocelot, filter->egress_port.value, + extack); + if (IS_ERR(m)) + return PTR_ERR(m); + } + if (filter->block_id == VCAP_IS2 && filter->action.police_ena) { ret = ocelot_vcap_policer_add(ocelot, filter->action.pol_ix, &filter->action.pol); @@ -978,6 +987,9 @@ ocelot_vcap_filter_del_aux_resources(struct ocelot *ocelot, { if (filter->block_id == VCAP_IS2 && filter->action.police_ena) ocelot_vcap_policer_del(ocelot, filter->action.pol_ix); + + if (filter->block_id == VCAP_IS2 && filter->action.mirror_ena) + ocelot_mirror_put(ocelot); } static int ocelot_vcap_filter_add_to_block(struct ocelot *ocelot, diff --git a/include/soc/mscc/ocelot_vcap.h b/include/soc/mscc/ocelot_vcap.h index deb2ad9eb0a5..7b2bf9b1fe69 100644 --- a/include/soc/mscc/ocelot_vcap.h +++ b/include/soc/mscc/ocelot_vcap.h @@ -654,6 +654,7 @@ struct ocelot_vcap_action { enum ocelot_mask_mode mask_mode; unsigned long port_mask; bool police_ena; + bool mirror_ena; struct ocelot_policer pol; u32 pol_ix; }; @@ -697,6 +698,7 @@ struct ocelot_vcap_filter { unsigned long ingress_port_mask; /* For VCAP ES0 */ struct ocelot_vcap_port ingress_port; + /* For VCAP IS2 mirrors and ES0 */ struct ocelot_vcap_port egress_port; enum ocelot_vcap_bit dmac_mc; From patchwork Wed Mar 16 20:41:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 12783178 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5019DC433F5 for ; Wed, 16 Mar 2022 20:42:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358019AbiCPUnY (ORCPT ); Wed, 16 Mar 2022 16:43:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358059AbiCPUnW (ORCPT ); Wed, 16 Mar 2022 16:43:22 -0400 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2068.outbound.protection.outlook.com [40.107.21.68]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F9ED6E579 for ; Wed, 16 Mar 2022 13:42:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nWq98yvnxtXuIkppksmt+8OURIfT3rcPm+7bRrugMKQ/jNSWcDbDm9F7MPnHnjTukUmwiG0/GYdDGKKz+UI9o5LVYP6bEsblkeF5JMUSezqLO64jsDYQLh+y8Hs8f/vB2c9b20dEs+ModZLLBb2HRfdxjiuIiFNsCy3TpUDR0NHqxGmHTvxMgpT3/p4n2TGgwuiT7lPtRAxxzjOAraZCrJk5sE//Rpeut3FV75ab8XvI8yXCAgEYC//J6y2l8unI438U1cqKrQ8bfmYq38R2FH5JSs2JHXrdUoajVY66xKdihDD6BqJOUL8CuU969Nxws6QSXq5VoO2fvP54QJloXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=muVLRVezr1vWUDs2v1tSLPpklF+6OTtL9Dbu9eIl8rk=; b=ffA9HLQLFaZSD6bxc08bARrmB2FvR+T7Y0A71cK0vqtmCci0b0QHLTUG43W5RrxPmnYjLcYSglLHQ+Wj4grxOqbJfwJoDmECP4BpZgj3rkVF8JJlmKwRiCmq/5cICWcG9HeST6UyWPR1fPTjomxT8kc+oBxYX9pX/bYj96q/GkbB3lD/AofdaK7mLsGF/JryhyYxv73XJ3/NNKvkwMXCXA55ssxoR8N640Ox0nBQBSMjT5IJbVWyn834C91nUunWSiFZrHJD0C9Tqhj4Sk5K1NeZbvVInn3ZyXneOaIYL722OKZerE8hnYqSvsea49ZwvrRGGLng6MaIjemDT0XRfw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=muVLRVezr1vWUDs2v1tSLPpklF+6OTtL9Dbu9eIl8rk=; b=J2VYhg1opDhzqJygMMu0ZJ45E3thEqPpD1mOBgjfa0dAUm4iQhB20HKFM3vIzI09qjJjxCXwaqTZAp4VLSpDtFyVUjaVpPj7Rb2rN6Ll6rPAZwYz2E/Jg0+cvcJtNX7jptfcwTdcSGPVGDusAQGLHXGAzzoJwQ5wCQoXkApa2RY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5061.29; Wed, 16 Mar 2022 20:42:01 +0000 Received: from AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f]) by AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f%6]) with mapi id 15.20.5081.015; Wed, 16 Mar 2022 20:42:01 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Jakub Kicinski , "David S. Miller" , Florian Fainelli , Andrew Lunn , Vivien Didelot , Vladimir Oltean , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com Subject: [PATCH net-next 5/6] net: dsa: pass extack to dsa_switch_ops :: port_mirror_add() Date: Wed, 16 Mar 2022 22:41:43 +0200 Message-Id: <20220316204144.2679277-6-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220316204144.2679277-1-vladimir.oltean@nxp.com> References: <20220316204144.2679277-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: AM6PR08CA0037.eurprd08.prod.outlook.com (2603:10a6:20b:c0::25) To AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2a4599c2-1fdb-4e4d-5e82-08da078d6a3f X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CWcI4QPIcQDAHDzbNNeRlqfl/yaEFAGPRvwce3uzGzK4cUwa2y/lxYo9CwYQ4ps2s+DGBfIhp0gNNQZ4dv7DwtFv0ocjvEDgReXvZfieU7NH41jWk3AdXBygh8ZjbytZhxNKYeIiU/qMZpncKIDhsonKwxKv7XZYxxJMF6YAqQI8UfeLurOqIPYxwUh9UrYz5fGakU3R3pr+ItpzIaB7scsH2sw6YMvTjJRvLhFhLIpVtxQVKCFGKMTNkLsL2C3uozYZvjyiS30bE6AXKmWQQDy+ClqWk5bOHOyWAu1QxPVLcGj1Gmzuhcl2t6fHeHCChWvqSQk2NXOAFp0P1qz1AC0ZhlTz6sawFPrQzWOj3C0v/8GpUwYT6H4Xownf9ydDlUxePE2qLdj9Cuv/zXSWE0LTHbdrvu8xYnOr+f0S+bYckgbhhCego97nIv4aScS5UNf+RfLKTo3dKbi9a8foE0QKEuB2fSjPQGHqjDG1zCGD0ZB3nTQXDGHxg6HfEAbs6jVpNnhO6ncNfUexwwn0nPIJfx3X/egpAK+sfeuP9dhsLGQJlS3iA8lYkcx520B1i82Uy2hGALsx/tBNCz3FsaFeree25G+5X5mhs6Pa3XCu5pVvPfbfmNT5hUTZD5AUZaoS9d6xUxE56s1omYxkeio59pPp6Jt6u9EmQtmN9Qp74vxMjnr5PCO9w/bemuOyCN5R6BlSVe6RLxv7QToxxw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5121.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(38100700002)(38350700002)(86362001)(6916009)(316002)(6486002)(54906003)(5660300002)(36756003)(8936002)(44832011)(8676002)(66946007)(4326008)(66556008)(66476007)(2906002)(83380400001)(2616005)(1076003)(6506007)(508600001)(6512007)(6666004)(52116002)(186003)(26005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: h49RflsSPWz2vpRi8BxRvIDMQtnP7pPPlNNkWCcUhh1c+epAhmVaCsd9d9K5ISLXHaWMd6jiRKI4DnYTfBGQB7H5c+WdS6P/Zup6ZrqFMhPbysY2s/PkyiOsUgu31Rt2hZNxm5/MSWkqNXXsn9RCpcHIkMFWAD3lAPbGKWu61TtFZRUx3EETc5xeIHnId6ahcLh1bHvyunntEuLUhuE2PpSUxwSnGORNg45NPQoSCcEPkHFtZWAQ2TLxTY3hJtmLX2sNHPHKXaIOiptfVnjudKh2EPilEvaAfhutAE/nkq6FAqjCWX0drryThagfoOFfLv3gU03uMnBTQHuRNr/fBPII80oZOZTUMHMD7AeML9hHuBQCPhJN01cT/AkrApdJNl8QbkfNoyrzPnaVIEnctk16+NEdGoVuODEFsh6rugXcatuhd52TdyruA9r82uhYJphsfc941hdg0w/D63O6HXdWp+1JqxLoyijHw4/XOTpBSovPkLUfjrDkV9fgrreL2rbonsxkuFqsbTYqyQrLWVag7mCQlMXj24Bdewz7Hxj4dONA5MQej1crzLgb2vOf+EIWKdkTiBypNTKzyoJP9YJZjre0RrJVpia5jkA7mW+mlaJrH/JzpayqFtAykK+lq5qFGcGhYCXa29qSc6R5I/VolkYp2KoYdm4Kb/ywQqJFzjdRuo3kQ8RvInuhuX5c60bAPd+4wg/OnnSeaLTiX5AY7HViMMER2Gi9Qiu6JyGXQCViYQgUBAntt9XECGEX8vYVxrWGtPQ1utEhvko/VBw+VbVEOJ+Z3korfEEvtu2ZIwNnGvLPAJe3jvMu42kv/g/FXYtPYMcv0NrzBVD/RBFUswk3onZg6R/m/egdh+9zqKzuMQ8Gl5pr/cPOsFiQwCHIymVqq7IsKVUrkmJnqINBDm8fKw5wYEXOQM6J7wLR+VtQkGieOo6TNJrzsnG4wQScA23gNy6GtBiQmS23shSwaTSDvUyLlhv3Sa9BobavqWPJSFL4ahLqggpA5s5ILsmi255DhsE1+00pPw5gUBO9sJddoGJVyVLcTeFPkFnmk7CMmNRSlgNYRtCxXI347SAmt1rA4wpqrPQTEZl6Cw5tt1i8esljrhMA1fq9rCEN6dO4U8NcfddWagEOwrPn/fYMS8l/kv092ysSxzC3zFMg8j2NWkGS5LyV+zD7+g729WSK1MiOTjunIaJim5xMd4ot6vw4QQyem1QlDidIAf7rVcZ0NDw/rzz0c9HVAjbF//vAptNUlBJEULoUmIcexjRU8vKMTj/J/U0JYTop6Ncx8uYohp/rVnVwpAX0i9vRyzsHx2qCa2pjDnx2dR1wJxxSWXG54XXGukfBmqg/FdgKFrm1B+6DaGWzgdu2uSmbEER/LzRrhOclEWOKQaO6kQbSycaq23+OUqON7utunUljQB3IQAmHu2gA941lRsFSN4xlYLPjoqyaETnFyHzUmOlMlqnfCtEKc/cWaKtY9w== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a4599c2-1fdb-4e4d-5e82-08da078d6a3f X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5121.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2022 20:41:58.2073 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sGjNoMJEd55wLWMMYEbbHYrqasQzFDqsiAL+y2TT2ezNt72Qu9Qv8kOu4lUA6xMKK5JVRm3ziY4yK2Xz4/xFeg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Drivers might have error messages to propagate to user space, most common being that they support a single mirror port. Propagate the netlink extack so that they can inform user space in a verbal way of their limitations. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/b53/b53_common.c | 3 ++- drivers/net/dsa/b53/b53_priv.h | 3 ++- drivers/net/dsa/microchip/ksz8795.c | 2 +- drivers/net/dsa/microchip/ksz9477.c | 2 +- drivers/net/dsa/mt7530.c | 2 +- drivers/net/dsa/mv88e6xxx/chip.c | 3 ++- drivers/net/dsa/qca8k.c | 2 +- drivers/net/dsa/sja1105/sja1105_main.c | 2 +- include/net/dsa.h | 2 +- net/dsa/slave.c | 3 ++- 10 files changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 122e63762979..77501f9c5915 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -2110,7 +2110,8 @@ enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds, int port, EXPORT_SYMBOL(b53_get_tag_protocol); int b53_mirror_add(struct dsa_switch *ds, int port, - struct dsa_mall_mirror_tc_entry *mirror, bool ingress) + struct dsa_mall_mirror_tc_entry *mirror, bool ingress, + struct netlink_ext_ack *extack) { struct b53_device *dev = ds->priv; u16 reg, loc; diff --git a/drivers/net/dsa/b53/b53_priv.h b/drivers/net/dsa/b53/b53_priv.h index 86e7eb7924e7..3085b6cc7d40 100644 --- a/drivers/net/dsa/b53/b53_priv.h +++ b/drivers/net/dsa/b53/b53_priv.h @@ -373,7 +373,8 @@ int b53_mdb_del(struct dsa_switch *ds, int port, const struct switchdev_obj_port_mdb *mdb, struct dsa_db db); int b53_mirror_add(struct dsa_switch *ds, int port, - struct dsa_mall_mirror_tc_entry *mirror, bool ingress); + struct dsa_mall_mirror_tc_entry *mirror, bool ingress, + struct netlink_ext_ack *extack); enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds, int port, enum dsa_tag_protocol mprot); void b53_mirror_del(struct dsa_switch *ds, int port, diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchip/ksz8795.c index 5dc9899bc0a6..19050a0216fb 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -1213,7 +1213,7 @@ static int ksz8_port_vlan_del(struct dsa_switch *ds, int port, static int ksz8_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, - bool ingress) + bool ingress, struct netlink_ext_ack *extack) { struct ksz_device *dev = ds->priv; diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c index a4699481c746..8222c8a6c5ec 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -1018,7 +1018,7 @@ static int ksz9477_port_mdb_del(struct dsa_switch *ds, int port, static int ksz9477_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, - bool ingress) + bool ingress, struct netlink_ext_ack *extack) { struct ksz_device *dev = ds->priv; diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 669f008528ec..19f0035d4410 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -1714,7 +1714,7 @@ static int mt753x_mirror_port_set(unsigned int id, u32 val) static int mt753x_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, - bool ingress) + bool ingress, struct netlink_ext_ack *extack) { struct mt7530_priv *priv = ds->priv; int monitor_port; diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 84b90fc36c58..d733b07b406c 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -6036,7 +6036,8 @@ static int mv88e6xxx_port_mdb_del(struct dsa_switch *ds, int port, static int mv88e6xxx_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, - bool ingress) + bool ingress, + struct netlink_ext_ack *extack) { enum mv88e6xxx_egress_direction direction = ingress ? MV88E6XXX_EGRESS_DIR_INGRESS : diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c index ee0dbf324268..d3ed0a7f8077 100644 --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -2473,7 +2473,7 @@ qca8k_port_mdb_del(struct dsa_switch *ds, int port, static int qca8k_port_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, - bool ingress) + bool ingress, struct netlink_ext_ack *extack) { struct qca8k_priv *priv = ds->priv; int monitor_port, ret; diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index 3358e979342c..b33841c6507a 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -2847,7 +2847,7 @@ static int sja1105_mirror_apply(struct sja1105_private *priv, int from, int to, static int sja1105_mirror_add(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, - bool ingress) + bool ingress, struct netlink_ext_ack *extack) { return sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, ingress, true); diff --git a/include/net/dsa.h b/include/net/dsa.h index 9bfe984fcdbf..fa9413f625f1 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -1022,7 +1022,7 @@ struct dsa_switch_ops { struct flow_cls_offload *cls, bool ingress); int (*port_mirror_add)(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror, - bool ingress); + bool ingress, struct netlink_ext_ack *extack); void (*port_mirror_del)(struct dsa_switch *ds, int port, struct dsa_mall_mirror_tc_entry *mirror); int (*port_policer_add)(struct dsa_switch *ds, int port, diff --git a/net/dsa/slave.c b/net/dsa/slave.c index f9cecda791d5..7bff7023f877 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -1155,6 +1155,7 @@ dsa_slave_add_cls_matchall_mirred(struct net_device *dev, struct tc_cls_matchall_offload *cls, bool ingress) { + struct netlink_ext_ack *extack = cls->common.extack; struct dsa_port *dp = dsa_slave_to_port(dev); struct dsa_slave_priv *p = netdev_priv(dev); struct dsa_mall_mirror_tc_entry *mirror; @@ -1192,7 +1193,7 @@ dsa_slave_add_cls_matchall_mirred(struct net_device *dev, mirror->to_local_port = to_dp->index; mirror->ingress = ingress; - err = ds->ops->port_mirror_add(ds, dp->index, mirror, ingress); + err = ds->ops->port_mirror_add(ds, dp->index, mirror, ingress, extack); if (err) { kfree(mall_tc_entry); return err; From patchwork Wed Mar 16 20:41:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 12783180 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2495CC433FE for ; Wed, 16 Mar 2022 20:42:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358038AbiCPUn1 (ORCPT ); Wed, 16 Mar 2022 16:43:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35998 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358063AbiCPUnW (ORCPT ); Wed, 16 Mar 2022 16:43:22 -0400 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2068.outbound.protection.outlook.com [40.107.21.68]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52A886948B for ; Wed, 16 Mar 2022 13:42:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aZOMIAwxpM0TcC8LwCK9WqMbwzkVWG59RPAMn3e7dy31THi652xbTnkTWYasLinHPcMq/2ctKbWBtxiTBWQzQ511BRm5re8+XvTY4mx7fJgFlVJpKvH8acxqZ06t/f9DJCB8ruy5lg/IgoFEhOz2+t7OTv2Kx1u4LQ8n99wcPVzOhKNWQuzhviGnfZy3uOUoyCfeZMabqrGV0Y4Oz5Rm+ekUbGKxm/20Db+b/UuLqORlq95Qi3wpgMArZ8m2rT0fjKc7hYmqk7SoTdxxisVxc+zI6wnglT4uhqejB5xGYaWqyeOnFok69L2f8VEYQ0u8ZHMiSlENG261Wbc15PTMcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lm24Q4k4WVHwa7P1em5q0ffDwzvnS+WVbf3JInAM1FE=; b=dvakgkaVfC6GPND3u2dMavolZXCuCeOCB7uhuABSQcmfhkDuIxTeWCoPhZb0ZfdN6O77sjHS44EGaNptaKESVheTAI/hYZqpjIfdHgKrtrb3IcVf9aFQXJx1UGhoPDj/COkx334ULtBoT60yqZuZl3rg77CfpdoF1Jf+2skIHDJi7jRnjiLoAfhoWOU4F8BQskNHck3nsBJZ1jXR92ZLPKOYsqPPt7E8utuhW+zur0hP2ox3XkiDgHV3CPhHSJWstRVsiuQutxS2lYwixnl50yTU+snHiIS7wU2RJmEwBctmHwytBLk3rBRc9efw8ih6M49xdQCMCuzuP8nP4szooA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lm24Q4k4WVHwa7P1em5q0ffDwzvnS+WVbf3JInAM1FE=; b=WhNzvMx9UFm/nPw5yGgg7VA4KowR9ibYJGhmibgRTESFkMHbd/w0YXbdDbrJBovFyFT7OICGy7WRW3Zos5+yeO5ldnbqf4f6704IKGfS2ouUbYOOP8615dcThFuaempUcdZIBsIUwBQhckqvEGikD4t9z/+SZVX4gba1wOKFE9A= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) by VI1PR04MB3293.eurprd04.prod.outlook.com (2603:10a6:802:11::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5061.29; Wed, 16 Mar 2022 20:42:01 +0000 Received: from AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f]) by AM0PR04MB5121.eurprd04.prod.outlook.com ([fe80::5cd3:29be:d82d:b08f%6]) with mapi id 15.20.5081.015; Wed, 16 Mar 2022 20:42:01 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Jakub Kicinski , "David S. Miller" , Florian Fainelli , Andrew Lunn , Vivien Didelot , Vladimir Oltean , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com Subject: [PATCH net-next 6/6] net: dsa: felix: add port mirroring support Date: Wed, 16 Mar 2022 22:41:44 +0200 Message-Id: <20220316204144.2679277-7-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220316204144.2679277-1-vladimir.oltean@nxp.com> References: <20220316204144.2679277-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: AM6PR08CA0037.eurprd08.prod.outlook.com (2603:10a6:20b:c0::25) To AM0PR04MB5121.eurprd04.prod.outlook.com (2603:10a6:208:c1::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8eb3d898-01bc-478d-2f74-08da078d6ab4 X-MS-TrafficTypeDiagnostic: VI1PR04MB3293:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eV6/x0my7SIbpYklEZ9zPoKRAB0LeG/+wHQlLNGqQubHCC9lwdyxqqYJ5NV2EiZ37etXVd87sXh5XJ60K0yxtWRUvjOljVDAxiFQqkneMonaJSlWSe9cjRZuYpjLa5+qVt1OzQOQsAcrRTqWpbOQ83br7d1lz+jM3z8xXdN7RASNdetMkziOZ1VtHl32fKXBu+Tj/dpMijXwUFLCoJnOn4rgVuzW5cXV33b6H1LkIcaZ0rmN5jUjmMPQWqbUKj2m4752zvam8RAC9Po+g8mFX3s022+d8+NtRJ5S4leCspEtaUb09DkocGCFd4MJzsmbJe6uoS9/i0n+xaTqX+Xzb3u9220J4pySK0XjW7UdAfTrWxwhF0OmCkxoaWTTvJu6R8cAaCLVxkrtGtoFUUA/QGc2nMIu0aLb02w/eFLZ1aiYBwQmKDITi6z+lpnqE6XBukhKfisSGsLv5FRXXFnersiyehqMkYRW2L8QNAPc2kGf52N095f7d8TMN2Qie9bbHhBKiz+thtQQlq/e6FOidmkxa8gh1hQG+efplq9U8LX+DL0MSeHKCRDuZqvelx3NO3NsdgsBIkTafjI2W+AnpDNA19SmFIGFYggNft7PQGmo2OEPINYNM5Fis0OE4QkABYYB9yN9zmivsfmAVHUEgJEGPxh9Ubr38KE6DZRqzsbEqw5J7RE5mZ5P8QmfxBS8fTj9MzY/GkjKhnS6JwGAXg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5121.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(38100700002)(38350700002)(86362001)(6916009)(316002)(6486002)(54906003)(5660300002)(36756003)(8936002)(44832011)(8676002)(66946007)(4326008)(66556008)(66476007)(2906002)(2616005)(1076003)(6506007)(508600001)(6512007)(6666004)(52116002)(186003)(26005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: foVxljFSq64QHm7d/vHEfJVQGRwdfv3la07UplACj6BgPkXnXHNI31D+KUZLjrGYCXOT3qIK5g4SdKZYyPNQWZfcXCpE9VUgBEDz3U34Bcfz4+iG87BAxApelZRL3Z6qOGNN/taQ+FAjofrjh+ZRl1c0OM8Yh3i/nZcKzHf+sMAMyauzqWltd18fc6VKJJiYZtI6MvUWt7me02VflDFNQCzS7t8c8CZ+47eEYiLWiT/GheAlZjfxvkaxdfB5PLgIdqe4R/iSSCs2wOQNSbj0xI2FZ49uP4alqGSztpoTYIz1CPNZNau9SSw9oXPVXyAgZ1aCHhWeHBXP+rJfgSnqdXQHmD/kG9miXJBassTK0SUw+BUFIkXUh8Xt2MioJYH73ujHZTGaSpKu44MyOqgr9m8BzGHMFFRLdM3QHxc+j0Me1pDcyDjSukWNt4vnSrPblXCdHfgnLIc5fkpfINTNN9HSYfuBg3FLi797TssE8Wi+EhMRQIF5RKQO9MHVdfCj8m5wvUcT/SVkbUg4tlylASFxcM15LFtArMRBaQXkuVjG3LHVPL0XSmeCJ1O8DJ4NEGQMBZMQwNRpdJ9g/Iqw2yTRhbmxtLN3n1P/EfhGGJ85JhZgu8vytKQXGcFWu/HeecJgLDftXaDpdZ9C7sOGT3VqqZVW9q2JmeGEu2vhHuzR3kImKHx+zPp2f/Ys/TPO9AsHvXETpdkbwV16vTlDG6qwVJpwyMEh98et1XriWMJpGkeb+VuvwSnNIC82Y/Wa6KXpCIEkk9FYvu6fusZ1HkeMCjOsAsDOQqxNzeXfm+BqJB5T5HY1Zg+sGaZfybbczc93bATh7LdYI14IdU9vwDQmazR8oiuNu3hPIlV3VKCwgzLUZH+LanQGJapZlLz5if44Tnvc26zTH8lOZ5NlaGGPFkDOOq39W+Xomf0sXg11ahWB3lsKuYU+1nowtxExnmbRKQwYn5m58zj71yPxwsdVXLzpC6ckubtAGDWRsK95A/RjZqBZct0VxF65fFyRWS7fkioltnCRelW07lUJYg1yMHkpUtZcUQLztQcKyYyteFYUiZSw9f4Jq3v2KmMSKNvPcTDe3kOLNqYJXra1hxgUdaoDPxEpQkKGHirN/Z+H1/YgJ8I2S91jVCxzRYSeI6o0EVMVc6ND39IqM7BXRU9ggPYljnl0FchT2CK9HKI0AqPJaQtI1s1wjBeuFjtRhPhTKkrucN+36HIYecXAWsdvGTlg5slfgjdgcB9m65C6VEKzOsHIeOAuo17WSEqpCjzxsXxTPJaJ8M3NgNrV7F17AJskpmivlEoiYX2Dd2FBGKuJ1OQcqmbA7fUCPa5EY3o8JRsx7qMXGwzXRcPJEsB0sAojFvWv5XLoCQgPDWCzfJzWmRk6oVehFJiHgEK7ivd38WBlXZDQDYI1JK+3cDafgzQmIgnGprlk4JmEUVwvAmtQP/Y9IJMr9Ffn9JxtP7zv1d30YtkV8AQzYTRE1g== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8eb3d898-01bc-478d-2f74-08da078d6ab4 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5121.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2022 20:41:58.9885 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2rSJh5Zy7InARnrW44WF7qaXTW+6fJeNLmtMM8jsYYXsV7HADdUU9m5m1WWFaPs0YolNaC1UWEYpW+9vhcN78g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3293 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Gain support for port mirroring using tc-matchall by forwarding the calls to the ocelot switch library. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c index 13d6b178777c..413b0006e9a2 100644 --- a/drivers/net/dsa/ocelot/felix.c +++ b/drivers/net/dsa/ocelot/felix.c @@ -1650,6 +1650,24 @@ static void felix_port_policer_del(struct dsa_switch *ds, int port) ocelot_port_policer_del(ocelot, port); } +static int felix_port_mirror_add(struct dsa_switch *ds, int port, + struct dsa_mall_mirror_tc_entry *mirror, + bool ingress, struct netlink_ext_ack *extack) +{ + struct ocelot *ocelot = ds->priv; + + return ocelot_port_mirror_add(ocelot, port, mirror->to_local_port, + ingress, extack); +} + +static void felix_port_mirror_del(struct dsa_switch *ds, int port, + struct dsa_mall_mirror_tc_entry *mirror) +{ + struct ocelot *ocelot = ds->priv; + + ocelot_port_mirror_del(ocelot, port, mirror->ingress); +} + static int felix_port_setup_tc(struct dsa_switch *ds, int port, enum tc_setup_type type, void *type_data) @@ -1880,6 +1898,8 @@ const struct dsa_switch_ops felix_switch_ops = { .port_max_mtu = felix_get_max_mtu, .port_policer_add = felix_port_policer_add, .port_policer_del = felix_port_policer_del, + .port_mirror_add = felix_port_mirror_add, + .port_mirror_del = felix_port_mirror_del, .cls_flower_add = felix_cls_flower_add, .cls_flower_del = felix_cls_flower_del, .cls_flower_stats = felix_cls_flower_stats,