Skip to content

Commit d46eeea

Browse files
jasowangdavem330
authored andcommitted
virtio-net: get rid of unnecessary container of rq stats
We don't maintain tx counters in rx stats any more. There's no need for an extra container of rq stats. Cc: Toshiaki Makita <[email protected]> Signed-off-by: Jason Wang <[email protected]> Acked-by: Michael S. Tsirkin <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ca9e83b commit d46eeea

File tree

1 file changed

+36
-44
lines changed

1 file changed

+36
-44
lines changed

drivers/net/virtio_net.c

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ struct virtnet_sq_stats {
8787
u64 kicks;
8888
};
8989

90-
struct virtnet_rq_stat_items {
90+
struct virtnet_rq_stats {
91+
struct u64_stats_sync syncp;
9192
u64 packets;
9293
u64 bytes;
9394
u64 drops;
@@ -98,17 +99,8 @@ struct virtnet_rq_stat_items {
9899
u64 kicks;
99100
};
100101

101-
struct virtnet_rq_stats {
102-
struct u64_stats_sync syncp;
103-
struct virtnet_rq_stat_items items;
104-
};
105-
106-
struct virtnet_rx_stats {
107-
struct virtnet_rq_stat_items rx;
108-
};
109-
110102
#define VIRTNET_SQ_STAT(m) offsetof(struct virtnet_sq_stats, m)
111-
#define VIRTNET_RQ_STAT(m) offsetof(struct virtnet_rq_stat_items, m)
103+
#define VIRTNET_RQ_STAT(m) offsetof(struct virtnet_rq_stats, m)
112104

113105
static const struct virtnet_stat_desc virtnet_sq_stats_desc[] = {
114106
{ "packets", VIRTNET_SQ_STAT(packets) },
@@ -617,7 +609,7 @@ static struct sk_buff *receive_small(struct net_device *dev,
617609
void *buf, void *ctx,
618610
unsigned int len,
619611
unsigned int *xdp_xmit,
620-
struct virtnet_rx_stats *stats)
612+
struct virtnet_rq_stats *stats)
621613
{
622614
struct sk_buff *skb;
623615
struct bpf_prog *xdp_prog;
@@ -632,7 +624,7 @@ static struct sk_buff *receive_small(struct net_device *dev,
632624
int err;
633625

634626
len -= vi->hdr_len;
635-
stats->rx.bytes += len;
627+
stats->bytes += len;
636628

637629
rcu_read_lock();
638630
xdp_prog = rcu_dereference(rq->xdp_prog);
@@ -674,7 +666,7 @@ static struct sk_buff *receive_small(struct net_device *dev,
674666
xdp.rxq = &rq->xdp_rxq;
675667
orig_data = xdp.data;
676668
act = bpf_prog_run_xdp(xdp_prog, &xdp);
677-
stats->rx.xdp_packets++;
669+
stats->xdp_packets++;
678670

679671
switch (act) {
680672
case XDP_PASS:
@@ -683,7 +675,7 @@ static struct sk_buff *receive_small(struct net_device *dev,
683675
len = xdp.data_end - xdp.data;
684676
break;
685677
case XDP_TX:
686-
stats->rx.xdp_tx++;
678+
stats->xdp_tx++;
687679
xdpf = convert_to_xdp_frame(&xdp);
688680
if (unlikely(!xdpf))
689681
goto err_xdp;
@@ -696,7 +688,7 @@ static struct sk_buff *receive_small(struct net_device *dev,
696688
rcu_read_unlock();
697689
goto xdp_xmit;
698690
case XDP_REDIRECT:
699-
stats->rx.xdp_redirects++;
691+
stats->xdp_redirects++;
700692
err = xdp_do_redirect(dev, &xdp, xdp_prog);
701693
if (err)
702694
goto err_xdp;
@@ -730,8 +722,8 @@ static struct sk_buff *receive_small(struct net_device *dev,
730722

731723
err_xdp:
732724
rcu_read_unlock();
733-
stats->rx.xdp_drops++;
734-
stats->rx.drops++;
725+
stats->xdp_drops++;
726+
stats->drops++;
735727
put_page(page);
736728
xdp_xmit:
737729
return NULL;
@@ -742,19 +734,19 @@ static struct sk_buff *receive_big(struct net_device *dev,
742734
struct receive_queue *rq,
743735
void *buf,
744736
unsigned int len,
745-
struct virtnet_rx_stats *stats)
737+
struct virtnet_rq_stats *stats)
746738
{
747739
struct page *page = buf;
748740
struct sk_buff *skb = page_to_skb(vi, rq, page, 0, len, PAGE_SIZE);
749741

750-
stats->rx.bytes += len - vi->hdr_len;
742+
stats->bytes += len - vi->hdr_len;
751743
if (unlikely(!skb))
752744
goto err;
753745

754746
return skb;
755747

756748
err:
757-
stats->rx.drops++;
749+
stats->drops++;
758750
give_pages(rq, page);
759751
return NULL;
760752
}
@@ -766,7 +758,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
766758
void *ctx,
767759
unsigned int len,
768760
unsigned int *xdp_xmit,
769-
struct virtnet_rx_stats *stats)
761+
struct virtnet_rq_stats *stats)
770762
{
771763
struct virtio_net_hdr_mrg_rxbuf *hdr = buf;
772764
u16 num_buf = virtio16_to_cpu(vi->vdev, hdr->num_buffers);
@@ -779,7 +771,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
779771
int err;
780772

781773
head_skb = NULL;
782-
stats->rx.bytes += len - vi->hdr_len;
774+
stats->bytes += len - vi->hdr_len;
783775

784776
rcu_read_lock();
785777
xdp_prog = rcu_dereference(rq->xdp_prog);
@@ -828,7 +820,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
828820
xdp.rxq = &rq->xdp_rxq;
829821

830822
act = bpf_prog_run_xdp(xdp_prog, &xdp);
831-
stats->rx.xdp_packets++;
823+
stats->xdp_packets++;
832824

833825
switch (act) {
834826
case XDP_PASS:
@@ -853,7 +845,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
853845
}
854846
break;
855847
case XDP_TX:
856-
stats->rx.xdp_tx++;
848+
stats->xdp_tx++;
857849
xdpf = convert_to_xdp_frame(&xdp);
858850
if (unlikely(!xdpf))
859851
goto err_xdp;
@@ -870,7 +862,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
870862
rcu_read_unlock();
871863
goto xdp_xmit;
872864
case XDP_REDIRECT:
873-
stats->rx.xdp_redirects++;
865+
stats->xdp_redirects++;
874866
err = xdp_do_redirect(dev, &xdp, xdp_prog);
875867
if (err) {
876868
if (unlikely(xdp_page != page))
@@ -920,7 +912,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
920912
goto err_buf;
921913
}
922914

923-
stats->rx.bytes += len;
915+
stats->bytes += len;
924916
page = virt_to_head_page(buf);
925917

926918
truesize = mergeable_ctx_to_truesize(ctx);
@@ -966,7 +958,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
966958

967959
err_xdp:
968960
rcu_read_unlock();
969-
stats->rx.xdp_drops++;
961+
stats->xdp_drops++;
970962
err_skb:
971963
put_page(page);
972964
while (num_buf-- > 1) {
@@ -977,12 +969,12 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
977969
dev->stats.rx_length_errors++;
978970
break;
979971
}
980-
stats->rx.bytes += len;
972+
stats->bytes += len;
981973
page = virt_to_head_page(buf);
982974
put_page(page);
983975
}
984976
err_buf:
985-
stats->rx.drops++;
977+
stats->drops++;
986978
dev_kfree_skb(head_skb);
987979
xdp_xmit:
988980
return NULL;
@@ -991,7 +983,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
991983
static void receive_buf(struct virtnet_info *vi, struct receive_queue *rq,
992984
void *buf, unsigned int len, void **ctx,
993985
unsigned int *xdp_xmit,
994-
struct virtnet_rx_stats *stats)
986+
struct virtnet_rq_stats *stats)
995987
{
996988
struct net_device *dev = vi->dev;
997989
struct sk_buff *skb;
@@ -1212,7 +1204,7 @@ static bool try_fill_recv(struct virtnet_info *vi, struct receive_queue *rq,
12121204
} while (rq->vq->num_free);
12131205
if (virtqueue_kick_prepare(rq->vq) && virtqueue_notify(rq->vq)) {
12141206
u64_stats_update_begin(&rq->stats.syncp);
1215-
rq->stats.items.kicks++;
1207+
rq->stats.kicks++;
12161208
u64_stats_update_end(&rq->stats.syncp);
12171209
}
12181210

@@ -1290,24 +1282,24 @@ static int virtnet_receive(struct receive_queue *rq, int budget,
12901282
unsigned int *xdp_xmit)
12911283
{
12921284
struct virtnet_info *vi = rq->vq->vdev->priv;
1293-
struct virtnet_rx_stats stats = {};
1285+
struct virtnet_rq_stats stats = {};
12941286
unsigned int len;
12951287
void *buf;
12961288
int i;
12971289

12981290
if (!vi->big_packets || vi->mergeable_rx_bufs) {
12991291
void *ctx;
13001292

1301-
while (stats.rx.packets < budget &&
1293+
while (stats.packets < budget &&
13021294
(buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx))) {
13031295
receive_buf(vi, rq, buf, len, ctx, xdp_xmit, &stats);
1304-
stats.rx.packets++;
1296+
stats.packets++;
13051297
}
13061298
} else {
1307-
while (stats.rx.packets < budget &&
1299+
while (stats.packets < budget &&
13081300
(buf = virtqueue_get_buf(rq->vq, &len)) != NULL) {
13091301
receive_buf(vi, rq, buf, len, NULL, xdp_xmit, &stats);
1310-
stats.rx.packets++;
1302+
stats.packets++;
13111303
}
13121304
}
13131305

@@ -1321,12 +1313,12 @@ static int virtnet_receive(struct receive_queue *rq, int budget,
13211313
size_t offset = virtnet_rq_stats_desc[i].offset;
13221314
u64 *item;
13231315

1324-
item = (u64 *)((u8 *)&rq->stats.items + offset);
1325-
*item += *(u64 *)((u8 *)&stats.rx + offset);
1316+
item = (u64 *)((u8 *)&rq->stats + offset);
1317+
*item += *(u64 *)((u8 *)&stats + offset);
13261318
}
13271319
u64_stats_update_end(&rq->stats.syncp);
13281320

1329-
return stats.rx.packets;
1321+
return stats.packets;
13301322
}
13311323

13321324
static void free_old_xmit_skbs(struct send_queue *sq)
@@ -1686,9 +1678,9 @@ static void virtnet_stats(struct net_device *dev,
16861678

16871679
do {
16881680
start = u64_stats_fetch_begin_irq(&rq->stats.syncp);
1689-
rpackets = rq->stats.items.packets;
1690-
rbytes = rq->stats.items.bytes;
1691-
rdrops = rq->stats.items.drops;
1681+
rpackets = rq->stats.packets;
1682+
rbytes = rq->stats.bytes;
1683+
rdrops = rq->stats.drops;
16921684
} while (u64_stats_fetch_retry_irq(&rq->stats.syncp, start));
16931685

16941686
tot->rx_packets += rpackets;
@@ -2078,7 +2070,7 @@ static void virtnet_get_ethtool_stats(struct net_device *dev,
20782070
for (i = 0; i < vi->curr_queue_pairs; i++) {
20792071
struct receive_queue *rq = &vi->rq[i];
20802072

2081-
stats_base = (u8 *)&rq->stats.items;
2073+
stats_base = (u8 *)&rq->stats;
20822074
do {
20832075
start = u64_stats_fetch_begin_irq(&rq->stats.syncp);
20842076
for (j = 0; j < VIRTNET_RQ_STATS_LEN; j++) {

0 commit comments

Comments
 (0)