Commit cfa7029a authored by Pavan Kumar Linga's avatar Pavan Kumar Linga Committed by Tony Nguyen
Browse files

idpf: add rss_data field to RSS function parameters



Retrieve rss_data field of vport just once and pass it to RSS related
functions instead of retrieving it in each function.

While at it, update s/rss/RSS in the RSS function doc comments.

Reviewed-by: default avatarAnton Nadezhdin <anton.nadezhdin@intel.com>
Signed-off-by: default avatarPavan Kumar Linga <pavan.kumar.linga@intel.com>
Signed-off-by: default avatarJoshua Hay <joshua.a.hay@intel.com>
Reviewed-by: default avatarAleksandr Loktionov <aleksandr.loktionov@intel.com>
Tested-by: default avatarSamuel Salin <Samuel.salin@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 47ee0543
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ struct idpf_adapter;
struct idpf_vport;
struct idpf_vport_max_q;
struct idpf_q_vec_rsrc;
struct idpf_rss_data;

#include <net/pkt_sched.h>
#include <linux/aer.h>
+1 −1
Original line number Diff line number Diff line
@@ -503,7 +503,7 @@ static int idpf_set_rxfh(struct net_device *netdev,
	}

	if (test_bit(IDPF_VPORT_UP, np->state))
		err = idpf_config_rss(vport);
		err = idpf_config_rss(vport, rss_data);

unlock_mutex:
	idpf_vport_ctrl_unlock(netdev);
+19 −8
Original line number Diff line number Diff line
@@ -1078,8 +1078,8 @@ static void idpf_vport_rel(struct idpf_vport *vport)
	u16 idx = vport->idx;

	vport_config = adapter->vport_config[vport->idx];
	idpf_deinit_rss_lut(vport);
	rss_data = &vport_config->user_config.rss_data;
	idpf_deinit_rss_lut(rss_data);
	kfree(rss_data->rss_key);
	rss_data->rss_key = NULL;

@@ -1297,11 +1297,11 @@ static struct idpf_vport *idpf_vport_alloc(struct idpf_adapter *adapter,
	if (!rss_data->rss_key)
		goto free_qreg_chunks;

	/* Initialize default rss key */
	/* Initialize default RSS key */
	netdev_rss_key_fill((void *)rss_data->rss_key, rss_data->rss_key_size);

	/* Initialize default rss LUT */
	err = idpf_init_rss_lut(vport);
	/* Initialize default RSS LUT */
	err = idpf_init_rss_lut(vport, rss_data);
	if (err)
		goto free_rss_key;

@@ -1493,6 +1493,7 @@ static int idpf_vport_open(struct idpf_vport *vport, bool rtnl)
	struct idpf_adapter *adapter = vport->adapter;
	struct idpf_vport_config *vport_config;
	struct idpf_queue_id_reg_info *chunks;
	struct idpf_rss_data *rss_data;
	int err;

	if (test_bit(IDPF_VPORT_UP, np->state))
@@ -1589,7 +1590,8 @@ static int idpf_vport_open(struct idpf_vport *vport, bool rtnl)

	idpf_restore_features(vport);

	err = idpf_config_rss(vport);
	rss_data = &vport_config->user_config.rss_data;
	err = idpf_config_rss(vport, rss_data);
	if (err) {
		dev_err(&adapter->pdev->dev, "Failed to configure RSS for vport %u: %d\n",
			vport->vport_id, err);
@@ -2093,8 +2095,12 @@ int idpf_initiate_soft_reset(struct idpf_vport *vport,
		goto err_open;

	if (reset_cause == IDPF_SR_Q_CHANGE &&
	    !netif_is_rxfh_configured(vport->netdev))
		idpf_fill_dflt_rss_lut(vport);
	    !netif_is_rxfh_configured(vport->netdev)) {
		struct idpf_rss_data *rss_data;

		rss_data = &vport_config->user_config.rss_data;
		idpf_fill_dflt_rss_lut(vport, rss_data);
	}

	if (vport_is_up)
		err = idpf_vport_open(vport, false);
@@ -2273,7 +2279,12 @@ static int idpf_set_features(struct net_device *netdev,
		 * the HW when the interface is brought up.
		 */
		if (test_bit(IDPF_VPORT_UP, np->state)) {
			err = idpf_config_rss(vport);
			struct idpf_vport_config *vport_config;
			struct idpf_rss_data *rss_data;

			vport_config = adapter->vport_config[vport->idx];
			rss_data = &vport_config->user_config.rss_data;
			err = idpf_config_rss(vport, rss_data);
			if (err)
				goto unlock_mutex;
		}
+12 −20
Original line number Diff line number Diff line
@@ -4670,33 +4670,32 @@ void idpf_vport_intr_ena(struct idpf_vport *vport, struct idpf_q_vec_rsrc *rsrc)
/**
 * idpf_config_rss - Send virtchnl messages to configure RSS
 * @vport: virtual port
 * @rss_data: pointer to RSS key and lut info
 *
 * Return: 0 on success, negative on failure
 */
int idpf_config_rss(struct idpf_vport *vport)
int idpf_config_rss(struct idpf_vport *vport, struct idpf_rss_data *rss_data)
{
	int err;

	err = idpf_send_get_set_rss_key_msg(vport, false);
	err = idpf_send_get_set_rss_key_msg(vport, rss_data, false);
	if (err)
		return err;

	return idpf_send_get_set_rss_lut_msg(vport, false);
	return idpf_send_get_set_rss_lut_msg(vport, rss_data, false);
}

/**
 * idpf_fill_dflt_rss_lut - Fill the indirection table with the default values
 * @vport: virtual port structure
 * @rss_data: pointer to RSS key and lut info
 */
void idpf_fill_dflt_rss_lut(struct idpf_vport *vport)
void idpf_fill_dflt_rss_lut(struct idpf_vport *vport,
			    struct idpf_rss_data *rss_data)
{
	u16 num_active_rxq = vport->dflt_qv_rsrc.num_rxq;
	struct idpf_adapter *adapter = vport->adapter;
	struct idpf_rss_data *rss_data;
	int i;

	rss_data = &adapter->vport_config[vport->idx]->user_config.rss_data;

	for (i = 0; i < rss_data->rss_lut_size; i++)
		rss_data->rss_lut[i] = i % num_active_rxq;
}
@@ -4704,15 +4703,12 @@ void idpf_fill_dflt_rss_lut(struct idpf_vport *vport)
/**
 * idpf_init_rss_lut - Allocate and initialize RSS LUT
 * @vport: virtual port
 * @rss_data: pointer to RSS key and lut info
 *
 * Return: 0 on success, negative on failure
 */
int idpf_init_rss_lut(struct idpf_vport *vport)
int idpf_init_rss_lut(struct idpf_vport *vport, struct idpf_rss_data *rss_data)
{
	struct idpf_adapter *adapter = vport->adapter;
	struct idpf_rss_data *rss_data;

	rss_data = &adapter->vport_config[vport->idx]->user_config.rss_data;
	if (!rss_data->rss_lut) {
		u32 lut_size;

@@ -4723,21 +4719,17 @@ int idpf_init_rss_lut(struct idpf_vport *vport)
	}

	/* Fill the default RSS lut values */
	idpf_fill_dflt_rss_lut(vport);
	idpf_fill_dflt_rss_lut(vport, rss_data);

	return 0;
}

/**
 * idpf_deinit_rss_lut - Release RSS LUT
 * @vport: virtual port
 * @rss_data: pointer to RSS key and lut info
 */
void idpf_deinit_rss_lut(struct idpf_vport *vport)
void idpf_deinit_rss_lut(struct idpf_rss_data *rss_data)
{
	struct idpf_adapter *adapter = vport->adapter;
	struct idpf_rss_data *rss_data;

	rss_data = &adapter->vport_config[vport->idx]->user_config.rss_data;
	kfree(rss_data->rss_lut);
	rss_data->rss_lut = NULL;
}
+5 −4
Original line number Diff line number Diff line
@@ -1098,10 +1098,11 @@ int idpf_vport_intr_init(struct idpf_vport *vport,
			 struct idpf_q_vec_rsrc *rsrc);
void idpf_vport_intr_ena(struct idpf_vport *vport,
			 struct idpf_q_vec_rsrc *rsrc);
void idpf_fill_dflt_rss_lut(struct idpf_vport *vport);
int idpf_config_rss(struct idpf_vport *vport);
int idpf_init_rss_lut(struct idpf_vport *vport);
void idpf_deinit_rss_lut(struct idpf_vport *vport);
void idpf_fill_dflt_rss_lut(struct idpf_vport *vport,
			    struct idpf_rss_data *rss_data);
int idpf_config_rss(struct idpf_vport *vport, struct idpf_rss_data *rss_data);
int idpf_init_rss_lut(struct idpf_vport *vport, struct idpf_rss_data *rss_data);
void idpf_deinit_rss_lut(struct idpf_rss_data *rss_data);
int idpf_rx_bufs_init_all(struct idpf_vport *vport,
			  struct idpf_q_vec_rsrc *rsrc);

Loading