Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 3224

kernel-2.6.18-238.el5.src.rpm

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