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()
> + }
> +}
next prev parent 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).