Received: by 10.213.65.68 with SMTP id h4csp463133imn; Fri, 16 Mar 2018 08:30:36 -0700 (PDT) X-Google-Smtp-Source: AG47ELv1Uf0A2KQ4hlylqUm/al2JDlAjAoR8E7MlaY33EuvpuknEAabRJvBriBcFIJ/B47wSBQbq X-Received: by 2002:a17:902:aa02:: with SMTP id be2-v6mr2633366plb.86.1521214236436; Fri, 16 Mar 2018 08:30:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521214236; cv=none; d=google.com; s=arc-20160816; b=tCma/TuzUoa9BvFbcW2iYAA+rS7AwyQYsVaAtWSAOYLqUYhXdSL4Vb67pmK0p7KU4y 0uWKvawVwDz/Ur3M8bmvCC2RpQc1Ap2ACLDH/RIWSw0CFdphZFu2V0394uXoxKQoo0z3 A+3ULJrczR7U0EzUs2Gm0Wrmr4g1Skv40S79r0IyDTd/I9wdzkAe9g/XvsAzZenkTjnP LLkrkFkHwW4oEp2gE/nkblGBban/mnOdpxHAmg3omDSlGZZKP0XIV8FQ7J1b5Io+3P6U 2leo09Tc4Tyt5TWlnGQ6S0IWsd/Ez6iHWlXSRBGRZxgPtFg/ugaBtY6vV5H66Pyl/cD8 dCYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=PhrO64UuR/3MvC+br1IEAWlH9jGh6Z5PwzjKpvdu20A=; b=ECfjF4qKdLcm022xx1kmOKuEj2Nv0eO7HoLABtaLz0sxWf9RO0BAo/LiJX+lYmf1s9 ly/IGJhhfxHOqaaGDAO6B2bswWJSz8GWP1m3GEm++09GiJFPGOJpKx8EnyailIho75uC wSC5AOMQdt4QJ+9W3Ic/SAPuYUNqlU7DrprLz9vidHd5Q+CuY6gGiKhrFKb6eAAedjdu AjqkIPzUdx0H4GszL2ManLEiiVZcnel2OcHq7OCuBW7igvcpCx41Arq+L4BJ9dTats6P pS7xH1fIvyt2G2bkbcaIXTJAK7w1jUn8tYIhLTY1Y7Zz20YpmzW5i+R7QElCcMim2s5J +n0w== 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 f13si5054894pgp.666.2018.03.16.08.30.21; Fri, 16 Mar 2018 08:30:36 -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; 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 S933095AbeCPP3c (ORCPT + 99 others); Fri, 16 Mar 2018 11:29:32 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:36154 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933081AbeCPP33 (ORCPT ); Fri, 16 Mar 2018 11:29:29 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 3B751FB0; Fri, 16 Mar 2018 15:29:28 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Florian Westphal , Eric Dumazet , Pablo Neira Ayuso Subject: [PATCH 4.4 42/63] netfilter: x_tables: pass xt_counters struct instead of packet counter Date: Fri, 16 Mar 2018 16:23:14 +0100 Message-Id: <20180316152304.638131270@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180316152259.964532775@linuxfoundation.org> References: <20180316152259.964532775@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Florian Westphal commit 4d31eef5176df06f218201bc9c0ce40babb41660 upstream. On SMP we overload the packet counter (unsigned long) to contain percpu offset. Hide this from callers and pass xt_counters address instead. Preparation patch to allocate the percpu counters in page-sized batch chunks. Signed-off-by: Florian Westphal Acked-by: Eric Dumazet Signed-off-by: Pablo Neira Ayuso Signed-off-by: Greg Kroah-Hartman --- include/linux/netfilter/x_tables.h | 6 +----- net/ipv4/netfilter/arp_tables.c | 4 ++-- net/ipv4/netfilter/ip_tables.c | 4 ++-- net/ipv6/netfilter/ip6_tables.c | 5 ++--- net/netfilter/x_tables.c | 9 +++++++++ 5 files changed, 16 insertions(+), 12 deletions(-) --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h @@ -395,11 +395,7 @@ static inline unsigned long xt_percpu_co return 0; } -static inline void xt_percpu_counter_free(u64 pcnt) -{ - if (nr_cpu_ids > 1) - free_percpu((void __percpu *) (unsigned long) pcnt); -} +void xt_percpu_counter_free(struct xt_counters *cnt); static inline struct xt_counters * xt_get_this_cpu_counter(struct xt_counters *cnt) --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c @@ -540,7 +540,7 @@ find_check_entry(struct arpt_entry *e, c err: module_put(t->u.kernel.target->me); out: - xt_percpu_counter_free(e->counters.pcnt); + xt_percpu_counter_free(&e->counters); return ret; } @@ -628,7 +628,7 @@ static inline void cleanup_entry(struct if (par.target->destroy != NULL) par.target->destroy(&par); module_put(par.target->me); - xt_percpu_counter_free(e->counters.pcnt); + xt_percpu_counter_free(&e->counters); } /* Checks and translates the user-supplied table segment (held in --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c @@ -701,7 +701,7 @@ find_check_entry(struct ipt_entry *e, st cleanup_match(ematch, net); } - xt_percpu_counter_free(e->counters.pcnt); + xt_percpu_counter_free(&e->counters); return ret; } @@ -797,7 +797,7 @@ cleanup_entry(struct ipt_entry *e, struc if (par.target->destroy != NULL) par.target->destroy(&par); module_put(par.target->me); - xt_percpu_counter_free(e->counters.pcnt); + xt_percpu_counter_free(&e->counters); } /* Checks and translates the user-supplied table segment (held in --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c @@ -713,7 +713,7 @@ find_check_entry(struct ip6t_entry *e, s cleanup_match(ematch, net); } - xt_percpu_counter_free(e->counters.pcnt); + xt_percpu_counter_free(&e->counters); return ret; } @@ -808,8 +808,7 @@ static void cleanup_entry(struct ip6t_en if (par.target->destroy != NULL) par.target->destroy(&par); module_put(par.target->me); - - xt_percpu_counter_free(e->counters.pcnt); + xt_percpu_counter_free(&e->counters); } /* Checks and translates the user-supplied table segment (held in --- a/net/netfilter/x_tables.c +++ b/net/netfilter/x_tables.c @@ -1592,6 +1592,15 @@ void xt_proto_fini(struct net *net, u_in } EXPORT_SYMBOL_GPL(xt_proto_fini); +void xt_percpu_counter_free(struct xt_counters *counters) +{ + unsigned long pcnt = counters->pcnt; + + if (nr_cpu_ids > 1) + free_percpu((void __percpu *)pcnt); +} +EXPORT_SYMBOL_GPL(xt_percpu_counter_free); + static int __net_init xt_net_init(struct net *net) { int i;