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>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/i86pc/io/pcplusmp/apic.c
          +++ new/usr/src/uts/i86pc/io/pcplusmp/apic.c
↓ open down ↓ 100 lines elided ↑ open up ↑
 101  101  static int      apic_intr_enter(int ipl, int *vect);
 102  102  static void     apic_setspl(int ipl);
 103  103  static void     x2apic_setspl(int ipl);
 104  104  static int      apic_addspl(int ipl, int vector, int min_ipl, int max_ipl);
 105  105  static int      apic_delspl(int ipl, int vector, int min_ipl, int max_ipl);
 106  106  static int      apic_disable_intr(processorid_t cpun);
 107  107  static void     apic_enable_intr(processorid_t cpun);
 108  108  static int              apic_get_ipivect(int ipl, int type);
 109  109  static void     apic_post_cyclic_setup(void *arg);
 110  110  
      111 +#define UCHAR_MAX       UINT8_MAX
      112 +
 111  113  /*
 112  114   * The following vector assignments influence the value of ipltopri and
 113  115   * vectortoipl. Note that vectors 0 - 0x1f are not used. We can program
 114  116   * idle to 0 and IPL 0 to 0xf to differentiate idle in case
 115  117   * we care to do so in future. Note some IPLs which are rarely used
 116  118   * will share the vector ranges and heavily used IPLs (5 and 6) have
 117  119   * a wide range.
 118  120   *
 119  121   * This array is used to initialize apic_ipls[] (in apic_init()).
 120  122   *
↓ open down ↓ 940 lines elided ↑ open up ↑
1061 1063  
1062 1064  /*
1063 1065   * This function allocates "count" MSI vector(s) for the given "dip/pri/type"
1064 1066   */
1065 1067  int
1066 1068  apic_alloc_msi_vectors(dev_info_t *dip, int inum, int count, int pri,
1067 1069      int behavior)
1068 1070  {
1069 1071          int     rcount, i;
1070 1072          uchar_t start, irqno;
1071      -        uint32_t cpu;
     1073 +        uint32_t cpu = 0;
1072 1074          major_t major;
1073 1075          apic_irq_t      *irqptr;
1074 1076  
1075 1077          DDI_INTR_IMPLDBG((CE_CONT, "apic_alloc_msi_vectors: dip=0x%p "
1076 1078              "inum=0x%x  pri=0x%x count=0x%x behavior=%d\n",
1077 1079              (void *)dip, inum, pri, count, behavior));
1078 1080  
1079 1081          if (count > 1) {
1080 1082                  if (behavior == DDI_INTR_ALLOC_STRICT &&
1081 1083                      apic_multi_msi_enable == 0)
↓ open down ↓ 51 lines elided ↑ open up ↑
1133 1135  #ifdef  DEBUG
1134 1136                  if (apic_vector_to_irq[start + i] != APIC_RESV_IRQ)
1135 1137                          DDI_INTR_IMPLDBG((CE_CONT, "apic_alloc_msi_vectors: "
1136 1138                              "apic_vector_to_irq is not APIC_RESV_IRQ\n"));
1137 1139  #endif
1138 1140                  apic_vector_to_irq[start + i] = (uchar_t)irqno;
1139 1141  
1140 1142                  irqptr->airq_vector = (uchar_t)(start + i);
1141 1143                  irqptr->airq_ioapicindex = (uchar_t)inum;       /* start */
1142 1144                  irqptr->airq_intin_no = (uchar_t)rcount;
1143      -                irqptr->airq_ipl = pri;
     1145 +                ASSERT(pri >= 0 && pri <= UCHAR_MAX);
     1146 +                irqptr->airq_ipl = (uchar_t)pri;
1144 1147                  irqptr->airq_vector = start + i;
1145 1148                  irqptr->airq_origirq = (uchar_t)(inum + i);
1146 1149                  irqptr->airq_share_id = 0;
1147 1150                  irqptr->airq_mps_intr_index = MSI_INDEX;
1148 1151                  irqptr->airq_dip = dip;
1149 1152                  irqptr->airq_major = major;
1150 1153                  if (i == 0) /* they all bound to the same cpu */
1151 1154                          cpu = irqptr->airq_cpu = apic_bind_intr(dip, irqno,
1152 1155                              0xff, 0xff);
1153 1156                  else
↓ open down ↓ 56 lines elided ↑ open up ↑
1210 1213                           */
1211 1214                          DDI_INTR_IMPLDBG((CE_CONT, "apic_alloc_msix_vectors: "
1212 1215                              "apic_allocate_vector failed\n"));
1213 1216                          rcount = i;
1214 1217                          goto out;
1215 1218                  }
1216 1219                  apic_max_device_irq = max(irqno, apic_max_device_irq);
1217 1220                  apic_min_device_irq = min(irqno, apic_min_device_irq);
1218 1221                  irqptr = apic_irq_table[irqno];
1219 1222                  irqptr->airq_vector = (uchar_t)vector;
1220      -                irqptr->airq_ipl = pri;
     1223 +                ASSERT(pri >= 0 && pri <= UCHAR_MAX);
     1224 +                irqptr->airq_ipl = (uchar_t)pri;
1221 1225                  irqptr->airq_origirq = (uchar_t)(inum + i);
1222 1226                  irqptr->airq_share_id = 0;
1223 1227                  irqptr->airq_mps_intr_index = MSIX_INDEX;
1224 1228                  irqptr->airq_dip = dip;
1225 1229                  irqptr->airq_major = major;
1226 1230                  irqptr->airq_cpu = apic_bind_intr(dip, irqno, 0xff, 0xff);
1227 1231          }
1228 1232  out:
1229 1233          mutex_exit(&airq_mutex);
1230 1234          return (rcount);
↓ open down ↓ 21 lines elided ↑ open up ↑
1252 1256                  highest = lowest + apic_restrict_vector + APIC_HI_PRI_VECTS;
1253 1257  #endif /* DEBUG */
1254 1258          if (pri == 0)
1255 1259                  highest -= APIC_HI_PRI_VECTS;
1256 1260  
1257 1261          for (i = lowest; i <= highest; i++) {
1258 1262                  if (APIC_CHECK_RESERVE_VECTORS(i))
1259 1263                          continue;
1260 1264                  if (apic_vector_to_irq[i] == APIC_RESV_IRQ) {
1261 1265                          apic_vector_to_irq[i] = (uchar_t)irq;
1262      -                        return (i);
     1266 +                        ASSERT(i >= 0 && i <= UCHAR_MAX);
     1267 +                        return ((uchar_t)i);
1263 1268                  }
1264 1269          }
1265 1270  
1266 1271          return (0);
1267 1272  }
1268 1273  
1269 1274  /* Mark vector as not being used by any irq */
1270 1275  void
1271 1276  apic_free_vector(uchar_t vector)
1272 1277  {
↓ open down ↓ 75 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX