Messages in this thread | | | Date | Fri, 6 Apr 2012 00:20:24 +0200 | From | Oleg Nesterov <> | Subject | [RFC 0/6] uprobes: kill uprobes_srcu/uprobe_srcu_id |
| |
Hello.
Not for inclusion yet, only for the early review.
I didn't even try to test these changes, and I am not expert in this area. And even _if_ this code is correct, I need to re-split these changes anyway, update the changelogs, etc.
Questions:
- does it make sense?
- can it work or I missed something "in general" ?
Why:
- It would be nice to remove a member from task_struct.
- Afaics, the usage of uprobes_srcu does not look right, at least in theory, see 6/6.
The comment above delete_uprobe() says:
The current unregistering thread waits till all other threads have hit a breakpoint, to acquire the uprobes_treelock before the uprobe is removed from the rbtree.
but synchronize_srcu() can only help if a thread which have hit the breakpoint has already called srcu_read_lock(). It can't synchronize with read_lock "in future", and there is a small window.
We could probably add another synchronize_sched() before synchronize_srcu(), but this doesn't look very nice and
- I am not sure yet, but perhaps with these changes we can also kill mm->uprobes_state.count.
Any review is very much appreciated.
Oleg.
include/linux/sched.h | 1 - kernel/events/uprobes.c | 117 ++++++++++++++++++++++++++++++----------------- 2 files changed, 75 insertions(+), 43 deletions(-)
| |