cregit-Linux how code gets into the kernel

Release 4.14 arch/powerpc/include/asm/oprofile_impl.h

/*
 * Copyright (C) 2004 Anton Blanchard <anton@au.ibm.com>, IBM
 *
 * Based on alpha version.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 */

#ifndef _ASM_POWERPC_OPROFILE_IMPL_H

#define _ASM_POWERPC_OPROFILE_IMPL_H
#ifdef __KERNEL__


#define OP_MAX_COUNTER 8

/* Per-counter configuration as set via oprofilefs.  */

struct op_counter_config {
	
unsigned long enabled;
	
unsigned long event;
	
unsigned long count;
	/* Classic doesn't support per-counter user/kernel selection */
	
unsigned long kernel;
	
unsigned long user;
	
unsigned long unit_mask;
};

/* System-wide configuration as set via oprofilefs.  */

struct op_system_config {
#ifdef CONFIG_PPC64
	
unsigned long mmcr0;
	
unsigned long mmcr1;
	
unsigned long mmcra;
#ifdef CONFIG_OPROFILE_CELL
	/* Register for oprofile user tool to check cell kernel profiling
         * support.
         */
	
unsigned long cell_support;
#endif
#endif
	
unsigned long enable_kernel;
	
unsigned long enable_user;
};

/* Per-arch configuration */

struct op_powerpc_model {
	
int (*reg_setup) (struct op_counter_config *,
			   struct op_system_config *,
			   int num_counters);
	
int  (*cpu_setup) (struct op_counter_config *);
	
int  (*start) (struct op_counter_config *);
	
int  (*global_start) (struct op_counter_config *);
	
void (*stop) (void);
	
void (*global_stop) (void);
	
int (*sync_start)(void);
	
int (*sync_stop)(void);
	
void (*handle_interrupt) (struct pt_regs *,
				  struct op_counter_config *);
	
int num_counters;
};

extern struct op_powerpc_model op_model_fsl_emb;
extern struct op_powerpc_model op_model_power4;
extern struct op_powerpc_model op_model_7450;
extern struct op_powerpc_model op_model_cell;
extern struct op_powerpc_model op_model_pa6t;


/* All the classic PPC parts use these */

static inline unsigned int classic_ctr_read(unsigned int i) { switch(i) { case 0: return mfspr(SPRN_PMC1); case 1: return mfspr(SPRN_PMC2); case 2: return mfspr(SPRN_PMC3); case 3: return mfspr(SPRN_PMC4); case 4: return mfspr(SPRN_PMC5); case 5: return mfspr(SPRN_PMC6); /* No PPC32 chip has more than 6 so far */ #ifdef CONFIG_PPC64 case 6: return mfspr(SPRN_PMC7); case 7: return mfspr(SPRN_PMC8); #endif default: return 0; } }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton9393.00%133.33%
Andy Fleming66.00%133.33%
Olof Johansson11.00%133.33%
Total100100.00%3100.00%


static inline void classic_ctr_write(unsigned int i, unsigned int val) { switch(i) { case 0: mtspr(SPRN_PMC1, val); break; case 1: mtspr(SPRN_PMC2, val); break; case 2: mtspr(SPRN_PMC3, val); break; case 3: mtspr(SPRN_PMC4, val); break; case 4: mtspr(SPRN_PMC5, val); break; case 5: mtspr(SPRN_PMC6, val); break; /* No PPC32 chip has more than 6, yet */ #ifdef CONFIG_PPC64 case 6: mtspr(SPRN_PMC7, val); break; case 7: mtspr(SPRN_PMC8, val); break; #endif default: break; } }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton11094.02%133.33%
Andy Fleming65.13%133.33%
Olof Johansson10.85%133.33%
Total117100.00%3100.00%

extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth); #endif /* __KERNEL__ */ #endif /* _ASM_POWERPC_OPROFILE_IMPL_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton32370.07%16.25%
Andy Fleming275.86%318.75%
Maynard Johnson245.21%16.25%
Bob Nelson224.77%16.25%
Anton Blanchard163.47%212.50%
Brian Rogan153.25%16.25%
Stephen Rothwell112.39%212.50%
Carl E. Love91.95%16.25%
Olof Johansson71.52%212.50%
Arnd Bergmann61.30%16.25%
Masanari Iida10.22%16.25%
Total461100.00%16100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.