Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Jul 2018 01:01:16 +0000
From:      Li-Wen Hsu <lwhsu@FreeBSD.org>
To:        Konstantin Belousov <kib@freebsd.org>
Cc:        current@FreeBSD.org, br@freebsd.org
Subject:   Re: FreeBSD-head-riscv64-build - Build #9623 (r336573) - Failure
Message-ID:  <20180722010116.GA13419@freefall.freebsd.org>
In-Reply-To: <20180721231832.GC65334@kib.kiev.ua>
References:  <941706773.1.1532139392496.JavaMail.jenkins@jenkins.ci.freebsd.org> <20180721231832.GC65334@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

--uAKRQypu60I7Lcqm
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sun, Jul 22, 2018 at 02:18:32 +0300, Konstantin Belousov wrote:
> On Sat, Jul 21, 2018 at 02:16:17AM +0000, jenkins-admin@FreeBSD.org wrote:
> > --- lib/ofed/libmlx5__L ---
> > In file included from /workspace/src/contrib/ofed/libmlx5/mlx5.h:44:0,
> >                  from /workspace/src/contrib/ofed/libmlx5/buf.c:42:
> > /workspace/obj/workspace/src/riscv.riscv64/tmp/usr/include/infiniband/udma_barrier.h:108:2: error: #error No architecture specific memory barrier defines found!
> >  #error No architecture specific memory barrier defines found!
> >   ^~~~~
> 
> The patch below should be enough to fix the build,  modulo the syntax
> errors which I cannot check.  The reason is that it seems riscv is not
> cross-buildable from stable/11 host:
> --- includes_subdir_include/rpcsvc ---
> RPCGEN_CPP=cpp\ -target\ riscv64-unknown-freebsd12.0\ --sysroot=/usr/home/konstantinb/build/bsd/DEV/obj/usr/home/konstantinb/build/bsd/DEV/src/riscv.riscv64/tmp\ -B/usr/local rpcgen -C -h -DWANT_NFS3 /usr/home/konstantinb/build/bsd/DEV/src/include/rpcsvc/klm_prot.x -o klm_prot.h
> --- key_prot.h ---
> error: unknown target triple 'riscv64-unknown-freebsd12.0', please use -triple or -arch
> *** [key_prot.h] Error code 1
> 
> make[4]: stopped in /usr/home/konstantinb/build/bsd/DEV/src/include/rpcsvc
> 
> So if somebody who care about riscv and can build the world could
> confirm the fix, I will commit it.
> 
> diff --git a/contrib/ofed/include/udma_barrier.h b/contrib/ofed/include/udma_barrier.h
> index 71d264f8dce..6709d4433a7 100644
> --- a/contrib/ofed/include/udma_barrier.h
> +++ b/contrib/ofed/include/udma_barrier.h
> @@ -104,6 +104,10 @@
>  #include <sys/types.h>
>  #include <machine/atomic.h>
>  #define udma_to_device_barrier() dmb()
> +#elif defined(__riscv__)
> +#include <sys/types.h>
> +#include <machine/atomic.h>
> +#define	udma_to_device_barrier() fence()
>  #else
>  #error No architecture specific memory barrier defines found!
>  #endif

Thanks for looking into this.  Attached patch is slightly modified.
RISC-V is using __riscv and there are few more atomic macros need to be
defined.

However this seems not enough, there are some c++ errors which may take
longer to fix:

In file included from /usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/cma.h:43:0,
                 from /usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/acm.c:42:
/usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/cma.h: In function 'fastlock_init':
/usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/cma.h:60:2: error: invalid initializer
  atomic_store(&lock->cnt, 0);
  ^
In file included from /usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/acm.c:42:0:
/usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/cma.h: In function 'fastlock_acquire':
/usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/cma.h:68:2: error: operand type 'struct <anonymous> *' is incompatible with argument 1 of '__atomic_fetch_add'
  if (atomic_fetch_add(&lock->cnt, 1) > 0)
  ^~
/usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/cma.h: In function 'fastlock_release':
/usr/home/lwhsu/freebsd-src/contrib/ofed/librdmacm/cma.h:73:2: error: operand type 'struct <anonymous> *' is incompatible with argument 1 of '__atomic_fetch_sub'
  if (atomic_fetch_sub(&lock->cnt, 1) > 1)
  ^~
*** [acm.o] Error code 1

make[6]: stopped in /usr/home/lwhsu/freebsd-src/lib/ofed/librdmacm


BTW, stable/11 should be fine to cross-build riscv64, this job uses
11.2-RELEASE and riscv64-xtoolchain-gcc package, with
CROSS_TOOLCHAIN=riscv64-gcc defined.


Best,
Li-Wen

-- 
Li-Wen Hsu <lwhsu@FreeBSD.org>
https://lwhsu.org

--uAKRQypu60I7Lcqm
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="udma_barrier.h.diff"

Index: contrib/ofed/include/udma_barrier.h
===================================================================
--- contrib/ofed/include/udma_barrier.h	(revision 336593)
+++ contrib/ofed/include/udma_barrier.h	(working copy)
@@ -104,6 +104,10 @@
 #include <sys/types.h>
 #include <machine/atomic.h>
 #define udma_to_device_barrier() dmb()
+#elif defined(__riscv)
+#include <sys/types.h>
+#include <machine/atomic.h>
+#define udma_to_device_barrier() fence()
 #else
 #error No architecture specific memory barrier defines found!
 #endif
@@ -140,6 +144,8 @@
 #define udma_from_device_barrier() mips_sync()
 #elif defined(__arm__)
 #define udma_from_device_barrier() dmb()
+#elif defined(__riscv)
+#define udma_from_device_barrier() fence()
 #else
 #error No architecture specific memory barrier defines found!
 #endif
@@ -208,6 +214,8 @@
 #define mmio_flush_writes() mips_sync()
 #elif defined(__arm__)
 #define mmio_flush_writes() dmb()
+#elif defined(__riscv)
+#define mmio_flush_writes() fence()
 #else
 #error No architecture specific memory barrier defines found!
 #endif

--uAKRQypu60I7Lcqm--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180722010116.GA13419>