Microsoft KB Archive/324866

= Interrupt Service Thread May Not Be Signaled =

Article ID: 324866

Article Last Modified on 2/1/2007

-

APPLIES TO


 * Microsoft Encarta Reference Suite 2001

-



This article was previously published under Q324866



SYMPTOMS
An interrupt service thread event may not be signaled after the interrupt service routine (ISR) reports an occurrence of the interrupt. This may result in a single interrupt being missed or all later interrupts being masked, depending on the design of the ISR and interrupt service thread.



CAUSE
A variable in the kernel that is used to manage the list of pending-event notifications was not declared as volatile.



RESOLUTION
A supported software update is now available from Microsoft as Windows CE 3.0 Core OS QFE Q324866. To resolve this problem immediately, click the following article number for information about obtaining Windows CE Platform Builder and core operating system software updates:

837392 How to locate core operating system fixes for Microsoft Windows CE Platform Builder products

The English version of this package should have the following file attributes or later:   Size         File name 997,976   020701_arm720_wce30-q324866.exe 1,063,512   020701_ppc403_wce30-q324866.exe 1,059,416   020701_ppc821_wce30-q324866.exe 1,043,032   020701_r3000_wce30-q324866.exe 1,043,032   020701_r4100_wce30-q324866.exe 1,043,032   020701_r4111_wce30-q324866.exe 1,100,376   020701_r4300_wce30-q324866.exe 997,976   020701_sa1100_wce30-q324866.exe The English version of this fix has the file attributes (or later) that are listed in the following table.   Date         Time   Size         File name     Platform -  28-Jun-2002  10:49  1,349,836    Nkmain.lib    arm\ARM720\debug 28-Jun-2002 10:49    102,400    Nkmain.pdb    arm\ARM720\debug 28-Jun-2002 10:48    911,816    Nkmain.lib    arm\ARM720\retail 28-Jun-2002 10:48    102,400    Nkmain.pdb    arm\ARM720\retail 28-Jun-2002 10:39  1,346,440    Nkmain.lib    arm\SA1100\debug 28-Jun-2002 10:39    102,400    Nkmain.pdb    arm\SA1100\debug 28-Jun-2002 10:38    908,436    Nkmain.lib    arm\SA1100\retail 28-Jun-2002 10:38    102,400    Nkmain.pdb    arm\SA1100\retail 28-Jun-2002 10:43  1,535,260    Nkmain.lib    mips\R3000\debug 28-Jun-2002 10:42    102,400    Nkmain.pdb    mips\R3000\debug 28-Jun-2002 10:42  1,075,902    Nkmain.lib    mips\R3000\retail 28-Jun-2002 10:42    102,400    Nkmain.pdb    mips\R3000\retail 28-Jun-2002 10:44  1,537,416    Nkmain.lib    mips\R4100\debug 28-Jun-2002 10:44    102,400    Nkmain.pdb    mips\R4100\debug 28-Jun-2002 10:43  1,075,904    Nkmain.lib    mips\R4100\retail 28-Jun-2002 10:43    102,400    Nkmain.pdb    mips\R4100\retail 28-Jun-2002 10:45  1,561,730    Nkmain.lib    mips\R4111\debug 28-Jun-2002 10:45    102,400    Nkmain.pdb    mips\R4111\debug 28-Jun-2002 10:44    960,056    Nkmain.lib    mips\R4111\retail 28-Jun-2002 10:44    102,400    Nkmain.pdb    mips\R4111\retail 28-Jun-2002 10:46  1,603,028    Nkmain.lib    mips\R4300\debug 28-Jun-2002 10:46    102,400    Nkmain.pdb    mips\R4300\debug 28-Jun-2002 10:45  1,140,932    Nkmain.lib    mips\R4300\retail 28-Jun-2002 10:45    102,400    Nkmain.pdb    mips\R4300\retail 28-Jun-2002 10:47  1,446,390    Nkmain.lib    ppc\PPC403\debug 28-Jun-2002 10:47    102,400    Nkmain.pdb    ppc\PPC403\debug 28-Jun-2002 10:46    934,020    Nkmain.lib    ppc\PPC403\retail 28-Jun-2002 10:46    102,400    Nkmain.pdb    ppc\PPC403\retail 28-Jun-2002 10:48  1,444,462    Nkmain.lib    ppc\PPC821\debug 28-Jun-2002 10:48    102,400    Nkmain.pdb    ppc\PPC821\debug 28-Jun-2002 10:47    932,570    Nkmain.lib    ppc\PPC821\retail 28-Jun-2002 10:47    102,400    Nkmain.pdb    ppc\PPC821\retail 28-Jun-2002 10:40  1,299,164    Nkmain.lib    shx\SH3\debug 28-Jun-2002 10:40     94,208    Nkmain.pdb    shx\SH3\debug 28-Jun-2002 10:40    900,064    Nkmain.lib    shx\SH3\retail 28-Jun-2002 10:40     94,208    Nkmain.pdb    shx\SH3\retail 28-Jun-2002 10:41  1,325,112    Nkmain.lib    shx\SH4\debug 28-Jun-2002 10:41     94,208    Nkmain.pdb    shx\SH4\debug 28-Jun-2002 10:41    921,036    Nkmain.lib    shx\SH4\retail 28-Jun-2002 10:41     94,208    Nkmain.pdb    shx\SH4\retail 28-Jun-2002 10:50  1,372,564    Nkmain.lib    thumb\ARM720\debug 28-Jun-2002 10:50    102,400    Nkmain.pdb    thumb\ARM720\debug 28-Jun-2002 10:49    954,190    Nkmain.lib    thumb\ARM720\retail 28-Jun-2002 10:49    102,400    Nkmain.pdb    thumb\ARM720\retail 28-Jun-2002 10:38  1,544,018    Nkmain.lib    x86\i486\CE\debug 28-Jun-2002 10:38    102,400    Nkmain.pdb    x86\i486\CE\debug 28-Jun-2002 10:38  1,111,002    Nkmain.lib    x86\i486\CE\retail 28-Jun-2002 10:38    102,400    Nkmain.pdb    x86\i486\CE\retail



MORE INFORMATION
A variable in the kernel that is used to manage the list of pending interrupt event notifications was not declared as volatile. Without the volatile keyword, the compiler optimizes the code to load a value from the variable into a CPU register for use, and does not reload it from RAM each time it is referenced in nearby code.

If an interrupt occurs while the value is being used from the CPU register, only the RAM copy of the value is updated by the ISR. The kernel is not aware that the interrupt occured, and may update the RAM variable with the value in the CPU register. When this occurs, the value that was changed by the ISR is overwritten.

This QFE updates the kernel to declare the variable as volatile so that each time the variable is referenced, the value will be fetched from RAM.



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.

Additional query words: ist

Keywords: kbbug kbenv kbfix kbqfe KB324866

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.