From patchwork Wed Aug 2 07:56:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 796542 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="oGA5gB4h"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xMlr31LmSz9sRW for ; Wed, 2 Aug 2017 17:56:19 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752091AbdHBH4Q (ORCPT ); Wed, 2 Aug 2017 03:56:16 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:33368 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750725AbdHBH4O (ORCPT ); Wed, 2 Aug 2017 03:56:14 -0400 Received: by mail-wr0-f196.google.com with SMTP id y43so3049686wrd.0 for ; Wed, 02 Aug 2017 00:56:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kV0d7nFR3fxpIhAf0pp1mf++kfUT0X/dANdM91ETEI0=; b=oGA5gB4hYaW4blJ0FWrFRPHgZWj9FhmaN1DqdWvo9A3duK27/doiSLyOqsaEFEtXJ+ 7kT+Z+Wz2Ry+2/qw8Bk3pifcZGXb2ggX3nYgZvFg9pIEOMmymHT6cb1TgfG3d7YQ235i EHYoLdeXqCPoP6+FMFfwa7SFcyVKx9IXzJ64OTWWhJhbhjPjZ1rCmm77Qx+jq2ZnpqC7 xT/6vPHfwi5ZekGLMwsysX30Wi9AH9KEdYnUY3bj0ChR3cmxX+d3FsdS64pi1dGifWnP rXLogvYMA28ZhgwDciLgPDJ45RudBWFFgQIdhjxm1F0BiIM+7MDoOx2qAmohZHi716TG pr3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kV0d7nFR3fxpIhAf0pp1mf++kfUT0X/dANdM91ETEI0=; b=WpeMxtc2dBO+zXQrLGuvKUJMepGqQbqb2zdWbhZYrlAOSIsJ5PcwBECCwsYMC3afVn kI4P7nLv5M6tyyyil28Ii4bhYMiRF39paaMjIv/l+Ti83G8rvnCsI7Lijd6OlrOa1ors mAvi26RTJPwdSyZlhM0vnmCVAK22oGuc3OU9j+SWAH3s4sH4b8d4uthNlnFTKsKDJnSY rmNBRD0jMuSEjwkjRGLADWALTJ9tOyP6tq60rsq3gHaxzs6Lj2EmPaxLTJOsQrPBE/Pk VXx/hQPnLyaspk6wMamkkUJ3IEzGhSI9puKC/2Gj3/mtvSs/v7/fxuBJs2SIcW0l5JbA R+gg== X-Gm-Message-State: AIVw111bhNHo94o9YU4qN0cb2bM7MHj439fFnSbY0Vy/AWiLm4zxWubI dqu1GtU4EPJQgKeYlRs= X-Received: by 10.223.146.35 with SMTP id 32mr16342268wrj.76.1501660573147; Wed, 02 Aug 2017 00:56:13 -0700 (PDT) Received: from localhost (jirka.pirko.cz. [84.16.102.26]) by smtp.gmail.com with ESMTPSA id 39sm29307692wrv.23.2017.08.02.00.56.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 02 Aug 2017 00:56:12 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com, dsahern@gmail.com, roopa@cumulusnetworks.com, nikolay@cumulusnetworks.com, hannes@stressinduktion.org, yoshfuji@linux-ipv6.org, kuznet@ms2.inr.ac.ru Subject: [patch net-next 3/6] mlxsw: spectrum_router: Provide offload indication using nexthop flags Date: Wed, 2 Aug 2017 09:56:03 +0200 Message-Id: <20170802075606.1090-4-jiri@resnulli.us> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170802075606.1090-1-jiri@resnulli.us> References: <20170802075606.1090-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel In a similar fashion to previous patch, use the nexthop flags to provide offload indication instead of the FIB info's flags. In case a nexthop in a multipath route can't be offloaded (gateway's MAC can't be resolved, for example), then its offload flag isn't set. Signed-off-by: Ido Schimmel Signed-off-by: Jiri Pirko Tested-by: David Ahern --- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 38 ++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index add03fa..4cdeedf 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -2103,13 +2103,47 @@ mlxsw_sp_fib_entry_should_offload(const struct mlxsw_sp_fib_entry *fib_entry) } } +static void +mlxsw_sp_fib4_entry_offload_set(struct mlxsw_sp_fib_entry *fib_entry) +{ + struct mlxsw_sp_nexthop_group *nh_grp = fib_entry->nh_group; + int i; + + if (fib_entry->type == MLXSW_SP_FIB_ENTRY_TYPE_LOCAL) { + nh_grp->nexthops->key.fib_nh->nh_flags |= RTNH_F_OFFLOAD; + return; + } + + for (i = 0; i < nh_grp->count; i++) { + struct mlxsw_sp_nexthop *nh = &nh_grp->nexthops[i]; + + if (nh->offloaded) + nh->key.fib_nh->nh_flags |= RTNH_F_OFFLOAD; + else + nh->key.fib_nh->nh_flags &= ~RTNH_F_OFFLOAD; + } +} + +static void +mlxsw_sp_fib4_entry_offload_unset(struct mlxsw_sp_fib_entry *fib_entry) +{ + struct mlxsw_sp_nexthop_group *nh_grp = fib_entry->nh_group; + int i; + + for (i = 0; i < nh_grp->count; i++) { + struct mlxsw_sp_nexthop *nh = &nh_grp->nexthops[i]; + + nh->key.fib_nh->nh_flags &= ~RTNH_F_OFFLOAD; + } +} + static void mlxsw_sp_fib_entry_offload_set(struct mlxsw_sp_fib_entry *fib_entry) { fib_entry->offloaded = true; switch (fib_entry->fib_node->fib->proto) { case MLXSW_SP_L3_PROTO_IPV4: - fib_info_offload_inc(fib_entry->nh_group->key.fi); + mlxsw_sp_fib4_entry_offload_set(fib_entry); break; case MLXSW_SP_L3_PROTO_IPV6: WARN_ON_ONCE(1); @@ -2121,7 +2155,7 @@ mlxsw_sp_fib_entry_offload_unset(struct mlxsw_sp_fib_entry *fib_entry) { switch (fib_entry->fib_node->fib->proto) { case MLXSW_SP_L3_PROTO_IPV4: - fib_info_offload_dec(fib_entry->nh_group->key.fi); + mlxsw_sp_fib4_entry_offload_unset(fib_entry); break; case MLXSW_SP_L3_PROTO_IPV6: WARN_ON_ONCE(1);