Message ID | 20190813102318.5521-2-ivan.khoronzhuk@linaro.org |
---|---|
State | New |
Headers | show |
Series | [bpf-next,1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2 | expand |
On 13 Aug 2019, at 3:23, Ivan Khoronzhuk wrote: > That's needed to get __NR_mmap2 when mmap2 syscall is used. > > Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
On Tue, Aug 13, 2019 at 04:38:13PM -0700, Andrii Nakryiko wrote: Hi, Andrii >On Tue, Aug 13, 2019 at 3:24 AM Ivan Khoronzhuk ><ivan.khoronzhuk@linaro.org> wrote: >> >> That's needed to get __NR_mmap2 when mmap2 syscall is used. >> >> Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> >> --- >> tools/lib/bpf/xsk.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c >> index 5007b5d4fd2c..f2fc40f9804c 100644 >> --- a/tools/lib/bpf/xsk.c >> +++ b/tools/lib/bpf/xsk.c >> @@ -12,6 +12,7 @@ >> #include <stdlib.h> >> #include <string.h> >> #include <unistd.h> >> +#include <asm/unistd.h> > >asm/unistd.h is not present in Github libbpf projection. Is there any Look on includes from tools/lib/bpf/libpf.c tools/lib/bpf/bpf.c That's how it's done... Copping headers to arch/arm will not solve this, it includes both of them anyway, and anyway it needs asm/unistd.h inclusion here, only because xsk.c needs __NR_* >way to avoid including this header? Generally, libbpf can't easily use >all of kernel headers, we need to re-implemented all the extra used >stuff for Github version of libbpf, so we try to minimize usage of new >headers that are not just plain uapi headers from include/uapi. Yes I know, it's far away from real number of changes needed. I faced enough about this already and kernel headers, especially for arm32 it's a bit decency problem. But this patch it's part of normal one. I have couple issues despite this normally fixed mmap2 that is the same even if uapi includes are coppied to tools/arch/arm. In continuation of kernel headers inclusion and arm build: For instance, what about this rough "kernel headers" hack: https://github.com/ikhorn/af_xdp_stuff/commit/aa645ccca4d844f404ec3c2b27402d4d7848d1b5 or this one related for arm32 only: https://github.com/ikhorn/af_xdp_stuff/commit/2c6c6d538605aac39600dcb3c9b66de11c70b963 I have more... > >> #include <arpa/inet.h> >> #include <asm/barrier.h> >> #include <linux/compiler.h> >> -- >> 2.17.1 >> -- Regards, Ivan Khoronzhuk
On Wed, Aug 14, 2019 at 12:32:41AM +0000, Yonghong Song wrote: Hi, Yonghong Song > > >On 8/13/19 3:23 AM, Ivan Khoronzhuk wrote: >> That's needed to get __NR_mmap2 when mmap2 syscall is used. > >It seems I did not have this issue on x64 machine e.g., Fedora 29. >My glibc version is 2.28. gcc 8.2.1. On 64 there is no the issue. > >What is your particular system glibc version? >So needing kernel asm/unistd.h is because of older glibc on your >system, or something else? Could you clarify? It doesn't fix build issues, only runtime one on 32bits. If no such inclusion -> no __NR_mmap2 definition - just mmap() is used -> no problems on x64. Is the inclusion -> no NR_mmap2 or is NR_mmap2 -> no problems on x64 -- Regards, Ivan Khoronzhuk
On Wed, Aug 14, 2019 at 12:24:05PM +0300, Ivan Khoronzhuk wrote: >On Tue, Aug 13, 2019 at 04:38:13PM -0700, Andrii Nakryiko wrote: > >Hi, Andrii > >>On Tue, Aug 13, 2019 at 3:24 AM Ivan Khoronzhuk >><ivan.khoronzhuk@linaro.org> wrote: >>> >>>That's needed to get __NR_mmap2 when mmap2 syscall is used. >>> >>>Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> >>>--- >>> tools/lib/bpf/xsk.c | 1 + >>> 1 file changed, 1 insertion(+) >>> >>>diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c >>>index 5007b5d4fd2c..f2fc40f9804c 100644 >>>--- a/tools/lib/bpf/xsk.c >>>+++ b/tools/lib/bpf/xsk.c >>>@@ -12,6 +12,7 @@ >>> #include <stdlib.h> >>> #include <string.h> >>> #include <unistd.h> >>>+#include <asm/unistd.h> >> >>asm/unistd.h is not present in Github libbpf projection. Is there any > >Look on includes from >tools/lib/bpf/libpf.c >tools/lib/bpf/bpf.c > >That's how it's done... Copping headers to arch/arm will not >solve this, it includes both of them anyway, and anyway it needs >asm/unistd.h inclusion here, only because xsk.c needs __NR_* > > There is one more radical solution for this I can send, but I'm not sure how it can impact on other syscals/arches... Looks like: diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile index 9312066a1ae3..8b2f8ff7ce44 100644 --- a/tools/lib/bpf/Makefile +++ b/tools/lib/bpf/Makefile @@ -113,6 +113,7 @@ override CFLAGS += -Werror -Wall override CFLAGS += -fPIC override CFLAGS += $(INCLUDES) override CFLAGS += -fvisibility=hidden +override CFLAGS += -D_FILE_OFFSET_BITS=64 ifeq ($(VERBOSE),1) Q = diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c index f2fc40f9804c..ff2d03b8380d 100644 --- a/tools/lib/bpf/xsk.c +++ b/tools/lib/bpf/xsk.c @@ -75,23 +75,6 @@ struct xsk_nl_info { int fd; }; -/* For 32-bit systems, we need to use mmap2 as the offsets are 64-bit. - * Unfortunately, it is not part of glibc. - */ -static inline void *xsk_mmap(void *addr, size_t length, int prot, int flags, - int fd, __u64 offset) -{ -#ifdef __NR_mmap2 - unsigned int page_shift = __builtin_ffs(getpagesize()) - 1; - long ret = syscall(__NR_mmap2, addr, length, prot, flags, fd, - (off_t)(offset >> page_shift)); - - return (void *)ret; -#else - return mmap(addr, length, prot, flags, fd, offset); -#endif -} - int xsk_umem__fd(const struct xsk_umem *umem) { return umem ? umem->fd : -EINVAL; @@ -211,10 +194,9 @@ int xsk_umem__create(struct xsk_umem **umem_ptr, void *umem_area, __u64 size, goto out_socket; } - map = xsk_mmap(NULL, off.fr.desc + - umem->config.fill_size * sizeof(__u64), - PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, - umem->fd, XDP_UMEM_PGOFF_FILL_RING); + map = mmap(NULL, off.fr.desc + umem->config.fill_size * sizeof(__u64), + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, umem->fd, + XDP_UMEM_PGOFF_FILL_RING); if (map == MAP_FAILED) { err = -errno; goto out_socket; @@ -228,10 +210,9 @@ int xsk_umem__create(struct xsk_umem **umem_ptr, void *umem_area, __u64 size, fill->ring = map + off.fr.desc; fill->cached_cons = umem->config.fill_size; - map = xsk_mmap(NULL, - off.cr.desc + umem->config.comp_size * sizeof(__u64), - PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, - umem->fd, XDP_UMEM_PGOFF_COMPLETION_RING); + map = mmap(NULL, off.cr.desc + umem->config.comp_size * sizeof(__u64), + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, umem->fd, + XDP_UMEM_PGOFF_COMPLETION_RING); if (map == MAP_FAILED) { err = -errno; goto out_mmap; @@ -552,11 +533,10 @@ int xsk_socket__create(struct xsk_socket **xsk_ptr, const char *ifname, } if (rx) { - rx_map = xsk_mmap(NULL, off.rx.desc + - xsk->config.rx_size * sizeof(struct xdp_desc), - PROT_READ | PROT_WRITE, - MAP_SHARED | MAP_POPULATE, - xsk->fd, XDP_PGOFF_RX_RING); + rx_map = mmap(NULL, off.rx.desc + + xsk->config.rx_size * sizeof(struct xdp_desc), + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, + xsk->fd, XDP_PGOFF_RX_RING); if (rx_map == MAP_FAILED) { err = -errno; goto out_socket; @@ -571,11 +551,10 @@ int xsk_socket__create(struct xsk_socket **xsk_ptr, const char *ifname, xsk->rx = rx; if (tx) { - tx_map = xsk_mmap(NULL, off.tx.desc + - xsk->config.tx_size * sizeof(struct xdp_desc), - PROT_READ | PROT_WRITE, - MAP_SHARED | MAP_POPULATE, - xsk->fd, XDP_PGOFF_TX_RING); + tx_map = mmap(NULL, off.tx.desc + + xsk->config.tx_size * sizeof(struct xdp_desc), + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, + xsk->fd, XDP_PGOFF_TX_RING); if (tx_map == MAP_FAILED) { err = -errno; goto out_mmap_rx; If maintainers are ready to accept this I can send. What do you say? -- Regards, Ivan Khoronzhuk
On 8/14/19 6:32 AM, Björn Töpel wrote: > On Wed, 14 Aug 2019 at 13:57, Ivan Khoronzhuk > <ivan.khoronzhuk@linaro.org> wrote: >> >> On Wed, Aug 14, 2019 at 12:24:05PM +0300, Ivan Khoronzhuk wrote: >>> On Tue, Aug 13, 2019 at 04:38:13PM -0700, Andrii Nakryiko wrote: >>> >>> Hi, Andrii >>> >>>> On Tue, Aug 13, 2019 at 3:24 AM Ivan Khoronzhuk >>>> <ivan.khoronzhuk@linaro.org> wrote: >>>>> >>>>> That's needed to get __NR_mmap2 when mmap2 syscall is used. >>>>> >>>>> Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> >>>>> --- >>>>> tools/lib/bpf/xsk.c | 1 + >>>>> 1 file changed, 1 insertion(+) >>>>> >>>>> diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c >>>>> index 5007b5d4fd2c..f2fc40f9804c 100644 >>>>> --- a/tools/lib/bpf/xsk.c >>>>> +++ b/tools/lib/bpf/xsk.c >>>>> @@ -12,6 +12,7 @@ >>>>> #include <stdlib.h> >>>>> #include <string.h> >>>>> #include <unistd.h> >>>>> +#include <asm/unistd.h> >>>> >>>> asm/unistd.h is not present in Github libbpf projection. Is there any >>> >>> Look on includes from >>> tools/lib/bpf/libpf.c >>> tools/lib/bpf/bpf.c >>> >>> That's how it's done... Copping headers to arch/arm will not >>> solve this, it includes both of them anyway, and anyway it needs >>> asm/unistd.h inclusion here, only because xsk.c needs __NR_* >>> >>> >> >> There is one more radical solution for this I can send, but I'm not sure how it >> can impact on other syscals/arches... >> >> Looks like: >> >> >> diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile >> index 9312066a1ae3..8b2f8ff7ce44 100644 >> --- a/tools/lib/bpf/Makefile >> +++ b/tools/lib/bpf/Makefile >> @@ -113,6 +113,7 @@ override CFLAGS += -Werror -Wall >> override CFLAGS += -fPIC >> override CFLAGS += $(INCLUDES) >> override CFLAGS += -fvisibility=hidden >> +override CFLAGS += -D_FILE_OFFSET_BITS=64 >> > > Hmm, isn't this glibc-ism? Does is it work for, say, musl or bionic? > > If this is portable, and works on 32-, and 64-bit archs, I'm happy > with the patch. :-) Second here. Looks defining -D_FILE_OFFSET_BITS=64 is a well known fix for 32bit system to deal with files > 2GB. I remembered I used it in distant past. The below link also explains the case. https://digital-domain.net/largefiles.html Testing on musl is necessary as Arnaldo's perf test suite indeed tested it. Probably bionic too, not really familiar with that. > > > Björn > >> ifeq ($(VERBOSE),1) >> Q = >> diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c >> index f2fc40f9804c..ff2d03b8380d 100644 >> --- a/tools/lib/bpf/xsk.c >> +++ b/tools/lib/bpf/xsk.c >> @@ -75,23 +75,6 @@ struct xsk_nl_info { >> int fd; >> }; >> >> -/* For 32-bit systems, we need to use mmap2 as the offsets are 64-bit. >> - * Unfortunately, it is not part of glibc. >> - */ >> -static inline void *xsk_mmap(void *addr, size_t length, int prot, int flags, >> - int fd, __u64 offset) >> -{ >> -#ifdef __NR_mmap2 >> - unsigned int page_shift = __builtin_ffs(getpagesize()) - 1; >> - long ret = syscall(__NR_mmap2, addr, length, prot, flags, fd, >> - (off_t)(offset >> page_shift)); >> - >> - return (void *)ret; >> -#else >> - return mmap(addr, length, prot, flags, fd, offset); >> -#endif >> -} >> - >> int xsk_umem__fd(const struct xsk_umem *umem) >> { >> return umem ? umem->fd : -EINVAL; >> @@ -211,10 +194,9 @@ int xsk_umem__create(struct xsk_umem **umem_ptr, void *umem_area, __u64 size, >> goto out_socket; >> } >> >> - map = xsk_mmap(NULL, off.fr.desc + >> - umem->config.fill_size * sizeof(__u64), >> - PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, >> - umem->fd, XDP_UMEM_PGOFF_FILL_RING); >> + map = mmap(NULL, off.fr.desc + umem->config.fill_size * sizeof(__u64), >> + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, umem->fd, >> + XDP_UMEM_PGOFF_FILL_RING); >> if (map == MAP_FAILED) { >> err = -errno; >> goto out_socket; >> @@ -228,10 +210,9 @@ int xsk_umem__create(struct xsk_umem **umem_ptr, void *umem_area, __u64 size, >> fill->ring = map + off.fr.desc; >> fill->cached_cons = umem->config.fill_size; >> >> - map = xsk_mmap(NULL, >> - off.cr.desc + umem->config.comp_size * sizeof(__u64), >> - PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, >> - umem->fd, XDP_UMEM_PGOFF_COMPLETION_RING); >> + map = mmap(NULL, off.cr.desc + umem->config.comp_size * sizeof(__u64), >> + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, umem->fd, >> + XDP_UMEM_PGOFF_COMPLETION_RING); >> if (map == MAP_FAILED) { >> err = -errno; >> goto out_mmap; >> @@ -552,11 +533,10 @@ int xsk_socket__create(struct xsk_socket **xsk_ptr, const char *ifname, >> } >> >> if (rx) { >> - rx_map = xsk_mmap(NULL, off.rx.desc + >> - xsk->config.rx_size * sizeof(struct xdp_desc), >> - PROT_READ | PROT_WRITE, >> - MAP_SHARED | MAP_POPULATE, >> - xsk->fd, XDP_PGOFF_RX_RING); >> + rx_map = mmap(NULL, off.rx.desc + >> + xsk->config.rx_size * sizeof(struct xdp_desc), >> + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, >> + xsk->fd, XDP_PGOFF_RX_RING); >> if (rx_map == MAP_FAILED) { >> err = -errno; >> goto out_socket; >> @@ -571,11 +551,10 @@ int xsk_socket__create(struct xsk_socket **xsk_ptr, const char *ifname, >> xsk->rx = rx; >> >> if (tx) { >> - tx_map = xsk_mmap(NULL, off.tx.desc + >> - xsk->config.tx_size * sizeof(struct xdp_desc), >> - PROT_READ | PROT_WRITE, >> - MAP_SHARED | MAP_POPULATE, >> - xsk->fd, XDP_PGOFF_TX_RING); >> + tx_map = mmap(NULL, off.tx.desc + >> + xsk->config.tx_size * sizeof(struct xdp_desc), >> + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, >> + xsk->fd, XDP_PGOFF_TX_RING); >> if (tx_map == MAP_FAILED) { >> err = -errno; >> goto out_mmap_rx; >> >> >> If maintainers are ready to accept this I can send. >> What do you say? >> >> -- >> Regards, >> Ivan Khoronzhuk
On Wed, Aug 14, 2019 at 03:32:24PM +0200, Björn Töpel wrote: >On Wed, 14 Aug 2019 at 13:57, Ivan Khoronzhuk ><ivan.khoronzhuk@linaro.org> wrote: >> >> On Wed, Aug 14, 2019 at 12:24:05PM +0300, Ivan Khoronzhuk wrote: >> >On Tue, Aug 13, 2019 at 04:38:13PM -0700, Andrii Nakryiko wrote: >> > >> >Hi, Andrii >> > >> >>On Tue, Aug 13, 2019 at 3:24 AM Ivan Khoronzhuk >> >><ivan.khoronzhuk@linaro.org> wrote: >> >>> >> >>>That's needed to get __NR_mmap2 when mmap2 syscall is used. >> >>> >> >>>Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> >> >>>--- >> >>> tools/lib/bpf/xsk.c | 1 + >> >>> 1 file changed, 1 insertion(+) >> >>> >> >>>diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c >> >>>index 5007b5d4fd2c..f2fc40f9804c 100644 >> >>>--- a/tools/lib/bpf/xsk.c >> >>>+++ b/tools/lib/bpf/xsk.c >> >>>@@ -12,6 +12,7 @@ >> >>> #include <stdlib.h> >> >>> #include <string.h> >> >>> #include <unistd.h> >> >>>+#include <asm/unistd.h> >> >> >> >>asm/unistd.h is not present in Github libbpf projection. Is there any >> > >> >Look on includes from >> >tools/lib/bpf/libpf.c >> >tools/lib/bpf/bpf.c >> > >> >That's how it's done... Copping headers to arch/arm will not >> >solve this, it includes both of them anyway, and anyway it needs >> >asm/unistd.h inclusion here, only because xsk.c needs __NR_* >> > >> > >> >> There is one more radical solution for this I can send, but I'm not sure how it >> can impact on other syscals/arches... >> >> Looks like: >> >> >> diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile >> index 9312066a1ae3..8b2f8ff7ce44 100644 >> --- a/tools/lib/bpf/Makefile >> +++ b/tools/lib/bpf/Makefile >> @@ -113,6 +113,7 @@ override CFLAGS += -Werror -Wall >> override CFLAGS += -fPIC >> override CFLAGS += $(INCLUDES) >> override CFLAGS += -fvisibility=hidden >> +override CFLAGS += -D_FILE_OFFSET_BITS=64 >> > >Hmm, isn't this glibc-ism? Does is it work for, say, musl or bionic? > >If this is portable, and works on 32-, and 64-bit archs, I'm happy >with the patch. :-) https://users.suse.com/~aj/linux_lfs.html BIONIС ====== https://android.googlesource.com/platform/bionic So, LFS is in bionic since Fri Feb 6 22:28:49 2015 68dc20d41193831a94df04b994ff2f601dd38d10 Author: Elliott Hughes <enh@google.com> Implement _FILE_OFFSET_BITS (mostly) MUSL ==== I took here: git@github.com:kraj/musl.git With musl situation is a little different, seems like, it provides 64bit off_t by default #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) #define lseek64 lseek #define pread64 pread #define pwrite64 pwrite #define truncate64 truncate #define ftruncate64 ftruncate #define lockf64 lockf #define off64_t off_t #endif and /* If _GNU_SOURCE was defined by the user, turn on all the other features. */ #ifdef _GNU_SOURCE # undef _ISOC95_SOURCE # define _ISOC95_SOURCE 1 # undef _ISOC99_SOURCE # define _ISOC99_SOURCE 1 # undef _ISOC11_SOURCE # define _ISOC11_SOURCE 1 # undef _POSIX_SOURCE # define _POSIX_SOURCE 1 # undef _POSIX_C_SOURCE # define _POSIX_C_SOURCE 200809L # undef _XOPEN_SOURCE # define _XOPEN_SOURCE 700 # undef _XOPEN_SOURCE_EXTENDED # define _XOPEN_SOURCE_EXTENDED 1 # undef _LARGEFILE64_SOURCE # define _LARGEFILE64_SOURCE 1 # undef _DEFAULT_SOURCE # define _DEFAULT_SOURCE 1 # undef _ATFILE_SOURCE # define _ATFILE_SOURCE 1 #endif So shouldn't be issuse. 64 ARCHES ========= Should also work, if grep on _FILE_OFFSET_BITS tool: ./lib/api/Makefile:CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 ./lib/subcmd/Makefile:CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE So, it's used already and no problems. But here one moment, _LARGEFILE64_SOURCE is also defined, probably for MUSL (despite it's defined anyway) just to be sure. So, in Makefile, for sure, will be: override CFLAGS += -D_FILE_OFFSET_BITS=64 verride CFLAGS += -D_LARGEFILE64_SOURCE -- Regards, Ivan Khoronzhuk
On Wed, Aug 14, 2019 at 2:24 AM Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> wrote: > > On Tue, Aug 13, 2019 at 04:38:13PM -0700, Andrii Nakryiko wrote: > > Hi, Andrii > > >On Tue, Aug 13, 2019 at 3:24 AM Ivan Khoronzhuk > ><ivan.khoronzhuk@linaro.org> wrote: > >> > >> That's needed to get __NR_mmap2 when mmap2 syscall is used. > >> > >> Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> > >> --- > >> tools/lib/bpf/xsk.c | 1 + > >> 1 file changed, 1 insertion(+) > >> > >> diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c > >> index 5007b5d4fd2c..f2fc40f9804c 100644 > >> --- a/tools/lib/bpf/xsk.c > >> +++ b/tools/lib/bpf/xsk.c > >> @@ -12,6 +12,7 @@ > >> #include <stdlib.h> > >> #include <string.h> > >> #include <unistd.h> > >> +#include <asm/unistd.h> > > > >asm/unistd.h is not present in Github libbpf projection. Is there any > > Look on includes from > tools/lib/bpf/libpf.c > tools/lib/bpf/bpf.c > Yeah, sorry for the noise. I missed that this is system header that's expected to be present, not internal kernel header, parts of which we need to re-implement for Github projection. Never mind my concerns. > That's how it's done... Copping headers to arch/arm will not > solve this, it includes both of them anyway, and anyway it needs > asm/unistd.h inclusion here, only because xsk.c needs __NR_* > > > >way to avoid including this header? Generally, libbpf can't easily use > >all of kernel headers, we need to re-implemented all the extra used > >stuff for Github version of libbpf, so we try to minimize usage of new > >headers that are not just plain uapi headers from include/uapi. > > Yes I know, it's far away from real number of changes needed. > I faced enough about this already and kernel headers, especially > for arm32 it's a bit decency problem. But this patch it's part of > normal one. I have couple issues despite this normally fixed mmap2 > that is the same even if uapi includes are coppied to tools/arch/arm. > > In continuation of kernel headers inclusion and arm build: > > For instance, what about this rough "kernel headers" hack: > https://github.com/ikhorn/af_xdp_stuff/commit/aa645ccca4d844f404ec3c2b27402d4d7848d1b5 > > or this one related for arm32 only: > https://github.com/ikhorn/af_xdp_stuff/commit/2c6c6d538605aac39600dcb3c9b66de11c70b963 > > I have more... > > > > >> #include <arpa/inet.h> > >> #include <asm/barrier.h> > >> #include <linux/compiler.h> > >> -- > >> 2.17.1 > >> > > -- > Regards, > Ivan Khoronzhuk
diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c index 5007b5d4fd2c..f2fc40f9804c 100644 --- a/tools/lib/bpf/xsk.c +++ b/tools/lib/bpf/xsk.c @@ -12,6 +12,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <asm/unistd.h> #include <arpa/inet.h> #include <asm/barrier.h> #include <linux/compiler.h>
That's needed to get __NR_mmap2 when mmap2 syscall is used. Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> --- tools/lib/bpf/xsk.c | 1 + 1 file changed, 1 insertion(+) -- 2.17.1