From d2e9fda68e7b830c22f748c26a3b80c67bd3a679 Mon Sep 17 00:00:00 2001 From: "Subramanian, Kavitha" <k.subramanian@intel.com> Date: Wed, 21 Mar 2018 06:52:00 +0100 Subject: [PATCH] Merge pull request #255 in SW_PON/linux from feature/DRVLIB_SW-540-switchdev_vlan_handling to xrx500 * commit '20aa70e48dd57d306bf278b6491cbc49d3b064d4': sqush before rebase --- .../ethernet/lantiq/datapath/datapath_swdev.c | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/lantiq/datapath/datapath_swdev.c b/drivers/net/ethernet/lantiq/datapath/datapath_swdev.c index f9b6de7f8..e37a55231 100644 --- a/drivers/net/ethernet/lantiq/datapath/datapath_swdev.c +++ b/drivers/net/ethernet/lantiq/datapath/datapath_swdev.c @@ -224,17 +224,23 @@ static int dp_swdev_cfg_vlan(struct bridge_id_entry_item *br_item, struct vlan_prop vlan_prop = {0}; struct dp_dev *dp_dev; struct logic_dev *tmp = NULL; - u32 idx; + u32 idx, inst; int vap, i; - //if (br_info->flag & LOGIC_DEV_REGISTER) { + /*br_info = dp_swdev_bridge_entry_lookup(br_item->br_device_name, + *br_item->inst); + *if (!br_info) + * return 0; + */ + /*if (br_info->flag & LOGIC_DEV_REGISTER) {*/ if (br_item->flags & LOGIC_DEV_REGISTER) { - //get_vlan_via_dev(dev, &vlan_prop); + /*get_vlan_via_dev(dev, &vlan_prop);*/ idx = dp_dev_hash(dev, NULL); dp_dev = dp_dev_lookup(&dp_dev_list[idx], dev, NULL, 0); + inst = br_item->inst; vap = GET_VAP(dp_dev->ctp, - dp_port_info[br_item->inst][dp_dev->ep].vap_offset, - dp_port_info[br_item->inst][dp_dev->ep].vap_mask); + dp_port_info[inst][dp_dev->ep].vap_offset, + dp_port_info[inst][dp_dev->ep].vap_mask); DP_DEBUG(DP_DBG_FLAG_SWDEV, "vap=%d ep=%d bp=%d\n", vap, dp_dev->ep, dp_dev->bp); dp_port_prop[br_item->inst].info.dp_cfg_vlan(br_item->inst, @@ -456,7 +462,8 @@ static int dp_swdev_add_if(struct net_device *dev, if (br_item) { dp_swdev_cfg_gswip(br_item, addr); if (br_item->flags & LOGIC_DEV_REGISTER) - dp_swdev_cfg_vlan(br_item, dev);/*only for vlan flag*/ + /*do only for vlan flag*/ + dp_swdev_cfg_vlan(br_item, dev); } swdev_unlock(); return 0; @@ -485,7 +492,7 @@ static int dp_swdev_del_if(struct net_device *dev, DP_DEBUG(DP_DBG_FLAG_SWDEV, "dp_get_netif_subifid failed for %s\n", dev->name); - if (!is_vlan_dev(dev)) + /* if (!is_vlan_dev(dev))*/ return -EINVAL; } br_item = kmalloc(sizeof(*br_item), GFP_KERNEL); @@ -500,6 +507,7 @@ static int dp_swdev_del_if(struct net_device *dev, br_item->inst = subif.inst; /* current bridge member port*/ br_item->portid = subif.bport; + br_item->flags = BRIDGE_NO_ACTION; strcpy(br_item->br_device_name, br_info->br_device_name); @@ -541,7 +549,7 @@ static int dp_swdev_del_if(struct net_device *dev, if (!base) base = dev; /*the previous sequence was running into a deadlock in - *taking the swdev_lock + * taking the swdev_lock */ dp_swdev_cfg_vlan(br_item, dev); swdev_unlock(); @@ -983,7 +991,8 @@ void dp_port_register_switchdev(struct dp_dev *dp_dev, dp_dev->old_swdev_ops = NULL; if (dp_port->netdev_ops) SET_OPS(dp_dev->old_dev_ops, - (struct net_device_ops *)dp_port->netdev_ops); + (const struct net_device_ops *) + dp_port->netdev_ops); if (dp_dev->old_swdev_ops) SET_OPS(dp_dev->old_swdev_ops, (struct switchdev_ops *)dp_port->switchdev_ops); -- GitLab