Lines Matching refs:sq
190 struct send_queue *sq; member
334 struct napi_struct *napi = &vi->sq[vq2txq(vq)].napi; in skb_xmit_done()
439 struct send_queue *sq, in __virtnet_xdp_xmit_one() argument
459 sg_init_one(sq->sg, xdpf->data, xdpf->len); in __virtnet_xdp_xmit_one()
461 err = virtqueue_add_outbuf(sq->vq, sq->sg, 1, xdpf, GFP_ATOMIC); in __virtnet_xdp_xmit_one()
473 return &vi->sq[qp]; in virtnet_xdp_sq()
483 struct send_queue *sq; in virtnet_xdp_xmit() local
490 sq = virtnet_xdp_sq(vi); in virtnet_xdp_xmit()
509 while ((xdpf_sent = virtqueue_get_buf(sq->vq, &len)) != NULL) in virtnet_xdp_xmit()
515 err = __virtnet_xdp_xmit_one(vi, sq, xdpf); in virtnet_xdp_xmit()
524 if (virtqueue_kick_prepare(sq->vq) && virtqueue_notify(sq->vq)) in virtnet_xdp_xmit()
528 u64_stats_update_begin(&sq->stats.syncp); in virtnet_xdp_xmit()
529 sq->stats.xdp_tx += n; in virtnet_xdp_xmit()
530 sq->stats.xdp_tx_drops += drops; in virtnet_xdp_xmit()
531 sq->stats.kicks += kicks; in virtnet_xdp_xmit()
532 u64_stats_update_end(&sq->stats.syncp); in virtnet_xdp_xmit()
1327 static void free_old_xmit_skbs(struct send_queue *sq) in free_old_xmit_skbs() argument
1334 while ((skb = virtqueue_get_buf(sq->vq, &len)) != NULL) { in free_old_xmit_skbs()
1349 u64_stats_update_begin(&sq->stats.syncp); in free_old_xmit_skbs()
1350 sq->stats.bytes += bytes; in free_old_xmit_skbs()
1351 sq->stats.packets += packets; in free_old_xmit_skbs()
1352 u64_stats_update_end(&sq->stats.syncp); in free_old_xmit_skbs()
1359 struct send_queue *sq = &vi->sq[index]; in virtnet_poll_cleantx() local
1362 if (!sq->napi.weight) in virtnet_poll_cleantx()
1366 free_old_xmit_skbs(sq); in virtnet_poll_cleantx()
1370 if (sq->vq->num_free >= 2 + MAX_SKB_FRAGS) in virtnet_poll_cleantx()
1379 struct send_queue *sq; in virtnet_poll() local
1395 sq = virtnet_xdp_sq(vi); in virtnet_poll()
1396 if (virtqueue_kick_prepare(sq->vq) && virtqueue_notify(sq->vq)) { in virtnet_poll()
1397 u64_stats_update_begin(&sq->stats.syncp); in virtnet_poll()
1398 sq->stats.kicks++; in virtnet_poll()
1399 u64_stats_update_end(&sq->stats.syncp); in virtnet_poll()
1429 virtnet_napi_tx_enable(vi, vi->sq[i].vq, &vi->sq[i].napi); in virtnet_open()
1437 struct send_queue *sq = container_of(napi, struct send_queue, napi); in virtnet_poll_tx() local
1438 struct virtnet_info *vi = sq->vq->vdev->priv; in virtnet_poll_tx()
1439 struct netdev_queue *txq = netdev_get_tx_queue(vi->dev, vq2txq(sq->vq)); in virtnet_poll_tx()
1442 free_old_xmit_skbs(sq); in virtnet_poll_tx()
1445 virtqueue_napi_complete(napi, sq->vq, 0); in virtnet_poll_tx()
1447 if (sq->vq->num_free >= 2 + MAX_SKB_FRAGS) in virtnet_poll_tx()
1453 static int xmit_skb(struct send_queue *sq, struct sk_buff *skb) in xmit_skb() argument
1457 struct virtnet_info *vi = sq->vq->vdev->priv; in xmit_skb()
1482 sg_init_table(sq->sg, skb_shinfo(skb)->nr_frags + (can_push ? 1 : 2)); in xmit_skb()
1485 num_sg = skb_to_sgvec(skb, sq->sg, 0, skb->len); in xmit_skb()
1491 sg_set_buf(sq->sg, hdr, hdr_len); in xmit_skb()
1492 num_sg = skb_to_sgvec(skb, sq->sg + 1, 0, skb->len); in xmit_skb()
1497 return virtqueue_add_outbuf(sq->vq, sq->sg, num_sg, skb, GFP_ATOMIC); in xmit_skb()
1504 struct send_queue *sq = &vi->sq[qnum]; in start_xmit() local
1508 bool use_napi = sq->napi.weight; in start_xmit()
1511 free_old_xmit_skbs(sq); in start_xmit()
1514 virtqueue_enable_cb_delayed(sq->vq); in start_xmit()
1520 err = xmit_skb(sq, skb); in start_xmit()
1549 if (sq->vq->num_free < 2+MAX_SKB_FRAGS) { in start_xmit()
1552 unlikely(!virtqueue_enable_cb_delayed(sq->vq))) { in start_xmit()
1554 free_old_xmit_skbs(sq); in start_xmit()
1555 if (sq->vq->num_free >= 2+MAX_SKB_FRAGS) { in start_xmit()
1557 virtqueue_disable_cb(sq->vq); in start_xmit()
1563 if (virtqueue_kick_prepare(sq->vq) && virtqueue_notify(sq->vq)) { in start_xmit()
1564 u64_stats_update_begin(&sq->stats.syncp); in start_xmit()
1565 sq->stats.kicks++; in start_xmit()
1566 u64_stats_update_end(&sq->stats.syncp); in start_xmit()
1674 struct send_queue *sq = &vi->sq[i]; in virtnet_stats() local
1677 start = u64_stats_fetch_begin_irq(&sq->stats.syncp); in virtnet_stats()
1678 tpackets = sq->stats.packets; in virtnet_stats()
1679 tbytes = sq->stats.bytes; in virtnet_stats()
1680 } while (u64_stats_fetch_retry_irq(&sq->stats.syncp, start)); in virtnet_stats()
1758 virtnet_napi_tx_disable(&vi->sq[i].napi); in virtnet_close()
1871 virtqueue_set_affinity(vi->sq[i].vq, NULL); in virtnet_clean_affinity()
1908 virtqueue_set_affinity(vi->sq[i].vq, mask); in virtnet_set_affinity()
1972 ring->tx_max_pending = virtqueue_get_vring_size(vi->sq[0].vq); in virtnet_get_ringparam()
2090 struct send_queue *sq = &vi->sq[i]; in virtnet_get_ethtool_stats() local
2092 stats_base = (u8 *)&sq->stats; in virtnet_get_ethtool_stats()
2094 start = u64_stats_fetch_begin_irq(&sq->stats.syncp); in virtnet_get_ethtool_stats()
2099 } while (u64_stats_fetch_retry_irq(&sq->stats.syncp, start)); in virtnet_get_ethtool_stats()
2229 virtnet_napi_tx_disable(&vi->sq[i].napi); in virtnet_freeze_down()
2254 virtnet_napi_tx_enable(vi, vi->sq[i].vq, in virtnet_restore_up()
2255 &vi->sq[i].napi); in virtnet_restore_up()
2495 netif_napi_del(&vi->sq[i].napi); in virtnet_free_queues()
2504 kfree(vi->sq); in virtnet_free_queues()
2555 struct virtqueue *vq = vi->sq[i].vq; in free_unused_bufs()
2651 sprintf(vi->sq[i].name, "output.%d", i); in virtnet_find_vqs()
2653 names[txq2vq(i)] = vi->sq[i].name; in virtnet_find_vqs()
2672 vi->sq[i].vq = vqs[txq2vq(i)]; in virtnet_find_vqs()
2697 vi->sq = kcalloc(vi->max_queue_pairs, sizeof(*vi->sq), GFP_KERNEL); in virtnet_alloc_queues()
2698 if (!vi->sq) in virtnet_alloc_queues()
2709 netif_tx_napi_add(vi->dev, &vi->sq[i].napi, virtnet_poll_tx, in virtnet_alloc_queues()
2714 sg_init_table(vi->sq[i].sg, ARRAY_SIZE(vi->sq[i].sg)); in virtnet_alloc_queues()
2717 u64_stats_init(&vi->sq[i].stats.syncp); in virtnet_alloc_queues()
2723 kfree(vi->sq); in virtnet_alloc_queues()