netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Tony Nguyen <anthony.l.nguyen@intel.com>
Cc: davem@davemloft.net, pabeni@redhat.com, edumazet@google.com,
	netdev@vger.kernel.org, Alan Brady <alan.brady@intel.com>,
	pavan.kumar.linga@intel.com, emil.s.tantilov@intel.com,
	jesse.brandeburg@intel.com, sridhar.samudrala@intel.com,
	shiraz.saleem@intel.com, sindhu.devale@intel.com,
	willemb@google.com, decot@google.com, andrew@lunn.ch,
	leon@kernel.org, mst@redhat.com, simon.horman@corigine.com,
	shannon.nelson@amd.com, stephen@networkplumber.org,
	Alice Michael <alice.michael@intel.com>,
	Joshua Hay <joshua.a.hay@intel.com>,
	Phani Burra <phani.r.burra@intel.com>
Subject: Re: [PATCH net-next v5 14/15] idpf: add ethtool callbacks
Date: Fri, 18 Aug 2023 11:58:24 -0700	[thread overview]
Message-ID: <20230818115824.446d1ea7@kernel.org> (raw)
In-Reply-To: <20230816004305.216136-15-anthony.l.nguyen@intel.com>

On Tue, 15 Aug 2023 17:43:04 -0700 Tony Nguyen wrote:
> +static u32 idpf_get_rxfh_indir_size(struct net_device *netdev)
> +{
> +	struct idpf_vport *vport = idpf_netdev_to_vport(netdev);
> +	struct idpf_vport_user_config_data *user_config;
> +
> +	if (!vport)
> +		return -EINVAL;

defensive programming? how do we have a netdev and no vport?

> +	if (!idpf_is_cap_ena_all(vport->adapter, IDPF_RSS_CAPS, IDPF_CAP_RSS)) {
> +		dev_err(&vport->adapter->pdev->dev, "RSS is not supported on this device\n");
> +
> +		return -EOPNOTSUPP;

Let's drop these prints, EOPNOTSUPP is enough.
Some random system info gathering daemon will run this get and
pollute logs with errors for no good reason.

> +	}
> +
> +	user_config = &vport->adapter->vport_config[vport->idx]->user_config;
> +
> +	return user_config->rss_data.rss_lut_size;
> +}

> +/**
> + * idpf_set_channels: set the new channel count
> + * @netdev: network interface device structure
> + * @ch: channel information structure
> + *
> + * Negotiate a new number of channels with CP. Returns 0 on success, negative
> + * on failure.
> + */
> +static int idpf_set_channels(struct net_device *netdev,
> +			     struct ethtool_channels *ch)
> +{
> +	struct idpf_vport *vport = idpf_netdev_to_vport(netdev);
> +	struct idpf_vport_config *vport_config;
> +	u16 combined, num_txq, num_rxq;
> +	unsigned int num_req_tx_q;
> +	unsigned int num_req_rx_q;
> +	struct device *dev;
> +	int err;
> +	u16 idx;
> +
> +	if (!vport)
> +		return -EINVAL;
> +
> +	idx = vport->idx;
> +	vport_config = vport->adapter->vport_config[idx];
> +
> +	num_txq = vport_config->user_config.num_req_tx_qs;
> +	num_rxq = vport_config->user_config.num_req_rx_qs;
> +
> +	combined = min(num_txq, num_rxq);
> +
> +	/* these checks are for cases where user didn't specify a particular
> +	 * value on cmd line but we get non-zero value anyway via
> +	 * get_channels(); look at ethtool.c in ethtool repository (the user
> +	 * space part), particularly, do_schannels() routine
> +	 */
> +	if (ch->combined_count == combined)
> +		ch->combined_count = 0;
> +	if (ch->combined_count && ch->rx_count == num_rxq - combined)
> +		ch->rx_count = 0;
> +	if (ch->combined_count && ch->tx_count == num_txq - combined)
> +		ch->tx_count = 0;
> +
> +	dev = &vport->adapter->pdev->dev;
> +	if (!(ch->combined_count || (ch->rx_count && ch->tx_count))) {
> +		dev_err(dev, "Please specify at least 1 Rx and 1 Tx channel\n");

The error msg doesn't seem to fit the second part of the condition.

> +		return -EINVAL;
> +	}
> +
> +	num_req_tx_q = ch->combined_count + ch->tx_count;
> +	num_req_rx_q = ch->combined_count + ch->rx_count;
> +
> +	dev = &vport->adapter->pdev->dev;
> +	/* It's possible to specify number of queues that exceeds max in a way
> +	 * that stack won't catch for us, this should catch that.
> +	 */

How, tho?

> +	if (num_req_tx_q > vport_config->max_q.max_txq) {
> +		dev_info(dev, "Maximum TX queues is %d\n",
> +			 vport_config->max_q.max_txq);
> +
> +		return -EINVAL;
> +	}
> +	if (num_req_rx_q > vport_config->max_q.max_rxq) {
> +		dev_info(dev, "Maximum RX queues is %d\n",
> +			 vport_config->max_q.max_rxq);
> +
> +		return -EINVAL;
> +	}

> +	if (ring->tx_pending > IDPF_MAX_TXQ_DESC ||
> +	    ring->tx_pending < IDPF_MIN_TXQ_DESC) {

Doesn't core check max?

> +		netdev_err(netdev, "Descriptors requested (Tx: %u) out of range [%d-%d] (increment %d)\n",
> +			   ring->tx_pending,
> +			   IDPF_MIN_TXQ_DESC, IDPF_MAX_TXQ_DESC,
> +			   IDPF_REQ_DESC_MULTIPLE);
> +
> +		return -EINVAL;
> +	}
> +
> +	if (ring->rx_pending > IDPF_MAX_RXQ_DESC ||
> +	    ring->rx_pending < IDPF_MIN_RXQ_DESC) {
> +		netdev_err(netdev, "Descriptors requested (Rx: %u) out of range [%d-%d] (increment %d)\n",
> +			   ring->rx_pending,
> +			   IDPF_MIN_RXQ_DESC, IDPF_MAX_RXQ_DESC,
> +			   IDPF_REQ_RXQ_DESC_MULTIPLE);
> +
> +		return -EINVAL;
> +	}


> +static const struct idpf_stats idpf_gstrings_port_stats[] = {
> +	IDPF_PORT_STAT("rx-csum_errors", port_stats.rx_hw_csum_err),
> +	IDPF_PORT_STAT("rx-hsplit", port_stats.rx_hsplit),
> +	IDPF_PORT_STAT("rx-hsplit_hbo", port_stats.rx_hsplit_hbo),
> +	IDPF_PORT_STAT("rx-bad_descs", port_stats.rx_bad_descs),
> +	IDPF_PORT_STAT("rx-length_errors", port_stats.vport_stats.rx_invalid_frame_length),
> +	IDPF_PORT_STAT("tx-skb_drops", port_stats.tx_drops),
> +	IDPF_PORT_STAT("tx-dma_map_errs", port_stats.tx_dma_map_errs),
> +	IDPF_PORT_STAT("tx-linearized_pkts", port_stats.tx_linearize),
> +	IDPF_PORT_STAT("tx-busy_events", port_stats.tx_busy),
> +	IDPF_PORT_STAT("rx_bytes", port_stats.vport_stats.rx_bytes),
> +	IDPF_PORT_STAT("rx-unicast_pkts", port_stats.vport_stats.rx_unicast),
> +	IDPF_PORT_STAT("rx-multicast_pkts", port_stats.vport_stats.rx_multicast),
> +	IDPF_PORT_STAT("rx-broadcast_pkts", port_stats.vport_stats.rx_broadcast),

how are the basic stats different form the base stats reported via
if_link?

Also what's up with the mix of - and _ in the names?

> +	IDPF_PORT_STAT("rx-unknown_protocol", port_stats.vport_stats.rx_unknown_protocol),
> +	IDPF_PORT_STAT("tx_bytes", port_stats.vport_stats.tx_bytes),
> +	IDPF_PORT_STAT("tx-unicast_pkts", port_stats.vport_stats.tx_unicast),
> +	IDPF_PORT_STAT("tx-multicast_pkts", port_stats.vport_stats.tx_multicast),
> +	IDPF_PORT_STAT("tx-broadcast_pkts", port_stats.vport_stats.tx_broadcast),
> +	IDPF_PORT_STAT("tx_errors", port_stats.vport_stats.tx_errors),

> +static void idpf_add_stat_strings(u8 **p, const struct idpf_stats *stats,
> +				  const unsigned int size)
> +{
> +	unsigned int i;
> +
> +	for (i = 0; i < size; i++) {
> +		snprintf((char *)*p, ETH_GSTRING_LEN, "%.32s",
> +			 stats[i].stat_string);
> +		*p += ETH_GSTRING_LEN;

ethtool_sprintf()

> +	}
> +}

  reply	other threads:[~2023-08-18 18:58 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-16  0:42 [PATCH net-next v5 00/15][pull request] Introduce Intel IDPF driver Tony Nguyen
2023-08-16  0:42 ` [PATCH net-next v5 01/15] virtchnl: add virtchnl version 2 ops Tony Nguyen
2023-08-16  0:42 ` [PATCH net-next v5 02/15] idpf: add module register and probe functionality Tony Nguyen
2023-08-16  0:42 ` [PATCH net-next v5 03/15] idpf: add controlq init and reset checks Tony Nguyen
2023-08-16  0:42 ` [PATCH net-next v5 04/15] idpf: add core init and interrupt request Tony Nguyen
2023-08-16  0:42 ` [PATCH net-next v5 05/15] idpf: add create vport and netdev configuration Tony Nguyen
2023-08-16  0:42 ` [PATCH net-next v5 06/15] idpf: add ptypes and MAC filter support Tony Nguyen
2023-08-16  0:42 ` [PATCH net-next v5 07/15] idpf: configure resources for TX queues Tony Nguyen
2023-08-16  0:42 ` [PATCH net-next v5 08/15] idpf: configure resources for RX queues Tony Nguyen
2023-08-18  2:58   ` Jakub Kicinski
2023-08-18 17:36     ` Linga, Pavan Kumar
2023-08-16  0:42 ` [PATCH net-next v5 09/15] idpf: initialize interrupts and enable vport Tony Nguyen
2023-08-16  0:43 ` [PATCH net-next v5 10/15] idpf: add splitq start_xmit Tony Nguyen
2023-08-18 18:37   ` Jakub Kicinski
2023-08-21 20:42     ` Linga, Pavan Kumar
2023-08-16  0:43 ` [PATCH net-next v5 11/15] idpf: add TX splitq napi poll support Tony Nguyen
2023-08-18 18:42   ` Jakub Kicinski
2023-08-16  0:43 ` [PATCH net-next v5 12/15] idpf: add RX " Tony Nguyen
2023-08-18 18:46   ` Jakub Kicinski
2023-08-16  0:43 ` [PATCH net-next v5 13/15] idpf: add singleq start_xmit and napi poll Tony Nguyen
2023-08-18 18:47   ` Jakub Kicinski
2023-08-16  0:43 ` [PATCH net-next v5 14/15] idpf: add ethtool callbacks Tony Nguyen
2023-08-18 18:58   ` Jakub Kicinski [this message]
2023-08-18 22:42     ` Przemek Kitszel
2023-08-19  0:01       ` Jakub Kicinski
2023-08-21 20:41     ` Linga, Pavan Kumar
2023-08-21 21:02       ` Jakub Kicinski
2023-08-23 18:05         ` Linga, Pavan Kumar
2023-08-16  0:43 ` [PATCH net-next v5 15/15] idpf: configure SRIOV and add other ndo_ops Tony Nguyen
2023-08-18  3:02   ` Jakub Kicinski
2023-08-18 17:41     ` Linga, Pavan Kumar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230818115824.446d1ea7@kernel.org \
    --to=kuba@kernel.org \
    --cc=alan.brady@intel.com \
    --cc=alice.michael@intel.com \
    --cc=andrew@lunn.ch \
    --cc=anthony.l.nguyen@intel.com \
    --cc=davem@davemloft.net \
    --cc=decot@google.com \
    --cc=edumazet@google.com \
    --cc=emil.s.tantilov@intel.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=joshua.a.hay@intel.com \
    --cc=leon@kernel.org \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=pavan.kumar.linga@intel.com \
    --cc=phani.r.burra@intel.com \
    --cc=shannon.nelson@amd.com \
    --cc=shiraz.saleem@intel.com \
    --cc=simon.horman@corigine.com \
    --cc=sindhu.devale@intel.com \
    --cc=sridhar.samudrala@intel.com \
    --cc=stephen@networkplumber.org \
    --cc=willemb@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).