[PATCH] IPoIB: Set full membership bit in P_Keys
authorRoland Dreier <roland@eddore.topspincom.com>
Fri, 19 Aug 2005 19:03:17 +0000 (12:03 -0700)
committerRoland Dreier <rolandd@cisco.com>
Sat, 27 Aug 2005 03:37:37 +0000 (20:37 -0700)
Always make sure that the full membership bit is set in the P_Keys
that IPoIB uses.  This makes sure that all hosts join the correct
multicast groups so that hosts that are partial partition members
can talk to the rest of the network.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/ipoib/ipoib_main.c

index 968b27947f8d3ce6472ab4754d6c31ffba0d0831..57c3ac98991f6942a148b9d328b1cd065bc3bf60 100644 (file)
@@ -883,6 +883,12 @@ static ssize_t create_child(struct class_device *cdev,
        if (pkey < 0 || pkey > 0xffff)
                return -EINVAL;
 
+       /*
+        * Set the full membership bit, so that we join the right
+        * broadcast group, etc.
+        */
+       pkey |= 0x8000;
+
        ret = ipoib_vlan_add(container_of(cdev, struct net_device, class_dev),
                             pkey);
 
@@ -935,6 +941,12 @@ static struct net_device *ipoib_add_port(const char *format,
                goto alloc_mem_failed;
        }
 
+       /*
+        * Set the full membership bit, so that we join the right
+        * broadcast group, etc.
+        */
+       priv->pkey |= 0x8000;
+
        priv->dev->broadcast[8] = priv->pkey >> 8;
        priv->dev->broadcast[9] = priv->pkey & 0xff;