]> git.hungrycats.org Git - linux/commitdiff
[PATCH] fix starfire 64-bit b0rkage
authorArjan van de Ven <arjanv@redhat.com>
Wed, 29 Oct 2003 10:40:20 +0000 (05:40 -0500)
committerLinus Torvalds <torvalds@home.osdl.org>
Wed, 29 Oct 2003 10:40:20 +0000 (05:40 -0500)
(x >> 32) is undefined on a 32 bit integral variable in C; In contrast
(x >>16 >> 16) is fine (and gets optimized out to 0, while (x >> 32)
gets optimized out to a nop).

Fix for starfire below

drivers/net/starfire.c

index e4b1fa15cbca2a58bbba526497632ba935a77d9e..2125ae967515a519b4a675ace89f155c849e3c05 100644 (file)
@@ -1175,15 +1175,9 @@ static int netdev_open(struct net_device *dev)
               TX_DESC_SPACING | TX_DESC_TYPE,
               ioaddr + TxDescCtrl);
 
-#if defined(ADDR_64BITS)
-       writel(np->queue_mem_dma >> 32, ioaddr + RxDescQHiAddr);
-       writel(np->queue_mem_dma >> 32, ioaddr + TxRingHiAddr);
-       writel(np->queue_mem_dma >> 32, ioaddr + CompletionHiAddr);
-#else
-       writel(0, ioaddr + RxDescQHiAddr);
-       writel(0, ioaddr + TxRingHiAddr);
-       writel(0, ioaddr + CompletionHiAddr);
-#endif
+       writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + RxDescQHiAddr);
+       writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + TxRingHiAddr);
+       writel( (np->queue_mem_dma >> 16) >> 16, ioaddr + CompletionHiAddr);
        writel(np->rx_ring_dma, ioaddr + RxDescQAddr);
        writel(np->tx_ring_dma, ioaddr + TxRingPtr);