|
@@ -96,19 +96,6 @@ static int mod_code_status; /* holds return value of text write */
|
|
static void *mod_code_ip; /* holds the IP to write to */
|
|
static void *mod_code_ip; /* holds the IP to write to */
|
|
static void *mod_code_newcode; /* holds the text to write to the IP */
|
|
static void *mod_code_newcode; /* holds the text to write to the IP */
|
|
|
|
|
|
-static unsigned nmi_wait_count;
|
|
|
|
-static atomic_t nmi_update_count = ATOMIC_INIT(0);
|
|
|
|
-
|
|
|
|
-int ftrace_arch_read_dyn_info(char *buf, int size)
|
|
|
|
-{
|
|
|
|
- int r;
|
|
|
|
-
|
|
|
|
- r = snprintf(buf, size, "%u %u",
|
|
|
|
- nmi_wait_count,
|
|
|
|
- atomic_read(&nmi_update_count));
|
|
|
|
- return r;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void clear_mod_flag(void)
|
|
static void clear_mod_flag(void)
|
|
{
|
|
{
|
|
int old = atomic_read(&nmi_running);
|
|
int old = atomic_read(&nmi_running);
|
|
@@ -144,7 +131,6 @@ void arch_ftrace_nmi_enter(void)
|
|
if (atomic_inc_return(&nmi_running) & MOD_CODE_WRITE_FLAG) {
|
|
if (atomic_inc_return(&nmi_running) & MOD_CODE_WRITE_FLAG) {
|
|
smp_rmb();
|
|
smp_rmb();
|
|
ftrace_mod_code();
|
|
ftrace_mod_code();
|
|
- atomic_inc(&nmi_update_count);
|
|
|
|
}
|
|
}
|
|
/* Must have previous changes seen before executions */
|
|
/* Must have previous changes seen before executions */
|
|
smp_mb();
|
|
smp_mb();
|
|
@@ -165,8 +151,6 @@ static void wait_for_nmi_and_set_mod_flag(void)
|
|
do {
|
|
do {
|
|
cpu_relax();
|
|
cpu_relax();
|
|
} while (atomic_cmpxchg(&nmi_running, 0, MOD_CODE_WRITE_FLAG));
|
|
} while (atomic_cmpxchg(&nmi_running, 0, MOD_CODE_WRITE_FLAG));
|
|
-
|
|
|
|
- nmi_wait_count++;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static void wait_for_nmi(void)
|
|
static void wait_for_nmi(void)
|
|
@@ -177,8 +161,6 @@ static void wait_for_nmi(void)
|
|
do {
|
|
do {
|
|
cpu_relax();
|
|
cpu_relax();
|
|
} while (atomic_read(&nmi_running));
|
|
} while (atomic_read(&nmi_running));
|
|
-
|
|
|
|
- nmi_wait_count++;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|