Message ID | 1392731351-25502-13-git-send-email-hayeswang@realtek.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Hayes Wang <hayeswang@realtek.com> : > Replace netif_rx with netif_receive_skb to avoid disabling irq frequently > for increasing the efficiency. read_bulk_callback is issued in irq context. It could thus use plain spin_lock / spin_unlock instead of the irq disabling version.
Francois Romieu [mailto:romieu@fr.zoreil.com] > Sent: Wednesday, February 19, 2014 7:29 AM > To: Hayes Wang > Cc: netdev@vger.kernel.org; nic_swsd@realtek.com; > linux-kernel@vger.kernel.org; linux-usb@vger.kernel.org > Subject: Re: [PATCH net-next 12/14] r8152: replace netif_rx > withnetif_receive_skb > > Hayes Wang <hayeswang@realtek.com> : > > Replace netif_rx with netif_receive_skb to avoid disabling irq frequently > > for increasing the efficiency. > > read_bulk_callback is issued in irq context. It could thus use plain > spin_lock / spin_unlock instead of the irq disabling version. The rx_bottom() is called in tasklet, so I just think I could use netif_receive_skb directly. The netif_rx seems to queue the packet, and local_irq_disable() would be called before dequeuing the skb. Best Regards, Hayes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
hayeswang <hayeswang@realtek.com> : > Francois Romieu [mailto:romieu@fr.zoreil.com] > > Hayes Wang <hayeswang@realtek.com> : > > > Replace netif_rx with netif_receive_skb to avoid disabling irq frequently > > > for increasing the efficiency. > > > > read_bulk_callback is issued in irq context. It could thus use plain > > spin_lock / spin_unlock instead of the irq disabling version. > > The rx_bottom() is called in tasklet, so I just think I could use > netif_receive_skb directly. The netif_rx seems to queue the packet, > and local_irq_disable() would be called before dequeuing the skb. The change in rx_bottom is fine. My point is about read_bulk_callback. rx_bottom races with read_bulk_callback. rx_bottom is issued in tasklet (softirq) context. read_bulk_callback is issued in irq context, with irq disabled. read_bulk_callback does not need to disable irq itself and could go with spin_lock in place of spin_lock_irqsave (rx_bottom can't, of course).
Francois Romieu [mailto:romieu@fr.zoreil.com] > Sent: Wednesday, February 19, 2014 3:47 PM > To: hayeswang > Cc: netdev@vger.kernel.org; nic_swsd@realtek.com; > linux-kernel@vger.kernel.org; linux-usb@vger.kernel.org > Subject: Re: [PATCH net-next 12/14] r8152: replace > netif_rxwithnetif_receive_skb > [...] > The change in rx_bottom is fine. My point is about read_bulk_callback. > > rx_bottom races with read_bulk_callback. rx_bottom is issued in > tasklet (softirq) context. read_bulk_callback is issued in irq > context, with irq disabled. read_bulk_callback does not need to > disable irq itself and could go with spin_lock in place of > spin_lock_irqsave (rx_bottom can't, of course). I think I misunderstand your meaning. I would modify them. Thanks. Best Regards, Hayes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 3ff11ed..ff02d5d 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -1464,7 +1464,7 @@ static void rx_bottom(struct r8152 *tp) memcpy(skb->data, rx_data, pkt_len); skb_put(skb, pkt_len); skb->protocol = eth_type_trans(skb, netdev); - netif_rx(skb); + netif_receive_skb(skb); stats->rx_packets++; stats->rx_bytes += pkt_len;
Replace netif_rx with netif_receive_skb to avoid disabling irq frequently for increasing the efficiency. Signed-off-by: Hayes Wang <hayeswang@realtek.com> --- drivers/net/usb/r8152.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)