"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
The other way around I think. What about: It compiled on my Linux machine, but it *should* work on any (famous last words). Finishing compilation Later, Juan. >From 964e436bdb8aef7dbebc28415e4ac3c5822b552e 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> --- configure | 28 ++++++++++++++++++++++++++++ migration/rdma.c | 2 ++ 2 files changed, 30 insertions(+) diff --git a/configure b/configure index 8adf2127c3..70054fd702 100755 --- a/configure +++ b/configure @@ -339,6 +339,7 @@ whpx="auto" nvmm="auto" rdma="$default_feature" pvrdma="$default_feature" +rdma_ibv_advise_mr="no" gprof="no" debug_tcg="no" debug="no" @@ -2918,6 +2919,29 @@ EOF fi fi +# Let's see if enhanced reg_mr is supported +if test "$rdma" = "yes" ; then + +cat > $TMPC <<EOF && +#include <infiniband/verbs.h> + +int +main(void) +{ + int advice = wr ? IBV_ADVISE_MR_ADVICE_PREFETCH_WRITE : + IBV_ADVISE_MR_ADVICE_PREFETCH; + struct ibv_sge sg_list = {.lkey = lkey, .addr = addr, .length = len}; + + ibv_advise_mr(pd, advice, IBV_ADVISE_MR_FLAG_FLUSH, &sg_list, 1); + return 0; +} +EOF + if ! compile_prog "" "-libverbs"; then + rdma_ibv_advise_mr="yes" + fi +fi + + ########################################## # xfsctl() probe, used for file-posix.c if test "$xfs" != "no" ; then @@ -4802,6 +4826,10 @@ if test "$rdma" = "yes" ; then echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak fi +if test "$rdma_ibv_advise_mr" = "yes"; then + echo "CONFIG_IBV_ADVISE_MR=y" >> $config_host_mak +fi + if test "$pvrdma" = "yes" ; then echo "CONFIG_PVRDMA=y" >> $config_host_mak fi diff --git a/migration/rdma.c b/migration/rdma.c index 6c2cc3f617..aac343253f 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) { +#if CONFIG_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