return def_to_bigsmp;
}
-const struct genapic __initconstrel apic_bigsmp = {
+const struct genapic __initconst_cf_clobber apic_bigsmp = {
APIC_INIT("bigsmp", probe_bigsmp),
GENAPIC_PHYS
};
#include <asm/io_apic.h>
/* should be called last. */
-const struct genapic __initconstrel apic_default = {
+const struct genapic __initconst_cf_clobber apic_default = {
APIC_INIT("default", NULL),
GENAPIC_FLAT
};
#include <asm/mach-generic/mach_apic.h>
#include <asm/setup.h>
-struct genapic __read_mostly genapic;
+struct genapic __ro_after_init genapic;
static const struct genapic *const __initconstrel apic_probe[] = {
&apic_bigsmp,
local_irq_restore(flags);
}
-static const struct genapic __initconstrel apic_x2apic_phys = {
+static const struct genapic __initconst_cf_clobber apic_x2apic_phys = {
APIC_INIT("x2apic_phys", NULL),
.int_delivery_mode = dest_Fixed,
.int_dest_mode = 0 /* physical delivery */,
.send_IPI_self = send_IPI_self_x2apic
};
-static const struct genapic __initconstrel apic_x2apic_cluster = {
+static const struct genapic __initconst_cf_clobber apic_x2apic_cluster = {
APIC_INIT("x2apic_cluster", NULL),
.int_delivery_mode = dest_LowestPrio,
.int_dest_mode = 1 /* logical delivery */,
* IPIs to be more efficiently delivered by not having to perform an ICR write
* for each target CPU.
*/
-static const struct genapic __initconstrel apic_x2apic_mixed = {
+static const struct genapic __initconst_cf_clobber apic_x2apic_mixed = {
APIC_INIT("x2apic_mixed", NULL),
/*
#define INT_DELIVERY_MODE (genapic.int_delivery_mode)
#define INT_DEST_MODE (genapic.int_dest_mode)
#define TARGET_CPUS ((const typeof(cpu_online_map) *)&cpu_online_map)
-#define init_apic_ldr (genapic.init_apic_ldr)
+#define init_apic_ldr() alternative_vcall(genapic.init_apic_ldr)
#define cpu_mask_to_apicid(mask) ({ \
/* \
* There are a number of places where the address of a local variable \