Hi. I thought that adding +generic-y += rwonce.h to arch/um/include/asm/Kbuild would fix a build problem: CC [M] fs/hostfs/hostfs_user.o In file included from ../include/asm-generic/div64.h:27, from ../fs/hostfs/hostfs_user.c:21: include/linux/compiler.h:248:10: fatal error: asm/rwonce.h: No such file or directory 248 | #include <asm/rwonce.h> | ^~~~~~~~~~~~~~ but it doesn't seem to be helping. Do I need to use mandatory-y instead? Or is arch/um/ with ARCH=um and SUBARCH=i386 just "different"? The build error is: ERROR: modpost: "__divdi3" [fs/hostfs/hostfs.ko] undefined! and my current patch attempt is below Thanks. --- From: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> <asm-generic/div64.h> wants rwonce.h, so add rwonce.h to the arch/um/include/asm/Kbuild generic-y list of header files. ERROR: modpost: "__divdi3" [fs/hostfs/hostfs.ko] undefined! Signed-off-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> --- arch/um/include/asm/Kbuild | 1 + fs/hostfs/hostfs_user.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) --- linux-next-20210511.orig/fs/hostfs/hostfs_user.c +++ linux-next-20210511/fs/hostfs/hostfs_user.c @@ -17,6 +17,7 @@ #include <sys/syscall.h> #include "hostfs.h" #include <utime.h> +#include <asm-generic/div64.h> static void stat64_to_hostfs(const struct stat64 *buf, struct hostfs_stat *p) { @@ -242,17 +243,21 @@ int set_attr(const char *file, struct ho return err; times[0].tv_sec = st.atime.tv_sec; - times[0].tv_usec = st.atime.tv_nsec / 1000; + times[0].tv_usec = st.atime.tv_nsec; + do_div(times[0].tv_usec, 1000); times[1].tv_sec = st.mtime.tv_sec; - times[1].tv_usec = st.mtime.tv_nsec / 1000; + times[1].tv_usec = st.mtime.tv_nsec; + do_div(times[1].tv_usec, 1000); if (attrs->ia_valid & HOSTFS_ATTR_ATIME_SET) { times[0].tv_sec = attrs->ia_atime.tv_sec; - times[0].tv_usec = attrs->ia_atime.tv_nsec / 1000; + times[0].tv_usec = attrs->ia_atime.tv_nsec; + do_div(times[0].tv_usec, 1000); } if (attrs->ia_valid & HOSTFS_ATTR_MTIME_SET) { times[1].tv_sec = attrs->ia_mtime.tv_sec; - times[1].tv_usec = attrs->ia_mtime.tv_nsec / 1000; + times[1].tv_usec = attrs->ia_mtime.tv_nsec; + do_div(times[1].tv_usec, 1000); } if (fd >= 0) { --- linux-next-20210511.orig/arch/um/include/asm/Kbuild +++ linux-next-20210511/arch/um/include/asm/Kbuild @@ -20,6 +20,7 @@ generic-y += param.h generic-y += pci.h generic-y += percpu.h generic-y += preempt.h +generic-y += rwonce.h generic-y += softirq_stack.h generic-y += switch_to.h generic-y += topology.h