Print this page
8626 make pcplusmp and apix warning-free
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

*** 18,27 **** --- 18,28 ---- * * CDDL HEADER END */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2017 Joyent, Inc. */ /* * Copyright (c) 2010, Intel Corporation. * All rights reserved. */
*** 642,652 **** hwpri -= (APIC_BASE_VECT >> APIC_IPL_SHIFT); ASSERT(hwpri >= 0); ASSERT(hwpri < MAXIPL); max_ipl = apic_vectortoipl[hwpri]; ! apic_ipls[apic_ipls_index] = max_ipl; irqp = irqheadptr; while (irqp) { irqp->airq_ipl = (uchar_t)max_ipl; irqp = irqp->airq_next; --- 643,653 ---- hwpri -= (APIC_BASE_VECT >> APIC_IPL_SHIFT); ASSERT(hwpri >= 0); ASSERT(hwpri < MAXIPL); max_ipl = apic_vectortoipl[hwpri]; ! apic_ipls[apic_ipls_index] = (uchar_t)max_ipl; irqp = irqheadptr; while (irqp) { irqp->airq_ipl = (uchar_t)max_ipl; irqp = irqp->airq_next;
*** 1048,1070 **** */ static int apic_setup_irq_table(dev_info_t *dip, int irqno, struct apic_io_intr *intrp, struct intrspec *ispec, iflag_t *intr_flagp, int type) { ! int origirq = ispec->intrspec_vec; ! uchar_t ipl = ispec->intrspec_pri; int newirq, intr_index; uchar_t ipin, ioapic, ioapicindex, vector; apic_irq_t *irqptr; major_t major; dev_info_t *sdip; DDI_INTR_IMPLDBG((CE_CONT, "apic_setup_irq_table: dip=0x%p type=%d " "irqno=0x%x origirq=0x%x\n", (void *)dip, type, irqno, origirq)); - ASSERT(ispec != NULL); - major = (dip != NULL) ? ddi_driver_major(dip) : 0; if (DDI_INTR_IS_MSI_OR_MSIX(type)) { /* MSI/X doesn't need to setup ioapic stuffs */ ioapicindex = 0xff; --- 1049,1074 ---- */ static int apic_setup_irq_table(dev_info_t *dip, int irqno, struct apic_io_intr *intrp, struct intrspec *ispec, iflag_t *intr_flagp, int type) { ! int origirq; ! uchar_t ipl; int newirq, intr_index; uchar_t ipin, ioapic, ioapicindex, vector; apic_irq_t *irqptr; major_t major; dev_info_t *sdip; + ASSERT(ispec != NULL); + + origirq = ispec->intrspec_vec; + ipl = ispec->intrspec_pri; + DDI_INTR_IMPLDBG((CE_CONT, "apic_setup_irq_table: dip=0x%p type=%d " "irqno=0x%x origirq=0x%x\n", (void *)dip, type, irqno, origirq)); major = (dip != NULL) ? ddi_driver_major(dip) : 0; if (DDI_INTR_IS_MSI_OR_MSIX(type)) { /* MSI/X doesn't need to setup ioapic stuffs */ ioapicindex = 0xff;
*** 1119,1132 **** ioapic = apic_io_id[ioapicindex]; ipin = (uchar_t)irqno; intr_index = DEFAULT_INDEX; } ! if (ispec == NULL) { ! APIC_VERBOSE_IOAPIC((CE_WARN, "No intrspec for irqno = %x\n", ! irqno)); ! } else if ((vector = apic_allocate_vector(ipl, irqno, 0)) == 0) { if ((newirq = apic_share_vector(irqno, intr_flagp, intr_index, ipl, ioapicindex, ipin, &irqptr)) != -1) { irqptr->airq_ipl = ipl; irqptr->airq_origirq = (uchar_t)origirq; irqptr->airq_dip = dip; --- 1123,1133 ---- ioapic = apic_io_id[ioapicindex]; ipin = (uchar_t)irqno; intr_index = DEFAULT_INDEX; } ! if ((vector = apic_allocate_vector(ipl, irqno, 0)) == 0) { if ((newirq = apic_share_vector(irqno, intr_flagp, intr_index, ipl, ioapicindex, ipin, &irqptr)) != -1) { irqptr->airq_ipl = ipl; irqptr->airq_origirq = (uchar_t)origirq; irqptr->airq_dip = dip;
*** 1226,1256 **** return (IRQ_UNBOUND); if (apic_nproc == 1) return (0); ! drv_name = NULL; ! rc = DDI_PROP_NOT_FOUND; ! major = (major_t)-1; ! if (dip != NULL) { name = ddi_get_name(dip); major = ddi_name_to_major(name); drv_name = ddi_major_to_name(major); instance = ddi_get_instance(dip); if (apic_intr_policy == INTR_ROUND_ROBIN_WITH_AFFINITY) { i = apic_min_device_irq; for (; i <= apic_max_device_irq; i++) { - if ((i == irq) || (apic_irq_table[i] == NULL) || (apic_irq_table[i]->airq_mps_intr_index == FREE_INDEX)) continue; if ((apic_irq_table[i]->airq_major == major) && ! (!(apic_irq_table[i]->airq_cpu & ! IRQ_USER_BOUND))) { ! cpu = apic_irq_table[i]->airq_cpu; cmn_err(CE_CONT, "!%s: %s (%s) instance #%d " "irq 0x%x vector 0x%x ioapic 0x%x " --- 1227,1265 ---- return (IRQ_UNBOUND); if (apic_nproc == 1) return (0); ! if (dip == NULL) { ! iflag = intr_clear(); ! lock_set(&apic_ioapic_lock); ! bind_cpu = apic_get_next_bind_cpu(); ! lock_clear(&apic_ioapic_lock); ! intr_restore(iflag); ! ! cmn_err(CE_CONT, "!%s: irq 0x%x " ! "vector 0x%x ioapic 0x%x intin 0x%x is bound to cpu %d\n", ! psm_name, irq, apic_irq_table[irq]->airq_vector, ioapicid, ! intin, bind_cpu & ~IRQ_USER_BOUND); ! ! return ((uint32_t)bind_cpu); ! } ! name = ddi_get_name(dip); major = ddi_name_to_major(name); drv_name = ddi_major_to_name(major); instance = ddi_get_instance(dip); if (apic_intr_policy == INTR_ROUND_ROBIN_WITH_AFFINITY) { i = apic_min_device_irq; for (; i <= apic_max_device_irq; i++) { if ((i == irq) || (apic_irq_table[i] == NULL) || (apic_irq_table[i]->airq_mps_intr_index == FREE_INDEX)) continue; if ((apic_irq_table[i]->airq_major == major) && ! (!(apic_irq_table[i]->airq_cpu & IRQ_USER_BOUND))) { cpu = apic_irq_table[i]->airq_cpu; cmn_err(CE_CONT, "!%s: %s (%s) instance #%d " "irq 0x%x vector 0x%x ioapic 0x%x "
*** 1280,1290 **** (caddr_t)&prop_val, &prop_len); if (rc != DDI_PROP_SUCCESS) { rc = ddi_getlongprop(DDI_DEV_T_ANY, dip, 0, "intpt_bind_cpus", (caddr_t)&prop_val, &prop_len); } - } if (rc == DDI_PROP_SUCCESS) { for (i = count = 0; i < (prop_len - 1); i++) if (prop_val[i] == ',') count++; if (prop_val[i-1] != ',') --- 1289,1298 ----
*** 1315,1343 **** /* * no need to check apic_cpus[].aci_status, if specific CPU is * not up, then post_cpu_start will handle it. */ } if (rc != DDI_PROP_SUCCESS) { iflag = intr_clear(); lock_set(&apic_ioapic_lock); bind_cpu = apic_get_next_bind_cpu(); lock_clear(&apic_ioapic_lock); intr_restore(iflag); } - if (drv_name != NULL) cmn_err(CE_CONT, "!%s: %s (%s) instance %d irq 0x%x " "vector 0x%x ioapic 0x%x intin 0x%x is bound to cpu %d\n", psm_name, name, drv_name, instance, irq, apic_irq_table[irq]->airq_vector, ioapicid, intin, bind_cpu & ~IRQ_USER_BOUND); - else - cmn_err(CE_CONT, "!%s: irq 0x%x " - "vector 0x%x ioapic 0x%x intin 0x%x is bound to cpu %d\n", - psm_name, irq, apic_irq_table[irq]->airq_vector, ioapicid, - intin, bind_cpu & ~IRQ_USER_BOUND); return ((uint32_t)bind_cpu); } /* --- 1323,1346 ---- /* * no need to check apic_cpus[].aci_status, if specific CPU is * not up, then post_cpu_start will handle it. */ } + if (rc != DDI_PROP_SUCCESS) { iflag = intr_clear(); lock_set(&apic_ioapic_lock); bind_cpu = apic_get_next_bind_cpu(); lock_clear(&apic_ioapic_lock); intr_restore(iflag); } cmn_err(CE_CONT, "!%s: %s (%s) instance %d irq 0x%x " "vector 0x%x ioapic 0x%x intin 0x%x is bound to cpu %d\n", psm_name, name, drv_name, instance, irq, apic_irq_table[irq]->airq_vector, ioapicid, intin, bind_cpu & ~IRQ_USER_BOUND); return ((uint32_t)bind_cpu); } /*