From patchwork Tue Jul 20 13:46:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 482012 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0F9B4C07E95 for ; Tue, 20 Jul 2021 13:53:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E8205606A5 for ; Tue, 20 Jul 2021 13:53:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232253AbhGTNMM (ORCPT ); Tue, 20 Jul 2021 09:12:12 -0400 Received: from mail-eopbgr60072.outbound.protection.outlook.com ([40.107.6.72]:39553 "EHLO EUR04-DB3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S238795AbhGTNHI (ORCPT ); Tue, 20 Jul 2021 09:07:08 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oNZzB3C4qaL/TWDPMg4mfR/pGgDSyaPA0QK9ccH3/VMz19RnKvyFufUw+tr9RjcC3TvPM+OPHuAG0zQS6+F1XjTMZ0HkW4nA6v/B9OE0Iuhq8RWMNHHoj1iYWbGeMzxFxpZNn5G4XpFBJr0AvRInpqObaydbculvcoQ2KtjApfIhIGC53m7+agX5avDFKwxnhiVvj0Xdn1VgzLAJWZ+PzJ6q3dJw+9WUB0HVR4GxojoVevlvDgjhMNNJaUYl2VXuV7HPYWtNpn2nvxGWD3KdUbzTUD3rdqZDRB1WUxveFQvEvUwVTSU+YDniYwpU6zHYmQ3NuIY380O47Bjs6KbCSA== 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-SenderADCheck; bh=j1v5r3VHLcLwvZ43czbjpOSp/Uy0eQgsiDZ3Eoiz908=; b=my6/79pgwy/TIjxItF0vLZRxh6WzyWRUaYNwUyTKPF7LXC1bJGb0los7uHA/FN2VQrOTTY7ZMVQD2HuwTfitgU9b4c51mCMHWJCL+Dfn3AITIyxuRsRmJ5goiyWdOGVUCMgbUEIZGJ5RHQMYYdME0mkV5HXeKrqeYCHIcqsyt+c41IaxqjxkQsKDJaTeOUJSgRTkfZQaxDVYew7jyEH0kSRyjk4MgvSVDQkVyGh30KXdyDnCwJmhELkY/Vqr2HTmBn3CM8voI0LoZuYPao6b49zPNZNaVOQSCY6wJ4eEw/D4lDDpD3URae1F4pA4OaAlw8Y0CIO7uFnqFPtAuvu90Q== 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=j1v5r3VHLcLwvZ43czbjpOSp/Uy0eQgsiDZ3Eoiz908=; b=pO+HnEJ3Uo0fflGngOwzbIwkq2gzIB7bkTBtTAXkP5C1vrDQYTILVgkFL4vz4mjGl29q7W2Xqsj5V36s5dqJ9YIKYjMgYtMxcUZw/3kNCTtDOTv4lpHAbFkSk40L+4I7odAyWemv+W+okFh6+4/qvjpY3hpJKb6H35Ho8Y9Mevw= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by VI1PR04MB5696.eurprd04.prod.outlook.com (2603:10a6:803:e7::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Tue, 20 Jul 2021 13:47:12 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0%2]) with mapi id 15.20.4331.034; Tue, 20 Jul 2021 13:47:12 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Stephen Hemminger , bridge@lists.linux-foundation.org, Grygorii Strashko , Marek Behun , DENG Qingfang , Ioana Ciornei Subject: [PATCH v5 net-next 01/10] net: dpaa2-switch: use extack in dpaa2_switch_port_bridge_join Date: Tue, 20 Jul 2021 16:46:46 +0300 Message-Id: <20210720134655.892334-2-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210720134655.892334-1-vladimir.oltean@nxp.com> References: <20210720134655.892334-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: PR3P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::7) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (82.76.66.29) by PR3P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.19 via Frontend Transport; Tue, 20 Jul 2021 13:47:11 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 72289256-7c27-4bfa-6ce3-08d94b84e08a X-MS-TrafficTypeDiagnostic: VI1PR04MB5696: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BxQAaqe2B9m24HZXqpcPMtx3RZ6gUHTn7ULEG+1dk2dbjAw90eBkFhQjgCYP2l+IEP49Ze2mZIt47Gfcphg8xWN4200uLBkzAX8kd9Kvm2ix3vP++SrUp/P5oIXCv67G1XJbVbue+PdfEO9Z9i/oD9BLqMF04BguvnuPvX/GWg2/NJT51joffDfhmNFL6oE0o51rGByK+HcJbXPRwwVuRmkob+g3674Q6ujrM/T6fTkJUM2Bas1aVrsZNAJIoGMfZg8Y8cjEXMBtEjTaJa+nkjeMsfAeDlMbkf6Rm5KiqF7SLRCoNOpRIIT3izh+bB3Ftn5eHWR9hB8q+aDQXrgz6bugvoCvNJpeOC7mmWqDKC3ZT9dJq6MNdiI8vHnS+srgsjbGtOhyWfnvDzExjm3si/a0qsqkoO7i8R59wS5+QOA2nw4fxe7xounxzOq6u/4bnQ9o8r2gd0KzrtsjUEoXVXOLQhjs26Lg/c5KgzlNOdnt/f/hva5mB/ECwF+d14YIpdWkmJxGxd2OK+0EiXwX17g28U+oVSK3A0FdU+yGbHmyNp7X6+M1NZ6+64GHzDr1dsGJ/BQ012ae/TmasiVeCRoXTpaw6Kkka65DiSDtCsnuPHWebTeWFM5U/tk7FZvDdXWSyHacwae59FoeSKmoabZzqqM2YNPsvfoUBVctkjmngwukt1Gh5dsVytViY3deMlL4/KfDTqA0UKgX65+suw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR04MB5136.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(136003)(39860400002)(396003)(366004)(346002)(66946007)(6486002)(66556008)(316002)(26005)(54906003)(110136005)(38350700002)(6666004)(38100700002)(8676002)(83380400001)(4326008)(66476007)(8936002)(6512007)(2616005)(186003)(5660300002)(36756003)(52116002)(956004)(478600001)(7416002)(44832011)(86362001)(1076003)(2906002)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bQRUi5Uu1hR7H+OR9PTnTTKQepTOH1QiUntw9+dzONhD49JaWCgZwkQ2xil6gK8uKeKxilvIOWa8mVMEPsBiLznf6PvaNP5tpuMGd7636s9h7mKZex9sLkzJl7UnFcOF3MS577xBeoI96JwDhbrqTcquEGnFRfDiUF/7vI3j55bOEdsuYjFfitpdlVs6ucns5QZydxlUKzF1y85TmCK1a5LLbUf3fQCun2KPdS/JRMGprEuzwqEa+Dav8suoYKIFHw34Q0PsT7dE5WNriJnsiyQ0KxNaDvLBGYNr35tmXbmsPWo4+UNhngcCWnuc8S6RSrGrb9O2hKgXW7HmWV7Oegf2cDUjhc6cSbsPbtz2T3kGdHc6hF8jissaowLIEACFLEP/K2GjXkOEy+ThG0/+wZYRVJJmM1ScmahJD2OFzw752UgQmZax0oom0Elaly5SS1KSz2quwGONnuozkMoM+FzHMglvizSaIxebQYMWA3NY4+Nszrol9NiFpjyegAv0gAvfWWBerEfPupwnDaqxKeW/Xum/aiivYcFWBwBfT7vO+eo92oa2LNVRSK6GGU1UUUKqNGqEAgoWQPiyC+tBTU2ra8/S+STWy6M6igP2veFDOnEZo8+ExbEDl3hd+xdrRXZ0b3pPXQCMjHQPgQuCBFN9bSYanc+rD5e/D2mJlNbVxJFsmuKN0RYDv+kUdaMpdk1rSixMkTN6tiwns1AQBpBsTIe9c+LkGqQ4Uax49mcBaqu8Or4YIpK5nPx91sAMDVm7tVL6FN1+p04ZEgZwKZml9QzwKvcYp7YmqcUmvu/X+AADoF7qW5S533JPMrYrk7kOHcUG/qOwBz7w9EkGLqhRJ/B+QBzd3uXqDuCtFBE0C8v8zv8dOgs7SFd+NclyGArc4bg9MSZ52y44wJSurh2d1TSqk3ocVYj7Q3BN3YVzikMsMN2Mu7mdnzQ0WzzRSgDVcooXprLirbrN+QVKz/pA4odCetODYKWTVk6Sl22savVzx5eFx+GvnqAOKcnT2zjZ+xvMsTPZUfF04yYNUkHciSKie4I8E+zFs4JkAyBZ1qZKzrQBhix05NqdGk7wpAvFatboDv7fpIb4PiMUj1G+a0BgyMpdbwY6Hihu+M9mFK9DVbwF72DSgbivF8rW63qTtoztx5lxSsUebqcSXsjm09ZNcf+UaEGu1tgVLNeLS3O5I4fV2R17EvIRyfLE+zJ+IiY3sz6epzbEZa2iBT5w+fs/0jau30Y6Bb35V9/vkjMJ09pDVMrVMusZe61dATEXGOSSyF97f6Vr9QRKAwsLxzy5Xi2Yyr7jUglUk3Urm3NMMjvY1EQDWEtK/MnJ X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72289256-7c27-4bfa-6ce3-08d94b84e08a X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2021 13:47:12.6169 (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: ovIOtNm4gqKJaasJwZWCpOwAEpJyn3JPAYBpbIqN/YLqfppVBEkdO8mp3Jacf11YKI/3DrPmKET5m4burHLogg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5696 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We need to propagate the extack argument for dpaa2_switch_port_bridge_join to use it in a future patch, and it looks like there is already an error message there which is currently printed to the console. Move it over netlink so it is properly transmitted to user space. Cc: Ioana Ciornei Signed-off-by: Vladimir Oltean Reviewed-by: Florian Fainelli Tested-by: Ioana Ciornei Acked-by: Ioana Ciornei --- v2->v3: patch is new v3->v5: none drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c index f3d12d0714fb..62d322ebf1f2 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c @@ -1890,7 +1890,8 @@ static int dpaa2_switch_port_attr_set_event(struct net_device *netdev, } static int dpaa2_switch_port_bridge_join(struct net_device *netdev, - struct net_device *upper_dev) + struct net_device *upper_dev, + struct netlink_ext_ack *extack) { struct ethsw_port_priv *port_priv = netdev_priv(netdev); struct ethsw_core *ethsw = port_priv->ethsw_data; @@ -1906,8 +1907,8 @@ static int dpaa2_switch_port_bridge_join(struct net_device *netdev, other_port_priv = netdev_priv(other_dev); if (other_port_priv->ethsw_data != port_priv->ethsw_data) { - netdev_err(netdev, - "Interface from a different DPSW is in the bridge already!\n"); + NL_SET_ERR_MSG_MOD(extack, + "Interface from a different DPSW is in the bridge already"); return -EINVAL; } } @@ -2067,7 +2068,9 @@ static int dpaa2_switch_port_netdevice_event(struct notifier_block *nb, upper_dev = info->upper_dev; if (netif_is_bridge_master(upper_dev)) { if (info->linking) - err = dpaa2_switch_port_bridge_join(netdev, upper_dev); + err = dpaa2_switch_port_bridge_join(netdev, + upper_dev, + extack); else err = dpaa2_switch_port_bridge_leave(netdev); } From patchwork Tue Jul 20 13:46:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 482015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1289FC07E9B for ; Tue, 20 Jul 2021 13:48:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E9C5B61186 for ; Tue, 20 Jul 2021 13:48:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239104AbhGTNIF (ORCPT ); Tue, 20 Jul 2021 09:08:05 -0400 Received: from mail-eopbgr10088.outbound.protection.outlook.com ([40.107.1.88]:40467 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S238689AbhGTNGs (ORCPT ); Tue, 20 Jul 2021 09:06:48 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SpBHTlyPJvf32276aAz4JXPMUyue+DDewwRwU2TAPRtkOyxxzvQaeFdC43+Tpj1TbBNkZdQMJQT2mMbN3wfiT2z4OsPLbhgJN9O8BNYSSrXjRIn0f6W+fjcnnskleVwszVziHX8SBAvNFrLFarbbJ7bspXGxooNpi2yWcmwyJ+8YngZrsGNj1P5Yxry6S/rMyjC9ZDm4CgN4Sx48ew2etx8GJllfDFnriYna67YT9RnqDx1WzvOch7UTutKJ0RT9cBQyjW213ezQWeXwW3oNJ1sfAPvr/mpdU8DgKr+2ehsEVfbebNJ7e/AnmlDKinv9BMy+7PwxN0W1z/SMxk74iQ== 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-SenderADCheck; bh=6j4DWG2oB5ZSG+uXAIUIJKSEvSTanwfJbyyxTGGzw0Y=; b=dajBdlsGvOlpyJ8Z9/q6BO//3ircp0Ml2zkiqVz/IF8h86ZaFNlQrovN/KLd8HPRin2uNV4dvqGQabd26fiClsEJglp0r+UOaUTdqcufa7no1rXcK8FjZ/tKC4C+M+j9lRNsf4jn/xdHB2QHC2hIeTEChTrFmYX/u+stteEsBSEjXntxiQUt68wWapOCrtY/Xgu526hIOZvcD30N0IrGNImdcLZKqyLN996STZWUK+15apFxTMtvoUzU/vEfL5UuBZqoANTAiK6+in3oG05tIvvzw3tsNkonndmZRqOCSdHfTjP9a/FTMOtTPK31N4XYd3CTRE4ntwPKddb1+b8hGg== 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=6j4DWG2oB5ZSG+uXAIUIJKSEvSTanwfJbyyxTGGzw0Y=; b=PW8gvqGqTYnVmSdMQb93UCI69MTUPKCDBYmic1ibYB02abVselUVdprbqhjD2WxdN++pMCLRH8rx9Hu3S8lkqoLObBIe+qvnBpavnoVLxuH+sSkZo3HYjG4IJ53ggLR9f6nWAN/IWAgDqPN6gcQLnoidyl4lbgY8TRDfEu07LGA= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by VI1PR0402MB3551.eurprd04.prod.outlook.com (2603:10a6:803:a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.29; Tue, 20 Jul 2021 13:47:16 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0%2]) with mapi id 15.20.4331.034; Tue, 20 Jul 2021 13:47:15 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Stephen Hemminger , bridge@lists.linux-foundation.org, Grygorii Strashko , Marek Behun , DENG Qingfang Subject: [PATCH v5 net-next 03/10] mlxsw: spectrum: refactor prechangeupper sanity checks Date: Tue, 20 Jul 2021 16:46:48 +0300 Message-Id: <20210720134655.892334-4-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210720134655.892334-1-vladimir.oltean@nxp.com> References: <20210720134655.892334-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: PR3P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::7) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (82.76.66.29) by PR3P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.19 via Frontend Transport; Tue, 20 Jul 2021 13:47:14 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: de46b773-523c-4ab1-93ed-08d94b84e235 X-MS-TrafficTypeDiagnostic: VI1PR0402MB3551: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HO9MowUSWnPVxxfjlHV/KWrsmwcansO13dLFEMayp7HEBycVwOSR/qPCstUcnXovWLY+RXOgTpgWBvlNhHxi/V2upv3sp8o2BDLCvIcib/6gikbJNtv7vOwUVtw2y6J5L66HZwJYVWkv5z4wv2u5mtrZDklRxA8DQPr7KQ+DUPm1kfXFvlv0GS/8+N0qON207JPitMUvhy+QFu1W35Gb326KFDe0t0ge4A4IKlmMErREpL08Xwp/6ohGFS0hOGTbEmFXGYfZb+Pu+RzMJ1yj4IQbAx9SMr57b5ZLVlB0H8MlRqDTzo3eMWG56kwzGu/Y9RqD+SFexVR9yKdXA33SR4oFUWQM++irC7BvX6iqXgZdO88J0GKB5Q6HtAt9l9E8jAyVPURYKv0oK8Da6UP2P2gMiW1m0/TB5ucwEQHbrsrQ8ZnUAENjWq5ASdOF/g19lGY7LzA5ClJzDCqA8rqdUWUV2J/K1Xu7srGvOVQ+Wrw6zqR5BBZNo10Kh+Vlg1T7Khac9aXV6fiLn74QgWPl40Kl5z3oL2MvcArCFpHESZQmfgjGZaewjRDyDKyR1cpCZs/Yr9zDU3GdRma/IeYx4p8EXCkxdrWazd/Zs61GOkgZBNdi8TPiZ0FrCSWwg4ehQLYrfzQjd9XtYKTJNwZQnwSGCV8y49Dfd0ZPv+Cu/J/lV2dKPEwxOZo0/1dukDZsdZpPYpjfqvkclTU+Mx2Owg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR04MB5136.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(346002)(39860400002)(396003)(136003)(366004)(478600001)(44832011)(316002)(30864003)(38100700002)(2616005)(956004)(5660300002)(6486002)(54906003)(1076003)(38350700002)(66574015)(2906002)(66946007)(6512007)(7416002)(110136005)(86362001)(83380400001)(66476007)(8936002)(186003)(4326008)(66556008)(6506007)(6666004)(26005)(36756003)(8676002)(52116002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nBp6N964XEauaYrA8KGAMlk4KVuBM9rNGniJxMiLR+pLDnRKJ0uVI2fNP4QGyfQKePMRgoGWn86zz7CKb/Hj5qDJ6dx77UtD6xA/2pnwJJTFAayGpyrtxbXshK6EBwHMEXgtFLn4s0Py9BIOD+Pa0sxWt/LcFB7w5fiRfZHHKJueJ/uJHaUmuI6QdBRLK3Hk5yE6oMcsQhTcNv888sYk6PqbPZOJlQW9Ron7UfI0y1KUgJV3zwcyb3rTinuJzNwqWcmLX11q9XgXygQQvVHRxZwT9VPpTuDmJVdBWunWZHrR6UZhy2ATqhkXQaydMC08BaFkFne6tz2LckV7HILebiN8XMw92gsHw9/T16NFfqhRg9oGHugTvEpdbjqNjsJC8nNEByNvWWz5lj4DD+wF1Mfz4+F3VY0zVgpDZUuZnA5A/+2cM6GMOjNVKNJN5EFG5PvVP+DoHPgl6PLWyLqBlktzIwcwT2RMTTBO8ZIacbCxH+uVnIcL0QF3bLJswGSS1Mz0B9bu70t9Wo5qjAUdstuAOX+g9QW6ba9IRR4D6duULfkaBX8a5uQftM/9tnV/8a6m6UIVDtfTK1/VWRbxb8FLfB8O8ruD8zqP6ZIzrKZZtmlcTVh8SjrkiWwHLgDdl9NEVhbG/26Mb7eOTWS6dnlXYuhTikDsAAClyld4Fk1CIUmnqcn/P+k6BerHJGLh3WBBA7yhHa6vZTku94FjKmb2L4e9rwmm5s5aa0+oX/BEZl4LimPWBsD5h1B3n43hAnZH0YX6YNRHCzPBA0UcFVBOado46C9uaHfBLTVGQDBrsyy8fGJo0MC11Tvw4Q8ESvegJxdDG8orKkcmGrO2T8JYhl7oufTEigI+ycXsoao0CEJTrvBtbccWaxkJ9+NX04zfnDQm+Sbxy33/1NTByM5npKVvObxjL822GHUt7LoBcvSWgIHAOdD2Xihikm0MMgjbw72vORFnmeWNEK/k9LO4ps7q38qV0FbNX9ay4eTU9jJ/NrvX4TOKJ4XULCWeNsYbo7JU4UeewkhqIXVmwFNex6f6gbsvgdBrlzTtM1P/0zSIJU7fYkTxgp5HXtDIeSUS7IG9Rc+pePfAEt0F8RfNEvDXIkPymrgbmBR2OcPdvneSWLoQ294VvGlDV2rWBDDvwgNh6QbeNgUHCYW67B6AXJworN/fnBm+xSno0TLPBEtBekj754hEw9SXIeb4SqmqJeOs1A+l5UiOYr+81f1rLVcO8lgH3B5JMjMNOsi9e1fuYWcc2F6FOw6G+t2DnwA9YDrtWgfvzv1azNK5Mq9NTRQ249kZuglWGIq9sztVD/QFthyWfltAeYdCq5Ru X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: de46b773-523c-4ab1-93ed-08d94b84e235 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2021 13:47:15.4623 (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: wVrNO1bO/yKlq7cbKzwtP3BYM4pq0IacFDN/G3p2k4dvH/y/FmtE3h1q7e4fFVRYdPj3Im4ewIsjNaY2eezxJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3551 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Make more room for extra code in the NETDEV_PRECHANGEUPPER handlers from mlxsw by moving the existing sanity checks to 2 new dedicated functions. Signed-off-by: Vladimir Oltean Reviewed-by: Florian Fainelli --- v2->v3: patch is new v3->v5: none .../net/ethernet/mellanox/mlxsw/spectrum.c | 272 +++++++++++------- 1 file changed, 169 insertions(+), 103 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 88699e678544..c1b78878e5cf 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -4055,6 +4055,118 @@ static bool mlxsw_sp_bridge_vxlan_is_valid(struct net_device *br_dev, return true; } +static int +mlxsw_sp_prechangeupper_sanity_checks(struct mlxsw_sp *mlxsw_sp, + struct net_device *dev, + struct net_device *lower_dev, + struct net_device *upper_dev, + struct netdev_notifier_changeupper_info *info, + struct netlink_ext_ack *extack) +{ + u16 proto; + + if (!is_vlan_dev(upper_dev) && + !netif_is_lag_master(upper_dev) && + !netif_is_bridge_master(upper_dev) && + !netif_is_ovs_master(upper_dev) && + !netif_is_macvlan(upper_dev)) { + NL_SET_ERR_MSG_MOD(extack, "Unknown upper device type"); + return -EINVAL; + } + + if (!info->linking) + return 0; + + if (netif_is_bridge_master(upper_dev) && + !mlxsw_sp_bridge_device_is_offloaded(mlxsw_sp, upper_dev) && + mlxsw_sp_bridge_has_vxlan(upper_dev) && + !mlxsw_sp_bridge_vxlan_is_valid(upper_dev, extack)) + return -EOPNOTSUPP; + + if (netdev_has_any_upper_dev(upper_dev) && + (!netif_is_bridge_master(upper_dev) || + !mlxsw_sp_bridge_device_is_offloaded(mlxsw_sp, + upper_dev))) { + NL_SET_ERR_MSG_MOD(extack, + "Enslaving a port to a device that already has an upper device is not supported"); + return -EINVAL; + } + + if (netif_is_lag_master(upper_dev) && + !mlxsw_sp_master_lag_check(mlxsw_sp, upper_dev, + info->upper_info, extack)) + return -EINVAL; + + if (netif_is_lag_master(upper_dev) && vlan_uses_dev(dev)) { + NL_SET_ERR_MSG_MOD(extack, + "Master device is a LAG master and this device has a VLAN"); + return -EINVAL; + } + + if (netif_is_lag_port(dev) && is_vlan_dev(upper_dev) && + !netif_is_lag_master(vlan_dev_real_dev(upper_dev))) { + NL_SET_ERR_MSG_MOD(extack, "Can not put a VLAN on a LAG port"); + return -EINVAL; + } + + if (netif_is_macvlan(upper_dev) && + !mlxsw_sp_rif_exists(mlxsw_sp, lower_dev)) { + NL_SET_ERR_MSG_MOD(extack, + "macvlan is only supported on top of router interfaces"); + return -EOPNOTSUPP; + } + + if (netif_is_ovs_master(upper_dev) && vlan_uses_dev(dev)) { + NL_SET_ERR_MSG_MOD(extack, + "Master device is an OVS master and this device has a VLAN"); + return -EINVAL; + } + + if (netif_is_ovs_port(dev) && is_vlan_dev(upper_dev)) { + NL_SET_ERR_MSG_MOD(extack, "Can not put a VLAN on an OVS port"); + return -EINVAL; + } + + if (netif_is_bridge_master(upper_dev)) { + br_vlan_get_proto(upper_dev, &proto); + if (br_vlan_enabled(upper_dev) && + proto != ETH_P_8021Q && proto != ETH_P_8021AD) { + NL_SET_ERR_MSG_MOD(extack, + "Enslaving a port to a bridge with unknown VLAN protocol is not supported"); + return -EOPNOTSUPP; + } + if (vlan_uses_dev(lower_dev) && + br_vlan_enabled(upper_dev) && + proto == ETH_P_8021AD) { + NL_SET_ERR_MSG_MOD(extack, + "Enslaving a port that already has a VLAN upper to an 802.1ad bridge is not supported"); + return -EOPNOTSUPP; + } + } + + if (netif_is_bridge_port(lower_dev) && is_vlan_dev(upper_dev)) { + struct net_device *br_dev = netdev_master_upper_dev_get(lower_dev); + + if (br_vlan_enabled(br_dev)) { + br_vlan_get_proto(br_dev, &proto); + if (proto == ETH_P_8021AD) { + NL_SET_ERR_MSG_MOD(extack, + "VLAN uppers are not supported on a port enslaved to an 802.1ad bridge"); + return -EOPNOTSUPP; + } + } + } + + if (is_vlan_dev(upper_dev) && + ntohs(vlan_dev_vlan_proto(upper_dev)) != ETH_P_8021Q) { + NL_SET_ERR_MSG_MOD(extack, + "VLAN uppers are only supported with 802.1q VLAN protocol"); + return -EOPNOTSUPP; + } + + return 0; +} + static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev, struct net_device *dev, unsigned long event, void *ptr) @@ -4065,7 +4177,6 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev, struct net_device *upper_dev; struct mlxsw_sp *mlxsw_sp; int err = 0; - u16 proto; mlxsw_sp_port = netdev_priv(dev); mlxsw_sp = mlxsw_sp_port->mlxsw_sp; @@ -4075,84 +4186,15 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev, switch (event) { case NETDEV_PRECHANGEUPPER: upper_dev = info->upper_dev; - if (!is_vlan_dev(upper_dev) && - !netif_is_lag_master(upper_dev) && - !netif_is_bridge_master(upper_dev) && - !netif_is_ovs_master(upper_dev) && - !netif_is_macvlan(upper_dev)) { - NL_SET_ERR_MSG_MOD(extack, "Unknown upper device type"); - return -EINVAL; - } - if (!info->linking) - break; - if (netif_is_bridge_master(upper_dev) && - !mlxsw_sp_bridge_device_is_offloaded(mlxsw_sp, upper_dev) && - mlxsw_sp_bridge_has_vxlan(upper_dev) && - !mlxsw_sp_bridge_vxlan_is_valid(upper_dev, extack)) - return -EOPNOTSUPP; - if (netdev_has_any_upper_dev(upper_dev) && - (!netif_is_bridge_master(upper_dev) || - !mlxsw_sp_bridge_device_is_offloaded(mlxsw_sp, - upper_dev))) { - NL_SET_ERR_MSG_MOD(extack, "Enslaving a port to a device that already has an upper device is not supported"); - return -EINVAL; - } - if (netif_is_lag_master(upper_dev) && - !mlxsw_sp_master_lag_check(mlxsw_sp, upper_dev, - info->upper_info, extack)) - return -EINVAL; - if (netif_is_lag_master(upper_dev) && vlan_uses_dev(dev)) { - NL_SET_ERR_MSG_MOD(extack, "Master device is a LAG master and this device has a VLAN"); - return -EINVAL; - } - if (netif_is_lag_port(dev) && is_vlan_dev(upper_dev) && - !netif_is_lag_master(vlan_dev_real_dev(upper_dev))) { - NL_SET_ERR_MSG_MOD(extack, "Can not put a VLAN on a LAG port"); - return -EINVAL; - } - if (netif_is_macvlan(upper_dev) && - !mlxsw_sp_rif_exists(mlxsw_sp, lower_dev)) { - NL_SET_ERR_MSG_MOD(extack, "macvlan is only supported on top of router interfaces"); - return -EOPNOTSUPP; - } - if (netif_is_ovs_master(upper_dev) && vlan_uses_dev(dev)) { - NL_SET_ERR_MSG_MOD(extack, "Master device is an OVS master and this device has a VLAN"); - return -EINVAL; - } - if (netif_is_ovs_port(dev) && is_vlan_dev(upper_dev)) { - NL_SET_ERR_MSG_MOD(extack, "Can not put a VLAN on an OVS port"); - return -EINVAL; - } - if (netif_is_bridge_master(upper_dev)) { - br_vlan_get_proto(upper_dev, &proto); - if (br_vlan_enabled(upper_dev) && - proto != ETH_P_8021Q && proto != ETH_P_8021AD) { - NL_SET_ERR_MSG_MOD(extack, "Enslaving a port to a bridge with unknown VLAN protocol is not supported"); - return -EOPNOTSUPP; - } - if (vlan_uses_dev(lower_dev) && - br_vlan_enabled(upper_dev) && - proto == ETH_P_8021AD) { - NL_SET_ERR_MSG_MOD(extack, "Enslaving a port that already has a VLAN upper to an 802.1ad bridge is not supported"); - return -EOPNOTSUPP; - } - } - if (netif_is_bridge_port(lower_dev) && is_vlan_dev(upper_dev)) { - struct net_device *br_dev = netdev_master_upper_dev_get(lower_dev); - - if (br_vlan_enabled(br_dev)) { - br_vlan_get_proto(br_dev, &proto); - if (proto == ETH_P_8021AD) { - NL_SET_ERR_MSG_MOD(extack, "VLAN uppers are not supported on a port enslaved to an 802.1ad bridge"); - return -EOPNOTSUPP; - } - } - } - if (is_vlan_dev(upper_dev) && - ntohs(vlan_dev_vlan_proto(upper_dev)) != ETH_P_8021Q) { - NL_SET_ERR_MSG_MOD(extack, "VLAN uppers are only supported with 802.1q VLAN protocol"); - return -EOPNOTSUPP; - } + + err = mlxsw_sp_prechangeupper_sanity_checks(mlxsw_sp, + dev, lower_dev, + upper_dev, + info, + extack); + if (err) + return err; + break; case NETDEV_CHANGEUPPER: upper_dev = info->upper_dev; @@ -4260,6 +4302,46 @@ static int mlxsw_sp_netdevice_lag_event(struct net_device *lag_dev, return 0; } +static int +mlxsw_sp_vlan_prechangeupper_sanity_checks(struct mlxsw_sp *mlxsw_sp, + struct net_device *vlan_dev, + struct net_device *upper_dev, + struct netdev_notifier_changeupper_info *info, + struct netlink_ext_ack *extack) +{ + if (!netif_is_bridge_master(upper_dev) && + !netif_is_macvlan(upper_dev)) { + NL_SET_ERR_MSG_MOD(extack, "Unknown upper device type"); + return -EINVAL; + } + + if (!info->linking) + return 0; + + if (netif_is_bridge_master(upper_dev) && + !mlxsw_sp_bridge_device_is_offloaded(mlxsw_sp, upper_dev) && + mlxsw_sp_bridge_has_vxlan(upper_dev) && + !mlxsw_sp_bridge_vxlan_is_valid(upper_dev, extack)) + return -EOPNOTSUPP; + + if (netdev_has_any_upper_dev(upper_dev) && + (!netif_is_bridge_master(upper_dev) || + !mlxsw_sp_bridge_device_is_offloaded(mlxsw_sp, + upper_dev))) { + NL_SET_ERR_MSG_MOD(extack, + "Enslaving a port to a device that already has an upper device is not supported"); + return -EINVAL; + } + + if (netif_is_macvlan(upper_dev) && + !mlxsw_sp_rif_exists(mlxsw_sp, vlan_dev)) { + NL_SET_ERR_MSG_MOD(extack, "macvlan is only supported on top of router interfaces"); + return -EOPNOTSUPP; + } + + return 0; +} + static int mlxsw_sp_netdevice_port_vlan_event(struct net_device *vlan_dev, struct net_device *dev, unsigned long event, void *ptr, @@ -4277,30 +4359,14 @@ static int mlxsw_sp_netdevice_port_vlan_event(struct net_device *vlan_dev, switch (event) { case NETDEV_PRECHANGEUPPER: upper_dev = info->upper_dev; - if (!netif_is_bridge_master(upper_dev) && - !netif_is_macvlan(upper_dev)) { - NL_SET_ERR_MSG_MOD(extack, "Unknown upper device type"); - return -EINVAL; - } - if (!info->linking) - break; - if (netif_is_bridge_master(upper_dev) && - !mlxsw_sp_bridge_device_is_offloaded(mlxsw_sp, upper_dev) && - mlxsw_sp_bridge_has_vxlan(upper_dev) && - !mlxsw_sp_bridge_vxlan_is_valid(upper_dev, extack)) - return -EOPNOTSUPP; - if (netdev_has_any_upper_dev(upper_dev) && - (!netif_is_bridge_master(upper_dev) || - !mlxsw_sp_bridge_device_is_offloaded(mlxsw_sp, - upper_dev))) { - NL_SET_ERR_MSG_MOD(extack, "Enslaving a port to a device that already has an upper device is not supported"); - return -EINVAL; - } - if (netif_is_macvlan(upper_dev) && - !mlxsw_sp_rif_exists(mlxsw_sp, vlan_dev)) { - NL_SET_ERR_MSG_MOD(extack, "macvlan is only supported on top of router interfaces"); - return -EOPNOTSUPP; - } + + err = mlxsw_sp_vlan_prechangeupper_sanity_checks(mlxsw_sp, + vlan_dev, + upper_dev, + info, extack); + if (err) + return err; + break; case NETDEV_CHANGEUPPER: upper_dev = info->upper_dev; From patchwork Tue Jul 20 13:46:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 482013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CCA6DC636CA for ; Tue, 20 Jul 2021 13:52:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AFFED61221 for ; Tue, 20 Jul 2021 13:52:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231776AbhGTNME (ORCPT ); Tue, 20 Jul 2021 09:12:04 -0400 Received: from mail-eopbgr130074.outbound.protection.outlook.com ([40.107.13.74]:25504 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S238009AbhGTNHT (ORCPT ); Tue, 20 Jul 2021 09:07:19 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EBUcreYpTI6KA65xw5AqjHX60SJsYm9nsqkcxCdTANOOW5goPQyv8wpP70daTxAc4jDuQGDc79TSvcN+j+tgs6b/28qOHtDtVs/MID0xd41e5fYj5edpbMpiCC3M0KFxewy188JC9kA236C8MG+GXUNsJpRPXT/HVf2BMHer3Wxayuor0QFLNM8m0XNiTQhVbrXoF02tHOqnNf/OjNmZljjWILSDUvN8GOgVC6cUKPk1e4RWxP+wjxUT3aF3HfM6e2XMQhBRzIu0qMtcD3JjhGP+fY67KlyswuH8qd0NySgC8N3x0JRNcDiOCFrnf7Blw7Ze5L6O1OjdalKa6Xvvog== 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-SenderADCheck; bh=5NwT0Lcz2EF0/jNw7fQ1Gxfv28nsd+8u+Xgwk9fQA94=; b=ZeEi3GxLr5r+MY/UyicijePt2BhNC4Om12Z2/qtDzcjzVNm3Zg95W8NGfrJ6Hzs/+wHb2YwP/BVp3IQaoxJ5V6QF4XDOVc4QOnTJqeCM+vBQncA4/JN0nP99wx9qCkADJcjsJGuomR65x5+J723UDLeQ43oyoSJ1oqe/0iHScbKICodNjlPRw1Adckvu2vd+BsJeZDDFpL9oupblAU29KS4+LFLjx65q6+IrdsP2v6LNnxpbbLPqmXSLGD6HpNmZDRD5GW+9mUgbF/QT4HX2XpEcg1HhJcUndJP2xPlYBQQTF1RxAiISr3QwVxAlVSVUY5BCcEOWS7f7r/jI+jp0hg== 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=5NwT0Lcz2EF0/jNw7fQ1Gxfv28nsd+8u+Xgwk9fQA94=; b=NdohlsnPhkPFoBu6eKUCcWEZpug758hCBlWARd45qZZO8JDWRRSGLPaX1mFa+kiWmktDz6P1ijh54xvvuBCOX2jPaihLU7hLgbMUCB7X1PFGPAfpjbIOQSoLgX3Tea5Lu6QHC28jGJBB/VuBx1nZX8J3bzMJdxeEim/DSbVqMhM= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by VI1PR0402MB3551.eurprd04.prod.outlook.com (2603:10a6:803:a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.29; Tue, 20 Jul 2021 13:47:17 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0%2]) with mapi id 15.20.4331.034; Tue, 20 Jul 2021 13:47:17 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Stephen Hemminger , bridge@lists.linux-foundation.org, Grygorii Strashko , Marek Behun , DENG Qingfang Subject: [PATCH v5 net-next 04/10] mlxsw: spectrum: refactor leaving an 8021q upper that is a bridge port Date: Tue, 20 Jul 2021 16:46:49 +0300 Message-Id: <20210720134655.892334-5-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210720134655.892334-1-vladimir.oltean@nxp.com> References: <20210720134655.892334-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: PR3P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::7) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (82.76.66.29) by PR3P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.19 via Frontend Transport; Tue, 20 Jul 2021 13:47:15 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0c4c2649-c653-4828-b2a5-08d94b84e324 X-MS-TrafficTypeDiagnostic: VI1PR0402MB3551: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:626; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gNYcxaAmJ3bpgDu1fA89L2v1Boun2JyHQuVR07sFd/qN8vcLsuImzmkZ8yTvuQLaK2UxyzA/HLo5I+q+vVoM5xecy22sXhG1UcvU3iBeRD/H/b4eMtNO87b3/lRhV2fkL4WTaqbNoUZsS4HQ6Zr/es8w7ZqN8gEL79c4eA2e1MmhoP2enaAmCn+BsMaim3C1QRIbkxGI9zAE++KFc8k85flKbWCxMkp331VY5azCRpHIxe/Y2tslsBdx5Jor7t3mmyEpCG/yarB8z95kkh2z/cE8bsiK9AzL6hkJBtn/w/qLIfx9pcMsFbP9Z2E3HVzOtNptadu/lof0zcIgP2bkvAQud7To/waBEUXfd1WBgybSzv42zdN2IfH6DQB3wFAlBgo75fiAeuCSQcm8gjNx1R0ldnVrflZKcQc5Se327MtchADsS+fyDP2PwQix47sWEwgxWQ5ZwobmIpyGCicZ8MRfK1Kz1LP145tCjvSa7hp8zPthd7nUJ3TADWHk0VsWaqzvJxk1ifl/SsbcnJ6QoCyay8d1vp0eh6Wrp8In1vOTnwmpm1aDEWferSKMTi8MBkqmO0r97K5hZwG3/TCt8RA7ORTdaIRbnAcgzoEVrmELIzgyz/hZuXSIe9/f5Vewkincw5HHi1211W5X1BYkQSL82GV243/geP3pa1DOht3/6JpjEA4MKqBq438njZp5 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR04MB5136.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(346002)(39860400002)(396003)(136003)(366004)(478600001)(44832011)(316002)(38100700002)(2616005)(956004)(5660300002)(6486002)(54906003)(1076003)(38350700002)(2906002)(66946007)(6512007)(7416002)(110136005)(86362001)(83380400001)(66476007)(8936002)(186003)(4326008)(66556008)(6506007)(6666004)(26005)(36756003)(8676002)(52116002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /K+J8yA1lpaDo2PHT7D+qDhslZBJW8B4KwRn/ksszbC0/WtfDJj5/acAvA1W5GwPZwnkWagmzTpCj/z467d/HpOgmS0AJtEyHojUA7IirgT1BJUDL41DlJyB8Y5HXMW5cEN6YV1TOHwIOklL31CKX8DppF1pf5Ml7GgSuWB36WDTmCbJtxAt2XCx81Aw5dy2wpmiNH4bHWkCpyPDv52ukhDwkh6ohCn4zcFpUTg8yWoOuamr1EydE3X00vyFyGvAwv4UVVkcXbrl9/eA0/SVDvLeaQYYQaTWDNsolZ7hsKrTVckdsktdijhAXPRItdCSbScpee3hpL2Th4n7bK24C34b5u/NzolchNSs+8Im3H0ao3EsW+Z+w6hQM1YlJj5gHd8ZyMa5HcTc/mv2fClvCYqqLw2xAPqIXA5cYzJ2l0+uX8Qgxl31/IN+lOx5fMCwCWPKCGwnWCY9uD1U6vmmVgEu3gg0y/qUFuTbHszZDCTrtXuWOHB2Uq421udnPQu0bZr8CduCYmtWeBrT4vjdxguPOWo3Zg/03qzECA0HMVWWaoVe522rdzFgecGwIRSy6oqXIjSprn17Z4Y4VVsPIAbMWNEbMvNQDwz0jNzSzBwqcsdVFU+OVZvL48CvpwTR0GSUdm1JwlQFWp5O2mqXs/Md/MumtLhBJ039do5YV0Dl/UvtvQDdzZzPAtGXjVr2hmUAyyLK4RFoAyru08ZJynm9vN46fIpLkkhc1XNwzq8KxS/KcwJqntzmlSCn96gkkCHV57a9KHifMMWtcJ4Q2XrpwndHnCWJqx/eohcYukvJqZCODfZ0iO7Hl8djHE7z+7uimkynFxPzSsr7lEAxmISZ8qiCaqLpQswL4MgYEael1nGpiY7QrIEdYXCpvznPeYIFVEHmwz/bEybH9bBzM5eKyw3D78fIXQWuKJQZh3TIxJnHpVpUAnm74T/3hqwUbumIBCOpFIY4vKXrB+RnuU6yeK4kEcxwA00+CBY0AqSmD5e1JPpsBhjV0pMoK37MIC70l/IV6L/tQiNv+g59/IFG+8a5dLZv/5Sq6LPFm3WuAknejJJHQxAUjbEt7RifB2LrCqA6Ls+kQ6z0hQMVegrLfr3TCMJyUVgfutENxBfw5J3ux7NOXggcLsvoOknhfPeWCJXvRgfdYYSROFZNFhr11hyFkJBkM7Lrqc8Zp12kaYAdK0MQ3ZW9SSYApcsId0f6N6P6KDm8GVnpRoq1nc/Fipj01xeRl0wJ6w8oNMx1LOVEk3TqGqXK9Tqu0dmaTclw3KRJ8DKZpTTgNNQXcDaGvqk5mgd2yegZyRGwcXUzMuDyhFkdS0Mal/C5odv6 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c4c2649-c653-4828-b2a5-08d94b84e324 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2021 13:47:17.0004 (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: +askNWNL5RnQvHzrN3w6QmKwiirUwCtdT7Gsrh5lCoTIV6dQguGB7molrBpu3SboUPV152L+YBIdSITNzqSI/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3551 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org For symmetry with mlxsw_sp_port_lag_leave(), introduce a small function called mlxsw_sp_port_vlan_leave() which checks whether the 8021q upper we're leaving is a bridge port, and if it is, stop offloading that bridge too. Signed-off-by: Vladimir Oltean Reviewed-by: Florian Fainelli --- v3->v4: patch is new v4->v5: none .../net/ethernet/mellanox/mlxsw/spectrum.c | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index c1b78878e5cf..b3d1fdc2d094 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -3994,6 +3994,19 @@ static void mlxsw_sp_port_ovs_leave(struct mlxsw_sp_port *mlxsw_sp_port) mlxsw_sp_port_vp_mode_set(mlxsw_sp_port, false); } +static void mlxsw_sp_port_vlan_leave(struct mlxsw_sp_port *mlxsw_sp_port, + struct net_device *vlan_dev) +{ + struct net_device *br_dev; + + if (!netif_is_bridge_port(vlan_dev)) + return; + + br_dev = netdev_master_upper_dev_get(vlan_dev); + + mlxsw_sp_port_bridge_leave(mlxsw_sp_port, vlan_dev, br_dev); +} + static bool mlxsw_sp_bridge_has_multiple_vxlans(struct net_device *br_dev) { unsigned int num_vxlans = 0; @@ -4225,16 +4238,8 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev, } else if (netif_is_macvlan(upper_dev)) { if (!info->linking) mlxsw_sp_rif_macvlan_del(mlxsw_sp, upper_dev); - } else if (is_vlan_dev(upper_dev)) { - struct net_device *br_dev; - - if (!netif_is_bridge_port(upper_dev)) - break; - if (info->linking) - break; - br_dev = netdev_master_upper_dev_get(upper_dev); - mlxsw_sp_port_bridge_leave(mlxsw_sp_port, upper_dev, - br_dev); + } else if (is_vlan_dev(upper_dev) && !info->linking) { + mlxsw_sp_port_vlan_leave(mlxsw_sp_port, upper_dev); } break; } From patchwork Tue Jul 20 13:46:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 482014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D351C07E9B for ; Tue, 20 Jul 2021 13:51:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 596D461164 for ; Tue, 20 Jul 2021 13:51:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239197AbhGTNJA (ORCPT ); Tue, 20 Jul 2021 09:09:00 -0400 Received: from mail-eopbgr10049.outbound.protection.outlook.com ([40.107.1.49]:24800 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S239127AbhGTNH5 (ORCPT ); Tue, 20 Jul 2021 09:07:57 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cT1OCMTE/MXwDhOg7W5HTYrRnwJ9uMYaAEbB4vBMKHq9YXgEQMU7jjcTI5o188kIzfdXi/1hfn+ooLZ3gWZUpz3U8kTn0OdIYyUAiAGYNqNPVj7eJZp6Al2F5hsoAP/5TWljTn7fZmLg7hVgrNSMmy/x16QbnTx+WLISQBa2w9wd9Qo6mCLyGHQjLIel5jSiYQ3KRwU/sOmQF94HQeyIph09mpkCayIpZW1q+9wxUU74wW7Gq0ebcjcKFu2MGqE8lbY4er/iJTKfvqI41VW65BBc0AAJC4FCWqiXclLnZ03Jajk6ycKggMxQxi0UHw4R6+b6pUfdXl0swupnUJxZ+g== 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-SenderADCheck; bh=ZZeVkdUo9AgVcRq5x3qHUTusEo8IboIcSbT6PnN2pdQ=; b=fKntnBfAmZqK+CfmhUEXxcdW9F6XssyvklFk+OOJG4A0FgAmNozDnwVwzytMBD7K3SroZUGscv8thASTiLSYHZNaMbtYzoTYWjge6prrqwx7MgHufVBJ2IG4C3JTGNBcCNVaglSCbEmhrAbxC3BzlZ7dEGtm5mZekOjF2mBXXjj6NDwAUx9G83Zs4W//d27pMqGQSwoZaWzc4J01Yr6FIAV88DylQlUbQ3FhS6W4ah6IUVCNPwIq5FxK/djelfGgaQLsicoLQ7XrtzIgXXGC9L4zg9RuRaAVERXNgoLOqrvmNzOrdwAaGgmGSfgSzi7iz1emF+cyXGzMAn1gZsiwLQ== 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=ZZeVkdUo9AgVcRq5x3qHUTusEo8IboIcSbT6PnN2pdQ=; b=FcbtibWpJvXgXtZ5Nfp9llJTgccT94BF4F+iAd+rDCREX+4bDk4nTjeOsUfhBrjWWDsfh8P4+mbC6aIUiYXyxCitOv85+x4LJdTxYKHp0Jo8RSFZh8JZElAN5fo9doqGw55q1uxyBQSYWc7cOZzd1OMuQnq8jSbzSgxMy7pbkgg= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by VI1PR0402MB3551.eurprd04.prod.outlook.com (2603:10a6:803:a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.29; Tue, 20 Jul 2021 13:47:22 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::109:1995:3e6b:5bd0%2]) with mapi id 15.20.4331.034; Tue, 20 Jul 2021 13:47:22 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" Cc: Andrew Lunn , Florian Fainelli , Vivien Didelot , Jiri Pirko , Ido Schimmel , Tobias Waldekranz , Roopa Prabhu , Nikolay Aleksandrov , Stephen Hemminger , bridge@lists.linux-foundation.org, Grygorii Strashko , Marek Behun , DENG Qingfang Subject: [PATCH v5 net-next 08/10] net: bridge: switchdev: recycle unused hwdoms Date: Tue, 20 Jul 2021 16:46:53 +0300 Message-Id: <20210720134655.892334-9-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210720134655.892334-1-vladimir.oltean@nxp.com> References: <20210720134655.892334-1-vladimir.oltean@nxp.com> X-ClientProxiedBy: PR3P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::7) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (82.76.66.29) by PR3P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:102:54::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.19 via Frontend Transport; Tue, 20 Jul 2021 13:47:21 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ef202e85-a795-4790-07c3-08d94b84e692 X-MS-TrafficTypeDiagnostic: VI1PR0402MB3551: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: v6WNXLeqhHcj3T0YH7VwjCgYfzzF2rB8WjRvC+lTTcCrLmnVqOlTlELKfF2iVJznYS2PiOz7tRJOjC4PsUOXcmdocjvwoTkVFpFQrJKW5s2UPJvh5Tp7wGWLYWuvEm48psddwsEH4g5otilEmJHLoxV73T30HLAm2SLVDMLRJvWe128jbh0ZMCdg7wUOOyEqE8gdYxJg65EKncaS9oMcGMsz+MJAXPeOB0cYVtK9iTUts4/1RGk4q8BLynzfO4zywWVjmi4N7FFGjAyrLQkSllRpKfbxoIXDdOZlrKpxjA2u/pyhO8NaoUDF11uFbBrgvVtPxR4o6AVih2JrnaTc/XPvnL6JegUKV0m+Vbv+RpDx8k+sN+Tdf6y20sJEWWhe+XgNvzmlRQbCb3+Nvb7dZywxK/tx24zQF7y777YNsWx7bO8rBCsSbUGTFC7xpLQmFpEii0ndpjp3639dpH108cOJPevCvbW4BWij1M214j4nmebc8bPaRpldVkqzkR3ctCpK0++mEoI3PWNQ8q4LQQmJlqTjJUnWguBhHNwZ/JvoXj3a0OJuLhMxP5WrhKaGfv0gNbERN1RsGTIPWbnsZHoUSxKSsHeSUPMw7KQEP4EVAXHelJm1FF4i6ePHo4xZqdOybNy7ORX/Q14dJ26tAZbFy3jolbtUG8CuMGdZ32ugsna7MPDTfkVHk7nkCI3A82vyA/jcwFjvyN0TtypgVw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR04MB5136.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(346002)(39860400002)(396003)(136003)(366004)(478600001)(44832011)(316002)(38100700002)(2616005)(956004)(5660300002)(6486002)(54906003)(1076003)(38350700002)(2906002)(66946007)(6512007)(7416002)(110136005)(86362001)(83380400001)(66476007)(8936002)(186003)(4326008)(66556008)(6506007)(6666004)(26005)(36756003)(8676002)(52116002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GMzL/Jx2nUR1M23LkBm153bFsoFAi5txLKkut47GlSgH2xujmjtIo6Tp3jUrVIrWLA4XuE5IRZZeunkFJbnp5C3xSbhbs/XYbZRjP8LXRRnbTfCbqgZtl5ZpTM4Qr8w4jmDtGmTEbx7KJqdZUZaQ4aETFOfKSm64gLnnH7fCe/lsshOCSvxYkpLKT0sUItG2VIcel2ubMMXkDulyNoI5+icrV5ETv0GuDnO+Z595qY/6Zg9BZb/Ij5GxgrLErPJYYo45Cyb/1qmEk3sYqjPYi1yPMX2eSsIZZFPWGqvBnlPdh74gWqRCWFmCRbHPX3rwfjKn5h3eJgGg12fZcSE71jr/7HLLfX6GJwH0+ICZfFSOjL/m8ZdVwZ492TEZxrihHmfFC11tUff1wRoggudwJcS9bGFjRH9EZFhChwZJaWianSYEzcLlIfW8kn0Uh5PiS2S8A1LSosbeDSD7Ls3JZSuKY3RnIIfIKJRDILOW6Re5kWLWE2EBIgF65vL4NZ7fP+jPVBFNcRuQNIkynsZzsCZwF3zlrujdcY1u1jz0B6phL5tEi+XTgpRbu6g3Oz5PokPcfvS5MUwNcrbCPApA/3g/WV5sY8/LjoOXpa/XRQBpCaz/H7FHmsRnw8XVDJ44nzNvjawKWOkCTTd6j5jt2wuRyLGaFJh7Vf+HxmUOGmyDtRkkcFtR9Ku0HXegfbvhOjnTcGWU83wrYhjjKGlKXOGUjqAQRlyAMQixcPFM2LwOnhpEP1D+VTcj4iutW2pYD+290wd2XzRCWGYm4KfLSevc5Lz+9Xq0HgGNBfuPOq9RyJ1kqPmQmwapYcRtXU2NOFKODiEYijU6/oi/3+QYEzlxiRl8W7YMgSe0nwUAOtALMHMa+admRlHeq/dcv1yOx592xa018as7M2hpGGx3Dwq2QGdd9bp+cLbnmddrrxdPWwexTngXFIbCsOzeFuiv9KtW//g8Pw43PUEBf1qJgiLhVYE4PFqUJKXA1KH955EjSlpfs3VTVgHCdo2OSK/xg10voNbBhtmtQSn3Ly2dsZ+U4Df5hLhFrz+JrPNepXpbQZEp9QGqhhi/7bOOPNKoHkstfSYGyzOjVBrsC4jLZwLixlINFAuKFb/UeeuhFEhbDZmcM0wZgsiRoPl64SioPsvhXVM6M7tTdKQlEuz5EhYL7rUQk7QtM3M//OSnrK+j+aKfpa/4XJUEBwVu/2Dz7ilJQjZGDfds+Ehn8na5q+nPRXh/uuNeqwMsA7kAFkW/1BYsKnhbsNuZuieaPadzVoYrfK7ZxRpV/w8NT6ZMyVP0P3qFxBlKvSTYhcSPiyDGE1jK9/MTQK0BQV0b6+H/ X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ef202e85-a795-4790-07c3-08d94b84e692 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2021 13:47:22.7221 (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: ErD69bjEUA3QEOc8dZrcVQT8e+q4qplHDmzeRRE3+9z/hiBEnAqVl3i77bIQfVxPmj2msvpt+QYzmiPPEUuQow== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3551 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Tobias Waldekranz Since hwdoms have only been used thus far for equality comparisons, the bridge has used the simplest possible assignment policy; using a counter to keep track of the last value handed out. With the upcoming transmit offloading, we need to perform set operations efficiently based on hwdoms, e.g. we want to answer questions like "has this skb been forwarded to any port within this hwdom?" Move to a bitmap-based allocation scheme that recycles hwdoms once all members leaves the bridge. This means that we can use a single unsigned long to keep track of the hwdoms that have received an skb. v1->v2: convert the typedef DECLARE_BITMAP(br_hwdom_map_t, BR_HWDOM_MAX) into a plain unsigned long. v2->v5: none Signed-off-by: Tobias Waldekranz Signed-off-by: Vladimir Oltean --- net/bridge/br_if.c | 4 +- net/bridge/br_private.h | 27 ++++++++--- net/bridge/br_switchdev.c | 94 ++++++++++++++++++++++++++------------- 3 files changed, 86 insertions(+), 39 deletions(-) diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 838a277e3cf7..c0df50e4abbb 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -349,6 +349,7 @@ static void del_nbp(struct net_bridge_port *p) nbp_backup_clear(p); nbp_update_port_count(br); + nbp_switchdev_del(p); netdev_upper_dev_unlink(dev, br->dev); @@ -643,7 +644,7 @@ int br_add_if(struct net_bridge *br, struct net_device *dev, if (err) goto err5; - err = nbp_switchdev_hwdom_set(p); + err = nbp_switchdev_add(p); if (err) goto err6; @@ -719,6 +720,7 @@ int br_add_if(struct net_bridge *br, struct net_device *dev, list_del_rcu(&p->list); br_fdb_delete_by_port(br, p, 0, 1); nbp_update_port_count(br); + nbp_switchdev_del(p); err6: netdev_upper_dev_unlink(dev, br->dev); err5: diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 54e29a8576a1..a23c565b8970 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -29,6 +29,8 @@ #define BR_MULTICAST_DEFAULT_HASH_MAX 4096 +#define BR_HWDOM_MAX BITS_PER_LONG + #define BR_VERSION "2.3" /* Control of forwarding link local multicast */ @@ -483,6 +485,8 @@ struct net_bridge { * identifiers in case a bridge spans multiple switchdev instances. */ int last_hwdom; + /* Bit mask of hardware domain numbers in use */ + unsigned long busy_hwdoms; #endif struct hlist_head fdb_list; @@ -1656,7 +1660,6 @@ static inline void br_sysfs_delbr(struct net_device *dev) { return; } /* br_switchdev.c */ #ifdef CONFIG_NET_SWITCHDEV -int nbp_switchdev_hwdom_set(struct net_bridge_port *p); void nbp_switchdev_frame_mark(const struct net_bridge_port *p, struct sk_buff *skb); bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p, @@ -1670,17 +1673,15 @@ void br_switchdev_fdb_notify(struct net_bridge *br, int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags, struct netlink_ext_ack *extack); int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid); +int nbp_switchdev_add(struct net_bridge_port *p); +void nbp_switchdev_del(struct net_bridge_port *p); +void br_switchdev_init(struct net_bridge *br); static inline void br_switchdev_frame_unmark(struct sk_buff *skb) { skb->offload_fwd_mark = 0; } #else -static inline int nbp_switchdev_hwdom_set(struct net_bridge_port *p) -{ - return 0; -} - static inline void nbp_switchdev_frame_mark(const struct net_bridge_port *p, struct sk_buff *skb) { @@ -1721,6 +1722,20 @@ br_switchdev_fdb_notify(struct net_bridge *br, static inline void br_switchdev_frame_unmark(struct sk_buff *skb) { } + +static inline int nbp_switchdev_add(struct net_bridge_port *p) +{ + return 0; +} + +static inline void nbp_switchdev_del(struct net_bridge_port *p) +{ +} + +static inline void br_switchdev_init(struct net_bridge *br) +{ +} + #endif /* CONFIG_NET_SWITCHDEV */ /* br_arp_nd_proxy.c */ diff --git a/net/bridge/br_switchdev.c b/net/bridge/br_switchdev.c index 833fd30482c2..f3120f13c293 100644 --- a/net/bridge/br_switchdev.c +++ b/net/bridge/br_switchdev.c @@ -8,38 +8,6 @@ #include "br_private.h" -static int br_switchdev_hwdom_get(struct net_bridge *br, struct net_device *dev) -{ - struct net_bridge_port *p; - - /* dev is yet to be added to the port list. */ - list_for_each_entry(p, &br->port_list, list) { - if (netdev_port_same_parent_id(dev, p->dev)) - return p->hwdom; - } - - return ++br->last_hwdom; -} - -int nbp_switchdev_hwdom_set(struct net_bridge_port *p) -{ - struct netdev_phys_item_id ppid = { }; - int err; - - ASSERT_RTNL(); - - err = dev_get_port_parent_id(p->dev, &ppid, true); - if (err) { - if (err == -EOPNOTSUPP) - return 0; - return err; - } - - p->hwdom = br_switchdev_hwdom_get(p->br, p->dev); - - return 0; -} - void nbp_switchdev_frame_mark(const struct net_bridge_port *p, struct sk_buff *skb) { @@ -156,3 +124,65 @@ int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid) return switchdev_port_obj_del(dev, &v.obj); } + +static int nbp_switchdev_hwdom_set(struct net_bridge_port *joining) +{ + struct net_bridge *br = joining->br; + struct net_bridge_port *p; + int hwdom; + + /* joining is yet to be added to the port list. */ + list_for_each_entry(p, &br->port_list, list) { + if (netdev_port_same_parent_id(joining->dev, p->dev)) { + joining->hwdom = p->hwdom; + return 0; + } + } + + hwdom = find_next_zero_bit(&br->busy_hwdoms, BR_HWDOM_MAX, 1); + if (hwdom >= BR_HWDOM_MAX) + return -EBUSY; + + set_bit(hwdom, &br->busy_hwdoms); + joining->hwdom = hwdom; + return 0; +} + +static void nbp_switchdev_hwdom_put(struct net_bridge_port *leaving) +{ + struct net_bridge *br = leaving->br; + struct net_bridge_port *p; + + /* leaving is no longer in the port list. */ + list_for_each_entry(p, &br->port_list, list) { + if (p->hwdom == leaving->hwdom) + return; + } + + clear_bit(leaving->hwdom, &br->busy_hwdoms); +} + +int nbp_switchdev_add(struct net_bridge_port *p) +{ + struct netdev_phys_item_id ppid = { }; + int err; + + ASSERT_RTNL(); + + err = dev_get_port_parent_id(p->dev, &ppid, true); + if (err) { + if (err == -EOPNOTSUPP) + return 0; + return err; + } + + return nbp_switchdev_hwdom_set(p); +} + +void nbp_switchdev_del(struct net_bridge_port *p) +{ + ASSERT_RTNL(); + + if (p->hwdom) + nbp_switchdev_hwdom_put(p); +}