Received: by 2002:ac0:8c9a:0:0:0:0:0 with SMTP id r26csp1082229ima; Fri, 1 Feb 2019 16:09:38 -0800 (PST) X-Google-Smtp-Source: AHgI3Ibb+cn7Di3eoP4A1s7QL4uy+vziZWqc7R3pgZFX+P5YKTO8YcZVwpsnDrDsD0lyVKPvijOY X-Received: by 2002:a63:3602:: with SMTP id d2mr4213131pga.404.1549066178394; Fri, 01 Feb 2019 16:09:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549066178; cv=none; d=google.com; s=arc-20160816; b=bqrOTBXsfvvkqkJXBjllVeFKc4CC7OGsTofEUp+kpW+2BRDVmyuCH4Gm5zlsIWTZ+U fSE0vsMOiH1oJsp+aK9CSBy6VOjo6rMefgl7us83KbohSDq0+Tnrv7IlEIe5GAtqBb4O mjnVlR1btZmeUY9YLokpBCya1Qvsm+padwtBIhVm0O/Kjz0Rf0kOzFWDRubq6kE+Ugqd 5lURPjgIUUIwzRK66dIEuEEIEZ8/3YEV7o2MpDFsirUWIKeL+VhhKXEKC3GlBYp5JVmj xfE/Gn9uuaiptr292uDupl/zfogyuLnU+AGEiFHHPGyhoN8rqJOo73cwFeqrSdGds0BS q2yg== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:references:cc:to:subject:from; bh=AMi3LmsDBbfo/WqJkxR1iYAlGCiTY1IuErgui1TrODE=; b=IfhRX4iVEo1x03uzjYw2rJyP0LPzyYqtV2KLtL+wC0y00opon9fwhaGJVkFYbqkDXF kGq1Eu58b4Ec21zKHcOGtT9LdhKSjsJNH9pRi5r2EvfOGT0C2/mJUmEijuZnSyG17K65 PovWW3k19UHQAGASJ5HSAIsE/o2iBOVi8a7NqHN7YZakpZt/ntiHRrzKtIm6lhzn1jl2 qKh0se1HBDja54YrRojt5WZDy3268h31PnwsBlysoW6neak4kG1GqlpxRYJynve2IDLP j09k56mbAasjqeBiHabse7iyr8ANHTvnc6LHVbyPydIDjvIzmdFDu8ysCOyVuiH//XcW RFOA== ARC-Authentication-Results: i=1; mx.google.com; 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 i189si9008602pfg.265.2019.02.01.16.09.23; Fri, 01 Feb 2019 16:09:38 -0800 (PST) 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; 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 S1727500AbfBBAHr (ORCPT + 99 others); Fri, 1 Feb 2019 19:07:47 -0500 Received: from dispatch1-us1.ppe-hosted.com ([148.163.129.52]:53032 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726121AbfBBAHr (ORCPT ); Fri, 1 Feb 2019 19:07:47 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us4.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 4F86D4C007B; Sat, 2 Feb 2019 00:07:46 +0000 (UTC) Received: from ec-desktop.uk.solarflarecom.com (10.17.20.45) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 1 Feb 2019 16:07:42 -0800 From: Edward Cree Subject: [RFC PATCH v2 2/4] net: core: use a dynamic_call for pt_prev->func() in RX path To: , CC: , References: <1c8bfbb9-c76f-85d7-f6e2-aba33d5950b0@solarflare.com> Message-ID: <29064c76-5938-7070-dd1d-c36504bee03c@solarflare.com> Date: Sat, 2 Feb 2019 00:07:41 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <1c8bfbb9-c76f-85d7-f6e2-aba33d5950b0@solarflare.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Originating-IP: [10.17.20.45] X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24400.005 X-TM-AS-Result: No-0.056600-4.000000-10 X-TMASE-MatchedRID: AHaZm2SNi6foSitJVour/afOxh7hvX71pfVcx39Kq+7YpRv5miLGfL6p xbTOjavylSYn8sPpshV1VOt17I0SpZ4JPQewVPBvjWe5HOFKvuMK3n1SHen81ek9QK6zMDVaHVY j66eqnnnpmopVSa8PAL8aMgcvOfsGKQ54kjEfuxUcsSroYI5AVn0tCKdnhB58vqq8s2MNhPAir3 kOMJmHTHYJEUfDojP/wrbXMGDYqV/6CZXLlV1mSXhkXc0sNwMdLj2qXch3MkpLGCpMY06Icw2D9 RO/h2F506H+Y9srUPxikzcxh3jFdf+QiMYnP6XYPEscq6aYHFhn+1nzumrDgHzm6hivSaZZop2l f3StGhISt1bcvKF7ZKbNmFZyaXzY X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--0.056600-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24400.005 X-MDID: 1549066066-pT4-25Ei0zeP Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Typically a small number of callees, such as ip[v6]_rcv or packet_rcv, will cover most packets. Signed-off-by: Edward Cree --- net/core/dev.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 8e276e0192a1..7b38a33689d8 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -146,6 +146,7 @@ #include #include #include +#include #include "net-sysfs.h" @@ -1949,6 +1950,9 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb) } EXPORT_SYMBOL_GPL(dev_forward_skb); +DYNAMIC_CALL_4(int, deliver_skb, struct sk_buff *, struct net_device *, + struct packet_type *, struct net_device *); + static inline int deliver_skb(struct sk_buff *skb, struct packet_type *pt_prev, struct net_device *orig_dev) @@ -1956,7 +1960,7 @@ static inline int deliver_skb(struct sk_buff *skb, if (unlikely(skb_orphan_frags_rx(skb, GFP_ATOMIC))) return -ENOMEM; refcount_inc(&skb->users); - return pt_prev->func(skb, skb->dev, pt_prev, orig_dev); + return dynamic_deliver_skb(pt_prev->func, skb, skb->dev, pt_prev, orig_dev); } static inline void deliver_ptype_list_skb(struct sk_buff *skb, @@ -4970,7 +4974,8 @@ static int __netif_receive_skb_one_core(struct sk_buff *skb, bool pfmemalloc) ret = __netif_receive_skb_core(skb, pfmemalloc, &pt_prev); if (pt_prev) - ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev); + ret = dynamic_deliver_skb(pt_prev->func, skb, skb->dev, pt_prev, + orig_dev); return ret; } @@ -5015,7 +5020,8 @@ static inline void __netif_receive_skb_list_ptype(struct list_head *head, pt_prev->list_func(head, pt_prev, orig_dev); else list_for_each_entry_safe(skb, next, head, list) - pt_prev->func(skb, skb->dev, pt_prev, orig_dev); + dynamic_deliver_skb(pt_prev->func, skb, skb->dev, + pt_prev, orig_dev); } static void __netif_receive_skb_list_core(struct list_head *head, bool pfmemalloc)