All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Fabiano Rosas <1860053@bugs.launchpad.net>
To: qemu-devel@nongnu.org
Subject: [Bug 1860053] Re: Possible lack of precision when calling clock_gettime via vDSO on user mode ppc64le
Date: Fri, 17 Jan 2020 21:51:12 -0000	[thread overview]
Message-ID: <157929787215.24304.12137288741573270391.malone@chaenomeles.canonical.com> (raw)
In-Reply-To: 157921754479.22473.5594149461755090250.malonedeb@gac.canonical.com

Since there is no vdso, the Go code goes into the syscall fallback:

MOVD	runtime·vdsoClockgettimeSym(SB), R12	// Check for VDSO availability
CMP	R12, R0
BEQ	fallback
(...)
fallback:
	ADD	$32, R1, R4
	SYSCALL $SYS_clock_gettime
	MOVD	32(R1), R3
	MOVD	48(R1), R5
	JMP	finish

But upon inspection, it seems the offset while loading R5 is not
correct:

in QEMU's clock_gettime implementation:	
(gdb) p/x *host_ts
$8 = {tv_sec = 0x9225f, tv_nsec = 0x375f74ee}

in the Go runtime:
(gdb) p/x *($r1 + 48)
$6 = 0x388c8
(gdb) p/x *($r1 + 40)
$7 = 0x375f74ee

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1860053

Title:
  Possible lack of precision when calling clock_gettime via vDSO on user
  mode ppc64le

Status in QEMU:
  New

Bug description:
  Occurs on QEMU v4.2.0 run on docker (via the qemu-user-static:v4.2.0-2
  image) on an AMD64 Ubuntu 18.04.3 LTS machine provided by travis-
  ci.org.

  From golang's https://github.com/golang/go/issues/36592:

  It was discovered that golang's time.NewTicker() and time.Sleep()
  malfunction when a compiled application was run via QEMU's ppc64le
  emulator in user mode.

  The methods did not malfunction on actual PowerPC hardware or when the
  same golang application was compiled for golang's arm, arm64 or 386
  targets and was run via user mode QEMU on the same system.

  Curiously, the methods also worked when the program was compiled under
  go 1.11, but do malfunction in go 1.12 and 1.13.

  It was identified the change in behaviour was most likely attributable to golang switching to using vSDO for calling clock_gettime() on PowerPC 64 architectures in 1.12. I.E:
  https://github.com/golang/go/commit/dbd8af74723d2c98cbdcc70f7e2801f69b57ac5b

  We therefore suspect there may be a bug in QEMU's user-mode emulation
  of ppc64le as relates to vDSO calls to clock_gettime().

  The nature of the malfunction of time.NewTicker() and time.Sleep() is
  such that sleeps or ticks with a granularity of less than one second
  do not appear to be possible (they all revert to 1 second
  sleeps/ticks). Could it be that the nanoseconds field of
  clock_gettime() is getting lost in the vDSO version but not in the
  syscall? Or some other issue calling these methods via vDSO?

  Thanks in advance.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1860053/+subscriptions


  parent reply	other threads:[~2020-01-17 22:08 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-16 23:32 [Bug 1860053] [NEW] Possible lack of precision when calling clock_gettime via vDSO on user mode ppc64le Patrick Meiring
2020-01-17  6:46 ` [Bug 1860053] " Philippe Mathieu-Daudé
2020-01-17 18:19 ` Richard Henderson
2020-01-17 21:51 ` Fabiano Rosas [this message]
2020-01-19 22:28 ` Patrick Meiring
2020-01-19 22:38 ` Patrick Meiring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=157929787215.24304.12137288741573270391.malone@chaenomeles.canonical.com \
    --to=1860053@bugs.launchpad.net \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.