On 10/09/2021 00:10, Juan Quintela wrote: > "Li, Zhijian" <lizhij...@cn.fujitsu.com> wrote: >> on 2021/9/9 21:42, Peter Maydell wrote: >>> On Thu, 9 Sept 2021 at 11:36, Juan Quintela <quint...@redhat.com> wrote: >>> Fails to build, FreeBSD: >>> >>> ../src/migration/rdma.c:1146:23: error: use of undeclared identifier >>> 'IBV_ADVISE_MR_ADVICE_PREFETCH_WRITE' >>> int advice = wr ? IBV_ADVISE_MR_ADVICE_PREFETCH_WRITE : >>> ^ >>> ../src/migration/rdma.c:1147:18: error: use of undeclared identifier >>> 'IBV_ADVISE_MR_ADVICE_PREFETCH' >>> IBV_ADVISE_MR_ADVICE_PREFETCH; >>> ^ >>> ../src/migration/rdma.c:1150:11: warning: implicit declaration of >>> function 'ibv_advise_mr' is invalid in C99 >>> [-Wimplicit-function-declaration] >>> ret = ibv_advise_mr(pd, advice, >>> ^ >>> ../src/migration/rdma.c:1151:25: error: use of undeclared identifier >>> 'IBV_ADVISE_MR_FLAG_FLUSH' >>> IBV_ADVISE_MR_FLAG_FLUSH, &sg_list, 1); >>> ^ >>> >> it's introduced by [PULL 4/7] migration/rdma: advise prefetch write for ODP >> region >> where it calls a ibv_advise_mr(). i have checked the latest FreeBSD, it >> didn't ship with this API >> May i know if just FressBSD reports this failure? if so, i just need >> filtering out FreeBSD only > Second try. I can't see an example where they search for: > a symbol on the header file > and > a function in a library > > so I assume that if you have the symbols, you have the function. > > How do you see it? > > Trying to compile it on vm-build-freebsd, but not being very sucessfull > so far.
Your patch does work! But i still followed PMM's suggestion, converted it to has_function as another option. I have verified it on FreeBSD and Linux. From 67f386acc2092ecf6e71b8951b6af5d5b8366f80 Mon Sep 17 00:00:00 2001 From: Juan Quintela <quint...@redhat.com> Date: Thu, 9 Sep 2021 17:07:17 +0200 Subject: [PATCH] rdma: test for ibv_advise_mr API Signed-off-by: Juan Quintela <quint...@redhat.com> Signed-off-by: Li Zhijian <lizhij...@cn.fujitsu.com> --- meson.build | 6 ++++++ migration/rdma.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/meson.build b/meson.build index 6e4d2d80343..97406d1b79b 100644 --- a/meson.build +++ b/meson.build @@ -1328,6 +1328,12 @@ config_host_data.set('HAVE_COPY_FILE_RANGE', cc.has_function('copy_file_range')) config_host_data.set('HAVE_OPENPTY', cc.has_function('openpty', dependencies: util)) config_host_data.set('HAVE_STRCHRNUL', cc.has_function('strchrnul')) config_host_data.set('HAVE_SYSTEM_FUNCTION', cc.has_function('system', prefix: '#include <stdlib.h>')) +if rdma.found() + config_host_data.set('HAVE_IBV_ADVISE_MR', + cc.has_function('ibv_advise_mr', + args: config_host['RDMA_LIBS'].split(), + prefix: '#include <infiniband/verbs.h>')) +endif # has_header_symbol config_host_data.set('CONFIG_BYTESWAP_H', diff --git a/migration/rdma.c b/migration/rdma.c index 6c2cc3f617c..2a3c7889b9f 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -1142,6 +1142,7 @@ static void qemu_rdma_advise_prefetch_mr(struct ibv_pd *pd, uint64_t addr, uint32_t len, uint32_t lkey, const char *name, bool wr) { +#ifdef HAVE_IBV_ADVISE_MR int ret; int advice = wr ? IBV_ADVISE_MR_ADVICE_PREFETCH_WRITE : IBV_ADVISE_MR_ADVICE_PREFETCH; @@ -1155,6 +1156,7 @@ static void qemu_rdma_advise_prefetch_mr(struct ibv_pd *pd, uint64_t addr, } else { trace_qemu_rdma_advise_mr(name, len, addr, "successed"); } +#endif } static int qemu_rdma_reg_whole_ram_blocks(RDMAContext *rdma) -- 2.31.1 > Later, Juan. > > From e954c1e0afc785a98d472201dafe75a7e7126b1d Mon Sep 17 00:00:00 2001 > From: Juan Quintela <quint...@redhat.com> > Date: Thu, 9 Sep 2021 17:07:17 +0200 > Subject: [PATCH] rdma: test for ibv_advise_mr API > > Signed-off-by: Juan Quintela <quint...@redhat.com> > --- > meson.build | 3 +++ > migration/rdma.c | 2 ++ > 2 files changed, 5 insertions(+) > > diff --git a/meson.build b/meson.build > index 7e58e6279b..c2eb437df4 100644 > --- a/meson.build > +++ b/meson.build > @@ -1375,6 +1375,9 @@ config_host_data.set('HAVE_SIGEV_NOTIFY_THREAD_ID', > config_host_data.set('HAVE_STRUCT_STAT_ST_ATIM', > cc.has_member('struct stat', 'st_atim', > prefix: '#include <sys/stat.h>')) > +config_host_data.set('CONFIG_RDMA_IBV_ADVISE_MR', > + cc.has_header_symbol('infiniband/verbs.h', > 'IBV_ADVISE_MR_ADVICE_PREFETCH') and > + cc.has_header_symbol('infiniband/verbs.h', > 'IBV_ADVISE_MR_ADVICE_PREFETCH_WRITE')) > > config_host_data.set('CONFIG_EVENTFD', cc.links(''' > #include <sys/eventfd.h> > diff --git a/migration/rdma.c b/migration/rdma.c > index 6c2cc3f617..f0d78597fb 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -1142,6 +1142,7 @@ static void qemu_rdma_advise_prefetch_mr(struct ibv_pd > *pd, uint64_t addr, > uint32_t len, uint32_t lkey, > const char *name, bool wr) > { > +#ifdef CONFIG_RDMA_IBV_ADVISE_MR > int ret; > int advice = wr ? IBV_ADVISE_MR_ADVICE_PREFETCH_WRITE : > IBV_ADVISE_MR_ADVICE_PREFETCH; > @@ -1155,6 +1156,7 @@ static void qemu_rdma_advise_prefetch_mr(struct ibv_pd > *pd, uint64_t addr, > } else { > trace_qemu_rdma_advise_mr(name, len, addr, "successed"); > } > +#endif > } > > static int qemu_rdma_reg_whole_ram_blocks(RDMAContext *rdma)