Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86: ioapic/hpet: Convert to new chip functions

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@elte.hu>

+26 -30
+6 -4
arch/x86/include/asm/hpet.h
··· 74 74 extern unsigned int hpet_readl(unsigned int a); 75 75 extern void force_hpet_resume(void); 76 76 77 - extern void hpet_msi_unmask(unsigned int irq); 78 - extern void hpet_msi_mask(unsigned int irq); 79 - extern void hpet_msi_write(unsigned int irq, struct msi_msg *msg); 80 - extern void hpet_msi_read(unsigned int irq, struct msi_msg *msg); 77 + struct irq_data; 78 + extern void hpet_msi_unmask(struct irq_data *data); 79 + extern void hpet_msi_mask(struct irq_data *data); 80 + struct hpet_dev; 81 + extern void hpet_msi_write(struct hpet_dev *hdev, struct msi_msg *msg); 82 + extern void hpet_msi_read(struct hpet_dev *hdev, struct msi_msg *msg); 81 83 82 84 #ifdef CONFIG_PCI_MSI 83 85 extern int arch_setup_hpet_msi(unsigned int irq, unsigned int id);
+14 -16
arch/x86/kernel/apic/io_apic.c
··· 3605 3605 #ifdef CONFIG_HPET_TIMER 3606 3606 3607 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_cfg *cfg; 3611 + struct irq_desc *desc = irq_to_desc(data->irq); 3612 + struct irq_cfg *cfg = data->chip_data; 3612 3613 struct msi_msg msg; 3613 3614 unsigned int dest; 3614 3615 3615 3616 if (set_desc_affinity(desc, mask, &dest)) 3616 3617 return -1; 3617 3618 3618 - cfg = get_irq_desc_chip_data(desc); 3619 - 3620 - hpet_msi_read(irq, &msg); 3619 + hpet_msi_read(data->handler_data, &msg); 3621 3620 3622 3621 msg.data &= ~MSI_DATA_VECTOR_MASK; 3623 3622 msg.data |= MSI_DATA_VECTOR(cfg->vector); 3624 3623 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; 3625 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 3628 return 0; 3630 3629 } ··· 3632 3633 3633 3634 static struct irq_chip ir_hpet_msi_type = { 3634 3635 .name = "IR-HPET_MSI", 3635 - .unmask = hpet_msi_unmask, 3636 - .mask = hpet_msi_mask, 3636 + .irq_unmask = hpet_msi_unmask, 3637 + .irq_mask = hpet_msi_mask, 3637 3638 #ifdef CONFIG_INTR_REMAP 3638 3639 .irq_ack = ir_ack_apic_edge, 3639 3640 #ifdef CONFIG_SMP ··· 3645 3646 3646 3647 static struct irq_chip hpet_msi_type = { 3647 3648 .name = "HPET_MSI", 3648 - .unmask = hpet_msi_unmask, 3649 - .mask = hpet_msi_mask, 3649 + .irq_unmask = hpet_msi_unmask, 3650 + .irq_mask = hpet_msi_mask, 3650 3651 .irq_ack = ack_apic_edge, 3651 3652 #ifdef CONFIG_SMP 3652 - .set_affinity = hpet_msi_set_affinity, 3653 + .irq_set_affinity = hpet_msi_set_affinity, 3653 3654 #endif 3654 3655 .irq_retrigger = ioapic_retrigger_irq, 3655 3656 }; 3656 3657 3657 3658 int arch_setup_hpet_msi(unsigned int irq, unsigned int id) 3658 3659 { 3659 - int ret; 3660 3660 struct msi_msg msg; 3661 - struct irq_desc *desc = irq_to_desc(irq); 3661 + int ret; 3662 3662 3663 3663 if (intr_remapping_enabled) { 3664 3664 struct intel_iommu *iommu = map_hpet_to_ir(id); ··· 3675 3677 if (ret < 0) 3676 3678 return ret; 3677 3679 3678 - hpet_msi_write(irq, &msg); 3679 - desc->status |= IRQ_MOVE_PCNTXT; 3680 + hpet_msi_write(get_irq_data(irq), &msg); 3681 + irq_set_status_flags(irq,IRQ_MOVE_PCNTXT); 3680 3682 if (irq_remapped(irq)) 3681 3683 set_irq_chip_and_handler_name(irq, &ir_hpet_msi_type, 3682 3684 handle_edge_irq, "edge");
+6 -10
arch/x86/kernel/hpet.c
··· 440 440 static DEFINE_PER_CPU(struct hpet_dev *, cpu_hpet_dev); 441 441 static struct hpet_dev *hpet_devs; 442 442 443 - void hpet_msi_unmask(unsigned int irq) 443 + void hpet_msi_unmask(struct irq_data *data) 444 444 { 445 - struct hpet_dev *hdev = get_irq_data(irq); 445 + struct hpet_dev *hdev = data->handler_data; 446 446 unsigned int cfg; 447 447 448 448 /* unmask it */ ··· 451 451 hpet_writel(cfg, HPET_Tn_CFG(hdev->num)); 452 452 } 453 453 454 - void hpet_msi_mask(unsigned int irq) 454 + void hpet_msi_mask(struct irq_data *data) 455 455 { 456 + struct hpet_dev *hdev = data->handler_data; 456 457 unsigned int cfg; 457 - struct hpet_dev *hdev = get_irq_data(irq); 458 458 459 459 /* mask it */ 460 460 cfg = hpet_readl(HPET_Tn_CFG(hdev->num)); ··· 462 462 hpet_writel(cfg, HPET_Tn_CFG(hdev->num)); 463 463 } 464 464 465 - void hpet_msi_write(unsigned int irq, struct msi_msg *msg) 465 + void hpet_msi_write(struct hpet_dev *hdev, struct msi_msg *msg) 466 466 { 467 - struct hpet_dev *hdev = get_irq_data(irq); 468 - 469 467 hpet_writel(msg->data, HPET_Tn_ROUTE(hdev->num)); 470 468 hpet_writel(msg->address_lo, HPET_Tn_ROUTE(hdev->num) + 4); 471 469 } 472 470 473 - void hpet_msi_read(unsigned int irq, struct msi_msg *msg) 471 + void hpet_msi_read(struct hpet_dev *hdev, struct msi_msg *msg) 474 472 { 475 - struct hpet_dev *hdev = get_irq_data(irq); 476 - 477 473 msg->data = hpet_readl(HPET_Tn_ROUTE(hdev->num)); 478 474 msg->address_lo = hpet_readl(HPET_Tn_ROUTE(hdev->num) + 4); 479 475 msg->address_hi = 0;