@@ -1968,14 +1968,47 @@ static void virtio_skb_set_hash(const struct virtio_net_hdr_v1_hash *hdr_hash,
1968
1968
skb_set_hash (skb , __le32_to_cpu (hdr_hash -> hash_value ), rss_hash_type );
1969
1969
}
1970
1970
1971
+ static void virtnet_receive_done (struct virtnet_info * vi , struct receive_queue * rq ,
1972
+ struct sk_buff * skb , u8 flags )
1973
+ {
1974
+ struct virtio_net_common_hdr * hdr ;
1975
+ struct net_device * dev = vi -> dev ;
1976
+
1977
+ hdr = skb_vnet_common_hdr (skb );
1978
+ if (dev -> features & NETIF_F_RXHASH && vi -> has_rss_hash_report )
1979
+ virtio_skb_set_hash (& hdr -> hash_v1_hdr , skb );
1980
+
1981
+ if (flags & VIRTIO_NET_HDR_F_DATA_VALID )
1982
+ skb -> ip_summed = CHECKSUM_UNNECESSARY ;
1983
+
1984
+ if (virtio_net_hdr_to_skb (skb , & hdr -> hdr ,
1985
+ virtio_is_little_endian (vi -> vdev ))) {
1986
+ net_warn_ratelimited ("%s: bad gso: type: %u, size: %u\n" ,
1987
+ dev -> name , hdr -> hdr .gso_type ,
1988
+ hdr -> hdr .gso_size );
1989
+ goto frame_err ;
1990
+ }
1991
+
1992
+ skb_record_rx_queue (skb , vq2rxq (rq -> vq ));
1993
+ skb -> protocol = eth_type_trans (skb , dev );
1994
+ pr_debug ("Receiving skb proto 0x%04x len %i type %i\n" ,
1995
+ ntohs (skb -> protocol ), skb -> len , skb -> pkt_type );
1996
+
1997
+ napi_gro_receive (& rq -> napi , skb );
1998
+ return ;
1999
+
2000
+ frame_err :
2001
+ DEV_STATS_INC (dev , rx_frame_errors );
2002
+ dev_kfree_skb (skb );
2003
+ }
2004
+
1971
2005
static void receive_buf (struct virtnet_info * vi , struct receive_queue * rq ,
1972
2006
void * buf , unsigned int len , void * * ctx ,
1973
2007
unsigned int * xdp_xmit ,
1974
2008
struct virtnet_rq_stats * stats )
1975
2009
{
1976
2010
struct net_device * dev = vi -> dev ;
1977
2011
struct sk_buff * skb ;
1978
- struct virtio_net_common_hdr * hdr ;
1979
2012
u8 flags ;
1980
2013
1981
2014
if (unlikely (len < vi -> hdr_len + ETH_HLEN )) {
@@ -2005,32 +2038,7 @@ static void receive_buf(struct virtnet_info *vi, struct receive_queue *rq,
2005
2038
if (unlikely (!skb ))
2006
2039
return ;
2007
2040
2008
- hdr = skb_vnet_common_hdr (skb );
2009
- if (dev -> features & NETIF_F_RXHASH && vi -> has_rss_hash_report )
2010
- virtio_skb_set_hash (& hdr -> hash_v1_hdr , skb );
2011
-
2012
- if (flags & VIRTIO_NET_HDR_F_DATA_VALID )
2013
- skb -> ip_summed = CHECKSUM_UNNECESSARY ;
2014
-
2015
- if (virtio_net_hdr_to_skb (skb , & hdr -> hdr ,
2016
- virtio_is_little_endian (vi -> vdev ))) {
2017
- net_warn_ratelimited ("%s: bad gso: type: %u, size: %u\n" ,
2018
- dev -> name , hdr -> hdr .gso_type ,
2019
- hdr -> hdr .gso_size );
2020
- goto frame_err ;
2021
- }
2022
-
2023
- skb_record_rx_queue (skb , vq2rxq (rq -> vq ));
2024
- skb -> protocol = eth_type_trans (skb , dev );
2025
- pr_debug ("Receiving skb proto 0x%04x len %i type %i\n" ,
2026
- ntohs (skb -> protocol ), skb -> len , skb -> pkt_type );
2027
-
2028
- napi_gro_receive (& rq -> napi , skb );
2029
- return ;
2030
-
2031
- frame_err :
2032
- DEV_STATS_INC (dev , rx_frame_errors );
2033
- dev_kfree_skb (skb );
2041
+ virtnet_receive_done (vi , rq , skb , flags );
2034
2042
}
2035
2043
2036
2044
/* Unlike mergeable buffers, all buffers are allocated to the
0 commit comments