lkml.org 
[lkml]   [2021]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 25/88] iavf: Fix reporting when setting descriptor count
    Date
    From: Michal Maloszewski <michal.maloszewski@intel.com>

    commit 1a1aa356ddf3f16539f5962c01c5f702686dfc15 upstream.

    iavf_set_ringparams doesn't communicate to the user that

    1. The user requested descriptor count is out of range. Instead it
    just quietly sets descriptors to the "clamped" value and calls it
    done. This makes it look an invalid value was successfully set as
    the descriptor count when this isn't actually true.

    2. The user provided descriptor count needs to be inflated for alignment
    reasons.

    This behavior is confusing. The ice driver has already addressed this
    by rejecting invalid values for descriptor count and
    messaging for alignment adjustments.
    Do the same thing here by adding the error and info messages.

    Fixes: fbb7ddfef253 ("i40evf: core ethtool functionality")
    Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>
    Signed-off-by: Michal Maloszewski <michal.maloszewski@intel.com>
    Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 45 ++++++++++++++++++-------
    1 file changed, 33 insertions(+), 12 deletions(-)

    --- a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
    +++ b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c
    @@ -612,23 +612,44 @@ static int iavf_set_ringparam(struct net
    if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
    return -EINVAL;

    - new_tx_count = clamp_t(u32, ring->tx_pending,
    - IAVF_MIN_TXD,
    - IAVF_MAX_TXD);
    - new_tx_count = ALIGN(new_tx_count, IAVF_REQ_DESCRIPTOR_MULTIPLE);
    -
    - new_rx_count = clamp_t(u32, ring->rx_pending,
    - IAVF_MIN_RXD,
    - IAVF_MAX_RXD);
    - new_rx_count = ALIGN(new_rx_count, IAVF_REQ_DESCRIPTOR_MULTIPLE);
    + if (ring->tx_pending > IAVF_MAX_TXD ||
    + ring->tx_pending < IAVF_MIN_TXD ||
    + ring->rx_pending > IAVF_MAX_RXD ||
    + ring->rx_pending < IAVF_MIN_RXD) {
    + netdev_err(netdev, "Descriptors requested (Tx: %d / Rx: %d) out of range [%d-%d] (increment %d)\n",
    + ring->tx_pending, ring->rx_pending, IAVF_MIN_TXD,
    + IAVF_MAX_RXD, IAVF_REQ_DESCRIPTOR_MULTIPLE);
    + return -EINVAL;
    + }
    +
    + new_tx_count = ALIGN(ring->tx_pending, IAVF_REQ_DESCRIPTOR_MULTIPLE);
    + if (new_tx_count != ring->tx_pending)
    + netdev_info(netdev, "Requested Tx descriptor count rounded up to %d\n",
    + new_tx_count);
    +
    + new_rx_count = ALIGN(ring->rx_pending, IAVF_REQ_DESCRIPTOR_MULTIPLE);
    + if (new_rx_count != ring->rx_pending)
    + netdev_info(netdev, "Requested Rx descriptor count rounded up to %d\n",
    + new_rx_count);

    /* if nothing to do return success */
    if ((new_tx_count == adapter->tx_desc_count) &&
    - (new_rx_count == adapter->rx_desc_count))
    + (new_rx_count == adapter->rx_desc_count)) {
    + netdev_dbg(netdev, "Nothing to change, descriptor count is same as requested\n");
    return 0;
    + }
    +
    + if (new_tx_count != adapter->tx_desc_count) {
    + netdev_dbg(netdev, "Changing Tx descriptor count from %d to %d\n",
    + adapter->tx_desc_count, new_tx_count);
    + adapter->tx_desc_count = new_tx_count;
    + }

    - adapter->tx_desc_count = new_tx_count;
    - adapter->rx_desc_count = new_rx_count;
    + if (new_rx_count != adapter->rx_desc_count) {
    + netdev_dbg(netdev, "Changing Rx descriptor count from %d to %d\n",
    + adapter->rx_desc_count, new_rx_count);
    + adapter->rx_desc_count = new_rx_count;
    + }

    if (netif_running(netdev)) {
    adapter->flags |= IAVF_FLAG_RESET_NEEDED;

    \
     
     \ /
      Last update: 2021-12-13 11:25    [W:4.035 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site