[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1308484421.3539.71.camel@edumazet-laptop>
Date: Sun, 19 Jun 2011 13:53:41 +0200
From: Eric Dumazet <eric.dumazet@...il.com>
To: Richard Cochran <richardcochran@...il.com>
Cc: netdev@...r.kernel.org, David Miller <davem@...emloft.net>,
John Linn <john.linn@...inx.com>
Subject: Re: [PATCH 03/11] emaclite: enable transmit and receive time
stamping.
Le dimanche 19 juin 2011 à 13:19 +0200, Richard Cochran a écrit :
> This patch enables software (and phy device) time stamping. Since this
> MAC uses phylib, adding the hooks make hardware time stamping in the phy
> possible.
>
> Compile tested only.
>
> Cc: John Linn <john.linn@...inx.com>
> Signed-off-by: Richard Cochran <richard.cochran@...cron.at>
> ---
> drivers/net/xilinx_emaclite.c | 9 +++++++--
> 1 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c
> index 372572c..ae029d0 100644
> --- a/drivers/net/xilinx_emaclite.c
> +++ b/drivers/net/xilinx_emaclite.c
> @@ -647,7 +647,8 @@ static void xemaclite_rx_handler(struct net_device *dev)
> dev->stats.rx_packets++;
> dev->stats.rx_bytes += len;
>
> - netif_rx(skb); /* Send the packet upstream */
> + if (!skb_defer_rx_timestamp(skb))
> + netif_rx(skb); /* Send the packet upstream */
> }
>
> /**
> @@ -1029,15 +1030,19 @@ static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev)
> spin_lock_irqsave(&lp->reset_lock, flags);
> if (xemaclite_send_data(lp, (u8 *) new_skb->data, len) != 0) {
> /* If the Emaclite Tx buffer is busy, stop the Tx queue and
> - * defer the skb for transmission at a later point when the
> + * defer the skb for transmission during the ISR, after the
> * current transmission is complete */
> netif_stop_queue(dev);
> lp->deferred_skb = new_skb;
> spin_unlock_irqrestore(&lp->reset_lock, flags);
Since you unlock reset_lock right here, there is no guarantee something
wont eat 'deferred_skb', so you might manipulate a freed skb after this
point.
> + /* Take the time stamp now, since we can't do this in an ISR. */
> + skb_tx_timestamp(new_skb);
> return 0;
> }
> spin_unlock_irqrestore(&lp->reset_lock, flags);
>
> + skb_tx_timestamp(new_skb);
> +
this one is ok.
> dev->stats.tx_bytes += len;
> dev_kfree_skb(new_skb);
>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists