diff options
| author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2009-11-06 15:46:18 +0000 | 
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2009-11-06 15:46:18 +0000 | 
| commit | 330f28f691e9b349e34adcaf82b273cf061bb491 (patch) | |
| tree | fca3bfe41eff25ef19f576cef1979c68f6521af5 /kernel/trace/ftrace.c | |
| parent | fe3e78e073d25308756f38019956061153267769 (diff) | |
| parent | 6fc786d5034ed7ce2d43c459211137de6d99dd28 (diff) | |
Merge branch 'for-2.6.32' into for-2.6.33
Diffstat (limited to 'kernel/trace/ftrace.c')
| -rw-r--r-- | kernel/trace/ftrace.c | 29 | 
1 files changed, 12 insertions, 17 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 46592feab5a..9c451a1930b 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -225,7 +225,11 @@ static void ftrace_update_pid_func(void)  	if (ftrace_trace_function == ftrace_stub)  		return; +#ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST  	func = ftrace_trace_function; +#else +	func = __ftrace_trace_function; +#endif  	if (ftrace_pid_trace) {  		set_ftrace_pid_function(func); @@ -736,7 +740,7 @@ ftrace_profile_write(struct file *filp, const char __user *ubuf,   out:  	mutex_unlock(&ftrace_profile_lock); -	filp->f_pos += cnt; +	*ppos += cnt;  	return cnt;  } @@ -1074,14 +1078,9 @@ static void ftrace_replace_code(int enable)  		failed = __ftrace_replace_code(rec, enable);  		if (failed) {  			rec->flags |= FTRACE_FL_FAILED; -			if ((system_state == SYSTEM_BOOTING) || -			    !core_kernel_text(rec->ip)) { -				ftrace_free_rec(rec); -				} else { -				ftrace_bug(failed, rec->ip); -					/* Stop processing */ -					return; -				} +			ftrace_bug(failed, rec->ip); +			/* Stop processing */ +			return;  		}  	} while_for_each_ftrace_rec();  } @@ -2658,19 +2657,17 @@ static int ftrace_convert_nops(struct module *mod,  }  #ifdef CONFIG_MODULES -void ftrace_release(void *start, void *end) +void ftrace_release_mod(struct module *mod)  {  	struct dyn_ftrace *rec;  	struct ftrace_page *pg; -	unsigned long s = (unsigned long)start; -	unsigned long e = (unsigned long)end; -	if (ftrace_disabled || !start || start == end) +	if (ftrace_disabled)  		return;  	mutex_lock(&ftrace_lock);  	do_for_each_ftrace_rec(pg, rec) { -		if ((rec->ip >= s) && (rec->ip < e)) { +		if (within_module_core(rec->ip, mod)) {  			/*  			 * rec->ip is changed in ftrace_free_rec()  			 * It should not between s and e if record was freed. @@ -2702,9 +2699,7 @@ static int ftrace_module_notify(struct notifier_block *self,  				   mod->num_ftrace_callsites);  		break;  	case MODULE_STATE_GOING: -		ftrace_release(mod->ftrace_callsites, -			       mod->ftrace_callsites + -			       mod->num_ftrace_callsites); +		ftrace_release_mod(mod);  		break;  	}  | 
