On Fri, 28 Mar 2008 22:25:00 +0200 Pekka Paalanen <pq@iki.fi> wrote:It appears this happens: CPU 0 CPU 1 ,---> fault fault | disarm disarm | single step | arm | single step '--------' arm and the both cpus are faulting on the same page. I guess one cpu is running an nvidia interrupt service. I see three possible solutions: A) Like in this patch, just disarm again and hope for the best. Seems to work ok. I also compare the fault address to the saved address ctx->addr. If they are equal, it is a "double probe hit" and harmless. If they are not equal, it is a real "recursive probe hit" and something more is wrong. With these definitions, recursive probe hits are gone in my experiments on Intel Core 2 Duo. B) Acquire a spinlock in kmmio_handler() and release it in post_kmmio_handler(). I don't like this one since I spent some effort making the fault path spinlockless, but at least this would be a completely separate spinlock. Or we could use per-page spinlocks. C) Vegard mentioned something about per-cpu page tables for kmemcheck. This would be the ultimate solution, because it would solve two problems: - recursive probe hits - missed events due to another cpu disarming the page for single stepping Would it be possible to have a single temporary per-cpu pte? I understood kmemcheck has similar issues. Of course, one could force the system down to a single running CPU, but that feels nasty. Which way to go? I choose A) as the current workaround, keeping in mind that I will loose events on SMP. C) would be the only reliable SMP solution on tracing point of view. Thanks. -- Pekka Paalanen http://www.iki.fi/pq/ --
| Linus Torvalds | Linux 2.6.21 |
| Greg Kroah-Hartman | [PATCH 002/196] Chinese: rephrase English introduction in HOWTO |
| Josef 'Jeff' Sipek | [PATCH 02/24] lookup_one_len_nd - lookup_one_len with nameidata argument |
| david | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
git: | |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | Re: [GIT]: Networking |
| David Miller | [PATCH]: Preliminary release of Sun Neptune driver |
