From patchwork Sat Jun 22 04:37:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 33262 Received: (qmail 88535 invoked by alias); 22 Jun 2019 04:39:57 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 88490 invoked by uid 89); 22 Jun 2019 04:39:56 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy=interrupted X-HELO: esa2.hgst.iphmx.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1561178450; x=1592714450; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3LaS0zHUBwxSIkPsg15cyI/pnVjvKLu2KWvRiHEZ9dM=; b=jBl0iP+UfHgce8JQIVZICqJNiCKszcbZQRUG828nx+xD+fSeTxfOVC3z qc5NqV9U3iPqGLnY62ox34x7Lk7wra8TtPnTQ3+MFGokMszJ8LtPABj2E cpR3gdyVVbtoBKfsql/SHaXCuSqGn+jtjBcg29I4ySf+zt10rrIx4/VOF ocDXqszXxeHZA7NIO3IP5SooniRH9oGsnQmfE84VY6w3eQn5ETffCmMKC bWD4nNHGc4v4TxajQZdR9XyhINd/67xTSdfYWc20dRlDM4c05DWDClNRh 9Jow0i3AJyAEaLrxJchWBNFN61EtLGq+8XZn6WLP+kJeIMO7SF5fMMu47 w==; IronPort-SDR: 1tS2bbF51aXJgVTjkbPpMArowVIGfVJhkttNGNd9YrfHePq/jdwloGhXIkwhiZM8Y1r17MTGdY iLp8HOg0/ct1Cxqb1wMvKu/WqbDOn/a+J3wWqLM03rcriazFpatdyDtekIngsRbKPNwSUE85UN VMznFVYeu6tJbVAgbF1Wm3rHN87VH+W69h7N0pZueTubzF9BSjJ2+eodtWTr24KaSb2nB9lw3n VLmz7g/RHyf7Gakjk3Yh03c/DjFHzLpmwDDTSMxHhCuoVmu0Q/XExb7IohNwKVxl7xhC+yjB66 A7VZ7QZtozhVZNfZUR+Q9fpj IronPort-SDR: OCkxCpkRg9iJ9D9ervZOX60Q/FGYZw7EDV4hBaDrLuyX8yfFPiEmRTZpzQNkhlid3kW84pvmUo E1HUoSCTO786QP0LC4H6zoj9kDMJddeXaDQlbFTFZ3MSefB8D3VAcUbK351iGHqxYELvFKH8fj 82g9FacX7M6jhBA2/m2q26xa/U2pI/C0fEkH1uZLZdU/+wtkkTu0b0fT/YnypEapjpshHuX+Dj aN70936GQPde5nikKwxYpxqL7Im/ulUf41BRg2C1fnHGvji4UQ9fOJeTbkm2aiT6uOiobdEC1v eCQ= From: Alistair Francis To: libc-alpha@sourceware.org Cc: alistair.francis@wdc.com, alistair23@gmail.com Subject: [RFC v1 01/16] sysdeps/nanosleep: Use clock_nanosleep_time64 instead of nanosleep Date: Fri, 21 Jun 2019 21:37:15 -0700 Message-Id: In-Reply-To: References: MIME-Version: 1.0 The nanosleep syscall is not supported on newer 32-bit platforms (such as RV32). To fix this issue let's change to using clock_nanosleep_time64 instead. Let's use CLOCK_REALTIME when calling clock_nanosleep_time64 as the Linux specification says: "POSIX.1 specifies that nanosleep() should measure time against the CLOCK_REALTIME clock. However, Linux measures the time using the CLOCK_MONOTONIC clock. This probably does not matter, since the POSIX.1 specification for clock_settime(2) says that discontinuous changes in CLOCK_REALTIME should not affect nanosleep()" Signed-off-by: Alistair Francis --- ChangeLog | 6 ++++++ nptl/thrd_sleep.c | 3 ++- sysdeps/unix/sysv/linux/nanosleep.c | 3 ++- sysdeps/unix/sysv/linux/nanosleep_nocancel.c | 3 ++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 05291d7825..b90c5ab60c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2019-06-21 Alistair Francis + + * nptl/thrd_sleep.c: Use clock_nanosleep_time64 instead of nanosleep. + * sysdeps/unix/sysv/linux/nanosleep.c: Likewise. + * sysdeps/unix/sysv/linux/nanosleep_nocancel.c: Likewise. + 2019-06-20 Dmitry V. Levin Florian Weimer diff --git a/nptl/thrd_sleep.c b/nptl/thrd_sleep.c index 07a51808df..82a3b84366 100644 --- a/nptl/thrd_sleep.c +++ b/nptl/thrd_sleep.c @@ -25,7 +25,8 @@ int thrd_sleep (const struct timespec* time_point, struct timespec* remaining) { INTERNAL_SYSCALL_DECL (err); - int ret = INTERNAL_SYSCALL_CANCEL (nanosleep, err, time_point, remaining); + int ret = INTERNAL_SYSCALL_CANCEL (clock_nanosleep_time64, err, + CLOCK_REALTIME, 0, time_point, remaining); if (INTERNAL_SYSCALL_ERROR_P (ret, err)) { /* C11 states thrd_sleep function returns -1 if it has been interrupted diff --git a/sysdeps/unix/sysv/linux/nanosleep.c b/sysdeps/unix/sysv/linux/nanosleep.c index f14ae565af..bb40121fb6 100644 --- a/sysdeps/unix/sysv/linux/nanosleep.c +++ b/sysdeps/unix/sysv/linux/nanosleep.c @@ -25,7 +25,8 @@ int __nanosleep (const struct timespec *requested_time, struct timespec *remaining) { - return SYSCALL_CANCEL (nanosleep, requested_time, remaining); + return SYSCALL_CANCEL (clock_nanosleep_time64, CLOCK_REALTIME, 0, + requested_time, remaining); } hidden_def (__nanosleep) weak_alias (__nanosleep, nanosleep) diff --git a/sysdeps/unix/sysv/linux/nanosleep_nocancel.c b/sysdeps/unix/sysv/linux/nanosleep_nocancel.c index 122ba627ff..8cc56f42d0 100644 --- a/sysdeps/unix/sysv/linux/nanosleep_nocancel.c +++ b/sysdeps/unix/sysv/linux/nanosleep_nocancel.c @@ -24,6 +24,7 @@ int __nanosleep_nocancel (const struct timespec *requested_time, struct timespec *remaining) { - return INLINE_SYSCALL_CALL (nanosleep, requested_time, remaining); + return INLINE_SYSCALL_CALL (clock_nanosleep_time64, CLOCK_REALTIME, 0, + requested_time, remaining); } hidden_def (__nanosleep_nocancel)