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