From b17808d9df9d6a5f531757fbc07a78f1ca6b5b87 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Wed, 25 Apr 2012 10:14:43 -0400 Subject: [PATCH] --- yaml --- r: 304951 b: refs/heads/master c: 9644302e3315e7e36495d230d5ac7125a316d33e h: refs/heads/master i: 304949: f263aa27d85bec3946815c075002933ede8ea748 304947: 2ca4de199f7a5225d57c1772d14b380ea4b9fed0 304943: 28cd2c9ac4b007629f3ea17e17e11bb38cd4353b v: v3 --- [refs] | 2 +- trunk/kernel/trace/ftrace.c | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 3e6b79270195..10cce427b449 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 706c81f87f84adbcf1f6553b9e6b69b3e28fc35a +refs/heads/master: 9644302e3315e7e36495d230d5ac7125a316d33e diff --git a/trunk/kernel/trace/ftrace.c b/trunk/kernel/trace/ftrace.c index e10f9e522c44..fc93562a6654 100644 --- a/trunk/kernel/trace/ftrace.c +++ b/trunk/kernel/trace/ftrace.c @@ -1411,6 +1411,8 @@ int ftrace_location(unsigned long ip) key.ip = ip; for (pg = ftrace_pages_start; pg; pg = pg->next) { + if (ip < pg->records[0].ip || ip > pg->records[pg->index - 1].ip) + continue; rec = bsearch(&key, pg->records, pg->index, sizeof(struct dyn_ftrace), ftrace_cmp_recs); @@ -1571,16 +1573,24 @@ void ftrace_bug(int failed, unsigned long ip) /* Return 1 if the address range is reserved for ftrace */ -int ftrace_text_reserved(void *start, void *end) +int ftrace_text_reserved(void *s, void *e) { struct dyn_ftrace *rec; struct ftrace_page *pg; + unsigned long start = (unsigned long)s; + unsigned long end = (unsigned long)e; + int i; - do_for_each_ftrace_rec(pg, rec) { - if (rec->ip <= (unsigned long)end && - rec->ip + MCOUNT_INSN_SIZE > (unsigned long)start) - return 1; - } while_for_each_ftrace_rec(); + for (pg = ftrace_pages_start; pg; pg = pg->next) { + if (end < pg->records[0].ip || + start >= (pg->records[pg->index - 1].ip + MCOUNT_INSN_SIZE)) + continue; + for (i = 0; i < pg->index; i++) { + rec = &pg->records[i]; + if (rec->ip <= end && rec->ip + MCOUNT_INSN_SIZE > start) + return 1; + } + } return 0; }