Stop storing RSS setting in the control buffer. This is prep work for
removing RTNL lock protection of the control buffer.

Signed-off-by: Daniel Jurgens <dani...@nvidia.com>
Reviewed-by: Jiri Pirko <j...@nvidia.com>
---
 drivers/net/virtio_net.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 115c3c5414f2..7248dae54e1c 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -245,7 +245,6 @@ struct control_buf {
        u8 allmulti;
        __virtio16 vid;
        __virtio64 offloads;
-       struct virtio_net_ctrl_rss rss;
        struct virtio_net_ctrl_coal_tx coal_tx;
        struct virtio_net_ctrl_coal_rx coal_rx;
        struct virtio_net_ctrl_coal_vq coal_vq;
@@ -287,6 +286,7 @@ struct virtnet_info {
        u16 rss_indir_table_size;
        u32 rss_hash_types_supported;
        u32 rss_hash_types_saved;
+       struct virtio_net_ctrl_rss rss;
 
        /* Has control virtqueue */
        bool has_cvq;
@@ -3087,17 +3087,17 @@ static bool virtnet_commit_rss_command(struct 
virtnet_info *vi)
        sg_init_table(sgs, 4);
 
        sg_buf_size = offsetof(struct virtio_net_ctrl_rss, indirection_table);
-       sg_set_buf(&sgs[0], &vi->ctrl->rss, sg_buf_size);
+       sg_set_buf(&sgs[0], &vi->rss, sg_buf_size);
 
-       sg_buf_size = sizeof(uint16_t) * (vi->ctrl->rss.indirection_table_mask 
+ 1);
-       sg_set_buf(&sgs[1], vi->ctrl->rss.indirection_table, sg_buf_size);
+       sg_buf_size = sizeof(uint16_t) * (vi->rss.indirection_table_mask + 1);
+       sg_set_buf(&sgs[1], vi->rss.indirection_table, sg_buf_size);
 
        sg_buf_size = offsetof(struct virtio_net_ctrl_rss, key)
                        - offsetof(struct virtio_net_ctrl_rss, max_tx_vq);
-       sg_set_buf(&sgs[2], &vi->ctrl->rss.max_tx_vq, sg_buf_size);
+       sg_set_buf(&sgs[2], &vi->rss.max_tx_vq, sg_buf_size);
 
        sg_buf_size = vi->rss_key_size;
-       sg_set_buf(&sgs[3], vi->ctrl->rss.key, sg_buf_size);
+       sg_set_buf(&sgs[3], vi->rss.key, sg_buf_size);
 
        if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_MQ,
                                  vi->has_rss ? VIRTIO_NET_CTRL_MQ_RSS_CONFIG
@@ -3113,21 +3113,21 @@ static void virtnet_init_default_rss(struct 
virtnet_info *vi)
        u32 indir_val = 0;
        int i = 0;
 
-       vi->ctrl->rss.hash_types = vi->rss_hash_types_supported;
+       vi->rss.hash_types = vi->rss_hash_types_supported;
        vi->rss_hash_types_saved = vi->rss_hash_types_supported;
-       vi->ctrl->rss.indirection_table_mask = vi->rss_indir_table_size
+       vi->rss.indirection_table_mask = vi->rss_indir_table_size
                                                ? vi->rss_indir_table_size - 1 
: 0;
-       vi->ctrl->rss.unclassified_queue = 0;
+       vi->rss.unclassified_queue = 0;
 
        for (; i < vi->rss_indir_table_size; ++i) {
                indir_val = ethtool_rxfh_indir_default(i, vi->curr_queue_pairs);
-               vi->ctrl->rss.indirection_table[i] = indir_val;
+               vi->rss.indirection_table[i] = indir_val;
        }
 
-       vi->ctrl->rss.max_tx_vq = vi->has_rss ? vi->curr_queue_pairs : 0;
-       vi->ctrl->rss.hash_key_length = vi->rss_key_size;
+       vi->rss.max_tx_vq = vi->has_rss ? vi->curr_queue_pairs : 0;
+       vi->rss.hash_key_length = vi->rss_key_size;
 
-       netdev_rss_key_fill(vi->ctrl->rss.key, vi->rss_key_size);
+       netdev_rss_key_fill(vi->rss.key, vi->rss_key_size);
 }
 
 static void virtnet_get_hashflow(const struct virtnet_info *vi, struct 
ethtool_rxnfc *info)
@@ -3238,7 +3238,7 @@ static bool virtnet_set_hashflow(struct virtnet_info *vi, 
struct ethtool_rxnfc *
 
        if (new_hashtypes != vi->rss_hash_types_saved) {
                vi->rss_hash_types_saved = new_hashtypes;
-               vi->ctrl->rss.hash_types = vi->rss_hash_types_saved;
+               vi->rss.hash_types = vi->rss_hash_types_saved;
                if (vi->dev->features & NETIF_F_RXHASH)
                        return virtnet_commit_rss_command(vi);
        }
@@ -3791,11 +3791,11 @@ static int virtnet_get_rxfh(struct net_device *dev,
 
        if (rxfh->indir) {
                for (i = 0; i < vi->rss_indir_table_size; ++i)
-                       rxfh->indir[i] = vi->ctrl->rss.indirection_table[i];
+                       rxfh->indir[i] = vi->rss.indirection_table[i];
        }
 
        if (rxfh->key)
-               memcpy(rxfh->key, vi->ctrl->rss.key, vi->rss_key_size);
+               memcpy(rxfh->key, vi->rss.key, vi->rss_key_size);
 
        rxfh->hfunc = ETH_RSS_HASH_TOP;
 
@@ -3819,7 +3819,7 @@ static int virtnet_set_rxfh(struct net_device *dev,
                        return -EOPNOTSUPP;
 
                for (i = 0; i < vi->rss_indir_table_size; ++i)
-                       vi->ctrl->rss.indirection_table[i] = rxfh->indir[i];
+                       vi->rss.indirection_table[i] = rxfh->indir[i];
                update = true;
        }
 
@@ -3831,7 +3831,7 @@ static int virtnet_set_rxfh(struct net_device *dev,
                if (!vi->has_rss && !vi->has_rss_hash_report)
                        return -EOPNOTSUPP;
 
-               memcpy(vi->ctrl->rss.key, rxfh->key, vi->rss_key_size);
+               memcpy(vi->rss.key, rxfh->key, vi->rss_key_size);
                update = true;
        }
 
@@ -4156,9 +4156,9 @@ static int virtnet_set_features(struct net_device *dev,
 
        if ((dev->features ^ features) & NETIF_F_RXHASH) {
                if (features & NETIF_F_RXHASH)
-                       vi->ctrl->rss.hash_types = vi->rss_hash_types_saved;
+                       vi->rss.hash_types = vi->rss_hash_types_saved;
                else
-                       vi->ctrl->rss.hash_types = VIRTIO_NET_HASH_REPORT_NONE;
+                       vi->rss.hash_types = VIRTIO_NET_HASH_REPORT_NONE;
 
                if (!virtnet_commit_rss_command(vi))
                        return -EINVAL;
-- 
2.34.1


Reply via email to