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

Commit 7019b1b5 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'x86-fixes-for-linus' of...

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

* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86: fix 2.6.27rc1 cannot boot more than 8CPUs
  x86: make "apic" an early_param() on 32-bit, NULL check
  EFI, x86: fix function prototype
  x86, pci-calgary: fix function declaration
  x86: work around gcc 3.4.x bug
  x86: make "apic" an early_param() on 32-bit
  x86, debug: tone down arch/x86/kernel/mpparse.c debugging printk
  x86_64: restore the proper NR_IRQS define so larger systems work.
  x86: Restore proper vector locking during cpu hotplug
  x86: Fix broken VMI in 2.6.27-rc..
  x86: fdiv bug detection fix
parents f08c0761 b74548e7
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -1720,15 +1720,19 @@ static int __init parse_lapic_timer_c2_ok(char *arg)
}
early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok);

static int __init apic_set_verbosity(char *str)
static int __init apic_set_verbosity(char *arg)
{
	if (strcmp("debug", str) == 0)
	if (!arg)
		return -EINVAL;

	if (strcmp(arg, "debug") == 0)
		apic_verbosity = APIC_DEBUG;
	else if (strcmp("verbose", str) == 0)
	else if (strcmp(arg, "verbose") == 0)
		apic_verbosity = APIC_VERBOSE;
	return 1;

	return 0;
}
__setup("apic=", apic_set_verbosity);
early_param("apic", apic_set_verbosity);

static int __init lapic_insert_resource(void)
{
+5 −1
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ static double __initdata y = 3145727.0;
 */
static void __init check_fpu(void)
{
	s32 fdiv_bug;

	if (!boot_cpu_data.hard_math) {
#ifndef CONFIG_MATH_EMULATION
		printk(KERN_EMERG "No coprocessor found and no math emulation present.\n");
@@ -74,8 +76,10 @@ static void __init check_fpu(void)
		"fistpl %0\n\t"
		"fwait\n\t"
		"fninit"
		: "=m" (*&boot_cpu_data.fdiv_bug)
		: "=m" (*&fdiv_bug)
		: "m" (*&x), "m" (*&y));

	boot_cpu_data.fdiv_bug = fdiv_bug;
	if (boot_cpu_data.fdiv_bug)
		printk("Hmm, FPU with FDIV bug.\n");
}
+1 −5
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ atomic_t irq_mis_count;
static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };

static DEFINE_SPINLOCK(ioapic_lock);
static DEFINE_SPINLOCK(vector_lock);
DEFINE_SPINLOCK(vector_lock);

int timer_through_8259 __initdata;

@@ -1209,10 +1209,6 @@ static int assign_irq_vector(int irq)
	return vector;
}

void setup_vector_irq(int cpu)
{
}

static struct irq_chip ioapic_chip;

#define IOAPIC_AUTO	-1
+15 −10
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ int timer_through_8259 __initdata;
static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };

static DEFINE_SPINLOCK(ioapic_lock);
DEFINE_SPINLOCK(vector_lock);
static DEFINE_SPINLOCK(vector_lock);

/*
 * # of IRQ routing registers
@@ -697,6 +697,19 @@ static int pin_2_irq(int idx, int apic, int pin)
	return irq;
}

void lock_vector_lock(void)
{
	/* Used to the online set of cpus does not change
	 * during assign_irq_vector.
	 */
	spin_lock(&vector_lock);
}

void unlock_vector_lock(void)
{
	spin_unlock(&vector_lock);
}

static int __assign_irq_vector(int irq, cpumask_t mask)
{
	/*
@@ -802,7 +815,7 @@ static void __clear_irq_vector(int irq)
	cpus_clear(cfg->domain);
}

static void __setup_vector_irq(int cpu)
void __setup_vector_irq(int cpu)
{
	/* Initialize vector_irq on a new cpu */
	/* This function must be called with vector_lock held */
@@ -825,14 +838,6 @@ static void __setup_vector_irq(int cpu)
	}
}

void setup_vector_irq(int cpu)
{
	spin_lock(&vector_lock);
	__setup_vector_irq(smp_processor_id());
	spin_unlock(&vector_lock);
}


static struct irq_chip ioapic_chip;

static void ioapic_register_intr(int irq, unsigned long trigger)
+6 −5
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ static void __init MP_bus_info(struct mpc_config_bus *m)
	if (x86_quirks->mpc_oem_bus_info)
		x86_quirks->mpc_oem_bus_info(m, str);
	else
		printk(KERN_INFO "Bus #%d is %s\n", m->mpc_busid, str);
		apic_printk(APIC_VERBOSE, "Bus #%d is %s\n", m->mpc_busid, str);

#if MAX_MP_BUSSES < 256
	if (m->mpc_busid >= MAX_MP_BUSSES) {
@@ -154,7 +154,7 @@ static void __init MP_ioapic_info(struct mpc_config_ioapic *m)

static void print_MP_intsrc_info(struct mpc_config_intsrc *m)
{
	printk(KERN_CONT "Int: type %d, pol %d, trig %d, bus %02x,"
	apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x,"
		" IRQ %02x, APIC ID %x, APIC INT %02x\n",
		m->mpc_irqtype, m->mpc_irqflag & 3,
		(m->mpc_irqflag >> 2) & 3, m->mpc_srcbus,
@@ -163,7 +163,7 @@ static void print_MP_intsrc_info(struct mpc_config_intsrc *m)

static void __init print_mp_irq_info(struct mp_config_intsrc *mp_irq)
{
	printk(KERN_CONT "Int: type %d, pol %d, trig %d, bus %02x,"
	apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x,"
		" IRQ %02x, APIC ID %x, APIC INT %02x\n",
		mp_irq->mp_irqtype, mp_irq->mp_irqflag & 3,
		(mp_irq->mp_irqflag >> 2) & 3, mp_irq->mp_srcbus,
@@ -235,7 +235,7 @@ static void __init MP_intsrc_info(struct mpc_config_intsrc *m)

static void __init MP_lintsrc_info(struct mpc_config_lintsrc *m)
{
	printk(KERN_INFO "Lint: type %d, pol %d, trig %d, bus %02x,"
	apic_printk(APIC_VERBOSE, "Lint: type %d, pol %d, trig %d, bus %02x,"
		" IRQ %02x, APIC ID %x, APIC LINT %02x\n",
		m->mpc_irqtype, m->mpc_irqflag & 3,
		(m->mpc_irqflag >> 2) & 3, m->mpc_srcbusid,
@@ -695,7 +695,8 @@ static int __init smp_scan_config(unsigned long base, unsigned long length,
	unsigned int *bp = phys_to_virt(base);
	struct intel_mp_floating *mpf;

	printk(KERN_DEBUG "Scan SMP from %p for %ld bytes.\n", bp, length);
	apic_printk(APIC_VERBOSE, "Scan SMP from %p for %ld bytes.\n",
			bp, length);
	BUILD_BUG_ON(sizeof(*mpf) != 16);

	while (length > 0) {
Loading