From patchwork Mon Nov 17 10:20:30 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rusty Russell X-Patchwork-Id: 9134 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.176.167]) by ozlabs.org (Postfix) with ESMTP id 18B61DDDF6 for ; Mon, 17 Nov 2008 21:20:48 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752500AbYKQKUn (ORCPT ); Mon, 17 Nov 2008 05:20:43 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752290AbYKQKUn (ORCPT ); Mon, 17 Nov 2008 05:20:43 -0500 Received: from ozlabs.org ([203.10.76.45]:37771 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751773AbYKQKUm (ORCPT ); Mon, 17 Nov 2008 05:20:42 -0500 Received: from vivaldi.localnet (unknown [150.101.102.135]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPSA id 8EDBFDDDDF; Mon, 17 Nov 2008 21:20:41 +1100 (EST) From: Rusty Russell To: David Miller Subject: [PATCH] net: make ip_rt_acct a normal percpu var Date: Mon, 17 Nov 2008 20:50:30 +1030 User-Agent: KMail/1.10.1 (Linux/2.6.27-7-generic; KDE/4.1.2; i686; ; ) Cc: netdev@vger.kernel.org, Eric Dumazet MIME-Version: 1.0 Content-Disposition: inline Message-Id: <200811172050.31308.rusty@rustcorp.com.au> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There's no reason for this to be dynamically allocated: we panic if allocation fails anyway. Signed-off-by: Rusty Russell diff -r 643c2cdfdb62 include/net/route.h --- a/include/net/route.h Mon Nov 17 19:57:42 2008 +1030 +++ b/include/net/route.h Mon Nov 17 20:23:37 2008 +1030 @@ -34,6 +34,7 @@ #include #include #include +#include #ifndef __KERNEL__ #warning This file is not supposed to be used outside of kernel. @@ -105,7 +106,7 @@ unsigned int out_hlist_search; }; -extern struct ip_rt_acct *ip_rt_acct; +DECLARE_PER_CPU(struct ip_rt_acct[256], ip_rt_acct); struct in_device; extern int ip_rt_init(void); diff -r 643c2cdfdb62 net/ipv4/ip_input.c --- a/net/ipv4/ip_input.c Mon Nov 17 19:57:42 2008 +1030 +++ b/net/ipv4/ip_input.c Mon Nov 17 20:23:37 2008 +1030 @@ -339,7 +339,7 @@ #ifdef CONFIG_NET_CLS_ROUTE if (unlikely(skb->dst->tclassid)) { - struct ip_rt_acct *st = per_cpu_ptr(ip_rt_acct, smp_processor_id()); + struct ip_rt_acct *st = __get_cpu_var(ip_rt_acct); u32 idx = skb->dst->tclassid; st[idx&0xFF].o_packets++; st[idx&0xFF].o_bytes+=skb->len; diff -r 643c2cdfdb62 net/ipv4/route.c --- a/net/ipv4/route.c Mon Nov 17 19:57:42 2008 +1030 +++ b/net/ipv4/route.c Mon Nov 17 20:23:37 2008 +1030 @@ -541,7 +541,7 @@ unsigned int j; u32 *src; - src = ((u32 *) per_cpu_ptr(ip_rt_acct, i)) + offset; + src = ((u32 *)per_cpu(ip_rt_acct, i)) + offset; for (j = 0; j < length/4; j++) dst[j] += src[j]; } @@ -3237,7 +3237,7 @@ #ifdef CONFIG_NET_CLS_ROUTE -struct ip_rt_acct *ip_rt_acct __read_mostly; +DEFINE_PER_CPU(struct ip_rt_acct[256], ip_rt_acct); #endif /* CONFIG_NET_CLS_ROUTE */ static __initdata unsigned long rhash_entries; @@ -3253,12 +3253,6 @@ int __init ip_rt_init(void) { int rc = 0; - -#ifdef CONFIG_NET_CLS_ROUTE - ip_rt_acct = __alloc_percpu(256 * sizeof(struct ip_rt_acct)); - if (!ip_rt_acct) - panic("IP: failed to allocate ip_rt_acct\n"); -#endif ipv4_dst_ops.kmem_cachep = kmem_cache_create("ip_dst_cache", sizeof(struct rtable), 0,