Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
I'm trying to enable the local APIC Timer of an AP. In VMware all works perfect, but on the three real 2-core CPUs I tried it, the local APIC Timer of the AP would not generate an actual interrupt. (BTW: The local APIC Timer of the BSP is working perfectly in VMware as well as on the real CPUs.)
I've checked that the local APIC of the AP is enabled in the IA32_APIC_BASE MSR and initialized the Timer with the following code:
Ash wrote:I'm trying to enable the local APIC Timer of an AP. In VMware all works perfect, but on the three real 2-core CPUs I tried it, the local APIC Timer of the AP would not generate an actual interrupt. (BTW: The local APIC Timer of the BSP is working perfectly in VMware as well as on the real CPUs.)
I've checked that the local APIC of the AP is enabled in the IA32_APIC_BASE MSR and initialized the Timer with the following code:
Seems okay to me. Are you sure, that your APs are up and running? Maybe there are issues in your startup code (IPI sequence and such) on real hardware.
Ash wrote:I've also tried to enable the Symmetric I/O mode with the following code:
Hyperdrive wrote:I'm in a hurry, so just a few notes...
Any help is appreciated.
Hyperdrive wrote:Seems okay to me. Are you sure, that your APs are up and running? Maybe there are issues in your startup code (IPI sequence and such) on real hardware.
Yes, "they" (it's actually only one AP and one BSP - because I had only 2-core machines to test it ) are running fine. For testing purposes I let any core print it's TSC, an ID and some stats continuously on the screen.
Hyperdrive wrote:You only should do this if the IMCR is implemented. If it's not, you don't know what this causes.
One more thing: You shouldn't assume the Local APICs are at 0xFEE00000. That's common, but you can't be sure.
For both things: Parse the BIOS tables (MPSpec or ACPI) to get the information.
In a later version I will definitely do this, for the moment it is enough for me to use the correct values.
There are more than one bit that determine whether the APIC is enabled
Try the spurious interrupt vector register (intel 3A: Chapter 7.5 verse 14)
"Certainly avoid yourself. He is a newbie and might not realize it. You'll hate his code deeply a few years down the road." - Sortie
[ My OS ] [ VDisk/SFS ]
Combuster wrote:There are more than one bit that determine whether the APIC is enabled
Try the spurious interrupt vector register (intel 3A: Chapter 7.5 verse 14)
Yes, I thought I enabled that too (just forgot to mention it in my first posting). But you are right, the bug is in this line: