struct list_head        list;
        struct acpi_pci_id      id;
        u8                      pin;
-       struct {
-               acpi_handle             handle;
-               u32                     index;
-       }                       link;
-       u32                     irq;
+       acpi_handle             link;
+       u32                     index;          /* GSI, or link _CRS index */
 };
 
 static LIST_HEAD(acpi_prt_list);
 
        do_prt_fixups(entry, prt);
 
+       entry->index = prt->source_index;
+
        /*
         * Type 1: Dynamic
         * ---------------
         *       (e.g. exists somewhere 'below' this _PRT entry in the ACPI
         *       namespace).
         */
-       if (prt->source[0]) {
-               acpi_get_handle(handle, prt->source, &entry->link.handle);
-               entry->link.index = prt->source_index;
-       }
+       if (prt->source[0])
+               acpi_get_handle(handle, prt->source, &entry->link);
+
        /*
         * Type 2: Static
         * --------------
         * the IRQ value, which is hardwired to specific interrupt inputs on
         * the interrupt controller.
         */
-       else
-               entry->link.index = prt->source_index;
 
        ACPI_DEBUG_PRINT_RAW((ACPI_DB_INFO,
                              "      %04x:%02x:%02x[%c] -> %s[%d]\n",
                              entry->id.segment, entry->id.bus,
                              entry->id.device, pin_name(entry->pin),
-                             prt->source, entry->link.index));
+                             prt->source, entry->index));
 
        spin_lock(&acpi_prt_lock);
        list_add_tail(&entry->list, &acpi_prt_list);
        int irq;
 
 
-       if (entry->link.handle) {
-               irq = acpi_pci_link_allocate_irq(entry->link.handle,
-                                                entry->link.index, triggering,
-                                                polarity, link);
+       if (entry->link) {
+               irq = acpi_pci_link_allocate_irq(entry->link, entry->index,
+                                                triggering, polarity, link);
                if (irq < 0) {
                        printk(KERN_WARNING PREFIX
                                      "Invalid IRQ link routing entry\n");
                        return -1;
                }
        } else {
-               irq = entry->link.index;
+               irq = entry->index;
                *triggering = ACPI_LEVEL_SENSITIVE;
                *polarity = ACPI_ACTIVE_LOW;
        }
 {
        int irq;
 
-       if (entry->link.handle) {
-               irq = acpi_pci_link_free_irq(entry->link.handle);
+       if (entry->link) {
+               irq = acpi_pci_link_free_irq(entry->link);
        } else {
-               irq = entry->link.index;
+               irq = entry->index;
        }
        return irq;
 }