u32 port_num)
  {
        struct mlx4_ib_dev *ibdev = to_mdev(device);
 -      struct net_device *dev;
 +      struct net_device *dev, *ret = NULL;
  
        rcu_read_lock();
 -      dev = mlx4_get_protocol_dev(ibdev->dev, MLX4_PROT_ETH, port_num);
 +      for_each_netdev_rcu(&init_net, dev) {
 +              if (dev->dev.parent != ibdev->ib_dev.dev.parent ||
 +                  dev->dev_port + 1 != port_num)
 +                      continue;
  
 -      if (dev) {
                if (mlx4_is_bonded(ibdev->dev)) {
-                       struct net_device *upper = NULL;
+                       struct net_device *upper;
  
                        upper = netdev_master_upper_dev_get_rcu(dev);
                        if (upper) {
  
                err = __mlx4_ib_create_flow(&mqp->ibqp, flow, MLX4_DOMAIN_NIC,
                                            MLX4_FS_REGULAR, &mqp->reg_id);
-       } else {
-               err = __mlx4_ib_destroy_flow(mdev->dev, mqp->reg_id);
+               kfree(flow);
+               return err;
        }
-       kfree(flow);
-       return err;
+       
+       return __mlx4_ib_destroy_flow(mdev->dev, mqp->reg_id);
  }
  
 -static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr)
 +static void mlx4_ib_remove(struct auxiliary_device *adev)
  {
 -      struct mlx4_ib_dev *ibdev = ibdev_ptr;
 +      struct mlx4_adev *madev = container_of(adev, struct mlx4_adev, adev);
 +      struct mlx4_dev *dev = madev->mdev;
 +      struct mlx4_ib_dev *ibdev = auxiliary_get_drvdata(adev);
        int p;
        int i;