cregit-Linux how code gets into the kernel

Release 4.7 arch/cris/kernel/profile.c

Directory: arch/cris/kernel
#include <linux/init.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <asm/ptrace.h>
#include <asm/uaccess.h>


#define SAMPLE_BUFFER_SIZE 8192


static char *sample_buffer;

static char *sample_buffer_pos;

static int prof_running = 0;


void cris_profile_sample(struct pt_regs *regs) { if (!prof_running) return; if (user_mode(regs)) *(unsigned int*)sample_buffer_pos = current->pid; else *(unsigned int*)sample_buffer_pos = 0; *(unsigned int *)(sample_buffer_pos + 4) = instruction_pointer(regs); sample_buffer_pos += 8; if (sample_buffer_pos == sample_buffer + SAMPLE_BUFFER_SIZE) sample_buffer_pos = sample_buffer; }

Contributors

PersonTokensPropCommitsCommitProp
mikael starvikmikael starvik7898.73%150.00%
jesper nilssonjesper nilsson11.27%150.00%
Total79100.00%2100.00%


static ssize_t read_cris_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos) { unsigned long p = *ppos; ssize_t ret; ret = simple_read_from_buffer(buf, count, ppos, sample_buffer, SAMPLE_BUFFER_SIZE); if (ret < 0) return ret; memset(sample_buffer + p, 0, ret); return ret; }

Contributors

PersonTokensPropCommitsCommitProp
mikael starvikmikael starvik5273.24%150.00%
akinobu mitaakinobu mita1926.76%150.00%
Total71100.00%2100.00%


static ssize_t write_cris_profile(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { sample_buffer_pos = sample_buffer; memset(sample_buffer, 0, SAMPLE_BUFFER_SIZE); return count < SAMPLE_BUFFER_SIZE ? count : SAMPLE_BUFFER_SIZE; }

Contributors

PersonTokensPropCommitsCommitProp
mikael starvikmikael starvik3780.43%150.00%
jesper nilssonjesper nilsson919.57%150.00%
Total46100.00%2100.00%

static const struct file_operations cris_proc_profile_operations = { .read = read_cris_profile, .write = write_cris_profile, .llseek = default_llseek, };
static int __init init_cris_profile(void) { struct proc_dir_entry *entry; sample_buffer = kmalloc(SAMPLE_BUFFER_SIZE, GFP_KERNEL); if (!sample_buffer) { return -ENOMEM; } sample_buffer_pos = sample_buffer; entry = proc_create("system_profile", S_IWUSR | S_IRUGO, NULL, &cris_proc_profile_operations); if (entry) { proc_set_size(entry, SAMPLE_BUFFER_SIZE); } prof_running = 1; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
mikael starvikmikael starvik5574.32%125.00%
cyrill gorcunovcyrill gorcunov1114.86%125.00%
denis v. lunevdenis v. lunev45.41%125.00%
geert uytterhoevengeert uytterhoeven45.41%125.00%
Total74100.00%4100.00%

__initcall(init_cris_profile);

Overall Contributors

PersonTokensPropCommitsCommitProp
mikael starvikmikael starvik28583.33%111.11%
akinobu mitaakinobu mita195.56%111.11%
cyrill gorcunovcyrill gorcunov113.22%111.11%
jesper nilssonjesper nilsson102.92%111.11%
arnd bergmannarnd bergmann51.46%111.11%
denis v. lunevdenis v. lunev41.17%111.11%
geert uytterhoevengeert uytterhoeven41.17%111.11%
tejun heotejun heo30.88%111.11%
arjan van de venarjan van de ven10.29%111.11%
Total342100.00%9100.00%
Directory: arch/cris/kernel
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}