#10249: Haiku built from Haiku doesn't boot without disabling SMP or NX-bit -----------------------------+---------------------------- Reporter: pulkomandy | Owner: bonefish Type: bug | Status: assigned Priority: normal | Milestone: R1 Component: System/Kernel | Version: R1/Development Resolution: | Keywords: vm Blocked By: | Blocking: Has a Patch: 0 | Platform: All -----------------------------+---------------------------- Comment (by bonefish): Replying to [comment:36 anevilyak]: > Replying to [comment:34 bonefish]: > Out of curiosity, does TLB invalidation in this manner apply to all CPUs, or just the current one? Just the current one. I overlooked that it actually only invalidates non- global TLB entries (we use global ones for the kernel), so this doesn't have the desired effect in this case anyway. > In this instance it should be irrelevant since the vbox instance for this crash is, if I remember correctly, restricted to emulating a single core, but in the general case, would be nice to know. I was (and still am) under the impression that this issue only occurs with multiple CPUs and also goes away when SMP is disabled. Please correct me, if I'm wrong. > Is a stack trace depth of 10 likely to be sufficient? That's what we currently have the mapping trace depth configured for on his VM. Yep, that's fine. Unfortunately the latest syslog hasn't been too helpful. We can see that the address in question was mapped and unmapped twice before as part of a regular area. Before that, it was unmapped by `vm_free_unused_boot_loader_range()`, so apparently it had been used in the boot loader. The last unmap happened on the same CPU that crashed, but since TLB invalidation is normally only performed when the entry had actually been used (which can't be inferred from the available data), this doesn't mean much. In hrev46506 I've added more extensive information to the translation map kernel tracing. I'm attaching a patch that adds tracing entries when TLB entries are actually being invalided. It also adds a KDL command `tlb` which invalidates the whole TLB of the current CPU. It is meant to replace the ill-conceived `bt 1` idea. So `tlb` plus `co` should continue the boot process, if the original theory holds. Other than that basically the same information as before are needed: 1. `traced --stacktrace 0 -100 -1 #0x81000000` 1. `traced <number> -10 -1` for all six of the printed "translation map" entries. There may be additional "TLB invalidate" entries. Those can be skipped, since they already print the current CPU. 1. Additionally: `traced --stacktrace 0 -500 -1 "#invalidate all"` -- Ticket URL: <http://dev.haiku-os.org/ticket/10249#comment:39> Haiku <http://dev.haiku-os.org> Haiku - the operating system.