[PATCH] lib/test_bpf: Replace kmap() with kmap_local_page()
From: Sumitra Sharma
Date: Mon Jun 12 2023 - 06:49:31 EST
kmap() has been deprecated in favor of the kmap_local_page()
due to high cost, restricted mapping space, the overhead of
a global lock for synchronization, and making the process
sleep in the absence of free slots.
kmap_local_page() is faster than kmap() and offers thread-local
and CPU-local mappings, take pagefaults in a local kmap region
and preserves preemption by saving the mappings of outgoing
tasks and restoring those of the incoming one during a context
switch.
The mapping is kept thread local in the function
“generate_test_data” in test_bpf.c
Therefore, replace kmap() with kmap_local_page() and use
memcpy_to_page() to avoid open coding kmap_local_page()
+ memcpy() + kunmap_local().
Remove the unused variable “ptr”.
Signed-off-by: Sumitra Sharma <sumitraartsy@xxxxxxxxx>
---
lib/test_bpf.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/lib/test_bpf.c b/lib/test_bpf.c
index ade9ac672adb..3bb94727d83b 100644
--- a/lib/test_bpf.c
+++ b/lib/test_bpf.c
@@ -14381,25 +14381,17 @@ static void *generate_test_data(struct bpf_test *test, int sub)
* single fragment to the skb, filled with
* test->frag_data.
*/
- void *ptr;
-
page = alloc_page(GFP_KERNEL);
if (!page)
goto err_kfree_skb;
- ptr = kmap(page);
- if (!ptr)
- goto err_free_page;
- memcpy(ptr, test->frag_data, MAX_DATA);
- kunmap(page);
+ memcpy_to_page(page, 0, test->frag_data, MAX_DATA);
skb_add_rx_frag(skb, 0, page, 0, MAX_DATA, MAX_DATA);
}
return skb;
-err_free_page:
- __free_page(page);
err_kfree_skb:
kfree_skb(skb);
return NULL;
--
2.25.1