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>

@@ -106,10 +106,12 @@
 static int      apic_disable_intr(processorid_t cpun);
 static void     apic_enable_intr(processorid_t cpun);
 static int              apic_get_ipivect(int ipl, int type);
 static void     apic_post_cyclic_setup(void *arg);
 
+#define UCHAR_MAX       UINT8_MAX
+
 /*
  * The following vector assignments influence the value of ipltopri and
  * vectortoipl. Note that vectors 0 - 0x1f are not used. We can program
  * idle to 0 and IPL 0 to 0xf to differentiate idle in case
  * we care to do so in future. Note some IPLs which are rarely used

@@ -1066,11 +1068,11 @@
 apic_alloc_msi_vectors(dev_info_t *dip, int inum, int count, int pri,
     int behavior)
 {
         int     rcount, i;
         uchar_t start, irqno;
-        uint32_t cpu;
+        uint32_t cpu = 0;
         major_t major;
         apic_irq_t      *irqptr;
 
         DDI_INTR_IMPLDBG((CE_CONT, "apic_alloc_msi_vectors: dip=0x%p "
             "inum=0x%x  pri=0x%x count=0x%x behavior=%d\n",

@@ -1138,11 +1140,12 @@
                 apic_vector_to_irq[start + i] = (uchar_t)irqno;
 
                 irqptr->airq_vector = (uchar_t)(start + i);
                 irqptr->airq_ioapicindex = (uchar_t)inum;       /* start */
                 irqptr->airq_intin_no = (uchar_t)rcount;
-                irqptr->airq_ipl = pri;
+                ASSERT(pri >= 0 && pri <= UCHAR_MAX);
+                irqptr->airq_ipl = (uchar_t)pri;
                 irqptr->airq_vector = start + i;
                 irqptr->airq_origirq = (uchar_t)(inum + i);
                 irqptr->airq_share_id = 0;
                 irqptr->airq_mps_intr_index = MSI_INDEX;
                 irqptr->airq_dip = dip;

@@ -1215,11 +1218,12 @@
                 }
                 apic_max_device_irq = max(irqno, apic_max_device_irq);
                 apic_min_device_irq = min(irqno, apic_min_device_irq);
                 irqptr = apic_irq_table[irqno];
                 irqptr->airq_vector = (uchar_t)vector;
-                irqptr->airq_ipl = pri;
+                ASSERT(pri >= 0 && pri <= UCHAR_MAX);
+                irqptr->airq_ipl = (uchar_t)pri;
                 irqptr->airq_origirq = (uchar_t)(inum + i);
                 irqptr->airq_share_id = 0;
                 irqptr->airq_mps_intr_index = MSIX_INDEX;
                 irqptr->airq_dip = dip;
                 irqptr->airq_major = major;

@@ -1257,11 +1261,12 @@
         for (i = lowest; i <= highest; i++) {
                 if (APIC_CHECK_RESERVE_VECTORS(i))
                         continue;
                 if (apic_vector_to_irq[i] == APIC_RESV_IRQ) {
                         apic_vector_to_irq[i] = (uchar_t)irq;
-                        return (i);
+                        ASSERT(i >= 0 && i <= UCHAR_MAX);
+                        return ((uchar_t)i);
                 }
         }
 
         return (0);
 }