Skip to content

Commit

Permalink
x86: Properly _init-annotate NMI selftest code
Browse files Browse the repository at this point in the history
After all, this code is being run once at boot only (if
configured in at all).

Signed-off-by: Jan Beulich <[email protected]>
Acked-by: Don Zickus <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Ingo Molnar <[email protected]>
  • Loading branch information
jbeulich authored and Ingo Molnar committed Feb 27, 2012
1 parent 21c3fcf commit f0ba662
Showing 1 changed file with 19 additions and 18 deletions.
37 changes: 19 additions & 18 deletions arch/x86/kernel/nmi_selftest.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include <linux/smp.h>
#include <linux/cpumask.h>
#include <linux/delay.h>
#include <linux/init.h>

#include <asm/apic.h>
#include <asm/nmi.h>
Expand All @@ -20,35 +21,35 @@
#define FAILURE 1
#define TIMEOUT 2

static int nmi_fail;
static int __initdata nmi_fail;

/* check to see if NMI IPIs work on this machine */
static DECLARE_BITMAP(nmi_ipi_mask, NR_CPUS) __read_mostly;
static DECLARE_BITMAP(nmi_ipi_mask, NR_CPUS) __initdata;

static int testcase_total;
static int testcase_successes;
static int expected_testcase_failures;
static int unexpected_testcase_failures;
static int unexpected_testcase_unknowns;
static int __initdata testcase_total;
static int __initdata testcase_successes;
static int __initdata expected_testcase_failures;
static int __initdata unexpected_testcase_failures;
static int __initdata unexpected_testcase_unknowns;

static int nmi_unk_cb(unsigned int val, struct pt_regs *regs)
static int __init nmi_unk_cb(unsigned int val, struct pt_regs *regs)
{
unexpected_testcase_unknowns++;
return NMI_HANDLED;
}

static void init_nmi_testsuite(void)
static void __init init_nmi_testsuite(void)
{
/* trap all the unknown NMIs we may generate */
register_nmi_handler(NMI_UNKNOWN, nmi_unk_cb, 0, "nmi_selftest_unk");
}

static void cleanup_nmi_testsuite(void)
static void __init cleanup_nmi_testsuite(void)
{
unregister_nmi_handler(NMI_UNKNOWN, "nmi_selftest_unk");
}

static int test_nmi_ipi_callback(unsigned int val, struct pt_regs *regs)
static int __init test_nmi_ipi_callback(unsigned int val, struct pt_regs *regs)
{
int cpu = raw_smp_processor_id();

Expand All @@ -58,7 +59,7 @@ static int test_nmi_ipi_callback(unsigned int val, struct pt_regs *regs)
return NMI_DONE;
}

static void test_nmi_ipi(struct cpumask *mask)
static void __init test_nmi_ipi(struct cpumask *mask)
{
unsigned long timeout;

Expand Down Expand Up @@ -86,27 +87,27 @@ static void test_nmi_ipi(struct cpumask *mask)
return;
}

static void remote_ipi(void)
static void __init remote_ipi(void)
{
cpumask_copy(to_cpumask(nmi_ipi_mask), cpu_online_mask);
cpumask_clear_cpu(smp_processor_id(), to_cpumask(nmi_ipi_mask));
if (!cpumask_empty(to_cpumask(nmi_ipi_mask)))
test_nmi_ipi(to_cpumask(nmi_ipi_mask));
}

static void local_ipi(void)
static void __init local_ipi(void)
{
cpumask_clear(to_cpumask(nmi_ipi_mask));
cpumask_set_cpu(smp_processor_id(), to_cpumask(nmi_ipi_mask));
test_nmi_ipi(to_cpumask(nmi_ipi_mask));
}

static void reset_nmi(void)
static void __init reset_nmi(void)
{
nmi_fail = 0;
}

static void dotest(void (*testcase_fn)(void), int expected)
static void __init dotest(void (*testcase_fn)(void), int expected)
{
testcase_fn();
/*
Expand All @@ -131,12 +132,12 @@ static void dotest(void (*testcase_fn)(void), int expected)
reset_nmi();
}

static inline void print_testname(const char *testname)
static inline void __init print_testname(const char *testname)
{
printk("%12s:", testname);
}

void nmi_selftest(void)
void __init nmi_selftest(void)
{
init_nmi_testsuite();

Expand Down

0 comments on commit f0ba662

Please sign in to comment.