Messages in this thread | | | From | Alistair Francis <> | Date | Fri, 24 Sep 2021 14:34:56 +1000 | Subject | Re: [PATCH v3 2/2] perf bench: Add support for 32-bit systems with 64-bit time_t |
| |
On Tue, Sep 21, 2021 at 6:08 PM Arnd Bergmann <arnd@arndb.de> wrote: > > On Tue, Sep 21, 2021 at 12:47 AM André Almeida > <andrealmeid@collabora.com> wrote: > > > > #if defined(__i386__) || __TIMESIZE == 32 > > # define NR_gettime64 __NR_clock_gettime64 > > #else > > # define NR_gettime64 __NR_clock_gettime > > #endif > > > > struct timespec64 { > > long long tv_sec; /* seconds */ > > long long tv_nsec; /* nanoseconds */ > > }; > > > > int gettime64(clock_t clockid, struct timespec64 *tv) > > { > > return syscall(NR_gettime64, clockid, tv); > > } > > > > Then we can just use &timeout at __NR_futex_time64 for 32bit arch and at > > __NR_futex for 64bit arch. > > This is still broken when you disable CONFIG_COMPAT_32BIT_TIME, > which disables all system calls that take time32 arguments. > > > This might be a simpler solution to the problem that you are facing but > > I'm not entirely sure. Also, futex's selftests do use the timeout > > argument and I think that they also won't compile in 32-bit RISC-V, so > > maybe we can start from there so we can actually test the timeout > > argument and check if it's working. > > I would love to see the wrapper that Alistair wrote as part of some kernel > uapi header provided to user space. futex is used by tons of applications, > and we never had a library abstraction for it, so everyone has to do these > by hand, and they all get them slightly wrong in different ways. > > We normally don't do this in kernel headers, but I think the benefits > would be far greater compared to today's situation.
I'm happy to prepare a patch, if others are on board with it being accepted.
Alistair
> > Arnd
| |