Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3601028pxb; Mon, 24 Jan 2022 13:14:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJxgHKJeroT5Xav5VY7FcRZxE2AAQp+WTymziJv27OoiC2+DMCP8AfY0A5OcskoNuL47fQAd X-Received: by 2002:a17:902:db07:b0:14b:287a:a02f with SMTP id m7-20020a170902db0700b0014b287aa02fmr12584454plx.27.1643058873177; Mon, 24 Jan 2022 13:14:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643058873; cv=none; d=google.com; s=arc-20160816; b=OOgLDXWNAAPwebBxfJNY+vBFMU09hl3KvTBTanb2ZVxTNo0fyB6hxGjhcYC7yCBqbn iPLztlh/n35Djp9Y5zK8Fj1L32tnNC9kMvcuREUJRNk7runQMNf1ESzlHzVsqpwS+yxm nwwXIslq1SywVPpwtlgBenO3hbIfIJU0V4Y0svMQUTAWZUEVvCamUBPzdvitBaWisYby DuExc6QBC9uAozVdNMTsvptEVomcb4p9iltWuH0qrxoNfyf+QYnlnCcuTurLhMVRhWDp OhqvYZHVUWJ5Xa5NJnFzrxjA460zMxhhYXK4P1HeSL7kyMBXnRcj/tvS10E9CDJemKFx MPeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=a59X0mscBLhs2qhIQ38e+NEdEpESss6eVQhkkNKet7E=; b=RW3DNDsrxwlaPtA5ATjrUQj1j+1cCgswdqI3oUmpOfK3C2VJ2NsU6GWs6wuUh518Xg Ls7+cCiYhRjr6MqeUkKzVxrk7jTgEQ6/8lwtdiIjVIOw7iVkvqvK1Yu8mPRgj/zta4qP tsmyNhLZLwD/AXgVxvqoHIU0VCHCsDmGLzR4FTdLlgr+x09X+K85lWTUyBBW6j2xH0sz 48kTrkRCbNxuuIVaueZI3s2qARBzWyGvVjq7AmmgUikgPkOr6amufy/kDyATfHkQkGXZ Pex0oetcBr03CIWydmN9EAQWlwhElrODyMp7y+LR2Ac91l9TO9ucihP3yYFw9pRxRJcm 4C4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LaKsYUV9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 70si13941562pgb.73.2022.01.24.13.14.18; Mon, 24 Jan 2022 13:14:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LaKsYUV9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1385835AbiAXUm2 (ORCPT + 99 others); Mon, 24 Jan 2022 15:42:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36696 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356533AbiAXUX0 (ORCPT ); Mon, 24 Jan 2022 15:23:26 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B5FCBC0417D9; Mon, 24 Jan 2022 11:40:41 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 7CD80B810AF; Mon, 24 Jan 2022 19:40:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A3B81C340E5; Mon, 24 Jan 2022 19:40:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643053239; bh=Tel8WpvjObCRmrZAAP6SGwebSrPTvmAswveLhfMl9mE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LaKsYUV9GiMI+alfrOCxEbvSzdhBrC7rlx1ASJR9B/i/DKRV4uqWjii2eQ6OvQ3Tm 3o2w+2maRRVm0bZuf6IwUNRdpPlWciTzkHyG9Jm/s76HeXeBDUIRbzJNW6TgF6vzuc n+GJ6TR0JXZoOjumckXTuYn11n26MNqBfeYD5hJ0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Kevin Bracey , Eric Dumazet , Jiri Pirko , Vimalkumar , Jakub Kicinski Subject: [PATCH 5.4 311/320] net_sched: restore "mpu xxx" handling Date: Mon, 24 Jan 2022 19:44:55 +0100 Message-Id: <20220124184004.511088561@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124183953.750177707@linuxfoundation.org> References: <20220124183953.750177707@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kevin Bracey commit fb80445c438c78b40b547d12b8d56596ce4ccfeb upstream. commit 56b765b79e9a ("htb: improved accuracy at high rates") broke "overhead X", "linklayer atm" and "mpu X" attributes. "overhead X" and "linklayer atm" have already been fixed. This restores the "mpu X" handling, as might be used by DOCSIS or Ethernet shaping: tc class add ... htb rate X overhead 4 mpu 64 The code being fixed is used by htb, tbf and act_police. Cake has its own mpu handling. qdisc_calculate_pkt_len still uses the size table containing values adjusted for mpu by user space. iproute2 tc has always passed mpu into the kernel via a tc_ratespec structure, but the kernel never directly acted on it, merely stored it so that it could be read back by `tc class show`. Rather, tc would generate length-to-time tables that included the mpu (and linklayer) in their construction, and the kernel used those tables. Since v3.7, the tables were no longer used. Along with "mpu", this also broke "overhead" and "linklayer" which were fixed in 01cb71d2d47b ("net_sched: restore "overhead xxx" handling", v3.10) and 8a8e3d84b171 ("net_sched: restore "linklayer atm" handling", v3.11). "overhead" was fixed by simply restoring use of tc_ratespec::overhead - this had originally been used by the kernel but was initially omitted from the new non-table-based calculations. "linklayer" had been handled in the table like "mpu", but the mode was not originally passed in tc_ratespec. The new implementation was made to handle it by getting new versions of tc to pass the mode in an extended tc_ratespec, and for older versions of tc the table contents were analysed at load time to deduce linklayer. As "mpu" has always been given to the kernel in tc_ratespec, accompanying the mpu-based table, we can restore system functionality with no userspace change by making the kernel act on the tc_ratespec value. Fixes: 56b765b79e9a ("htb: improved accuracy at high rates") Signed-off-by: Kevin Bracey Cc: Eric Dumazet Cc: Jiri Pirko Cc: Vimalkumar Link: https://lore.kernel.org/r/20220112170210.1014351-1-kevin@bracey.fi Signed-off-by: Jakub Kicinski Signed-off-by: Greg Kroah-Hartman --- include/net/sch_generic.h | 5 +++++ net/sched/sch_generic.c | 1 + 2 files changed, 6 insertions(+) --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -1264,6 +1264,7 @@ struct psched_ratecfg { u64 rate_bytes_ps; /* bytes per second */ u32 mult; u16 overhead; + u16 mpu; u8 linklayer; u8 shift; }; @@ -1273,6 +1274,9 @@ static inline u64 psched_l2t_ns(const st { len += r->overhead; + if (len < r->mpu) + len = r->mpu; + if (unlikely(r->linklayer == TC_LINKLAYER_ATM)) return ((u64)(DIV_ROUND_UP(len,48)*53) * r->mult) >> r->shift; @@ -1295,6 +1299,7 @@ static inline void psched_ratecfg_getrat res->rate = min_t(u64, r->rate_bytes_ps, ~0U); res->overhead = r->overhead; + res->mpu = r->mpu; res->linklayer = (r->linklayer & TC_LINKLAYER_MASK); } --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -1396,6 +1396,7 @@ void psched_ratecfg_precompute(struct ps { memset(r, 0, sizeof(*r)); r->overhead = conf->overhead; + r->mpu = conf->mpu; r->rate_bytes_ps = max_t(u64, conf->rate, rate64); r->linklayer = (conf->linklayer & TC_LINKLAYER_MASK); r->mult = 1;