mm, x86, ptrace, bts: defer branch trace stopping
When a ptraced task is unlinked, we need to stop branch tracing for that task. Since the unlink is called with interrupts disabled, and we need interrupts enabled to stop branch tracing, we defer the work. Collect all branch tracing related stuff in a branch tracing context. Reviewed-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Markus Metzger <markus.t.metzger@intel.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: roland@redhat.com Cc: eranian@googlemail.com Cc: juan.villacis@intel.com Cc: ak@linux.jf.intel.com LKML-Reference: <20090403144550.712401000@intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
committed by
Ingo Molnar
parent
a26b89f05d
commit
e2b371f00a
13
mm/mlock.c
13
mm/mlock.c
@ -660,21 +660,20 @@ void *alloc_locked_buffer(size_t size)
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void release_locked_buffer(void *buffer, size_t size)
|
||||
void refund_locked_buffer_memory(struct mm_struct *mm, size_t size)
|
||||
{
|
||||
unsigned long pgsz = PAGE_ALIGN(size) >> PAGE_SHIFT;
|
||||
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
down_write(&mm->mmap_sem);
|
||||
|
||||
current->mm->total_vm -= pgsz;
|
||||
current->mm->locked_vm -= pgsz;
|
||||
mm->total_vm -= pgsz;
|
||||
mm->locked_vm -= pgsz;
|
||||
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
up_write(&mm->mmap_sem);
|
||||
}
|
||||
|
||||
void free_locked_buffer(void *buffer, size_t size)
|
||||
{
|
||||
release_locked_buffer(buffer, size);
|
||||
|
||||
refund_locked_buffer_memory(current->mm, size);
|
||||
kfree(buffer);
|
||||
}
|
||||
|
Reference in New Issue
Block a user