Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b840d796 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'cpus4096-for-linus-2' of...

Merge branch 'cpus4096-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'cpus4096-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (66 commits)
  x86: export vector_used_by_percpu_irq
  x86: use logical apicid in x2apic_cluster's x2apic_cpu_mask_to_apicid_and()
  sched: nominate preferred wakeup cpu, fix
  x86: fix lguest used_vectors breakage, -v2
  x86: fix warning in arch/x86/kernel/io_apic.c
  sched: fix warning in kernel/sched.c
  sched: move test_sd_parent() to an SMP section of sched.h
  sched: add SD_BALANCE_NEWIDLE at MC and CPU level for sched_mc>0
  sched: activate active load balancing in new idle cpus
  sched: bias task wakeups to preferred semi-idle packages
  sched: nominate preferred wakeup cpu
  sched: favour lower logical cpu number for sched_mc balance
  sched: framework for sched_mc/smt_power_savings=N
  sched: convert BALANCE_FOR_xx_POWER to inline functions
  x86: use possible_cpus=NUM to extend the possible cpus allowed
  x86: fix cpu_mask_to_apicid_and to include cpu_online_mask
  x86: update io_apic.c to the new cpumask code
  x86: Introduce topology_core_cpumask()/topology_thread_cpumask()
  x86: xen: use smp_call_function_many()
  x86: use work_on_cpu in x86/kernel/cpu/mcheck/mce_amd_64.c
  ...

Fixed up trivial conflict in kernel/time/tick-sched.c manually
parents 597b0d21 c3d80000
Loading
Loading
Loading
Loading
+9 −8
Original line number Original line Diff line number Diff line
@@ -50,16 +50,17 @@ additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
  			cpu_possible_map = cpu_present_map + additional_cpus
  			cpu_possible_map = cpu_present_map + additional_cpus


(*) Option valid only for following architectures
(*) Option valid only for following architectures
- x86_64, ia64
- ia64


ia64 and x86_64 use the number of disabled local apics in ACPI tables MADT
ia64 uses the number of disabled local apics in ACPI tables MADT to
to determine the number of potentially hot-pluggable cpus. The implementation
determine the number of potentially hot-pluggable cpus. The implementation
should only rely on this to count the # of cpus, but *MUST* not rely on the
should only rely on this to count the # of cpus, but *MUST* not rely
apicid values in those tables for disabled apics. In the event BIOS doesn't
on the apicid values in those tables for disabled apics. In the event
mark such hot-pluggable cpus as disabled entries, one could use this
BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could
parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
use this parameter "additional_cpus=x" to represent those cpus in the
cpu_possible_map.


possible_cpus=n		[s390 only] use this to set hotpluggable cpus.
possible_cpus=n		[s390,x86_64] use this to set hotpluggable cpus.
			This option sets possible_cpus bits in
			This option sets possible_cpus bits in
			cpu_possible_map. Thus keeping the numbers of bits set
			cpu_possible_map. Thus keeping the numbers of bits set
			constant even if the machine gets rebooted.
			constant even if the machine gets rebooted.
+0 −1
Original line number Original line Diff line number Diff line
@@ -45,7 +45,6 @@ extern struct cpuinfo_alpha cpu_data[NR_CPUS];
#define raw_smp_processor_id()	(current_thread_info()->cpu)
#define raw_smp_processor_id()	(current_thread_info()->cpu)


extern int smp_num_cpus;
extern int smp_num_cpus;
#define cpu_possible_map	cpu_present_map


extern void arch_send_call_function_single_ipi(int cpu);
extern void arch_send_call_function_single_ipi(int cpu);
extern void arch_send_call_function_ipi(cpumask_t mask);
extern void arch_send_call_function_ipi(cpumask_t mask);
+1 −1
Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ int irq_select_affinity(unsigned int irq)
	last_cpu = cpu;
	last_cpu = cpu;


	irq_desc[irq].affinity = cpumask_of_cpu(cpu);
	irq_desc[irq].affinity = cpumask_of_cpu(cpu);
	irq_desc[irq].chip->set_affinity(irq, cpumask_of_cpu(cpu));
	irq_desc[irq].chip->set_affinity(irq, cpumask_of(cpu));
	return 0;
	return 0;
}
}
#endif /* CONFIG_SMP */
#endif /* CONFIG_SMP */
+2 −0
Original line number Original line Diff line number Diff line
@@ -94,6 +94,7 @@ common_shutdown_1(void *generic_ptr)
		flags |= 0x00040000UL; /* "remain halted" */
		flags |= 0x00040000UL; /* "remain halted" */
		*pflags = flags;
		*pflags = flags;
		cpu_clear(cpuid, cpu_present_map);
		cpu_clear(cpuid, cpu_present_map);
		cpu_clear(cpuid, cpu_possible_map);
		halt();
		halt();
	}
	}
#endif
#endif
@@ -120,6 +121,7 @@ common_shutdown_1(void *generic_ptr)
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
	/* Wait for the secondaries to halt. */
	/* Wait for the secondaries to halt. */
	cpu_clear(boot_cpuid, cpu_present_map);
	cpu_clear(boot_cpuid, cpu_present_map);
	cpu_clear(boot_cpuid, cpu_possible_map);
	while (cpus_weight(cpu_present_map))
	while (cpus_weight(cpu_present_map))
		barrier();
		barrier();
#endif
#endif
+2 −5
Original line number Original line Diff line number Diff line
@@ -70,11 +70,6 @@ enum ipi_message_type {
/* Set to a secondary's cpuid when it comes online.  */
/* Set to a secondary's cpuid when it comes online.  */
static int smp_secondary_alive __devinitdata = 0;
static int smp_secondary_alive __devinitdata = 0;


/* Which cpus ids came online.  */
cpumask_t cpu_online_map;

EXPORT_SYMBOL(cpu_online_map);

int smp_num_probed;		/* Internal processor count */
int smp_num_probed;		/* Internal processor count */
int smp_num_cpus = 1;		/* Number that came online.  */
int smp_num_cpus = 1;		/* Number that came online.  */
EXPORT_SYMBOL(smp_num_cpus);
EXPORT_SYMBOL(smp_num_cpus);
@@ -440,6 +435,7 @@ setup_smp(void)
				((char *)cpubase + i*hwrpb->processor_size);
				((char *)cpubase + i*hwrpb->processor_size);
			if ((cpu->flags & 0x1cc) == 0x1cc) {
			if ((cpu->flags & 0x1cc) == 0x1cc) {
				smp_num_probed++;
				smp_num_probed++;
				cpu_set(i, cpu_possible_map);
				cpu_set(i, cpu_present_map);
				cpu_set(i, cpu_present_map);
				cpu->pal_revision = boot_cpu_palrev;
				cpu->pal_revision = boot_cpu_palrev;
			}
			}
@@ -473,6 +469,7 @@ smp_prepare_cpus(unsigned int max_cpus)


	/* Nothing to do on a UP box, or when told not to.  */
	/* Nothing to do on a UP box, or when told not to.  */
	if (smp_num_probed == 1 || max_cpus == 0) {
	if (smp_num_probed == 1 || max_cpus == 0) {
		cpu_possible_map = cpumask_of_cpu(boot_cpuid);
		cpu_present_map = cpumask_of_cpu(boot_cpuid);
		cpu_present_map = cpumask_of_cpu(boot_cpuid);
		printk(KERN_INFO "SMP mode deactivated.\n");
		printk(KERN_INFO "SMP mode deactivated.\n");
		return;
		return;
Loading