diff --git a/xen/Rules.mk b/xen/Rules.mk
index f7ddc69..b5f1041 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -61,9 +61,6 @@ CFLAGS-$(perfc_arrays)  += -DPERF_ARRAYS
 CFLAGS-$(lock_profile)  += -DLOCK_PROFILE
 CFLAGS-$(frame_pointer) += -fno-omit-frame-pointer -DCONFIG_FRAME_POINTER
 
-ifneq ($(max_phys_cpus),)
-CFLAGS-y                += -DMAX_PHYS_CPUS=$(max_phys_cpus)
-endif
 ifneq ($(max_phys_irqs),)
 CFLAGS-y                += -DMAX_PHYS_IRQS=$(max_phys_irqs)
 endif
diff --git a/xen/arch/arm/arm64/smpboot.c b/xen/arch/arm/arm64/smpboot.c
index 62e6abb..e63888e 100644
--- a/xen/arch/arm/arm64/smpboot.c
+++ b/xen/arch/arm/arm64/smpboot.c
@@ -12,8 +12,8 @@ struct smp_enable_ops {
         int             (*prepare_cpu)(int);
 };
 
-static paddr_t cpu_release_addr[NR_CPUS];
-static struct smp_enable_ops smp_enable_ops[NR_CPUS];
+static paddr_t cpu_release_addr[CONFIG_NR_CPUS];
+static struct smp_enable_ops smp_enable_ops[CONFIG_NR_CPUS];
 
 static int __init smp_spin_table_cpu_up(int cpu)
 {
diff --git a/xen/arch/arm/percpu.c b/xen/arch/arm/percpu.c
index e545024..0d5bb63 100644
--- a/xen/arch/arm/percpu.c
+++ b/xen/arch/arm/percpu.c
@@ -5,14 +5,14 @@
 #include <xen/mm.h>
 #include <xen/rcupdate.h>
 
-unsigned long __per_cpu_offset[NR_CPUS];
+unsigned long __per_cpu_offset[CONFIG_NR_CPUS];
 #define INVALID_PERCPU_AREA (-(long)__per_cpu_start)
 #define PERCPU_ORDER (get_order_from_bytes(__per_cpu_data_end-__per_cpu_start))
 
 void __init percpu_init_areas(void)
 {
     unsigned int cpu;
-    for ( cpu = 1; cpu < NR_CPUS; cpu++ )
+    for ( cpu = 1; cpu < CONFIG_NR_CPUS; cpu++ )
         __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
 }
 
diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
index 00b2b2a..1eae7f5 100644
--- a/xen/arch/arm/smpboot.c
+++ b/xen/arch/arm/smpboot.c
@@ -36,10 +36,10 @@ cpumask_t cpu_online_map;
 cpumask_t cpu_present_map;
 cpumask_t cpu_possible_map;
 
-struct cpuinfo_arm cpu_data[NR_CPUS];
+struct cpuinfo_arm cpu_data[CONFIG_NR_CPUS];
 
 /* CPU logical map: map xen cpuid to an MPIDR */
-u32 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = MPIDR_INVALID };
+u32 __cpu_logical_map[CONFIG_NR_CPUS] = { [0 ... CONFIG_NR_CPUS-1] = MPIDR_INVALID };
 
 /* Fake one node for now. See also include/asm-arm/numa.h */
 nodemask_t __read_mostly node_online_map = { { [0] = 1UL } };
@@ -99,9 +99,9 @@ void __init smp_init_cpus(void)
     struct dt_device_node *cpu;
     unsigned int i, j;
     unsigned int cpuidx = 1;
-    static u32 tmp_map[NR_CPUS] __initdata =
+    static u32 tmp_map[CONFIG_NR_CPUS] __initdata =
     {
-        [0 ... NR_CPUS - 1] = MPIDR_INVALID
+        [0 ... CONFIG_NR_CPUS - 1] = MPIDR_INVALID
     };
     bool_t bootcpu_valid = 0;
     int rc;
@@ -209,12 +209,12 @@ void __init smp_init_cpus(void)
         else
             i = cpuidx++;
 
-        if ( cpuidx > NR_CPUS )
+        if ( cpuidx > CONFIG_NR_CPUS )
         {
             printk(XENLOG_WARNING
                    "DT /cpu %u node greater than max cores %u, capping them\n",
-                   cpuidx, NR_CPUS);
-            cpuidx = NR_CPUS;
+                   cpuidx, CONFIG_NR_CPUS);
+            cpuidx = CONFIG_NR_CPUS;
             break;
         }
 
diff --git a/xen/arch/x86/acpi/boot.c b/xen/arch/x86/acpi/boot.c
index fac36c6..d2a90fb 100644
--- a/xen/arch/x86/acpi/boot.c
+++ b/xen/arch/x86/acpi/boot.c
@@ -122,7 +122,7 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end)
 	 * We need to register disabled CPU as well to permit
 	 * counting disabled CPUs. This allows us to size
 	 * cpus_possible_map more accurately, to permit
-	 * to not preallocating memory for all NR_CPUS
+	 * to not preallocating memory for all CONFIG_NR_CPUS
 	 * when we use CPU hotplug.
 	 */
 	mp_register_lapic(processor->local_apic_id, enabled, 0);
@@ -152,7 +152,7 @@ acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end)
 	 * We need to register disabled CPU as well to permit
 	 * counting disabled CPUs. This allows us to size
 	 * cpus_possible_map more accurately, to permit
-	 * to not preallocating memory for all NR_CPUS
+	 * to not preallocating memory for all CONFIG_NR_CPUS
 	 * when we use CPU hotplug.
 	 */
 	mp_register_lapic(processor->id, enabled, 0);
diff --git a/xen/arch/x86/acpi/cpu_idle.c b/xen/arch/x86/acpi/cpu_idle.c
index d1f99a7..d1bae7d 100644
--- a/xen/arch/x86/acpi/cpu_idle.c
+++ b/xen/arch/x86/acpi/cpu_idle.c
@@ -110,7 +110,7 @@ integer_param("max_cstate", max_cstate);
 static bool_t __read_mostly local_apic_timer_c2_ok;
 boolean_param("lapic_timer_c2_ok", local_apic_timer_c2_ok);
 
-struct acpi_processor_power *__read_mostly processor_powers[NR_CPUS];
+struct acpi_processor_power *__read_mostly processor_powers[CONFIG_NR_CPUS];
 
 struct hw_residencies
 {
diff --git a/xen/arch/x86/acpi/cpufreq/cpufreq.c b/xen/arch/x86/acpi/cpufreq/cpufreq.c
index a2ba0db..23bfefd 100644
--- a/xen/arch/x86/acpi/cpufreq/cpufreq.c
+++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c
@@ -51,7 +51,7 @@ enum {
 
 #define INTEL_MSR_RANGE         (0xffffull)
 
-struct acpi_cpufreq_data *cpufreq_drv_data[NR_CPUS];
+struct acpi_cpufreq_data *cpufreq_drv_data[CONFIG_NR_CPUS];
 
 static struct cpufreq_driver acpi_cpufreq_driver;
 
diff --git a/xen/arch/x86/mpparse.c b/xen/arch/x86/mpparse.c
index ef6557c..2f31a9c 100644
--- a/xen/arch/x86/mpparse.c
+++ b/xen/arch/x86/mpparse.c
@@ -71,8 +71,8 @@ void __init set_nr_cpu_ids(unsigned int max_cpus)
 {
 	if (!max_cpus)
 		max_cpus = num_processors + disabled_cpus;
-	if (max_cpus > NR_CPUS)
-		max_cpus = NR_CPUS;
+	if (max_cpus > CONFIG_NR_CPUS)
+		max_cpus = CONFIG_NR_CPUS;
 	else if (!max_cpus)
 		max_cpus = 1;
 	printk(XENLOG_INFO "SMP: Allowing %u CPUs (%d hotplug CPUs)\n",
@@ -82,8 +82,8 @@ void __init set_nr_cpu_ids(unsigned int max_cpus)
 #ifndef nr_cpumask_bits
 	nr_cpumask_bits = (max_cpus + (BITS_PER_LONG - 1)) &
 			  ~(BITS_PER_LONG - 1);
-	printk(XENLOG_DEBUG "NR_CPUS:%u nr_cpumask_bits:%u\n",
-	       NR_CPUS, nr_cpumask_bits);
+	printk(XENLOG_DEBUG "CONFIG_NR_CPUS:%u nr_cpumask_bits:%u\n",
+	       CONFIG_NR_CPUS, nr_cpumask_bits);
 #endif
 }
 
@@ -151,7 +151,7 @@ static int MP_processor_info_x(struct mpc_config_processor *m,
 	set_apicid(apicid, &phys_cpu_present_map);
 
 	if (num_processors >= nr_cpu_ids) {
-		printk(KERN_WARNING "WARNING: NR_CPUS limit of %u reached."
+		printk(KERN_WARNING "WARNING: CONFIG_NR_CPUS limit of %u reached."
 			"  Processor ignored.\n", nr_cpu_ids);
 		return -ENOSPC;
 	}
diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index b1195a1..68682b6 100644
--- a/xen/arch/x86/nmi.c
+++ b/xen/arch/x86/nmi.c
@@ -144,7 +144,7 @@ static void __init wait_for_nmis(void *p)
 
 int __init check_nmi_watchdog (void)
 {
-    static unsigned int __initdata prev_nmi_count[NR_CPUS];
+    static unsigned int __initdata prev_nmi_count[CONFIG_NR_CPUS];
     int cpu;
     bool_t ok = 1;
 
diff --git a/xen/arch/x86/numa.c b/xen/arch/x86/numa.c
index e243e06..9281385 100644
--- a/xen/arch/x86/numa.c
+++ b/xen/arch/x86/numa.c
@@ -36,8 +36,8 @@ static typeof(*memnodemap) _memnodemap[64];
 unsigned long memnodemapsize;
 u8 *memnodemap;
 
-nodeid_t cpu_to_node[NR_CPUS] __read_mostly = {
-    [0 ... NR_CPUS-1] = NUMA_NO_NODE
+nodeid_t cpu_to_node[CONFIG_NR_CPUS] __read_mostly = {
+    [0 ... CONFIG_NR_CPUS-1] = NUMA_NO_NODE
 };
 /*
  * Keep BIOS's CPU2node information, should not be used for memory allocaion
diff --git a/xen/arch/x86/oprofile/nmi_int.c b/xen/arch/x86/oprofile/nmi_int.c
index 13534d4..e3126be 100644
--- a/xen/arch/x86/oprofile/nmi_int.c
+++ b/xen/arch/x86/oprofile/nmi_int.c
@@ -32,8 +32,8 @@ struct op_counter_config counter_config[OP_MAX_COUNTER];
 struct op_ibs_config ibs_config;
 
 struct op_x86_model_spec const *__read_mostly model;
-static struct op_msrs cpu_msrs[NR_CPUS];
-static unsigned long saved_lvtpc[NR_CPUS];
+static struct op_msrs cpu_msrs[CONFIG_NR_CPUS];
+static unsigned long saved_lvtpc[CONFIG_NR_CPUS];
 
 static char *cpu_type;
 
diff --git a/xen/arch/x86/percpu.c b/xen/arch/x86/percpu.c
index 1c1dad9..068b147 100644
--- a/xen/arch/x86/percpu.c
+++ b/xen/arch/x86/percpu.c
@@ -5,7 +5,7 @@
 #include <xen/mm.h>
 #include <xen/rcupdate.h>
 
-unsigned long __per_cpu_offset[NR_CPUS];
+unsigned long __per_cpu_offset[CONFIG_NR_CPUS];
 
 /*
  * Force uses of per_cpu() with an invalid area to attempt to access the
@@ -19,7 +19,7 @@ unsigned long __per_cpu_offset[NR_CPUS];
 void __init percpu_init_areas(void)
 {
     unsigned int cpu;
-    for ( cpu = 1; cpu < NR_CPUS; cpu++ )
+    for ( cpu = 1; cpu < CONFIG_NR_CPUS; cpu++ )
         __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
 }
 
diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
index 1eb16cb..45829e0 100644
--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -63,10 +63,10 @@ unsigned int __read_mostly nr_sockets;
 cpumask_t **__read_mostly socket_cpumask;
 static cpumask_t *secondary_socket_cpumask;
 
-struct cpuinfo_x86 cpu_data[NR_CPUS];
+struct cpuinfo_x86 cpu_data[CONFIG_NR_CPUS];
 
-u32 x86_cpu_to_apicid[NR_CPUS] __read_mostly =
-	{ [0 ... NR_CPUS-1] = BAD_APICID };
+u32 x86_cpu_to_apicid[CONFIG_NR_CPUS] __read_mostly =
+	{ [0 ... CONFIG_NR_CPUS-1] = BAD_APICID };
 
 static int cpu_error;
 static enum cpu_state {
@@ -79,7 +79,7 @@ static enum cpu_state {
 } cpu_state;
 #define set_cpu_state(state) do { mb(); cpu_state = (state); } while (0)
 
-void *stack_base[NR_CPUS];
+void *stack_base[CONFIG_NR_CPUS];
 
 static void smp_store_cpu_info(int id)
 {
@@ -734,7 +734,7 @@ static int cpu_smpboot_alloc(unsigned int cpu)
     if ( gdt == NULL )
         goto oom;
     memcpy(gdt, boot_cpu_gdt_table, NR_RESERVED_GDT_PAGES * PAGE_SIZE);
-    BUILD_BUG_ON(NR_CPUS > 0x10000);
+    BUILD_BUG_ON(CONFIG_NR_CPUS > 0x10000);
     gdt[PER_CPU_GDT_ENTRY - FIRST_RESERVED_GDT_ENTRY].a = cpu;
 
     per_cpu(compat_gdt_table, cpu) = gdt = alloc_xenheap_pages(order, memflags);
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index e105b95..b86ce5e 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -100,7 +100,7 @@ DEFINE_PER_CPU_READ_MOSTLY(struct desc_struct *, compat_gdt_table);
 idt_entry_t idt_table[IDT_ENTRIES];
 
 /* Pointer to the IDT of every CPU. */
-idt_entry_t *idt_tables[NR_CPUS] __read_mostly;
+idt_entry_t *idt_tables[CONFIG_NR_CPUS] __read_mostly;
 
 void (*ioemul_handle_quirk)(
     u8 opcode, char *io_emul_stub, struct cpu_user_regs *regs);
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index e18e08f..37c01a8 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -218,7 +218,7 @@ SECTIONS
 }
 
 ASSERT(__image_base__ > XEN_VIRT_START ||
-       _end <= XEN_VIRT_END - NR_CPUS * PAGE_SIZE,
+       _end <= XEN_VIRT_END - CONFIG_NR_CPUS * PAGE_SIZE,
        "Xen image overlaps stubs area")
 
 #ifdef CONFIG_KEXEC
diff --git a/xen/common/core_parking.c b/xen/common/core_parking.c
index de269e0..4a5da3c 100644
--- a/xen/common/core_parking.c
+++ b/xen/common/core_parking.c
@@ -29,7 +29,7 @@ static unsigned int core_parking_power(unsigned int event);
 static unsigned int core_parking_performance(unsigned int event);
 
 static uint32_t cur_idle_nums;
-static unsigned int core_parking_cpunum[NR_CPUS] = {[0 ... NR_CPUS-1] = -1};
+static unsigned int core_parking_cpunum[CONFIG_NR_CPUS] = {[0 ... CONFIG_NR_CPUS-1] = -1};
 
 static struct core_parking_policy {
     char name[30];
@@ -118,8 +118,8 @@ static unsigned int core_parking_power(unsigned int event)
     {
     case CORE_PARKING_INCREMENT:
     {
-        int core_tmp, core_weight = NR_CPUS + 1;
-        int sibling_tmp, sibling_weight = NR_CPUS + 1;
+        int core_tmp, core_weight = CONFIG_NR_CPUS + 1;
+        int sibling_tmp, sibling_weight = CONFIG_NR_CPUS + 1;
         cpumask_t core_candidate_map, sibling_candidate_map;
         cpumask_clear(&core_candidate_map);
         cpumask_clear(&sibling_candidate_map);
diff --git a/xen/common/cpu.c b/xen/common/cpu.c
index 497e0cb..4597194 100644
--- a/xen/common/cpu.c
+++ b/xen/common/cpu.c
@@ -6,15 +6,15 @@
 #include <xen/sched.h>
 #include <xen/stop_machine.h>
 
-unsigned int __read_mostly nr_cpu_ids = NR_CPUS;
+unsigned int __read_mostly nr_cpu_ids = CONFIG_NR_CPUS;
 #ifndef nr_cpumask_bits
 unsigned int __read_mostly nr_cpumask_bits
-    = BITS_TO_LONGS(NR_CPUS) * BITS_PER_LONG;
+    = BITS_TO_LONGS(CONFIG_NR_CPUS) * BITS_PER_LONG;
 #endif
 
 /*
  * cpu_bit_bitmap[] is a special, "compressed" data structure that
- * represents all NR_CPUS bits binary values of 1<<nr.
+ * represents all CONFIG_NR_CPUS bits binary values of 1<<nr.
  *
  * It is used by cpumask_of() to get a constant address to a CPU
  * mask value that has a single bit set only.
@@ -26,7 +26,7 @@ unsigned int __read_mostly nr_cpumask_bits
 #define MASK_DECLARE_4(x) MASK_DECLARE_2(x), MASK_DECLARE_2(x+2)
 #define MASK_DECLARE_8(x) MASK_DECLARE_4(x), MASK_DECLARE_4(x+4)
 
-const unsigned long cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)] = {
+const unsigned long cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(CONFIG_NR_CPUS)] = {
 
     MASK_DECLARE_8(0),  MASK_DECLARE_8(8),
     MASK_DECLARE_8(16), MASK_DECLARE_8(24),
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 1017efb..a0e94fb 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -68,7 +68,7 @@ domid_t hardware_domid __read_mostly;
 integer_param("hardware_dom", hardware_domid);
 #endif
 
-struct vcpu *idle_vcpu[NR_CPUS] __read_mostly;
+struct vcpu *idle_vcpu[CONFIG_NR_CPUS] __read_mostly;
 
 vcpu_info_t dummy_vcpu_info;
 
diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c
index ae87557..6f7cae0 100644
--- a/xen/common/efi/runtime.c
+++ b/xen/common/efi/runtime.c
@@ -30,7 +30,7 @@ const CHAR16 *__read_mostly efi_fw_vendor;
 const EFI_RUNTIME_SERVICES *__read_mostly efi_rs;
 #ifndef CONFIG_ARM /* TODO - disabled until implemented on ARM */
 static DEFINE_SPINLOCK(efi_rs_lock);
-static unsigned int efi_rs_on_cpu = NR_CPUS;
+static unsigned int efi_rs_on_cpu = CONFIG_NR_CPUS;
 #endif
 
 UINTN __read_mostly efi_memmap_size;
@@ -103,7 +103,7 @@ void efi_rs_leave(unsigned long cr3)
         asm volatile ( "lgdt %0" : : "m" (gdt_desc) );
     }
     irq_exit();
-    efi_rs_on_cpu = NR_CPUS;
+    efi_rs_on_cpu = CONFIG_NR_CPUS;
     spin_unlock(&efi_rs_lock);
     stts();
 }
diff --git a/xen/common/gdbstub.c b/xen/common/gdbstub.c
index 19e3b8d..e1c5e59 100644
--- a/xen/common/gdbstub.c
+++ b/xen/common/gdbstub.c
@@ -60,7 +60,7 @@ struct gdb_cpu_info
     atomic_t ack;
 };
 
-static struct gdb_cpu_info gdb_cpu[NR_CPUS];
+static struct gdb_cpu_info gdb_cpu[CONFIG_NR_CPUS];
 static atomic_t gdb_smp_paused_count;
 
 static void gdb_smp_pause(void);
diff --git a/xen/common/rcupdate.c b/xen/common/rcupdate.c
index f13b87b..44276cf 100644
--- a/xen/common/rcupdate.c
+++ b/xen/common/rcupdate.c
@@ -132,7 +132,7 @@ static int rcu_barrier_action(void *_cpu_count)
 int rcu_barrier(void)
 {
     atomic_t cpu_count = ATOMIC_INIT(0);
-    return stop_machine_run(rcu_barrier_action, &cpu_count, NR_CPUS);
+    return stop_machine_run(rcu_barrier_action, &cpu_count, CONFIG_NR_CPUS);
 }
 
 /* Is batch a before batch b ? */
diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c
index 3c49ffa..663a5b5 100644
--- a/xen/common/sched_credit2.c
+++ b/xen/common/sched_credit2.c
@@ -223,9 +223,9 @@ struct csched2_private {
     
     struct list_head sdom; /* Used mostly for dump keyhandler. */
 
-    int runq_map[NR_CPUS];
+    int runq_map[CONFIG_NR_CPUS];
     cpumask_t active_queues; /* Queues which may have active cpus */
-    struct csched2_runqueue_data rqd[NR_CPUS];
+    struct csched2_runqueue_data rqd[CONFIG_NR_CPUS];
 
     int load_window_shift;
 };
diff --git a/xen/common/softirq.c b/xen/common/softirq.c
index 11e3345..c2ceb86 100644
--- a/xen/common/softirq.c
+++ b/xen/common/softirq.c
@@ -18,7 +18,7 @@
 #include <xen/softirq.h>
 
 #ifndef __ARCH_IRQ_STAT
-irq_cpustat_t irq_stat[NR_CPUS];
+irq_cpustat_t irq_stat[CONFIG_NR_CPUS];
 #endif
 
 static softirq_handler softirq_handlers[NR_SOFTIRQS];
diff --git a/xen/common/spinlock.c b/xen/common/spinlock.c
index 7f89694..9207179 100644
--- a/xen/common/spinlock.c
+++ b/xen/common/spinlock.c
@@ -246,7 +246,7 @@ int _spin_trylock_recursive(spinlock_t *lock)
     unsigned int cpu = smp_processor_id();
 
     /* Don't allow overflow of recurse_cpu field. */
-    BUILD_BUG_ON(NR_CPUS > 0xfffu);
+    BUILD_BUG_ON(CONFIG_NR_CPUS > 0xfffu);
 
     check_lock(&lock->debug);
 
diff --git a/xen/common/stop_machine.c b/xen/common/stop_machine.c
index cf109ba..3e8c55d 100644
--- a/xen/common/stop_machine.c
+++ b/xen/common/stop_machine.c
@@ -112,7 +112,7 @@ int stop_machine_run(int (*fn)(void *), void *data, unsigned int cpu)
     spin_debug_disable();
 
     stopmachine_set_state(STOPMACHINE_INVOKE);
-    if ( (cpu == smp_processor_id()) || (cpu == NR_CPUS) )
+    if ( (cpu == smp_processor_id()) || (cpu == CONFIG_NR_CPUS) )
         stopmachine_data.fn_result = (*fn)(data);
     stopmachine_wait_state();
     ret = stopmachine_data.fn_result;
@@ -150,7 +150,7 @@ static void stopmachine_action(unsigned long cpu)
             break;
         case STOPMACHINE_INVOKE:
             if ( (stopmachine_data.fn_cpu == smp_processor_id()) ||
-                 (stopmachine_data.fn_cpu == NR_CPUS) )
+                 (stopmachine_data.fn_cpu == CONFIG_NR_CPUS) )
                 stopmachine_data.fn_result =
                     stopmachine_data.fn(stopmachine_data.fn_data);
             break;
diff --git a/xen/common/trace.c b/xen/common/trace.c
index f651cf3..d5cee8c 100644
--- a/xen/common/trace.c
+++ b/xen/common/trace.c
@@ -96,7 +96,7 @@ static struct notifier_block cpu_nfb = {
 
 static uint32_t calc_tinfo_first_offset(void)
 {
-    int offset_in_bytes = offsetof(struct t_info, mfn_offset[NR_CPUS]);
+    int offset_in_bytes = offsetof(struct t_info, mfn_offset[CONFIG_NR_CPUS]);
     return fit_to_type(uint32_t, offset_in_bytes);
 }
 
@@ -169,7 +169,7 @@ static int calculate_tbuf_size(unsigned int pages, uint16_t t_info_first_offset)
 static int alloc_trace_bufs(unsigned int pages)
 {
     int i, cpu;
-    /* Start after a fixed-size array of NR_CPUS */
+    /* Start after a fixed-size array of CONFIG_NR_CPUS */
     uint32_t *t_info_mfn_list;
     uint16_t t_info_first_offset;
     uint16_t offset;
diff --git a/xen/drivers/cpufreq/utility.c b/xen/drivers/cpufreq/utility.c
index 53879fe..4e8c3b1 100644
--- a/xen/drivers/cpufreq/utility.c
+++ b/xen/drivers/cpufreq/utility.c
@@ -32,7 +32,7 @@
 #include <public/sysctl.h>
 
 struct cpufreq_driver   *cpufreq_driver;
-struct processor_pminfo *__read_mostly processor_pminfo[NR_CPUS];
+struct processor_pminfo *__read_mostly processor_pminfo[CONFIG_NR_CPUS];
 DEFINE_PER_CPU_READ_MOSTLY(struct cpufreq_policy *, cpufreq_cpu_policy);
 
 DEFINE_PER_CPU(spinlock_t, cpufreq_statistic_lock);
diff --git a/xen/include/acpi/cpufreq/cpufreq.h b/xen/include/acpi/cpufreq/cpufreq.h
index 48ad1d0..ec1b3bf 100644
--- a/xen/include/acpi/cpufreq/cpufreq.h
+++ b/xen/include/acpi/cpufreq/cpufreq.h
@@ -32,7 +32,7 @@ struct acpi_cpufreq_data {
     unsigned int arch_cpu_flags;
 };
 
-extern struct acpi_cpufreq_data *cpufreq_drv_data[NR_CPUS];
+extern struct acpi_cpufreq_data *cpufreq_drv_data[CONFIG_NR_CPUS];
 
 struct cpufreq_cpuinfo {
     unsigned int        max_freq;
diff --git a/xen/include/acpi/cpufreq/processor_perf.h b/xen/include/acpi/cpufreq/processor_perf.h
index d8a1ba6..1c9004c 100644
--- a/xen/include/acpi/cpufreq/processor_perf.h
+++ b/xen/include/acpi/cpufreq/processor_perf.h
@@ -40,7 +40,7 @@ struct processor_pminfo {
     struct processor_performance    perf;
 };
 
-extern struct processor_pminfo *processor_pminfo[NR_CPUS];
+extern struct processor_pminfo *processor_pminfo[CONFIG_NR_CPUS];
 
 struct px_stat {
     uint8_t total;        /* total Px states */
diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h
index 1520b41..bd832df 100644
--- a/xen/include/asm-arm/config.h
+++ b/xen/include/asm-arm/config.h
@@ -45,12 +45,6 @@
 
 #define OPT_CONSOLE_STR "dtuart"
 
-#ifdef MAX_PHYS_CPUS
-#define NR_CPUS MAX_PHYS_CPUS
-#else
-#define NR_CPUS 128
-#endif
-
 #ifdef CONFIG_ARM_64
 #define MAX_VIRT_CPUS 128
 #else
diff --git a/xen/include/asm-arm/percpu.h b/xen/include/asm-arm/percpu.h
index 71e7649..00b0272 100644
--- a/xen/include/asm-arm/percpu.h
+++ b/xen/include/asm-arm/percpu.h
@@ -14,7 +14,7 @@
 #endif
 
 extern char __per_cpu_start[], __per_cpu_data_end[];
-extern unsigned long __per_cpu_offset[NR_CPUS];
+extern unsigned long __per_cpu_offset[CONFIG_NR_CPUS];
 void percpu_init_areas(void);
 
 /* Separate out the type, so (int[3], foo) works. */
diff --git a/xen/include/asm-x86/acpi.h b/xen/include/asm-x86/acpi.h
index d3bde78..03f09fb 100644
--- a/xen/include/asm-x86/acpi.h
+++ b/xen/include/asm-x86/acpi.h
@@ -142,9 +142,9 @@ struct acpi_sleep_info {
 
 #endif /* CONFIG_ACPI_SLEEP */
 
-#define MAX_MADT_ENTRIES	MAX(256, 2 * NR_CPUS)
+#define MAX_MADT_ENTRIES	MAX(256, 2 * CONFIG_NR_CPUS)
 extern u32 x86_acpiid_to_apicid[];
-#define MAX_LOCAL_APIC		MAX(256, 4 * NR_CPUS)
+#define MAX_LOCAL_APIC		MAX(256, 4 * CONFIG_NR_CPUS)
 
 #define INVALID_ACPIID		(-1U)
 
diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h
index f25d92e..3958ea0 100644
--- a/xen/include/asm-x86/config.h
+++ b/xen/include/asm-x86/config.h
@@ -60,12 +60,6 @@
 
 #define OPT_CONSOLE_STR "vga"
 
-#ifdef MAX_PHYS_CPUS
-#define NR_CPUS MAX_PHYS_CPUS
-#else
-#define NR_CPUS 256
-#endif
-
 /* Linkage for x86 */
 #define __ALIGN .align 16,0x90
 #define __ALIGN_STR ".align 16,0x90"
diff --git a/xen/include/asm-x86/mpspec_def.h b/xen/include/asm-x86/mpspec_def.h
index b17ec41..3cae1fb 100644
--- a/xen/include/asm-x86/mpspec_def.h
+++ b/xen/include/asm-x86/mpspec_def.h
@@ -14,7 +14,7 @@
 #define SMP_MAGIC_IDENT	(('_'<<24)|('P'<<16)|('M'<<8)|'_')
 
 #define MAX_MPC_ENTRY 1024
-#define MAX_APICS     MAX(256, 4 * NR_CPUS)
+#define MAX_APICS     MAX(256, 4 * CONFIG_NR_CPUS)
 
 struct intel_mp_floating
 {
diff --git a/xen/include/asm-x86/numa.h b/xen/include/asm-x86/numa.h
index 9a2d7cc..786b4b3 100644
--- a/xen/include/asm-x86/numa.h
+++ b/xen/include/asm-x86/numa.h
@@ -9,7 +9,7 @@ typedef u8 nodeid_t;
 
 extern int srat_rev;
 
-extern nodeid_t      cpu_to_node[NR_CPUS];
+extern nodeid_t      cpu_to_node[CONFIG_NR_CPUS];
 extern cpumask_t     node_to_cpumask[];
 
 #define cpu_to_node(cpu)		(cpu_to_node[cpu])
diff --git a/xen/include/asm-x86/percpu.h b/xen/include/asm-x86/percpu.h
index 604ff0d..251888e5 100644
--- a/xen/include/asm-x86/percpu.h
+++ b/xen/include/asm-x86/percpu.h
@@ -3,7 +3,7 @@
 
 #ifndef __ASSEMBLY__
 extern char __per_cpu_start[], __per_cpu_data_end[];
-extern unsigned long __per_cpu_offset[NR_CPUS];
+extern unsigned long __per_cpu_offset[CONFIG_NR_CPUS];
 void percpu_init_areas(void);
 #endif
 
diff --git a/xen/include/xen/cpumask.h b/xen/include/xen/cpumask.h
index 0e7108c..e6e83d1 100644
--- a/xen/include/xen/cpumask.h
+++ b/xen/include/xen/cpumask.h
@@ -37,11 +37,11 @@
  * void cpumask_shift_right(dst, src, n) Shift right
  * void cpumask_shift_left(dst, src, n)	Shift left
  *
- * int cpumask_first(mask)		Number lowest set bit, or NR_CPUS
- * int cpumask_next(cpu, mask)		Next cpu past 'cpu', or NR_CPUS
- * int cpumask_last(mask)		Number highest set bit, or NR_CPUS
- * int cpumask_any(mask)		Any cpu in mask, or NR_CPUS
- * int cpumask_cycle(cpu, mask)		Next cpu cycling from 'cpu', or NR_CPUS
+ * int cpumask_first(mask)		Number lowest set bit, or CONFIG_NR_CPUS
+ * int cpumask_next(cpu, mask)		Next cpu past 'cpu', or CONFIG_NR_CPUS
+ * int cpumask_last(mask)		Number highest set bit, or CONFIG_NR_CPUS
+ * int cpumask_any(mask)		Any cpu in mask, or CONFIG_NR_CPUS
+ * int cpumask_cycle(cpu, mask)		Next cpu cycling from 'cpu', or CONFIG_NR_CPUS
  *
  * const cpumask_t *cpumask_of(cpu)	Return cpumask with bit 'cpu' set
  * unsigned long *cpumask_bits(mask)	Array of unsigned long's in mask
@@ -59,7 +59,7 @@
  * int cpu_possible(cpu)		Is some cpu possible?
  * int cpu_present(cpu)			Is some cpu present (can schedule)?
  *
- * int any_online_cpu(mask)		First online cpu in mask, or NR_CPUS
+ * int any_online_cpu(mask)		First online cpu in mask, or CONFIG_NR_CPUS
  *
  * for_each_possible_cpu(cpu)		for-loop cpu over cpu_possible_map
  * for_each_online_cpu(cpu)		for-loop cpu over cpu_online_map
@@ -79,16 +79,16 @@
 #include <xen/kernel.h>
 #include <xen/random.h>
 
-typedef struct cpumask{ DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t;
+typedef struct cpumask{ DECLARE_BITMAP(bits, CONFIG_NR_CPUS); } cpumask_t;
 
 extern unsigned int nr_cpu_ids;
 
-#if NR_CPUS > 4 * BITS_PER_LONG
-/* Assuming NR_CPUS is huge, a runtime limit is more efficient.  Also,
+#if CONFIG_NR_CPUS > 4 * BITS_PER_LONG
+/* Assuming CONFIG_NR_CPUS is huge, a runtime limit is more efficient.  Also,
  * not all bits may be allocated. */
 extern unsigned int nr_cpumask_bits;
 #else
-# define nr_cpumask_bits (BITS_TO_LONGS(NR_CPUS) * BITS_PER_LONG)
+# define nr_cpumask_bits (BITS_TO_LONGS(CONFIG_NR_CPUS) * BITS_PER_LONG)
 #endif
 
 /* verify cpu argument to cpumask_* operators */
@@ -292,7 +292,7 @@ static inline unsigned int cpumask_any(const cpumask_t *srcp)
  * appropriately offset.
  */
 extern const unsigned long
-	cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)];
+	cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(CONFIG_NR_CPUS)];
 
 static inline const cpumask_t *cpumask_of(unsigned int cpu)
 {
@@ -330,7 +330,7 @@ static inline int cpulist_scnprintf(char *buf, int len,
  *
  *	free_cpumask_var(tmpmask);
  */
-#if NR_CPUS > 2 * BITS_PER_LONG
+#if CONFIG_NR_CPUS > 2 * BITS_PER_LONG
 #include <xen/xmalloc.h>
 
 typedef cpumask_t *cpumask_var_t;
@@ -370,20 +370,20 @@ static inline void free_cpumask_var(cpumask_var_t mask)
 }
 #endif
 
-#if NR_CPUS > 1
+#if CONFIG_NR_CPUS > 1
 #define for_each_cpu(cpu, mask)			\
 	for ((cpu) = cpumask_first(mask);	\
 	     (cpu) < nr_cpu_ids;		\
 	     (cpu) = cpumask_next(cpu, mask))
-#else /* NR_CPUS == 1 */
+#else /* CONFIG_NR_CPUS == 1 */
 #define for_each_cpu(cpu, mask)			\
 	for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)(mask))
-#endif /* NR_CPUS */
+#endif /* CONFIG_NR_CPUS */
 
 /*
  * The following particular system cpumasks and operations manage
  * possible, present and online cpus.  Each of them is a fixed size
- * bitmap of size NR_CPUS.
+ * bitmap of size CONFIG_NR_CPUS.
  *
  *  #ifdef CONFIG_HOTPLUG_CPU
  *     cpu_possible_map - has bit 'cpu' set iff cpu is populatable
@@ -395,7 +395,7 @@ static inline void free_cpumask_var(cpumask_var_t mask)
  *     cpu_online_map   - has bit 'cpu' set iff cpu available to scheduler
  *  #endif
  *
- *  In either case, NR_CPUS is fixed at compile time, as the static
+ *  In either case, CONFIG_NR_CPUS is fixed at compile time, as the static
  *  size of these bitmaps.  The cpu_possible_map is fixed at boot
  *  time, as the set of CPU id's that it is possible might ever
  *  be plugged in at anytime during the life of that system boot.
@@ -405,7 +405,7 @@ static inline void free_cpumask_var(cpumask_var_t mask)
  *  for scheduling.
  *
  *  If HOTPLUG is enabled, then cpu_possible_map is forced to have
- *  all NR_CPUS bits set, otherwise it is just the set of CPUs that
+ *  all CONFIG_NR_CPUS bits set, otherwise it is just the set of CPUs that
  *  ACPI reports present at boot.
  *
  *  If HOTPLUG is enabled, then cpu_present_map varies dynamically,
@@ -416,7 +416,7 @@ static inline void free_cpumask_var(cpumask_var_t mask)
  *      hotplug, it's a copy of cpu_possible_map, hence fixed at boot.
  *
  * Subtleties:
- * 1) UP arch's (NR_CPUS == 1, CONFIG_SMP not defined) hardcode
+ * 1) UP arch's (CONFIG_NR_CPUS == 1, CONFIG_SMP not defined) hardcode
  *    assumption that their single CPU is online.  The UP
  *    cpu_{online,possible,present}_maps are placebos.  Changing them
  *    will have no useful affect on the following num_*_cpus()
@@ -440,7 +440,7 @@ extern cpumask_t cpu_possible_map;
 extern cpumask_t cpu_online_map;
 extern cpumask_t cpu_present_map;
 
-#if NR_CPUS > 1
+#if CONFIG_NR_CPUS > 1
 #define num_online_cpus()	cpumask_weight(&cpu_online_map)
 #define num_possible_cpus()	cpumask_weight(&cpu_possible_map)
 #define num_present_cpus()	cpumask_weight(&cpu_present_map)
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index fc61fc3..b1be9f0 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -467,7 +467,7 @@ struct domain
 extern spinlock_t domlist_update_lock;
 extern rcu_read_lock_t domlist_read_lock;
 
-extern struct vcpu *idle_vcpu[NR_CPUS];
+extern struct vcpu *idle_vcpu[CONFIG_NR_CPUS];
 #define is_idle_domain(d) ((d)->domain_id == DOMID_IDLE)
 #define is_idle_vcpu(v)   (is_idle_domain((v)->domain))
 
diff --git a/xen/include/xen/smp.h b/xen/include/xen/smp.h
index 6febb56..370c977 100644
--- a/xen/include/xen/smp.h
+++ b/xen/include/xen/smp.h
@@ -69,6 +69,6 @@ void smp_send_call_function_mask(const cpumask_t *mask);
 
 int alloc_cpu_id(void);
 
-extern void *stack_base[NR_CPUS];
+extern void *stack_base[CONFIG_NR_CPUS];
 
 #endif /* __XEN_SMP_H__ */
diff --git a/xen/include/xen/stop_machine.h b/xen/include/xen/stop_machine.h
index c63da1b..f6c79b7 100644
--- a/xen/include/xen/stop_machine.h
+++ b/xen/include/xen/stop_machine.h
@@ -5,7 +5,7 @@
  * stop_machine_run: freeze the machine on all CPUs and run this function
  * @fn: the function to run
  * @data: the data ptr for the @fn()
- * @cpu: the cpu to run @fn() on (or all, if @cpu == NR_CPUS).
+ * @cpu: the cpu to run @fn() on (or all, if @cpu == CONFIG_NR_CPUS).
  *
  * Description: This causes every other cpu to enter a safe point, with
  * each of which disables interrupts, and finally interrupts are disabled
