From patchwork Fri Sep 23 09:22:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 674008 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3sgSYz3DLxz9srZ for ; Fri, 23 Sep 2016 19:22:31 +1000 (AEST) 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=gn+BO5jK; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758485AbcIWJWZ (ORCPT ); Fri, 23 Sep 2016 05:22:25 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:33023 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757907AbcIWJWV (ORCPT ); Fri, 23 Sep 2016 05:22:21 -0400 Received: by mail-wm0-f66.google.com with SMTP id w84so1784589wmg.0 for ; Fri, 23 Sep 2016 02:22:20 -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=ALWfUZmx+44Ox4qUk2woJF/0I5JxssNORzhxbLLc54A=; b=gn+BO5jKfRozuxdRuChteLt9sHr0+aPKKp37G5gfi/Sij7gKXLiplLS533wp4wgr9W r1+B0RIfv9Jpw2jIOYMkPKRIQd/qMXUB1qKfwP8btXXuOFQ/BdlqNU4PLa23zIy9NHRy 2qQDAPLMoFYdZ/W7kfhZiuHoN8bmaBEaqoHDll39MfsX63rE5VP9+VLkMQlHLfHUtA79 DEv9/OAXpp1Wjv3oYtew1hQ+OIvCUvFgls2SoLuFtFl3zCnS0p4pio+M+VorT3HQNSoM wKVaoSb5P5FmDs8o7PrSNhWKyf1NH8huIH4XjpphgQxFx3oACt/gqsTzkgL1jNE8LM+7 ZT8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ALWfUZmx+44Ox4qUk2woJF/0I5JxssNORzhxbLLc54A=; b=Asw5ECu6UuvbFfWIDZBX0PpB7Jg2Ggqn/cUX718PAko4QHFT9Cgsdm9kz/2DUHoYLD Km/HLB2YiePkAHc6BYEgDJvPOlGtqFqGjnuPX2dGl/FzasmpaSLPThPfGNSVOQ+oZA6r YpwyOAmdIP4tczkNXcUkMoom1DhtEBH5anSfRbhHFS4XhyuLQlFU5quET/8qm7BqQ0PZ xe5cEvQZGMOB6QEtv2IMIM4H9wrk3lRtGUeqgqYcdozd4hKpVb/lbzUxZDF1vYA0qD+k f6n1qZQaPz/yDfi/sulFuHD9iIbgA4NRpUGE5CeQUdansihR4BTupsvcJ5+nWfcEJuQy Uzvg== X-Gm-Message-State: AA6/9Rl9aY0tF/sKcK97FTEcqZY+cu54/t9ebgI/cmXmkmNKULmQT6q8EwROmIjt6X860g== X-Received: by 10.28.165.65 with SMTP id o62mr1710390wme.3.1474622539641; Fri, 23 Sep 2016 02:22:19 -0700 (PDT) Received: from localhost (jirka.pirko.cz. [84.16.102.26]) by smtp.gmail.com with ESMTPSA id 142sm2133142wmh.12.2016.09.23.02.22.18 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 23 Sep 2016 02:22:19 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, eladr@mellanox.com, yotamg@mellanox.com, nogahf@mellanox.com, ogerlitz@mellanox.com, roopa@cumulusnetworks.com, nikolay@cumulusnetworks.com, linville@tuxdriver.com, andy@greyhouse.net, f.fainelli@gmail.com, dsa@cumulusnetworks.com, jhs@mojatatu.com, vivien.didelot@savoirfairelinux.com, andrew@lunn.ch, ivecera@redhat.com, kaber@trash.net, john@phrozen.org Subject: [patch net-next v2 2/6] fib: introduce FIB info offload flag helpers Date: Fri, 23 Sep 2016 11:22:11 +0200 Message-Id: <1474622535-4002-3-git-send-email-jiri@resnulli.us> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1474622535-4002-1-git-send-email-jiri@resnulli.us> References: <1474622535-4002-1-git-send-email-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko These helpers are to be used in case someone offloads the FIB entry. The result is that if the entry is offloaded to at least one device, the offload flag is set. Signed-off-by: Jiri Pirko Reviewed-by: Ido Schimmel --- include/net/ip_fib.h | 13 +++++++++++++ net/switchdev/switchdev.c | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index 116a9c0..ffccf17 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h @@ -123,6 +123,7 @@ struct fib_info { #ifdef CONFIG_IP_ROUTE_MULTIPATH int fib_weight; #endif + unsigned int fib_offload_cnt; struct rcu_head rcu; struct fib_nh fib_nh[0]; #define fib_dev fib_nh[0].nh_dev @@ -174,6 +175,18 @@ struct fib_result_nl { __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh); +static inline void fib_info_offload_inc(struct fib_info *fi) +{ + fi->fib_offload_cnt++; + fi->fib_flags |= RTNH_F_OFFLOAD; +} + +static inline void fib_info_offload_dec(struct fib_info *fi) +{ + if (--fi->fib_offload_cnt == 0) + fi->fib_flags &= ~RTNH_F_OFFLOAD; +} + #define FIB_RES_SADDR(net, res) \ ((FIB_RES_NH(res).nh_saddr_genid == \ atomic_read(&(net)->ipv4.dev_addr_genid)) ? \ diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index 10b8193..abd8d2a 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c @@ -1216,7 +1216,7 @@ int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi, ipv4_fib.obj.orig_dev = dev; err = switchdev_port_obj_add(dev, &ipv4_fib.obj); if (!err) - fi->fib_flags |= RTNH_F_OFFLOAD; + fib_info_offload_inc(fi); return err == -EOPNOTSUPP ? 0 : err; } @@ -1260,7 +1260,7 @@ int switchdev_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi, ipv4_fib.obj.orig_dev = dev; err = switchdev_port_obj_del(dev, &ipv4_fib.obj); if (!err) - fi->fib_flags &= ~RTNH_F_OFFLOAD; + fib_info_offload_dec(fi); return err == -EOPNOTSUPP ? 0 : err; }