[ipoib] Use Infiniband broadcast QPN in IPoIB broadcast MAC address
authorMichael Brown <mcb30@etherboot.org>
Tue, 7 Jul 2009 10:31:35 +0000 (11:31 +0100)
committerMichael Brown <mcb30@etherboot.org>
Fri, 17 Jul 2009 22:06:33 +0000 (23:06 +0100)
Remove the special handling of the IPoIB broadcast QPN.

src/drivers/net/ipoib.c

index dd04a43..a838795 100644 (file)
@@ -85,15 +85,9 @@ struct ipoib_device {
 /** IPoIB metadata TID */
 static uint32_t ipoib_meta_tid = 0;
 
 /** IPoIB metadata TID */
 static uint32_t ipoib_meta_tid = 0;
 
-/** Broadcast QPN used in IPoIB MAC addresses
- *
- * This is a guaranteed invalid real QPN
- */
-#define IPOIB_BROADCAST_QPN 0xffffffffUL
-
 /** Broadcast IPoIB address */
 static struct ipoib_mac ipoib_broadcast = {
 /** Broadcast IPoIB address */
 static struct ipoib_mac ipoib_broadcast = {
-       .qpn = ntohl ( IPOIB_BROADCAST_QPN ),
+       .qpn = htonl ( IB_QPN_BROADCAST ),
        .gid.u.bytes =  { 0xff, 0x12, 0x40, 0x1b, 0x00, 0x00, 0x00, 0x00,
                          0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff },
 };
        .gid.u.bytes =  { 0xff, 0x12, 0x40, 0x1b, 0x00, 0x00, 0x00, 0x00,
                          0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff },
 };
@@ -442,16 +436,15 @@ static int ipoib_transmit ( struct net_device *netdev,
 
        /* Construct address vector */
        memset ( &av, 0, sizeof ( av ) );
 
        /* Construct address vector */
        memset ( &av, 0, sizeof ( av ) );
+       av.qpn = ntohl ( dest->mac.qpn );
        av.qkey = ipoib->data_qkey;
        av.gid_present = 1;
        av.qkey = ipoib->data_qkey;
        av.gid_present = 1;
-       if ( dest->mac.qpn == htonl ( IPOIB_BROADCAST_QPN ) ) {
+       if ( av.qpn == IB_QPN_BROADCAST ) {
                /* Broadcast */
                /* Broadcast */
-               av.qpn = IB_QPN_BROADCAST;
                av.lid = ipoib->broadcast_lid;
                memcpy ( &av.gid, &ipoib->broadcast_gid, sizeof ( av.gid ) );
        } else {
                /* Unicast */
                av.lid = ipoib->broadcast_lid;
                memcpy ( &av.gid, &ipoib->broadcast_gid, sizeof ( av.gid ) );
        } else {
                /* Unicast */
-               av.qpn = ntohl ( dest->mac.qpn );
                memcpy ( &av.gid, &dest->mac.gid, sizeof ( av.gid ) );
                if ( ( rc = ib_resolve_path ( ibdev, &av ) ) != 0 ) {
                        /* Path not resolved yet */
                memcpy ( &av.gid, &dest->mac.gid, sizeof ( av.gid ) );
                if ( ( rc = ib_resolve_path ( ibdev, &av ) ) != 0 ) {
                        /* Path not resolved yet */