From patchwork Fri Nov 30 19:29:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Ryzhov X-Patchwork-Id: 48453 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9723B1B5B7; Fri, 30 Nov 2018 20:29:53 +0100 (CET) Received: from mail-lf1-f68.google.com (mail-lf1-f68.google.com [209.85.167.68]) by dpdk.org (Postfix) with ESMTP id 3C8CF1B55C for ; Fri, 30 Nov 2018 20:29:52 +0100 (CET) Received: by mail-lf1-f68.google.com with SMTP id e26so4945731lfc.2 for ; Fri, 30 Nov 2018 11:29:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nfware-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=HBHRwgbjcNDeSYAjseK2vGZ43oZ+Wa0OCHAACrYKBY8=; b=toPuNS4tVGymUqET2gZIKwet4+z90vWOx87QPB4LsIKqAFeho1NNgqe+S+qvy/gP7P mfF21tMDVo/jZYX+g/PbgmnRpUf/HgyW6S5tuWF1TAYMOt6HeSUXuXw4UrR5pO6yZLqn 5txFDMDt7GQdRqx11XltKE/TeDQfX5ZnWluVfgJDx8oHIq9pKalvJjJAWtSiz177OMl9 7AZlWUe5I7+sELeMXr6oHiP+VZvftepFlOsvoA09QFGycnfjrNoT4Tig98XY/XqcpJ4Q gbjqz8BeOuNO4HJagsrhbjcjZ17aIzieN86QguBFw2TWrjKYCyfYW99/gPDYuEwUA+kI eoXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=HBHRwgbjcNDeSYAjseK2vGZ43oZ+Wa0OCHAACrYKBY8=; b=Z4su1un8LCJRk6odtvl2SGjB8CqeNBF5Yv3AGphkjt3j6/BNVmXIGjag1y1eIn9mqc wFXjasfSsegc1mUjdV/rvSxp+vTCP2Hw+Emv8P3TRRU4KiJ2wjAyQvrm8LS6SDUKH1tV 4qNBJrj+pZDe4qgFfV48H/XCO+kybPTHArSxPdwHF34Ep6MhnT1O+/wDoNo9YT/sgtiX rdNqVGmyQ1JJgz/vApvChbPMD+0R07DIF0vw8ATEku3Gi2diCApZc0keJuiytXI259pL REARdvQIn73s3znNXiFiI1jzK0gtAFjvVyOEajqU/yzDUuERzeXCI9jzqufgdJD8+5cO uthg== X-Gm-Message-State: AA+aEWb83bLpZZAxrFlOtUhYPnCjel6xb7I87WErZqUcF7dmR/njE4Qo ADpuNEa08byaMkvTeGjT9S4Oa0xVGPA= X-Google-Smtp-Source: AFSGD/UgfUp6qY2S9iVqchK0i5sXkYqVGDcA3z4fIcTa6iBC13cuXyUJJg4+kiWVNv4S5vBG+XEnTA== X-Received: by 2002:a19:c18d:: with SMTP id r135mr4098221lff.59.1543606191203; Fri, 30 Nov 2018 11:29:51 -0800 (PST) Received: from localhost.localdomain ([212.48.63.198]) by smtp.gmail.com with ESMTPSA id t144sm929842lff.53.2018.11.30.11.29.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Nov 2018 11:29:50 -0800 (PST) From: Igor Ryzhov To: dev@dpdk.org Date: Fri, 30 Nov 2018 22:29:46 +0300 Message-Id: <20181130192946.13732-1-iryzhov@nfware.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH] kni: use kni_ethtool_ops only with unknown drivers X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Current implementation of kni_ethtool_ops just uses corresponding ethtool_ops function of underlying driver for all functions except for .get_link. This commit sets kni->net_dev->ethtool_ops directly to the ethtool_ops of the corresponding driver. For unknown drivers (all but ixgbe and i40e) we still use kni_ethtool_ops with implemented .get_link function. Signed-off-by: Igor Ryzhov --- kernel/linux/kni/Makefile | 2 +- kernel/linux/kni/kni_ethtool.c | 210 --------------------------------- kernel/linux/kni/kni_misc.c | 6 +- 3 files changed, 6 insertions(+), 212 deletions(-) diff --git a/kernel/linux/kni/Makefile b/kernel/linux/kni/Makefile index 282be7b68..ee5e1e136 100644 --- a/kernel/linux/kni/Makefile +++ b/kernel/linux/kni/Makefile @@ -30,7 +30,7 @@ endif # SRCS-y := kni_misc.c SRCS-y += kni_net.c -SRCS-$(CONFIG_RTE_KNI_KMOD_ETHTOOL) += kni_ethtool.c +SRCS-y += kni_ethtool.c SRCS-$(CONFIG_RTE_KNI_KMOD_ETHTOOL) += ethtool/ixgbe/ixgbe_main.c SRCS-$(CONFIG_RTE_KNI_KMOD_ETHTOOL) += ethtool/ixgbe/ixgbe_api.c diff --git a/kernel/linux/kni/kni_ethtool.c b/kernel/linux/kni/kni_ethtool.c index b1c84f8f0..ccfd58ef0 100644 --- a/kernel/linux/kni/kni_ethtool.c +++ b/kernel/linux/kni/kni_ethtool.c @@ -8,218 +8,8 @@ #include #include "kni_dev.h" -static int -kni_check_if_running(struct net_device *dev) -{ - struct kni_dev *priv = netdev_priv(dev); - - if (priv->lad_dev) - return 0; - else - return -EOPNOTSUPP; -} - -static void -kni_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) -{ - struct kni_dev *priv = netdev_priv(dev); - - priv->lad_dev->ethtool_ops->get_drvinfo(priv->lad_dev, info); -} - -/* ETHTOOL_GLINKSETTINGS replaces ETHTOOL_GSET */ -#ifndef ETHTOOL_GLINKSETTINGS -static int -kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->get_settings(priv->lad_dev, ecmd); -} -#endif - -/* ETHTOOL_SLINKSETTINGS replaces ETHTOOL_SSET */ -#ifndef ETHTOOL_SLINKSETTINGS -static int -kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->set_settings(priv->lad_dev, ecmd); -} -#endif - -static void -kni_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) -{ - struct kni_dev *priv = netdev_priv(dev); - - priv->lad_dev->ethtool_ops->get_wol(priv->lad_dev, wol); -} - -static int -kni_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->set_wol(priv->lad_dev, wol); -} - -static int -kni_nway_reset(struct net_device *dev) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->nway_reset(priv->lad_dev); -} - -static int -kni_get_eeprom_len(struct net_device *dev) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->get_eeprom_len(priv->lad_dev); -} - -static int -kni_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, - u8 *bytes) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->get_eeprom(priv->lad_dev, eeprom, - bytes); -} - -static int -kni_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, - u8 *bytes) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->set_eeprom(priv->lad_dev, eeprom, - bytes); -} - -static void -kni_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring) -{ - struct kni_dev *priv = netdev_priv(dev); - - priv->lad_dev->ethtool_ops->get_ringparam(priv->lad_dev, ring); -} - -static int -kni_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->set_ringparam(priv->lad_dev, ring); -} - -static void -kni_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause) -{ - struct kni_dev *priv = netdev_priv(dev); - - priv->lad_dev->ethtool_ops->get_pauseparam(priv->lad_dev, pause); -} - -static int -kni_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->set_pauseparam(priv->lad_dev, - pause); -} - -static u32 -kni_get_msglevel(struct net_device *dev) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->get_msglevel(priv->lad_dev); -} - -static void -kni_set_msglevel(struct net_device *dev, u32 data) -{ - struct kni_dev *priv = netdev_priv(dev); - - priv->lad_dev->ethtool_ops->set_msglevel(priv->lad_dev, data); -} - -static int -kni_get_regs_len(struct net_device *dev) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->get_regs_len(priv->lad_dev); -} - -static void -kni_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p) -{ - struct kni_dev *priv = netdev_priv(dev); - - priv->lad_dev->ethtool_ops->get_regs(priv->lad_dev, regs, p); -} - -static void -kni_get_strings(struct net_device *dev, u32 stringset, u8 *data) -{ - struct kni_dev *priv = netdev_priv(dev); - - priv->lad_dev->ethtool_ops->get_strings(priv->lad_dev, stringset, - data); -} - -static int -kni_get_sset_count(struct net_device *dev, int sset) -{ - struct kni_dev *priv = netdev_priv(dev); - - return priv->lad_dev->ethtool_ops->get_sset_count(priv->lad_dev, sset); -} - -static void -kni_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, - u64 *data) -{ - struct kni_dev *priv = netdev_priv(dev); - - priv->lad_dev->ethtool_ops->get_ethtool_stats(priv->lad_dev, stats, - data); -} - struct ethtool_ops kni_ethtool_ops = { - .begin = kni_check_if_running, - .get_drvinfo = kni_get_drvinfo, -#ifndef ETHTOOL_GLINKSETTINGS - .get_settings = kni_get_settings, -#endif -#ifndef ETHTOOL_SLINKSETTINGS - .set_settings = kni_set_settings, -#endif - .get_regs_len = kni_get_regs_len, - .get_regs = kni_get_regs, - .get_wol = kni_get_wol, - .set_wol = kni_set_wol, - .nway_reset = kni_nway_reset, .get_link = ethtool_op_get_link, - .get_eeprom_len = kni_get_eeprom_len, - .get_eeprom = kni_get_eeprom, - .set_eeprom = kni_set_eeprom, - .get_ringparam = kni_get_ringparam, - .set_ringparam = kni_set_ringparam, - .get_pauseparam = kni_get_pauseparam, - .set_pauseparam = kni_set_pauseparam, - .get_msglevel = kni_get_msglevel, - .set_msglevel = kni_set_msglevel, - .get_strings = kni_get_strings, - .get_sset_count = kni_get_sset_count, - .get_ethtool_stats = kni_get_ethtool_stats, }; void diff --git a/kernel/linux/kni/kni_misc.c b/kernel/linux/kni/kni_misc.c index 522ae23b9..1c4223185 100644 --- a/kernel/linux/kni/kni_misc.c +++ b/kernel/linux/kni/kni_misc.c @@ -426,7 +426,7 @@ kni_ioctl_create(struct net *net, uint32_t ioctl_num, pci, lad_dev); if (ret == 0) { kni->lad_dev = lad_dev; - kni_set_ethtool_ops(kni->net_dev); + kni->net_dev->ethtool_ops = lad_dev->ethtool_ops; } else { pr_err("Device not supported by ethtool"); kni->lad_dev = NULL; @@ -443,6 +443,10 @@ kni_ioctl_create(struct net *net, uint32_t ioctl_num, pci_dev_put(pci); #endif + if (!kni->net_dev->ethtool_ops) { + kni_set_ethtool_ops(kni->net_dev); + } + if (kni->lad_dev) ether_addr_copy(net_dev->dev_addr, kni->lad_dev->dev_addr); else {