mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
selftests/bpf: fix flaky build_id test
The build_id selftest occasionally fails because MADV_PAGEOUT does not guarantee the immediate eviction of the page. The test assumes eviction happens and proceeds without verifying that the page was actually reclaimed, leading to false test failures. Fix the test by retrying the page-out sequence until eviction is successful, instead of relying on a single MADV_PAGEOUT attempt. Signed-off-by: Gregory Bell <grbell@redhat.com> Link: https://lore.kernel.org/r/038bd27c69dd3a16958894fcb19e4fb6fbfe317e.1771338492.git.grbell@redhat.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
b0a67f310b
commit
d820fa3114
@@ -100,6 +100,9 @@ int __attribute__((weak)) trigger_uprobe(bool build_id_resident)
|
||||
int page_sz = sysconf(_SC_PAGESIZE);
|
||||
void *addr;
|
||||
|
||||
unsigned char vec[1];
|
||||
int poll = 0;
|
||||
|
||||
/* page-align build ID start */
|
||||
addr = (void *)((uintptr_t)&build_id_start & ~(page_sz - 1));
|
||||
|
||||
@@ -108,9 +111,19 @@ int __attribute__((weak)) trigger_uprobe(bool build_id_resident)
|
||||
* do MADV_POPULATE_READ, and then MADV_PAGEOUT, if necessary
|
||||
*/
|
||||
madvise(addr, page_sz, MADV_POPULATE_READ);
|
||||
if (!build_id_resident)
|
||||
madvise(addr, page_sz, MADV_PAGEOUT);
|
||||
|
||||
if (!build_id_resident) {
|
||||
do {
|
||||
madvise(addr, page_sz, MADV_PAGEOUT);
|
||||
/* check if page has been evicted */
|
||||
mincore(addr, page_sz, vec);
|
||||
if (!(vec[0] & 1))
|
||||
break;
|
||||
/* if page is still resident re-attempt MADV_POPULATE_READ/MADV_PAGEOUT */
|
||||
madvise(addr, page_sz, MADV_POPULATE_READ);
|
||||
poll++;
|
||||
usleep(100);
|
||||
} while (poll < 500);
|
||||
}
|
||||
(void)uprobe();
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user