From patchwork Sun Apr 28 18:45:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vladimir Oltean X-Patchwork-Id: 1092322 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="M24mIDlP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44scHj0Fggz9s9N for ; Mon, 29 Apr 2019 04:48:17 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727244AbfD1SsN (ORCPT ); Sun, 28 Apr 2019 14:48:13 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:40502 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727212AbfD1SsK (ORCPT ); Sun, 28 Apr 2019 14:48:10 -0400 Received: by mail-wr1-f65.google.com with SMTP id h4so12479442wre.7 for ; Sun, 28 Apr 2019 11:48: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=Zowyg3wachexWTYf0q0hBcr3S75SHpp1UROVg5HGE1U=; b=M24mIDlPVE/iPxBI5T2JaKyqB7ICfuTALrVLSESbTmXAQFYpYNn5QLsWkPc+8eWMXA xDZuwYayCcE+4huxePn4C9bUM/pjyS+SYkhcedzEAnYpVBEcSb34VU1Mx0i2xTobKLUX VY/tQCDYZVuqssqRSfAra3yoUBfBQhBybgJXEEOyJqi2xFBecWtZKu3Ni2AKFIGCvfie MZKq531FTQIzkKC5pAv/VzIODo5uEzdgoM7BQopMADQZnY9GWVFdGsOhECSw6hmX+APn Mk1RVkV//RSJDjb/TGdBY3q5VGGBa8QXiRW7Gz5KOILqBxQesuxXLR7w04zNyrVLWLZt Tf2g== 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=Zowyg3wachexWTYf0q0hBcr3S75SHpp1UROVg5HGE1U=; b=YEnbmyvvI3qGJEclvCqTX2jpIyglABmQ1ziTBBfSbvafTiwyZcjimrK/Hpl3WQstFw D4s93YZzwTLlQXbGGeXXbsBxUctCuQT+ZXXXikM0req1VZXG75cLCVX7Ikf2c6fEuBSW HhNpDYdVXF/D5ykFRH1znDNJsgktF/bUSDbBBZEi++3OkTvZdjzNkI4m0du6OCo/SDhL TVtnaNBTgsXJhn5kgSrjkfLYD/oQl7ryJAONYLtLZEbINhDqQgAkf1dsR3RHbw0swjVV OsS/CdAMcCciDcT0srJYiVhs96Y/xSNHywlEAVbMp0JXukV5kibFVUJgWffDMYW7QeEB iakQ== X-Gm-Message-State: APjAAAXUG5QCLXx36lUmV1DLIpP4Y+ugBoAIqSLrWj9Az2R81XSV/zT8 7tresBgW0QK0oGfaqpszlKE= X-Google-Smtp-Source: APXvYqymoIVUg8XC2Gwgp+M6djjMgWtxmalp2/ESNemJZOMQoEaKwxkNW60j1b+NeXZJXGENV+rYOQ== X-Received: by 2002:adf:cd90:: with SMTP id q16mr16097902wrj.75.1556477288290; Sun, 28 Apr 2019 11:48:08 -0700 (PDT) Received: from localhost.localdomain (5-12-225-227.residential.rdsnet.ro. [5.12.225.227]) by smtp.gmail.com with ESMTPSA id h5sm12254910wmf.38.2019.04.28.11.48.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 28 Apr 2019 11:48:07 -0700 (PDT) From: Vladimir Oltean To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch, davem@davemloft.net Cc: netdev@vger.kernel.org, Vladimir Oltean Subject: [PATCH net-next 13/13] net: dsa: Add more convenient functions for installing port VLANs Date: Sun, 28 Apr 2019 21:45:54 +0300 Message-Id: <20190428184554.9968-14-olteanv@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190428184554.9968-1-olteanv@gmail.com> References: <20190428184554.9968-1-olteanv@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This hides the need to perform a two-phase transaction and construct a switchdev_obj_port_vlan struct. Call graph (including a function that will be introduced in a follow-up patch) looks like this now (same for the *_vlan_del function): dsa_slave_vlan_rx_add_vid dsa_port_setup_8021q_tagging | | | | | +-------------+ | | v v dsa_port_vid_add dsa_slave_port_obj_add | | +-------+ +-------+ | | v v dsa_port_vlan_add Signed-off-by: Vladimir Oltean Reviewed-by: Florian Fainelli --- net/dsa/dsa_priv.h | 2 ++ net/dsa/port.c | 31 +++++++++++++++++++++++++++++++ net/dsa/slave.c | 24 +++--------------------- 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index e860512d673a..37751b505572 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h @@ -171,6 +171,8 @@ int dsa_port_vlan_add(struct dsa_port *dp, struct switchdev_trans *trans); int dsa_port_vlan_del(struct dsa_port *dp, const struct switchdev_obj_port_vlan *vlan); +int dsa_port_vid_add(struct dsa_port *dp, u16 vid, u16 flags); +int dsa_port_vid_del(struct dsa_port *dp, u16 vid); int dsa_port_link_register_of(struct dsa_port *dp); void dsa_port_link_unregister_of(struct dsa_port *dp); diff --git a/net/dsa/port.c b/net/dsa/port.c index da5922ba7d33..e6ad19df5cd8 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -370,6 +370,37 @@ int dsa_port_vlan_del(struct dsa_port *dp, return 0; } +int dsa_port_vid_add(struct dsa_port *dp, u16 vid, u16 flags) +{ + 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; + + 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); +} + +int dsa_port_vid_del(struct dsa_port *dp, u16 vid) +{ + struct switchdev_obj_port_vlan vlan = { + .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN, + .vid_begin = vid, + .vid_end = vid, + }; + + return dsa_port_vlan_del(dp, &vlan); +} + 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 ce26dddc8270..8ad9bf957da1 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -1001,13 +1001,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; @@ -1024,25 +1017,14 @@ 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_vid_add(dp, vid, 0); } static int dsa_slave_vlan_rx_kill_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 bridge_vlan_info info; int ret; @@ -1059,7 +1041,7 @@ static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, return -EBUSY; } - ret = dsa_port_vlan_del(dp, &vlan); + ret = dsa_port_vid_del(dp, vid); if (ret == -EOPNOTSUPP) ret = 0;