Skip to content

Commit d9973ce

Browse files
ikhornborkmann
authored andcommitted
xdp: xdp_umem: fix umem pages mapping for 32bits systems
Use kmap instead of page_address as it's not always in low memory. Acked-by: Björn Töpel <[email protected]> Signed-off-by: Ivan Khoronzhuk <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]>
1 parent b707659 commit d9973ce

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

net/xdp/xdp_umem.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <linux/netdevice.h>
1515
#include <linux/rtnetlink.h>
1616
#include <linux/idr.h>
17+
#include <linux/highmem.h>
1718

1819
#include "xdp_umem.h"
1920
#include "xsk_queue.h"
@@ -164,6 +165,14 @@ void xdp_umem_clear_dev(struct xdp_umem *umem)
164165
umem->zc = false;
165166
}
166167

168+
static void xdp_umem_unmap_pages(struct xdp_umem *umem)
169+
{
170+
unsigned int i;
171+
172+
for (i = 0; i < umem->npgs; i++)
173+
kunmap(umem->pgs[i]);
174+
}
175+
167176
static void xdp_umem_unpin_pages(struct xdp_umem *umem)
168177
{
169178
unsigned int i;
@@ -207,6 +216,7 @@ static void xdp_umem_release(struct xdp_umem *umem)
207216

208217
xsk_reuseq_destroy(umem);
209218

219+
xdp_umem_unmap_pages(umem);
210220
xdp_umem_unpin_pages(umem);
211221

212222
kfree(umem->pages);
@@ -369,7 +379,7 @@ static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr)
369379
}
370380

371381
for (i = 0; i < umem->npgs; i++)
372-
umem->pages[i].addr = page_address(umem->pgs[i]);
382+
umem->pages[i].addr = kmap(umem->pgs[i]);
373383

374384
return 0;
375385

0 commit comments

Comments
 (0)