Re: [PATCH 02/22] 2.6.22-rc3 perfmon2 : generic kernel modifications

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 29 May 2007, Stephane Eranian wrote:

> Only in linux-2.6.22/Documentation: perfmon2.txt

You need to send -N to diff(1) so this and perfmon.h, perfmon_dfl_smpl.h, 
perfmon_fmt.h, and perfmon_pmu.h will be included in the patch.  A 
patchset should compile and work correctly at any time when each patch is 
applied consecutively.  Providing perfmon.h, for example, in patch 13 
doesn't allow individual testing of all prior patches.

> diff --exclude=.git -urp --exclude-from=/tmp/excl315935 linux-2.6.22.base/Makefile linux-2.6.22/Makefile
> --- linux-2.6.22.base/Makefile	2007-05-29 03:17:15.000000000 -0700
> +++ linux-2.6.22/Makefile	2007-05-29 03:24:14.000000000 -0700
> @@ -553,7 +553,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 --exclude=.git -urp --exclude-from=/tmp/excl315935 linux-2.6.22.base/drivers/oprofile/oprofile_files.c linux-2.6.22/drivers/oprofile/oprofile_files.c
> --- linux-2.6.22.base/drivers/oprofile/oprofile_files.c	2007-05-29 03:17:41.000000000 -0700
> +++ linux-2.6.22/drivers/oprofile/oprofile_files.c	2007-05-29 03:24:14.000000000 -0700
> @@ -117,7 +117,17 @@ static ssize_t dump_write(struct file * 
>  static const struct file_operations dump_fops = {
>  	.write		= dump_write,
>  };
> - 
> +
> +static ssize_t implementation(struct file * file, char __user * buf, size_t count, loff_t * offset)
> +{
> +	return oprofilefs_str_to_user(oprofile_ops.implementation, buf, count, offset);
> +}
> +
> +
> +static struct file_operations implementation_fops = {
> +	.read		= implementation,
> +};
> +
>  void oprofile_create_files(struct super_block * sb, struct dentry * root)
>  {
>  	oprofilefs_create_file(sb, root, "enable", &enable_fops);
> @@ -127,6 +137,7 @@ void oprofile_create_files(struct super_
>  	oprofilefs_create_ulong(sb, root, "buffer_watershed", &fs_buffer_watershed);
>  	oprofilefs_create_ulong(sb, root, "cpu_buffer_size", &fs_cpu_buffer_size);
>  	oprofilefs_create_file(sb, root, "cpu_type", &cpu_type_fops); 
> +	oprofilefs_create_file(sb, root, "implementation", &implementation_fops);
>  	oprofilefs_create_file(sb, root, "backtrace_depth", &depth_fops);
>  	oprofilefs_create_file(sb, root, "pointer_size", &pointer_size_fops);
>  	oprofile_create_stats_files(sb, root);

The commentary for how to interpret this new file is lacking; it appears 
as though it will return "timer", "oprofile", or "nmi_timer" for existing 
i386 subsystems and "perfmon2" with this addition.  This should be 
documented.

It isn't set generically in oprofile_arch_init() for other architectures.

> diff --exclude=.git -urp --exclude-from=/tmp/excl315935 linux-2.6.22.base/drivers/oprofile/timer_int.c linux-2.6.22/drivers/oprofile/timer_int.c
> --- linux-2.6.22.base/drivers/oprofile/timer_int.c	2007-05-29 03:17:41.000000000 -0700
> +++ linux-2.6.22/drivers/oprofile/timer_int.c	2007-05-29 03:24:14.000000000 -0700
> @@ -43,4 +43,5 @@ void __init oprofile_timer_init(struct o
>  	ops->start = timer_start;
>  	ops->stop = timer_stop;
>  	ops->cpu_type = "timer";
> +	ops->implementation = "timer";
>  }
> diff --exclude=.git -urp --exclude-from=/tmp/excl315935 linux-2.6.22.base/include/linux/oprofile.h linux-2.6.22/include/linux/oprofile.h
> --- linux-2.6.22.base/include/linux/oprofile.h	2007-05-29 03:17:57.000000000 -0700
> +++ linux-2.6.22/include/linux/oprofile.h	2007-05-29 03:24:14.000000000 -0700
> @@ -39,6 +39,8 @@ struct oprofile_operations {
>  	void (*backtrace)(struct pt_regs * const regs, unsigned int depth);
>  	/* CPU identification string. */
>  	char * cpu_type;
> +	/* Identify method of  string. */
> +	char * implementation;
>  };
>  
>  /**
> Only in linux-2.6.22/include/linux: perfmon.h
> Only in linux-2.6.22/include/linux: perfmon_dfl_smpl.h
> Only in linux-2.6.22/include/linux: perfmon_fmt.h
> Only in linux-2.6.22/include/linux: perfmon_pmu.h
> diff --exclude=.git -urp --exclude-from=/tmp/excl315935 linux-2.6.22.base/include/linux/sched.h linux-2.6.22/include/linux/sched.h
> --- linux-2.6.22.base/include/linux/sched.h	2007-05-29 03:17:57.000000000 -0700
> +++ linux-2.6.22/include/linux/sched.h	2007-05-29 03:24:14.000000000 -0700
> @@ -89,6 +89,7 @@ struct sched_param {
>  struct exec_domain;
>  struct futex_pi_state;
>  struct bio;
> +struct pfm_context;
>  
>  /*
>   * List of flags we want to share for kernel threads,
> @@ -1076,6 +1077,9 @@ struct task_struct {
>  #ifdef CONFIG_FAULT_INJECTION
>  	int make_it_fail;
>  #endif
> +#ifdef CONFIG_PERFMON
> +	struct pfm_context *pfm_context;
> +#endif
>  };
>  
>  static inline pid_t process_group(struct task_struct *tsk)
> diff --exclude=.git -urp --exclude-from=/tmp/excl315935 linux-2.6.22.base/include/linux/syscalls.h linux-2.6.22/include/linux/syscalls.h
> --- linux-2.6.22.base/include/linux/syscalls.h	2007-05-29 03:17:57.000000000 -0700
> +++ linux-2.6.22/include/linux/syscalls.h	2007-05-29 03:24:14.000000000 -0700
> @@ -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;
> @@ -611,4 +618,27 @@ asmlinkage long sys_eventfd(unsigned int
>  
>  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 --exclude=.git -urp --exclude-from=/tmp/excl315935 linux-2.6.22.base/kernel/sched.c linux-2.6.22/kernel/sched.c
> --- linux-2.6.22.base/kernel/sched.c	2007-05-29 03:17:57.000000000 -0700
> +++ linux-2.6.22/kernel/sched.c	2007-05-29 03:24:14.000000000 -0700
> @@ -53,6 +53,7 @@
>  #include <linux/kprobes.h>
>  #include <linux/delayacct.h>
>  #include <linux/reciprocal_div.h>
> +#include <linux/perfmon.h>

perfmon.h isn't included in this patch so the inclusion of it here is a 
mystery but I suspect it's for pfm_ctxsw() later.

		David
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux