From patchwork Thu Aug 22 20:13:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1151784 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hPXGGL4k"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Dwhx02yPz9s3Z for ; Fri, 23 Aug 2019 06:13:53 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392827AbfHVUNv (ORCPT ); Thu, 22 Aug 2019 16:13:51 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:38888 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731739AbfHVUNv (ORCPT ); Thu, 22 Aug 2019 16:13:51 -0400 Received: by mail-qt1-f196.google.com with SMTP id x4so9146699qts.5 for ; Thu, 22 Aug 2019 13:13:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=udGaDidHG+DteFuoYCc7Agc/DgUZVcH0uT3aEmBIPEQ=; b=hPXGGL4kxOWd6X9/9tzmMQFT6tnO9InhkKduMFEWAp+z3aOxeH2L/Y0FDq9eSApIVC 042lQmQTZgrd5i1dCUBCL0YJiMHULetYiT69DE+TqXNXDXxl7D+xvJZh9Si9hrdFlEvd wCivYHhhf8WHau09l5CS4B4tR3SdXVxz3ifsWxNX+9jC3svHZhkdKv1AWD9M3khsvhkA +280Tc48gvMOUzADVW6BjZjWXusvq3l4zxd47uoQ2Swx5kTHcmLG8IfdEjrDx9P76P/S 6Oa3sgiIQzEyCK40Ma62SYXy1nLUm35hoW/YrV2Ng2oyhVlZ2AqrrPddsJu1KolvlgGA fLfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=udGaDidHG+DteFuoYCc7Agc/DgUZVcH0uT3aEmBIPEQ=; b=Ye+Osz+ZyhjAd+6hipPT3uZSuG3ebVenLVcnXo6TXyB6/HtPEwkC0fL8Ph0hcqZT6E H/OvzwhnVGDkrYYVTsNmgd9uN9Rj/OyByq8M/TDbi9plJU3fJntXnS40kUfH7et7ODOl Sh+OV3VcKHJ5vgSLc5uXyJYV3LgM3iaq2TXKvDBp3u7Q8VhPhVNP6zyqJjbmmeF40OTH bEvNVsBiFb2/esvSStB/C+JYkb0VE8PsGD5v7bT8e+xfylOqcGecwiHEiec7HDczEIJx J4tO3G7abynIplzyIgIxQ8yRC9HON0CIMD0LRHaL84vRpcOZzzeZcGBKgxc5NAXLVvlM ciQQ== X-Gm-Message-State: APjAAAXoKzPln4CpHShtAw0Nhf8bKWG/rUxHCCg0NYVKCRIsbBUT3+7c ox42txAGjaBFRRvcHYCT4nK5jrJa X-Google-Smtp-Source: APXvYqw18pu+QyJxrvIx6ciDA/Ve396U3oioTPnIamgYRbKAoGRhZ0olrcLXVhLkaOFk79OPV4iU3w== X-Received: by 2002:ad4:4641:: with SMTP id y1mr1094251qvv.155.1566504829228; Thu, 22 Aug 2019 13:13:49 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id e15sm284528qtr.51.2019.08.22.13.13.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 13:13:48 -0700 (PDT) From: Vivien Didelot To: netdev@vger.kernel.org Cc: davem@davemloft.net, f.fainelli@gmail.com, andrew@lunn.ch, olteanv@gmail.com, Vivien Didelot Subject: [PATCH net-next 1/6] net: dsa: remove bitmap operations Date: Thu, 22 Aug 2019 16:13:18 -0400 Message-Id: <20190822201323.1292-2-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190822201323.1292-1-vivien.didelot@gmail.com> References: <20190822201323.1292-1-vivien.didelot@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The bitmap operations were introduced to simplify the switch drivers in the future, since most of them could implement the common VLAN and MDB operations (add, del, dump) with simple functions taking all target ports at once, and thus limiting the number of hardware accesses. Programming an MDB or VLAN this way in a single operation would clearly simplify the drivers a lot but would require a new get-set interface in DSA. The usage of such bitmap from the stack also raised concerned in the past, leading to the dynamic allocation of a new ds->_bitmap member in the dsa_switch structure. So let's get rid of them for now. This commit nicely wraps the ds->ops->port_{mdb,vlan}_{prepare,add} switch operations into new dsa_switch_{mdb,vlan}_{prepare,add} variants not using any bitmap argument anymore. New dsa_switch_{mdb,vlan}_match helpers have been introduced to make clear which local port of a switch must be programmed with the target object. While the targeted user port is an obvious candidate, the DSA links must also be programmed, as well as the CPU port for VLANs. While at it, also remove local variables that are only used once. Signed-off-by: Vivien Didelot --- include/net/dsa.h | 3 -- net/dsa/dsa2.c | 14 ----- net/dsa/switch.c | 132 +++++++++++++++++++++------------------------- 3 files changed, 59 insertions(+), 90 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index 147b757ef8ea..96acb14ec1a8 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -275,9 +275,6 @@ struct dsa_switch { */ bool vlan_filtering; - unsigned long *bitmap; - unsigned long _bitmap; - /* Dynamically allocated ports, keep last */ size_t num_ports; struct dsa_port ports[]; diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 8c4eccb0cfe6..f8445fa73448 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -834,20 +834,6 @@ struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n) if (!ds) return NULL; - /* We avoid allocating memory outside dsa_switch - * if it is not needed. - */ - if (n <= sizeof(ds->_bitmap) * 8) { - ds->bitmap = &ds->_bitmap; - } else { - ds->bitmap = devm_kcalloc(dev, - BITS_TO_LONGS(n), - sizeof(unsigned long), - GFP_KERNEL); - if (unlikely(!ds->bitmap)) - return NULL; - } - ds->dev = dev; ds->num_ports = n; diff --git a/net/dsa/switch.c b/net/dsa/switch.c index 09d9286b27cc..489eb7b430a4 100644 --- a/net/dsa/switch.c +++ b/net/dsa/switch.c @@ -128,57 +128,51 @@ static int dsa_switch_fdb_del(struct dsa_switch *ds, return ds->ops->port_fdb_del(ds, port, info->addr, info->vid); } -static int -dsa_switch_mdb_prepare_bitmap(struct dsa_switch *ds, - const struct switchdev_obj_port_mdb *mdb, - const unsigned long *bitmap) +static bool dsa_switch_mdb_match(struct dsa_switch *ds, int port, + struct dsa_notifier_mdb_info *info) +{ + if (ds->index == info->sw_index && port == info->port) + return true; + + if (dsa_is_dsa_port(ds, port)) + return true; + + return false; +} + +static int dsa_switch_mdb_prepare(struct dsa_switch *ds, + struct dsa_notifier_mdb_info *info) { int port, err; if (!ds->ops->port_mdb_prepare || !ds->ops->port_mdb_add) return -EOPNOTSUPP; - for_each_set_bit(port, bitmap, ds->num_ports) { - err = ds->ops->port_mdb_prepare(ds, port, mdb); - if (err) - return err; + for (port = 0; port < ds->num_ports; port++) { + if (dsa_switch_mdb_match(ds, port, info)) { + err = ds->ops->port_mdb_prepare(ds, port, info->mdb); + if (err) + return err; + } } return 0; } -static void dsa_switch_mdb_add_bitmap(struct dsa_switch *ds, - const struct switchdev_obj_port_mdb *mdb, - const unsigned long *bitmap) -{ - int port; - - if (!ds->ops->port_mdb_add) - return; - - for_each_set_bit(port, bitmap, ds->num_ports) - ds->ops->port_mdb_add(ds, port, mdb); -} - static int dsa_switch_mdb_add(struct dsa_switch *ds, struct dsa_notifier_mdb_info *info) { - const struct switchdev_obj_port_mdb *mdb = info->mdb; - struct switchdev_trans *trans = info->trans; int port; - /* Build a mask of Multicast group members */ - bitmap_zero(ds->bitmap, ds->num_ports); - if (ds->index == info->sw_index) - set_bit(info->port, ds->bitmap); - for (port = 0; port < ds->num_ports; port++) - if (dsa_is_dsa_port(ds, port)) - set_bit(port, ds->bitmap); + if (switchdev_trans_ph_prepare(info->trans)) + return dsa_switch_mdb_prepare(ds, info); - if (switchdev_trans_ph_prepare(trans)) - return dsa_switch_mdb_prepare_bitmap(ds, mdb, ds->bitmap); + if (!ds->ops->port_mdb_add) + return 0; - dsa_switch_mdb_add_bitmap(ds, mdb, ds->bitmap); + for (port = 0; port < ds->num_ports; port++) + if (dsa_switch_mdb_match(ds, port, info)) + ds->ops->port_mdb_add(ds, port, info->mdb); return 0; } @@ -186,13 +180,11 @@ static int dsa_switch_mdb_add(struct dsa_switch *ds, static int dsa_switch_mdb_del(struct dsa_switch *ds, struct dsa_notifier_mdb_info *info) { - const struct switchdev_obj_port_mdb *mdb = info->mdb; - if (!ds->ops->port_mdb_del) return -EOPNOTSUPP; if (ds->index == info->sw_index) - return ds->ops->port_mdb_del(ds, info->port, mdb); + return ds->ops->port_mdb_del(ds, info->port, info->mdb); return 0; } @@ -234,59 +226,55 @@ static int dsa_port_vlan_check(struct dsa_switch *ds, int port, (void *)vlan); } -static int -dsa_switch_vlan_prepare_bitmap(struct dsa_switch *ds, - const struct switchdev_obj_port_vlan *vlan, - const unsigned long *bitmap) +static bool dsa_switch_vlan_match(struct dsa_switch *ds, int port, + struct dsa_notifier_vlan_info *info) +{ + if (ds->index == info->sw_index && port == info->port) + return true; + + if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) + return true; + + return false; +} + +static int dsa_switch_vlan_prepare(struct dsa_switch *ds, + struct dsa_notifier_vlan_info *info) { int port, err; if (!ds->ops->port_vlan_prepare || !ds->ops->port_vlan_add) return -EOPNOTSUPP; - for_each_set_bit(port, bitmap, ds->num_ports) { - err = dsa_port_vlan_check(ds, port, vlan); - if (err) - return err; + for (port = 0; port < ds->num_ports; port++) { + if (dsa_switch_vlan_match(ds, port, info)) { + err = dsa_port_vlan_check(ds, port, info->vlan); + if (err) + return err; - err = ds->ops->port_vlan_prepare(ds, port, vlan); - if (err) - return err; + err = ds->ops->port_vlan_prepare(ds, port, info->vlan); + if (err) + return err; + } } return 0; } -static void -dsa_switch_vlan_add_bitmap(struct dsa_switch *ds, - const struct switchdev_obj_port_vlan *vlan, - const unsigned long *bitmap) -{ - int port; - - for_each_set_bit(port, bitmap, ds->num_ports) - ds->ops->port_vlan_add(ds, port, vlan); -} - static int dsa_switch_vlan_add(struct dsa_switch *ds, struct dsa_notifier_vlan_info *info) { - const struct switchdev_obj_port_vlan *vlan = info->vlan; - struct switchdev_trans *trans = info->trans; int port; - /* Build a mask of VLAN members */ - bitmap_zero(ds->bitmap, ds->num_ports); - if (ds->index == info->sw_index) - set_bit(info->port, ds->bitmap); - for (port = 0; port < ds->num_ports; port++) - if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) - set_bit(port, ds->bitmap); + if (switchdev_trans_ph_prepare(info->trans)) + return dsa_switch_vlan_prepare(ds, info); - if (switchdev_trans_ph_prepare(trans)) - return dsa_switch_vlan_prepare_bitmap(ds, vlan, ds->bitmap); + if (!ds->ops->port_vlan_add) + return 0; - dsa_switch_vlan_add_bitmap(ds, vlan, ds->bitmap); + for (port = 0; port < ds->num_ports; port++) + if (dsa_switch_vlan_match(ds, port, info)) + ds->ops->port_vlan_add(ds, port, info->vlan); return 0; } @@ -294,13 +282,11 @@ static int dsa_switch_vlan_add(struct dsa_switch *ds, static int dsa_switch_vlan_del(struct dsa_switch *ds, struct dsa_notifier_vlan_info *info) { - const struct switchdev_obj_port_vlan *vlan = info->vlan; - if (!ds->ops->port_vlan_del) return -EOPNOTSUPP; if (ds->index == info->sw_index) - return ds->ops->port_vlan_del(ds, info->port, vlan); + return ds->ops->port_vlan_del(ds, info->port, info->vlan); return 0; } From patchwork Thu Aug 22 20:13:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1151785 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="nKuYRP2i"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Dwhy2w5gz9sMr for ; Fri, 23 Aug 2019 06:13:54 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392855AbfHVUNx (ORCPT ); Thu, 22 Aug 2019 16:13:53 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:43950 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390373AbfHVUNw (ORCPT ); Thu, 22 Aug 2019 16:13:52 -0400 Received: by mail-qk1-f194.google.com with SMTP id m2so6280945qkd.10 for ; Thu, 22 Aug 2019 13:13:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OQBQV+56l3dMpNr75FvhBT66cS1jMo+PnG0C5SOikqc=; b=nKuYRP2iiDAXLHHZhctL25SPEkD5vpQsCEh8B2pndWiahtIZXNYLXFtSeHKf1p4MN9 2nfyCDlEkxySysfcpMLVjZSA495bmIJCLdoxUPr/81vkuz4ujHAZLFSLMlrTVUdRavPc 1ajZyPXz3A5db6K6fYuHcekrQnGV3nyagyrdu6Q7TZ8dkBoWq1HwC1J3lk3Tlwctetb7 PIlTZqjw5uRVasUl5kI+SI8U5dg8fQJo0WRS6u38B84B6cCbqJ+zOzDQmV/rsmM/Megu 1ElLIf5tEFpsSF+9QA5x5YZpw191G1Ck8dTUJUnVyZ63jKv8DsOEjJjr8SZ482ZTGL/i vrxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OQBQV+56l3dMpNr75FvhBT66cS1jMo+PnG0C5SOikqc=; b=th2bAyueDxJVThAq6PDAb+mZLy16QMd8g5pagwrYVDNquxqsr//kjEDb4GtIevXJQn sVlF8Q11AuYcQ5Lyo4+1HIpgfow+D8zbyxHq2xKEeIfVDtqqFS5oQ8GT7rIFFGV+A5C4 6pEBprW+XrgeMHApk6n9z4azyrRuOAoG2kLZ3bzqYJrRyVmdRwiKcN0+MnA/nJI8D/cO YqB8DwV43Lo2fDgr0lSUi4frFpayMCmE9NGwP8sZukf6rNIAPalnV1D1AFzYlAG8IX8r hjeHy8EfmP6KO1/6h9VlYyLwndz9Zvy9nJ/YayRWd2lUje1jCJXsih64IDpL7F3U1MAX e4pw== X-Gm-Message-State: APjAAAVlrNaXgNcbrt7dVhtFwq0NDJFMA9gXQNn0EeKxWEVHDzMi4y+L DC52vp4qSB+rqcGWu0lPIofH+L9L X-Google-Smtp-Source: APXvYqzJ9PaozPPG+SLUzHbr3Xcdf2qaIZWIJt1xxK6dI2vI6WfZKYNRkbRldZ9mi5nYiyB2gmnKHA== X-Received: by 2002:ae9:e707:: with SMTP id m7mr892913qka.50.1566504831012; Thu, 22 Aug 2019 13:13:51 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id c23sm253556qtp.3.2019.08.22.13.13.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 13:13:50 -0700 (PDT) From: Vivien Didelot To: netdev@vger.kernel.org Cc: davem@davemloft.net, f.fainelli@gmail.com, andrew@lunn.ch, olteanv@gmail.com, Vivien Didelot Subject: [PATCH net-next 2/6] net: dsa: do not skip -EOPNOTSUPP in dsa_port_vid_add Date: Thu, 22 Aug 2019 16:13:19 -0400 Message-Id: <20190822201323.1292-3-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190822201323.1292-1-vivien.didelot@gmail.com> References: <20190822201323.1292-1-vivien.didelot@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently dsa_port_vid_add returns 0 if the switch returns -EOPNOTSUPP. This function is used in the tag_8021q.c code to offload the PVID of ports, which would simply not work if .port_vlan_add is not supported by the underlying switch. Do not skip -EOPNOTSUPP in dsa_port_vid_add but only when necessary, that is to say in dsa_slave_vlan_rx_add_vid. Signed-off-by: Vivien Didelot --- net/dsa/port.c | 4 ++-- net/dsa/slave.c | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/net/dsa/port.c b/net/dsa/port.c index f75301456430..ef28df7ecbde 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -382,8 +382,8 @@ int dsa_port_vid_add(struct dsa_port *dp, u16 vid, u16 flags) trans.ph_prepare = true; err = dsa_port_vlan_add(dp, &vlan, &trans); - if (err == -EOPNOTSUPP) - return 0; + if (err) + return err; trans.ph_prepare = false; return dsa_port_vlan_add(dp, &vlan, &trans); diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 33f41178afcc..9d61d9dbf001 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -1082,8 +1082,11 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, return -EBUSY; } - /* This API only allows programming tagged, non-PVID VIDs */ - return dsa_port_vid_add(dp, vid, 0); + ret = dsa_port_vid_add(dp, vid, 0); + if (ret && ret != -EOPNOTSUPP) + return ret; + + return 0; } static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, From patchwork Thu Aug 22 20:13:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1151786 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="O6WAd/nP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Dwj01N2Cz9s3Z for ; Fri, 23 Aug 2019 06:13:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392860AbfHVUNy (ORCPT ); Thu, 22 Aug 2019 16:13:54 -0400 Received: from mail-qt1-f193.google.com ([209.85.160.193]:37698 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392846AbfHVUNx (ORCPT ); Thu, 22 Aug 2019 16:13:53 -0400 Received: by mail-qt1-f193.google.com with SMTP id y26so9177825qto.4 for ; Thu, 22 Aug 2019 13:13:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HXsmDRD3xQE0AkS+M8DsxXVlBU9UC3kWE6H1KYP8l4E=; b=O6WAd/nPzMoRCucqlSUo5giv6ydVvQ14hc1YVHeGMGXzBU+o1tLROj9okOxRxhCiCW JCWC/0BcUevAYrOq9qmb2pGkhu2QBaMmH2Lo1FbWrh12bqEmUQGPKPKgiomSykhSAB+2 XrpjU3JK9/A17iTM5pRfYDhOisoHSHifAo50unDfFwJvmXnnH/URf22zR5jp5AE6e0iX 3Prgog4d9ViAaX7nXIzksIoKO0fDtsfJqeAltgRPTu2rYYu8/r896G23e559iZg7Wk3o sEtDOha//EQF8jrquWgPmB0bgr9L0HgcmF1Sp+NjppDCStlvZuBa+EaV0qoCugCSlaem 7bIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HXsmDRD3xQE0AkS+M8DsxXVlBU9UC3kWE6H1KYP8l4E=; b=I1CgxmjPVAlw5e2eMvF/fkOSHbIF4gI7kGgImtoAB/gBMwKUqG8yQOQXU6rAf0uR/q 6ZeiWT1n9NLajb6l0ZVEAvylzhq682JGFIPT4Q18FfbkokX2+ldfSmi7AWMxyt36RSAT WNQDhgJffFtb9DK7hc49f2f4qdGA06VPfjJ55tJmItDJhAAdYXfTw4F+nhHGnHCJTq7M Ma1sPkD9ZR8QUyTVjfQerQzjb9oC6ROztkgkQMsyzGf/QaG+apVD2ekb91d5zuN5vo6+ LBYfeDRCylN+0uqgpOFW2WTE5Y22blh2JCddRNYlFCc8tbvkUQA+JN8sRg1yjScV8oeV DiKw== X-Gm-Message-State: APjAAAXuxKABx2cfEHJyTayoNrUZfWkhzeh+OcbEzK109TwZIkYZLWZo Marzm8tL5EFVDR54CWVgQZCVU88J X-Google-Smtp-Source: APXvYqziiSbKgXOjef8ft8mXOWHZnNVGzs+/wBH7X6BcO2PAbbKd9dW5AsVNE6skdjValzEe5bVwfA== X-Received: by 2002:ac8:41d6:: with SMTP id o22mr1536169qtm.248.1566504832548; Thu, 22 Aug 2019 13:13:52 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id o200sm413567qke.66.2019.08.22.13.13.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 13:13:52 -0700 (PDT) From: Vivien Didelot To: netdev@vger.kernel.org Cc: davem@davemloft.net, f.fainelli@gmail.com, andrew@lunn.ch, olteanv@gmail.com, Vivien Didelot Subject: [PATCH net-next 3/6] net: dsa: add slave VLAN helpers Date: Thu, 22 Aug 2019 16:13:20 -0400 Message-Id: <20190822201323.1292-4-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190822201323.1292-1-vivien.didelot@gmail.com> References: <20190822201323.1292-1-vivien.didelot@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add dsa_slave_vlan_add and dsa_slave_vlan_del helpers to handle SWITCHDEV_OBJ_ID_PORT_VLAN switchdev objects. Also copy the switchdev_obj_port_vlan structure on add since we will modify it in future patches. Signed-off-by: Vivien Didelot --- net/dsa/slave.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 9d61d9dbf001..8f5126c41282 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -312,6 +312,26 @@ static int dsa_slave_port_attr_set(struct net_device *dev, return ret; } +static int dsa_slave_vlan_add(struct net_device *dev, + const struct switchdev_obj *obj, + struct switchdev_trans *trans) +{ + struct dsa_port *dp = dsa_slave_to_port(dev); + struct switchdev_obj_port_vlan vlan; + int err; + + if (obj->orig_dev != dev) + return -EOPNOTSUPP; + + vlan = *SWITCHDEV_OBJ_PORT_VLAN(obj); + + err = dsa_port_vlan_add(dp, &vlan, trans); + if (err) + return err; + + return 0; +} + static int dsa_slave_port_obj_add(struct net_device *dev, const struct switchdev_obj *obj, struct switchdev_trans *trans, @@ -339,10 +359,7 @@ static int dsa_slave_port_obj_add(struct net_device *dev, trans); break; case SWITCHDEV_OBJ_ID_PORT_VLAN: - if (obj->orig_dev != dev) - return -EOPNOTSUPP; - err = dsa_port_vlan_add(dp, SWITCHDEV_OBJ_PORT_VLAN(obj), - trans); + err = dsa_slave_vlan_add(dev, obj, trans); break; default: err = -EOPNOTSUPP; @@ -352,6 +369,17 @@ static int dsa_slave_port_obj_add(struct net_device *dev, return err; } +static int dsa_slave_vlan_del(struct net_device *dev, + const struct switchdev_obj *obj) +{ + struct dsa_port *dp = dsa_slave_to_port(dev); + + if (obj->orig_dev != dev) + return -EOPNOTSUPP; + + return dsa_port_vlan_del(dp, SWITCHDEV_OBJ_PORT_VLAN(obj)); +} + static int dsa_slave_port_obj_del(struct net_device *dev, const struct switchdev_obj *obj) { @@ -371,9 +399,7 @@ static int dsa_slave_port_obj_del(struct net_device *dev, err = dsa_port_mdb_del(dp->cpu_dp, SWITCHDEV_OBJ_PORT_MDB(obj)); break; case SWITCHDEV_OBJ_ID_PORT_VLAN: - if (obj->orig_dev != dev) - return -EOPNOTSUPP; - err = dsa_port_vlan_del(dp, SWITCHDEV_OBJ_PORT_VLAN(obj)); + err = dsa_slave_vlan_del(dev, obj); break; default: err = -EOPNOTSUPP; From patchwork Thu Aug 22 20:13:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1151787 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ieMVSKsp"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Dwj22q6tz9s3Z for ; Fri, 23 Aug 2019 06:13:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392891AbfHVUN5 (ORCPT ); Thu, 22 Aug 2019 16:13:57 -0400 Received: from mail-qk1-f193.google.com ([209.85.222.193]:42157 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392871AbfHVUNz (ORCPT ); Thu, 22 Aug 2019 16:13:55 -0400 Received: by mail-qk1-f193.google.com with SMTP id 201so6299821qkm.9 for ; Thu, 22 Aug 2019 13:13:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4kVaKki6ux1xRm53Eihekl0W9/s6CnKLUCdT3K9sahc=; b=ieMVSKspTmTDKV9WXhgs/BVVxDZalsOGYV+Bevia4AWFMJdXIficzXCK3zxQiphFkX 3KDK5tVQR/efl1KIA8G2B8gnJdaNPmjENI8V8SIBobxpnsZR3eE+0xUHEYZNb2sacwze q2XLK4MD8wcjgKerQfb8fKI6WHunycMEl902A1L4T5ZXiwpISbpnHpT19lSB6WMRxZF+ pGih8GcO+K3wDN3jfselJLyp6b+6m7sdnIkN+PNXXpnJY8BO33tnxrlK9ZCyA2+kXtlB OBjmqHg/iZjw0PHen16g0QWDqT9T3ZE2J12MpUDCQ8gJ+mjxLhVZdID0T2PGNG2SgbjQ TJ+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4kVaKki6ux1xRm53Eihekl0W9/s6CnKLUCdT3K9sahc=; b=TWmLySvwqAWIWSuob9nvKSgD1wQw+SnvjM+4hDyKYsFhjtJDVRvwBP35cSAdescla7 2VxMuqLpJaPxoftrUxs/ZB+d6ilUTAao1jE6inU4bmgUsDsjXNcfbGhvuzCysCCaXkS/ ev5+37vXz1b0fNbVJYZnIby3NOz8c5vP0Nd9KqbCL6xoEFzKwJI7T2s0/+UAaq9viGPm 7viVJmS5tj8hq+9OKXaijViqviXXM4fGQXlRRT/0EHmHPKvihodgHS9kxZvbJwJCMkFO d460NSQY0cZ86OfoFuFbfUAGU62/Ek+ToaAo0Ze1q8tbKRzVFdokk+Eyy9Zv//0Jfa9A GfCw== X-Gm-Message-State: APjAAAWVcEbI4qSwXGKwr9hNcD5WOH3k0DYyiVrxYX23a6nDhnfz3tjj 2SJAKeHNh5ug1wBmOHgFDrjeSrKq X-Google-Smtp-Source: APXvYqyY1qzgpp0zUcWh4QMgHJYd8fc/Cu1rl/O5PL0RQYmNumePFHgZmKKMk7Qljx6Bpe25LRmGiA== X-Received: by 2002:a37:c20d:: with SMTP id i13mr841041qkm.45.1566504834094; Thu, 22 Aug 2019 13:13:54 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id d12sm392159qkk.39.2019.08.22.13.13.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 13:13:53 -0700 (PDT) From: Vivien Didelot To: netdev@vger.kernel.org Cc: davem@davemloft.net, f.fainelli@gmail.com, andrew@lunn.ch, olteanv@gmail.com, Vivien Didelot Subject: [PATCH net-next 4/6] net: dsa: check bridge VLAN in slave operations Date: Thu, 22 Aug 2019 16:13:21 -0400 Message-Id: <20190822201323.1292-5-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190822201323.1292-1-vivien.didelot@gmail.com> References: <20190822201323.1292-1-vivien.didelot@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The bridge VLANs are not offloaded by dsa_port_vlan_* if the port is not bridged or if its bridge is not VLAN aware. This is a good thing but other corners of DSA, such as the tag_8021q driver, may need to program VLANs regardless the bridge state. And also because bridge_dev is specific to user ports anyway, move these checks were it belongs, one layer up in the slave code. Signed-off-by: Vivien Didelot Suggested-by: Vladimir Oltean --- net/dsa/port.c | 10 ++-------- net/dsa/slave.c | 12 ++++++++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/net/dsa/port.c b/net/dsa/port.c index ef28df7ecbde..9b54e5a76297 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -348,10 +348,7 @@ int dsa_port_vlan_add(struct dsa_port *dp, .vlan = vlan, }; - if (!dp->bridge_dev || br_vlan_enabled(dp->bridge_dev)) - return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_ADD, &info); - - return 0; + return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_ADD, &info); } int dsa_port_vlan_del(struct dsa_port *dp, @@ -363,10 +360,7 @@ int dsa_port_vlan_del(struct dsa_port *dp, .vlan = vlan, }; - if (!dp->bridge_dev || br_vlan_enabled(dp->bridge_dev)) - return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info); - - return 0; + return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info); } int dsa_port_vid_add(struct dsa_port *dp, u16 vid, u16 flags) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 8f5126c41282..82e48d247b81 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -323,6 +323,9 @@ static int dsa_slave_vlan_add(struct net_device *dev, if (obj->orig_dev != dev) return -EOPNOTSUPP; + if (dp->bridge_dev && !br_vlan_enabled(dp->bridge_dev)) + return 0; + vlan = *SWITCHDEV_OBJ_PORT_VLAN(obj); err = dsa_port_vlan_add(dp, &vlan, trans); @@ -377,6 +380,9 @@ static int dsa_slave_vlan_del(struct net_device *dev, if (obj->orig_dev != dev) return -EOPNOTSUPP; + if (dp->bridge_dev && !br_vlan_enabled(dp->bridge_dev)) + return 0; + return dsa_port_vlan_del(dp, SWITCHDEV_OBJ_PORT_VLAN(obj)); } @@ -1099,6 +1105,9 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, * need to emulate the switchdev prepare + commit phase. */ if (dp->bridge_dev) { + if (!br_vlan_enabled(dp->bridge_dev)) + return 0; + /* br_vlan_get_info() returns -EINVAL or -ENOENT if the * device, respectively the VID is not found, returning * 0 means success, which is a failure for us here. @@ -1126,6 +1135,9 @@ static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, * need to emulate the switchdev prepare + commit phase. */ if (dp->bridge_dev) { + if (!br_vlan_enabled(dp->bridge_dev)) + return 0; + /* br_vlan_get_info() returns -EINVAL or -ENOENT if the * device, respectively the VID is not found, returning * 0 means success, which is a failure for us here. From patchwork Thu Aug 22 20:13:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1151789 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="cj9qA+C7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Dwj90GBNz9s3Z for ; Fri, 23 Aug 2019 06:14:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392926AbfHVUOD (ORCPT ); Thu, 22 Aug 2019 16:14:03 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:40017 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392846AbfHVUN4 (ORCPT ); Thu, 22 Aug 2019 16:13:56 -0400 Received: by mail-qt1-f195.google.com with SMTP id e8so9116556qtp.7 for ; Thu, 22 Aug 2019 13:13:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SlMiGqC3+bIcQkBH2aV46vyGuLLlY9uT74PlVOHOcQw=; b=cj9qA+C7bTQkWmXXf/dOLSA1VK1lFsJYL/AmPqJyErNLpJRCY7s6zUndtpOlLWGSNF RhO6VQV+PazZU64ggimwh1Gq+SEFr8NBQsZd9vzsAsFTaFSMZ89LRHDJEMEva7Tprj2u W+wkx0SCQM9v6i/N9gv0jM1/kmNXzG8Cc0qxyOuDwvXO5GFO+tN9O69zUbm2ntnrHQaw xVmyM2xLbO/me8t8zz8mb8iDW+bm60n1VFWJL/sVtqxDTRvrgl9CPKBuxJ+/rmTOlVfT TYEJEtnbwnNh9h9fZ0OgpiiuBttV8Duc4BkFKVONExoJwd2Z6OK9Zutc32rUPPuKXp1W 8WSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SlMiGqC3+bIcQkBH2aV46vyGuLLlY9uT74PlVOHOcQw=; b=SmMtZdtx5vx5srbYqzstdp5Uy1z7JY4ktUFu7vqwS+V6FiWD15Bneqk7f+uBSYEHS8 sXpbCkPx7N6ppS/2HUzBSjnbb81ZXtfSTsgSv1KqqPSH0TUP+vbJVHdNra19WWiyQ00+ Lg19ntclwKhnQni/I4y4r7OQm0cFdGVmtalqcg+U5YzqIO0dnSJHxhqpe3ai6AlUx8nV PeLidnItgZS+vEJBAYOkh/rtfx/kGbvd6uIw0reHSyVWjUXszyqoZVqH9lG5yFzMyoZp F7KQLUvnGnNmmjdktyDOo+MzBS15tadua5BJmGRR8YuFKIH6KtkqVDpqq1g+qdXXhVoC 4pqw== X-Gm-Message-State: APjAAAVe4AsnfP5PKMNozZPeKSa3r1EEpjJ3Q/C6049m0aXFqHI2uRQy T6th2SPcXgMbpSnjSQP8MvCH3P4S X-Google-Smtp-Source: APXvYqyiitFSyA7vlijLBNn6dyCeltPqoaKMnT7DBT61F4Qe0c4ajlAtL6LiICsURbdq0YZPvtH0bg== X-Received: by 2002:ac8:358e:: with SMTP id k14mr1445959qtb.83.1566504835538; Thu, 22 Aug 2019 13:13:55 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id q42sm336086qtc.52.2019.08.22.13.13.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 13:13:54 -0700 (PDT) From: Vivien Didelot To: netdev@vger.kernel.org Cc: davem@davemloft.net, f.fainelli@gmail.com, andrew@lunn.ch, olteanv@gmail.com, Vivien Didelot Subject: [PATCH net-next 5/6] net: dsa: program VLAN on CPU port from slave Date: Thu, 22 Aug 2019 16:13:22 -0400 Message-Id: <20190822201323.1292-6-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190822201323.1292-1-vivien.didelot@gmail.com> References: <20190822201323.1292-1-vivien.didelot@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org DSA currently programs a VLAN on the CPU port implicitly after the related notifier is received by a switch. While we still need to do this transparent programmation of the DSA links in the fabric, programming the CPU port this way may cause problems in some corners such as the tag_8021q driver. Because the dedicated CPU port is specific to a slave, make their programmation explicit a few layers up, in the slave code. Note that technically, DSA links have a dedicated CPU port as well, but since they are only used as conduit between interconnected switches of a fabric, programming them transparently this way is fine. Signed-off-by: Vivien Didelot --- net/dsa/slave.c | 14 ++++++++++++++ net/dsa/switch.c | 5 ++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 82e48d247b81..8267c156a51a 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -332,6 +332,10 @@ static int dsa_slave_vlan_add(struct net_device *dev, if (err) return err; + err = dsa_port_vlan_add(dp->cpu_dp, &vlan, trans); + if (err) + return err; + return 0; } @@ -383,6 +387,9 @@ static int dsa_slave_vlan_del(struct net_device *dev, if (dp->bridge_dev && !br_vlan_enabled(dp->bridge_dev)) return 0; + /* Do not deprogram the CPU port as it may be shared with other user + * ports which can be members of this VLAN as well. + */ return dsa_port_vlan_del(dp, SWITCHDEV_OBJ_PORT_VLAN(obj)); } @@ -1121,6 +1128,10 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, if (ret && ret != -EOPNOTSUPP) return ret; + ret = dsa_port_vid_add(dp->cpu_dp, vid, 0); + if (ret && ret != -EOPNOTSUPP) + return ret; + return 0; } @@ -1151,6 +1162,9 @@ static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, if (ret == -EOPNOTSUPP) ret = 0; + /* Do not deprogram the CPU port as it may be shared with other user + * ports which can be members of this VLAN as well. + */ return ret; } diff --git a/net/dsa/switch.c b/net/dsa/switch.c index 489eb7b430a4..6a9607518823 100644 --- a/net/dsa/switch.c +++ b/net/dsa/switch.c @@ -232,7 +232,7 @@ static bool dsa_switch_vlan_match(struct dsa_switch *ds, int port, if (ds->index == info->sw_index && port == info->port) return true; - if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) + if (dsa_is_dsa_port(ds, port)) return true; return false; @@ -288,6 +288,9 @@ static int dsa_switch_vlan_del(struct dsa_switch *ds, if (ds->index == info->sw_index) return ds->ops->port_vlan_del(ds, info->port, info->vlan); + /* Do not deprogram the DSA links as they may be used as conduit + * for other VLAN members in the fabric. + */ return 0; } From patchwork Thu Aug 22 20:13:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1151788 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="jQElTt28"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Dwj8034Xz9sMr for ; Fri, 23 Aug 2019 06:14:04 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392917AbfHVUOB (ORCPT ); Thu, 22 Aug 2019 16:14:01 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:36366 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392892AbfHVUN6 (ORCPT ); Thu, 22 Aug 2019 16:13:58 -0400 Received: by mail-qk1-f194.google.com with SMTP id d23so6340721qko.3 for ; Thu, 22 Aug 2019 13:13:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jDi41gz+aqENpslRbtWqedS8nPsUGbBbGMSjytNOFYk=; b=jQElTt28bTADrJvUXR69QnZSkmE3xFf4/JnJmzZZRM7URz3anhB/zRfwIawCevNK8B 2SMRWrO6wQmD0mRIEtxO9eoTc7uSdVMkTtQCVlG5KSqoUwqkNoPbCOZVKeQomOGvaM8V G7PhqFGooDZSWcTU5r3ZeryU0itZHK/z/z/FxYN13Ai/zwzyoHfhKnUcsR32Hg021LRn z+4e53fM2v2PyYyVEAlV5rGyTB5t02+3a8ebBuDcsIVW1kQeqfM0AmhYUSGIY3Xqt7NW Vs23XmDUt6JAW6/xz7266BTcr+l8njFZML3f7Q6vPQZCRzI+gWfIBVWDmqOq2zjx+8dK dJrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jDi41gz+aqENpslRbtWqedS8nPsUGbBbGMSjytNOFYk=; b=iJ++mBdzDeS/NYNOv80jjA4hyHj3wS3Lo6OZTn+ZSTq2U534umPRWUinu8b4Pz8bMY AiBoQTVO5N+1kMLyG+FvZT2vjJvwahxu9VJN4ymoCx6KpV4MKvYJHx1dIUAeDcfjzGrb 4mLSjWSJmF9VoAahLs2xLonGCt9gEC2viY25MBeqbC+GnSHqOARwgMj1AGO/sUtct7uu B1hxyjgKLYPNzkgixYDE91p9vatsvgqtK5Ub4i9Dnxr3oulRxfLjSItjmML7MPQiOWje JVniMm/buQWLzEwkw/qjq/Y7VPnJxC8Se/tccovm0jO+15DNEL5tWkMHlGDMQSDQvHv0 Aavg== X-Gm-Message-State: APjAAAVkaNkL6XtU7gzxONhh258Usd1t63/InrHcq8PccEdvO8JViDoL tYxs6CQRO9UfwO07xWE2qN35M002 X-Google-Smtp-Source: APXvYqzrWMHNvuuPhNlIpMnoLiDv+XJq/7jjns1yJZ+oFZQqtPfE/9iC8ydiIfVw00T4KwlHQ8v3GQ== X-Received: by 2002:a37:e306:: with SMTP id y6mr885753qki.174.1566504837366; Thu, 22 Aug 2019 13:13:57 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id q42sm336131qtc.52.2019.08.22.13.13.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2019 13:13:56 -0700 (PDT) From: Vivien Didelot To: netdev@vger.kernel.org Cc: davem@davemloft.net, f.fainelli@gmail.com, andrew@lunn.ch, olteanv@gmail.com, Vivien Didelot Subject: [PATCH net-next 6/6] net: dsa: clear VLAN flags for CPU port Date: Thu, 22 Aug 2019 16:13:23 -0400 Message-Id: <20190822201323.1292-7-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190822201323.1292-1-vivien.didelot@gmail.com> References: <20190822201323.1292-1-vivien.didelot@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When the bridge offloads a VLAN on a slave port, we also need to program its dedicated CPU port as a member of the VLAN. Drivers may handle the CPU port's membership as they want. For example, Marvell as a special "Unmodified" mode to pass frames as is through such ports. Even though DSA expects the drivers to handle the CPU port membership, they are unlikely to program such VLANs untagged, and certainly not as PVID. This patch clears the VLAN flags before programming the CPU port. Signed-off-by: Vivien Didelot Suggested-by: Vladimir Oltean --- net/dsa/slave.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 8267c156a51a..48df48f76c67 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -332,6 +332,12 @@ static int dsa_slave_vlan_add(struct net_device *dev, if (err) return err; + /* We need the dedicated CPU port to be a member of the VLAN as well. + * Even though drivers often handle CPU membership in special ways, + * CPU ports are likely to be tagged, so clear the VLAN flags. + */ + vlan.flags = 0; + err = dsa_port_vlan_add(dp->cpu_dp, &vlan, trans); if (err) return err;