Messages in this thread | | | Subject | Re: MIPS: bug: gettimeofday syscall broken on CI20 board | From | "H. Nikolaus Schaller" <> | Date | Thu, 28 Nov 2019 17:47:38 +0100 |
| |
Hi Vincenzo,
> Am 28.11.2019 um 16:46 schrieb Vincenzo Frascino <vincenzo.frascino@arm.com>: > > > On 28/11/2019 15:41, H. Nikolaus Schaller wrote: >> >>> Am 28.11.2019 um 16:07 schrieb Thomas Bogendoerfer <tsbogend@alpha.franken.de>: >>> >>> On Thu, Nov 28, 2019 at 02:48:46PM +0100, H. Nikolaus Schaller wrote: >>>> >>>> What still does not fit into the picture is the errno = 1 i.e. EPERM. >>>> Maybe I have to study the libc code that tries to read the ELF symbols >>>> you have mentioned. It may fail for unknown reasons. >>> >>> to understand vdso you might look at arch/mips/vdso and lib/vdso >>> kernel sources. >> >> Yes that is what I know, but I do not know how glibc can return an EPERM >> through VDSO. >> >>> >>> And if I understand it correctly you neither have a working high resolution >>> timer usable bei do_hres() in lib/vdso/gettimeofday.c or a working >>> gettimeofday_fallback(), which is enabled via CONFIG_MIPS_CLOCK_VSYSCALL >>> and needs either CSRC_R4K or CLKSRC_MIPS_GIC. >> >> Well, on kernel v4.19 or using v5.4 with Jessie, gettimeofday() works. >> >> So this may only be part of the reason it starts to fail with commit >> 24640f233b466051ad3a5d2786d2951e43026c9d. >> >> MIPS_CLOCK_VSYSCALL is neither defined nor undefined in the defconfig. >> And removed if I manually add it to my defconfig. >> And yes, it depends on either CSRC_R4K || CLKSRC_MIPS_GIC by arch/mips/Kconfig. >> >> Maybe this was just forgotten to properly handle for the ci20_defconfig >> or jz4780? >> >> What does CSRC_R4K resp. CLKSRC_MIPS_GIC ecactly mean? Does the jz4780 have this >> feature? >> > > I think I know what is going on, it is the way on which libc does the fallback. > Could you please try the patch below the scissors and let me know if it works?
Well, it does not immediately compile because CONFIG_MIPS_CLOCK_VSYSCALL is not set and can not be configured by normal means:
Error:
/Volumes/CaseSensitive/master/lib/vdso/gettimeofday.c: In function '__cvdso_gettimeofday': /Volumes/CaseSensitive/master/lib/vdso/gettimeofday.c:152:4: error: implicit declaration of function 'gettimeofday_fallback' [-Werror=implicit-function-declaration] return gettimeofday_fallback(tv, tz); ^
So I force-#defined CONFIG_MIPS_CLOCK_VSYSCALL in arch/mips/include/asm/vdso/gettimeofday.h which is also included by lib/vdso/gettimeofday.c
Yes, it works now! Great!!!
root@letux:~# ./gettime r = 0 errno=0 tv.sec = 1574959485 tv.usec = 671306 rt = 1574959485 errno=0 t = 1574959485 root@letux:~# cat /etc/debian_version 9.11 root@letux:~# uname -a Linux letux 5.4.0-letux-l400+ #1490 PREEMPT Thu Nov 28 17:23:32 CET 2019 mips GNU/Linux root@letux:~# dhclient root@letux:~#
> If it does I will create a proper one.
It needs some mechanism to set CONFIG_MIPS_CLOCK_VSYSCALL.
I'll test if you have something new.
BR and thanks, Nikolaus
| |