Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp6413882ybl; Wed, 15 Jan 2020 04:20:31 -0800 (PST) X-Google-Smtp-Source: APXvYqz6Upq1i4cCRvi3NSs3JoAE0BOzkRsgDPZDqmn2a2LYNa2fX5bb06xohOkp13q7VC7NirLw X-Received: by 2002:a9d:6745:: with SMTP id w5mr2584799otm.52.1579090831025; Wed, 15 Jan 2020 04:20:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579090831; cv=none; d=google.com; s=arc-20160816; b=JiBrW1NAgJGLmn/+CCmaNwT7/OXLA4veSR/OCObvvjaSAiL8gUOiCzAmJX277Zy07I 11L+tqPh23GNkSTcTwn3cqRU8EXy1O7pkKMs5fihZk3jW5AEJ8UButX4FNknKXPYdUye 8XZf3ZRehReWy9PS6ApTrzVXGVn2Z0LbePlWPQf+j5+GZtowUon+MQetzhhOeYOV0WQb i9KFlZ0yEbCBFpptUiKHBhW2O+iYzaBPSAtSTOL8Bt+fppjDgJQ+H+szXw8za+9sbzd9 lN3UAooZFb6P1k6bToaOen8dh0zOxo1RnxTSDWOe7Gr8llUAbCyIzQS3WSjGSzawr9m8 wVAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:cc:to:subject:from:message-id :dkim-signature; bh=KIOCAQ9Fe6n/GOOCwPq4VJ8I0eJP/U15j5u9PAAJKbw=; b=gFjHOb0kU+/1jFgAFR1EFviIH+pAwe2qU5qWS8ZR9Vp39v81RbwFlCwI2bFWiazfpi fejGFlU5SeN/3Z1WGcEz60ZSG2lECktjLBf/tztTFWuEnght8wC93ToaOmU7ghm1zrOI CExh5/8uMzsKZfZz+k5g+L+Jq8nL+HdlixCL5/HNi2mF/NTfpTdx3h5iZZoLLJ+e/65B 9BuctRd92FDh1dQ5h2P5K/RIQ9cJcu6ZqN4467J659pgzsoqt1KKI4z8nejqJVGGy7xV FfP3r9wqqRAP6yJcUfailviRHRqEtkzhI6sAKAq5PCXwFtq4y/ku16Jgb57saSyEGtHI swzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=h+HvZlR3; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d192si9345541oig.21.2020.01.15.04.20.18; Wed, 15 Jan 2020 04:20:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=h+HvZlR3; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731461AbgAOMTY (ORCPT + 99 others); Wed, 15 Jan 2020 07:19:24 -0500 Received: from pegase1.c-s.fr ([93.17.236.30]:30040 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731326AbgAOMTW (ORCPT ); Wed, 15 Jan 2020 07:19:22 -0500 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 47yRFz3h5Dz9tygB; Wed, 15 Jan 2020 13:19:19 +0100 (CET) Authentication-Results: localhost; dkim=pass reason="1024-bit key; insecure key" header.d=c-s.fr header.i=@c-s.fr header.b=h+HvZlR3; dkim-adsp=pass; dkim-atps=neutral X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id 25GzTzroursl; Wed, 15 Jan 2020 13:19:19 +0100 (CET) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 47yRFz2VhGz9tyg9; Wed, 15 Jan 2020 13:19:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1579090759; bh=KIOCAQ9Fe6n/GOOCwPq4VJ8I0eJP/U15j5u9PAAJKbw=; h=From:Subject:To:Cc:Date:From; b=h+HvZlR39pQWj8WY7PhUkqgnh36w4wxZPoR1IB4CB0HoI9A+01i+b7KezbVEt960O Nsaohe6ktSrSNyHLKRcqHNTJjfPIxwAFqKmhkIbitLMXZu3sVGlF++CuaUn2HrWTiK 0mvmtrPC8XcESgtNujtaLSS5b98guM9oWpQzoGnE= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 9A6B18B7FE; Wed, 15 Jan 2020 13:19:20 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id fG6a9xL6mZpN; Wed, 15 Jan 2020 13:19:20 +0100 (CET) Received: from po14934vm.idsi0.si.c-s.fr (po15451.idsi0.si.c-s.fr [172.25.230.100]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 775908B774; Wed, 15 Jan 2020 13:19:20 +0100 (CET) Received: by po14934vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 4738864A1F; Wed, 15 Jan 2020 12:19:20 +0000 (UTC) Message-Id: <0eddeeb64c97b8b5ce0abd74e88d2cc0303e49c6.1579090596.git.christophe.leroy@c-s.fr> From: Christophe Leroy Subject: [PATCH vdsotest] Use vdso wrapper for gettimeofday() To: Nathan Lynch Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, Thomas Gleixner Date: Wed, 15 Jan 2020 12:19:20 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To properly handle errors returned by gettimeofday(), the DO_VDSO_CALL() macro has to be used, otherwise vdsotest misinterpret VDSO function return on error. This has gone unnoticed until now because the powerpc VDSO gettimeofday() always succeed, but while porting powerpc to generic C VDSO, the following has been encountered: gettimeofday(valid, UINTPTR_MAX) (VDSO): unexpected return value 14, expected -1 gettimeofday(valid, UINTPTR_MAX) (VDSO): exited with status 1, expected 0 gettimeofday(valid, page (PROT_NONE)) (VDSO): unexpected return value 14, expected -1 gettimeofday(valid, page (PROT_NONE)) (VDSO): exited with status 1, expected 0 gettimeofday(valid, page (PROT_READ)) (VDSO): unexpected return value 14, expected -1 gettimeofday(valid, page (PROT_READ)) (VDSO): exited with status 1, expected 0 gettimeofday(UINTPTR_MAX, valid) (VDSO): unexpected return value 14, expected -1 gettimeofday(UINTPTR_MAX, valid) (VDSO): exited with status 1, expected 0 gettimeofday(UINTPTR_MAX, NULL) (VDSO): unexpected return value 14, expected -1 gettimeofday(UINTPTR_MAX, NULL) (VDSO): exited with status 1, expected 0 gettimeofday(UINTPTR_MAX, UINTPTR_MAX) (VDSO): unexpected return value 14, expected -1 gettimeofday(UINTPTR_MAX, UINTPTR_MAX) (VDSO): exited with status 1, expected 0 gettimeofday(UINTPTR_MAX, page (PROT_NONE)) (VDSO): unexpected return value 14, expected -1 gettimeofday(UINTPTR_MAX, page (PROT_NONE)) (VDSO): exited with status 1, expected 0 gettimeofday(UINTPTR_MAX, page (PROT_READ)) (VDSO): unexpected return value 14, expected -1 gettimeofday(UINTPTR_MAX, page (PROT_READ)) (VDSO): exited with status 1, expected 0 gettimeofday(page (PROT_NONE), valid) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_NONE), valid) (VDSO): exited with status 1, expected 0 gettimeofday(page (PROT_NONE), NULL) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_NONE), NULL) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday(page (PROT_NONE), UINTPTR_MAX) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_NONE), UINTPTR_MAX) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday(page (PROT_NONE), page (PROT_NONE)) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_NONE), page (PROT_NONE)) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday(page (PROT_NONE), page (PROT_READ)) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_NONE), page (PROT_READ)) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday(page (PROT_READ), valid) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_READ), valid) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday(page (PROT_READ), NULL) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_READ), NULL) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday(page (PROT_READ), UINTPTR_MAX) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_READ), UINTPTR_MAX) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday(page (PROT_READ), page (PROT_NONE)) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_READ), page (PROT_NONE)) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday(page (PROT_READ), page (PROT_READ)) (VDSO): unexpected return value 14, expected -1 gettimeofday(page (PROT_READ), page (PROT_READ)) (VDSO): exited with status 1, expected 0 Failure threshold (10) reached; stopping test. gettimeofday/abi: 18 failures/inconsistencies encountered Signed-off-by: Christophe Leroy --- src/gettimeofday.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gettimeofday.c b/src/gettimeofday.c index c50ecea..472f372 100644 --- a/src/gettimeofday.c +++ b/src/gettimeofday.c @@ -54,11 +54,16 @@ static void gettimeofday_syscall_nofail(struct timeval *tv, struct timezone *tz) error(EXIT_FAILURE, errno, "SYS_gettimeofday"); } +static int gettimeofday_vdso_wrapper(struct timeval *tv, struct timezone *tz) +{ + return DO_VDSO_CALL(gettimeofday_vdso, int, 2, tv, tz); +} + static void gettimeofday_vdso_nofail(struct timeval *tv, struct timezone *tz) { int err; - err = gettimeofday_vdso(tv, tz); + err = gettimeofday_vdso_wrapper(tv, tz); if (err) error(EXIT_FAILURE, errno, "gettimeofday"); } @@ -153,7 +158,7 @@ static void gettimeofday_bench(struct ctx *ctx, struct bench_results *res) struct timeval tv; if (vdso_has_gettimeofday()) { - BENCH(ctx, gettimeofday_vdso(&tv, NULL), + BENCH(ctx, gettimeofday_vdso_wrapper(&tv, NULL), &res->vdso_interval); } @@ -196,7 +201,7 @@ static void do_gettimeofday(void *arg, struct syscall_result *res) if (args->force_syscall) err = gettimeofday_syscall_wrapper(args->tv, args->tz); else - err = gettimeofday_vdso(args->tv, args->tz); + err = gettimeofday_vdso_wrapper(args->tv, args->tz); record_syscall_result(res, err, errno); } -- 2.13.3