"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. 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) -- 2.31.1