{"id":816253,"url":"http://patchwork.ozlabs.org/api/patches/816253/?format=json","web_url":"http://patchwork.ozlabs.org/project/netdev/patch/20170920141516.1402-14-jiri@resnulli.us/","project":{"id":7,"url":"http://patchwork.ozlabs.org/api/projects/7/?format=json","name":"Linux network development","link_name":"netdev","list_id":"netdev.vger.kernel.org","list_email":"netdev@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170920141516.1402-14-jiri@resnulli.us>","list_archive_url":null,"date":"2017-09-20T14:15:13","name":"[net-next,13/16] mlxsw: spectrum_switchdev: Flood all mc packets to mrouter ports","commit_ref":null,"pull_url":null,"state":"accepted","archived":true,"hash":"4791e27fe2c053660686873ce042cb485aa46c8d","submitter":{"id":15321,"url":"http://patchwork.ozlabs.org/api/people/15321/?format=json","name":"Jiri Pirko","email":"jiri@resnulli.us"},"delegate":{"id":34,"url":"http://patchwork.ozlabs.org/api/users/34/?format=json","username":"davem","first_name":"David","last_name":"Miller","email":"davem@davemloft.net"},"mbox":"http://patchwork.ozlabs.org/project/netdev/patch/20170920141516.1402-14-jiri@resnulli.us/mbox/","series":[{"id":4129,"url":"http://patchwork.ozlabs.org/api/series/4129/?format=json","web_url":"http://patchwork.ozlabs.org/project/netdev/list/?series=4129","date":"2017-09-20T14:15:00","name":"mlxsw: Multicast flood update","version":1,"mbox":"http://patchwork.ozlabs.org/series/4129/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/816253/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/816253/checks/","tags":{},"related":[],"headers":{"Return-Path":"<netdev-owner@vger.kernel.org>","X-Original-To":"patchwork-incoming@ozlabs.org","Delivered-To":"patchwork-incoming@ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=resnulli-us.20150623.gappssmtp.com\n\theader.i=@resnulli-us.20150623.gappssmtp.com\n\theader.b=\"o1v1Ah/p\"; dkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xy1xG6lQZz9sNr\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 21 Sep 2017 00:15:46 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751800AbdITOPp (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tWed, 20 Sep 2017 10:15:45 -0400","from mail-wr0-f195.google.com ([209.85.128.195]:34418 \"EHLO\n\tmail-wr0-f195.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751772AbdITOPa (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Wed, 20 Sep 2017 10:15:30 -0400","by mail-wr0-f195.google.com with SMTP id k20so1585445wre.1\n\tfor <netdev@vger.kernel.org>; Wed, 20 Sep 2017 07:15:29 -0700 (PDT)","from localhost (ip-89-177-125-82.net.upcbroadband.cz.\n\t[89.177.125.82]) by smtp.gmail.com with ESMTPSA id\n\tf5sm1789272wmg.10.2017.09.20.07.15.28\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tWed, 20 Sep 2017 07:15:28 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=resnulli-us.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=lM8jFkNbSXtWZaMB7ek51FBWq2J8N1H777Gjnwz/Kg8=;\n\tb=o1v1Ah/p9HWSc9I3uK0g6Uevm+D3fatqpE6VjglyNXuvTLhMqrn2xhiCh2PpUt5e0i\n\tim6dLcAmtz+3AadUXsTF4WHpByLZeh67QnZb1/zBh+zHHiiAXcKtlkncrRzHZQtTh9UH\n\tH4awBM0uRcuIlcWRIY3uyl5uJM4xOYJuynx4mVrUZPOfQ8VKVkXAfLigWBS67d9KgZAV\n\tRPSrg/hsiLYv79yUPOYD/ZkMFdN2PPjGnCJ+ZkuFcs1LA9rncTRDdV52gun6efHQhlVV\n\tOKNIIdImzQlO/gN1Jx1mpiW6aXXKXWRbnNhceQBbJTTCrVvwkqAujtK1PlGw+Ts/jKW2\n\tnwhg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=lM8jFkNbSXtWZaMB7ek51FBWq2J8N1H777Gjnwz/Kg8=;\n\tb=JXA2/EjTuMZSVlZUxxpRKe2p+QhWuZOcPcsiB84BSD+nWLULaEfgFrOSBPKiie/X0Z\n\tkR6FBxTVt73kKNCoMh/rM1HRc9kjWFy4R1IBmgYCU8TNdJO8k6bZj4zgk/fdxA89KFZ+\n\tNejN3Yl87GayZT7NLVKjhgf0AP6HtV0AvfHcD2BYskePhi2pMKnwgVzq981AURLPsN9c\n\tr0PFk+BjC//5jTfZq9ntutLx/8K6JT4m7S5BDNjsab10WjZWtd5oUjaGbIiDuE3svyWe\n\tLIGaU3uYcvoOUt+BFocoY/hXCSrrqqfyQCHu3HgXDQbVHrm9CqIvFEL4ktvVTnvL9Uz6\n\tPrJA==","X-Gm-Message-State":"AHPjjUg/wyE6pX9PJ/3CLd8aYF5IAr7K5WDyfMD8GPv5wBfYkqO1NO8c\n\t1wSgIwr1bstLuLCDrxyODlpOkdjp","X-Google-Smtp-Source":"AOwi7QCziwjBOTBuBHAQN/Tl6oLmhU2t5yBTV8DNKULAnXY+IyI34UgbkpVvBD63YyW1/uQAdtyevQ==","X-Received":"by 10.223.196.73 with SMTP id a9mr4653020wrg.144.1505916929189; \n\tWed, 20 Sep 2017 07:15:29 -0700 (PDT)","From":"Jiri Pirko <jiri@resnulli.us>","To":"netdev@vger.kernel.org","Cc":"davem@davemloft.net, nogahf@mellanox.com, idosch@mellanox.com,\n\tmlxsw@mellanox.com","Subject":"[patch net-next 13/16] mlxsw: spectrum_switchdev: Flood all mc\n\tpackets to mrouter ports","Date":"Wed, 20 Sep 2017 16:15:13 +0200","Message-Id":"<20170920141516.1402-14-jiri@resnulli.us>","X-Mailer":"git-send-email 2.9.5","In-Reply-To":"<20170920141516.1402-1-jiri@resnulli.us>","References":"<20170920141516.1402-1-jiri@resnulli.us>","Sender":"netdev-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<netdev.vger.kernel.org>","X-Mailing-List":"netdev@vger.kernel.org"},"content":"From: Nogah Frankel <nogahf@mellanox.com>\n\nWhen mc is enabled, whenever a mc packet doesn't hit any mdb entry it is\nbeing flood to the ports marked as mrouters. However, all mc packets should\nbe flooded to them even if they match an entry in the mdb.\nThis patch adds the mrouter ports to every mdb entry that is being written\nto the HW.\n\nSigned-off-by: Nogah Frankel <nogahf@mellanox.com>\nSigned-off-by: Jiri Pirko <jiri@mellanox.com>\n---\n .../ethernet/mellanox/mlxsw/spectrum_switchdev.c   | 65 ++++++++++++++++++++--\n 1 file changed, 60 insertions(+), 5 deletions(-)","diff":"diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c\nindex bc07873..146beaa 100644\n--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c\n+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c\n@@ -1288,10 +1288,55 @@ mlxsw_sp_mid *__mlxsw_sp_mc_get(struct mlxsw_sp_bridge_device *bridge_device,\n \treturn NULL;\n }\n \n+static void\n+mlxsw_sp_bridge_port_get_ports_bitmap(struct mlxsw_sp *mlxsw_sp,\n+\t\t\t\t      struct mlxsw_sp_bridge_port *bridge_port,\n+\t\t\t\t      unsigned long *ports_bitmap)\n+{\n+\tstruct mlxsw_sp_port *mlxsw_sp_port;\n+\tu64 max_lag_members, i;\n+\tint lag_id;\n+\n+\tif (!bridge_port->lagged) {\n+\t\tset_bit(bridge_port->system_port, ports_bitmap);\n+\t} else {\n+\t\tmax_lag_members = MLXSW_CORE_RES_GET(mlxsw_sp->core,\n+\t\t\t\t\t\t     MAX_LAG_MEMBERS);\n+\t\tlag_id = bridge_port->lag_id;\n+\t\tfor (i = 0; i < max_lag_members; i++) {\n+\t\t\tmlxsw_sp_port = mlxsw_sp_port_lagged_get(mlxsw_sp,\n+\t\t\t\t\t\t\t\t lag_id, i);\n+\t\t\tif (mlxsw_sp_port)\n+\t\t\t\tset_bit(mlxsw_sp_port->local_port,\n+\t\t\t\t\tports_bitmap);\n+\t\t}\n+\t}\n+}\n+\n+static void\n+mlxsw_sp_mc_get_mrouters_bitmap(unsigned long *flood_bitmap,\n+\t\t\t\tstruct mlxsw_sp_bridge_device *bridge_device,\n+\t\t\t\tstruct mlxsw_sp *mlxsw_sp)\n+{\n+\tstruct mlxsw_sp_bridge_port *bridge_port;\n+\n+\tlist_for_each_entry(bridge_port, &bridge_device->ports_list, list) {\n+\t\tif (bridge_port->mrouter) {\n+\t\t\tmlxsw_sp_bridge_port_get_ports_bitmap(mlxsw_sp,\n+\t\t\t\t\t\t\t      bridge_port,\n+\t\t\t\t\t\t\t      flood_bitmap);\n+\t\t}\n+\t}\n+}\n+\n static bool\n mlxsw_sp_mc_write_mdb_entry(struct mlxsw_sp *mlxsw_sp,\n-\t\t\t    struct mlxsw_sp_mid *mid)\n+\t\t\t    struct mlxsw_sp_mid *mid,\n+\t\t\t    struct mlxsw_sp_bridge_device *bridge_device)\n {\n+\tlong *flood_bitmap;\n+\tint num_of_ports;\n+\tint alloc_size;\n \tu16 mid_idx;\n \tint err;\n \n@@ -1300,9 +1345,18 @@ mlxsw_sp_mc_write_mdb_entry(struct mlxsw_sp *mlxsw_sp,\n \tif (mid_idx == MLXSW_SP_MID_MAX)\n \t\treturn false;\n \n+\tnum_of_ports = mlxsw_core_max_ports(mlxsw_sp->core);\n+\talloc_size = sizeof(long) * BITS_TO_LONGS(num_of_ports);\n+\tflood_bitmap = kzalloc(alloc_size, GFP_KERNEL);\n+\tif (!flood_bitmap)\n+\t\treturn false;\n+\n+\tbitmap_copy(flood_bitmap,  mid->ports_in_mid, num_of_ports);\n+\tmlxsw_sp_mc_get_mrouters_bitmap(flood_bitmap, bridge_device, mlxsw_sp);\n+\n \tmid->mid = mid_idx;\n-\terr = mlxsw_sp_port_smid_full_entry(mlxsw_sp, mid_idx,\n-\t\t\t\t\t    mid->ports_in_mid);\n+\terr = mlxsw_sp_port_smid_full_entry(mlxsw_sp, mid_idx, flood_bitmap);\n+\tkfree(flood_bitmap);\n \tif (err)\n \t\treturn false;\n \n@@ -1355,7 +1409,7 @@ mlxsw_sp_mid *__mlxsw_sp_mc_alloc(struct mlxsw_sp *mlxsw_sp,\n \tif (!bridge_device->multicast_enabled)\n \t\tgoto out;\n \n-\tif (!mlxsw_sp_mc_write_mdb_entry(mlxsw_sp, mid))\n+\tif (!mlxsw_sp_mc_write_mdb_entry(mlxsw_sp, mid, bridge_device))\n \t\tgoto err_write_mdb_entry;\n \n out:\n@@ -1456,7 +1510,8 @@ mlxsw_sp_bridge_mdb_mc_enable_sync(struct mlxsw_sp_port *mlxsw_sp_port,\n \n \tlist_for_each_entry(mid, &bridge_device->mids_list, list) {\n \t\tif (mc_enabled)\n-\t\t\tmlxsw_sp_mc_write_mdb_entry(mlxsw_sp, mid);\n+\t\t\tmlxsw_sp_mc_write_mdb_entry(mlxsw_sp, mid,\n+\t\t\t\t\t\t    bridge_device);\n \t\telse\n \t\t\tmlxsw_sp_mc_remove_mdb_entry(mlxsw_sp, mid);\n \t}\n","prefixes":["net-next","13/16"]}