From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19103 invoked by alias); 16 Oct 2006 11:08:28 -0000 Received: (qmail 19092 invoked by uid 22791); 16 Oct 2006 11:08:27 -0000 X-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_20 X-Spam-Check-By: sourceware.org Received: from mga01.intel.com (HELO mga01.intel.com) (192.55.52.88) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 16 Oct 2006 11:08:21 +0000 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by mga01.intel.com with ESMTP; 16 Oct 2006 04:07:36 -0700 Received: from unknown (HELO [172.16.96.71]) ([172.16.96.71]) by fmsmga002.fm.intel.com with ESMTP; 16 Oct 2006 04:07:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: i="4.09,314,1157353200"; d="scan'208"; a="4235176:sNHT18207540" Message-ID: <453367F6.8060505@intel.com> Date: Mon, 16 Oct 2006 11:08:00 -0000 From: "bibo,mao" User-Agent: Thunderbird 1.5.0.7 (Windows/20060909) MIME-Version: 1.0 To: systemtap@sourceware.org Subject: [PATCH]_stp_free_percpu function definition responding to _stp_alloc_percpu Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact systemtap-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Post: List-Help: , Sender: systemtap-owner@sourceware.org X-SW-Source: 2006-q4/txt/msg00124.txt.bz2 Hi, On the newest 2.6.19-rc2 smp machines, stap fails to run. It is because _stp_free_percpu is defined as free_percpu macro and one function at the same time. This patch modifies this, and replaces for_each_cpu with for_each_possible_cpu macro. thanks bibo,mao --- src.org/runtime/alloc.c 2006-01-25 18:08:47.000000000 +0800 +++ src/runtime/alloc.c 2006-10-16 18:17:40.000000000 +0800 @@ -18,14 +18,9 @@ #define kmalloc_node(size,flags,node) kmalloc(size,flags) #endif /* LINUX_VERSION_CODE */ -#ifdef CONFIG_SMP -#define _stp_free_percpu(ptr) free_percpu(ptr) -#else -#define _stp_free_percpu(ptr) kfree(ptr) -#endif - #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15) #define _stp_alloc_percpu(size) __alloc_percpu(size, 8) +#define _stp_free_percpu(ptr) free_percpu(ptr) #else #ifdef CONFIG_SMP /* This is like alloc_percpu() except it simply takes a size, instead of a type. */ @@ -37,7 +32,7 @@ void *_stp_alloc_percpu(size_t size) if (!pdata) return NULL; - for_each_cpu(i) { + for_each_possible_cpu(i) { int node = cpu_to_node(i); if (node_online(node)) @@ -68,7 +63,7 @@ void _stp_free_percpu(const void *objp) int i; struct percpu_data *p = (struct percpu_data *) (~(unsigned long) objp); - for_each_cpu(i) + for_each_possible_cpu(i) kfree(p->ptrs[i]); kfree(p); } @@ -80,6 +75,7 @@ void *_stp_alloc_percpu(size_t size) memset(ret, 0, size); return ret; } +#define _stp_free_percpu(ptr) kfree(ptr) #endif /* CONFIG_SMP */ #endif /* LINUX_VERSION_CODE */ #endif /* _ALLOC_C_ */