From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C7C0DC4360F for ; Sun, 24 Mar 2019 03:25:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8FEDC2148D for ; Sun, 24 Mar 2019 03:25:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jzS7681q" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728080AbfCXDZL (ORCPT ); Sat, 23 Mar 2019 23:25:11 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:45919 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728022AbfCXDZK (ORCPT ); Sat, 23 Mar 2019 23:25:10 -0400 Received: by mail-wr1-f66.google.com with SMTP id s15so6357088wra.12 for ; Sat, 23 Mar 2019 20:25:09 -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; bh=L/0XVjbTs9dEKoWSoC3h1DONDay6BXuDKLNn4t7Saeg=; b=jzS7681qSz5fYdjabiwwg2f0kMz3/zQLkHyyd88AfbjwLnVVZ05XklYqlhCxjonP1Y RbNZvqehRfFzVE+G6vq/aCT9ddFnXKXVJXOXwZk5JBqyDQN5syfHc30NtEIMNd+dJ6xP LqQ91fuaa+pJarcYFy5F4GRg1EVe3CHA7roSTiZm7dXALpThvQVyWwicqVLgzqZ9dSlA hfQtRN/XBILKfFdanewZ3onLDaUNLGWrjKiElZcxdzjJMg+04tgYSH4qwRNFri9pwuIJ RACzBCv/tg3Vzn7kwkVaqRXyqiHdRo+rJjUP6PPDcCUYqsvehqAOOvpopzMFn+Yqp9fc OSqw== 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; bh=L/0XVjbTs9dEKoWSoC3h1DONDay6BXuDKLNn4t7Saeg=; b=RLHOEcgLjC+ZLFVCyTtDHW9FP83RH+7OuL9M8BYskGFsvo1o5eypumdr2oFcfqnWaC IcsDPVi/K7Y9AgZsm6WViTB+TwIeDy6mvU0rj29Py5ATgADRl91fb3RgkX3b788GLNWs 2WbS1DGplBw+0THQw4SOTf7OVWmO2uXndSZqPOSnQOL0b/BnHMmlQ9HLQcDAzEymOCbC Mx91rZ60/KkMCxD1OKGhHufjmMivhrpgsH3siz/Tq0j89cJu8GV1ANlD4Et0HCFKdQcl MWiYyRm5S2JklB0kd6dr5DqrxPGF96gIwlAsx6nE55buhHwY3gLSjpB2PuPJRvu//yCO 9RdQ== X-Gm-Message-State: APjAAAU7w22uwax1CuiWC1kPY8KmPBlVvKgJv2UUh9UpsQWMimI/2p9E VWRQa228RMj3A8aH4MK6IYk= X-Google-Smtp-Source: APXvYqzfrqS3sqSaWxhDfamEQHqiqOJYGZnpsIF5Zxi8s6l5nqhU/WidSyOFVZT6aOK2beUaIxVYFw== X-Received: by 2002:adf:ffc2:: with SMTP id x2mr750219wrs.86.1553397908578; Sat, 23 Mar 2019 20:25:08 -0700 (PDT) Received: from localhost.localdomain ([188.26.228.227]) by smtp.gmail.com with ESMTPSA id c20sm12243049wre.28.2019.03.23.20.25.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 23 Mar 2019 20:25:07 -0700 (PDT) From: Vladimir Oltean To: davem@davemloft.net, netdev@vger.kernel.org Cc: f.fainelli@gmail.com, andrew@lunn.ch, vivien.didelot@gmail.com, linus.walleij@linaro.org, Vladimir Oltean Subject: [RFC PATCH net-next 03/13] net: dsa: Create a more convenient function for installing port VLANs Date: Sun, 24 Mar 2019 05:23:36 +0200 Message-Id: <20190324032346.32394-4-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190324032346.32394-1-olteanv@gmail.com> References: <20190324032346.32394-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This refactors the two-phase transaction from dsa_slave_vlan_rx_add_vid and also makes that code available for other functions from within DSA. The newly exposed function either adds or deletes the specified VLAN entry based on a boolean argument. Signed-off-by: Vladimir Oltean --- net/dsa/dsa_priv.h | 2 ++ net/dsa/port.c | 24 ++++++++++++++++++++++++ net/dsa/slave.c | 16 ++-------------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index 093b7d145eb1..8048ced3708f 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h @@ -164,6 +164,8 @@ int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags, struct switchdev_trans *trans); int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags, struct switchdev_trans *trans); +int dsa_port_trans_vlan_apply(struct dsa_port *dp, u16 vid, u16 flags, + bool enabled); int dsa_port_vlan_add(struct dsa_port *dp, const struct switchdev_obj_port_vlan *vlan, struct switchdev_trans *trans); diff --git a/net/dsa/port.c b/net/dsa/port.c index a86fe3be1261..9c7358f98004 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -326,6 +326,30 @@ int dsa_port_vlan_del(struct dsa_port *dp, return 0; } +int dsa_port_trans_vlan_apply(struct dsa_port *dp, u16 vid, u16 flags, + bool enabled) +{ + struct switchdev_obj_port_vlan vlan = { + .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN, + .flags = flags, + .vid_begin = vid, + .vid_end = vid, + }; + struct switchdev_trans trans; + int err; + + if (!enabled) + return dsa_port_vlan_del(dp, &vlan); + + trans.ph_prepare = true; + err = dsa_port_vlan_add(dp, &vlan, &trans); + if (err == -EOPNOTSUPP) + return 0; + + trans.ph_prepare = false; + return dsa_port_vlan_add(dp, &vlan, &trans); +} + static struct phy_device *dsa_port_get_phy_device(struct dsa_port *dp) { struct device_node *phy_dn; diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 093eef6f2599..3191ef74f6a1 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -987,13 +987,6 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid) { struct dsa_port *dp = dsa_slave_to_port(dev); - struct switchdev_obj_port_vlan vlan = { - .vid_begin = vid, - .vid_end = vid, - /* This API only allows programming tagged, non-PVID VIDs */ - .flags = 0, - }; - struct switchdev_trans trans; struct bridge_vlan_info info; int ret; @@ -1010,13 +1003,8 @@ static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto, return -EBUSY; } - trans.ph_prepare = true; - ret = dsa_port_vlan_add(dp, &vlan, &trans); - if (ret == -EOPNOTSUPP) - return 0; - - trans.ph_prepare = false; - return dsa_port_vlan_add(dp, &vlan, &trans); + /* This API only allows programming tagged, non-PVID VIDs */ + return dsa_port_trans_vlan_apply(dp, vid, 0, true); } static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, -- 2.17.1