On 10/09/2021 13:20, Li Zhijian wrote: > > > 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.
BTW: Does QEMU provide any mean to set http(s)_proxy to building vm ? Currently, i have to hack the code like: - self.ssh_root_check("pkg install -y %s\n" % " ".join(self.pkgs)) + self.ssh_root_check("setenv HTTP_PROXY http://myproxy; setenv HTTPS_PROXY http://myproxy; pkg install -y %s\n" % " ".join(self.pkgs)) Thanks Zhijian > > 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)