From patchwork Mon Oct 21 20:51:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180877 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 (no SPF record) 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="efFMx6MS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpkL0qV7z9sPT for ; Tue, 22 Oct 2019 07:52:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730397AbfJUUvk (ORCPT ); Mon, 21 Oct 2019 16:51:40 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:37920 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730356AbfJUUvj (ORCPT ); Mon, 21 Oct 2019 16:51:39 -0400 Received: by mail-qt1-f195.google.com with SMTP id o25so9927411qtr.5; Mon, 21 Oct 2019 13:51:37 -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=k/elsTpzHk+pWjT0y0/iANMpTM1n9NfWxbIbH+EKs/Y=; b=efFMx6MSNtqTvSnztXjcalINUalPaGvfgS6AIYW0rKyg3fDPtvcG3lQSDazJ/oaUtW kXmYgBn0l54PS92L5VphroCGDlxWs/9zVmdKa+ffjnxiHqkHfXN/cJthbeF1UDP2Qvae cd3PTjIEHbdxywlLoaHtFYwTJvfCIBTcra61ntLlZLR8Z5Qmjx293OXU6UHtDmXOxiFQ jBODFMllqZMROzFEswx1Tp7dRX4m26Ta8WvTshY+rY3+F2d0F+ueiKYpROMvCO0NopKu rbf6VVanLxjsR12ZnjakkDpBjq/pufU82E5XceKbjLl7MumvobC6e6w+sBmK+izfXA1Z s6mw== 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=k/elsTpzHk+pWjT0y0/iANMpTM1n9NfWxbIbH+EKs/Y=; b=TVXKqbimCmsIZQdwV4MhS4fIZK0NocukFj+2hA0x+MPSr2DcL3slTHw0ml2d4M/j+o ski+Qk+W4hD4SrlauqqXrBlwbs+TvPV5iD/wj4DJgw6wxM1wIHZz6ZOGX6OZSyqHfZsc 7xLPUmStLLBmL3xw08Ljq37HHo4LrlAOJ19n5D2I/WhmweGNUmESEvtAeePz3ikFzI9r Zh3vYQSED41YqlZGPFbbt0etLf++0kTsv7axJcC8VJdOksnaSsVY25oqKUoE75CYoQgv +r1ARj9X89iDNP7GpJUCyVKLySBpHPxyfoQWRvoYnyo4nO82/akDziKTwn4/FM/W3cpC tBbA== X-Gm-Message-State: APjAAAVZ4+A1Y0r6limZg+7cA+BmggUGyypnk6TOdoQX3cn+fU+gphp6 C/rFiNnq67NX65HDhErQb5A= X-Google-Smtp-Source: APXvYqxsf8AO9A0Ickx9VegwDMwlOupJbAmFFOxL9iCeagUNgVjVggtXrh0jagkXr6LJuE/znRs9CA== X-Received: by 2002:a05:6214:1ca:: with SMTP id c10mr14513999qvt.233.1571691097004; Mon, 21 Oct 2019 13:51:37 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id t199sm9002745qke.36.2019.10.21.13.51.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:36 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 01/16] net: dsa: use dsa_to_port helper everywhere Date: Mon, 21 Oct 2019 16:51:15 -0400 Message-Id: <20191021205130.304149-2-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Do not let the drivers access the ds->ports static array directly while there is a dsa_to_port helper for this purpose. At the same time, un-const this helper since the SJA1105 driver assigns the priv member of the returned dsa_port structure. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli Reviewed-by: Andrew Lunn --- drivers/net/dsa/b53/b53_common.c | 6 +++--- drivers/net/dsa/bcm_sf2.c | 8 ++++---- drivers/net/dsa/bcm_sf2_cfp.c | 6 +++--- drivers/net/dsa/mt7530.c | 12 ++++++------ drivers/net/dsa/mv88e6xxx/chip.c | 10 +++++----- drivers/net/dsa/qca8k.c | 2 +- drivers/net/dsa/sja1105/sja1105_main.c | 18 +++++++++--------- include/net/dsa.h | 2 +- net/dsa/dsa.c | 8 +++++--- net/dsa/dsa2.c | 4 ++-- net/dsa/switch.c | 4 ++-- net/dsa/tag_8021q.c | 6 +++--- 12 files changed, 44 insertions(+), 42 deletions(-) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index cc3536315eff..aef9b56781ef 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -524,7 +524,7 @@ int b53_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy) if (!dsa_is_user_port(ds, port)) return 0; - cpu_port = ds->ports[port].cpu_dp->index; + cpu_port = dsa_to_port(ds, port)->cpu_dp->index; if (dev->ops->irq_enable) ret = dev->ops->irq_enable(dev, port); @@ -1629,7 +1629,7 @@ EXPORT_SYMBOL(b53_fdb_dump); int b53_br_join(struct dsa_switch *ds, int port, struct net_device *br) { struct b53_device *dev = ds->priv; - s8 cpu_port = ds->ports[port].cpu_dp->index; + s8 cpu_port = dsa_to_port(ds, port)->cpu_dp->index; u16 pvlan, reg; unsigned int i; @@ -1675,7 +1675,7 @@ void b53_br_leave(struct dsa_switch *ds, int port, struct net_device *br) { struct b53_device *dev = ds->priv; struct b53_vlan *vl = &dev->vlans[0]; - s8 cpu_port = ds->ports[port].cpu_dp->index; + s8 cpu_port = dsa_to_port(ds, port)->cpu_dp->index; unsigned int i; u16 pvlan, reg, pvid; diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index 26509fa37a50..c068a3b7207b 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c @@ -662,7 +662,7 @@ static void bcm_sf2_sw_fixed_state(struct dsa_switch *ds, int port, * state machine and make it go in PHY_FORCING state instead. */ if (!status->link) - netif_carrier_off(ds->ports[port].slave); + netif_carrier_off(dsa_to_port(ds, port)->slave); status->duplex = DUPLEX_FULL; } else { status->link = true; @@ -728,7 +728,7 @@ static int bcm_sf2_sw_resume(struct dsa_switch *ds) static void bcm_sf2_sw_get_wol(struct dsa_switch *ds, int port, struct ethtool_wolinfo *wol) { - struct net_device *p = ds->ports[port].cpu_dp->master; + struct net_device *p = dsa_to_port(ds, port)->cpu_dp->master; struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); struct ethtool_wolinfo pwol = { }; @@ -752,9 +752,9 @@ static void bcm_sf2_sw_get_wol(struct dsa_switch *ds, int port, static int bcm_sf2_sw_set_wol(struct dsa_switch *ds, int port, struct ethtool_wolinfo *wol) { - struct net_device *p = ds->ports[port].cpu_dp->master; + struct net_device *p = dsa_to_port(ds, port)->cpu_dp->master; struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); - s8 cpu_port = ds->ports[port].cpu_dp->index; + s8 cpu_port = dsa_to_port(ds, port)->cpu_dp->index; struct ethtool_wolinfo pwol = { }; if (p->ethtool_ops->get_wol) diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index d264776a95a3..f3f0c3f07391 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -821,7 +821,7 @@ static int bcm_sf2_cfp_rule_insert(struct dsa_switch *ds, int port, struct ethtool_rx_flow_spec *fs) { struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); - s8 cpu_port = ds->ports[port].cpu_dp->index; + s8 cpu_port = dsa_to_port(ds, port)->cpu_dp->index; __u64 ring_cookie = fs->ring_cookie; unsigned int queue_num, port_num; int ret; @@ -1049,7 +1049,7 @@ static int bcm_sf2_cfp_rule_get_all(struct bcm_sf2_priv *priv, int bcm_sf2_get_rxnfc(struct dsa_switch *ds, int port, struct ethtool_rxnfc *nfc, u32 *rule_locs) { - struct net_device *p = ds->ports[port].cpu_dp->master; + struct net_device *p = dsa_to_port(ds, port)->cpu_dp->master; struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); int ret = 0; @@ -1092,7 +1092,7 @@ int bcm_sf2_get_rxnfc(struct dsa_switch *ds, int port, int bcm_sf2_set_rxnfc(struct dsa_switch *ds, int port, struct ethtool_rxnfc *nfc) { - struct net_device *p = ds->ports[port].cpu_dp->master; + struct net_device *p = dsa_to_port(ds, port)->cpu_dp->master; struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds); int ret = 0; diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 1d8d36de4d20..a91293e47a57 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -862,7 +862,7 @@ mt7530_port_set_vlan_unaware(struct dsa_switch *ds, int port) for (i = 0; i < MT7530_NUM_PORTS; i++) { if (dsa_is_user_port(ds, i) && - dsa_port_is_vlan_filtering(&ds->ports[i])) { + dsa_port_is_vlan_filtering(dsa_to_port(ds, i))) { all_user_ports_removed = false; break; } @@ -922,7 +922,7 @@ mt7530_port_bridge_leave(struct dsa_switch *ds, int port, * other port is still a VLAN-aware port. */ if (dsa_is_user_port(ds, i) && i != port && - !dsa_port_is_vlan_filtering(&ds->ports[i])) { + !dsa_port_is_vlan_filtering(dsa_to_port(ds, i))) { if (dsa_to_port(ds, i)->bridge_dev != bridge) continue; if (priv->ports[i].enable) @@ -1165,7 +1165,7 @@ mt7530_port_vlan_add(struct dsa_switch *ds, int port, /* The port is kept as VLAN-unaware if bridge with vlan_filtering not * being set. */ - if (!dsa_port_is_vlan_filtering(&ds->ports[port])) + if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) return; mutex_lock(&priv->reg_mutex); @@ -1196,7 +1196,7 @@ mt7530_port_vlan_del(struct dsa_switch *ds, int port, /* The port is kept as VLAN-unaware if bridge with vlan_filtering not * being set. */ - if (!dsa_port_is_vlan_filtering(&ds->ports[port])) + if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) return 0; mutex_lock(&priv->reg_mutex); @@ -1252,7 +1252,7 @@ mt7530_setup(struct dsa_switch *ds) * controller also is the container for two GMACs nodes representing * as two netdev instances. */ - dn = ds->ports[MT7530_CPU_PORT].master->dev.of_node->parent; + dn = dsa_to_port(ds, MT7530_CPU_PORT)->master->dev.of_node->parent; if (priv->id == ID_MT7530) { priv->ethernet = syscon_node_to_regmap(dn); @@ -1340,7 +1340,7 @@ mt7530_setup(struct dsa_switch *ds) if (!dsa_is_unused_port(ds, 5)) { priv->p5_intf_sel = P5_INTF_SEL_GMAC5; - interface = of_get_phy_mode(ds->ports[5].dn); + interface = of_get_phy_mode(dsa_to_port(ds, 5)->dn); } else { /* Scan the ethernet nodes. look for GMAC1, lookup used phy */ for_each_child_of_node(dn, mac_np) { diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 6787d560e9e3..d67deec77452 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -1075,7 +1075,7 @@ static u16 mv88e6xxx_port_vlan(struct mv88e6xxx_chip *chip, int dev, int port) if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) return mv88e6xxx_port_mask(chip); - br = ds->ports[port].bridge_dev; + br = dsa_to_port(ds, port)->bridge_dev; pvlan = 0; /* Frames from user ports can egress any local DSA links and CPU ports, @@ -1402,7 +1402,7 @@ static int mv88e6xxx_port_check_hw_vlan(struct dsa_switch *ds, int port, if (dsa_is_dsa_port(ds, i) || dsa_is_cpu_port(ds, i)) continue; - if (!ds->ports[i].slave) + if (!dsa_to_port(ds, i)->slave) continue; if (vlan.member[i] == @@ -1410,7 +1410,7 @@ static int mv88e6xxx_port_check_hw_vlan(struct dsa_switch *ds, int port, continue; if (dsa_to_port(ds, i)->bridge_dev == - ds->ports[port].bridge_dev) + dsa_to_port(ds, port)->bridge_dev) break; /* same bridge, check next VLAN */ if (!dsa_to_port(ds, i)->bridge_dev) @@ -2042,7 +2042,7 @@ static int mv88e6xxx_bridge_map(struct mv88e6xxx_chip *chip, /* Remap the Port VLAN of each local bridge group member */ for (port = 0; port < mv88e6xxx_num_ports(chip); ++port) { - if (chip->ds->ports[port].bridge_dev == br) { + if (dsa_to_port(chip->ds, port)->bridge_dev == br) { err = mv88e6xxx_port_vlan_map(chip, port); if (err) return err; @@ -2059,7 +2059,7 @@ static int mv88e6xxx_bridge_map(struct mv88e6xxx_chip *chip, break; for (port = 0; port < ds->num_ports; ++port) { - if (ds->ports[port].bridge_dev == br) { + if (dsa_to_port(ds, port)->bridge_dev == br) { err = mv88e6xxx_pvt_map(chip, dev, port); if (err) return err; diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c index b00274caae4f..71e44c8763b8 100644 --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -661,7 +661,7 @@ qca8k_setup(struct dsa_switch *ds) return ret; /* Initialize CPU port pad mode (xMII type, delays...) */ - phy_mode = of_get_phy_mode(ds->ports[QCA8K_CPU_PORT].dn); + phy_mode = of_get_phy_mode(dsa_to_port(ds, QCA8K_CPU_PORT)->dn); if (phy_mode < 0) { pr_err("Can't find phy-mode for master device\n"); return phy_mode; diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index 2ffe642cf54b..4b0cb779f187 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -1058,7 +1058,7 @@ int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, l2_lookup.vlanid = vid; l2_lookup.iotag = SJA1105_S_TAG; l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); - if (dsa_port_is_vlan_filtering(&ds->ports[port])) { + if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) { l2_lookup.mask_vlanid = VLAN_VID_MASK; l2_lookup.mask_iotag = BIT(0); } else { @@ -1121,7 +1121,7 @@ int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, l2_lookup.vlanid = vid; l2_lookup.iotag = SJA1105_S_TAG; l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); - if (dsa_port_is_vlan_filtering(&ds->ports[port])) { + if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) { l2_lookup.mask_vlanid = VLAN_VID_MASK; l2_lookup.mask_iotag = BIT(0); } else { @@ -1167,7 +1167,7 @@ static int sja1105_fdb_add(struct dsa_switch *ds, int port, * for what gets printed in 'bridge fdb show'. In the case of zero, * no VID gets printed at all. */ - if (!dsa_port_is_vlan_filtering(&ds->ports[port])) + if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) vid = 0; return priv->info->fdb_add_cmd(ds, port, addr, vid); @@ -1178,7 +1178,7 @@ static int sja1105_fdb_del(struct dsa_switch *ds, int port, { struct sja1105_private *priv = ds->priv; - if (!dsa_port_is_vlan_filtering(&ds->ports[port])) + if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) vid = 0; return priv->info->fdb_del_cmd(ds, port, addr, vid); @@ -1217,7 +1217,7 @@ static int sja1105_fdb_dump(struct dsa_switch *ds, int port, u64_to_ether_addr(l2_lookup.macaddr, macaddr); /* We need to hide the dsa_8021q VLANs from the user. */ - if (!dsa_port_is_vlan_filtering(&ds->ports[port])) + if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) l2_lookup.vlanid = 0; cb(macaddr, l2_lookup.vlanid, l2_lookup.lockeds, data); } @@ -1704,7 +1704,7 @@ static int sja1105_port_enable(struct dsa_switch *ds, int port, if (!dsa_is_user_port(ds, port)) return 0; - slave = ds->ports[port].slave; + slave = dsa_to_port(ds, port)->slave; slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER; @@ -1736,7 +1736,7 @@ static int sja1105_mgmt_xmit(struct dsa_switch *ds, int port, int slot, } /* Transfer skb to the host port. */ - dsa_enqueue_skb(skb, ds->ports[port].slave); + dsa_enqueue_skb(skb, dsa_to_port(ds, port)->slave); /* Wait until the switch has processed the frame */ do { @@ -2061,8 +2061,8 @@ static int sja1105_probe(struct spi_device *spi) for (i = 0; i < SJA1105_NUM_PORTS; i++) { struct sja1105_port *sp = &priv->ports[i]; - ds->ports[i].priv = sp; - sp->dp = &ds->ports[i]; + dsa_to_port(ds, i)->priv = sp; + sp->dp = dsa_to_port(ds, i); sp->data = tagger_data; } mutex_init(&priv->ptp_data.lock); diff --git a/include/net/dsa.h b/include/net/dsa.h index 8c3ea0530f65..2e4fe2f8962b 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -278,7 +278,7 @@ struct dsa_switch { struct dsa_port ports[]; }; -static inline const struct dsa_port *dsa_to_port(struct dsa_switch *ds, int p) +static inline struct dsa_port *dsa_to_port(struct dsa_switch *ds, int p) { return &ds->ports[p]; } diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index 43120a3fb06f..a5545762f5e7 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -246,7 +246,9 @@ static int dsa_switch_rcv(struct sk_buff *skb, struct net_device *dev, #ifdef CONFIG_PM_SLEEP static bool dsa_is_port_initialized(struct dsa_switch *ds, int p) { - return dsa_is_user_port(ds, p) && ds->ports[p].slave; + const struct dsa_port *dp = dsa_to_port(ds, p); + + return dp->type == DSA_PORT_TYPE_USER && dp->slave; } int dsa_switch_suspend(struct dsa_switch *ds) @@ -258,7 +260,7 @@ int dsa_switch_suspend(struct dsa_switch *ds) if (!dsa_is_port_initialized(ds, i)) continue; - ret = dsa_slave_suspend(ds->ports[i].slave); + ret = dsa_slave_suspend(dsa_to_port(ds, i)->slave); if (ret) return ret; } @@ -285,7 +287,7 @@ int dsa_switch_resume(struct dsa_switch *ds) if (!dsa_is_port_initialized(ds, i)) continue; - ret = dsa_slave_resume(ds->ports[i].slave); + ret = dsa_slave_resume(dsa_to_port(ds, i)->slave); if (ret) return ret; } diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 716d265ba8ca..1716535167ee 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -708,7 +708,7 @@ static int dsa_switch_parse_ports_of(struct dsa_switch *ds, goto out_put_node; } - dp = &ds->ports[reg]; + dp = dsa_to_port(ds, reg); err = dsa_port_parse_of(dp, port); if (err) @@ -787,7 +787,7 @@ static int dsa_switch_parse_ports(struct dsa_switch *ds, for (i = 0; i < DSA_MAX_PORTS; i++) { name = cd->port_names[i]; dev = cd->netdev[i]; - dp = &ds->ports[i]; + dp = dsa_to_port(ds, i); if (!name) continue; diff --git a/net/dsa/switch.c b/net/dsa/switch.c index 6a9607518823..df4abe897ed6 100644 --- a/net/dsa/switch.c +++ b/net/dsa/switch.c @@ -20,7 +20,7 @@ static unsigned int dsa_switch_fastest_ageing_time(struct dsa_switch *ds, int i; for (i = 0; i < ds->num_ports; ++i) { - struct dsa_port *dp = &ds->ports[i]; + struct dsa_port *dp = dsa_to_port(ds, i); if (dp->ageing_time && dp->ageing_time < ageing_time) ageing_time = dp->ageing_time; @@ -98,7 +98,7 @@ static int dsa_switch_bridge_leave(struct dsa_switch *ds, if (unset_vlan_filtering) { struct switchdev_trans trans = {0}; - err = dsa_port_vlan_filtering(&ds->ports[info->port], + err = dsa_port_vlan_filtering(dsa_to_port(ds, info->port), false, &trans); if (err && err != EOPNOTSUPP) return err; diff --git a/net/dsa/tag_8021q.c b/net/dsa/tag_8021q.c index 9c1cc2482b68..bf91fc55fc44 100644 --- a/net/dsa/tag_8021q.c +++ b/net/dsa/tag_8021q.c @@ -103,7 +103,7 @@ static int dsa_8021q_restore_pvid(struct dsa_switch *ds, int port) if (!dsa_is_user_port(ds, port)) return 0; - slave = ds->ports[port].slave; + slave = dsa_to_port(ds, port)->slave; err = br_vlan_get_pvid(slave, &pvid); if (err < 0) @@ -118,7 +118,7 @@ static int dsa_8021q_restore_pvid(struct dsa_switch *ds, int port) return err; } - return dsa_port_vid_add(&ds->ports[port], pvid, vinfo.flags); + return dsa_port_vid_add(dsa_to_port(ds, port), pvid, vinfo.flags); } /* If @enabled is true, installs @vid with @flags into the switch port's HW @@ -130,7 +130,7 @@ static int dsa_8021q_restore_pvid(struct dsa_switch *ds, int port) static int dsa_8021q_vid_apply(struct dsa_switch *ds, int port, u16 vid, u16 flags, bool enabled) { - struct dsa_port *dp = &ds->ports[port]; + struct dsa_port *dp = dsa_to_port(ds, port); struct bridge_vlan_info vinfo; int err; From patchwork Mon Oct 21 20:51:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180878 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 (no SPF record) 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="ufFCTskx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpkR5Q2jz9sPd for ; Tue, 22 Oct 2019 07:53:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730649AbfJUUxA (ORCPT ); Mon, 21 Oct 2019 16:53:00 -0400 Received: from mail-qk1-f193.google.com ([209.85.222.193]:40133 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730383AbfJUUvk (ORCPT ); Mon, 21 Oct 2019 16:51:40 -0400 Received: by mail-qk1-f193.google.com with SMTP id y81so10251799qkb.7; Mon, 21 Oct 2019 13:51:39 -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=jqgsFlrNKqExdggLkADsTZXOcKKODUTxvxGTYxobfK0=; b=ufFCTskxImKTtNSFmXwBTnh8Wvwq4S5v0UHWaJec1kYgteEBH+FqJRa6gvrvcam4Jc wZcnfe6B9JuOUe/FfhpNlNzPyIQr9FHlGSz6aHUEavlx82hWPaF2DIN8vw3BNWhla+fY seP1Ofija8Y5FaK2akJ2LYA+ks1IxHMCX6AUFg7vIPBJ7qVohdznFd0wxJtMF5qrgmBr 8r2vIAyZO5vR2sEyFGy3YHaAJlgBJ5G1q7tx7VYQRdZgEFKE9jq2xa6X5to0/+V6CgjJ NTxsYmAHOvzQpmPfF9b5D8VQjx2ViZsEXlTjJtsJQc+dgtsJQKDfJiBVyJSrStDrcBjg T1gQ== 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=jqgsFlrNKqExdggLkADsTZXOcKKODUTxvxGTYxobfK0=; b=KjSb4+OLyZxgRldxmeHgBzGCLsnCmIT9eol0X6jr6U2j3EGvzcWg65Gw62ERenptV+ xjE5YCorVbGaRcNgyBwnYiyzPY7bC3jmBe2Sjw4xtpn1E166FsyckKKIf6i+4JkW/hn2 Zf9rUBajJ4+0bF1oqimuVvW9IDiqAsGBUbWLieIriqH8DbUoXw/LlUCJMh3Qdz3brGwr jnM/7t6hCiwZ+twB/bgnWJLD/DHi0boIhA5/ekh2AgVWAfl1LipjFB0ppmTOUVmVxeJY 6sRcSFdrGFQZcVCZUN/fd4H1KCUnRzkf3vBCsbmbnoCalHdrfFcaCcOC/ZVZzn4MiX97 NH/w== X-Gm-Message-State: APjAAAU5fXAuJKZI2wlPAE6xesBRPs9q6REXCYeubxkdIWBYdHHAEbp1 +5DLDe1Hxu+1LNsbqgxP0i0= X-Google-Smtp-Source: APXvYqxj3tM78Wn4NSi1KnRpblo3W12er4Vr5wooDXAwq83hOwtkoHW1QFKZIdVcKlSrBmC5T2ClOQ== X-Received: by 2002:a37:67d4:: with SMTP id b203mr24898207qkc.435.1571691098636; Mon, 21 Oct 2019 13:51:38 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id l129sm9831589qkd.84.2019.10.21.13.51.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:38 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 02/16] net: dsa: add ports list in the switch fabric Date: Mon, 21 Oct 2019 16:51:16 -0400 Message-Id: <20191021205130.304149-3-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 a list of switch ports within the switch fabric. This will help the lookup of a port inside the whole fabric, and it is the first step towards supporting multiple CPU ports, before deprecating the usage of the unique dst->cpu_dp pointer. In preparation for a future allocation of the dsa_port structures, return -ENOMEM in case no structure is returned, even though this error cannot be reached yet. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli Reviewed-by: Andrew Lunn --- include/net/dsa.h | 5 +++++ net/dsa/dsa2.c | 48 +++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index 2e4fe2f8962b..6ff6dfcdc61d 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -125,6 +125,9 @@ struct dsa_switch_tree { */ struct dsa_port *cpu_dp; + /* List of switch ports */ + struct list_head ports; + /* * Data for the individual switch chips. */ @@ -195,6 +198,8 @@ struct dsa_port { struct work_struct xmit_work; struct sk_buff_head xmit_queue; + struct list_head list; + /* * Give the switch driver somewhere to hang its per-port private data * structures (accessible from the tagger). diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 1716535167ee..ba27ff8b4445 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -45,6 +45,8 @@ static struct dsa_switch_tree *dsa_tree_alloc(int index) dst->index = index; + INIT_LIST_HEAD(&dst->ports); + INIT_LIST_HEAD(&dst->list); list_add_tail(&dst->list, &dsa_tree_list); @@ -616,6 +618,22 @@ static int dsa_tree_add_switch(struct dsa_switch_tree *dst, return err; } +static struct dsa_port *dsa_port_touch(struct dsa_switch *ds, int index) +{ + struct dsa_switch_tree *dst = ds->dst; + struct dsa_port *dp; + + dp = &ds->ports[index]; + + dp->ds = ds; + dp->index = index; + + INIT_LIST_HEAD(&dp->list); + list_add_tail(&dp->list, &dst->ports); + + return dp; +} + static int dsa_port_parse_user(struct dsa_port *dp, const char *name) { if (!name) @@ -742,6 +760,20 @@ static int dsa_switch_parse_member_of(struct dsa_switch *ds, return 0; } +static int dsa_switch_touch_ports(struct dsa_switch *ds) +{ + struct dsa_port *dp; + int port; + + for (port = 0; port < ds->num_ports; port++) { + dp = dsa_port_touch(ds, port); + if (!dp) + return -ENOMEM; + } + + return 0; +} + static int dsa_switch_parse_of(struct dsa_switch *ds, struct device_node *dn) { int err; @@ -750,6 +782,10 @@ static int dsa_switch_parse_of(struct dsa_switch *ds, struct device_node *dn) if (err) return err; + err = dsa_switch_touch_ports(ds); + if (err) + return err; + return dsa_switch_parse_ports_of(ds, dn); } @@ -807,6 +843,8 @@ static int dsa_switch_parse_ports(struct dsa_switch *ds, static int dsa_switch_parse(struct dsa_switch *ds, struct dsa_chip_data *cd) { + int err; + ds->cd = cd; /* We don't support interconnected switches nor multiple trees via @@ -817,6 +855,10 @@ static int dsa_switch_parse(struct dsa_switch *ds, struct dsa_chip_data *cd) if (!ds->dst) return -ENOMEM; + err = dsa_switch_touch_ports(ds); + if (err) + return err; + return dsa_switch_parse_ports(ds, cd); } @@ -849,7 +891,6 @@ static int dsa_switch_probe(struct dsa_switch *ds) struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n) { struct dsa_switch *ds; - int i; ds = devm_kzalloc(dev, struct_size(ds, ports, n), GFP_KERNEL); if (!ds) @@ -858,11 +899,6 @@ struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n) ds->dev = dev; ds->num_ports = n; - for (i = 0; i < ds->num_ports; ++i) { - ds->ports[i].index = i; - ds->ports[i].ds = ds; - } - return ds; } EXPORT_SYMBOL_GPL(dsa_switch_alloc); From patchwork Mon Oct 21 20:51:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180876 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 (no SPF record) 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="bh6yL6yK"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpkG2cbRz9sPT for ; Tue, 22 Oct 2019 07:52:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730412AbfJUUvm (ORCPT ); Mon, 21 Oct 2019 16:51:42 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:37520 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730401AbfJUUvl (ORCPT ); Mon, 21 Oct 2019 16:51:41 -0400 Received: by mail-qt1-f195.google.com with SMTP id g50so9168027qtb.4; Mon, 21 Oct 2019 13:51:40 -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=FU9q/M/H1+HIalxOSW7oUGNiFmwEDh7wdw0zUnuQf6c=; b=bh6yL6yKPXrI7Jan+I9Z7PafBdxH1e0xoVB+UbpteQ9GWIYCxJQvZvKF4L5GA/uIvU ptoN/buJNowAi3W6XguCUO+VpbZT1Qp8NqFoV+0RNPg7JtsCLbxtz9YGxTx2w9p86mlG lNkWW1KKckBpg9O4/E1s8Oa1fbUCJleUxpKhwkECVYhcIQsm4B787nIWyMgGSB5HJFxc PgFlMS/nRowiNUonVWtRJOeCOTLAnesyAhB4RGmgv9FGGVh/NMxpyT0JaQsqC7W3fQ4W QqJHnL0XJSxy+6vPTjf951/F1KfgCZoB7maxG22MWANbFF216RDfsr+AbfkfwfhAMONk 7HaQ== 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=FU9q/M/H1+HIalxOSW7oUGNiFmwEDh7wdw0zUnuQf6c=; b=W7OJxmVzL9DjJg+89PFfvsaXhY0g8NBfJeZg3jH8gDGGDRmr8ckpKFp69ThCz1eVWh 0q0r0/ASSWCBw17aINY/JfLjWXGaXe6MQpKINFCyvtQYwlNXXeKv1cBk77X4q1EP7pdq w7hXERHZqe/XNwkp8KGoM/Qg2lCUy8uiCBdBJQo6gu8L5P5WZGN6maZfpKLs+WbY/Dcg amV7CS48c9WpasWlmtpiuPsC3PjfyJQjdrbZgF1sRozavTpG1FkR20/GMO/uSH5UB3Uk ptvIpz1lEyQco6jWfwQiFwiwh+DW50w5NBk6yNz645oEX7b/e3PKtelQ1BGi3ijj8Wmd QomQ== X-Gm-Message-State: APjAAAVe6tifZY+U+MYP3acHhEi7FwGle3GGAo92egdL9xn8BnGjaF7q KsYJBSxJ2Aq4hujujNc6d6ui/gDT X-Google-Smtp-Source: APXvYqz5vWmIQL78V3Tcr3ubqdVHzfWK14aJmD5KeZiWh9I+Kv7VWztmsjHiTdX4ZDVm7+rqsqrFoQ== X-Received: by 2002:ac8:6793:: with SMTP id b19mr25115688qtp.99.1571691100437; Mon, 21 Oct 2019 13:51:40 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id c204sm8739893qkb.90.2019.10.21.13.51.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:39 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 03/16] net: dsa: use ports list in dsa_to_port Date: Mon, 21 Oct 2019 16:51:17 -0400 Message-Id: <20191021205130.304149-4-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Use the new ports list instead of accessing the dsa_switch array of ports in the dsa_to_port helper. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli Reviewed-by: Andrew Lunn --- include/net/dsa.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index 6ff6dfcdc61d..d2b7ee28f3fd 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -285,7 +285,14 @@ struct dsa_switch { static inline struct dsa_port *dsa_to_port(struct dsa_switch *ds, int p) { - return &ds->ports[p]; + struct dsa_switch_tree *dst = ds->dst; + struct dsa_port *dp = NULL; + + list_for_each_entry(dp, &dst->ports, list) + if (dp->ds == ds && dp->index == p) + break; + + return dp; } static inline bool dsa_is_unused_port(struct dsa_switch *ds, int p) From patchwork Mon Oct 21 20:51: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: 1180874 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 (no SPF record) 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="AfG3Z4Bl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpk50Ykcz9sPk for ; Tue, 22 Oct 2019 07:52:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730431AbfJUUvo (ORCPT ); Mon, 21 Oct 2019 16:51:44 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:33614 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730419AbfJUUvn (ORCPT ); Mon, 21 Oct 2019 16:51:43 -0400 Received: by mail-qt1-f195.google.com with SMTP id r5so23383359qtd.0; Mon, 21 Oct 2019 13:51:42 -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=O9CPdzYm5ufK2UyykZobSwUtkryq5A7eUGa+CDCAGtY=; b=AfG3Z4BlaA1xm2SvqDoO0ITGHEp/OYNdlDVjU2A1dqQVanWF0I29179/LgU5ZeZjuD v+LywfOLLK6mBCKNl6ROBE9pUOLblkHEgzocW5Pe3hBu3jfiFva33uuzyLJtOcerb+RX 543MZOrpi9xpnjrbx6DZ9AQWbTIK0Aly279dLNDaMYcbj5XaSqCyOxA9uchUZk/Ir8ox rwxg7mtF1PJoXPlh0A5/T5i17jbBsEiMgUXrLKfqyGY3783hIdn8CHkiMCW/FgTOCyIJ zCr5GHBjfnTcOGvGoAY7DjeVXZActd47UE22NrrUxY8/60VKUD4QU/Gc06Iz3JbHMJqg dKrA== 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=O9CPdzYm5ufK2UyykZobSwUtkryq5A7eUGa+CDCAGtY=; b=Nsz6TFobg78GKpKhFcsLOh1D2v2WVLSl5EfQSCtj6Tdzf4QDDFfpPqVaGwcvYv0wQH EfmEE/RGyS/LJNO5gbiTbCnZG9J0EtH93T1AbFXlFmJKFbIIfXcexViVaC15m9K1gQqZ SRTcbB9YVvlhrR3usFgirvXDakZuJiSLqkytA5aMO3+nF8cWRNxgL3vbSghoieSWjETe rLxwiOy2lu9Eq6lw5hzanNKvDzP5yJDjaFHhbFwhKndulv2pb95NfdNyrtwIvqBIfi4t ERdlLTD2BgF68Yg9v0hM7Ikmxh6ObpE5tM845LobnGsEv/CWd4O2SuyHZgsgh9kc/dp+ RUUQ== X-Gm-Message-State: APjAAAW0F/fIhQ14FwDSYZ6RsNe02AHvt+JrJAM3SU65RobCS1veavyb gamVNoflFRUdHbfwZ/7RjAE= X-Google-Smtp-Source: APXvYqzVUOY2zYCggA4DFXzzyL+Xhs0eMzOdEXuTJwC7K4t0YKlZr9hqGVSbJf+NxasbkbtJU6hhYw== X-Received: by 2002:ac8:70c3:: with SMTP id g3mr11171049qtp.391.1571691101896; Mon, 21 Oct 2019 13:51:41 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id x203sm9630984qkb.11.2019.10.21.13.51.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:41 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 04/16] net: dsa: use ports list to find slave Date: Mon, 21 Oct 2019 16:51:18 -0400 Message-Id: <20191021205130.304149-5-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Use the new ports list instead of iterating over switches and their ports when looking for a slave device from a given master interface. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli Reviewed-by: Andrew Lunn --- net/dsa/dsa_priv.h | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index 12f8c7ee4dd8..53e7577896b6 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h @@ -104,25 +104,14 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev, { struct dsa_port *cpu_dp = dev->dsa_ptr; struct dsa_switch_tree *dst = cpu_dp->dst; - struct dsa_switch *ds; - struct dsa_port *slave_port; + struct dsa_port *dp; - if (device < 0 || device >= DSA_MAX_SWITCHES) - return NULL; + list_for_each_entry(dp, &dst->ports, list) + if (dp->ds->index == device && dp->index == port && + dp->type == DSA_PORT_TYPE_USER) + return dp->slave; - ds = dst->ds[device]; - if (!ds) - return NULL; - - if (port < 0 || port >= ds->num_ports) - return NULL; - - slave_port = &ds->ports[port]; - - if (unlikely(slave_port->type != DSA_PORT_TYPE_USER)) - return NULL; - - return slave_port->slave; + return NULL; } /* port.c */ From patchwork Mon Oct 21 20:51: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: 1180873 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 (no SPF record) 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="s1BvvFUB"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpk33mVKz9sPd for ; Tue, 22 Oct 2019 07:52:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730451AbfJUUvr (ORCPT ); Mon, 21 Oct 2019 16:51:47 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:43107 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730428AbfJUUvp (ORCPT ); Mon, 21 Oct 2019 16:51:45 -0400 Received: by mail-qk1-f196.google.com with SMTP id a194so10061159qkg.10; Mon, 21 Oct 2019 13:51:44 -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=/ooDb6G0PiKdNv/6wP/o2ydYbNujWPTh8k/LkgxW3Dw=; b=s1BvvFUBux9ZJkwWTDt6eF11xyxAqidCgpTcKWbbJpPBmv1IiVTNc1W+pHKN6DgJUL FylpKYVCUs3gD4ybqtNuX6cyKx8/bMU1KVdzbVN1sSIE1ko5q5ZEh6oZ7CCjwZumohX/ dpba02pv7Sleu3yfG0TI8ttLmANv+St0T0u8kNn76dMau4FYPqdtDGm25w8kpgJIYFuI ReKQ8oGr/CLMqd+VqqXYKgbQetmEt+IwFGY6x2vS0GXsgV/Dj27BsIQo2tHLuy8VAY66 4xwwZj1rqU6LOxng62CC4qoPWIJ2CHOeWiJX6qFSbF+icFkAOgxmR+lcZMx+uduhN8b5 0eCw== 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=/ooDb6G0PiKdNv/6wP/o2ydYbNujWPTh8k/LkgxW3Dw=; b=El4bSdNAjTrLupleR9Moo9wNtKIO/w5y/TWvRfJ0Eeji8UQbTJVGIbnvNrQDwJQV0A 5JltMhH0jNmB91xmEsVqS4g9oaowN/is7ho3G5m8ObgvacqZCuV2Ceu3a2Rl1scJgWQr kwr4C1bbFDhcmRsYuls5sREsXq6di2z/Jjc+x2N82Z5891jZRIWWPgn6JMDuFxBsGqov jRaQVFXjna1hc47VPSajB3cAThUNfrnfkDj7AdvqMbmguDpWIybWUw7aslrbzblkM7Dn xLSeR1XXW0zlG6/9s20/QLzlSZACLkzIh7iJCNXn/VJCMwfZjsvCd9i4MiGSz7HwJWXN ITew== X-Gm-Message-State: APjAAAU1bDpdBsN4ESlT2VmrYIC7qh8tmYRAvs+cTIj+PFvNO0rMbL00 ixf1sJ0y0EhY1zJeMzYuat7CAs3K X-Google-Smtp-Source: APXvYqw0OFKDqIzB/gi63Vt/lpmTWDoVFtPh+yHNGgvCSZqVQxli8l8dkP/2EzHwVYN3/xuKrdfljA== X-Received: by 2002:a37:4a0c:: with SMTP id x12mr15028702qka.19.1571691103785; Mon, 21 Oct 2019 13:51:43 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id c23sm11153140qte.66.2019.10.21.13.51.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:43 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 05/16] net: dsa: use ports list to setup switches Date: Mon, 21 Oct 2019 16:51:19 -0400 Message-Id: <20191021205130.304149-6-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Use the new ports list instead of iterating over switches and their ports when setting up the switches and their ports. At the same time, provide setup states and messages for ports and switches as it is done for the trees. Signed-off-by: Vivien Didelot --- include/net/dsa.h | 4 ++ net/dsa/dsa2.c | 93 +++++++++++++++++++++-------------------------- 2 files changed, 45 insertions(+), 52 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index d2b7ee28f3fd..bd08bdee8341 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -215,9 +215,13 @@ struct dsa_port { * Original copy of the master netdev net_device_ops */ const struct net_device_ops *orig_ndo_ops; + + bool setup; }; struct dsa_switch { + bool setup; + struct device *dev; /* diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index ba27ff8b4445..01b6047d9b7b 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -267,6 +267,9 @@ static int dsa_port_setup(struct dsa_port *dp) bool dsa_port_enabled = false; int err = 0; + if (dp->setup) + return 0; + switch (dp->type) { case DSA_PORT_TYPE_UNUSED: dsa_port_disable(dp); @@ -335,14 +338,21 @@ static int dsa_port_setup(struct dsa_port *dp) dsa_port_link_unregister_of(dp); if (err && devlink_port_registered) devlink_port_unregister(dlp); + if (err) + return err; - return err; + dp->setup = true; + + return 0; } static void dsa_port_teardown(struct dsa_port *dp) { struct devlink_port *dlp = &dp->devlink_port; + if (!dp->setup) + return; + switch (dp->type) { case DSA_PORT_TYPE_UNUSED: break; @@ -365,11 +375,16 @@ static void dsa_port_teardown(struct dsa_port *dp) } break; } + + dp->setup = false; } static int dsa_switch_setup(struct dsa_switch *ds) { - int err = 0; + int err; + + if (ds->setup) + return 0; /* Initialize ds->phys_mii_mask before registering the slave MDIO bus * driver and before ops->setup() has run, since the switch drivers and @@ -411,6 +426,8 @@ static int dsa_switch_setup(struct dsa_switch *ds) goto unregister_notifier; } + ds->setup = true; + return 0; unregister_notifier: @@ -426,6 +443,9 @@ static int dsa_switch_setup(struct dsa_switch *ds) static void dsa_switch_teardown(struct dsa_switch *ds) { + if (!ds->setup) + return; + if (ds->slave_mii_bus && ds->ops->phy_read) mdiobus_unregister(ds->slave_mii_bus); @@ -440,78 +460,47 @@ static void dsa_switch_teardown(struct dsa_switch *ds) ds->devlink = NULL; } + ds->setup = false; } static int dsa_tree_setup_switches(struct dsa_switch_tree *dst) { - struct dsa_switch *ds; struct dsa_port *dp; - int device, port, i; - int err = 0; - - for (device = 0; device < DSA_MAX_SWITCHES; device++) { - ds = dst->ds[device]; - if (!ds) - continue; + int err; - err = dsa_switch_setup(ds); + list_for_each_entry(dp, &dst->ports, list) { + err = dsa_switch_setup(dp->ds); if (err) - goto switch_teardown; - - for (port = 0; port < ds->num_ports; port++) { - dp = &ds->ports[port]; + goto teardown; + } - err = dsa_port_setup(dp); - if (err) - goto ports_teardown; - } + list_for_each_entry(dp, &dst->ports, list) { + err = dsa_port_setup(dp); + if (err) + goto teardown; } return 0; -ports_teardown: - for (i = 0; i < port; i++) - dsa_port_teardown(&ds->ports[i]); - - dsa_switch_teardown(ds); - -switch_teardown: - for (i = 0; i < device; i++) { - ds = dst->ds[i]; - if (!ds) - continue; - - for (port = 0; port < ds->num_ports; port++) { - dp = &ds->ports[port]; - - dsa_port_teardown(dp); - } +teardown: + list_for_each_entry(dp, &dst->ports, list) + dsa_port_teardown(dp); - dsa_switch_teardown(ds); - } + list_for_each_entry(dp, &dst->ports, list) + dsa_switch_teardown(dp->ds); return err; } static void dsa_tree_teardown_switches(struct dsa_switch_tree *dst) { - struct dsa_switch *ds; struct dsa_port *dp; - int device, port; - for (device = 0; device < DSA_MAX_SWITCHES; device++) { - ds = dst->ds[device]; - if (!ds) - continue; + list_for_each_entry(dp, &dst->ports, list) + dsa_port_teardown(dp); - for (port = 0; port < ds->num_ports; port++) { - dp = &ds->ports[port]; - - dsa_port_teardown(dp); - } - - dsa_switch_teardown(ds); - } + list_for_each_entry(dp, &dst->ports, list) + dsa_switch_teardown(dp->ds); } static int dsa_tree_setup_master(struct dsa_switch_tree *dst) From patchwork Mon Oct 21 20:51: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: 1180875 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 (no SPF record) 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="GzzTpeJR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpk65ky1z9sPT for ; Tue, 22 Oct 2019 07:52:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730632AbfJUUwp (ORCPT ); Mon, 21 Oct 2019 16:52:45 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:40857 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730419AbfJUUvq (ORCPT ); Mon, 21 Oct 2019 16:51:46 -0400 Received: by mail-qt1-f195.google.com with SMTP id o49so15489581qta.7; Mon, 21 Oct 2019 13:51:45 -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=zmHdrtIAzJso5M2LnfOM9dJxmuEt0nVQPAtxHNuTfN0=; b=GzzTpeJRM7yMt0wzr6zYJanU1LYDbykEABgzZadCW267nFtj1ftBq21ED3PXsAsfEl UkfbcB4n85nGz/dZP9cWFawbA6odiu8dfszb9qemzJxXj3LGEq1HyaarT/IcvGtSQmPr c7ljYE/57R4BVxm5vpxXqoBxCP8GxvQb62LK8BJC5LRGhWfLNvb7aEGbvyzegyO5o/YQ m1GsWu9B4G2PNBVLp0SNhOVVYMs0VQb4oxYXa7F4Nu6bIo5W/IzNrAW8ngQj2jQC60An QT/uxyPVk3/eaL50hnkVbImAe6AL7zbjhDJPqhZ7my+Bul6O7mQXI8Ca7CWhACcLSrTy meDQ== 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=zmHdrtIAzJso5M2LnfOM9dJxmuEt0nVQPAtxHNuTfN0=; b=Fa0kZpkiLnaK3HhpeWSeQWzOI60rZkG8iBqJsWJldZFqXshlSKVR1bI0QYvFiC8nqt e68Tr3qg5HyqLqG5bLo9U5rlr98whTQN9W/XsxYGNZYjcGQV0p5+sJ+OHPB9sL609k1U mdjuRTdEbE9YuIsPe5zSkV3onmCgRWA6bAFn1F5uej2cNxTDEeg4iUlEfx3RG0ufYbXg Rm54QPrmSmeHUa0OgaCR/8D6qsqWkxCRhCpBT8FaHX/levA7yMErswr6cUk2pgkZY9bP sogU/DLBTmtKPpo+Z8UiuGrBEqj//TDE1p/Ai3w4JSU8hfLR4DF52708E9No2bhn7hnY 42KA== X-Gm-Message-State: APjAAAXr9tamX5xIQ3vkHtI/5q07h+r60YjsPREv5Fn7a0cvM7WGmI6r jeo9F3dmKfnv/G+qX8Eq59k= X-Google-Smtp-Source: APXvYqxwQNRDu9W+lllrC0cZIgapYpZAbmxA+Pti7psCTsJqoJc8nRSthG6dU+OqkQURuZOsI3JgPQ== X-Received: by 2002:ac8:23e8:: with SMTP id r37mr27024190qtr.365.1571691105393; Mon, 21 Oct 2019 13:51:45 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id o13sm2272328qto.96.2019.10.21.13.51.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:44 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 06/16] net: dsa: use ports list for routing table setup Date: Mon, 21 Oct 2019 16:51:20 -0400 Message-Id: <20191021205130.304149-7-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Use the new ports list instead of accessing the dsa_switch array of ports when iterating over DSA ports of a switch to set up the routing table. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli Reviewed-by: Andrew Lunn --- net/dsa/dsa2.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 01b6047d9b7b..623805ba8e1a 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -157,6 +157,7 @@ static bool dsa_port_setup_routing_table(struct dsa_port *dp) static bool dsa_switch_setup_routing_table(struct dsa_switch *ds) { + struct dsa_switch_tree *dst = ds->dst; bool complete = true; struct dsa_port *dp; int i; @@ -164,10 +165,8 @@ static bool dsa_switch_setup_routing_table(struct dsa_switch *ds) for (i = 0; i < DSA_MAX_SWITCHES; i++) ds->rtable[i] = DSA_RTABLE_NONE; - for (i = 0; i < ds->num_ports; i++) { - dp = &ds->ports[i]; - - if (dsa_port_is_dsa(dp)) { + list_for_each_entry(dp, &dst->ports, list) { + if (dp->ds == ds && dsa_port_is_dsa(dp)) { complete = dsa_port_setup_routing_table(dp); if (!complete) break; From patchwork Mon Oct 21 20:51: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: 1180863 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 (no SPF record) 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="Lbv5YQgU"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpj51Tmwz9sPT for ; Tue, 22 Oct 2019 07:51:53 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730467AbfJUUvt (ORCPT ); Mon, 21 Oct 2019 16:51:49 -0400 Received: from mail-qt1-f194.google.com ([209.85.160.194]:33624 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730447AbfJUUvs (ORCPT ); Mon, 21 Oct 2019 16:51:48 -0400 Received: by mail-qt1-f194.google.com with SMTP id r5so23383712qtd.0; Mon, 21 Oct 2019 13:51:47 -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=gP5aOGQm4RR5GKmbETJdksv4+Dy+n4KwJgPC+qtGMS4=; b=Lbv5YQgUMc4hjqTtCjXgAOUYrLfjzad1Mv/7k3vVcHQMXYKsOSEZQW9mpUtZnBv89h W4BoyD2RnNqkfprfA9aoPVC+CHJ8/gvaK6c/rT85Xqv+udNExtaN7jasi8uKdZkwhIpN kS+ZmdIA4Br215x3Geea3DJ8HQQsmBknv7mCzFAFjShXFMaSo7K+hWWTI0+W6UvQzyz3 vEpE/ehZMSkYnID4X1z7MPPg5LWkAn0vEVkx9FimEdfuwDFiokq1OdyTQM3xCXH3rnAT oq7rNqetqcJObM9HgVpNLzQdoHONSYTN3pyvywZ876PS8gvkmmbAjM21ke6YGbubaRtS Yymw== 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=gP5aOGQm4RR5GKmbETJdksv4+Dy+n4KwJgPC+qtGMS4=; b=MucsVzX8zO/N71x9JyGnCmBQdZV4O7Ch+S9JCswxFE/Un8Rcnhds0XA6fD9S/cx0A6 CZAjzqMj+Njyr+uFwcjx6A5rVsKSGDtVQMBirISLKdTxX33aXW3Dc25vtL1E5R0wtztQ fTkD1T0halHQaVEtyVUjvxW9mDBrrri0s9vFA0IIcIlujdC8aZ3ftuqBFO5veLTaW5LF 7AcsuoopJAAEisCX+1OYlLIXPHz+mKmTLf3Xv82zECjpZnlu1CdLZtbQk7Y+3CyzZH9W eO+A4JH9isbBbxv+GeCP+5S1rxECZndP5sFgagdE8y10HDFQGVb19ZXOuoixkYH6phTU zfCQ== X-Gm-Message-State: APjAAAXxnxx/CjeuEJ+/QFOSHbvbyUUhCS2PJVOWJJ+4z0Yfx7IgWtco prMjwYv9ICd7dPX1vb+kx4c= X-Google-Smtp-Source: APXvYqwqgl2+x5QDiF30Xi6fe1sHX39dluDbPbiQdvGRO5PLttsHdkhV3cdbNqv85ppspZKJmDd65A== X-Received: by 2002:a05:6214:4a:: with SMTP id c10mr8293515qvr.89.1571691107093; Mon, 21 Oct 2019 13:51:47 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id y5sm8292049qki.108.2019.10.21.13.51.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:46 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 07/16] net: dsa: use ports list to find a port by node Date: Mon, 21 Oct 2019 16:51:21 -0400 Message-Id: <20191021205130.304149-8-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Use the new ports list instead of iterating over switches and their ports to find a port from a given node. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli --- net/dsa/dsa2.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 623805ba8e1a..a4de7ff8b19b 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -113,22 +113,11 @@ static bool dsa_port_is_user(struct dsa_port *dp) static struct dsa_port *dsa_tree_find_port_by_node(struct dsa_switch_tree *dst, struct device_node *dn) { - struct dsa_switch *ds; struct dsa_port *dp; - int device, port; - - for (device = 0; device < DSA_MAX_SWITCHES; device++) { - ds = dst->ds[device]; - if (!ds) - continue; - for (port = 0; port < ds->num_ports; port++) { - dp = &ds->ports[port]; - - if (dp->dn == dn) - return dp; - } - } + list_for_each_entry(dp, &dst->ports, list) + if (dp->dn == dn) + return dp; return NULL; } From patchwork Mon Oct 21 20:51: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: 1180872 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 (no SPF record) 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="Mq1CuWcr"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpjy4CFsz9sPk for ; Tue, 22 Oct 2019 07:52:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730621AbfJUUwf (ORCPT ); Mon, 21 Oct 2019 16:52:35 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:33878 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730428AbfJUUvt (ORCPT ); Mon, 21 Oct 2019 16:51:49 -0400 Received: by mail-qk1-f196.google.com with SMTP id f18so13541006qkm.1; Mon, 21 Oct 2019 13:51:49 -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=8m6K/WMO8zxyMttz6j+QnaDf4E6+eGlpyVOiEpkVr2s=; b=Mq1CuWcr3wmyuej9kvzNamOty4GwOWREYnEKh5M5qJ1A3l4JUr9uUkLAacfXD0xrd/ QynrR9VtxI/0r5lXHJk5yk1c/oxPf+R5nOhAmS6Br5rI0dduyb+WMvum0cGAWFbjHNy9 Vb03kc1lfKTl+d0waVg//lyyYOE/FEAZe0CrpsNGq8kze++HDhU2r1STajnRleHuIX1a tJbm1i+0gs1BkTOz7O2mW8zA2TX4yYNxWgMCd6nBk19sYKqKfaV5qMcnjKnSLOE/mfpU G8ApUIXRVagEY+++0whvbLr/u1xjBGHh0EczMBOGU4+ZOhYY3ZLRopUZ++Q8bf+7bwJE L9xg== 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=8m6K/WMO8zxyMttz6j+QnaDf4E6+eGlpyVOiEpkVr2s=; b=A1pO+cBZvEnnRxxZO/JNDzkknHemXp4njXcTC42dJa12ysT8MVvv79SNbV+s/mt5DN oQ2LdOVmtEU2EsFTXOMhEPfr79sK4Sn9pnYrafGNZE3l5FOA3tfrBqITY+k492Hf9Zx/ ZU123YNY28wO7mOayMMj27wy8yvcheXiKcJ5CDCA7DpCUqU5kkDoS+65+eiDsAzCHUE/ YJBW0J/GidxFmCWDOQyyoQQMKHaOMty0boHo2egwCPOT09O4ofVPbOUOMccFqcKnbryH E5WndQ0tHaHKZaM8UzMFH9Ix6IY+Ruc8TW1/4DFJl+DgCYKdWBM3CCKrChrx+d9M+L1x THXg== X-Gm-Message-State: APjAAAVsKrR/vZXtVKTpJjkrasTNOaHOkfXmKz9cYm8022qOxibMLQVX Tcz7vNA4eaTXxP0al7Xk+7c= X-Google-Smtp-Source: APXvYqy6cjA3Wy2hbKtaPCFE0GRBXbmwf2zYkbN/QRmjbgcGe5qyNKYjniHRDjNrheQn9JzVcHiE7g== X-Received: by 2002:a37:5b46:: with SMTP id p67mr707686qkb.318.1571691108617; Mon, 21 Oct 2019 13:51:48 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id z5sm7939300qkl.101.2019.10.21.13.51.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:48 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 08/16] net: dsa: use ports list to setup multiple master devices Date: Mon, 21 Oct 2019 16:51:22 -0400 Message-Id: <20191021205130.304149-9-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Now that we have a potential list of CPU ports, make use of it instead of only configuring the master device of an unique CPU port. Signed-off-by: Vivien Didelot --- net/dsa/dsa2.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index a4de7ff8b19b..514c0195e2e8 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -493,19 +493,27 @@ static void dsa_tree_teardown_switches(struct dsa_switch_tree *dst) static int dsa_tree_setup_master(struct dsa_switch_tree *dst) { - struct dsa_port *cpu_dp = dst->cpu_dp; - struct net_device *master = cpu_dp->master; + struct dsa_port *dp; + int err; - /* DSA currently supports a single pair of CPU port and master device */ - return dsa_master_setup(master, cpu_dp); + list_for_each_entry(dp, &dst->ports, list) { + if (dsa_port_is_cpu(dp)) { + err = dsa_master_setup(dp->master, dp); + if (err) + return err; + } + } + + return 0; } static void dsa_tree_teardown_master(struct dsa_switch_tree *dst) { - struct dsa_port *cpu_dp = dst->cpu_dp; - struct net_device *master = cpu_dp->master; + struct dsa_port *dp; - return dsa_master_teardown(master); + list_for_each_entry(dp, &dst->ports, list) + if (dsa_port_is_cpu(dp)) + dsa_master_teardown(dp->master); } static int dsa_tree_setup(struct dsa_switch_tree *dst) From patchwork Mon Oct 21 20:51: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: 1180864 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 (no SPF record) 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="tPnuFqev"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpj608Bkz9sPf for ; Tue, 22 Oct 2019 07:51:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730486AbfJUUvw (ORCPT ); Mon, 21 Oct 2019 16:51:52 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:46368 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730447AbfJUUvv (ORCPT ); Mon, 21 Oct 2019 16:51:51 -0400 Received: by mail-qk1-f196.google.com with SMTP id e66so14119979qkf.13; Mon, 21 Oct 2019 13:51: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=+CwstySmiepzoE+a6XraWOC/6PchbI8I6Ki/UQTySws=; b=tPnuFqevwVoN7J/ZrzHR4oZJZ8Q+kxW+B28j8lCAZ3O0x3800QrK22OQQ0EYOfgcJ0 SgZQI47byWY91ju99PkTCSCZF5wdjr0U/lA7eUF/z84W3zmR6TGzOQ2v4bCeKqttn7z7 sBR5kavwYjB9BLG8Vk5RT0SOIKew7QkLcX5EkMwwCqgF+S4X6b0qNhusEXcryuJgpqQO ualCXD2B7aOIbDXiuapXPkaJgyU3ApXdFn5eqEVPqtUnnpcdJx3R6Dfv6rxJ9AcCRaap +aavm+/TJLqiEvd7OjJfxiQ8+/wyQNLgmMJ1OpdUyc05Ri7LEIOewu1kHlqy/qY6epoD HU/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=+CwstySmiepzoE+a6XraWOC/6PchbI8I6Ki/UQTySws=; b=ctH45h5BezavM7UHm5iZZ4jUBgge2KyB0k8vjQlMiNdc8ZEDo3AJ3EMPaVOKgqfopq 4ll76a/L9Q1dCbp8uQpk8VCrW4jlg7PFp6aqIQUPSGDFxRrNH0+Ax8ZuWAPDaIz26niU 4+1L+gM2IZTX/U5KV/iwF4UOcoNdaUUBVuFrsP9VvGRrsfm6rVBUtme1vuWWqHsLJDJP 9D7WH7ed5hiyl3KXt/bWiVHPqdtP1KGhkdAqx8OfrFQhKxtc00cNXd+FvVr6d5tWkf25 ZXySPF/RaG3ss+MokU/UJ5ZJTtN6Oyp+cfe5meu6HbR+HWBLpyXeR0hCPndOo+jw4WDx 2gjA== X-Gm-Message-State: APjAAAVs+tbBooq6At5vrNxGdZKZy4AIxQgOuLMTLX4KHGVs5fyKpUA8 jQEmeAoYzV+0NvPGuIxFlWQ= X-Google-Smtp-Source: APXvYqwhfDBa7TdpYHVfo97i3GdrIG82b5JUic/bxJKYJLdiRMxe0m2kJQkpeV8cRXOKU2QpLoBrig== X-Received: by 2002:a05:620a:12e7:: with SMTP id f7mr24029730qkl.290.1571691110102; Mon, 21 Oct 2019 13:51:50 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id o38sm10783985qtc.39.2019.10.21.13.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:49 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 09/16] net: dsa: use ports list to find first CPU port Date: Mon, 21 Oct 2019 16:51:23 -0400 Message-Id: <20191021205130.304149-10-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Use the new ports list instead of iterating over switches and their ports when looking up the first CPU port in the tree. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli --- net/dsa/dsa2.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 514c0195e2e8..80191c7702a9 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -186,22 +186,11 @@ static bool dsa_tree_setup_routing_table(struct dsa_switch_tree *dst) static struct dsa_port *dsa_tree_find_first_cpu(struct dsa_switch_tree *dst) { - struct dsa_switch *ds; struct dsa_port *dp; - int device, port; - - for (device = 0; device < DSA_MAX_SWITCHES; device++) { - ds = dst->ds[device]; - if (!ds) - continue; - for (port = 0; port < ds->num_ports; port++) { - dp = &ds->ports[port]; - - if (dsa_port_is_cpu(dp)) - return dp; - } - } + list_for_each_entry(dp, &dst->ports, list) + if (dsa_port_is_cpu(dp)) + return dp; return NULL; } From patchwork Mon Oct 21 20:51:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180870 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 (no SPF record) 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="rFjFQmsj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpjf15Mpz9sPh for ; Tue, 22 Oct 2019 07:52:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730519AbfJUUv5 (ORCPT ); Mon, 21 Oct 2019 16:51:57 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:45413 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730479AbfJUUvw (ORCPT ); Mon, 21 Oct 2019 16:51:52 -0400 Received: by mail-qt1-f196.google.com with SMTP id c21so23283665qtj.12; Mon, 21 Oct 2019 13:51:52 -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=95u7W4dCH8VRKrE2WocVBnfZD85GAOe+WTprB4izR4Q=; b=rFjFQmsj/K9JUmV1Ip+/mX7lyFMaK9S3vjySnnl8+B0buvPqovA/KBsqGlCbit2wnK slplXz0QR3ACQ+EfQNmbZfMC0NBZYq4j/oBnDOkPJtQwz0F7mtqNIeGejtXe363VCNHZ kqDjNwF9NP8zItAWG54RHsPiJm8ZgopmixzoN9US7mB9FmM5o+VRe+g3ihWbOrgHkirI hovh+EBLO2ud9TxLkaDPAlcu+tdPWb/PwLdmfD23ZCkNrFeupMTX9cxp0pRSPh4g/o7j k7PjCNmngN7fNZeykrc2MZMvqF1DVLB2tTMxaFWtGL8yRxNVS1m3CqGjIdFk41em3D7r ZQ8g== 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=95u7W4dCH8VRKrE2WocVBnfZD85GAOe+WTprB4izR4Q=; b=jzHdiG6z/LfkpFCsvwBnoFg3Gy1j3mFVV7ZJhMKLWmLCjZHSIcaRiuthzigIlVPas1 6utG67Li27BAQqha2tVetqFPOKinxxs3DNHTCEEn1cpzcsgCiK29fIK+h68fTJXekyT6 HDyr7peES3fcs8eQT6Su8Jcql2C3NGkO0bWw6Wc19MCYs+wWmfFVzJ9HY+MB0AFu5kBt bCGsfBEdXXh3ph69AV80bPP+SsZuCKr2uNXfbYsfGkSPjVsyGC9Cxbq2KUXCWYP7OxNF X8vo5MQashcKs7F0/7H/9eNWlo+pGBkiXV4J9vuxaR3llPCA58/5EiCN4faQ1CRkvLkg Qytg== X-Gm-Message-State: APjAAAVK30+txxQjDvNpJfvw4q0j6mXC7gCOERj55L+WW27SpIqHkVwr qeyBgVzEVnBBszOwm3R9T8I= X-Google-Smtp-Source: APXvYqxAOGBIpTMYVoPuonKVtvSWnGgJeJSFFkXAosdMS0XAePN4PleMe3NhVtPzf0HstCbbQ1eZEQ== X-Received: by 2002:ac8:3408:: with SMTP id u8mr26697057qtb.380.1571691111709; Mon, 21 Oct 2019 13:51:51 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id x19sm8036460qkf.26.2019.10.21.13.51.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:51 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 10/16] net: dsa: use ports list to setup default CPU port Date: Mon, 21 Oct 2019 16:51:24 -0400 Message-Id: <20191021205130.304149-11-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Use the new ports list instead of iterating over switches and their ports when setting up the default CPU port. Unassign it on teardown. Now that we can iterate over multiple CPU ports, remove dst->cpu_dp. At the same time, provide a better error message for CPU-less tree. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli --- include/net/dsa.h | 5 ----- net/dsa/dsa2.c | 33 ++++++++++++--------------------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index bd08bdee8341..f572134eb5de 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -120,11 +120,6 @@ struct dsa_switch_tree { */ struct dsa_platform_data *pd; - /* - * The switch port to which the CPU is attached. - */ - struct dsa_port *cpu_dp; - /* List of switch ports */ struct list_head ports; diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 80191c7702a9..bf8b4e0fcb4f 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -197,38 +197,29 @@ static struct dsa_port *dsa_tree_find_first_cpu(struct dsa_switch_tree *dst) static int dsa_tree_setup_default_cpu(struct dsa_switch_tree *dst) { - struct dsa_switch *ds; - struct dsa_port *dp; - int device, port; + struct dsa_port *cpu_dp, *dp; - /* DSA currently only supports a single CPU port */ - dst->cpu_dp = dsa_tree_find_first_cpu(dst); - if (!dst->cpu_dp) { - pr_warn("Tree has no master device\n"); + cpu_dp = dsa_tree_find_first_cpu(dst); + if (!cpu_dp) { + pr_err("DSA: tree %d has no CPU port\n", dst->index); return -EINVAL; } /* Assign the default CPU port to all ports of the fabric */ - for (device = 0; device < DSA_MAX_SWITCHES; device++) { - ds = dst->ds[device]; - if (!ds) - continue; - - for (port = 0; port < ds->num_ports; port++) { - dp = &ds->ports[port]; - - if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) - dp->cpu_dp = dst->cpu_dp; - } - } + list_for_each_entry(dp, &dst->ports, list) + if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) + dp->cpu_dp = cpu_dp; return 0; } static void dsa_tree_teardown_default_cpu(struct dsa_switch_tree *dst) { - /* DSA currently only supports a single CPU port */ - dst->cpu_dp = NULL; + struct dsa_port *dp; + + list_for_each_entry(dp, &dst->ports, list) + if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) + dp->cpu_dp = NULL; } static int dsa_port_setup(struct dsa_port *dp) From patchwork Mon Oct 21 20:51:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180865 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 (no SPF record) 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="KOdh9YDG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpj96RW0z9sPf for ; Tue, 22 Oct 2019 07:51:57 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730504AbfJUUv4 (ORCPT ); Mon, 21 Oct 2019 16:51:56 -0400 Received: from mail-qt1-f194.google.com ([209.85.160.194]:35224 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730494AbfJUUvy (ORCPT ); Mon, 21 Oct 2019 16:51:54 -0400 Received: by mail-qt1-f194.google.com with SMTP id m15so23396432qtq.2; Mon, 21 Oct 2019 13:51: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=oSeB99tFWrSsr858sLtErorntCjYJIilkerqAgdpByo=; b=KOdh9YDGlIxLKlwrwjHEzIwis/8g92PV/BE52JCKYFqEkK+Y48TP35JaJp7juAZrvZ kba4xzHaPYFpup9+5XQ8DYxyhiiEd+oboNPna18+B2ol3LXvHUeeg8S4zA7Y+PTHTLOw 7yD5z3ItiaxoTzxYoS96BL9/HfMIJIR7DAzxgG6+Nlgm53rEQ1sDSJRT20oWJnQ4WI9Q xs6qdTGugM3TtqbOy6W417fc2mRG5S7NOecOtOPjsDkapsM0JgE+39OlbIZ2jphAJ647 em1Z1FsMnMjxENW3K3Gcuny+ohotTwFjFtYBKb2JoF6R/oQ5pJ34Hy8c78lZ+T+VzLYj MZKw== 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=oSeB99tFWrSsr858sLtErorntCjYJIilkerqAgdpByo=; b=LYLfYRPzK4sGPL8RnKiPVTI2lldEecfOA9wiCTKq1z2pWLWu02UmOUQRzEqAZ4Ezke cmiLcgElqng6IuVQbbQNLxHYch6jqC0nP/Ep0M5vHxJ3ko7maKaDhZxJnujWpaAZ2wGg cs2zk3X+nkZw/VEue2SHGEkulP6lCp/JhjpwqVAr+CdNsXgRy4wMQIPxs1D1E9C7/j2Z sqoPtO8V9Tb4tYLGEDRA1kS32KdlKtYUC1mKuYu1PdKvPCteCL0eI4aFi8p50AHM5IFQ QUEsFMyjbpbH5lvfaobAq2sA3Em6+AUc2idd2+e4LEeOFEuFDPH+h/ZL5326XKvEENXo hjkw== X-Gm-Message-State: APjAAAXZucVPHXdCbqsfdOD4jWKfbVY761OCPsYAdw/FRmmahd0VEjHH k/VNIA76csmfVaQs+zGiYEn8Jrf0 X-Google-Smtp-Source: APXvYqwZiEckxAYx6BtHCcUSkfV2xWUc7O64jrz4E/bde9ZPekJpT8bgi/75ebalkVMuAm2ydLtasQ== X-Received: by 2002:ac8:23e8:: with SMTP id r37mr27024688qtr.365.1571691113112; Mon, 21 Oct 2019 13:51:53 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id h3sm430795qte.62.2019.10.21.13.51.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:52 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 11/16] net: dsa: mv88e6xxx: silently skip PVT ops Date: Mon, 21 Oct 2019 16:51:25 -0400 Message-Id: <20191021205130.304149-12-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Since mv88e6xxx_pvt_map is a static helper, no need to return -EOPNOTSUPP if the chip has no PVT, simply silently skip the operation. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli --- drivers/net/dsa/mv88e6xxx/chip.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index d67deec77452..510ccdc2d03c 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -1253,7 +1253,7 @@ static int mv88e6xxx_pvt_map(struct mv88e6xxx_chip *chip, int dev, int port) u16 pvlan = 0; if (!mv88e6xxx_has_pvt(chip)) - return -EOPNOTSUPP; + return 0; /* Skip the local source device, which uses in-chip port VLAN */ if (dev != chip->ds->index) @@ -2049,9 +2049,6 @@ static int mv88e6xxx_bridge_map(struct mv88e6xxx_chip *chip, } } - if (!mv88e6xxx_has_pvt(chip)) - return 0; - /* Remap the Port VLAN of each cross-chip bridge group member */ for (dev = 0; dev < DSA_MAX_SWITCHES; ++dev) { ds = chip->ds->dst->ds[dev]; @@ -2101,9 +2098,6 @@ static int mv88e6xxx_crosschip_bridge_join(struct dsa_switch *ds, int dev, struct mv88e6xxx_chip *chip = ds->priv; int err; - if (!mv88e6xxx_has_pvt(chip)) - return 0; - mv88e6xxx_reg_lock(chip); err = mv88e6xxx_pvt_map(chip, dev, port); mv88e6xxx_reg_unlock(chip); @@ -2116,9 +2110,6 @@ static void mv88e6xxx_crosschip_bridge_leave(struct dsa_switch *ds, int dev, { struct mv88e6xxx_chip *chip = ds->priv; - if (!mv88e6xxx_has_pvt(chip)) - return; - mv88e6xxx_reg_lock(chip); if (mv88e6xxx_pvt_map(chip, dev, port)) dev_err(ds->dev, "failed to remap cross-chip Port VLAN\n"); From patchwork Mon Oct 21 20:51:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180869 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 (no SPF record) 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="sASsBmWz"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpjc0BZFz9sPh for ; Tue, 22 Oct 2019 07:52:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730528AbfJUUv6 (ORCPT ); Mon, 21 Oct 2019 16:51:58 -0400 Received: from mail-qt1-f193.google.com ([209.85.160.193]:41049 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730498AbfJUUvz (ORCPT ); Mon, 21 Oct 2019 16:51:55 -0400 Received: by mail-qt1-f193.google.com with SMTP id c17so20324279qtn.8; Mon, 21 Oct 2019 13:51:55 -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=gRTkU1hlDhCB4rz+rajjExJGYzm4sxaCoEEvEfqhbgw=; b=sASsBmWzjO6u9ASPRxcZ2BgA0JtTGGA4ZhFH4krisCPp8zdDccuamCONKisNdRau3L xzjZwie63fDkQbtGvi9JehLFTai7At0QA1h3UCBiXeOoJCTrzeN5ExDN0yDwxtjy6Fi6 tIEwFiWrwMZ9MMebR7ged0Z4y2VclsLwUrlbcKEfa+zlCnnWZBQe1H/jfya5evv1tcSr x5/EKoP3LXbx2UpmhHE2Yz/et7+dAxrvOfe8Kcbu3lccAC6y/DXFDpCxp39YGoY/nzT7 Sq9Umhw0xN1CRKU0NDbPd6Rs4JAPvzJ+AU26M3Des3pN9pB8L+tksCny/Izz4Zyp1uqi qkDw== 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=gRTkU1hlDhCB4rz+rajjExJGYzm4sxaCoEEvEfqhbgw=; b=J6GOlr2DfxMTMhkBawWMkRf31xyP+zMc3LrRnyHibYyP9pvooz9bebNJoh1T3T405b /3GWZaL9amhny10vx9wmw33DSWT71RMlrXtVjjAejNKNIeSR1yW0X8fw+Mm1IoyVRqRq 3WL4POsCzOBeMOgbpPIi6Zmx+l7wAfqArS0jUAC8Y0yz6ZBxgh0P218/K4WhgiopWHEh fxwN3WkQICk4ClLlq+KkgG/JxrSFfKZX/CscLpS/B8hR1W70rEZKy+lG+AeKR7DJB+5D LuirKPR4xNMdLcq6juDDJyfpn4WoGBH1Q+pJWCH4dIul/e1m+q3WZzgH1RI+RpzZ+Dp/ E+8A== X-Gm-Message-State: APjAAAVKjufRBqglxTgeG6ZbsN1CiOqqhZlmmJQzrva8zWF0WdX4F/NS vhq6Jn8aQ52d77l8WDdPSH7jGF15 X-Google-Smtp-Source: APXvYqw+E0OJZLBaB2a7S+8JO7Z7cCl3HiYQerFM8TNP5ztBeyYvN8UglNrSMoQNxGMrThUkRRrUZg== X-Received: by 2002:ac8:f30:: with SMTP id e45mr12511866qtk.222.1571691114590; Mon, 21 Oct 2019 13:51:54 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id t13sm4935639qtn.18.2019.10.21.13.51.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:54 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 12/16] net: dsa: mv88e6xxx: use ports list to map port VLAN Date: Mon, 21 Oct 2019 16:51:26 -0400 Message-Id: <20191021205130.304149-13-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Instead of digging into the other dsa_switch structures of the fabric and relying too much on the dsa_to_port helper, use the new list of switch fabric ports to define the mask of the local ports allowed to receive frames from another port of the fabric. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli --- drivers/net/dsa/mv88e6xxx/chip.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 510ccdc2d03c..af8943142053 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -1057,35 +1057,43 @@ static int mv88e6xxx_set_mac_eee(struct dsa_switch *ds, int port, return 0; } +/* Mask of the local ports allowed to receive frames from a given fabric port */ static u16 mv88e6xxx_port_vlan(struct mv88e6xxx_chip *chip, int dev, int port) { - struct dsa_switch *ds = NULL; + struct dsa_switch *ds = chip->ds; + struct dsa_switch_tree *dst = ds->dst; struct net_device *br; + struct dsa_port *dp; + bool found = false; u16 pvlan; - int i; - if (dev < DSA_MAX_SWITCHES) - ds = chip->ds->dst->ds[dev]; + list_for_each_entry(dp, &dst->ports, list) { + if (dp->ds->index == dev && dp->index == port) { + found = true; + break; + } + } /* Prevent frames from unknown switch or port */ - if (!ds || port >= ds->num_ports) + if (!found) return 0; /* Frames from DSA links and CPU ports can egress any local port */ - if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) + if (dp->type == DSA_PORT_TYPE_CPU || dp->type == DSA_PORT_TYPE_DSA) return mv88e6xxx_port_mask(chip); - br = dsa_to_port(ds, port)->bridge_dev; + br = dp->bridge_dev; pvlan = 0; /* Frames from user ports can egress any local DSA links and CPU ports, * as well as any local member of their bridge group. */ - for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) - if (dsa_is_cpu_port(chip->ds, i) || - dsa_is_dsa_port(chip->ds, i) || - (br && dsa_to_port(chip->ds, i)->bridge_dev == br)) - pvlan |= BIT(i); + list_for_each_entry(dp, &dst->ports, list) + if (dp->ds == ds && + (dp->type == DSA_PORT_TYPE_CPU || + dp->type == DSA_PORT_TYPE_DSA || + (br && dp->bridge_dev == br))) + pvlan |= BIT(dp->index); return pvlan; } From patchwork Mon Oct 21 20:51:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180871 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 (no SPF record) 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="O7X+H/aZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpjf6xJQz9sPk for ; Tue, 22 Oct 2019 07:52:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730609AbfJUUwW (ORCPT ); Mon, 21 Oct 2019 16:52:22 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:43973 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730512AbfJUUv5 (ORCPT ); Mon, 21 Oct 2019 16:51:57 -0400 Received: by mail-qt1-f196.google.com with SMTP id t20so23303748qtr.10; Mon, 21 Oct 2019 13:51: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=OoBa2UuF6l2BUY5eIYmAWMJW5SOqVBTZrftuRAjOzXg=; b=O7X+H/aZzciqsx8EG54Z0p6tYDqNZ2zoM+OiWgiiC6qUyt/8gf/IV4ZbEGKUT2nHJ5 igMOMgs/pSheaukxYRum/rH1yjjNWP5yst9ChhHs/VivfhThce0gKObEf0Ou5N+fjbVp d1R0h/4V50WmrjanO8D6bYdSueqK5JaDC/RN3M9xhQclWE3SJTXrZYpi4FvLfISuX/A1 b3QPSdUXr8Lc+dCI2FrxfGGpA3ONEHQtO0WqiYI22cqr50pUieFq59ITz3sFSuMhZrem mIOn/I1/3mubDsL6D7ZJL52mR4CWkfFyrQawdyb6d3leXZrn8BiwGRHljY4nRNoxM8LU VWUQ== 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=OoBa2UuF6l2BUY5eIYmAWMJW5SOqVBTZrftuRAjOzXg=; b=P3lkHjpQ643V/SpF5nzxzkZ0Rj1tgpV9BJHTFQkZ7iFrOo/sEwhwRY4x5e2P+kU021 lnhfoIrEJfZzLfvcrq/8IjqFG3aIdYl1P8umDz7zlJBuApnlr7EFMwK+WFOlywTMuJV5 a67o4bbRpMlu+wVebKIc6g34o9aYqCphjtP3RcUg5lhvLX3qYFRcgIF7qWKj/Qly0koZ bCVitJvlATxW2ZLmNwxEBwNQDp59fEDwmZthI6btV6eT8ivn9XwkXTg/mhuOzPYJmBN8 e5TgWfJu+ftBdPyGwOgg5PPYGVNfEEPYyu8aoxfaBzV20vbsPGqXVXeJB4L6gfXWWzh/ 7cJw== X-Gm-Message-State: APjAAAUsoYwrKLcZn3tBTlVX+uM9V9j7sN4wcBOshOodPPlI85uEcuB8 uG1Xdv/H8RitD9KbplaZT14= X-Google-Smtp-Source: APXvYqwe+0z/2FkXkcb/57bpm7dlyAGJ9kC2R2KQtnBIrbqjhzO/JhOxUzJ6fVOiseXvXhpemJ9R1w== X-Received: by 2002:aed:29c7:: with SMTP id o65mr3484303qtd.266.1571691116267; Mon, 21 Oct 2019 13:51:56 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id t65sm8172592qkh.23.2019.10.21.13.51.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:55 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 13/16] net: dsa: mv88e6xxx: use ports list to map bridge Date: Mon, 21 Oct 2019 16:51:27 -0400 Message-Id: <20191021205130.304149-14-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Instead of digging into the other dsa_switch structures of the fabric and relying too much on the dsa_to_port helper, use the new list of switch fabric ports to remap the Port VLAN Map of local bridge group members or remap the Port VLAN Table entry of external bridge group members. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli --- drivers/net/dsa/mv88e6xxx/chip.c | 39 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index af8943142053..826ae82ed727 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -2043,29 +2043,26 @@ static int mv88e6xxx_port_fdb_dump(struct dsa_switch *ds, int port, static int mv88e6xxx_bridge_map(struct mv88e6xxx_chip *chip, struct net_device *br) { - struct dsa_switch *ds; - int port; - int dev; + struct dsa_switch *ds = chip->ds; + struct dsa_switch_tree *dst = ds->dst; + struct dsa_port *dp; int err; - /* Remap the Port VLAN of each local bridge group member */ - for (port = 0; port < mv88e6xxx_num_ports(chip); ++port) { - if (dsa_to_port(chip->ds, port)->bridge_dev == br) { - err = mv88e6xxx_port_vlan_map(chip, port); - if (err) - return err; - } - } - - /* Remap the Port VLAN of each cross-chip bridge group member */ - for (dev = 0; dev < DSA_MAX_SWITCHES; ++dev) { - ds = chip->ds->dst->ds[dev]; - if (!ds) - break; - - for (port = 0; port < ds->num_ports; ++port) { - if (dsa_to_port(ds, port)->bridge_dev == br) { - err = mv88e6xxx_pvt_map(chip, dev, port); + list_for_each_entry(dp, &dst->ports, list) { + if (dp->bridge_dev == br) { + if (dp->ds == ds) { + /* This is a local bridge group member, + * remap its Port VLAN Map. + */ + err = mv88e6xxx_port_vlan_map(chip, dp->index); + if (err) + return err; + } else { + /* This is an external bridge group member, + * remap its cross-chip Port VLAN Table entry. + */ + err = mv88e6xxx_pvt_map(chip, dp->ds->index, + dp->index); if (err) return err; } From patchwork Mon Oct 21 20:51:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180868 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 (no SPF record) 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="W7Lw1zOW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpjV2GQQz9sPk for ; Tue, 22 Oct 2019 07:52:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730594AbfJUUwN (ORCPT ); Mon, 21 Oct 2019 16:52:13 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:39604 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730531AbfJUUv7 (ORCPT ); Mon, 21 Oct 2019 16:51:59 -0400 Received: by mail-qk1-f194.google.com with SMTP id 4so14145684qki.6; Mon, 21 Oct 2019 13:51: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=6L5GXEQf2TmKkQqvOj5hVJ0JGfsrXHOwa855xP48opA=; b=W7Lw1zOWXT7nvlXOKFEfx4L6fOq2WSefuu2Vmo/rRv+SIvmqUDrofJrkYsgzRMcS7L 2kQnhEa/oKVpNw1PN1nUaZ12h1ZCSBBZHaPp7jprEnA0vNzp31fH02dSp4A92AuMRzV2 +LrCrA7PmYW/gL/+leoXJUygmtqvDohvw6OC/k2QyamWX4nUUivplmbuANwGRR9A3Gtq zViRqPhmptpR7ESB1E1mXL915k71vGRA2YUk4YjBzYb5TJpt+ZJpnEDBlsHoo3s5vG+p oZ+yWkPWOEiUk8ZQduJuzVrBRrbH38GBlfegiCmozWs86xGeCiTmfbZgNh3ZPreRlfqu iRqQ== 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=6L5GXEQf2TmKkQqvOj5hVJ0JGfsrXHOwa855xP48opA=; b=LLovtj8E62rXZkYMEUMMF1Q830BzzyN9JBy4STA1ASAOr9yaO/h9U+dVZYiUJag7Ft q9ZwXr9jeK4UX64bGt1i3ll8q19WpvIsRkU9qaEXRcgDoCzcnfYpPCU3L0FSIHnUUFzs 4FHgH/z6jbfC7mtRO1O7gf4rvKW0TDCVrsKm2hx0H8YLh4GZ/pD8wKr82fsxrHfuAsU/ H94el7o215+NNcxrgsOorIXoFHXbs2u5koq9VK3NbTU+Su9seytjEgrrCRP6Up6cWqOr kA6jtq5POJqUJJWUNZ6tpzw/sarhKSFioIjO9Ed9snnSIzgOcU48RCg1+3OH7kaiFsVV CaOA== X-Gm-Message-State: APjAAAWmyEQd+PXEiaKz4uWFs8IhA8wuYa1Dr0cwXWFikD3M/PZCLF3M GY6ozPFTGn1PDkr3wHosZ+Q= X-Google-Smtp-Source: APXvYqyn6XVtwMcqk3Z1yU0pkzQMVEIJGlawlzuzotpkSNpoIxQjpG2D/30sPjURjAcsNcEkicDySg== X-Received: by 2002:a37:48c4:: with SMTP id v187mr15970438qka.188.1571691117823; Mon, 21 Oct 2019 13:51:57 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id f37sm7597023qtb.65.2019.10.21.13.51.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:57 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 14/16] net: dsa: sja1105: register switch before assigning port private data Date: Mon, 21 Oct 2019 16:51:28 -0400 Message-Id: <20191021205130.304149-15-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Like the dsa_switch_tree structures, the dsa_port structures will be allocated on switch registration. The SJA1105 driver is the only one accessing the dsa_port structure after the switch allocation and before the switch registration. For that reason, move switch registration prior to assigning the priv member of the dsa_port structures. Signed-off-by: Vivien Didelot --- drivers/net/dsa/sja1105/sja1105_main.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index 4b0cb779f187..0ebbda5ca665 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -2057,6 +2057,15 @@ static int sja1105_probe(struct spi_device *spi) tagger_data = &priv->tagger_data; + mutex_init(&priv->ptp_data.lock); + mutex_init(&priv->mgmt_lock); + + sja1105_tas_setup(ds); + + rc = dsa_register_switch(priv->ds); + if (rc) + return rc; + /* Connections between dsa_port and sja1105_port */ for (i = 0; i < SJA1105_NUM_PORTS; i++) { struct sja1105_port *sp = &priv->ports[i]; @@ -2065,12 +2074,8 @@ static int sja1105_probe(struct spi_device *spi) sp->dp = dsa_to_port(ds, i); sp->data = tagger_data; } - mutex_init(&priv->ptp_data.lock); - mutex_init(&priv->mgmt_lock); - sja1105_tas_setup(ds); - - return dsa_register_switch(priv->ds); + return 0; } static int sja1105_remove(struct spi_device *spi) From patchwork Mon Oct 21 20:51:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180866 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 (no SPF record) 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="kVuc8Ee2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpjH1TGHz9sPq for ; Tue, 22 Oct 2019 07:52:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730558AbfJUUwB (ORCPT ); Mon, 21 Oct 2019 16:52:01 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:41956 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730498AbfJUUwB (ORCPT ); Mon, 21 Oct 2019 16:52:01 -0400 Received: by mail-qk1-f196.google.com with SMTP id p10so14144514qkg.8; Mon, 21 Oct 2019 13:52:00 -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=iu1nzxuAMPzL4Wl9WpBs+eqjfwquU4uIp1Guqhyr0Z0=; b=kVuc8Ee2ZFKoWP8EtCe3+JYsnUEBvJhCoxygbMPdBtO1L+Na7inYTo3E+/GVs2w3eV 0Si5KHehSFk8jNDmRW448hK4L/dXhIW9klv67OW60jfzjoCIx4DLvX/kHw+B+EFuUw1U Ms7lv8HTt0/psa6xgMaBspVzupn1lOsgoUmLGL6FAMlX/lhrTZyeNGPdq7DPIIbgOBA7 X0yiilHiXJuI49cy4nLqtkxD5XnHsVvmVvUJPPxYaIii89DL17ihme8uQo7zKZQDZs24 MPpX1qj0kSh8hQPIXBAFxG8PG5a6SIEUlLve7A3NhGDXj4A4F+WZy/PLyvdtTltjA+Ut BGmg== 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=iu1nzxuAMPzL4Wl9WpBs+eqjfwquU4uIp1Guqhyr0Z0=; b=VIvhlHQSIxukUhTQ4Z7MkSBxxtQtRlJAM18/Zi4b01xkjwnHfzhZAYkrHFUrzYERlC S9yQ16505xMbdEOsf/HiCxq72SV7i2boa6RsjQpioQc+tVB3FC3bBk8H9nWVx/QlNijf jokxL/3M519ZeeapCv76DEaYiWC9nGOoooHc/2m0/h3sOr0tWtC1E39s6VDc4h5TJtEB dR8rXcNq+9ZB7mT17mFm39CFHBHDrFUVDzaH/L0tAjV8iXqg/s4uB/owwARUUnRgnIDW XjQq/Ou5o/o/sExVH8QYEKf7ypjby0mD0YNn5OmKjTDHdXqxUsQrKecFPYIIOpRXFBnP Im6Q== X-Gm-Message-State: APjAAAUrowZRFSfR/BE5DQCBvVHlGagybAHrMVuFU+NLQQ4tt6mEMfQ6 gKshtK/b7L03at9QREe7Vcg= X-Google-Smtp-Source: APXvYqxr7KtxYoGFXeCvU1ibSKjkRocVmqGtv4Ts8ZWs0lNrd4ngYaD5wmH0TJ6+BRKBrLT+r9KpZw== X-Received: by 2002:a05:620a:905:: with SMTP id v5mr3898142qkv.373.1571691119783; Mon, 21 Oct 2019 13:51:59 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id s67sm396440qkh.70.2019.10.21.13.51.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:51:59 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 15/16] net: dsa: allocate ports on touch Date: Mon, 21 Oct 2019 16:51:29 -0400 Message-Id: <20191021205130.304149-16-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Allocate the struct dsa_port the first time it is accessed with dsa_port_touch, and remove the static dsa_port array from the dsa_switch structure. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli --- include/net/dsa.h | 2 -- net/dsa/dsa2.c | 16 ++++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index f572134eb5de..9bc1d3f71f89 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -277,9 +277,7 @@ struct dsa_switch { */ bool vlan_filtering; - /* Dynamically allocated ports, keep last */ size_t num_ports; - struct dsa_port ports[]; }; static inline struct dsa_port *dsa_to_port(struct dsa_switch *ds, int p) diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index bf8b4e0fcb4f..83cba4623698 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -588,7 +588,13 @@ static struct dsa_port *dsa_port_touch(struct dsa_switch *ds, int index) struct dsa_switch_tree *dst = ds->dst; struct dsa_port *dp; - dp = &ds->ports[index]; + list_for_each_entry(dp, &dst->ports, list) + if (dp->ds == ds && dp->index == index) + return dp; + + dp = kzalloc(sizeof(*dp), GFP_KERNEL); + if (!dp) + return NULL; dp->ds = ds; dp->index = index; @@ -857,7 +863,7 @@ struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n) { struct dsa_switch *ds; - ds = devm_kzalloc(dev, struct_size(ds, ports, n), GFP_KERNEL); + ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); if (!ds) return NULL; @@ -885,6 +891,12 @@ static void dsa_switch_remove(struct dsa_switch *ds) { struct dsa_switch_tree *dst = ds->dst; unsigned int index = ds->index; + struct dsa_port *dp, *next; + + list_for_each_entry_safe(dp, next, &dst->ports, list) { + list_del(&dp->list); + kfree(dp); + } dsa_tree_remove_switch(dst, index); } From patchwork Mon Oct 21 20:51:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivien Didelot X-Patchwork-Id: 1180867 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 (no SPF record) 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="ZyFpKBCC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46xpjN6ByBz9sPh for ; Tue, 22 Oct 2019 07:52:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730575AbfJUUwF (ORCPT ); Mon, 21 Oct 2019 16:52:05 -0400 Received: from mail-qk1-f195.google.com ([209.85.222.195]:38389 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730289AbfJUUwD (ORCPT ); Mon, 21 Oct 2019 16:52:03 -0400 Received: by mail-qk1-f195.google.com with SMTP id p4so14160706qkf.5; Mon, 21 Oct 2019 13:52:02 -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=yh2PMm10ndlLvJZIZvCopO0cJ7nO8a10lwaLwGEwOgo=; b=ZyFpKBCCH9FCdK6s9rtFzuAfw0V9Gm6XgzkAUDBAImACyVfDvvoAmLOZK7zFtlrUeD I6RSBCgqwMNBpKU3nE/BXMTM8P9946Z15E6Yr0wOZWgCDa1aHnLXHWD9S8riFhXZmwBK evUSvYaaK8GfAxSsXOiUTuuRsJp+U6zi/JTqjCXS33/02O7eA9macTjPJUuSiA3jAck6 9gwk/KViu/U9gWb6T3TaGNN0w+kDQCte0f1lNAWojnafnJMv7ci4erdPT9GHmHTMZP8+ 4IO+yA+Qsp7kPI5PFNBe0s4Sk203PcUT9am8EIco7mdPCOe3fVmxxBRcGF8UmXbgKNxD 6Yuw== 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=yh2PMm10ndlLvJZIZvCopO0cJ7nO8a10lwaLwGEwOgo=; b=cYC0LgPQ4EZAkmQ5FDsoOkVU0RIOBlz8v8CfRs6ahjKB4mDGm2RrbVQi7ji1hZ25pj 3fYOYxdvGjAsamAiYaA47tP1xkcYeRphcrwczCdzoesAwcI0Fc9nhyO1IVErpgdugScw Bso0y4subvoPtKxsTEq9toJc9KaRwY37OHqtTjKuiYuMmsFXLQ5DTh9fU+GUcwgblzfe NMdd59SrJjLmTXRfcO0MeX7Qu/FK02+JBOKio5b1hlOIO3j1MsIGGEn12qFvr34LFZY8 m7mNv6qJiKWek3mFaPlFaCiVac8DnCPwfz9gic6M7GohLIZuRVcfq/oEHB7N/S11shLH bi6g== X-Gm-Message-State: APjAAAUePy7A7gfJcxzHk/+4FBzDKoGV0byNmFz4VkZwOZmImxfRwkSm T8PIV0PVOKdoKb2rdEq/UPI= X-Google-Smtp-Source: APXvYqzTmJo5V1e2VG0y5lEauMUK+suohA1vGVB8ckqs5w7wYIiIKM7pNrh51FaCWtNMuzzjPT2Gqg== X-Received: by 2002:ae9:e8c5:: with SMTP id a188mr23613813qkg.17.1571691121472; Mon, 21 Oct 2019 13:52:01 -0700 (PDT) Received: from localhost (modemcable249.105-163-184.mc.videotron.ca. [184.163.105.249]) by smtp.gmail.com with ESMTPSA id l93sm3492112qtd.86.2019.10.21.13.52.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Oct 2019 13:52:00 -0700 (PDT) From: Vivien Didelot To: "David S. Miller" Cc: linux-kernel@vger.kernel.org, Vivien Didelot , Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org Subject: [PATCH net-next v2 16/16] net: dsa: remove dsa_switch_alloc helper Date: Mon, 21 Oct 2019 16:51:30 -0400 Message-Id: <20191021205130.304149-17-vivien.didelot@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191021205130.304149-1-vivien.didelot@gmail.com> References: <20191021205130.304149-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 Now that ports are dynamically listed in the fabric, there is no need to provide a special helper to allocate the dsa_switch structure. This will give more flexibility to drivers to embed this structure as they wish in their private structure. Signed-off-by: Vivien Didelot Reviewed-by: Florian Fainelli --- drivers/net/dsa/b53/b53_common.c | 5 ++++- drivers/net/dsa/dsa_loop.c | 5 ++++- drivers/net/dsa/lan9303-core.c | 4 +++- drivers/net/dsa/lantiq_gswip.c | 4 +++- drivers/net/dsa/microchip/ksz_common.c | 5 ++++- drivers/net/dsa/mt7530.c | 5 ++++- drivers/net/dsa/mv88e6060.c | 4 +++- drivers/net/dsa/mv88e6xxx/chip.c | 4 +++- drivers/net/dsa/qca8k.c | 5 ++++- drivers/net/dsa/realtek-smi-core.c | 5 ++++- drivers/net/dsa/sja1105/sja1105_main.c | 4 +++- drivers/net/dsa/vitesse-vsc73xx-core.c | 5 ++++- include/net/dsa.h | 1 - net/dsa/dsa2.c | 21 ++++++--------------- 14 files changed, 49 insertions(+), 28 deletions(-) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index aef9b56781ef..baadf622ac55 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -2341,10 +2341,13 @@ struct b53_device *b53_switch_alloc(struct device *base, struct dsa_switch *ds; struct b53_device *dev; - ds = dsa_switch_alloc(base, DSA_MAX_PORTS); + ds = devm_kzalloc(base, sizeof(*ds), GFP_KERNEL); if (!ds) return NULL; + ds->dev = base; + ds->num_ports = DSA_MAX_PORTS; + dev = devm_kzalloc(base, sizeof(*dev), GFP_KERNEL); if (!dev) return NULL; diff --git a/drivers/net/dsa/dsa_loop.c b/drivers/net/dsa/dsa_loop.c index 925ed135a4d9..c8d7ef27fd72 100644 --- a/drivers/net/dsa/dsa_loop.c +++ b/drivers/net/dsa/dsa_loop.c @@ -286,10 +286,13 @@ static int dsa_loop_drv_probe(struct mdio_device *mdiodev) dev_info(&mdiodev->dev, "%s: 0x%0x\n", pdata->name, pdata->enabled_ports); - ds = dsa_switch_alloc(&mdiodev->dev, DSA_MAX_PORTS); + ds = devm_kzalloc(&mdiodev->dev, sizeof(*ds), GFP_KERNEL); if (!ds) return -ENOMEM; + ds->dev = &mdiodev->dev; + ds->num_ports = DSA_MAX_PORTS; + ps = devm_kzalloc(&mdiodev->dev, sizeof(*ps), GFP_KERNEL); if (!ps) return -ENOMEM; diff --git a/drivers/net/dsa/lan9303-core.c b/drivers/net/dsa/lan9303-core.c index bbec86b9418e..e3c333a8f45d 100644 --- a/drivers/net/dsa/lan9303-core.c +++ b/drivers/net/dsa/lan9303-core.c @@ -1283,10 +1283,12 @@ static int lan9303_register_switch(struct lan9303 *chip) { int base; - chip->ds = dsa_switch_alloc(chip->dev, LAN9303_NUM_PORTS); + chip->ds = devm_kzalloc(chip->dev, sizeof(*chip->ds), GFP_KERNEL); if (!chip->ds) return -ENOMEM; + chip->ds->dev = chip->dev; + chip->ds->num_ports = LAN9303_NUM_PORTS; chip->ds->priv = chip; chip->ds->ops = &lan9303_switch_ops; base = chip->phy_addr_base; diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c index a69c9b9878b7..955324968b74 100644 --- a/drivers/net/dsa/lantiq_gswip.c +++ b/drivers/net/dsa/lantiq_gswip.c @@ -1854,10 +1854,12 @@ static int gswip_probe(struct platform_device *pdev) if (!priv->hw_info) return -EINVAL; - priv->ds = dsa_switch_alloc(dev, priv->hw_info->max_ports); + priv->ds = devm_kzalloc(dev, sizeof(*priv->ds), GFP_KERNEL); if (!priv->ds) return -ENOMEM; + priv->ds->dev = dev; + priv->ds->num_ports = priv->hw_info->max_ports; priv->ds->priv = priv; priv->ds->ops = &gswip_switch_ops; priv->dev = dev; diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index fe47180c908b..5d08e4430824 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -398,10 +398,13 @@ struct ksz_device *ksz_switch_alloc(struct device *base, void *priv) struct dsa_switch *ds; struct ksz_device *swdev; - ds = dsa_switch_alloc(base, DSA_MAX_PORTS); + ds = devm_kzalloc(base, sizeof(*ds), GFP_KERNEL); if (!ds) return NULL; + ds->dev = base; + ds->num_ports = DSA_MAX_PORTS; + swdev = devm_kzalloc(base, sizeof(*swdev), GFP_KERNEL); if (!swdev) return NULL; diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index a91293e47a57..add9e4279176 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -1632,10 +1632,13 @@ mt7530_probe(struct mdio_device *mdiodev) if (!priv) return -ENOMEM; - priv->ds = dsa_switch_alloc(&mdiodev->dev, DSA_MAX_PORTS); + priv->ds = devm_kzalloc(&mdiodev->dev, sizeof(*priv->ds), GFP_KERNEL); if (!priv->ds) return -ENOMEM; + priv->ds->dev = &mdiodev->dev; + priv->ds->num_ports = DSA_MAX_PORTS; + /* Use medatek,mcm property to distinguish hardware type that would * casues a little bit differences on power-on sequence. */ diff --git a/drivers/net/dsa/mv88e6060.c b/drivers/net/dsa/mv88e6060.c index 2a2489b5196d..a5a37f47b320 100644 --- a/drivers/net/dsa/mv88e6060.c +++ b/drivers/net/dsa/mv88e6060.c @@ -270,10 +270,12 @@ static int mv88e6060_probe(struct mdio_device *mdiodev) dev_info(dev, "switch %s detected\n", name); - ds = dsa_switch_alloc(dev, MV88E6060_PORTS); + ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); if (!ds) return -ENOMEM; + ds->dev = dev; + ds->num_ports = MV88E6060_PORTS; ds->priv = priv; ds->dev = dev; ds->ops = &mv88e6060_switch_ops; diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 826ae82ed727..41c61a747931 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -4978,10 +4978,12 @@ static int mv88e6xxx_register_switch(struct mv88e6xxx_chip *chip) struct device *dev = chip->dev; struct dsa_switch *ds; - ds = dsa_switch_alloc(dev, mv88e6xxx_num_ports(chip)); + ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); if (!ds) return -ENOMEM; + ds->dev = dev; + ds->num_ports = mv88e6xxx_num_ports(chip); ds->priv = chip; ds->dev = dev; ds->ops = &mv88e6xxx_switch_ops; diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c index 71e44c8763b8..7e742cd491e8 100644 --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -1077,10 +1077,13 @@ qca8k_sw_probe(struct mdio_device *mdiodev) if (id != QCA8K_ID_QCA8337) return -ENODEV; - priv->ds = dsa_switch_alloc(&mdiodev->dev, QCA8K_NUM_PORTS); + priv->ds = devm_kzalloc(&mdiodev->dev, sizeof(*priv->ds), + QCA8K_NUM_PORTS); if (!priv->ds) return -ENOMEM; + priv->ds->dev = &mdiodev->dev; + priv->ds->num_ports = DSA_MAX_PORTS; priv->ds->priv = priv; priv->ops = qca8k_switch_ops; priv->ds->ops = &priv->ops; diff --git a/drivers/net/dsa/realtek-smi-core.c b/drivers/net/dsa/realtek-smi-core.c index dc0509c02d29..fae188c60191 100644 --- a/drivers/net/dsa/realtek-smi-core.c +++ b/drivers/net/dsa/realtek-smi-core.c @@ -444,9 +444,12 @@ static int realtek_smi_probe(struct platform_device *pdev) return ret; } - smi->ds = dsa_switch_alloc(dev, smi->num_ports); + smi->ds = devm_kzalloc(dev, sizeof(*smi->ds), GFP_KERNEL); if (!smi->ds) return -ENOMEM; + + smi->ds->dev = dev; + smi->ds->num_ports = smi->num_ports; smi->ds->priv = smi; smi->ds->ops = var->ds_ops; diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index 0ebbda5ca665..2ae84a9dea59 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -2047,10 +2047,12 @@ static int sja1105_probe(struct spi_device *spi) dev_info(dev, "Probed switch chip: %s\n", priv->info->name); - ds = dsa_switch_alloc(dev, SJA1105_NUM_PORTS); + ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); if (!ds) return -ENOMEM; + ds->dev = dev; + ds->num_ports = SJA1105_NUM_PORTS; ds->ops = &sja1105_switch_ops; ds->priv = priv; priv->ds = ds; diff --git a/drivers/net/dsa/vitesse-vsc73xx-core.c b/drivers/net/dsa/vitesse-vsc73xx-core.c index 614377ef7956..42c1574d45f2 100644 --- a/drivers/net/dsa/vitesse-vsc73xx-core.c +++ b/drivers/net/dsa/vitesse-vsc73xx-core.c @@ -1178,9 +1178,12 @@ int vsc73xx_probe(struct vsc73xx *vsc) * We allocate 8 ports and avoid access to the nonexistant * ports. */ - vsc->ds = dsa_switch_alloc(dev, 8); + vsc->ds = devm_kzalloc(dev, sizeof(*vsc->ds), GFP_KERNEL); if (!vsc->ds) return -ENOMEM; + + vsc->ds->dev = dev; + vsc->ds->num_ports = 8; vsc->ds->priv = vsc; vsc->ds->ops = &vsc73xx_ds_ops; diff --git a/include/net/dsa.h b/include/net/dsa.h index 9bc1d3f71f89..e3c14dc3bab9 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -577,7 +577,6 @@ static inline bool dsa_can_decode(const struct sk_buff *skb, return false; } -struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n); void dsa_unregister_switch(struct dsa_switch *ds); int dsa_register_switch(struct dsa_switch *ds); #ifdef CONFIG_PM_SLEEP diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 83cba4623698..1e3ac9b56c89 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -846,6 +846,12 @@ static int dsa_switch_probe(struct dsa_switch *ds) struct device_node *np = ds->dev->of_node; int err; + if (!ds->dev) + return -ENODEV; + + if (!ds->num_ports) + return -EINVAL; + if (np) err = dsa_switch_parse_of(ds, np); else if (pdata) @@ -859,21 +865,6 @@ static int dsa_switch_probe(struct dsa_switch *ds) return dsa_switch_add(ds); } -struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n) -{ - struct dsa_switch *ds; - - ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); - if (!ds) - return NULL; - - ds->dev = dev; - ds->num_ports = n; - - return ds; -} -EXPORT_SYMBOL_GPL(dsa_switch_alloc); - int dsa_register_switch(struct dsa_switch *ds) { int err;