Hi,
I am looking at reorganizing the patches so they are better self-contained as
mentioned in:
http://kernelnewbies.org/UpstreamMerge/MergingStrategy
I set up a local clone of the bleeding edge kernel using the information from
the GIT and cogito information on:
http://linux.yyz.us/git-howto.html
http://www.kernel.org/pub/software/scm/cogito/README
I took a closer look perfmon-new-base-new-lib-060926.diff patch. Moved the
related change to the lib/Makefile to the same patch. I stripped out the support
for the arch specific support for the time being. How much better in performance
is the ia64 assembly version of the routine? Unless it has much better
performance than the C routine it might be better to just use the generic
version. That would eliminate the need to have an asm/perfmon.h for every
architecture even if it doesn't support perfmon (linux/perfmon.h includes
asm/perfmon.h). If need be, a later patch can add thet arch support back in. The
revised patch made against the leading edge kernel is attached.
The modified perfmon-base-mod.diff is also attached. It eliminates the kernel
name change and an extraneous white space change to kernel/ptrace.c
I am wondering how architectures without perfmon support are going to be
handled. When linux/perfmon.h is included in various files, an asm/perfmon.h
will be needed. The patches don't supply one for all the architectures.
It looks like much (but not all) of base.diff is in the newest kernel. Still
looking at that.
-Will
diff --git a/lib/Makefile b/lib/Makefile
index b036175..6daae81 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -5,7 +5,7 @@ #
lib-y := ctype.o string.o vsprintf.o cmdline.o \
bust_spinlocks.o rbtree.o radix-tree.o dump_stack.o \
idr.o div64.o int_sqrt.o bitmap.o extable.o prio_tree.o \
- sha1.o
+ sha1.o carta_random32.o
lib-$(CONFIG_MMU) += ioremap.o
lib-$(CONFIG_SMP) += cpumask.o
diff --git a/lib/carta_random32.c b/lib/carta_random32.c
new file mode 100644
index 0000000..3f3aa91
--- /dev/null
+++ b/lib/carta_random32.c
@@ -0,0 +1,26 @@
+/*
+ * Fast, simple, yet decent quality random number generator based on
+ * a paper by David G. Carta ("Two Fast Implementations of the
+ * `Minimal Standard' Random Number Generator," Communications of the
+ * ACM, January, 1990).
+ *
+ * Copyright (c) 2002-2005 Hewlett-Packard Development Company, L.P.
+ * Contributed by David Mosberger-Tang <[EMAIL PROTECTED]>
+ */
+#include <linux/types.h>
+#include <linux/module.h>
+
+u64 carta_random32 (u64 seed)
+{
+# define A 16807
+# define M ((u32) 1 << 31)
+ u64 s, prod = A * seed, p, q;
+
+ p = (prod >> 31) & (M - 1);
+ q = (prod >> 0) & (M - 1);
+ s = p + q;
+ if (s >= M)
+ s -= M - 1;
+ return s;
+}
+EXPORT_SYMBOL(carta_random32);
diff --git a/Makefile b/Makefile
index 4c6c5e3..602e62e 100644
--- a/Makefile
+++ b/Makefile
@@ -558,7 +558,7 @@ export mod_strip_cmd
ifeq ($(KBUILD_EXTMOD),)
-core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/
+core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ perfmon/
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 331f450..00ff567 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -87,6 +87,7 @@ #include <asm/processor.h>
struct exec_domain;
struct futex_pi_state;
+struct pfm_context;
/*
* List of flags we want to share for kernel threads,
@@ -1024,6 +1025,9 @@ #endif
#ifdef CONFIG_TASK_DELAY_ACCT
struct task_delay_info *delays;
#endif
+#ifdef CONFIG_PERFMON
+ struct pfm_context *pfm_context;
+#endif
};
static inline pid_t process_group(struct task_struct *tsk)
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index 3efcfc7..14c4ee9 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -29,6 +29,13 @@ struct msqid_ds;
struct new_utsname;
struct nfsctl_arg;
struct __old_kernel_stat;
+struct pfarg_ctx;
+struct pfarg_pmc;
+struct pfarg_pmd;
+struct pfarg_start;
+struct pfarg_load;
+struct pfarg_setinfo;
+struct pfarg_setdesc;
struct pollfd;
struct rlimit;
struct rusage;
@@ -601,4 +608,27 @@ asmlinkage long sys_getcpu(unsigned __us
int kernel_execve(const char *filename, char *const argv[], char *const envp[]);
+asmlinkage long sys_pfm_create_context(struct pfarg_ctx __user *ureq,
+ void __user *uarg, size_t smpl_size);
+asmlinkage long sys_pfm_write_pmcs(int fd, struct pfarg_pmc __user *ureq,
+ int count);
+asmlinkage long sys_pfm_write_pmds(int fd, struct pfarg_pmd __user *ureq,
+ int count);
+asmlinkage long sys_pfm_read_pmds(int fd, struct pfarg_pmd __user *ureq,
+ int count);
+asmlinkage long sys_pfm_restart(int fd);
+asmlinkage long sys_pfm_stop(int fd);
+asmlinkage long sys_pfm_start(int fd, struct pfarg_start __user *ureq);
+asmlinkage long sys_pfm_load_context(int fd, struct pfarg_load __user *ureq);
+asmlinkage long sys_pfm_unload_context(int fd);
+asmlinkage long sys_pfm_delete_evtsets(int fd,
+ struct pfarg_setinfo __user *ureq,
+ int count);
+asmlinkage long sys_pfm_create_evtsets(int fd,
+ struct pfarg_setdesc __user *ureq,
+ int count);
+asmlinkage long sys_pfm_getinfo_evtsets(int fd,
+ struct pfarg_setinfo __user *ureq,
+ int count);
+
#endif
diff --git a/kernel/sched.c b/kernel/sched.c
index 53608a5..20ff3af 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -52,6 +52,7 @@ #include <linux/times.h>
#include <linux/tsacct_kern.h>
#include <linux/kprobes.h>
#include <linux/delayacct.h>
+#include <linux/perfmon.h>
#include <asm/tlb.h>
#include <asm/unistd.h>
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index 7a3b2e7..f86868b 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -112,6 +112,19 @@ cond_syscall(sys_vm86);
cond_syscall(compat_sys_ipc);
cond_syscall(compat_sys_sysctl);
+cond_syscall(sys_pfm_create_context);
+cond_syscall(sys_pfm_write_pmcs);
+cond_syscall(sys_pfm_write_pmds);
+cond_syscall(sys_pfm_read_pmds);
+cond_syscall(sys_pfm_restart);
+cond_syscall(sys_pfm_start);
+cond_syscall(sys_pfm_stop);
+cond_syscall(sys_pfm_load_context);
+cond_syscall(sys_pfm_unload_context);
+cond_syscall(sys_pfm_create_evtsets);
+cond_syscall(sys_pfm_delete_evtsets);
+cond_syscall(sys_pfm_getinfo_evtsets);
+
/* arch-specific weak syscall entries */
cond_syscall(sys_pciconfig_read);
cond_syscall(sys_pciconfig_write);
_______________________________________________
perfmon mailing list
[email protected]
http://www.hpl.hp.com/hosted/linux/mail-archives/perfmon/