uprobes: Turn add_utask() into get_utask()
Rename add_utask() into get_utask() and change it to allocate on demand to simplify the caller. Like get_xol_area() it will have more users. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Acked-by: Anton Arapov <anton@redhat.com> Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
This commit is contained in:
parent
9b545df809
commit
5a2df662aa
@ -1290,23 +1290,18 @@ void uprobe_copy_process(struct task_struct *t)
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate a uprobe_task object for the task.
|
||||
* Called when the thread hits a breakpoint for the first time.
|
||||
* Allocate a uprobe_task object for the task if if necessary.
|
||||
* Called when the thread hits a breakpoint.
|
||||
*
|
||||
* Returns:
|
||||
* - pointer to new uprobe_task on success
|
||||
* - NULL otherwise
|
||||
*/
|
||||
static struct uprobe_task *add_utask(void)
|
||||
static struct uprobe_task *get_utask(void)
|
||||
{
|
||||
struct uprobe_task *utask;
|
||||
|
||||
utask = kzalloc(sizeof *utask, GFP_KERNEL);
|
||||
if (unlikely(!utask))
|
||||
return NULL;
|
||||
|
||||
current->utask = utask;
|
||||
return utask;
|
||||
if (!current->utask)
|
||||
current->utask = kzalloc(sizeof(struct uprobe_task), GFP_KERNEL);
|
||||
return current->utask;
|
||||
}
|
||||
|
||||
/* Prepare to single-step probed instruction out of line. */
|
||||
@ -1505,13 +1500,9 @@ static void handle_swbp(struct pt_regs *regs)
|
||||
if (unlikely(!test_bit(UPROBE_COPY_INSN, &uprobe->flags)))
|
||||
goto out;
|
||||
|
||||
utask = current->utask;
|
||||
if (!utask) {
|
||||
utask = add_utask();
|
||||
/* Cannot allocate; re-execute the instruction. */
|
||||
utask = get_utask();
|
||||
if (!utask)
|
||||
goto out;
|
||||
}
|
||||
goto out; /* re-execute the instruction. */
|
||||
|
||||
handler_chain(uprobe, regs);
|
||||
if (can_skip_sstep(uprobe, regs))
|
||||
|
Loading…
Reference in New Issue
Block a user