summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWenji Huang <wenji.huang@oracle.com>2010-03-11 17:59:16 +0800
committerWenji Huang <wenji.huang@oracle.com>2010-03-11 17:59:16 +0800
commitdf841db1a8a3dd18228edc20b12044d5d31001a5 (patch)
tree13b0fe57d3f0fb2085f6b04edf1a48e5befb1160
parentda9e11bd5cd3cbedbf794a0e8a83956bd178ba60 (diff)
downloadsystemtap-steved-df841db1a8a3dd18228edc20b12044d5d31001a5.tar.gz
systemtap-steved-df841db1a8a3dd18228edc20b12044d5d31001a5.tar.xz
systemtap-steved-df841db1a8a3dd18228edc20b12044d5d31001a5.zip
Update tapset proc_mem for 2.6.34
* tapset/proc_mem.stp(_stp_get_mm_counter_file_rss, _stp_get_mm_counter_anon_rss): Use embedded function.
-rw-r--r--tapset/proc_mem.stp32
1 files changed, 32 insertions, 0 deletions
diff --git a/tapset/proc_mem.stp b/tapset/proc_mem.stp
index 825a7570..e4386bde 100644
--- a/tapset/proc_mem.stp
+++ b/tapset/proc_mem.stp
@@ -30,9 +30,25 @@
return NULL;
return current->mm;
}
+#include <linux/mm_types.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)
+static inline unsigned long k_get_mm_counter(struct mm_struct *mm, int member)
+{
+#if USE_SPLIT_PTLOCKS
+ return (unsigned long)atomic_long_read(&mm->rss_stat.count[member]);
+#else
+ return mm->rss_stat.count[member];
+#endif
+}
+#endif
%}
function _stp_get_mm_counter_file_rss:long(mm:long)
+%(kernel_v >= "2.6.34" %?
+%{ /* pure */ /* unprivileged */
+ THIS->__retvalue = k_get_mm_counter((struct mm_struct*)(unsigned long)THIS->mm, MM_FILEPAGES);
+%}
+%:
{
%( CONFIG_NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS %?
return @cast(mm, "mm_struct", "kernel<linux/sched.h>")->_file_rss->counter;
@@ -40,8 +56,14 @@ function _stp_get_mm_counter_file_rss:long(mm:long)
return @cast(mm, "mm_struct", "kernel<linux/sched.h>")->_file_rss;
%)
}
+%)
function _stp_get_mm_counter_anon_rss(mm:long)
+%(kernel_v >= "2.6.34" %?
+%{ /* pure */ /* unprivileged */
+ THIS->__retvalue = k_get_mm_counter((struct mm_struct*)(unsigned long)THIS->mm, MM_ANONPAGES);
+%}
+%:
{
%( CONFIG_NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS %?
return @cast(mm, "mm_struct", "kernel<linux/sched.h>")->_anon_rss->counter;
@@ -49,6 +71,7 @@ function _stp_get_mm_counter_anon_rss(mm:long)
return @cast(mm, "mm_struct", "kernel<linux/sched.h>")->_anon_rss;
%)
}
+%)
/**
* sfunction proc_mem_size - Total program virtual memory size in pages
@@ -98,8 +121,13 @@ function proc_mem_rss:long ()
%{ /* pure */ /* unprivileged */
struct mm_struct *mm = _stp_proc_mm ();
if (mm)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)
+ THIS->__retvalue = k_get_mm_counter(mm, MM_FILEPAGES)
+ + k_get_mm_counter(mm, MM_ANONPAGES);
+#else
THIS->__retvalue = (get_mm_counter(mm, file_rss)
+ get_mm_counter(mm, anon_rss));
+#endif
else
THIS->__retvalue = 0;
%}
@@ -137,7 +165,11 @@ function proc_mem_shr:long ()
%{ /* pure */ /* unprivileged */
struct mm_struct *mm = _stp_proc_mm ();
if (mm)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)
+ THIS->__retvalue = k_get_mm_counter(mm, MM_FILEPAGES);
+#else
THIS->__retvalue = get_mm_counter(mm, file_rss);
+#endif
else
THIS->__retvalue = 0;
%}