Re: [PATCHv5 perf/core 08/22] uprobes/x86: Add mapping for optimized uprobe trampolines
From: Jiri Olsa <hidden>
Date: 2025-07-11 19:36:09
Also in:
bpf, lkml
On Fri, Jul 11, 2025 at 07:46:32PM +0200, Oleg Nesterov wrote:
On 07/11, Jiri Olsa wrote:quoted
+static unsigned long find_nearest_trampoline(unsigned long vaddr) +{ + struct vm_unmapped_area_info info = { + .length = PAGE_SIZE, + .align_mask = ~PAGE_MASK, + }; + unsigned long low_limit, high_limit; + unsigned long low_tramp, high_tramp; + unsigned long call_end = vaddr + 5; + + if (check_add_overflow(call_end, INT_MIN, &low_limit)) + low_limit = PAGE_SIZE; + + high_limit = call_end + INT_MAX; + + /* Search up from the caller address. */ + info.low_limit = call_end; + info.high_limit = min(high_limit, TASK_SIZE); + high_tramp = vm_unmapped_area(&info); + + /* Search down from the caller address. */ + info.low_limit = max(low_limit, PAGE_SIZE); + info.high_limit = call_end; + info.flags = VM_UNMAPPED_AREA_TOPDOWN; + low_tramp = vm_unmapped_area(&info); + + if (IS_ERR_VALUE(high_tramp) && IS_ERR_VALUE(low_tramp)) + return -ENOMEM; + if (IS_ERR_VALUE(high_tramp)) + return low_tramp; + if (IS_ERR_VALUE(low_tramp)) + return high_tramp; + + /* Return address that's closest to the caller address. */ + if (call_end - low_tramp < high_tramp - call_end) + return low_tramp; + return high_tramp; +}IIUC, nothing else has changed since I've acked the previous version? Then my ack still stands,
correct, just the find_nearest_trampoline function
Acked-by: Oleg Nesterov <oleg@redhat.com>
thanks, jirka