Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp2744607ybh; Mon, 5 Aug 2019 06:11:38 -0700 (PDT) X-Google-Smtp-Source: APXvYqxkT2xpq417WWAs9wSUdq1SNn67GYtkt+8UaMpv40/oSIgpKw/aVsfCXi81imBWxur9BDbL X-Received: by 2002:a17:902:ff10:: with SMTP id f16mr48583085plj.141.1565010698190; Mon, 05 Aug 2019 06:11:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565010698; cv=none; d=google.com; s=arc-20160816; b=YC1tOEKEbD/xMxDhTWcLcFc2pY1JEbwMCwwMe1ReSll6VwKO3zv+oErU9gQmOJV3Ul nVJBiLvLHV4ZEkLCHLSlZJVfm2Ur0JP6N3215xgt/ofAjjnoIp/X1RhZ0n/LtIop6ARJ jJ+PjXr38je8xjTTwpKeEct4qRpHxsNf+NKibaFHxpQa1VMxHiTuN5zfNf0lMpZtQkYO 7HJ/4KrK8qHw5W00ODArJPFoaLJStZkeAb/phPK3A50uvB1/g9EUKUI7srbcOGv96Bv4 fcuM/7eyEwjdiaGqqWx3bTky0cqvUrH5WSTzwMV8U0YqrxsJn62LJNWfylkRa17R6Prq WQ1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Xr9nDOK0H29wi0rIkxpYc4CyZgHP8FoZGQyBt9vb0KI=; b=gbY1yndJH9bcIvYyJoYcJFnNGMf7gyzYxaEYpA1mislkZV4Yes/xRsQarztvvSRmJy wigZD91MRB32aa+qxF3cz66+O6zsIeKzsGTsXhv1Yeeew7S5ieMZ4HWSD5VPe1ZUmqhD 8ntHgcAgehjo60I0ZuIrm2I8bGtIj72/uFaIecrHLGnbr6z4qTr+/KznSEAEza8PmMw5 vRUBRbmqBugJhs8cd2qwbghmjXQ93fj+0tk2vyoymIszAWqpxQ3+uWFe2Eb6OaWxw1XO rBlmj+nFrgyLJevgDsH5MUsMqPdk44xInCj0HccYeM7nDBG66cztPGvCgnBOH2EpSfbC cSdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Mlf9G2xs; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p35si43951316pgb.484.2019.08.05.06.11.23; Mon, 05 Aug 2019 06:11:38 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Mlf9G2xs; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729707AbfHENKQ (ORCPT + 99 others); Mon, 5 Aug 2019 09:10:16 -0400 Received: from mail.kernel.org ([198.145.29.99]:49036 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729137AbfHENKL (ORCPT ); Mon, 5 Aug 2019 09:10:11 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1FD6B216F4; Mon, 5 Aug 2019 13:10:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1565010610; bh=dB18CKiYDObzg0Q42T65d52HEeNUlXSnKibxNIjXYNA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Mlf9G2xs50tuYoEQsTxCdVQCuzwcbBW4Qicw17VfH7VBcfxIaa5UrJ/loHoebgrGM dvKdD9cEZKmOr8SbbfQm3OoO+aHMKSoznrTq5szdKnxDDRzVyzEjEhTQOVI1TK4JVT QgLcpRuUcydzdcrrCnx3oDSZ9tr9KTdD9udGncMU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Petr Machata , Alex Veber , Ido Schimmel , "David S. Miller" , Sasha Levin Subject: [PATCH 4.19 36/74] mlxsw: spectrum_dcb: Configure DSCP map as the last rule is removed Date: Mon, 5 Aug 2019 15:02:49 +0200 Message-Id: <20190805124938.737897983@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190805124935.819068648@linuxfoundation.org> References: <20190805124935.819068648@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit dedfde2fe1c4ccf27179fcb234e2112d065c39bb ] Spectrum systems use DSCP rewrite map to update DSCP field in egressing packets to correspond to priority that the packet has. Whether rewriting will take place is determined at the point when the packet ingresses the switch: if the port is in Trust L3 mode, packet priority is determined from the DSCP map at the port, and DSCP rewrite will happen. If the port is in Trust L2 mode, 802.1p is used for packet prioritization, and no DSCP rewrite will happen. The driver determines the port trust mode based on whether any DSCP prioritization rules are in effect at given port. If there are any, trust level is L3, otherwise it's L2. When the last DSCP rule is removed, the port is switched to trust L2. Under that scenario, if DSCP of a packet should be rewritten, it should be rewritten to 0. However, when switching to Trust L2, the driver neglects to also update the DSCP rewrite map. The last DSCP rule thus remains in effect, and packets egressing through this port, if they have the right priority, will have their DSCP set according to this rule. Fix by first configuring the rewrite map, and only then switching to trust L2 and bailing out. Fixes: b2b1dab6884e ("mlxsw: spectrum: Support ieee_setapp, ieee_delapp") Signed-off-by: Petr Machata Reported-by: Alex Veber Tested-by: Alex Veber Signed-off-by: Ido Schimmel Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- .../net/ethernet/mellanox/mlxsw/spectrum_dcb.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c index b25048c6c7618..21296fa7f7fbf 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c @@ -408,14 +408,6 @@ static int mlxsw_sp_port_dcb_app_update(struct mlxsw_sp_port *mlxsw_sp_port) have_dscp = mlxsw_sp_port_dcb_app_prio_dscp_map(mlxsw_sp_port, &prio_map); - if (!have_dscp) { - err = mlxsw_sp_port_dcb_toggle_trust(mlxsw_sp_port, - MLXSW_REG_QPTS_TRUST_STATE_PCP); - if (err) - netdev_err(mlxsw_sp_port->dev, "Couldn't switch to trust L2\n"); - return err; - } - mlxsw_sp_port_dcb_app_dscp_prio_map(mlxsw_sp_port, default_prio, &dscp_map); err = mlxsw_sp_port_dcb_app_update_qpdpm(mlxsw_sp_port, @@ -432,6 +424,14 @@ static int mlxsw_sp_port_dcb_app_update(struct mlxsw_sp_port *mlxsw_sp_port) return err; } + if (!have_dscp) { + err = mlxsw_sp_port_dcb_toggle_trust(mlxsw_sp_port, + MLXSW_REG_QPTS_TRUST_STATE_PCP); + if (err) + netdev_err(mlxsw_sp_port->dev, "Couldn't switch to trust L2\n"); + return err; + } + err = mlxsw_sp_port_dcb_toggle_trust(mlxsw_sp_port, MLXSW_REG_QPTS_TRUST_STATE_DSCP); if (err) { -- 2.20.1