virtio_net.c (1ac731c529cd4d6adbce134754b51ff7d822b145) virtio_net.c (295525e29a5b5694a6e96864f0c1365f79639863)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* A network driver using virtio.
3 *
4 * Copyright 2007 Rusty Russell <rusty@rustcorp.com.au> IBM Corporation
5 */
6//#define DEBUG
7#include <linux/netdevice.h>
8#include <linux/etherdevice.h>

--- 112 unchanged lines hidden (view full) ---

121 { "xdp_redirects", VIRTNET_RQ_STAT(xdp_redirects) },
122 { "xdp_drops", VIRTNET_RQ_STAT(xdp_drops) },
123 { "kicks", VIRTNET_RQ_STAT(kicks) },
124};
125
126#define VIRTNET_SQ_STATS_LEN ARRAY_SIZE(virtnet_sq_stats_desc)
127#define VIRTNET_RQ_STATS_LEN ARRAY_SIZE(virtnet_rq_stats_desc)
128
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* A network driver using virtio.
3 *
4 * Copyright 2007 Rusty Russell <rusty@rustcorp.com.au> IBM Corporation
5 */
6//#define DEBUG
7#include <linux/netdevice.h>
8#include <linux/etherdevice.h>

--- 112 unchanged lines hidden (view full) ---

121 { "xdp_redirects", VIRTNET_RQ_STAT(xdp_redirects) },
122 { "xdp_drops", VIRTNET_RQ_STAT(xdp_drops) },
123 { "kicks", VIRTNET_RQ_STAT(kicks) },
124};
125
126#define VIRTNET_SQ_STATS_LEN ARRAY_SIZE(virtnet_sq_stats_desc)
127#define VIRTNET_RQ_STATS_LEN ARRAY_SIZE(virtnet_rq_stats_desc)
128
129/* The dma information of pages allocated at a time. */
130struct virtnet_rq_dma {
131 dma_addr_t addr;
132 u32 ref;
133 u16 len;
134 u16 need_sync;
135};
136
129/* Internal representation of a send virtqueue */
130struct send_queue {
131 /* Virtqueue associated with this send _queue */
132 struct virtqueue *vq;
133
134 /* TX: fragments + linear part + virtio header */
135 struct scatterlist sg[MAX_SKB_FRAGS + 2];
136

--- 33 unchanged lines hidden (view full) ---

170
171 /* Min single buffer size for mergeable buffers case. */
172 unsigned int min_buf_len;
173
174 /* Name of this receive queue: input.$index */
175 char name[16];
176
177 struct xdp_rxq_info xdp_rxq;
137/* Internal representation of a send virtqueue */
138struct send_queue {
139 /* Virtqueue associated with this send _queue */
140 struct virtqueue *vq;
141
142 /* TX: fragments + linear part + virtio header */
143 struct scatterlist sg[MAX_SKB_FRAGS + 2];
144

--- 33 unchanged lines hidden (view full) ---

178
179 /* Min single buffer size for mergeable buffers case. */
180 unsigned int min_buf_len;
181
182 /* Name of this receive queue: input.$index */
183 char name[16];
184
185 struct xdp_rxq_info xdp_rxq;
186
187 /* Record the last dma info to free after new pages is allocated. */
188 struct virtnet_rq_dma *last_dma;
189
190 /* Do dma by self */
191 bool do_dma;
178};
179
180/* This structure can contain rss message with maximum settings for indirection table and keysize
181 * Note, that default structure that describes RSS configuration virtio_net_rss_config
182 * contains same info but can't handle table values.
183 * In any case, structure would be passed to virtio hw through sg_buf split by parts
184 * because table sizes may be differ according to the device configuration.
185 */

--- 254 unchanged lines hidden (view full) ---

440 return (unsigned long)mrg_ctx >> MRG_CTX_HEADER_SHIFT;
441}
442
443static unsigned int mergeable_ctx_to_truesize(void *mrg_ctx)
444{
445 return (unsigned long)mrg_ctx & ((1 << MRG_CTX_HEADER_SHIFT) - 1);
446}
447
192};
193
194/* This structure can contain rss message with maximum settings for indirection table and keysize
195 * Note, that default structure that describes RSS configuration virtio_net_rss_config
196 * contains same info but can't handle table values.
197 * In any case, structure would be passed to virtio hw through sg_buf split by parts
198 * because table sizes may be differ according to the device configuration.
199 */

--- 254 unchanged lines hidden (view full) ---

454 return (unsigned long)mrg_ctx >> MRG_CTX_HEADER_SHIFT;
455}
456
457static unsigned int mergeable_ctx_to_truesize(void *mrg_ctx)
458{
459 return (unsigned long)mrg_ctx & ((1 << MRG_CTX_HEADER_SHIFT) - 1);
460}
461
462static struct sk_buff *virtnet_build_skb(void *buf, unsigned int buflen,
463 unsigned int headroom,
464 unsigned int len)
465{
466 struct sk_buff *skb;
467
468 skb = build_skb(buf, buflen);
469 if (unlikely(!skb))
470 return NULL;
471
472 skb_reserve(skb, headroom);
473 skb_put(skb, len);
474
475 return skb;
476}
477
448/* Called from bottom half context */
449static struct sk_buff *page_to_skb(struct virtnet_info *vi,
450 struct receive_queue *rq,
451 struct page *page, unsigned int offset,
452 unsigned int len, unsigned int truesize,
453 unsigned int headroom)
454{
455 struct sk_buff *skb;

--- 17 unchanged lines hidden (view full) ---

473 offset += hdr_padded_len;
474 p += hdr_padded_len;
475 tailroom = truesize - headroom - hdr_padded_len - len;
476
477 shinfo_size = SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
478
479 /* copy small packet so we can reuse these pages */
480 if (!NET_IP_ALIGN && len > GOOD_COPY_LEN && tailroom >= shinfo_size) {
478/* Called from bottom half context */
479static struct sk_buff *page_to_skb(struct virtnet_info *vi,
480 struct receive_queue *rq,
481 struct page *page, unsigned int offset,
482 unsigned int len, unsigned int truesize,
483 unsigned int headroom)
484{
485 struct sk_buff *skb;

--- 17 unchanged lines hidden (view full) ---

503 offset += hdr_padded_len;
504 p += hdr_padded_len;
505 tailroom = truesize - headroom - hdr_padded_len - len;
506
507 shinfo_size = SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
508
509 /* copy small packet so we can reuse these pages */
510 if (!NET_IP_ALIGN && len > GOOD_COPY_LEN && tailroom >= shinfo_size) {
481 skb = build_skb(buf, truesize);
511 skb = virtnet_build_skb(buf, truesize, p - buf, len);
482 if (unlikely(!skb))
483 return NULL;
484
512 if (unlikely(!skb))
513 return NULL;
514
485 skb_reserve(skb, p - buf);
486 skb_put(skb, len);
487
488 page = (struct page *)page->private;
489 if (page)
490 give_pages(rq, page);
491 goto ok;
492 }
493
494 /* copy small packet so we can reuse these pages for small data */
495 skb = napi_alloc_skb(&rq->napi, GOOD_COPY_LEN);

--- 48 unchanged lines hidden (view full) ---

544 hdr = skb_vnet_hdr(skb);
545 memcpy(hdr, hdr_p, hdr_len);
546 if (page_to_free)
547 put_page(page_to_free);
548
549 return skb;
550}
551
515 page = (struct page *)page->private;
516 if (page)
517 give_pages(rq, page);
518 goto ok;
519 }
520
521 /* copy small packet so we can reuse these pages for small data */
522 skb = napi_alloc_skb(&rq->napi, GOOD_COPY_LEN);

--- 48 unchanged lines hidden (view full) ---

571 hdr = skb_vnet_hdr(skb);
572 memcpy(hdr, hdr_p, hdr_len);
573 if (page_to_free)
574 put_page(page_to_free);
575
576 return skb;
577}
578
579static void virtnet_rq_unmap(struct receive_queue *rq, void *buf, u32 len)
580{
581 struct page *page = virt_to_head_page(buf);
582 struct virtnet_rq_dma *dma;
583 void *head;
584 int offset;
585
586 head = page_address(page);
587
588 dma = head;
589
590 --dma->ref;
591
592 if (dma->ref) {
593 if (dma->need_sync && len) {
594 offset = buf - (head + sizeof(*dma));
595
596 virtqueue_dma_sync_single_range_for_cpu(rq->vq, dma->addr, offset,
597 len, DMA_FROM_DEVICE);
598 }
599
600 return;
601 }
602
603 virtqueue_dma_unmap_single_attrs(rq->vq, dma->addr, dma->len,
604 DMA_FROM_DEVICE, DMA_ATTR_SKIP_CPU_SYNC);
605 put_page(page);
606}
607
608static void *virtnet_rq_get_buf(struct receive_queue *rq, u32 *len, void **ctx)
609{
610 void *buf;
611
612 buf = virtqueue_get_buf_ctx(rq->vq, len, ctx);
613 if (buf && rq->do_dma)
614 virtnet_rq_unmap(rq, buf, *len);
615
616 return buf;
617}
618
619static void *virtnet_rq_detach_unused_buf(struct receive_queue *rq)
620{
621 void *buf;
622
623 buf = virtqueue_detach_unused_buf(rq->vq);
624 if (buf && rq->do_dma)
625 virtnet_rq_unmap(rq, buf, 0);
626
627 return buf;
628}
629
630static void virtnet_rq_init_one_sg(struct receive_queue *rq, void *buf, u32 len)
631{
632 struct virtnet_rq_dma *dma;
633 dma_addr_t addr;
634 u32 offset;
635 void *head;
636
637 if (!rq->do_dma) {
638 sg_init_one(rq->sg, buf, len);
639 return;
640 }
641
642 head = page_address(rq->alloc_frag.page);
643
644 offset = buf - head;
645
646 dma = head;
647
648 addr = dma->addr - sizeof(*dma) + offset;
649
650 sg_init_table(rq->sg, 1);
651 rq->sg[0].dma_address = addr;
652 rq->sg[0].length = len;
653}
654
655static void *virtnet_rq_alloc(struct receive_queue *rq, u32 size, gfp_t gfp)
656{
657 struct page_frag *alloc_frag = &rq->alloc_frag;
658 struct virtnet_rq_dma *dma;
659 void *buf, *head;
660 dma_addr_t addr;
661
662 if (unlikely(!skb_page_frag_refill(size, alloc_frag, gfp)))
663 return NULL;
664
665 head = page_address(alloc_frag->page);
666
667 if (rq->do_dma) {
668 dma = head;
669
670 /* new pages */
671 if (!alloc_frag->offset) {
672 if (rq->last_dma) {
673 /* Now, the new page is allocated, the last dma
674 * will not be used. So the dma can be unmapped
675 * if the ref is 0.
676 */
677 virtnet_rq_unmap(rq, rq->last_dma, 0);
678 rq->last_dma = NULL;
679 }
680
681 dma->len = alloc_frag->size - sizeof(*dma);
682
683 addr = virtqueue_dma_map_single_attrs(rq->vq, dma + 1,
684 dma->len, DMA_FROM_DEVICE, 0);
685 if (virtqueue_dma_mapping_error(rq->vq, addr))
686 return NULL;
687
688 dma->addr = addr;
689 dma->need_sync = virtqueue_dma_need_sync(rq->vq, addr);
690
691 /* Add a reference to dma to prevent the entire dma from
692 * being released during error handling. This reference
693 * will be freed after the pages are no longer used.
694 */
695 get_page(alloc_frag->page);
696 dma->ref = 1;
697 alloc_frag->offset = sizeof(*dma);
698
699 rq->last_dma = dma;
700 }
701
702 ++dma->ref;
703 }
704
705 buf = head + alloc_frag->offset;
706
707 get_page(alloc_frag->page);
708 alloc_frag->offset += size;
709
710 return buf;
711}
712
713static void virtnet_rq_set_premapped(struct virtnet_info *vi)
714{
715 int i;
716
717 /* disable for big mode */
718 if (!vi->mergeable_rx_bufs && vi->big_packets)
719 return;
720
721 for (i = 0; i < vi->max_queue_pairs; i++) {
722 if (virtqueue_set_dma_premapped(vi->rq[i].vq))
723 continue;
724
725 vi->rq[i].do_dma = true;
726 }
727}
728
552static void free_old_xmit_skbs(struct send_queue *sq, bool in_napi)
553{
554 unsigned int len;
555 unsigned int packets = 0;
556 unsigned int bytes = 0;
557 void *ptr;
558
559 while ((ptr = virtqueue_get_buf(sq->vq, &len)) != NULL) {

--- 226 unchanged lines hidden (view full) ---

786 sq->stats.xdp_tx_drops += n - nxmit;
787 sq->stats.kicks += kicks;
788 u64_stats_update_end(&sq->stats.syncp);
789
790 virtnet_xdp_put_sq(vi, sq);
791 return ret;
792}
793
729static void free_old_xmit_skbs(struct send_queue *sq, bool in_napi)
730{
731 unsigned int len;
732 unsigned int packets = 0;
733 unsigned int bytes = 0;
734 void *ptr;
735
736 while ((ptr = virtqueue_get_buf(sq->vq, &len)) != NULL) {

--- 226 unchanged lines hidden (view full) ---

963 sq->stats.xdp_tx_drops += n - nxmit;
964 sq->stats.kicks += kicks;
965 u64_stats_update_end(&sq->stats.syncp);
966
967 virtnet_xdp_put_sq(vi, sq);
968 return ret;
969}
970
971static void put_xdp_frags(struct xdp_buff *xdp)
972{
973 struct skb_shared_info *shinfo;
974 struct page *xdp_page;
975 int i;
976
977 if (xdp_buff_has_frags(xdp)) {
978 shinfo = xdp_get_shared_info_from_buff(xdp);
979 for (i = 0; i < shinfo->nr_frags; i++) {
980 xdp_page = skb_frag_page(&shinfo->frags[i]);
981 put_page(xdp_page);
982 }
983 }
984}
985
986static int virtnet_xdp_handler(struct bpf_prog *xdp_prog, struct xdp_buff *xdp,
987 struct net_device *dev,
988 unsigned int *xdp_xmit,
989 struct virtnet_rq_stats *stats)
990{
991 struct xdp_frame *xdpf;
992 int err;
993 u32 act;
994
995 act = bpf_prog_run_xdp(xdp_prog, xdp);
996 stats->xdp_packets++;
997
998 switch (act) {
999 case XDP_PASS:
1000 return act;
1001
1002 case XDP_TX:
1003 stats->xdp_tx++;
1004 xdpf = xdp_convert_buff_to_frame(xdp);
1005 if (unlikely(!xdpf)) {
1006 netdev_dbg(dev, "convert buff to frame failed for xdp\n");
1007 return XDP_DROP;
1008 }
1009
1010 err = virtnet_xdp_xmit(dev, 1, &xdpf, 0);
1011 if (unlikely(!err)) {
1012 xdp_return_frame_rx_napi(xdpf);
1013 } else if (unlikely(err < 0)) {
1014 trace_xdp_exception(dev, xdp_prog, act);
1015 return XDP_DROP;
1016 }
1017 *xdp_xmit |= VIRTIO_XDP_TX;
1018 return act;
1019
1020 case XDP_REDIRECT:
1021 stats->xdp_redirects++;
1022 err = xdp_do_redirect(dev, xdp, xdp_prog);
1023 if (err)
1024 return XDP_DROP;
1025
1026 *xdp_xmit |= VIRTIO_XDP_REDIR;
1027 return act;
1028
1029 default:
1030 bpf_warn_invalid_xdp_action(dev, xdp_prog, act);
1031 fallthrough;
1032 case XDP_ABORTED:
1033 trace_xdp_exception(dev, xdp_prog, act);
1034 fallthrough;
1035 case XDP_DROP:
1036 return XDP_DROP;
1037 }
1038}
1039
794static unsigned int virtnet_get_headroom(struct virtnet_info *vi)
795{
796 return vi->xdp_enabled ? VIRTIO_XDP_HEADROOM : 0;
797}
798
799/* We copy the packet for XDP in the following cases:
800 *
801 * 1) Packet is scattered across multiple rx buffers.

--- 28 unchanged lines hidden (view full) ---

830 memcpy(page_address(page) + page_off, page_address(p) + offset, *len);
831 page_off += *len;
832
833 while (--*num_buf) {
834 unsigned int buflen;
835 void *buf;
836 int off;
837
1040static unsigned int virtnet_get_headroom(struct virtnet_info *vi)
1041{
1042 return vi->xdp_enabled ? VIRTIO_XDP_HEADROOM : 0;
1043}
1044
1045/* We copy the packet for XDP in the following cases:
1046 *
1047 * 1) Packet is scattered across multiple rx buffers.

--- 28 unchanged lines hidden (view full) ---

1076 memcpy(page_address(page) + page_off, page_address(p) + offset, *len);
1077 page_off += *len;
1078
1079 while (--*num_buf) {
1080 unsigned int buflen;
1081 void *buf;
1082 int off;
1083
838 buf = virtqueue_get_buf(rq->vq, &buflen);
1084 buf = virtnet_rq_get_buf(rq, &buflen, NULL);
839 if (unlikely(!buf))
840 goto err_buf;
841
842 p = virt_to_head_page(buf);
843 off = buf - page_address(p);
844
845 /* guard against a misconfigured or uncooperative backend that
846 * is sending packet larger than the MTU.

--- 12 unchanged lines hidden (view full) ---

859 /* Headroom does not contribute to packet length */
860 *len = page_off - VIRTIO_XDP_HEADROOM;
861 return page;
862err_buf:
863 __free_pages(page, 0);
864 return NULL;
865}
866
1085 if (unlikely(!buf))
1086 goto err_buf;
1087
1088 p = virt_to_head_page(buf);
1089 off = buf - page_address(p);
1090
1091 /* guard against a misconfigured or uncooperative backend that
1092 * is sending packet larger than the MTU.

--- 12 unchanged lines hidden (view full) ---

1105 /* Headroom does not contribute to packet length */
1106 *len = page_off - VIRTIO_XDP_HEADROOM;
1107 return page;
1108err_buf:
1109 __free_pages(page, 0);
1110 return NULL;
1111}
1112
867static struct sk_buff *receive_small(struct net_device *dev,
868 struct virtnet_info *vi,
869 struct receive_queue *rq,
870 void *buf, void *ctx,
871 unsigned int len,
872 unsigned int *xdp_xmit,
873 struct virtnet_rq_stats *stats)
1113static struct sk_buff *receive_small_build_skb(struct virtnet_info *vi,
1114 unsigned int xdp_headroom,
1115 void *buf,
1116 unsigned int len)
874{
1117{
1118 unsigned int header_offset;
1119 unsigned int headroom;
1120 unsigned int buflen;
875 struct sk_buff *skb;
1121 struct sk_buff *skb;
876 struct bpf_prog *xdp_prog;
877 unsigned int xdp_headroom = (unsigned long)ctx;
1122
1123 header_offset = VIRTNET_RX_PAD + xdp_headroom;
1124 headroom = vi->hdr_len + header_offset;
1125 buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +
1126 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
1127
1128 skb = virtnet_build_skb(buf, buflen, headroom, len);
1129 if (unlikely(!skb))
1130 return NULL;
1131
1132 buf += header_offset;
1133 memcpy(skb_vnet_hdr(skb), buf, vi->hdr_len);
1134
1135 return skb;
1136}
1137
1138static struct sk_buff *receive_small_xdp(struct net_device *dev,
1139 struct virtnet_info *vi,
1140 struct receive_queue *rq,
1141 struct bpf_prog *xdp_prog,
1142 void *buf,
1143 unsigned int xdp_headroom,
1144 unsigned int len,
1145 unsigned int *xdp_xmit,
1146 struct virtnet_rq_stats *stats)
1147{
878 unsigned int header_offset = VIRTNET_RX_PAD + xdp_headroom;
879 unsigned int headroom = vi->hdr_len + header_offset;
1148 unsigned int header_offset = VIRTNET_RX_PAD + xdp_headroom;
1149 unsigned int headroom = vi->hdr_len + header_offset;
880 unsigned int buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +
881 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
1150 struct virtio_net_hdr_mrg_rxbuf *hdr = buf + header_offset;
882 struct page *page = virt_to_head_page(buf);
1151 struct page *page = virt_to_head_page(buf);
883 unsigned int delta = 0;
884 struct page *xdp_page;
1152 struct page *xdp_page;
885 int err;
1153 unsigned int buflen;
1154 struct xdp_buff xdp;
1155 struct sk_buff *skb;
886 unsigned int metasize = 0;
1156 unsigned int metasize = 0;
1157 u32 act;
887
1158
888 len -= vi->hdr_len;
889 stats->bytes += len;
1159 if (unlikely(hdr->hdr.gso_type))
1160 goto err_xdp;
890
1161
891 if (unlikely(len > GOOD_PACKET_LEN)) {
892 pr_debug("%s: rx error: len %u exceeds max size %d\n",
893 dev->name, len, GOOD_PACKET_LEN);
894 dev->stats.rx_length_errors++;
895 goto err;
896 }
1162 buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +
1163 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
897
1164
898 if (likely(!vi->xdp_enabled)) {
899 xdp_prog = NULL;
900 goto skip_xdp;
901 }
1165 if (unlikely(xdp_headroom < virtnet_get_headroom(vi))) {
1166 int offset = buf - page_address(page) + header_offset;
1167 unsigned int tlen = len + vi->hdr_len;
1168 int num_buf = 1;
902
1169
903 rcu_read_lock();
904 xdp_prog = rcu_dereference(rq->xdp_prog);
905 if (xdp_prog) {
906 struct virtio_net_hdr_mrg_rxbuf *hdr = buf + header_offset;
907 struct xdp_frame *xdpf;
908 struct xdp_buff xdp;
909 void *orig_data;
910 u32 act;
911
912 if (unlikely(hdr->hdr.gso_type))
1170 xdp_headroom = virtnet_get_headroom(vi);
1171 header_offset = VIRTNET_RX_PAD + xdp_headroom;
1172 headroom = vi->hdr_len + header_offset;
1173 buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +
1174 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
1175 xdp_page = xdp_linearize_page(rq, &num_buf, page,
1176 offset, header_offset,
1177 &tlen);
1178 if (!xdp_page)
913 goto err_xdp;
914
1179 goto err_xdp;
1180
915 if (unlikely(xdp_headroom < virtnet_get_headroom(vi))) {
916 int offset = buf - page_address(page) + header_offset;
917 unsigned int tlen = len + vi->hdr_len;
918 int num_buf = 1;
1181 buf = page_address(xdp_page);
1182 put_page(page);
1183 page = xdp_page;
1184 }
919
1185
920 xdp_headroom = virtnet_get_headroom(vi);
921 header_offset = VIRTNET_RX_PAD + xdp_headroom;
922 headroom = vi->hdr_len + header_offset;
923 buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +
924 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
925 xdp_page = xdp_linearize_page(rq, &num_buf, page,
926 offset, header_offset,
927 &tlen);
928 if (!xdp_page)
929 goto err_xdp;
1186 xdp_init_buff(&xdp, buflen, &rq->xdp_rxq);
1187 xdp_prepare_buff(&xdp, buf + VIRTNET_RX_PAD + vi->hdr_len,
1188 xdp_headroom, len, true);
930
1189
931 buf = page_address(xdp_page);
932 put_page(page);
933 page = xdp_page;
934 }
1190 act = virtnet_xdp_handler(xdp_prog, &xdp, dev, xdp_xmit, stats);
935
1191
936 xdp_init_buff(&xdp, buflen, &rq->xdp_rxq);
937 xdp_prepare_buff(&xdp, buf + VIRTNET_RX_PAD + vi->hdr_len,
938 xdp_headroom, len, true);
939 orig_data = xdp.data;
940 act = bpf_prog_run_xdp(xdp_prog, &xdp);
941 stats->xdp_packets++;
1192 switch (act) {
1193 case XDP_PASS:
1194 /* Recalculate length in case bpf program changed it */
1195 len = xdp.data_end - xdp.data;
1196 metasize = xdp.data - xdp.data_meta;
1197 break;
942
1198
943 switch (act) {
944 case XDP_PASS:
945 /* Recalculate length in case bpf program changed it */
946 delta = orig_data - xdp.data;
947 len = xdp.data_end - xdp.data;
948 metasize = xdp.data - xdp.data_meta;
949 break;
950 case XDP_TX:
951 stats->xdp_tx++;
952 xdpf = xdp_convert_buff_to_frame(&xdp);
953 if (unlikely(!xdpf))
954 goto err_xdp;
955 err = virtnet_xdp_xmit(dev, 1, &xdpf, 0);
956 if (unlikely(!err)) {
957 xdp_return_frame_rx_napi(xdpf);
958 } else if (unlikely(err < 0)) {
959 trace_xdp_exception(vi->dev, xdp_prog, act);
960 goto err_xdp;
961 }
962 *xdp_xmit |= VIRTIO_XDP_TX;
963 rcu_read_unlock();
964 goto xdp_xmit;
965 case XDP_REDIRECT:
966 stats->xdp_redirects++;
967 err = xdp_do_redirect(dev, &xdp, xdp_prog);
968 if (err)
969 goto err_xdp;
970 *xdp_xmit |= VIRTIO_XDP_REDIR;
971 rcu_read_unlock();
972 goto xdp_xmit;
973 default:
974 bpf_warn_invalid_xdp_action(vi->dev, xdp_prog, act);
975 fallthrough;
976 case XDP_ABORTED:
977 trace_xdp_exception(vi->dev, xdp_prog, act);
978 goto err_xdp;
979 case XDP_DROP:
980 goto err_xdp;
981 }
1199 case XDP_TX:
1200 case XDP_REDIRECT:
1201 goto xdp_xmit;
1202
1203 default:
1204 goto err_xdp;
982 }
1205 }
983 rcu_read_unlock();
984
1206
985skip_xdp:
986 skb = build_skb(buf, buflen);
987 if (!skb)
1207 skb = virtnet_build_skb(buf, buflen, xdp.data - buf, len);
1208 if (unlikely(!skb))
988 goto err;
1209 goto err;
989 skb_reserve(skb, headroom - delta);
990 skb_put(skb, len);
991 if (!xdp_prog) {
992 buf += header_offset;
993 memcpy(skb_vnet_hdr(skb), buf, vi->hdr_len);
994 } /* keep zeroed vnet hdr since XDP is loaded */
995
996 if (metasize)
997 skb_metadata_set(skb, metasize);
998
999 return skb;
1000
1001err_xdp:
1210
1211 if (metasize)
1212 skb_metadata_set(skb, metasize);
1213
1214 return skb;
1215
1216err_xdp:
1002 rcu_read_unlock();
1003 stats->xdp_drops++;
1004err:
1005 stats->drops++;
1006 put_page(page);
1007xdp_xmit:
1008 return NULL;
1009}
1010
1217 stats->xdp_drops++;
1218err:
1219 stats->drops++;
1220 put_page(page);
1221xdp_xmit:
1222 return NULL;
1223}
1224
1225static struct sk_buff *receive_small(struct net_device *dev,
1226 struct virtnet_info *vi,
1227 struct receive_queue *rq,
1228 void *buf, void *ctx,
1229 unsigned int len,
1230 unsigned int *xdp_xmit,
1231 struct virtnet_rq_stats *stats)
1232{
1233 unsigned int xdp_headroom = (unsigned long)ctx;
1234 struct page *page = virt_to_head_page(buf);
1235 struct sk_buff *skb;
1236
1237 len -= vi->hdr_len;
1238 stats->bytes += len;
1239
1240 if (unlikely(len > GOOD_PACKET_LEN)) {
1241 pr_debug("%s: rx error: len %u exceeds max size %d\n",
1242 dev->name, len, GOOD_PACKET_LEN);
1243 dev->stats.rx_length_errors++;
1244 goto err;
1245 }
1246
1247 if (unlikely(vi->xdp_enabled)) {
1248 struct bpf_prog *xdp_prog;
1249
1250 rcu_read_lock();
1251 xdp_prog = rcu_dereference(rq->xdp_prog);
1252 if (xdp_prog) {
1253 skb = receive_small_xdp(dev, vi, rq, xdp_prog, buf,
1254 xdp_headroom, len, xdp_xmit,
1255 stats);
1256 rcu_read_unlock();
1257 return skb;
1258 }
1259 rcu_read_unlock();
1260 }
1261
1262 skb = receive_small_build_skb(vi, xdp_headroom, buf, len);
1263 if (likely(skb))
1264 return skb;
1265
1266err:
1267 stats->drops++;
1268 put_page(page);
1269 return NULL;
1270}
1271
1011static struct sk_buff *receive_big(struct net_device *dev,
1012 struct virtnet_info *vi,
1013 struct receive_queue *rq,
1014 void *buf,
1015 unsigned int len,
1016 struct virtnet_rq_stats *stats)
1017{
1018 struct page *page = buf;

--- 7 unchanged lines hidden (view full) ---

1026 return skb;
1027
1028err:
1029 stats->drops++;
1030 give_pages(rq, page);
1031 return NULL;
1032}
1033
1272static struct sk_buff *receive_big(struct net_device *dev,
1273 struct virtnet_info *vi,
1274 struct receive_queue *rq,
1275 void *buf,
1276 unsigned int len,
1277 struct virtnet_rq_stats *stats)
1278{
1279 struct page *page = buf;

--- 7 unchanged lines hidden (view full) ---

1287 return skb;
1288
1289err:
1290 stats->drops++;
1291 give_pages(rq, page);
1292 return NULL;
1293}
1294
1295static void mergeable_buf_free(struct receive_queue *rq, int num_buf,
1296 struct net_device *dev,
1297 struct virtnet_rq_stats *stats)
1298{
1299 struct page *page;
1300 void *buf;
1301 int len;
1302
1303 while (num_buf-- > 1) {
1304 buf = virtnet_rq_get_buf(rq, &len, NULL);
1305 if (unlikely(!buf)) {
1306 pr_debug("%s: rx error: %d buffers missing\n",
1307 dev->name, num_buf);
1308 dev->stats.rx_length_errors++;
1309 break;
1310 }
1311 stats->bytes += len;
1312 page = virt_to_head_page(buf);
1313 put_page(page);
1314 }
1315}
1316
1034/* Why not use xdp_build_skb_from_frame() ?
1035 * XDP core assumes that xdp frags are PAGE_SIZE in length, while in
1036 * virtio-net there are 2 points that do not match its requirements:
1037 * 1. The size of the prefilled buffer is not fixed before xdp is set.
1038 * 2. xdp_build_skb_from_frame() does more checks that we don't need,
1039 * like eth_type_trans() (which virtio-net does in receive_buf()).
1040 */
1041static struct sk_buff *build_skb_from_xdp_buff(struct net_device *dev,

--- 79 unchanged lines hidden (view full) ---

1121 shinfo->nr_frags = 0;
1122 shinfo->xdp_frags_size = 0;
1123 }
1124
1125 if (*num_buf > MAX_SKB_FRAGS + 1)
1126 return -EINVAL;
1127
1128 while (--*num_buf > 0) {
1317/* Why not use xdp_build_skb_from_frame() ?
1318 * XDP core assumes that xdp frags are PAGE_SIZE in length, while in
1319 * virtio-net there are 2 points that do not match its requirements:
1320 * 1. The size of the prefilled buffer is not fixed before xdp is set.
1321 * 2. xdp_build_skb_from_frame() does more checks that we don't need,
1322 * like eth_type_trans() (which virtio-net does in receive_buf()).
1323 */
1324static struct sk_buff *build_skb_from_xdp_buff(struct net_device *dev,

--- 79 unchanged lines hidden (view full) ---

1404 shinfo->nr_frags = 0;
1405 shinfo->xdp_frags_size = 0;
1406 }
1407
1408 if (*num_buf > MAX_SKB_FRAGS + 1)
1409 return -EINVAL;
1410
1411 while (--*num_buf > 0) {
1129 buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx);
1412 buf = virtnet_rq_get_buf(rq, &len, &ctx);
1130 if (unlikely(!buf)) {
1131 pr_debug("%s: rx error: %d buffers out of %d missing\n",
1132 dev->name, *num_buf,
1133 virtio16_to_cpu(vi->vdev, hdr->num_buffers));
1134 dev->stats.rx_length_errors++;
1413 if (unlikely(!buf)) {
1414 pr_debug("%s: rx error: %d buffers out of %d missing\n",
1415 dev->name, *num_buf,
1416 virtio16_to_cpu(vi->vdev, hdr->num_buffers));
1417 dev->stats.rx_length_errors++;
1135 return -EINVAL;
1418 goto err;
1136 }
1137
1138 stats->bytes += len;
1139 page = virt_to_head_page(buf);
1140 offset = buf - page_address(page);
1141
1142 truesize = mergeable_ctx_to_truesize(ctx);
1143 headroom = mergeable_ctx_to_headroom(ctx);
1144 tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
1145 room = SKB_DATA_ALIGN(headroom + tailroom);
1146
1147 cur_frag_size = truesize;
1148 xdp_frags_truesz += cur_frag_size;
1149 if (unlikely(len > truesize - room || cur_frag_size > PAGE_SIZE)) {
1150 put_page(page);
1151 pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
1152 dev->name, len, (unsigned long)(truesize - room));
1153 dev->stats.rx_length_errors++;
1419 }
1420
1421 stats->bytes += len;
1422 page = virt_to_head_page(buf);
1423 offset = buf - page_address(page);
1424
1425 truesize = mergeable_ctx_to_truesize(ctx);
1426 headroom = mergeable_ctx_to_headroom(ctx);
1427 tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
1428 room = SKB_DATA_ALIGN(headroom + tailroom);
1429
1430 cur_frag_size = truesize;
1431 xdp_frags_truesz += cur_frag_size;
1432 if (unlikely(len > truesize - room || cur_frag_size > PAGE_SIZE)) {
1433 put_page(page);
1434 pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
1435 dev->name, len, (unsigned long)(truesize - room));
1436 dev->stats.rx_length_errors++;
1154 return -EINVAL;
1437 goto err;
1155 }
1156
1157 frag = &shinfo->frags[shinfo->nr_frags++];
1438 }
1439
1440 frag = &shinfo->frags[shinfo->nr_frags++];
1158 __skb_frag_set_page(frag, page);
1159 skb_frag_off_set(frag, offset);
1160 skb_frag_size_set(frag, len);
1441 skb_frag_fill_page_desc(frag, page, offset, len);
1161 if (page_is_pfmemalloc(page))
1162 xdp_buff_set_frag_pfmemalloc(xdp);
1163
1164 shinfo->xdp_frags_size += len;
1165 }
1166
1167 *xdp_frags_truesize = xdp_frags_truesz;
1168 return 0;
1442 if (page_is_pfmemalloc(page))
1443 xdp_buff_set_frag_pfmemalloc(xdp);
1444
1445 shinfo->xdp_frags_size += len;
1446 }
1447
1448 *xdp_frags_truesize = xdp_frags_truesz;
1449 return 0;
1450
1451err:
1452 put_xdp_frags(xdp);
1453 return -EINVAL;
1169}
1170
1454}
1455
1456static void *mergeable_xdp_get_buf(struct virtnet_info *vi,
1457 struct receive_queue *rq,
1458 struct bpf_prog *xdp_prog,
1459 void *ctx,
1460 unsigned int *frame_sz,
1461 int *num_buf,
1462 struct page **page,
1463 int offset,
1464 unsigned int *len,
1465 struct virtio_net_hdr_mrg_rxbuf *hdr)
1466{
1467 unsigned int truesize = mergeable_ctx_to_truesize(ctx);
1468 unsigned int headroom = mergeable_ctx_to_headroom(ctx);
1469 struct page *xdp_page;
1470 unsigned int xdp_room;
1471
1472 /* Transient failure which in theory could occur if
1473 * in-flight packets from before XDP was enabled reach
1474 * the receive path after XDP is loaded.
1475 */
1476 if (unlikely(hdr->hdr.gso_type))
1477 return NULL;
1478
1479 /* Now XDP core assumes frag size is PAGE_SIZE, but buffers
1480 * with headroom may add hole in truesize, which
1481 * make their length exceed PAGE_SIZE. So we disabled the
1482 * hole mechanism for xdp. See add_recvbuf_mergeable().
1483 */
1484 *frame_sz = truesize;
1485
1486 if (likely(headroom >= virtnet_get_headroom(vi) &&
1487 (*num_buf == 1 || xdp_prog->aux->xdp_has_frags))) {
1488 return page_address(*page) + offset;
1489 }
1490
1491 /* This happens when headroom is not enough because
1492 * of the buffer was prefilled before XDP is set.
1493 * This should only happen for the first several packets.
1494 * In fact, vq reset can be used here to help us clean up
1495 * the prefilled buffers, but many existing devices do not
1496 * support it, and we don't want to bother users who are
1497 * using xdp normally.
1498 */
1499 if (!xdp_prog->aux->xdp_has_frags) {
1500 /* linearize data for XDP */
1501 xdp_page = xdp_linearize_page(rq, num_buf,
1502 *page, offset,
1503 VIRTIO_XDP_HEADROOM,
1504 len);
1505 if (!xdp_page)
1506 return NULL;
1507 } else {
1508 xdp_room = SKB_DATA_ALIGN(VIRTIO_XDP_HEADROOM +
1509 sizeof(struct skb_shared_info));
1510 if (*len + xdp_room > PAGE_SIZE)
1511 return NULL;
1512
1513 xdp_page = alloc_page(GFP_ATOMIC);
1514 if (!xdp_page)
1515 return NULL;
1516
1517 memcpy(page_address(xdp_page) + VIRTIO_XDP_HEADROOM,
1518 page_address(*page) + offset, *len);
1519 }
1520
1521 *frame_sz = PAGE_SIZE;
1522
1523 put_page(*page);
1524
1525 *page = xdp_page;
1526
1527 return page_address(*page) + VIRTIO_XDP_HEADROOM;
1528}
1529
1530static struct sk_buff *receive_mergeable_xdp(struct net_device *dev,
1531 struct virtnet_info *vi,
1532 struct receive_queue *rq,
1533 struct bpf_prog *xdp_prog,
1534 void *buf,
1535 void *ctx,
1536 unsigned int len,
1537 unsigned int *xdp_xmit,
1538 struct virtnet_rq_stats *stats)
1539{
1540 struct virtio_net_hdr_mrg_rxbuf *hdr = buf;
1541 int num_buf = virtio16_to_cpu(vi->vdev, hdr->num_buffers);
1542 struct page *page = virt_to_head_page(buf);
1543 int offset = buf - page_address(page);
1544 unsigned int xdp_frags_truesz = 0;
1545 struct sk_buff *head_skb;
1546 unsigned int frame_sz;
1547 struct xdp_buff xdp;
1548 void *data;
1549 u32 act;
1550 int err;
1551
1552 data = mergeable_xdp_get_buf(vi, rq, xdp_prog, ctx, &frame_sz, &num_buf, &page,
1553 offset, &len, hdr);
1554 if (unlikely(!data))
1555 goto err_xdp;
1556
1557 err = virtnet_build_xdp_buff_mrg(dev, vi, rq, &xdp, data, len, frame_sz,
1558 &num_buf, &xdp_frags_truesz, stats);
1559 if (unlikely(err))
1560 goto err_xdp;
1561
1562 act = virtnet_xdp_handler(xdp_prog, &xdp, dev, xdp_xmit, stats);
1563
1564 switch (act) {
1565 case XDP_PASS:
1566 head_skb = build_skb_from_xdp_buff(dev, vi, &xdp, xdp_frags_truesz);
1567 if (unlikely(!head_skb))
1568 break;
1569 return head_skb;
1570
1571 case XDP_TX:
1572 case XDP_REDIRECT:
1573 return NULL;
1574
1575 default:
1576 break;
1577 }
1578
1579 put_xdp_frags(&xdp);
1580
1581err_xdp:
1582 put_page(page);
1583 mergeable_buf_free(rq, num_buf, dev, stats);
1584
1585 stats->xdp_drops++;
1586 stats->drops++;
1587 return NULL;
1588}
1589
1171static struct sk_buff *receive_mergeable(struct net_device *dev,
1172 struct virtnet_info *vi,
1173 struct receive_queue *rq,
1174 void *buf,
1175 void *ctx,
1176 unsigned int len,
1177 unsigned int *xdp_xmit,
1178 struct virtnet_rq_stats *stats)
1179{
1180 struct virtio_net_hdr_mrg_rxbuf *hdr = buf;
1181 int num_buf = virtio16_to_cpu(vi->vdev, hdr->num_buffers);
1182 struct page *page = virt_to_head_page(buf);
1183 int offset = buf - page_address(page);
1184 struct sk_buff *head_skb, *curr_skb;
1590static struct sk_buff *receive_mergeable(struct net_device *dev,
1591 struct virtnet_info *vi,
1592 struct receive_queue *rq,
1593 void *buf,
1594 void *ctx,
1595 unsigned int len,
1596 unsigned int *xdp_xmit,
1597 struct virtnet_rq_stats *stats)
1598{
1599 struct virtio_net_hdr_mrg_rxbuf *hdr = buf;
1600 int num_buf = virtio16_to_cpu(vi->vdev, hdr->num_buffers);
1601 struct page *page = virt_to_head_page(buf);
1602 int offset = buf - page_address(page);
1603 struct sk_buff *head_skb, *curr_skb;
1185 struct bpf_prog *xdp_prog;
1186 unsigned int truesize = mergeable_ctx_to_truesize(ctx);
1187 unsigned int headroom = mergeable_ctx_to_headroom(ctx);
1188 unsigned int tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
1189 unsigned int room = SKB_DATA_ALIGN(headroom + tailroom);
1604 unsigned int truesize = mergeable_ctx_to_truesize(ctx);
1605 unsigned int headroom = mergeable_ctx_to_headroom(ctx);
1606 unsigned int tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
1607 unsigned int room = SKB_DATA_ALIGN(headroom + tailroom);
1190 unsigned int frame_sz, xdp_room;
1191 int err;
1192
1193 head_skb = NULL;
1194 stats->bytes += len - vi->hdr_len;
1195
1196 if (unlikely(len > truesize - room)) {
1197 pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
1198 dev->name, len, (unsigned long)(truesize - room));
1199 dev->stats.rx_length_errors++;
1200 goto err_skb;
1201 }
1202
1608
1609 head_skb = NULL;
1610 stats->bytes += len - vi->hdr_len;
1611
1612 if (unlikely(len > truesize - room)) {
1613 pr_debug("%s: rx error: len %u exceeds truesize %lu\n",
1614 dev->name, len, (unsigned long)(truesize - room));
1615 dev->stats.rx_length_errors++;
1616 goto err_skb;
1617 }
1618
1203 if (likely(!vi->xdp_enabled)) {
1204 xdp_prog = NULL;
1205 goto skip_xdp;
1206 }
1619 if (unlikely(vi->xdp_enabled)) {
1620 struct bpf_prog *xdp_prog;
1207
1621
1208 rcu_read_lock();
1209 xdp_prog = rcu_dereference(rq->xdp_prog);
1210 if (xdp_prog) {
1211 unsigned int xdp_frags_truesz = 0;
1212 struct skb_shared_info *shinfo;
1213 struct xdp_frame *xdpf;
1214 struct page *xdp_page;
1215 struct xdp_buff xdp;
1216 void *data;
1217 u32 act;
1218 int i;
1219
1220 /* Transient failure which in theory could occur if
1221 * in-flight packets from before XDP was enabled reach
1222 * the receive path after XDP is loaded.
1223 */
1224 if (unlikely(hdr->hdr.gso_type))
1225 goto err_xdp;
1226
1227 /* Now XDP core assumes frag size is PAGE_SIZE, but buffers
1228 * with headroom may add hole in truesize, which
1229 * make their length exceed PAGE_SIZE. So we disabled the
1230 * hole mechanism for xdp. See add_recvbuf_mergeable().
1231 */
1232 frame_sz = truesize;
1233
1234 /* This happens when headroom is not enough because
1235 * of the buffer was prefilled before XDP is set.
1236 * This should only happen for the first several packets.
1237 * In fact, vq reset can be used here to help us clean up
1238 * the prefilled buffers, but many existing devices do not
1239 * support it, and we don't want to bother users who are
1240 * using xdp normally.
1241 */
1242 if (!xdp_prog->aux->xdp_has_frags &&
1243 (num_buf > 1 || headroom < virtnet_get_headroom(vi))) {
1244 /* linearize data for XDP */
1245 xdp_page = xdp_linearize_page(rq, &num_buf,
1246 page, offset,
1247 VIRTIO_XDP_HEADROOM,
1248 &len);
1249 frame_sz = PAGE_SIZE;
1250
1251 if (!xdp_page)
1252 goto err_xdp;
1253 offset = VIRTIO_XDP_HEADROOM;
1254 } else if (unlikely(headroom < virtnet_get_headroom(vi))) {
1255 xdp_room = SKB_DATA_ALIGN(VIRTIO_XDP_HEADROOM +
1256 sizeof(struct skb_shared_info));
1257 if (len + xdp_room > PAGE_SIZE)
1258 goto err_xdp;
1259
1260 xdp_page = alloc_page(GFP_ATOMIC);
1261 if (!xdp_page)
1262 goto err_xdp;
1263
1264 memcpy(page_address(xdp_page) + VIRTIO_XDP_HEADROOM,
1265 page_address(page) + offset, len);
1266 frame_sz = PAGE_SIZE;
1267 offset = VIRTIO_XDP_HEADROOM;
1268 } else {
1269 xdp_page = page;
1270 }
1271
1272 data = page_address(xdp_page) + offset;
1273 err = virtnet_build_xdp_buff_mrg(dev, vi, rq, &xdp, data, len, frame_sz,
1274 &num_buf, &xdp_frags_truesz, stats);
1275 if (unlikely(err))
1276 goto err_xdp_frags;
1277
1278 act = bpf_prog_run_xdp(xdp_prog, &xdp);
1279 stats->xdp_packets++;
1280
1281 switch (act) {
1282 case XDP_PASS:
1283 head_skb = build_skb_from_xdp_buff(dev, vi, &xdp, xdp_frags_truesz);
1284 if (unlikely(!head_skb))
1285 goto err_xdp_frags;
1286
1287 if (unlikely(xdp_page != page))
1288 put_page(page);
1622 rcu_read_lock();
1623 xdp_prog = rcu_dereference(rq->xdp_prog);
1624 if (xdp_prog) {
1625 head_skb = receive_mergeable_xdp(dev, vi, rq, xdp_prog, buf, ctx,
1626 len, xdp_xmit, stats);
1289 rcu_read_unlock();
1290 return head_skb;
1627 rcu_read_unlock();
1628 return head_skb;
1291 case XDP_TX:
1292 stats->xdp_tx++;
1293 xdpf = xdp_convert_buff_to_frame(&xdp);
1294 if (unlikely(!xdpf)) {
1295 netdev_dbg(dev, "convert buff to frame failed for xdp\n");
1296 goto err_xdp_frags;
1297 }
1298 err = virtnet_xdp_xmit(dev, 1, &xdpf, 0);
1299 if (unlikely(!err)) {
1300 xdp_return_frame_rx_napi(xdpf);
1301 } else if (unlikely(err < 0)) {
1302 trace_xdp_exception(vi->dev, xdp_prog, act);
1303 goto err_xdp_frags;
1304 }
1305 *xdp_xmit |= VIRTIO_XDP_TX;
1306 if (unlikely(xdp_page != page))
1307 put_page(page);
1308 rcu_read_unlock();
1309 goto xdp_xmit;
1310 case XDP_REDIRECT:
1311 stats->xdp_redirects++;
1312 err = xdp_do_redirect(dev, &xdp, xdp_prog);
1313 if (err)
1314 goto err_xdp_frags;
1315 *xdp_xmit |= VIRTIO_XDP_REDIR;
1316 if (unlikely(xdp_page != page))
1317 put_page(page);
1318 rcu_read_unlock();
1319 goto xdp_xmit;
1320 default:
1321 bpf_warn_invalid_xdp_action(vi->dev, xdp_prog, act);
1322 fallthrough;
1323 case XDP_ABORTED:
1324 trace_xdp_exception(vi->dev, xdp_prog, act);
1325 fallthrough;
1326 case XDP_DROP:
1327 goto err_xdp_frags;
1328 }
1629 }
1329err_xdp_frags:
1330 if (unlikely(xdp_page != page))
1331 __free_pages(xdp_page, 0);
1332
1333 if (xdp_buff_has_frags(&xdp)) {
1334 shinfo = xdp_get_shared_info_from_buff(&xdp);
1335 for (i = 0; i < shinfo->nr_frags; i++) {
1336 xdp_page = skb_frag_page(&shinfo->frags[i]);
1337 put_page(xdp_page);
1338 }
1339 }
1340
1341 goto err_xdp;
1630 rcu_read_unlock();
1342 }
1631 }
1343 rcu_read_unlock();
1344
1632
1345skip_xdp:
1346 head_skb = page_to_skb(vi, rq, page, offset, len, truesize, headroom);
1347 curr_skb = head_skb;
1348
1349 if (unlikely(!curr_skb))
1350 goto err_skb;
1351 while (--num_buf) {
1352 int num_skb_frags;
1353
1633 head_skb = page_to_skb(vi, rq, page, offset, len, truesize, headroom);
1634 curr_skb = head_skb;
1635
1636 if (unlikely(!curr_skb))
1637 goto err_skb;
1638 while (--num_buf) {
1639 int num_skb_frags;
1640
1354 buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx);
1641 buf = virtnet_rq_get_buf(rq, &len, &ctx);
1355 if (unlikely(!buf)) {
1356 pr_debug("%s: rx error: %d buffers out of %d missing\n",
1357 dev->name, num_buf,
1358 virtio16_to_cpu(vi->vdev,
1359 hdr->num_buffers));
1360 dev->stats.rx_length_errors++;
1361 goto err_buf;
1362 }

--- 40 unchanged lines hidden (view full) ---

1403 skb_add_rx_frag(curr_skb, num_skb_frags, page,
1404 offset, len, truesize);
1405 }
1406 }
1407
1408 ewma_pkt_len_add(&rq->mrg_avg_pkt_len, head_skb->len);
1409 return head_skb;
1410
1642 if (unlikely(!buf)) {
1643 pr_debug("%s: rx error: %d buffers out of %d missing\n",
1644 dev->name, num_buf,
1645 virtio16_to_cpu(vi->vdev,
1646 hdr->num_buffers));
1647 dev->stats.rx_length_errors++;
1648 goto err_buf;
1649 }

--- 40 unchanged lines hidden (view full) ---

1690 skb_add_rx_frag(curr_skb, num_skb_frags, page,
1691 offset, len, truesize);
1692 }
1693 }
1694
1695 ewma_pkt_len_add(&rq->mrg_avg_pkt_len, head_skb->len);
1696 return head_skb;
1697
1411err_xdp:
1412 rcu_read_unlock();
1413 stats->xdp_drops++;
1414err_skb:
1415 put_page(page);
1698err_skb:
1699 put_page(page);
1416 while (num_buf-- > 1) {
1417 buf = virtqueue_get_buf(rq->vq, &len);
1418 if (unlikely(!buf)) {
1419 pr_debug("%s: rx error: %d buffers missing\n",
1420 dev->name, num_buf);
1421 dev->stats.rx_length_errors++;
1422 break;
1423 }
1424 stats->bytes += len;
1425 page = virt_to_head_page(buf);
1426 put_page(page);
1427 }
1700 mergeable_buf_free(rq, num_buf, dev, stats);
1701
1428err_buf:
1429 stats->drops++;
1430 dev_kfree_skb(head_skb);
1702err_buf:
1703 stats->drops++;
1704 dev_kfree_skb(head_skb);
1431xdp_xmit:
1432 return NULL;
1433}
1434
1435static void virtio_skb_set_hash(const struct virtio_net_hdr_v1_hash *hdr_hash,
1436 struct sk_buff *skb)
1437{
1438 enum pkt_hash_types rss_hash_type;
1439

--- 79 unchanged lines hidden (view full) ---

1519/* Unlike mergeable buffers, all buffers are allocated to the
1520 * same size, except for the headroom. For this reason we do
1521 * not need to use mergeable_len_to_ctx here - it is enough
1522 * to store the headroom as the context ignoring the truesize.
1523 */
1524static int add_recvbuf_small(struct virtnet_info *vi, struct receive_queue *rq,
1525 gfp_t gfp)
1526{
1705 return NULL;
1706}
1707
1708static void virtio_skb_set_hash(const struct virtio_net_hdr_v1_hash *hdr_hash,
1709 struct sk_buff *skb)
1710{
1711 enum pkt_hash_types rss_hash_type;
1712

--- 79 unchanged lines hidden (view full) ---

1792/* Unlike mergeable buffers, all buffers are allocated to the
1793 * same size, except for the headroom. For this reason we do
1794 * not need to use mergeable_len_to_ctx here - it is enough
1795 * to store the headroom as the context ignoring the truesize.
1796 */
1797static int add_recvbuf_small(struct virtnet_info *vi, struct receive_queue *rq,
1798 gfp_t gfp)
1799{
1527 struct page_frag *alloc_frag = &rq->alloc_frag;
1528 char *buf;
1529 unsigned int xdp_headroom = virtnet_get_headroom(vi);
1530 void *ctx = (void *)(unsigned long)xdp_headroom;
1531 int len = vi->hdr_len + VIRTNET_RX_PAD + GOOD_PACKET_LEN + xdp_headroom;
1532 int err;
1533
1534 len = SKB_DATA_ALIGN(len) +
1535 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
1800 char *buf;
1801 unsigned int xdp_headroom = virtnet_get_headroom(vi);
1802 void *ctx = (void *)(unsigned long)xdp_headroom;
1803 int len = vi->hdr_len + VIRTNET_RX_PAD + GOOD_PACKET_LEN + xdp_headroom;
1804 int err;
1805
1806 len = SKB_DATA_ALIGN(len) +
1807 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
1536 if (unlikely(!skb_page_frag_refill(len, alloc_frag, gfp)))
1808
1809 buf = virtnet_rq_alloc(rq, len, gfp);
1810 if (unlikely(!buf))
1537 return -ENOMEM;
1538
1811 return -ENOMEM;
1812
1539 buf = (char *)page_address(alloc_frag->page) + alloc_frag->offset;
1540 get_page(alloc_frag->page);
1541 alloc_frag->offset += len;
1542 sg_init_one(rq->sg, buf + VIRTNET_RX_PAD + xdp_headroom,
1543 vi->hdr_len + GOOD_PACKET_LEN);
1813 virtnet_rq_init_one_sg(rq, buf + VIRTNET_RX_PAD + xdp_headroom,
1814 vi->hdr_len + GOOD_PACKET_LEN);
1815
1544 err = virtqueue_add_inbuf_ctx(rq->vq, rq->sg, 1, buf, ctx, gfp);
1816 err = virtqueue_add_inbuf_ctx(rq->vq, rq->sg, 1, buf, ctx, gfp);
1545 if (err < 0)
1817 if (err < 0) {
1818 if (rq->do_dma)
1819 virtnet_rq_unmap(rq, buf, 0);
1546 put_page(virt_to_head_page(buf));
1820 put_page(virt_to_head_page(buf));
1821 }
1822
1547 return err;
1548}
1549
1550static int add_recvbuf_big(struct virtnet_info *vi, struct receive_queue *rq,
1551 gfp_t gfp)
1552{
1553 struct page *first, *list = NULL;
1554 char *p;

--- 60 unchanged lines hidden (view full) ---

1615
1616static int add_recvbuf_mergeable(struct virtnet_info *vi,
1617 struct receive_queue *rq, gfp_t gfp)
1618{
1619 struct page_frag *alloc_frag = &rq->alloc_frag;
1620 unsigned int headroom = virtnet_get_headroom(vi);
1621 unsigned int tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
1622 unsigned int room = SKB_DATA_ALIGN(headroom + tailroom);
1823 return err;
1824}
1825
1826static int add_recvbuf_big(struct virtnet_info *vi, struct receive_queue *rq,
1827 gfp_t gfp)
1828{
1829 struct page *first, *list = NULL;
1830 char *p;

--- 60 unchanged lines hidden (view full) ---

1891
1892static int add_recvbuf_mergeable(struct virtnet_info *vi,
1893 struct receive_queue *rq, gfp_t gfp)
1894{
1895 struct page_frag *alloc_frag = &rq->alloc_frag;
1896 unsigned int headroom = virtnet_get_headroom(vi);
1897 unsigned int tailroom = headroom ? sizeof(struct skb_shared_info) : 0;
1898 unsigned int room = SKB_DATA_ALIGN(headroom + tailroom);
1623 char *buf;
1899 unsigned int len, hole;
1624 void *ctx;
1900 void *ctx;
1901 char *buf;
1625 int err;
1902 int err;
1626 unsigned int len, hole;
1627
1628 /* Extra tailroom is needed to satisfy XDP's assumption. This
1629 * means rx frags coalescing won't work, but consider we've
1630 * disabled GSO for XDP, it won't be a big issue.
1631 */
1632 len = get_mergeable_buf_len(rq, &rq->mrg_avg_pkt_len, room);
1903
1904 /* Extra tailroom is needed to satisfy XDP's assumption. This
1905 * means rx frags coalescing won't work, but consider we've
1906 * disabled GSO for XDP, it won't be a big issue.
1907 */
1908 len = get_mergeable_buf_len(rq, &rq->mrg_avg_pkt_len, room);
1633 if (unlikely(!skb_page_frag_refill(len + room, alloc_frag, gfp)))
1909
1910 buf = virtnet_rq_alloc(rq, len + room, gfp);
1911 if (unlikely(!buf))
1634 return -ENOMEM;
1635
1912 return -ENOMEM;
1913
1636 buf = (char *)page_address(alloc_frag->page) + alloc_frag->offset;
1637 buf += headroom; /* advance address leaving hole at front of pkt */
1914 buf += headroom; /* advance address leaving hole at front of pkt */
1638 get_page(alloc_frag->page);
1639 alloc_frag->offset += len + room;
1640 hole = alloc_frag->size - alloc_frag->offset;
1641 if (hole < len + room) {
1642 /* To avoid internal fragmentation, if there is very likely not
1643 * enough space for another buffer, add the remaining space to
1644 * the current buffer.
1645 * XDP core assumes that frame_size of xdp_buff and the length
1646 * of the frag are PAGE_SIZE, so we disable the hole mechanism.
1647 */
1648 if (!headroom)
1649 len += hole;
1650 alloc_frag->offset += hole;
1651 }
1652
1915 hole = alloc_frag->size - alloc_frag->offset;
1916 if (hole < len + room) {
1917 /* To avoid internal fragmentation, if there is very likely not
1918 * enough space for another buffer, add the remaining space to
1919 * the current buffer.
1920 * XDP core assumes that frame_size of xdp_buff and the length
1921 * of the frag are PAGE_SIZE, so we disable the hole mechanism.
1922 */
1923 if (!headroom)
1924 len += hole;
1925 alloc_frag->offset += hole;
1926 }
1927
1653 sg_init_one(rq->sg, buf, len);
1928 virtnet_rq_init_one_sg(rq, buf, len);
1929
1654 ctx = mergeable_len_to_ctx(len + room, headroom);
1655 err = virtqueue_add_inbuf_ctx(rq->vq, rq->sg, 1, buf, ctx, gfp);
1930 ctx = mergeable_len_to_ctx(len + room, headroom);
1931 err = virtqueue_add_inbuf_ctx(rq->vq, rq->sg, 1, buf, ctx, gfp);
1656 if (err < 0)
1932 if (err < 0) {
1933 if (rq->do_dma)
1934 virtnet_rq_unmap(rq, buf, 0);
1657 put_page(virt_to_head_page(buf));
1935 put_page(virt_to_head_page(buf));
1936 }
1658
1659 return err;
1660}
1661
1662/*
1663 * Returns false if we couldn't fill entirely (OOM).
1664 *
1665 * Normally run in the receive path, but can also be run from ndo_open

--- 104 unchanged lines hidden (view full) ---

1770 unsigned int len;
1771 void *buf;
1772 int i;
1773
1774 if (!vi->big_packets || vi->mergeable_rx_bufs) {
1775 void *ctx;
1776
1777 while (stats.packets < budget &&
1937
1938 return err;
1939}
1940
1941/*
1942 * Returns false if we couldn't fill entirely (OOM).
1943 *
1944 * Normally run in the receive path, but can also be run from ndo_open

--- 104 unchanged lines hidden (view full) ---

2049 unsigned int len;
2050 void *buf;
2051 int i;
2052
2053 if (!vi->big_packets || vi->mergeable_rx_bufs) {
2054 void *ctx;
2055
2056 while (stats.packets < budget &&
1778 (buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx))) {
2057 (buf = virtnet_rq_get_buf(rq, &len, &ctx))) {
1779 receive_buf(vi, rq, buf, len, ctx, xdp_xmit, &stats);
1780 stats.packets++;
1781 }
1782 } else {
1783 while (stats.packets < budget &&
2058 receive_buf(vi, rq, buf, len, ctx, xdp_xmit, &stats);
2059 stats.packets++;
2060 }
2061 } else {
2062 while (stats.packets < budget &&
1784 (buf = virtqueue_get_buf(rq->vq, &len)) != NULL) {
2063 (buf = virtnet_rq_get_buf(rq, &len, NULL)) != NULL) {
1785 receive_buf(vi, rq, buf, len, NULL, xdp_xmit, &stats);
1786 stats.packets++;
1787 }
1788 }
1789
1790 if (rq->vq->num_free > min((unsigned int)budget, virtqueue_get_vring_size(rq->vq)) / 2) {
1791 if (!try_fill_recv(vi, rq, GFP_ATOMIC)) {
1792 spin_lock(&vi->refill_lock);

--- 854 unchanged lines hidden (view full) ---

2647 ? vi->rss_indir_table_size - 1 : 0;
2648 vi->ctrl->rss.unclassified_queue = 0;
2649
2650 for (; i < vi->rss_indir_table_size; ++i) {
2651 indir_val = ethtool_rxfh_indir_default(i, vi->curr_queue_pairs);
2652 vi->ctrl->rss.indirection_table[i] = indir_val;
2653 }
2654
2064 receive_buf(vi, rq, buf, len, NULL, xdp_xmit, &stats);
2065 stats.packets++;
2066 }
2067 }
2068
2069 if (rq->vq->num_free > min((unsigned int)budget, virtqueue_get_vring_size(rq->vq)) / 2) {
2070 if (!try_fill_recv(vi, rq, GFP_ATOMIC)) {
2071 spin_lock(&vi->refill_lock);

--- 854 unchanged lines hidden (view full) ---

2926 ? vi->rss_indir_table_size - 1 : 0;
2927 vi->ctrl->rss.unclassified_queue = 0;
2928
2929 for (; i < vi->rss_indir_table_size; ++i) {
2930 indir_val = ethtool_rxfh_indir_default(i, vi->curr_queue_pairs);
2931 vi->ctrl->rss.indirection_table[i] = indir_val;
2932 }
2933
2655 vi->ctrl->rss.max_tx_vq = vi->curr_queue_pairs;
2934 vi->ctrl->rss.max_tx_vq = vi->has_rss ? vi->curr_queue_pairs : 0;
2656 vi->ctrl->rss.hash_key_length = vi->rss_key_size;
2657
2658 netdev_rss_key_fill(vi->ctrl->rss.key, vi->rss_key_size);
2659}
2660
2661static void virtnet_get_hashflow(const struct virtnet_info *vi, struct ethtool_rxnfc *info)
2662{
2663 info->data = 0;

--- 884 unchanged lines hidden (view full) ---

3548 _free_receive_bufs(vi);
3549 rtnl_unlock();
3550}
3551
3552static void free_receive_page_frags(struct virtnet_info *vi)
3553{
3554 int i;
3555 for (i = 0; i < vi->max_queue_pairs; i++)
2935 vi->ctrl->rss.hash_key_length = vi->rss_key_size;
2936
2937 netdev_rss_key_fill(vi->ctrl->rss.key, vi->rss_key_size);
2938}
2939
2940static void virtnet_get_hashflow(const struct virtnet_info *vi, struct ethtool_rxnfc *info)
2941{
2942 info->data = 0;

--- 884 unchanged lines hidden (view full) ---

3827 _free_receive_bufs(vi);
3828 rtnl_unlock();
3829}
3830
3831static void free_receive_page_frags(struct virtnet_info *vi)
3832{
3833 int i;
3834 for (i = 0; i < vi->max_queue_pairs; i++)
3556 if (vi->rq[i].alloc_frag.page)
3835 if (vi->rq[i].alloc_frag.page) {
3836 if (vi->rq[i].do_dma && vi->rq[i].last_dma)
3837 virtnet_rq_unmap(&vi->rq[i], vi->rq[i].last_dma, 0);
3557 put_page(vi->rq[i].alloc_frag.page);
3838 put_page(vi->rq[i].alloc_frag.page);
3839 }
3558}
3559
3560static void virtnet_sq_free_unused_buf(struct virtqueue *vq, void *buf)
3561{
3562 if (!is_xdp_frame(buf))
3563 dev_kfree_skb(buf);
3564 else
3565 xdp_return_frame(ptr_to_xdp(buf));

--- 20 unchanged lines hidden (view full) ---

3586 for (i = 0; i < vi->max_queue_pairs; i++) {
3587 struct virtqueue *vq = vi->sq[i].vq;
3588 while ((buf = virtqueue_detach_unused_buf(vq)) != NULL)
3589 virtnet_sq_free_unused_buf(vq, buf);
3590 cond_resched();
3591 }
3592
3593 for (i = 0; i < vi->max_queue_pairs; i++) {
3840}
3841
3842static void virtnet_sq_free_unused_buf(struct virtqueue *vq, void *buf)
3843{
3844 if (!is_xdp_frame(buf))
3845 dev_kfree_skb(buf);
3846 else
3847 xdp_return_frame(ptr_to_xdp(buf));

--- 20 unchanged lines hidden (view full) ---

3868 for (i = 0; i < vi->max_queue_pairs; i++) {
3869 struct virtqueue *vq = vi->sq[i].vq;
3870 while ((buf = virtqueue_detach_unused_buf(vq)) != NULL)
3871 virtnet_sq_free_unused_buf(vq, buf);
3872 cond_resched();
3873 }
3874
3875 for (i = 0; i < vi->max_queue_pairs; i++) {
3594 struct virtqueue *vq = vi->rq[i].vq;
3595 while ((buf = virtqueue_detach_unused_buf(vq)) != NULL)
3596 virtnet_rq_free_unused_buf(vq, buf);
3876 struct receive_queue *rq = &vi->rq[i];
3877
3878 while ((buf = virtnet_rq_detach_unused_buf(rq)) != NULL)
3879 virtnet_rq_free_unused_buf(rq->vq, buf);
3597 cond_resched();
3598 }
3599}
3600
3601static void virtnet_del_vqs(struct virtnet_info *vi)
3602{
3603 struct virtio_device *vdev = vi->vdev;
3604

--- 157 unchanged lines hidden (view full) ---

3762 ret = virtnet_alloc_queues(vi);
3763 if (ret)
3764 goto err;
3765
3766 ret = virtnet_find_vqs(vi);
3767 if (ret)
3768 goto err_free;
3769
3880 cond_resched();
3881 }
3882}
3883
3884static void virtnet_del_vqs(struct virtnet_info *vi)
3885{
3886 struct virtio_device *vdev = vi->vdev;
3887

--- 157 unchanged lines hidden (view full) ---

4045 ret = virtnet_alloc_queues(vi);
4046 if (ret)
4047 goto err;
4048
4049 ret = virtnet_find_vqs(vi);
4050 if (ret)
4051 goto err_free;
4052
4053 virtnet_rq_set_premapped(vi);
4054
3770 cpus_read_lock();
3771 virtnet_set_affinity(vi);
3772 cpus_read_unlock();
3773
3774 return 0;
3775
3776err_free:
3777 virtnet_free_queues(vi);

--- 339 unchanged lines hidden (view full) ---

4117 if (err) {
4118 pr_debug("virtio_net: registering device failed\n");
4119 rtnl_unlock();
4120 goto free_failover;
4121 }
4122
4123 virtio_device_ready(vdev);
4124
4055 cpus_read_lock();
4056 virtnet_set_affinity(vi);
4057 cpus_read_unlock();
4058
4059 return 0;
4060
4061err_free:
4062 virtnet_free_queues(vi);

--- 339 unchanged lines hidden (view full) ---

4402 if (err) {
4403 pr_debug("virtio_net: registering device failed\n");
4404 rtnl_unlock();
4405 goto free_failover;
4406 }
4407
4408 virtio_device_ready(vdev);
4409
4410 _virtnet_set_queues(vi, vi->curr_queue_pairs);
4411
4125 /* a random MAC address has been assigned, notify the device.
4126 * We don't fail probe if VIRTIO_NET_F_CTRL_MAC_ADDR is not there
4127 * because many devices work fine without getting MAC explicitly
4128 */
4129 if (!virtio_has_feature(vdev, VIRTIO_NET_F_MAC) &&
4130 virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_MAC_ADDR)) {
4131 struct scatterlist sg;
4132

--- 10 unchanged lines hidden (view full) ---

4143 rtnl_unlock();
4144
4145 err = virtnet_cpu_notif_add(vi);
4146 if (err) {
4147 pr_debug("virtio_net: registering cpu notifier failed\n");
4148 goto free_unregister_netdev;
4149 }
4150
4412 /* a random MAC address has been assigned, notify the device.
4413 * We don't fail probe if VIRTIO_NET_F_CTRL_MAC_ADDR is not there
4414 * because many devices work fine without getting MAC explicitly
4415 */
4416 if (!virtio_has_feature(vdev, VIRTIO_NET_F_MAC) &&
4417 virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_MAC_ADDR)) {
4418 struct scatterlist sg;
4419

--- 10 unchanged lines hidden (view full) ---

4430 rtnl_unlock();
4431
4432 err = virtnet_cpu_notif_add(vi);
4433 if (err) {
4434 pr_debug("virtio_net: registering cpu notifier failed\n");
4435 goto free_unregister_netdev;
4436 }
4437
4151 virtnet_set_queues(vi, vi->curr_queue_pairs);
4152
4153 /* Assume link up if device can't report link status,
4154 otherwise get link status from config. */
4155 netif_carrier_off(dev);
4156 if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_STATUS)) {
4157 schedule_work(&vi->config_work);
4158 } else {
4159 vi->status = VIRTIO_NET_S_LINK_UP;
4160 virtnet_update_settings(vi);

--- 177 unchanged lines hidden ---
4438 /* Assume link up if device can't report link status,
4439 otherwise get link status from config. */
4440 netif_carrier_off(dev);
4441 if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_STATUS)) {
4442 schedule_work(&vi->config_work);
4443 } else {
4444 vi->status = VIRTIO_NET_S_LINK_UP;
4445 virtnet_update_settings(vi);

--- 177 unchanged lines hidden ---