Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
On Wed, Aug 14, 2019 at 2:24 AM 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 > > wrote: > >> > >> That's needed to get __NR_mmap2 when mmap2 syscall is used. > >> > >> Signed-off-by: Ivan Khoronzhuk > >> --- > >> 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 > >> #include > >> #include > >> +#include > > > >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 > >> #include > >> #include > >> -- > >> 2.17.1 > >> > > -- > Regards, > Ivan Khoronzhuk
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
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 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 >> wrote: >>> >>>That's needed to get __NR_mmap2 when mmap2 syscall is used. >>> >>>Signed-off-by: Ivan Khoronzhuk >>>--- >>> 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 >>> #include >>> #include >>>+#include >> >>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 Implement _FILE_OFFSET_BITS (mostly) MUSL I took here: g...@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_SOURCE200809L # undef _XOPEN_SOURCE # define _XOPEN_SOURCE 700 # undef _XOPEN_SOURCE_EXTENDED # define _XOPEN_SOURCE_EXTENDED 1 # undef _LARGEFILE64_SOURCE # define _LARGEFILE64_SOURCE1 # undef _DEFAULT_SOURCE # define _DEFAULT_SOURCE1 # 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
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
On 8/14/19 6:32 AM, Björn Töpel wrote: > On Wed, 14 Aug 2019 at 13:57, Ivan Khoronzhuk > 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 wrote: > > That's needed to get __NR_mmap2 when mmap2 syscall is used. > > Signed-off-by: Ivan Khoronzhuk > --- > 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 > #include > #include > +#include 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 + >>
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
On 8/14/19 2:24 AM, 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 >> wrote: >>> >>> That's needed to get __NR_mmap2 when mmap2 syscall is used. >>> >>> Signed-off-by: Ivan Khoronzhuk >>> --- >>> 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 >>> #include >>> #include >>> +#include >> >> 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 > The ".syntax unified" is mentioned a couple of times in bcc mailing list as well. llvm bpf backend might be able to solve it. I have not looked at the details though. > > or this one related for arm32 only: > https://github.com/ikhorn/af_xdp_stuff/commit/2c6c6d538605aac39600dcb3c9b66de11c70b963 > This may not work if bpf program tries to handle kernel headers. bpf program may get wrong layout. Anyway, the above two comments are irrelevant to this patch set and if needed should be discussed separately. > > > I have more... > >> >>> #include >>> #include >>> #include >>> -- >>> 2.17.1 >>> >
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
On Wed, 14 Aug 2019 at 13:57, Ivan Khoronzhuk 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 > >> wrote: > >>> > >>>That's needed to get __NR_mmap2 when mmap2 syscall is used. > >>> > >>>Signed-off-by: Ivan Khoronzhuk > >>>--- > >>> 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 > >>> #include > >>> #include > >>>+#include > >> > >>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. :-) 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); >
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
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 wrote: That's needed to get __NR_mmap2 when mmap2 syscall is used. Signed-off-by: Ivan Khoronzhuk --- 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 #include #include +#include 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); +
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
On Wed, Aug 14, 2019 at 12:32:41AM +, 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
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
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 wrote: That's needed to get __NR_mmap2 when mmap2 syscall is used. Signed-off-by: Ivan Khoronzhuk --- 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 #include #include +#include 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 #include #include -- 2.17.1 -- Regards, Ivan Khoronzhuk
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
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. 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? > > Signed-off-by: Ivan Khoronzhuk > --- > 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 > #include > #include > +#include > #include > #include > #include >
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
On Tue, Aug 13, 2019 at 3:24 AM Ivan Khoronzhuk wrote: > > That's needed to get __NR_mmap2 when mmap2 syscall is used. > > Signed-off-by: Ivan Khoronzhuk > --- > 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 > #include > #include > +#include asm/unistd.h is not present in Github libbpf projection. Is there any 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. > #include > #include > #include > -- > 2.17.1 >
Re: [PATCH bpf-next 1/3] libbpf: add asm/unistd.h to xsk to get __NR_mmap2
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 Acked-by: Jonathan Lemon