Loading drivers/gpu/msm/kgsl_debugfs.c +71 −9 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ static char get_cacheflag(const struct kgsl_memdesc *m) } static int print_mem_entry(int id, void *ptr, void *data) static int print_mem_entry(void *data, void *ptr) { struct seq_file *s = data; struct kgsl_mem_entry *entry = ptr; Loading Loading @@ -164,25 +164,83 @@ static int print_mem_entry(int id, void *ptr, void *data) return 0; } static int process_mem_print(struct seq_file *s, void *unused) static struct kgsl_mem_entry *process_mem_seq_find(struct seq_file *s, void *ptr, loff_t pos) { struct kgsl_mem_entry *entry = ptr; struct kgsl_process_private *private = s->private; int id = 0; loff_t temp_pos = 1; seq_printf(s, "%16s %16s %16s %5s %9s %10s %16s %5s %16s\n", "gpuaddr", "useraddr", "size", "id", "flags", "type", "usage", "sglen", "mapsize"); if (entry != SEQ_START_TOKEN) id = entry->id + 1; spin_lock(&private->mem_lock); idr_for_each(&private->mem_idr, print_mem_entry, s); for (entry = idr_get_next(&private->mem_idr, &id); entry; id++, entry = idr_get_next(&private->mem_idr, &id), temp_pos++) { if (temp_pos == pos && kgsl_mem_entry_get(entry)) { spin_unlock(&private->mem_lock); goto found; } } spin_unlock(&private->mem_lock); entry = NULL; found: if (ptr != SEQ_START_TOKEN) kgsl_mem_entry_put(ptr); return entry; } static void *process_mem_seq_start(struct seq_file *s, loff_t *pos) { loff_t seq_file_offset = *pos; if (seq_file_offset == 0) return SEQ_START_TOKEN; else return process_mem_seq_find(s, SEQ_START_TOKEN, seq_file_offset); } static void process_mem_seq_stop(struct seq_file *s, void *ptr) { if (ptr && ptr != SEQ_START_TOKEN) kgsl_mem_entry_put(ptr); } static void *process_mem_seq_next(struct seq_file *s, void *ptr, loff_t *pos) { ++*pos; return process_mem_seq_find(s, ptr, 1); } static int process_mem_seq_show(struct seq_file *s, void *ptr) { if (ptr == SEQ_START_TOKEN) { seq_printf(s, "%16s %16s %16s %5s %9s %10s %16s %5s %16s\n", "gpuaddr", "useraddr", "size", "id", "flags", "type", "usage", "sglen", "mapsize"); return 0; } else return print_mem_entry(s, ptr); } static const struct seq_operations process_mem_seq_fops = { .start = process_mem_seq_start, .stop = process_mem_seq_stop, .next = process_mem_seq_next, .show = process_mem_seq_show, }; static int process_mem_open(struct inode *inode, struct file *file) { int ret; pid_t pid = (pid_t) (unsigned long) inode->i_private; struct seq_file *s = NULL; struct kgsl_process_private *private = NULL; private = kgsl_process_private_find(pid); Loading @@ -190,9 +248,13 @@ static int process_mem_open(struct inode *inode, struct file *file) if (!private) return -ENODEV; ret = single_open(file, process_mem_print, private); ret = seq_open(file, &process_mem_seq_fops); if (ret) kgsl_process_private_put(private); else { s = file->private_data; s->private = private; } return ret; } Loading @@ -205,7 +267,7 @@ static int process_mem_release(struct inode *inode, struct file *file) if (private) kgsl_process_private_put(private); return single_release(inode, file); return seq_release(inode, file); } static const struct file_operations process_mem_fops = { Loading Loading
drivers/gpu/msm/kgsl_debugfs.c +71 −9 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ static char get_cacheflag(const struct kgsl_memdesc *m) } static int print_mem_entry(int id, void *ptr, void *data) static int print_mem_entry(void *data, void *ptr) { struct seq_file *s = data; struct kgsl_mem_entry *entry = ptr; Loading Loading @@ -164,25 +164,83 @@ static int print_mem_entry(int id, void *ptr, void *data) return 0; } static int process_mem_print(struct seq_file *s, void *unused) static struct kgsl_mem_entry *process_mem_seq_find(struct seq_file *s, void *ptr, loff_t pos) { struct kgsl_mem_entry *entry = ptr; struct kgsl_process_private *private = s->private; int id = 0; loff_t temp_pos = 1; seq_printf(s, "%16s %16s %16s %5s %9s %10s %16s %5s %16s\n", "gpuaddr", "useraddr", "size", "id", "flags", "type", "usage", "sglen", "mapsize"); if (entry != SEQ_START_TOKEN) id = entry->id + 1; spin_lock(&private->mem_lock); idr_for_each(&private->mem_idr, print_mem_entry, s); for (entry = idr_get_next(&private->mem_idr, &id); entry; id++, entry = idr_get_next(&private->mem_idr, &id), temp_pos++) { if (temp_pos == pos && kgsl_mem_entry_get(entry)) { spin_unlock(&private->mem_lock); goto found; } } spin_unlock(&private->mem_lock); entry = NULL; found: if (ptr != SEQ_START_TOKEN) kgsl_mem_entry_put(ptr); return entry; } static void *process_mem_seq_start(struct seq_file *s, loff_t *pos) { loff_t seq_file_offset = *pos; if (seq_file_offset == 0) return SEQ_START_TOKEN; else return process_mem_seq_find(s, SEQ_START_TOKEN, seq_file_offset); } static void process_mem_seq_stop(struct seq_file *s, void *ptr) { if (ptr && ptr != SEQ_START_TOKEN) kgsl_mem_entry_put(ptr); } static void *process_mem_seq_next(struct seq_file *s, void *ptr, loff_t *pos) { ++*pos; return process_mem_seq_find(s, ptr, 1); } static int process_mem_seq_show(struct seq_file *s, void *ptr) { if (ptr == SEQ_START_TOKEN) { seq_printf(s, "%16s %16s %16s %5s %9s %10s %16s %5s %16s\n", "gpuaddr", "useraddr", "size", "id", "flags", "type", "usage", "sglen", "mapsize"); return 0; } else return print_mem_entry(s, ptr); } static const struct seq_operations process_mem_seq_fops = { .start = process_mem_seq_start, .stop = process_mem_seq_stop, .next = process_mem_seq_next, .show = process_mem_seq_show, }; static int process_mem_open(struct inode *inode, struct file *file) { int ret; pid_t pid = (pid_t) (unsigned long) inode->i_private; struct seq_file *s = NULL; struct kgsl_process_private *private = NULL; private = kgsl_process_private_find(pid); Loading @@ -190,9 +248,13 @@ static int process_mem_open(struct inode *inode, struct file *file) if (!private) return -ENODEV; ret = single_open(file, process_mem_print, private); ret = seq_open(file, &process_mem_seq_fops); if (ret) kgsl_process_private_put(private); else { s = file->private_data; s->private = private; } return ret; } Loading @@ -205,7 +267,7 @@ static int process_mem_release(struct inode *inode, struct file *file) if (private) kgsl_process_private_put(private); return single_release(inode, file); return seq_release(inode, file); } static const struct file_operations process_mem_fops = { Loading