virtio_net: extract interrupt coalescing settings to a structure
authorGavin Li <gavinl@nvidia.com>
Mon, 31 Jul 2023 07:06:54 +0000 (10:06 +0300)
committerJakub Kicinski <kuba@kernel.org>
Wed, 2 Aug 2023 04:02:00 +0000 (21:02 -0700)
Extract interrupt coalescing settings to a structure so that it could be
reused in other data structures.

Signed-off-by: Gavin Li <gavinl@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Link: https://lore.kernel.org/r/20230731070656.96411-2-gavinl@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/virtio_net.c

index 1270c8d23463fa35849dd290b7df7496198aaf9b..b1e2e63edd3522d5befbb9cd676369b0f2e1adaa 100644 (file)
@@ -126,6 +126,11 @@ static const struct virtnet_stat_desc virtnet_rq_stats_desc[] = {
 #define VIRTNET_SQ_STATS_LEN   ARRAY_SIZE(virtnet_sq_stats_desc)
 #define VIRTNET_RQ_STATS_LEN   ARRAY_SIZE(virtnet_rq_stats_desc)
 
+struct virtnet_interrupt_coalesce {
+       u32 max_packets;
+       u32 max_usecs;
+};
+
 /* Internal representation of a send virtqueue */
 struct send_queue {
        /* Virtqueue associated with this send _queue */
@@ -281,10 +286,8 @@ struct virtnet_info {
        u32 speed;
 
        /* Interrupt coalescing settings */
-       u32 tx_usecs;
-       u32 rx_usecs;
-       u32 tx_max_packets;
-       u32 rx_max_packets;
+       struct virtnet_interrupt_coalesce intr_coal_tx;
+       struct virtnet_interrupt_coalesce intr_coal_rx;
 
        unsigned long guest_offloads;
        unsigned long guest_offloads_capable;
@@ -3056,8 +3059,8 @@ static int virtnet_send_notf_coal_cmds(struct virtnet_info *vi,
                return -EINVAL;
 
        /* Save parameters */
-       vi->tx_usecs = ec->tx_coalesce_usecs;
-       vi->tx_max_packets = ec->tx_max_coalesced_frames;
+       vi->intr_coal_tx.max_usecs = ec->tx_coalesce_usecs;
+       vi->intr_coal_tx.max_packets = ec->tx_max_coalesced_frames;
 
        vi->ctrl->coal_rx.rx_usecs = cpu_to_le32(ec->rx_coalesce_usecs);
        vi->ctrl->coal_rx.rx_max_packets = cpu_to_le32(ec->rx_max_coalesced_frames);
@@ -3069,8 +3072,8 @@ static int virtnet_send_notf_coal_cmds(struct virtnet_info *vi,
                return -EINVAL;
 
        /* Save parameters */
-       vi->rx_usecs = ec->rx_coalesce_usecs;
-       vi->rx_max_packets = ec->rx_max_coalesced_frames;
+       vi->intr_coal_rx.max_usecs = ec->rx_coalesce_usecs;
+       vi->intr_coal_rx.max_packets = ec->rx_max_coalesced_frames;
 
        return 0;
 }
@@ -3132,10 +3135,10 @@ static int virtnet_get_coalesce(struct net_device *dev,
        struct virtnet_info *vi = netdev_priv(dev);
 
        if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_NOTF_COAL)) {
-               ec->rx_coalesce_usecs = vi->rx_usecs;
-               ec->tx_coalesce_usecs = vi->tx_usecs;
-               ec->tx_max_coalesced_frames = vi->tx_max_packets;
-               ec->rx_max_coalesced_frames = vi->rx_max_packets;
+               ec->rx_coalesce_usecs = vi->intr_coal_rx.max_usecs;
+               ec->tx_coalesce_usecs = vi->intr_coal_tx.max_usecs;
+               ec->tx_max_coalesced_frames = vi->intr_coal_tx.max_packets;
+               ec->rx_max_coalesced_frames = vi->intr_coal_rx.max_packets;
        } else {
                ec->rx_max_coalesced_frames = 1;
 
@@ -4119,10 +4122,10 @@ static int virtnet_probe(struct virtio_device *vdev)
        }
 
        if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_NOTF_COAL)) {
-               vi->rx_usecs = 0;
-               vi->tx_usecs = 0;
-               vi->tx_max_packets = 0;
-               vi->rx_max_packets = 0;
+               vi->intr_coal_rx.max_usecs = 0;
+               vi->intr_coal_tx.max_usecs = 0;
+               vi->intr_coal_tx.max_packets = 0;
+               vi->intr_coal_rx.max_packets = 0;
        }
 
        if (virtio_has_feature(vdev, VIRTIO_NET_F_HASH_REPORT))