Commit 4cee9fe5 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull x86 apic changes from Ingo Molnar:
 "The main changes in this cycle were:

   - Re-activate the hw IRQ resend mechanism that was downgraded to a
     sw-resend unintentionally. (Ruslan Ruslichenko)

   - Avoid sporadic spurious hrtimer interrupts (Frederic Weisbecker)"

[ Let's see if the io_apic retrigger ends up surviving this release, it
  got reverted last time because it found problems elsewhere  - Linus ]

* 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/apic: Fix a typo in a comment line
  x86/ioapic: Restore IO-APIC irq_chip retrigger callback
  x86/apic: Implement set_state_oneshot_stopped() callback
  x86/apic: Fix typos in comments
parents 42e1b14b 543113d2
...@@ -529,18 +529,19 @@ static void lapic_timer_broadcast(const struct cpumask *mask) ...@@ -529,18 +529,19 @@ static void lapic_timer_broadcast(const struct cpumask *mask)
* The local apic timer can be used for any function which is CPU local. * The local apic timer can be used for any function which is CPU local.
*/ */
static struct clock_event_device lapic_clockevent = { static struct clock_event_device lapic_clockevent = {
.name = "lapic", .name = "lapic",
.features = CLOCK_EVT_FEAT_PERIODIC | .features = CLOCK_EVT_FEAT_PERIODIC |
CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_C3STOP CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_C3STOP
| CLOCK_EVT_FEAT_DUMMY, | CLOCK_EVT_FEAT_DUMMY,
.shift = 32, .shift = 32,
.set_state_shutdown = lapic_timer_shutdown, .set_state_shutdown = lapic_timer_shutdown,
.set_state_periodic = lapic_timer_set_periodic, .set_state_periodic = lapic_timer_set_periodic,
.set_state_oneshot = lapic_timer_set_oneshot, .set_state_oneshot = lapic_timer_set_oneshot,
.set_next_event = lapic_next_event, .set_state_oneshot_stopped = lapic_timer_shutdown,
.broadcast = lapic_timer_broadcast, .set_next_event = lapic_next_event,
.rating = 100, .broadcast = lapic_timer_broadcast,
.irq = -1, .rating = 100,
.irq = -1,
}; };
static DEFINE_PER_CPU(struct clock_event_device, lapic_events); static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
...@@ -1245,7 +1246,7 @@ static void lapic_setup_esr(void) ...@@ -1245,7 +1246,7 @@ static void lapic_setup_esr(void)
/** /**
* setup_local_APIC - setup the local APIC * setup_local_APIC - setup the local APIC
* *
* Used to setup local APIC while initializing BSP or bringin up APs. * Used to setup local APIC while initializing BSP or bringing up APs.
* Always called with preemption disabled. * Always called with preemption disabled.
*/ */
void setup_local_APIC(void) void setup_local_APIC(void)
...@@ -2028,8 +2029,8 @@ void disconnect_bsp_APIC(int virt_wire_setup) ...@@ -2028,8 +2029,8 @@ void disconnect_bsp_APIC(int virt_wire_setup)
/* /*
* The number of allocated logical CPU IDs. Since logical CPU IDs are allocated * The number of allocated logical CPU IDs. Since logical CPU IDs are allocated
* contiguously, it equals to current allocated max logical CPU ID plus 1. * contiguously, it equals to current allocated max logical CPU ID plus 1.
* All allocated CPU ID should be in [0, nr_logical_cpuidi), so the maximum of * All allocated CPU IDs should be in the [0, nr_logical_cpuids) range,
* nr_logical_cpuids is nr_cpu_ids. * so the maximum of nr_logical_cpuids is nr_cpu_ids.
* *
* NOTE: Reserve 0 for BSP. * NOTE: Reserve 0 for BSP.
*/ */
...@@ -2094,7 +2095,7 @@ int __generic_processor_info(int apicid, int version, bool enabled) ...@@ -2094,7 +2095,7 @@ int __generic_processor_info(int apicid, int version, bool enabled)
* Since fixing handling of boot_cpu_physical_apicid requires * Since fixing handling of boot_cpu_physical_apicid requires
* another discussion and tests on each platform, we leave it * another discussion and tests on each platform, we leave it
* for now and here we use read_apic_id() directly in this * for now and here we use read_apic_id() directly in this
* function, generic_processor_info(). * function, __generic_processor_info().
*/ */
if (disabled_cpu_apicid != BAD_APICID && if (disabled_cpu_apicid != BAD_APICID &&
disabled_cpu_apicid != read_apic_id() && disabled_cpu_apicid != read_apic_id() &&
......
...@@ -1875,6 +1875,7 @@ static struct irq_chip ioapic_chip __read_mostly = { ...@@ -1875,6 +1875,7 @@ static struct irq_chip ioapic_chip __read_mostly = {
.irq_ack = irq_chip_ack_parent, .irq_ack = irq_chip_ack_parent,
.irq_eoi = ioapic_ack_level, .irq_eoi = ioapic_ack_level,
.irq_set_affinity = ioapic_set_affinity, .irq_set_affinity = ioapic_set_affinity,
.irq_retrigger = irq_chip_retrigger_hierarchy,
.flags = IRQCHIP_SKIP_SET_WAKE, .flags = IRQCHIP_SKIP_SET_WAKE,
}; };
...@@ -1886,6 +1887,7 @@ static struct irq_chip ioapic_ir_chip __read_mostly = { ...@@ -1886,6 +1887,7 @@ static struct irq_chip ioapic_ir_chip __read_mostly = {
.irq_ack = irq_chip_ack_parent, .irq_ack = irq_chip_ack_parent,
.irq_eoi = ioapic_ir_ack_level, .irq_eoi = ioapic_ir_ack_level,
.irq_set_affinity = ioapic_set_affinity, .irq_set_affinity = ioapic_set_affinity,
.irq_retrigger = irq_chip_retrigger_hierarchy,
.flags = IRQCHIP_SKIP_SET_WAKE, .flags = IRQCHIP_SKIP_SET_WAKE,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment