Skip to content

Commit

Permalink
CRIS: check for memory allocation
Browse files Browse the repository at this point in the history
Add checking for allocated memory.  Indents and spaces are added to be
familiar with the kernel coding style.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Acked-by: Mikael Starvik <starvik@axis.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Cyrill Gorcunov authored and Linus Torvalds committed May 7, 2007
1 parent c65808e commit 542401d
Showing 1 changed file with 48 additions and 33 deletions.
81 changes: 48 additions & 33 deletions arch/cris/kernel/profile.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,39 +15,47 @@ 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;
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;
}

static ssize_t
read_cris_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos)
read_cris_profile(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
unsigned long p = *ppos;
if (p > SAMPLE_BUFFER_SIZE)
return 0;
if (p + count > SAMPLE_BUFFER_SIZE)
count = SAMPLE_BUFFER_SIZE - p;
if (copy_to_user(buf, sample_buffer + p,count))
unsigned long p = *ppos;

if (p > SAMPLE_BUFFER_SIZE)
return 0;

if (p + count > SAMPLE_BUFFER_SIZE)
count = SAMPLE_BUFFER_SIZE - p;
if (copy_to_user(buf, sample_buffer + p,count))
return -EFAULT;
memset(sample_buffer + p, 0, count);
*ppos += count;
return count;

memset(sample_buffer + p, 0, count);
*ppos += count;

return count;
}

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

static const struct file_operations cris_proc_profile_operations = {
Expand All @@ -58,16 +66,23 @@ static const struct file_operations cris_proc_profile_operations = {
static int
__init init_cris_profile(void)
{
struct proc_dir_entry *entry;
sample_buffer = kmalloc(SAMPLE_BUFFER_SIZE, GFP_KERNEL);
sample_buffer_pos = sample_buffer;
entry = create_proc_entry("system_profile", S_IWUSR | S_IRUGO, NULL);
if (entry) {
entry->proc_fops = &cris_proc_profile_operations;
entry->size = SAMPLE_BUFFER_SIZE;
}
prof_running = 1;
return 0;
struct proc_dir_entry *entry;

sample_buffer = kmalloc(SAMPLE_BUFFER_SIZE, GFP_KERNEL);
if (!sample_buffer) {
return -ENOMEM;
}

sample_buffer_pos = sample_buffer;

entry = create_proc_entry("system_profile", S_IWUSR | S_IRUGO, NULL);
if (entry) {
entry->proc_fops = &cris_proc_profile_operations;
entry->size = SAMPLE_BUFFER_SIZE;
}
prof_running = 1;

return 0;
}

__initcall(init_cris_profile);

0 comments on commit 542401d

Please sign in to comment.