xsk: add support to allow unaligned chunk placement
authorKevin Laatz <kevin.laatz@intel.com>
Tue, 27 Aug 2019 02:25:22 +0000 (02:25 +0000)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 30 Aug 2019 23:08:26 +0000 (01:08 +0200)
commitc05cd3645814724bdeb32a2b4d953b12bdea5f8c
tree9b22aa9bc0d6109c85ed4f0658fca09193618707
parentb35a2d3e895600d8a1273b44f68128491faab3b8
xsk: add support to allow unaligned chunk placement

Currently, addresses are chunk size aligned. This means, we are very
restricted in terms of where we can place chunk within the umem. For
example, if we have a chunk size of 2k, then our chunks can only be placed
at 0,2k,4k,6k,8k... and so on (ie. every 2k starting from 0).

This patch introduces the ability to use unaligned chunks. With these
changes, we are no longer bound to having to place chunks at a 2k (or
whatever your chunk size is) interval. Since we are no longer dealing with
aligned chunks, they can now cross page boundaries. Checks for page
contiguity have been added in order to keep track of which pages are
followed by a physically contiguous page.

Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
include/net/xdp_sock.h
include/uapi/linux/if_xdp.h
net/xdp/xdp_umem.c
net/xdp/xsk.c
net/xdp/xsk_diag.c
net/xdp/xsk_queue.h