virtio_net.c (7c1453ab9550e45695a3edd6833108622e782e42) virtio_net.c (39d591b0d618bd27a240a2d3da2fa1221e0cf133)
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>

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

2850 struct virtnet_info *vi = netdev_priv(dev);
2851
2852 ring->rx_max_pending = vi->rq[0].vq->num_max;
2853 ring->tx_max_pending = vi->sq[0].vq->num_max;
2854 ring->rx_pending = virtqueue_get_vring_size(vi->rq[0].vq);
2855 ring->tx_pending = virtqueue_get_vring_size(vi->sq[0].vq);
2856}
2857
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>

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

2850 struct virtnet_info *vi = netdev_priv(dev);
2851
2852 ring->rx_max_pending = vi->rq[0].vq->num_max;
2853 ring->tx_max_pending = vi->sq[0].vq->num_max;
2854 ring->rx_pending = virtqueue_get_vring_size(vi->rq[0].vq);
2855 ring->tx_pending = virtqueue_get_vring_size(vi->sq[0].vq);
2856}
2857
2858static int virtnet_send_ctrl_coal_vq_cmd(struct virtnet_info *vi,
2859 u16 vqn, u32 max_usecs, u32 max_packets);
2860
2858static int virtnet_set_ringparam(struct net_device *dev,
2859 struct ethtool_ringparam *ring,
2860 struct kernel_ethtool_ringparam *kernel_ring,
2861 struct netlink_ext_ack *extack)
2862{
2863 struct virtnet_info *vi = netdev_priv(dev);
2864 u32 rx_pending, tx_pending;
2865 struct receive_queue *rq;

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

2885 for (i = 0; i < vi->max_queue_pairs; i++) {
2886 rq = vi->rq + i;
2887 sq = vi->sq + i;
2888
2889 if (ring->tx_pending != tx_pending) {
2890 err = virtnet_tx_resize(vi, sq, ring->tx_pending);
2891 if (err)
2892 return err;
2861static int virtnet_set_ringparam(struct net_device *dev,
2862 struct ethtool_ringparam *ring,
2863 struct kernel_ethtool_ringparam *kernel_ring,
2864 struct netlink_ext_ack *extack)
2865{
2866 struct virtnet_info *vi = netdev_priv(dev);
2867 u32 rx_pending, tx_pending;
2868 struct receive_queue *rq;

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

2888 for (i = 0; i < vi->max_queue_pairs; i++) {
2889 rq = vi->rq + i;
2890 sq = vi->sq + i;
2891
2892 if (ring->tx_pending != tx_pending) {
2893 err = virtnet_tx_resize(vi, sq, ring->tx_pending);
2894 if (err)
2895 return err;
2896
2897 /* Upon disabling and re-enabling a transmit virtqueue, the device must
2898 * set the coalescing parameters of the virtqueue to those configured
2899 * through the VIRTIO_NET_CTRL_NOTF_COAL_TX_SET command, or, if the driver
2900 * did not set any TX coalescing parameters, to 0.
2901 */
2902 err = virtnet_send_ctrl_coal_vq_cmd(vi, txq2vq(i),
2903 vi->intr_coal_tx.max_usecs,
2904 vi->intr_coal_tx.max_packets);
2905 if (err)
2906 return err;
2907
2908 vi->sq[i].intr_coal.max_usecs = vi->intr_coal_tx.max_usecs;
2909 vi->sq[i].intr_coal.max_packets = vi->intr_coal_tx.max_packets;
2893 }
2894
2895 if (ring->rx_pending != rx_pending) {
2896 err = virtnet_rx_resize(vi, rq, ring->rx_pending);
2897 if (err)
2898 return err;
2910 }
2911
2912 if (ring->rx_pending != rx_pending) {
2913 err = virtnet_rx_resize(vi, rq, ring->rx_pending);
2914 if (err)
2915 return err;
2916
2917 /* The reason is same as the transmit virtqueue reset */
2918 err = virtnet_send_ctrl_coal_vq_cmd(vi, rxq2vq(i),
2919 vi->intr_coal_rx.max_usecs,
2920 vi->intr_coal_rx.max_packets);
2921 if (err)
2922 return err;
2923
2924 vi->rq[i].intr_coal.max_usecs = vi->intr_coal_rx.max_usecs;
2925 vi->rq[i].intr_coal.max_packets = vi->intr_coal_rx.max_packets;
2899 }
2900 }
2901
2902 return 0;
2903}
2904
2905static bool virtnet_commit_rss_command(struct virtnet_info *vi)
2906{

--- 1870 unchanged lines hidden ---
2926 }
2927 }
2928
2929 return 0;
2930}
2931
2932static bool virtnet_commit_rss_command(struct virtnet_info *vi)
2933{

--- 1870 unchanged lines hidden ---