|
@@ -212,126 +212,6 @@ static void free_irq_cfg(unsigned int at, struct irq_cfg *cfg)
|
|
|
kfree(cfg);
|
|
|
}
|
|
|
|
|
|
-#if 0
|
|
|
-int arch_init_chip_data(struct irq_desc *desc, int node)
|
|
|
-{
|
|
|
- struct irq_cfg *cfg;
|
|
|
-
|
|
|
- cfg = get_irq_desc_chip_data(desc);
|
|
|
- if (!cfg) {
|
|
|
- cfg = alloc_irq_cfg(desc->irq, node);
|
|
|
- desc->chip_data = cfg;
|
|
|
- if (!cfg) {
|
|
|
- printk(KERN_ERR "can not alloc irq_cfg\n");
|
|
|
- BUG_ON(1);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/* for move_irq_desc */
|
|
|
-static void
|
|
|
-init_copy_irq_2_pin(struct irq_cfg *old_cfg, struct irq_cfg *cfg, int node)
|
|
|
-{
|
|
|
- struct irq_pin_list *old_entry, *head, *tail, *entry;
|
|
|
-
|
|
|
- cfg->irq_2_pin = NULL;
|
|
|
- old_entry = old_cfg->irq_2_pin;
|
|
|
- if (!old_entry)
|
|
|
- return;
|
|
|
-
|
|
|
- entry = alloc_irq_pin_list(node);
|
|
|
- if (!entry)
|
|
|
- return;
|
|
|
-
|
|
|
- entry->apic = old_entry->apic;
|
|
|
- entry->pin = old_entry->pin;
|
|
|
- head = entry;
|
|
|
- tail = entry;
|
|
|
- old_entry = old_entry->next;
|
|
|
- while (old_entry) {
|
|
|
- entry = alloc_irq_pin_list(node);
|
|
|
- if (!entry) {
|
|
|
- entry = head;
|
|
|
- while (entry) {
|
|
|
- head = entry->next;
|
|
|
- kfree(entry);
|
|
|
- entry = head;
|
|
|
- }
|
|
|
- /* still use the old one */
|
|
|
- return;
|
|
|
- }
|
|
|
- entry->apic = old_entry->apic;
|
|
|
- entry->pin = old_entry->pin;
|
|
|
- tail->next = entry;
|
|
|
- tail = entry;
|
|
|
- old_entry = old_entry->next;
|
|
|
- }
|
|
|
-
|
|
|
- tail->next = NULL;
|
|
|
- cfg->irq_2_pin = head;
|
|
|
-}
|
|
|
-
|
|
|
-static void free_irq_2_pin(struct irq_cfg *old_cfg, struct irq_cfg *cfg)
|
|
|
-{
|
|
|
- struct irq_pin_list *entry, *next;
|
|
|
-
|
|
|
- if (old_cfg->irq_2_pin == cfg->irq_2_pin)
|
|
|
- return;
|
|
|
-
|
|
|
- entry = old_cfg->irq_2_pin;
|
|
|
-
|
|
|
- while (entry) {
|
|
|
- next = entry->next;
|
|
|
- kfree(entry);
|
|
|
- entry = next;
|
|
|
- }
|
|
|
- old_cfg->irq_2_pin = NULL;
|
|
|
-}
|
|
|
-
|
|
|
-void arch_init_copy_chip_data(struct irq_desc *old_desc,
|
|
|
- struct irq_desc *desc, int node)
|
|
|
-{
|
|
|
- struct irq_cfg *cfg;
|
|
|
- struct irq_cfg *old_cfg;
|
|
|
-
|
|
|
- cfg = alloc_irq_cfg(desc->irq, node);
|
|
|
-
|
|
|
- if (!cfg)
|
|
|
- return;
|
|
|
-
|
|
|
- desc->chip_data = cfg;
|
|
|
-
|
|
|
- old_cfg = old_desc->chip_data;
|
|
|
-
|
|
|
- cfg->vector = old_cfg->vector;
|
|
|
- cfg->move_in_progress = old_cfg->move_in_progress;
|
|
|
- cpumask_copy(cfg->domain, old_cfg->domain);
|
|
|
- cpumask_copy(cfg->old_domain, old_cfg->old_domain);
|
|
|
-
|
|
|
- init_copy_irq_2_pin(old_cfg, cfg, node);
|
|
|
-}
|
|
|
-
|
|
|
-void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc)
|
|
|
-{
|
|
|
- struct irq_cfg *old_cfg, *cfg;
|
|
|
-
|
|
|
- old_cfg = get_irq_desc_chip_data(old_desc);
|
|
|
- cfg = get_irq_desc_chip_data(desc);
|
|
|
-
|
|
|
- if (old_cfg == cfg)
|
|
|
- return;
|
|
|
-
|
|
|
- if (old_cfg) {
|
|
|
- free_irq_2_pin(old_cfg, cfg);
|
|
|
- free_irq_cfg(old_desc->irq, old_cfg);
|
|
|
- old_desc->chip_data = NULL;
|
|
|
- }
|
|
|
-}
|
|
|
-/* end for move_irq_desc */
|
|
|
-#endif
|
|
|
-
|
|
|
#else
|
|
|
|
|
|
struct irq_cfg *irq_cfg(unsigned int irq)
|