Skip to content

Commit 1cee988

Browse files
oleg-nesterovPeter Zijlstra
authored andcommitted
uprobes: move the initialization of utask->xol_vaddr from pre_ssout() to xol_get_insn_slot()
This simplifies the code and makes xol_get_insn_slot() symmetric with xol_free_insn_slot() which clears utask->xol_vaddr. Signed-off-by: Oleg Nesterov <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 6ffe8c7 commit 1cee988

File tree

1 file changed

+8
-14
lines changed

1 file changed

+8
-14
lines changed

kernel/events/uprobes.c

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1646,21 +1646,19 @@ static unsigned long xol_take_insn_slot(struct xol_area *area)
16461646

16471647
/*
16481648
* xol_get_insn_slot - allocate a slot for xol.
1649-
* Returns the allocated slot address or 0.
16501649
*/
1651-
static unsigned long xol_get_insn_slot(struct uprobe *uprobe)
1650+
static bool xol_get_insn_slot(struct uprobe *uprobe)
16521651
{
1653-
struct xol_area *area;
1654-
unsigned long xol_vaddr;
1652+
struct uprobe_task *utask = current->utask;
1653+
struct xol_area *area = get_xol_area();
16551654

1656-
area = get_xol_area();
16571655
if (!area)
1658-
return 0;
1656+
return false;
16591657

1660-
xol_vaddr = xol_take_insn_slot(area);
1661-
arch_uprobe_copy_ixol(area->page, xol_vaddr,
1658+
utask->xol_vaddr = xol_take_insn_slot(area);
1659+
arch_uprobe_copy_ixol(area->page, utask->xol_vaddr,
16621660
&uprobe->arch.ixol, sizeof(uprobe->arch.ixol));
1663-
return xol_vaddr;
1661+
return true;
16641662
}
16651663

16661664
/*
@@ -1948,21 +1946,17 @@ static int
19481946
pre_ssout(struct uprobe *uprobe, struct pt_regs *regs, unsigned long bp_vaddr)
19491947
{
19501948
struct uprobe_task *utask = current->utask;
1951-
unsigned long xol_vaddr;
19521949
int err;
19531950

19541951
if (!try_get_uprobe(uprobe))
19551952
return -EINVAL;
19561953

1957-
xol_vaddr = xol_get_insn_slot(uprobe);
1958-
if (!xol_vaddr) {
1954+
if (!xol_get_insn_slot(uprobe)) {
19591955
err = -ENOMEM;
19601956
goto err_out;
19611957
}
19621958

1963-
utask->xol_vaddr = xol_vaddr;
19641959
utask->vaddr = bp_vaddr;
1965-
19661960
err = arch_uprobe_pre_xol(&uprobe->arch, regs);
19671961
if (unlikely(err)) {
19681962
xol_free_insn_slot(current);

0 commit comments

Comments
 (0)