Thread (6 messages) 6 messages, 3 authors, 2015-07-29

Re: [PATCH] gianfar: Fix warnings when built on 64-bit

From: Scott Wood <hidden>
Date: 2015-07-29 16:02:56
Also in: linuxppc-dev

On Wed, 2015-07-29 at 10:02 +0200, Arnd Bergmann wrote:
On Wednesday 29 July 2015 00:24:37 Scott Wood wrote:
quoted
+#ifdef CONFIG_PM
 static void lock_tx_qs(struct gfar_private *priv)
 {
    int i;
@@ -580,6 +581,7 @@ static void unlock_tx_qs(struct gfar_private *priv)
    for (i = 0; i < priv->num_tx_queues; i++)
            spin_unlock(&priv->tx_queue[i]->txlock);
 }
+#endif
 
This seems unrelated and should probably be a separate fix.
It's related in that it fixes a warning -- the 64-bit build didn't have 
CONFIG_PM -- though I should have been clearer about that in the changelog.
quoted
@@ -2964,8 +2967,13 @@ int gfar_clean_rx_ring(struct gfar_priv_rx_q 
*rx_queue, int rx_work_limit)
            gfar_init_rxbdp(rx_queue, bdp, bufaddr);
 
            /* Update Last Free RxBD pointer for LFC */
-           if (unlikely(rx_queue->rfbptr && priv->tx_actual_en))
-                   gfar_write(rx_queue->rfbptr, (u32)bdp);
+           if (unlikely(rx_queue->rfbptr && priv->tx_actual_en)) {
+                   u32 bdp_dma;
+
+                   bdp_dma = lower_32_bits(rx_queue->rx_bd_dma_base);
+                   bdp_dma += (uintptr_t)bdp - (uintptr_t)base;
+                   gfar_write(rx_queue->rfbptr, bdp_dma);
+           }
 
            /* Update to the next pointer */
            bdp = next_bd(bdp, base, rx_queue->rx_ring_size);
You are fixing two problems here: the warning about a size cast, and
the fact that the driver is using the wrong pointer. I'd suggest
explaining it in the changelog.

Note that we normally rely on void pointer arithmetic in the kernel, so
I'd write it without the uintptr_t casts as 

      bdp_dma = lower_32_bits(rx_queue->rx_bd_dma_base + (base - bdp));
But those aren't void pointers, and rx_bd_dma_base isn't a pointer, so you'd 
get the wrong answer doing that.

-Scott

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help