Messages in this thread | | | From | richardj_moore@uk ... | Date | Fri, 20 Oct 2000 10:23:15 +0100 | Subject | Re: [ANNOUNCE] DProbes 1.1 |
| |
Andi,
Thanks for your feedback. We are looking at this now. Hopefully we will be able to give you a response on Monday. If we don't then it's because most of us are on holiday next week.
I'm interested in getting information on who is using DProbes and how its being used?
Yes, an also that we haven't yet done the SMP port of Dprobes - that's next.
Richard Moore - RAS Project Lead - Linux Technology Centre (PISC).
http://oss.software.ibm.com/developerworks/opensource/linux Office: (+44) (0)1962-817072, Mobile: (+44) (0)7768-298183 IBM UK Ltd, MP135 Galileo Centre, Hursley Park, Winchester, SO21 2JN, UK
Andi Kleen <ak@suse.de> on 18/10/2000 18:38:13
Please respond to Andi Kleen <ak@suse.de>
To: Richard J Moore/UK/IBM@IBMGB cc: linux-kernel@vger.kernel.org
Subject: Re: [ANNOUNCE] DProbes 1.1
Hallo Richard,
On Wed, Oct 18, 2000 at 10:44:11AM +0100, richardj_moore@uk.ibm.com wrote: > > > We've release v1.1 of DProbes - deatils and code is on the DProbes web > page. > > the enhancements include: > > - DProbes for kernel version 2.4.0-test7 is now available.
First thanks for this nice work.
I ported the older 1.0 dprobes to 2.4 a few weeks ago for my own use. It is very useful for kernel work. Unfortunately the user space support had still one ugly race which I didn't fix because it required too extensive changes for my simple port (and it didn't concern me because I only use kernel level breakpoints)
I see the problems are still in 1.1.
The problem is the vma loop in process_recs_in_cow_pages over the vmas of an address_space. In 2.4 the only way to do that safely is to hold the address_space spinlock. Unfortunately you cannot take the semaphore or execute handle_mm_fault while holding the spinlock, because they could sleep. The only way I think to do it relatively race free without adding locks to the core VM is to do it two pass (first collect all the mms with mmget() and their addresses in a separate list with the spinlock and then process it with the spinlock released)
Then dp_vaddr_to_page has another race. It cannot hold the mm semaphore because that would deadlock with handle_mm_struct. Not holding it means though that the page could be swapped out again after you faulted it in before you have a change to access it. It probably can be done with an loop that checks and locks the page atomically (e.g. using cmpexchg) and retries the handle_mm_fault as needed.
There may be more races I missed, the 2.4 SMP MM locking hierarchy is unfortunately not very flexible and makes things like what dprobes wants to do relatively hard.
Another change I added and which I found useful is a printk to show the opcode of mismatched probes (this way wrong offsets in the probe definitions are easier to fix)
-Andi
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
| |