On 08/01/2020, Rosen Penev <ros...@gmail.com> wrote:
> From: Chuanhong Guo <gch981...@gmail.com>
>
> This new function make batch processing of network packets possible,
> which slightly improves performance.
>
> Signed-off-by: Chuanhong Guo <gch981...@gmail.com>
> Tested-by: Rosen Penev <ros...@gmail.com>
> ---
>  around a 20mbps improvement is measured on a TP-LINK Archer C7v2
>  .../net/ethernet/atheros/ag71xx/ag71xx_main.c | 20 ++++++++++++++++++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
>
> diff --git
> a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
> b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
> index 0924b81b92..8831a51acc 100644
> ---
> a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
> +++
> b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
> @@ -1106,14 +1106,22 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int
> limit)
>       unsigned int offset = ag->rx_buf_offset;
>       int ring_mask = BIT(ring->order) - 1;
>       int ring_size = BIT(ring->order);
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +     struct list_head rx_list;
> +     struct sk_buff *next;
> +#else
>       struct sk_buff_head queue;
> +#endif
>       struct sk_buff *skb;
>       int done = 0;
>
>       DBG("%s: rx packets, limit=%d, curr=%u, dirty=%u\n",
>                       dev->name, limit, ring->curr, ring->dirty);
> -
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +     INIT_LIST_HEAD(&rx_list);
> +#else
>       skb_queue_head_init(&queue);
> +#endif
>
>       while (done < limit) {
>               unsigned int i = ring->curr & ring_mask;
> @@ -1155,7 +1163,11 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int
> limit)
>               } else {
>                       skb->dev = dev;
>                       skb->ip_summed = CHECKSUM_NONE;
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +                     list_add_tail(&skb->list, &rx_list);
> +#else
>                       __skb_queue_tail(&queue, skb);
> +#endif
>               }
>
>  next:
> @@ -1167,10 +1179,16 @@ next:
>
>       ag71xx_ring_rx_refill(ag);
>
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +     list_for_each_entry_safe(skb, next, &rx_list, list)
> +             skb->protocol = eth_type_trans(skb, dev);
> +     netif_receive_skb_list(&rx_list);
> +#else
>       while ((skb = __skb_dequeue(&queue)) != NULL) {
>               skb->protocol = eth_type_trans(skb, dev);
>               netif_receive_skb(skb);
>       }
> +#endif
>
>       DBG("%s: rx finish, curr=%u, dirty=%u, done=%d\n",
>               dev->name, ring->curr, ring->dirty, done);
> --
> 2.24.1
>
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
>

An identical email has been submitted yesterday. Why are you sending it again?

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to