From patchwork Wed Aug 30 07:11:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shijith Thotton X-Patchwork-Id: 28077 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 2B3822BAF; Wed, 30 Aug 2017 09:12:25 +0200 (CEST) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0045.outbound.protection.outlook.com [104.47.38.45]) by dpdk.org (Postfix) with ESMTP id C0DD311D4 for ; Wed, 30 Aug 2017 09:12:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=DMYP3NPWPwFCOQFlIdDb6R8lTIiX5cYT4vI2Wd7O9s4=; b=YPi1DiFymF7DwUlw7q48baywDBsesuZoYfqcQLLcggnmJmveAf4W/H3zB6IwyUPEFgwGyNkntOkr/gJ2OCYW63n9SKuYkxTTPsXNKHYggCgPT0Xmy7+qn0vcMQS9Qqqkm4JIrDSdJpyzbL+G5Ps9zI3yYb/O+NRbcm8qig0KOXs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Shijith.Thotton@cavium.com; Received: from lio357.in.caveonetworks.com (14.140.2.178) by DM5PR07MB3066.namprd07.prod.outlook.com (10.172.88.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10; Wed, 30 Aug 2017 07:12:20 +0000 From: Shijith Thotton To: dev@dpdk.org Cc: Ferruh Yigit Date: Wed, 30 Aug 2017 12:41:58 +0530 Message-Id: <1504077118-11559-1-git-send-email-shijith.thotton@caviumnetworks.com> X-Mailer: git-send-email 1.8.3.1 MIME-Version: 1.0 X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: PN1PR01CA0098.INDPRD01.PROD.OUTLOOK.COM (10.174.144.14) To DM5PR07MB3066.namprd07.prod.outlook.com (10.172.88.140) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 95d58860-c46d-432d-cfe5-08d4ef7674e0 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DM5PR07MB3066; X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3066; 3:lmm6lubfDIG3mTm3oza66gOQG0FRtdzo7n85Huzoc0HA25+e5UpI8RuF7dMQcHpdVaxAOVLPkKG5Dzqp3NL8HCq5aEgntc2l42YE/zU+BLV/BS85kUpBuzCES6ggfVlki3MKXVPtszFM6RDg3emuKaOV3dnABQF6UGU0kRGz8XKfkmUQUjl9CA4Qad2TOrI9z5LMrxXgriP9ziquhBIkNEQK0kzNNMb5A1+sx7+V3hEbfrw7Erh6EB6/WsHVkoBq; 25:as232a6clY8cmDOD5w3/CvWW3Q1L/atfXj110f+tXH3V6BIZMtNxYGP8vCYLhGLND35r04L7NwBIB/lpC/akazM8nisSxsrPyUmhITxW13BBtHwxPnXVRXxJkEHOwIt1sjPGqXL09/Rve5U4gV1DEDpQCCQyM+9u7ahYOZ5l0yXimqC7bqAprltk19BQ2QRUF3I6Vra5FRXd2a+tfQ4umQxLch0LbAAjCnInIPo37GmP9MaQI4tKvHqfbJj7tCzl35xnT28KCnkE2gcSfWdHOVJAx/auZ4LULCv5miVC9tWsCr1qs6zka9Z2ecpD8r/6GB6H3UNF27lcxAps5juUSg==; 31:Ar2tV7rE33tuD94o54tPmiR+qXRsQl4M1byfMxWvgKXj19LOTze2ZJAQawouXyzQSZZxh3EZ3les9XRjRY/pPLz+4LVFMYtYC8ROVucV97OtnAeF4I06O12/f2TlErGI5EMDwhu4LXdV5+Txlbd9UTpe5CO1kG/shS8RjsWBhTDY3E/776z0ABeRrIauWtouGImYwH43AwvGIfayN0mTcSla4i3TOWYk6wIW3pY7V2g= X-MS-TrafficTypeDiagnostic: DM5PR07MB3066: X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3066; 20:ZbcXdqY/xRoe6RG7amhjTO19dB5GgNwGExhlJ/nX3z5j558BDOU9eUEVZsTOmHLVSOOS2qCvNtzk9LCFnqP0HjBeO+CIGjV+GOecCJGAbmjTsay3xHGqla13E9X2wJCK3bOpwHaKCJDV4aleeBsT4hdbnbgZprYers1rJc8/4e2hAOSPtL9/ePJoPiNqw63IGQ6yJofvb+bGhjM5cKgpj51xgdu/NPa1AtdzCVp9aY4TpjbERbuBdpe4tHXss+FzfQlqFZ+d5L8jbzu6gREHgLit1tk9fePpiGhnlcfpCVCjKinpReQS1OcdzrKGwM9HnFUHAOCVWQuliyGc+q2GAbMO+5nihGvb4/Eb74jvvVUD22XH0fP4riUZXbj10i4GdYH5ltoWDBKnoTsxyhQtsNHYjTVaC60eUwtkZr0zua/aghTwRTe01OY8kc1eXDmhd9KmytXuurZmMzwBJWlZGopyaSDNBU8fsoyVR+MD/kZwIeNWWx/p3Nei9E+UyB3fixVEpi+RuX5yvQuXtMzAOoNfEK26psnBLdE8HdOIHfC7eDRd/TeegvRBeDd0xTkbH9IBsaAnhDbwt2bLiyhQ9GrO59XcRC9AHEVWN7GqrD0=; 4:AAZUw6XzVABQ7juZclipWtPEf0Vf+Gi9T2TDz9H0Z9dMUsoCJgg3CA4jGjBJ1KzjeqcMQlYmLYr+qnQ0SFo5vuunXvnCPyHCur1EfDU4UH+jLZ8p0nyN0ZR7qwAY2xtVCFyS0HJaIKb2sF2c34pqnXvzyPqOY4URIurnhHIruCoMaPVSIpH3ognll4xCLVG6upeAZE8Iw3fRHX69kdDvvVXasRvk8rpPe5XfKhgwZ4SIWcg3vNabrk4rwND0J5fD X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(10201501046)(93006095)(3002001)(6041248)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123562025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR07MB3066; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR07MB3066; X-Forefront-PRVS: 041517DFAB X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(199003)(189002)(25786009)(6666003)(4720700003)(8676002)(6506006)(6486002)(5009440100003)(4326008)(42186005)(110136004)(42882006)(53936002)(6916009)(5660300001)(189998001)(97736004)(47776003)(81156014)(81166006)(478600001)(101416001)(305945005)(50466002)(2906002)(33646002)(7736002)(48376002)(68736007)(2351001)(105586002)(50986999)(6512007)(2361001)(66066001)(50226002)(106356001)(3846002)(36756003)(6116002)(72206003)(8936002)(5003940100001)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3066; H:lio357.in.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR07MB3066; 23:k04cAopO8FB8E9xFrVR0QlrzJOQHYH6DoraetLEyS?= T7EzIz6Slwmac9PKvvgSnDPCnbNYEx3HQdqsDfmsoT6Wh+UQEsfgVrpFkaEGlkVXupJHJJyB4lNGF7gT7Cu6KlRTgwE+9WGF3PFTWL+RC79VKZz28KZoWURebe6YclsQA+UL4NIgLl55N7qZ2A90NqTpiz3yAj0hmSOVagP8X8lPg58MWSMsGqAtPX6kH44t2zS8GrfxEOpxSLgfb+uoXDIMpvsVP8Zt9mG4qQE4iUkC+xKKFeOIF+A/fjaaoG/nmCpPioESpyCU2v793fzbw4McnWOsPCgXIMVm9WGaUuDEHA/cpnCVW+H4LSgbI7+8zN3XyhqWJzfswY6+jXtO7x7KVZ+/qItABqgRA0CFoJHklkAJ8Udq9ghHI+F4F6CJfw+wjSEyWL2mNhV2BMHiK+rLzaD6M4go8DZTcv/Nopph1QgbzCvfD5UvURW2t/KvFUzx8X5yvgMU1YJRLsiBms3X7f03QY2qPL6owTNTlNuBoKrnAM2OOy3rcr3Akpa3OEEt0x0kmQlo+FVGRtNBsrE+pQyaMrT0GbqmP7Si4L0KV01elxFadzfRbpxtfGEQdz2r+AWsmBVcLfUwzwh/vlt4CvLkjoglDuvMHWL3J9kXbLldDDZWvMjE12ilqh+rdb62pObibGyv9sLG4nDLXTYCBxpI7EIJYyZJjErZ9sAZghS9ukP7PMPOwdBypFbSckqksetDROq78VmifmZWWqsWQIWCcqEOTpb1NQFHJpJy4jlSBrOgjKAwmiwrwr8MZRe4E5soYLkAn4q9sjVTYYRLNSfCwHqQfRWR4Tq4QZ9cQj+GTmF0oS6drsYZicGG05saiEwVUG3u4Gm5hoIhlnYXF0pibT4S71NawWQjK8dh0otl4xQcqQaOrjRM/rat/hqwDTJn1ik1XjMc0GDOLUOhaQtsOEGvPKCMeU/G58q03Oyn6zDKt7xuvz0btBg35WEj3zijg/oWflsgbl8WdA9HyaJLC8wk8DVyv39g04FUw6AyiQeFAprN4wjHMuC+2pKHzMdGmSosn7yYimBkcDOkrjvfAy29fFxTQflSHn0O4fU8J0IzcDGeC4AixpbbaU= X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3066; 6:R8J/Rm8DYhP9OogTBkZPiZcwunoHwiR40ZNkTvQvhbSkKXNYEGtM84WiqA55OEHSiLNe5rRxJPSZCNIhy3XG9eg+GX8lDEURDHv4nz4ghOF4uPWSBOhAogogVmMP4S5yVxCBT/vNjfpmQEFg3B8AhRCJv4EG690kd5mXO2REVK9aAALOS25+TQuXFl6nibemoO5848OB3MkLJ/IXuvPs/1OnNqnQEUBlVe3a75oZ8q5NqROOYJJesDKuwDHWpxagO+axBd3qNZA4a6YNpnYOqUHZmzRspUMlf6IBpS30zP++B2O2dLgH1qTYGQuJnF756z59125RfhnItJjNFtAhhQ==; 5:e5pfVQSWy/58KEFBAAp2ArnVEVcLT0qsy5+bxKfdB9DmDJzUlNrW9rVG3G/elYDaUg0JePda1xy6zvmNFZC6ps+0/WRma6I8L6/R5L0phEG4/sasoD2SOyDTtJitVdXvWu42lIi6k5fp4tS+oxEnJw==; 24:0hgpYLllp76U+xNThry1sLvm3e1UjNRSm2UbhYJsKoFFaws+VC+cqxuFG+3IJW87ZPCGPCazPxxX86VFyhVygJe+dFDTrtl5+5zl2V5VbXU=; 7:7u020kNq2/ILMwJ7INViloW3XAVb1AnKQ5v2Tix1lOGUSfWjGTganbnyVKaxYxD8fEG7EIUXD6cqOOcpsDYgKkovmPCw/l082+mMOzcDckhqkl8HqWkFNFi1Sciy8Zw1U0Wi+Pc+xyjiL95oQ0B/wI5O17p9uMMJJs4F3UKEbwUUOl/DuuPZKDSXppHo5eMmwAAp3VvaRXSZkSOO0nlDI5bbvyXI2GXgypUFcXqMn2Y= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Aug 2017 07:12:20.0277 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR07MB3066 Subject: [dpdk-dev] [PATCH] net/liquidio: add API to set MTU 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" Support MTU change in the range ETHER_MIN_MTU to PF_MTU. A drop in PF MTU lowers VF MTU if it goes out of range. Signed-off-by: Shijith Thotton --- doc/guides/nics/features/liquidio.ini | 1 + drivers/net/liquidio/base/lio_hw_defs.h | 1 + drivers/net/liquidio/lio_ethdev.c | 88 ++++++++++++++++++++++----------- 3 files changed, 60 insertions(+), 30 deletions(-) diff --git a/doc/guides/nics/features/liquidio.ini b/doc/guides/nics/features/liquidio.ini index 3bea03a..d673d7a 100644 --- a/doc/guides/nics/features/liquidio.ini +++ b/doc/guides/nics/features/liquidio.ini @@ -7,6 +7,7 @@ Speed capabilities = Y Link status = Y Link status event = Y +MTU update = Y Jumbo frame = Y Scattered Rx = Y Allmulticast mode = Y diff --git a/drivers/net/liquidio/base/lio_hw_defs.h b/drivers/net/liquidio/base/lio_hw_defs.h index de58c7c..8713519 100644 --- a/drivers/net/liquidio/base/lio_hw_defs.h +++ b/drivers/net/liquidio/base/lio_hw_defs.h @@ -137,6 +137,7 @@ enum octeon_tag_type { #define LIO_MAX_RX_PKTLEN (64 * 1024) /* NIC Command types */ +#define LIO_CMD_CHANGE_MTU 0x1 #define LIO_CMD_CHANGE_DEVFLAGS 0x3 #define LIO_CMD_RX_CTL 0x4 #define LIO_CMD_CLEAR_STATS 0x6 diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c index 5f3c05e..a17fba5 100644 --- a/drivers/net/liquidio/lio_ethdev.c +++ b/drivers/net/liquidio/lio_ethdev.c @@ -446,29 +446,64 @@ struct rte_lio_xstats_name_off { } static int -lio_dev_validate_vf_mtu(struct rte_eth_dev *eth_dev, uint16_t new_mtu) +lio_dev_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) { struct lio_device *lio_dev = LIO_DEV(eth_dev); + uint16_t pf_mtu = lio_dev->linfo.link.s.mtu; + uint32_t frame_len = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; + struct lio_dev_ctrl_cmd ctrl_cmd; + struct lio_ctrl_pkt ctrl_pkt; PMD_INIT_FUNC_TRACE(); if (!lio_dev->intf_open) { - lio_dev_err(lio_dev, "Port %d down, can't check MTU\n", + lio_dev_err(lio_dev, "Port %d down, can't set MTU\n", lio_dev->port_id); return -EINVAL; } - /* Limit the MTU to make sure the ethernet packets are between - * ETHER_MIN_MTU bytes and PF's MTU + /* check if VF MTU is within allowed range. + * New value should not exceed PF MTU. */ - if ((new_mtu < ETHER_MIN_MTU) || - (new_mtu > lio_dev->linfo.link.s.mtu)) { - lio_dev_err(lio_dev, "Invalid MTU: %d\n", new_mtu); - lio_dev_err(lio_dev, "Valid range %d and %d\n", - ETHER_MIN_MTU, lio_dev->linfo.link.s.mtu); + if ((mtu < ETHER_MIN_MTU) || (mtu > pf_mtu)) { + lio_dev_err(lio_dev, "VF MTU should be >= %d and <= %d\n", + ETHER_MIN_MTU, pf_mtu); return -EINVAL; } + /* flush added to prevent cmd failure + * incase the queue is full + */ + lio_flush_iq(lio_dev, lio_dev->instr_queue[0]); + + memset(&ctrl_pkt, 0, sizeof(struct lio_ctrl_pkt)); + memset(&ctrl_cmd, 0, sizeof(struct lio_dev_ctrl_cmd)); + + ctrl_cmd.eth_dev = eth_dev; + ctrl_cmd.cond = 0; + + ctrl_pkt.ncmd.s.cmd = LIO_CMD_CHANGE_MTU; + ctrl_pkt.ncmd.s.param1 = mtu; + ctrl_pkt.ctrl_cmd = &ctrl_cmd; + + if (lio_send_ctrl_pkt(lio_dev, &ctrl_pkt)) { + lio_dev_err(lio_dev, "Failed to send command to change MTU\n"); + return -1; + } + + if (lio_wait_for_ctrl_cmd(lio_dev, &ctrl_cmd)) { + lio_dev_err(lio_dev, "Command to change MTU timed out\n"); + return -1; + } + + if (frame_len > ETHER_MAX_LEN) + eth_dev->data->dev_conf.rxmode.jumbo_frame = 1; + else + eth_dev->data->dev_conf.rxmode.jumbo_frame = 0; + + eth_dev->data->dev_conf.rxmode.max_rx_pkt_len = frame_len; + eth_dev->data->mtu = mtu; + return 0; } @@ -1333,6 +1368,11 @@ struct rte_lio_xstats_name_off { lio_swap_8B_data((uint64_t *)ls, sizeof(union octeon_link_status) >> 3); if (lio_dev->linfo.link.link_status64 != ls->link_status64) { + if (ls->s.mtu < eth_dev->data->mtu) { + lio_dev_info(lio_dev, "Lowered VF MTU to %d as PF MTU dropped\n", + ls->s.mtu); + eth_dev->data->mtu = ls->s.mtu; + } lio_dev->linfo.link.link_status64 = ls->link_status64; lio_dev_link_update(eth_dev, 0); } @@ -1404,35 +1444,22 @@ struct rte_lio_xstats_name_off { if (lio_dev->linfo.link.link_status64 == 0) { ret = -1; - goto dev_mtu_check_error; + goto dev_mtu_set_error; } - if (eth_dev->data->dev_conf.rxmode.jumbo_frame == 1) { - if (frame_len <= ETHER_MAX_LEN || - frame_len > LIO_MAX_RX_PKTLEN) { - lio_dev_err(lio_dev, "max packet length should be >= %d and < %d when jumbo frame is enabled\n", - ETHER_MAX_LEN, LIO_MAX_RX_PKTLEN); - ret = -EINVAL; - goto dev_mtu_check_error; - } - mtu = (uint16_t)(frame_len - ETHER_HDR_LEN - ETHER_CRC_LEN); - } else { - /* default MTU */ - mtu = ETHER_MTU; - eth_dev->data->dev_conf.rxmode.max_rx_pkt_len = ETHER_MAX_LEN; - } + mtu = (uint16_t)(frame_len - ETHER_HDR_LEN - ETHER_CRC_LEN); + if (mtu < ETHER_MIN_MTU) + mtu = ETHER_MIN_MTU; - if (lio_dev->linfo.link.s.mtu != mtu) { - ret = lio_dev_validate_vf_mtu(eth_dev, mtu); + if (eth_dev->data->mtu != mtu) { + ret = lio_dev_mtu_set(eth_dev, mtu); if (ret) - goto dev_mtu_check_error; + goto dev_mtu_set_error; } - eth_dev->data->mtu = mtu; - return 0; -dev_mtu_check_error: +dev_mtu_set_error: rte_eal_alarm_cancel(lio_sync_link_state_check, eth_dev); dev_lsc_handle_error: @@ -1841,6 +1868,7 @@ static int lio_dev_configure(struct rte_eth_dev *eth_dev) .rss_hash_update = lio_dev_rss_hash_update, .udp_tunnel_port_add = lio_dev_udp_tunnel_add, .udp_tunnel_port_del = lio_dev_udp_tunnel_del, + .mtu_set = lio_dev_mtu_set, }; static void