[BACK]Return to x86_softintr.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / x86 / x86

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/x86/x86/x86_softintr.c between version 1.3 and 1.4

version 1.3, 2020/05/08 21:43:54 version 1.4, 2022/09/07 00:40:19
Line 162  struct pic softintr_pic = {
Line 162  struct pic softintr_pic = {
 void  void
 x86_intr_calculatemasks(struct cpu_info *ci)  x86_intr_calculatemasks(struct cpu_info *ci)
 {  {
         int irq, level, unusedirqs, intrlevel[MAX_INTR_SOURCES];          uint64_t unusedirqs, intrlevel[MAX_INTR_SOURCES];
           int irq, level;
         struct intrhand *q;          struct intrhand *q;
   
         /* First, figure out which levels each IRQ uses. */          /* First, figure out which levels each IRQ uses. */
         unusedirqs = 0xffffffff;          unusedirqs = UINT64_MAX;
         for (irq = 0; irq < MAX_INTR_SOURCES; irq++) {          for (irq = 0; irq < MAX_INTR_SOURCES; irq++) {
                 int levels = 0;                  int levels = 0;
   
Line 175  x86_intr_calculatemasks(struct cpu_info 
Line 176  x86_intr_calculatemasks(struct cpu_info 
                         continue;                          continue;
                 }                  }
                 for (q = ci->ci_isources[irq]->is_handlers; q; q = q->ih_next)                  for (q = ci->ci_isources[irq]->is_handlers; q; q = q->ih_next)
                         levels |= 1U << q->ih_level;                          levels |= 1 << q->ih_level;
                 intrlevel[irq] = levels;                  intrlevel[irq] = levels;
                 if (levels)                  if (levels)
                         unusedirqs &= ~(1U << irq);                          unusedirqs &= ~(1ULL << irq);
         }          }
   
         /* Then figure out which IRQs use each level. */          /* Then figure out which IRQs use each level. */
         for (level = 0; level < NIPL; level++) {          for (level = 0; level < NIPL; level++) {
                 int irqs = 0;                  uint64_t irqs = 0;
                 for (irq = 0; irq < MAX_INTR_SOURCES; irq++)                  for (irq = 0; irq < MAX_INTR_SOURCES; irq++)
                         if (intrlevel[irq] & (1U << level))                          if (intrlevel[irq] & (1ULL << level))
                                 irqs |= 1U << irq;                                  irqs |= 1ULL << irq;
                 ci->ci_imask[level] = irqs | unusedirqs;                  ci->ci_imask[level] = irqs | unusedirqs;
         }          }
   

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

CVSweb <webmaster@jp.NetBSD.org>