home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / os / vxworks / 670 < prev    next >
Encoding:
Internet Message Format  |  1992-07-23  |  6.2 KB

  1. Path: sparky!uunet!pmafire!news.dell.com!swrinde!mips!zaphod.mps.ohio-state.edu!news.acns.nwu.edu!network.ucsd.edu!dog.ee.lbl.gov!lbl.gov!vxwexplo
  2. From: shaffer@stef.crd.ge.com (Phil Shaffer)
  3. Newsgroups: comp.os.vxworks
  4. Subject: Spurious Interrupts on Motorola boards: Summary
  5. Message-ID: <9207232141.AA01935@stef.adaworld>
  6. Date: 23 Jul 92 21:41:44 GMT
  7. Sender: vxwexplo@lbl.gov
  8. Organization: Lawrence Berkeley Laboratory, Berkeley CA
  9. Lines: 110
  10. NNTP-Posting-Host: 128.3.112.16
  11. Originator: daemon@vxw.ee.lbl.gov
  12.  
  13.  
  14. Some time ago I posted a query asking what might be causing
  15. Spurious Interrupts on Motorola MVME165 and MVME167 boards.
  16. I was getting error messages such as:
  17.  
  18. Interrupt to uninitialized vector number 24 (0-255).
  19. Equivalent to vector-> Spurious Interrupt
  20. Program Counter: 0x000021c8
  21. Status Register: 0x3100
  22.  
  23. This was on a Motorola MVME165 (68040) processor, running vxWorks 5.0.2
  24. (VADworks 2.0.2b). It is in a chassis with other 68040 processors,
  25. one of which sends it messages, using a "notification" scheme
  26. we developed, based on the SIGLP interrupt on the VMEchip.
  27. The SIGLP interrupt service routine turns off the SIGLP interrupt then puts
  28. some data in a queue and then does a semGive.  In the regular code,
  29. when semTake is satisfied, the SIGLP interrupt is turned off by
  30. notify_int_disable, then the data are removed from the queue and
  31. the interrupt is turned back on.  The spurious interrupt was
  32. occurring at the very end of notify_int_disable or just after its return.
  33. Also, when the spurious interrupt occurs, the processor sometimes
  34. (but not always) misses an interrupt it should have received.
  35. The same problem was occurring on MVME147 and MV167 cards also.
  36.  
  37. The most concise summary of what causes spurious interrupts was from  marc@sun-valley.stanford.edu:
  38.  
  39. >a "Spurious Interrupt" is generated when one of the IRQ
  40. >lines gets pulled but no one responds with an interrupt vector during
  41. >the IACK bus cycle thus resulting in a bus timeout error, which is reported
  42. >as "Spurious Interrupt" rather than as an ordinary bus error.  See pg 8-37
  43. >in the 68040 User's Manual for Motorola's explanation.  (It was clearer
  44. >in the old 030 Manuals.)
  45.  
  46. >... your status register is showing interrupt priority mask = 1 
  47. >(bits 8-10 of SR) thus I would suspect that you have a device pulling
  48. >IRQ 1. ...  If SIGLP is pulling IRQ 1, then I would further suspect the 167
  49. >to have a hardware bug.
  50.  
  51. SIGLP does cause a Level 1 interrupt, and nothing else should have caused
  52. such an interrupt.
  53.  
  54. carl@wrs.com (Carl Chesbrough) suggested:
  55. >This could
  56. >be from having the interrupt present, and then removed before the interrupt
  57. >acknowledge cycle has completed, thus not having a vector and data ack cycle.
  58.  
  59. Other suggestions of missing IACK jumpers on the backplane or trashed
  60. interupt vector table missed the mark because the occurrence was intermittent.
  61.  
  62. The problem was occurring because I was turning off the SIGLP interrupt
  63. when these interrupts were occurring at rapid rates, thus occasionally
  64. SIGLP would get turned off in the middle of an IACK cycle, preventing
  65. the interrupt vector from being placed on the local processor bus.  Note
  66. that the VMEbus had nothing to do with the problem.
  67.  
  68. Thanks to Darryl Coy, a Systems Engineer from Motorola, for suggesting
  69. the solution: rather than turn off SIGLP to prevent interruption
  70. when manipulating data structures shared between the ISR and non-ISR
  71. code, raise the processor priority in non-ISR code to force any interrupts
  72. to hold until non-ISR code is complete with the critical section.  I wrote
  73. a small assembly routine to manipulate the 68040 Status Register.  This
  74. worked perfectly!
  75.  
  76. It seems to me the problem is a hardware deficiency in the Motorola
  77. boards, and that once the VMEchip starts an interrupt cycle, it shouldn't
  78. be possible to break that cycle.  However Darryl Coy
  79. (mcddyt!darryl@mcdchg.chg.mcd.mot.com) says:
  80. >once the VMEchip2 asserts an interrupt (via VMEbus master writing to the
  81. >SIG bit), the program should NOT disable the SIG).  Why?  Because the
  82. >68040 will respond with an IACK cycle.  The interrupting device must
  83. >then respond.  If the SIG is turned off and IACK cycle is started, then
  84. >the hardware logic on the VMEchip2 will not respond to the IACK cycle.
  85. >Thus, this situation leads to the spurious interrupt.  In conclusion,
  86. >removing interrupt requests before they are acknowledged is a big nono...
  87.  
  88. If you are not in interrupt code, how can you know an interrupt cycle
  89. has started?  Anyway, raising priority solves the problem.
  90.  
  91. A similar situation was described by mitchell@aaec1.aaec.com: 
  92. >from an on board
  93. >timer of a Synergy SV31 (50Mhz '030).  Someone had written a
  94. >"taskDelayQuick", which used an aux timer to suspend a task for a few
  95. >milliseconds (not tied to the vxWorks tick rate).  The routine set the
  96. >timer up in a free-running clock mode - that is it generate interrupt at an
  97. >even rate.  The service routine turned off the clock after the first
  98. >interrupt and resumed the suspended task.  Under heavy interrupt load (VME
  99. >and mailbox) with a very short delay, spurrious interrupts would occur. 
  100. >Stan "the man" at Synergy saw this before and told me where to look.  It
  101. >seems that the '030 isr can turn off the clock (from the fist interrupt) at
  102. >the same time that the clock chip is asserting the next interrupt.  When
  103. >the '030 then runs its IACK cycle, the timer chip has just been cleared and
  104. >does not acknowledge and a bus error occurs on board.
  105.  
  106. So be careful when you turn interrupts off - it can cause problems.
  107.  
  108. My thanks to all who offered suggestions.
  109.  
  110. One other note: of 6 MVME167 cards we have, only one occasionally (once per
  111. 1-5 minutes) has a spurious interrupt when nothing but the "default"
  112. vxWorks processes, including NetTask, are running.  This may be
  113. a case of marginal or flaky performance of the "ei" ethernet chip.
  114. marc@sun-valley.stanford.edu (Marc Ullman) also mentioned a case of
  115. marginal performance on the 167, and solved it by increasing bus timeout
  116. to 256usec.  Has anyone else seen spurious interrupts on a 167 that is
  117. not doing anything (other than watching the Ethernet)?
  118.  
  119.      Phillip L. Shaffer                  shaffer@stef.crd.ge.com
  120.      GE Aircraft Engines, MS A320        uunet!stef.crd.ge.com!shaffer
  121.      1 Neumann Way
  122.      Cincinnati, OH 45215
  123.