From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A5AD6A0548; Thu, 4 Nov 2021 12:27:28 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 812EC42701; Thu, 4 Nov 2021 12:27:14 +0100 (CET) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2055.outbound.protection.outlook.com [40.107.220.55]) by mails.dpdk.org (Postfix) with ESMTP id D7E72426FC for ; Thu, 4 Nov 2021 12:27:12 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RE2Zp2iE9cNn6q22QIVyjulRJv3DH/rYfermJ7HkG5nX8zfhQ69qn+TY26/m/+kle9yXd76eIMpfLJ9oB41QlL/EKK8ql1ZWl0+EeX1N2FebiNC4/GkOw6JctBqbFtL+0THig1U4KoLg5rxTvuiWPs4RBx8++ZkTZgKbhtCUteuQJwknt3mPHWoOi62v95mDVu9/ZyqHywH1uylxY81s2sZ1nHYw5B+7EWKszYjOMroG8gYEE58z+u5E4w/9LdLNJX9rBaMp35E9kNUuNsOOpsjv26K7Ud2S2UkAMWbW9hL+HI3VajMUXLohSWAqDGu1YdWPoK0NLiFjy8V9iIr/FQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Ib/pGvZf903M+a9UcMlMUe9qds31akUUEkD9kTtUBSI=; b=R54esJ5lZKORiy204qroEGzHiNUCZvlYBvvRtz5xzsW7pkK6EMmpyOzf8bQc6k15C//+rdMJjtqgNlJTggY44Ol1MrvP6c1LvZ/TngwqIK8QiwC2NmXUxSlOg18ImYjh3hxf5W/HWCeZWWNjJxils8csV4eMaCdc57hEFlmpSYKO1qkGXHCzGn8XEwlhq7JUSDwTQOt7FwGIitcSRqGIbopLd4a+R/G3d6IAPRtGRPBVgwQN8WrZq+m7fFKKgsX8svaP/dYL/jsDmmBsY8w5z8d8h9B0J3Y0Ow0ORuYMbuoblJZgkslum76V5+ueaj3rYBnaTaQxihznXOjH+0dVjw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ib/pGvZf903M+a9UcMlMUe9qds31akUUEkD9kTtUBSI=; b=qFfcM8RFhF8IS7uRDJZW3931cZFR5ozXs1YyCNn+U30m4ZTQtkxqkwHbJPAxATQ8tmEzAJH09GZYT7ptIpPB5rCmRLwssjMC0TN842sNeo92EShiP4wmKacfQwfiNLGe7k8u+YprD6WXjmfdM4T7t3HqzerIy1OoW5eLMSAJHYX8oq4f2904RJuGhXNT18wgxbn0sQde4AXcqGUDmc+qw8aJ/NK/8yEXdG5xjI2GZNuUmyq0W5VqTQGEOvygxDXOTZSUP+Fe0gZRHzc9mcAwYJzTovhjb8SPR9wpbtL1f2sNsIV+48iUu3FVFPLbJOWFAjfOlMRlSJSjIbgzPM6/eg== Received: from MWHPR21CA0041.namprd21.prod.outlook.com (2603:10b6:300:129::27) by MW3PR12MB4393.namprd12.prod.outlook.com (2603:10b6:303:2c::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.15; Thu, 4 Nov 2021 11:27:10 +0000 Received: from CO1NAM11FT052.eop-nam11.prod.protection.outlook.com (2603:10b6:300:129:cafe::88) by MWHPR21CA0041.outlook.office365.com (2603:10b6:300:129::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4690.0 via Frontend Transport; Thu, 4 Nov 2021 11:27:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; monjalon.net; dkim=none (message not signed) header.d=none;monjalon.net; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT052.mail.protection.outlook.com (10.13.174.225) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4669.10 via Frontend Transport; Thu, 4 Nov 2021 11:27:09 +0000 Received: from nvidia.com (172.20.187.5) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Thu, 4 Nov 2021 11:27:07 +0000 From: Bing Zhao To: , CC: , , , Date: Thu, 4 Nov 2021 13:26:43 +0200 Message-ID: <20211104112644.17278-4-bingz@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20211104112644.17278-1-bingz@nvidia.com> References: <20211104112644.17278-1-bingz@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [172.20.187.5] X-ClientProxiedBy: HQMAIL101.nvidia.com (172.20.187.10) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 36c83fcc-ae64-4d05-331b-08d99f860a8e X-MS-TrafficTypeDiagnostic: MW3PR12MB4393: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7qk627OhiDC9yhb32YPpT5JR6zqDdmKRv2U9MBxvdz8KyATJIV+SP/pxxfkmrBR4UKyCEPPR/PIzF2PFqRoVPYt5tqLa5QpyMOR7sf6CAvbVrKLZ0cOc8OuAz5pTWxYsNE7VK718BqKVyWvqOe/op0H9GL3YEJIw8LhCcs8M6LBIUia/Et1ciZhJOb9g8IKzasvs25645hL4+mJwze5ncjFkoXD+pA8SuBSYsiSAP8wD9L68foH4kAmTZFsM/W0aynQI3xgBad8hYu20NIdyQEE2uamBtTu7wiBWIMsUG1jEQeS1ck0J1AQ0QuU+jk+tctlS2Xao1MLktggErLA00X3+FCfK92o/ymPre7PKIXqZe7NEpz/NDR9g19F5gsZ5DSw5Z05fK1yx4VylsGH1qhw5Qd4eO40gwloB3QW703Rl4uKkpVUj9/rJFIurooSyxwS1pL8dBuxuUqfvD6UHIGED9raKjrHLFcHPlqSSP8VZgiF+UUF1Siw5BzHgax29udT99FQscXiWkl8fxjCBpMXOB2YasXvS4E9wCifsNkjCHOZLnD2eqHJpmBHdwfCoqd2Cs2PPOULkWU8plg9d39rBa6EnzXkdQBtSSC/kP68FFUsaZrZbawYuWk95uvgn8wISgLMmyrT82KLElA8YVkipcgjvJa8AelQ/PP4RRFhjDjfN3FP3unt2UR02Q3yCDfScwaLAi0GAyHq9RwxmFw== X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(5660300002)(26005)(2906002)(356005)(70206006)(6286002)(16526019)(8676002)(36860700001)(6636002)(55016002)(70586007)(508600001)(110136005)(107886003)(4326008)(186003)(7636003)(86362001)(1076003)(2616005)(426003)(316002)(54906003)(82310400003)(8936002)(7696005)(83380400001)(336012)(36756003)(47076005)(6666004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2021 11:27:09.8912 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 36c83fcc-ae64-4d05-331b-08d99f860a8e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT052.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR12MB4393 Subject: [dpdk-dev] [PATCH 3/4] net/mlx5: support querying delay drop status via ethtool X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" The delay drop is global per PF device and the kernel driver is taking care of the initialization and rearming. By default, the timeout value is set to activate the delay drop when the driver is loaded. A private flag "dropless_rq" is used to control the rearming. Only when it is on, the rearming will be handled once received a timeout event. Or else, the delay drop will be deactived after the first timeout and all the Rx queues won't have this feature. The PMD is trying to query this flag and warn the application when some queues are created with delay drop but the flag is off. Signed-off-by: Bing Zhao --- drivers/net/mlx5/linux/mlx5_ethdev_os.c | 113 ++++++++++++++++++++++++ drivers/net/mlx5/mlx5.h | 1 + drivers/net/mlx5/mlx5_trigger.c | 10 +++ 3 files changed, 124 insertions(+) diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c index 9d0e491d0c..9255877dab 100644 --- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c +++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c @@ -1630,3 +1630,116 @@ mlx5_get_mac(struct rte_eth_dev *dev, uint8_t (*mac)[RTE_ETHER_ADDR_LEN]) memcpy(mac, request.ifr_hwaddr.sa_data, RTE_ETHER_ADDR_LEN); return 0; } + +/* + * Query dropless_rq private flag provided by ETHTOOL. + * + * @param dev + * Pointer to Ethernet device. + * + * @return + * 0 on success, negative errno value otherwise and rte_errno is set. + */ +int mlx5_get_flag_dropless_rq(struct rte_eth_dev *dev) +{ + struct { + struct ethtool_sset_info hdr; + uint32_t buf[1]; + } sset_info; + struct ethtool_drvinfo drvinfo; + struct ifreq ifr; + struct ethtool_gstrings *strings = NULL; + struct ethtool_value flags; + int32_t str_sz; + int32_t len; + int32_t i; + int ret; + + sset_info.hdr.cmd = ETHTOOL_GSSET_INFO; + sset_info.hdr.reserved = 0; + sset_info.hdr.sset_mask = 1ULL << ETH_SS_PRIV_FLAGS; + ifr.ifr_data = (caddr_t)&sset_info; + ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr); + if (!ret) { + const uint32_t *sset_lengths = sset_info.hdr.data; + + len = sset_info.hdr.sset_mask ? sset_lengths[0] : 0; + } else if (ret == -EOPNOTSUPP) { + drvinfo.cmd = ETHTOOL_GDRVINFO; + ifr.ifr_data = (caddr_t)&drvinfo; + ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr); + if (ret) { + DRV_LOG(WARNING, "port %u cannot get the driver info", + dev->data->port_id); + goto exit; + } + len = *(uint32_t *)((char *)&drvinfo + + offsetof(struct ethtool_drvinfo, n_priv_flags)); + } else { + DRV_LOG(WARNING, "port %u cannot get the sset info", + dev->data->port_id); + goto exit; + } + if (!len) { + DRV_LOG(WARNING, "port %u does not have private flag", + dev->data->port_id); + rte_errno = EOPNOTSUPP; + ret = -rte_errno; + goto exit; + } else if (len > 32) { + DRV_LOG(WARNING, "port %u maximal private flags number is 32", + dev->data->port_id); + len = 32; + } + str_sz = ETH_GSTRING_LEN * len; + strings = (struct ethtool_gstrings *) + mlx5_malloc(0, str_sz + sizeof(struct ethtool_gstrings), 0, + SOCKET_ID_ANY); + if (!strings) { + DRV_LOG(WARNING, "port %u unable to allocate memory for" + " private flags", dev->data->port_id); + rte_errno = ENOMEM; + ret = -rte_errno; + goto exit; + } + strings->cmd = ETHTOOL_GSTRINGS; + strings->string_set = ETH_SS_PRIV_FLAGS; + strings->len = len; + ifr.ifr_data = (caddr_t)strings; + ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr); + if (ret) { + DRV_LOG(WARNING, "port %u unable to get private flags strings", + dev->data->port_id); + goto exit; + } + for (i = 0; i < len; i++) { + strings->data[(i + 1) * ETH_GSTRING_LEN - 1] = 0; + if (!strcmp((const char *)strings->data + i * ETH_GSTRING_LEN, + "dropless_rq")) + break; + } + if (i == len) { + DRV_LOG(WARNING, "port %u does not support dropless_rq", + dev->data->port_id); + rte_errno = EOPNOTSUPP; + ret = -rte_errno; + goto exit; + } + flags.cmd = ETHTOOL_GPFLAGS; + ifr.ifr_data = (caddr_t)&flags; + ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr); + if (ret) { + DRV_LOG(WARNING, "port %u unable to get private flags status", + dev->data->port_id); + goto exit; + } + if (!(flags.data & (1U << i))) + DRV_LOG(WARNING, "port %u dropless_rq flag is off, no rearming", + dev->data->port_id); + else + DRV_LOG(DEBUG, "port %u support dropless_rq with rearming", + dev->data->port_id); +exit: + mlx5_free(strings); + return ret; +} diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 8d32d55c9a..e0f40ce31a 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -1599,6 +1599,7 @@ int mlx5_os_read_dev_stat(struct mlx5_priv *priv, int mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats); int mlx5_os_get_stats_n(struct rte_eth_dev *dev); void mlx5_os_stats_init(struct rte_eth_dev *dev); +int mlx5_get_flag_dropless_rq(struct rte_eth_dev *dev); /* mlx5_mac.c */ diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index ebeeae279e..2644855483 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -1126,6 +1126,16 @@ mlx5_dev_start(struct rte_eth_dev *dev) dev->data->port_id, strerror(rte_errno)); goto error; } + if (priv->config.std_delay_drop || priv->config.hp_delay_drop) { + if (!priv->config.vf && !priv->config.sf && + !priv->representor) { + (void)mlx5_get_flag_dropless_rq(dev); + } else { + DRV_LOG(INFO, + "port %u doesn't support dropless_rq flag", + dev->data->port_id); + } + } ret = mlx5_rxq_start(dev); if (ret) { DRV_LOG(ERR, "port %u Rx queue allocation failed: %s", -- 2.27.0