summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhunt <hunt>2007-01-30 17:13:46 +0000
committerhunt <hunt>2007-01-30 17:13:46 +0000
commitd21d36c05265b136246ae2c4ee9b5a38af46f45c (patch)
tree956b757db51e63729c30ca75c2aaccfbaf83e9e2
parent09ebc996d1301f24f28e2b2b4114935982690464 (diff)
downloadsystemtap-steved-d21d36c05265b136246ae2c4ee9b5a38af46f45c.tar.gz
systemtap-steved-d21d36c05265b136246ae2c4ee9b5a38af46f45c.tar.xz
systemtap-steved-d21d36c05265b136246ae2c4ee9b5a38af46f45c.zip
2007-01-30 Martin Hunt <hunt@redhat.com>
* alloc.c (_stp_alloc_percpu): Don't implement our own; just call __alloc_percpu with appropriate args for the OS version. (_stp_free_percpu): Delete. * map.c (_stp_map_init): When calling kmalloc_node, first call cpu_to_node() to get the proper node number. * stat.c (_stp_stat_del): Call free_percpu() instead of _stp_free_percpu().
-rw-r--r--runtime/ChangeLog11
-rw-r--r--runtime/alloc.c72
-rw-r--r--runtime/map.c2
-rw-r--r--runtime/stat.c2
4 files changed, 18 insertions, 69 deletions
diff --git a/runtime/ChangeLog b/runtime/ChangeLog
index 4bb6984c..30acf19a 100644
--- a/runtime/ChangeLog
+++ b/runtime/ChangeLog
@@ -1,3 +1,14 @@
+2007-01-30 Martin Hunt <hunt@redhat.com>
+
+ * alloc.c (_stp_alloc_percpu): Don't implement
+ our own; just call __alloc_percpu with appropriate args
+ for the OS version.
+ (_stp_free_percpu): Delete.
+ * map.c (_stp_map_init): When calling kmalloc_node, first
+ call cpu_to_node() to get the proper node number.
+ * stat.c (_stp_stat_del): Call free_percpu()
+ instead of _stp_free_percpu().
+
2007-01-29 Martin Hunt <hunt@redhat.com>
* alloc.c (_stp_kmalloc): New function. Call kmalloc
diff --git a/runtime/alloc.c b/runtime/alloc.c
index fe2c84e0..8f2a7451 100644
--- a/runtime/alloc.c
+++ b/runtime/alloc.c
@@ -52,76 +52,14 @@ static void *_stp_vmalloc(unsigned long size)
return ret;
}
-/* This file exists because all the NUMA-compatible allocators keep
- changing in 2.6 */
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12)
-#define kmalloc_node(size,flags,node) kmalloc(size,flags)
-#endif /* LINUX_VERSION_CODE */
-
-#ifdef CONFIG_SMP
#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 /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) */
-
-/* This is like alloc_percpu() except it simply takes a size, instead of a type. */
-void *_stp_alloc_percpu(size_t size)
-{
- int i;
- struct percpu_data *pdata = kmalloc(sizeof (*pdata), STP_ALLOC_FLAGS);
-
- if (!pdata)
- return NULL;
-
- for_each_cpu(i) {
- int node = cpu_to_node(i);
-
- if (node_online(node))
- pdata->ptrs[i] = kmalloc_node(size, STP_ALLOC_FLAGS, node);
- else
- pdata->ptrs[i] = kmalloc(size, STP_ALLOC_FLAGS);
-
- if (!pdata->ptrs[i])
- goto unwind_oom;
-
- _stp_allocated_memory += size;
- memset(pdata->ptrs[i], 0, size);
- }
-
- /* Catch derefs w/o wrappers */
- return (void *) (~(unsigned long) pdata);
-
-unwind_oom:
- while (--i >= 0) {
- if (!cpu_possible(i))
- continue;
- kfree(pdata->ptrs[i]);
- }
- kfree(pdata);
- return NULL;
-}
-
-void _stp_free_percpu(const void *objp)
-{
- int i;
- struct percpu_data *p = (struct percpu_data *) (~(unsigned long) objp);
+#else
+#define _stp_alloc_percpu(size) __alloc_percpu(size)
+#endif
- for_each_cpu(i)
- kfree(p->ptrs[i]);
- kfree(p);
-}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12)
+#define kmalloc_node(size,flags,node) kmalloc(size,flags)
#endif /* LINUX_VERSION_CODE */
-#else /* CONFIG_SMP */
-#define _stp_free_percpu(ptr) kfree(ptr)
-void *_stp_alloc_percpu(size_t size)
-{
- void *ret = kmalloc(size, STP_ALLOC_FLAGS);
- if (ret)
- memset(ret, 0, size);
- return ret;
-}
-#endif /* CONFIG_SMP */
-
#endif /* _ALLOC_C_ */
diff --git a/runtime/map.c b/runtime/map.c
index 86a1b270..9fc414a7 100644
--- a/runtime/map.c
+++ b/runtime/map.c
@@ -207,7 +207,7 @@ static int _stp_map_init(MAP m, unsigned max_entries, int type, int key_size, in
if (cpu < 0)
tmp = kmalloc(size, STP_ALLOC_FLAGS);
else
- tmp = kmalloc_node(size, STP_ALLOC_FLAGS, cpu);
+ tmp = kmalloc_node(size, STP_ALLOC_FLAGS, cpu_to_node(cpu));
if (!tmp)
return -1;
diff --git a/runtime/stat.c b/runtime/stat.c
index e00b8220..98a283cf 100644
--- a/runtime/stat.c
+++ b/runtime/stat.c
@@ -143,7 +143,7 @@ exit1:
void _stp_stat_del (Stat st)
{
if (st) {
- _stp_free_percpu (st->sd);
+ free_percpu (st->sd);
kfree (st->agg);
kfree (st);
}