From: Michal Schmidt <mschmidt@redhat.com> Date: Fri, 3 Sep 2010 00:18:22 -0400 Subject: [net] vxge: add missing vlan_rx_kill_vid method Message-id: <20100903001821.16045.57645.stgit@localhost6.localdomain6> Patchwork-id: 28047 O-Subject: [RHEL5.6 BZ608598 PATCH 06/15] vxge: add missing vlan_rx_kill_vid method Bugzilla: 594404 608598 RH-Acked-by: David S. Miller <davem@redhat.com> RH-Acked-by: Bob Picco <bpicco@redhat.com> RH-Acked-by: Neil Horman <nhorman@redhat.com> https://bugzilla.redhat.com/show_bug.cgi?id=594404 VLANs could not be created on vxge devices because vlan_rx_kill_vid was missing due to a mistake in earlier driver backport. diff --git a/drivers/net/vxge/vxge-main.c b/drivers/net/vxge/vxge-main.c index 4c0131f..ebd5da1 100644 --- a/drivers/net/vxge/vxge-main.c +++ b/drivers/net/vxge/vxge-main.c @@ -3200,6 +3200,37 @@ vxge_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) } } +/** + * vxge_vlan_rx_add_vid + * @dev: net device pointer. + * @vid: vid + * + * Remove the vlan id from the device's vlan id table + */ +static void +vxge_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) +{ + struct vxgedev *vdev; + struct vxge_vpath *vpath; + int vp_id; + + vxge_debug_entryexit(VXGE_TRACE, "%s:%d", __func__, __LINE__); + + vdev = (struct vxgedev *)netdev_priv(dev); + + vlan_group_set_device(vdev->vlgrp, vid, NULL); + + /* Delete this vlan from the vid table */ + for (vp_id = 0; vp_id < vdev->no_of_vpath; vp_id++) { + vpath = &vdev->vpaths[vp_id]; + if (!vpath->is_open) + continue; + vxge_hw_vpath_vid_delete(vpath->handle, vid); + } + vxge_debug_entryexit(VXGE_TRACE, + "%s:%d Exiting...", __func__, __LINE__); +} + int __devinit vxge_device_register(struct __vxge_hw_device *hldev, struct vxge_config *config, int high_dma, int no_of_vpath, @@ -3256,6 +3287,7 @@ int __devinit vxge_device_register(struct __vxge_hw_device *hldev, ndev->change_mtu = vxge_change_mtu; ndev->vlan_rx_register = vxge_vlan_rx_register; ndev->vlan_rx_add_vid = vxge_vlan_rx_add_vid; + ndev->vlan_rx_kill_vid = vxge_vlan_rx_kill_vid; ndev->tx_timeout = vxge_tx_watchdog; ndev->do_ioctl = vxge_ioctl; #ifdef CONFIG_NET_POLL_CONTROLLER