Opened 14 years ago
Last modified 10 years ago
#231 closed defect
Two CPUs in critical section under Qemu/ia32/SMP — at Initial Version
Reported by: | Jakub Jermář | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | 0.6.0 |
Component: | helenos/kernel/ia32 | Version: | mainline |
Keywords: | Cc: | ||
Blocker for: | Depends on: | ||
See also: |
Description
After applying the attached changes on top of changeset:head,377, I am observing (under Qemu 0.11.?, 0.12.2+3) what appears to be more than one CPU in a spinlock-protected critical section.
In order to figure out more, I improved the spinlock code to be more sensitive to random lock corruption (which I can thus rule out) and also to be more observable by providing a global ring buffer for recording the locking history. See the attachement to see the diff. I am also going to attach screenshots which illustrate the panics.
Frankly speaking, my suspect number one is actually Qemu (since the HelenOS code looks good to me atm.), but I am logging this ticket anyway just for the case I am wrong. One more thing which makes me think that this is rather a Qemu issue is that with the given ring buffer and the spinlock_lock_debug() code, I would expect the panic to occur in spinlock_lock_debug() on either of the two checks for multiple CPUs in the CS, and not so late in spinlock_unlock().
Change History (4)
by , 14 years ago
by , 14 years ago
Attachment: | kernel.raw.bz2 added |
---|
kernel.raw for the sake of running a disassembler on it.
by , 14 years ago
Attachment: | spinlock_unlock.png added |
---|
Screenshot with a ring buffer showing the lock-lock-unlock-unlock pattern
by , 14 years ago
Attachment: | spinlock_lock_debug.png added |
---|
Screenshot which shows panic on one of the CS invariant checks in the modified spinlock_lock_debug()
Diff from changeset:head,377.