Print this page
4804 apix & pcplusmp are nearly warning free already
Tentatively Reviewed by: Robert Mustacchi <rm@joyent.com>


 536                 return (PSM_SUCCESS);
 537 
 538         if (!apic_picinit_called) {
 539                 /*
 540                  * Clear irq_struct. If two devices shared an intpt
 541                  * line & 1 unloaded before picinit, we are hosed. But, then
 542                  * we hope the machine survive.
 543                  */
 544                 irqptr->airq_mps_intr_index = FREE_INDEX;
 545                 irqptr->airq_temp_cpu = IRQ_UNINIT;
 546                 apic_free_vector(irqptr->airq_vector);
 547                 return (PSM_SUCCESS);
 548         }
 549         /*
 550          * Downgrade vector to new max_ipl if needed. If we cannot allocate,
 551          * use old IPL. Not very elegant, but it should work.
 552          */
 553         if ((irqptr->airq_ipl != max_ipl) && (max_ipl != PSM_INVALID_IPL) &&
 554             !ioapic_mask_workaround[irqptr->airq_ioapicindex]) {
 555                 apic_irq_t      *irqp;
 556                 if (vector = apic_allocate_vector(max_ipl, irqno, 1)) {
 557                         apic_mark_vector(irqheadptr->airq_vector, vector);
 558                         irqp = irqheadptr;
 559                         while (irqp) {
 560                                 irqp->airq_vector = vector;
 561                                 irqp->airq_ipl = (uchar_t)max_ipl;
 562                                 if (irqp->airq_temp_cpu != IRQ_UNINIT) {
 563                                         apic_record_rdt_entry(irqp, irqindex);
 564 
 565                                         iflag = intr_clear();
 566                                         lock_set(&apic_ioapic_lock);
 567 
 568                                         (void) apic_setup_io_intr(irqp,
 569                                             irqindex, B_FALSE);
 570 
 571                                         lock_clear(&apic_ioapic_lock);
 572                                         intr_restore(iflag);
 573                                 }
 574                                 irqp = irqp->airq_next;
 575                         }
 576                 }




 536                 return (PSM_SUCCESS);
 537 
 538         if (!apic_picinit_called) {
 539                 /*
 540                  * Clear irq_struct. If two devices shared an intpt
 541                  * line & 1 unloaded before picinit, we are hosed. But, then
 542                  * we hope the machine survive.
 543                  */
 544                 irqptr->airq_mps_intr_index = FREE_INDEX;
 545                 irqptr->airq_temp_cpu = IRQ_UNINIT;
 546                 apic_free_vector(irqptr->airq_vector);
 547                 return (PSM_SUCCESS);
 548         }
 549         /*
 550          * Downgrade vector to new max_ipl if needed. If we cannot allocate,
 551          * use old IPL. Not very elegant, but it should work.
 552          */
 553         if ((irqptr->airq_ipl != max_ipl) && (max_ipl != PSM_INVALID_IPL) &&
 554             !ioapic_mask_workaround[irqptr->airq_ioapicindex]) {
 555                 apic_irq_t      *irqp;
 556                 if ((vector = apic_allocate_vector(max_ipl, irqno, 1))) {
 557                         apic_mark_vector(irqheadptr->airq_vector, vector);
 558                         irqp = irqheadptr;
 559                         while (irqp) {
 560                                 irqp->airq_vector = vector;
 561                                 irqp->airq_ipl = (uchar_t)max_ipl;
 562                                 if (irqp->airq_temp_cpu != IRQ_UNINIT) {
 563                                         apic_record_rdt_entry(irqp, irqindex);
 564 
 565                                         iflag = intr_clear();
 566                                         lock_set(&apic_ioapic_lock);
 567 
 568                                         (void) apic_setup_io_intr(irqp,
 569                                             irqindex, B_FALSE);
 570 
 571                                         lock_clear(&apic_ioapic_lock);
 572                                         intr_restore(iflag);
 573                                 }
 574                                 irqp = irqp->airq_next;
 575                         }
 576                 }