Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[pandora-kernel.git] / drivers / net / mlx4 / en_netdev.c
index aa6e73e..4b0f32e 100644 (file)
 #include "mlx4_en.h"
 #include "en_port.h"
 
-
-static void mlx4_en_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
-{
-       struct mlx4_en_priv *priv = netdev_priv(dev);
-       struct mlx4_en_dev *mdev = priv->mdev;
-       int err;
-
-       en_dbg(HW, priv, "Registering VLAN group:%p\n", grp);
-       priv->vlgrp = grp;
-
-       mutex_lock(&mdev->state_lock);
-       if (mdev->device_up && priv->port_up) {
-               err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, grp);
-               if (err)
-                       en_err(priv, "Failed configuring VLAN filter\n");
-       }
-       mutex_unlock(&mdev->state_lock);
-}
-
 static void mlx4_en_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
 {
        struct mlx4_en_priv *priv = netdev_priv(dev);
@@ -71,16 +52,14 @@ static void mlx4_en_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
        int err;
        int idx;
 
-       if (!priv->vlgrp)
-               return;
+       en_dbg(HW, priv, "adding VLAN:%d\n", vid);
 
-       en_dbg(HW, priv, "adding VLAN:%d (vlgrp entry:%p)\n",
-              vid, vlan_group_get_device(priv->vlgrp, vid));
+       set_bit(vid, priv->active_vlans);
 
        /* Add VID to port VLAN filter */
        mutex_lock(&mdev->state_lock);
        if (mdev->device_up && priv->port_up) {
-               err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp);
+               err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
                if (err)
                        en_err(priv, "Failed configuring VLAN filter\n");
        }
@@ -97,12 +76,9 @@ static void mlx4_en_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
        int err;
        int idx;
 
-       if (!priv->vlgrp)
-               return;
+       en_dbg(HW, priv, "Killing VID:%d\n", vid);
 
-       en_dbg(HW, priv, "Killing VID:%d (vlgrp:%p vlgrp entry:%p)\n",
-              vid, priv->vlgrp, vlan_group_get_device(priv->vlgrp, vid));
-       vlan_group_set_device(priv->vlgrp, vid, NULL);
+       clear_bit(vid, priv->active_vlans);
 
        /* Remove VID from port VLAN filter */
        mutex_lock(&mdev->state_lock);
@@ -112,7 +88,7 @@ static void mlx4_en_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
                en_err(priv, "could not find vid %d in cache\n", vid);
 
        if (mdev->device_up && priv->port_up) {
-               err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp);
+               err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
                if (err)
                        en_err(priv, "Failed configuring VLAN filter\n");
        }
@@ -266,12 +242,10 @@ static void mlx4_en_do_set_multicast(struct work_struct *work)
                                priv->flags |= MLX4_EN_FLAG_MC_PROMISC;
                        }
 
-                       if (priv->vlgrp) {
-                               /* Disable port VLAN filter */
-                               err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, NULL);
-                               if (err)
-                                       en_err(priv, "Failed disabling VLAN filter\n");
-                       }
+                       /* Disable port VLAN filter */
+                       err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
+                       if (err)
+                               en_err(priv, "Failed disabling VLAN filter\n");
                }
                goto out;
        }
@@ -305,7 +279,7 @@ static void mlx4_en_do_set_multicast(struct work_struct *work)
                }
 
                /* Enable port VLAN filter */
-               err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp);
+               err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
                if (err)
                        en_err(priv, "Failed enabling VLAN filter\n");
        }
@@ -1047,7 +1021,6 @@ static const struct net_device_ops mlx4_netdev_ops = {
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_change_mtu         = mlx4_en_change_mtu,
        .ndo_tx_timeout         = mlx4_en_tx_timeout,
-       .ndo_vlan_rx_register   = mlx4_en_vlan_rx_register,
        .ndo_vlan_rx_add_vid    = mlx4_en_vlan_rx_add_vid,
        .ndo_vlan_rx_kill_vid   = mlx4_en_vlan_rx_kill_vid,
 #ifdef CONFIG_NET_POLL_CONTROLLER