diff options
Diffstat (limited to 'arch/x86/kernel/apic/io_apic.c')
-rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index b8b013f0cfd..49aa857ff00 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -3605,26 +3605,25 @@ int arch_setup_dmar_msi(unsigned int irq) | |||
3605 | #ifdef CONFIG_HPET_TIMER | 3605 | #ifdef CONFIG_HPET_TIMER |
3606 | 3606 | ||
3607 | #ifdef CONFIG_SMP | 3607 | #ifdef CONFIG_SMP |
3608 | static int hpet_msi_set_affinity(unsigned int irq, const struct cpumask *mask) | 3608 | static int hpet_msi_set_affinity(struct irq_data *data, |
3609 | const struct cpumask *mask, bool force) | ||
3609 | { | 3610 | { |
3610 | struct irq_desc *desc = irq_to_desc(irq); | 3611 | struct irq_desc *desc = irq_to_desc(data->irq); |
3611 | struct irq_cfg *cfg; | 3612 | struct irq_cfg *cfg = data->chip_data; |
3612 | struct msi_msg msg; | 3613 | struct msi_msg msg; |
3613 | unsigned int dest; | 3614 | unsigned int dest; |
3614 | 3615 | ||
3615 | if (set_desc_affinity(desc, mask, &dest)) | 3616 | if (set_desc_affinity(desc, mask, &dest)) |
3616 | return -1; | 3617 | return -1; |
3617 | 3618 | ||
3618 | cfg = get_irq_desc_chip_data(desc); | 3619 | hpet_msi_read(data->handler_data, &msg); |
3619 | |||
3620 | hpet_msi_read(irq, &msg); | ||
3621 | 3620 | ||
3622 | msg.data &= ~MSI_DATA_VECTOR_MASK; | 3621 | msg.data &= ~MSI_DATA_VECTOR_MASK; |
3623 | msg.data |= MSI_DATA_VECTOR(cfg->vector); | 3622 | msg.data |= MSI_DATA_VECTOR(cfg->vector); |
3624 | msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; | 3623 | msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; |
3625 | msg.address_lo |= MSI_ADDR_DEST_ID(dest); | 3624 | msg.address_lo |= MSI_ADDR_DEST_ID(dest); |
3626 | 3625 | ||
3627 | hpet_msi_write(irq, &msg); | 3626 | hpet_msi_write(data->handler_data, &msg); |
3628 | 3627 | ||
3629 | return 0; | 3628 | return 0; |
3630 | } | 3629 | } |
@@ -3633,8 +3632,8 @@ static int hpet_msi_set_affinity(unsigned int irq, const struct cpumask *mask) | |||
3633 | 3632 | ||
3634 | static struct irq_chip ir_hpet_msi_type = { | 3633 | static struct irq_chip ir_hpet_msi_type = { |
3635 | .name = "IR-HPET_MSI", | 3634 | .name = "IR-HPET_MSI", |
3636 | .unmask = hpet_msi_unmask, | 3635 | .irq_unmask = hpet_msi_unmask, |
3637 | .mask = hpet_msi_mask, | 3636 | .irq_mask = hpet_msi_mask, |
3638 | #ifdef CONFIG_INTR_REMAP | 3637 | #ifdef CONFIG_INTR_REMAP |
3639 | .irq_ack = ir_ack_apic_edge, | 3638 | .irq_ack = ir_ack_apic_edge, |
3640 | #ifdef CONFIG_SMP | 3639 | #ifdef CONFIG_SMP |
@@ -3646,20 +3645,19 @@ static struct irq_chip ir_hpet_msi_type = { | |||
3646 | 3645 | ||
3647 | static struct irq_chip hpet_msi_type = { | 3646 | static struct irq_chip hpet_msi_type = { |
3648 | .name = "HPET_MSI", | 3647 | .name = "HPET_MSI", |
3649 | .unmask = hpet_msi_unmask, | 3648 | .irq_unmask = hpet_msi_unmask, |
3650 | .mask = hpet_msi_mask, | 3649 | .irq_mask = hpet_msi_mask, |
3651 | .irq_ack = ack_apic_edge, | 3650 | .irq_ack = ack_apic_edge, |
3652 | #ifdef CONFIG_SMP | 3651 | #ifdef CONFIG_SMP |
3653 | .set_affinity = hpet_msi_set_affinity, | 3652 | .irq_set_affinity = hpet_msi_set_affinity, |
3654 | #endif | 3653 | #endif |
3655 | .irq_retrigger = ioapic_retrigger_irq, | 3654 | .irq_retrigger = ioapic_retrigger_irq, |
3656 | }; | 3655 | }; |
3657 | 3656 | ||
3658 | int arch_setup_hpet_msi(unsigned int irq, unsigned int id) | 3657 | int arch_setup_hpet_msi(unsigned int irq, unsigned int id) |
3659 | { | 3658 | { |
3660 | int ret; | ||
3661 | struct msi_msg msg; | 3659 | struct msi_msg msg; |
3662 | struct irq_desc *desc = irq_to_desc(irq); | 3660 | int ret; |
3663 | 3661 | ||
3664 | if (intr_remapping_enabled) { | 3662 | if (intr_remapping_enabled) { |
3665 | struct intel_iommu *iommu = map_hpet_to_ir(id); | 3663 | struct intel_iommu *iommu = map_hpet_to_ir(id); |
@@ -3677,8 +3675,8 @@ int arch_setup_hpet_msi(unsigned int irq, unsigned int id) | |||
3677 | if (ret < 0) | 3675 | if (ret < 0) |
3678 | return ret; | 3676 | return ret; |
3679 | 3677 | ||
3680 | hpet_msi_write(irq, &msg); | 3678 | hpet_msi_write(get_irq_data(irq), &msg); |
3681 | desc->status |= IRQ_MOVE_PCNTXT; | 3679 | irq_set_status_flags(irq,IRQ_MOVE_PCNTXT); |
3682 | if (irq_remapped(irq)) | 3680 | if (irq_remapped(irq)) |
3683 | set_irq_chip_and_handler_name(irq, &ir_hpet_msi_type, | 3681 | set_irq_chip_and_handler_name(irq, &ir_hpet_msi_type, |
3684 | handle_edge_irq, "edge"); | 3682 | handle_edge_irq, "edge"); |