From patchwork Wed Oct 12 14:48:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1689168 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=ZNle5rxu; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MnbBX0rXgz23k1 for ; Thu, 13 Oct 2022 01:48:52 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 9697E3CAEC4 for ; Wed, 12 Oct 2022 16:48:48 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-4.smtp.seeweb.it (in-4.smtp.seeweb.it [217.194.8.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id 6F1C73CAEC8 for ; Wed, 12 Oct 2022 16:48:37 +0200 (CEST) Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-4.smtp.seeweb.it (Postfix) with ESMTPS id 055E610008F5 for ; Wed, 12 Oct 2022 16:48:35 +0200 (CEST) Received: by mail-pj1-x1049.google.com with SMTP id px13-20020a17090b270d00b0020aa188aae8so8222080pjb.8 for ; Wed, 12 Oct 2022 07:48:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=tzR3/MPbuaHS/jWjsLhqPvmrysUakqpmSpACNMcAHT8=; b=ZNle5rxufmo2KfKZBAJvK3mhFB+rbtqhZeiJaGR38cHWFpHdiNCg7/BRgCLTFqeXyz W59SQje1OGVd1MzS98sRAPup7pZ9V0uMtPRC3E6mGL5xVVvlSYMx0job9prQeoQQJvZR qAsfTA+TkgVB2BtuT8P0NsCXuhbGHb1VCOaiV9Bv3DCh2EgLYiHQ2R+FeFMieTgnSQGk M1NIk+exbib1uQEt4IT46xfMTecMGxtGgg6mnZ7jewmaSK7/B3kfKu8EWtquaKDSL6BD 8t7mvpscZOjeMTLs8oesE/PeLmY7Ig8ynJkK3LgbLSwfio4fbcokveqCk6+j0WrH+FdJ v1mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tzR3/MPbuaHS/jWjsLhqPvmrysUakqpmSpACNMcAHT8=; b=tgIEiAM0+3W4Lbs11MBmkurTfw2QlYM4U9BnCJz7Pc3tFyB3CsE0sd13twAO75wRDp PLqU8CdNez7h53qdqoRLZf+fvTB8t9EflYTUq5RzY//zBt+ZJckEXxT8v5JgTVf3vm8t 9upJtfcsKOQh1GC6WulVu4oHfmjR5Q/vK/DGAdxi4VE1KPjs7VoHMHK5ZeLERMLXU458 5VPnqOhlbBrVQEmyPOwhMb9Rkk6yqfyBrAvsqTXkwhPRD5P2LHggNTSp2aAj4PcOm5VC Ybqmu2ca0Cghx/P6QkDLr0GsQhn4v2bkPqKTCR622fF/uBkkDHsQzk6VAVO0Eib7zVte yi5Q== X-Gm-Message-State: ACrzQf3mzMXRffeiNrVK5r1CxND0mT44Xi0lZworO6SnH8zFyFzWVwKl Kgd6PH72dQEOmHUjdgyYqPY7yQ1X1Tq/638yRCikvHvDUKOplYXXYyLCrXw2V6zIKCESF8/RRTb e6i3QoAgitAR50iEIigZvZvFt9Zhejydrvx6uayTstYlZ4Q0kyDk6HE3V X-Google-Smtp-Source: AMsMyM64r8/QfEIONR0aVMrDF5Lfv21r7QJBcPn3rGDlEUkeeauG+Zb0Kq3QaAPW0fbyXzz8Ki62TcO9bH4= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a05:6a00:1bc3:b0:562:ab5f:af2 with SMTP id o3-20020a056a001bc300b00562ab5f0af2mr31284317pfw.58.1665586114291; Wed, 12 Oct 2022 07:48:34 -0700 (PDT) Date: Wed, 12 Oct 2022 14:48:19 +0000 In-Reply-To: <20221012144823.1595671-1-edliaw@google.com> Mime-Version: 1.0 References: <20221012144823.1595671-1-edliaw@google.com> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog Message-ID: <20221012144823.1595671-2-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-4.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-4.smtp.seeweb.it Subject: [LTP] [PATCH v5 1/5] mmapstress01: refactor to tst_test framework X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Use ltp framework and apply make check corrections. Reorder functions and variables. Use safe macros. Drop leavefile option. Build tests with FILE_OFFSET_BITS=64 instead of doing LARGE_FILE checks to switch between 32 and 64 bit types and syscalls. Set default nprocs to 20. Signed-off-by: Edward Liaw --- testcases/kernel/mem/mmapstress/Makefile | 2 + .../kernel/mem/mmapstress/mmapstress01.c | 864 ++++++------------ 2 files changed, 276 insertions(+), 590 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/Makefile b/testcases/kernel/mem/mmapstress/Makefile index 744f099d8..b30bd34b8 100644 --- a/testcases/kernel/mem/mmapstress/Makefile +++ b/testcases/kernel/mem/mmapstress/Makefile @@ -5,3 +5,5 @@ top_srcdir ?= ../../../.. include $(top_srcdir)/include/mk/testcases.mk include $(top_srcdir)/include/mk/generic_leaf_target.mk + +mmapstress01: CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index f425c223d..83d3f387d 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -1,51 +1,10 @@ -/* IBM Corporation */ -/* 01/02/2003 Port to LTP avenkat@us.ibm.com */ -/* 06/30/2001 Port to Linux nsharoff@us.ibm.com */ +// SPDX-License-Identifier: GPL-2.0-or-later /* - * Copyright (c) International Business Machines Corp., 2003 - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - * the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * Copyright (c) International Business Machines Corp., 2003 + * 01/02/2003 Port to LTP avenkat@us.ibm.com + * 06/30/2001 Port to Linux nsharoff@us.ibm.com + * 10/03/2022 Refactor to LTP framework edliaw@google.com */ - -#define _GNU_SOURCE 1 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -/***** LTP Port *****/ -#include "test.h" -#define FAILED 0 -#define PASSED 1 - -int local_flag = PASSED; -char *TCID = "mmapstress01"; //tmnoextend -FILE *temp; -int TST_TOTAL = 1; - -int anyfail(); -void ok_exit(); -/***** ** ** *****/ - /* * This test stresses mmaps, without dealing with fragments or anything! * It forks a specified number of children, @@ -59,392 +18,100 @@ void ok_exit(); * or times out (if a timeout value is specified). When either of * these things happens, it cleans up its kids, then checks the * file to make sure it has the correct data. - * - * usage: - * tmnoextend -p nprocs [-t minutes -f filesize -S sparseoffset - * -r -o -m -l -d] - * where: - * -p nprocs - specifies the number of mapping children - * to create. (nprocs + 1 children actually - * get created, since one is the writer child) - * -t minutes - specifies minutes to run. If not specified, - * default is to run forever until a SIGINT - * is received. - * -f filesize - initial filesize (defaults to FILESIZE) - * -S sparseoffset - when non-zero, causes a sparse area to - * be left before the data, meaning that the - * actual initial file size is sparseoffset + - * filesize. Useful for testing large files. - * (default is 0). - * -r - randomize number of pages map children check. - * (random % MAXLOOPS). If not specified, each - * child checks MAXLOOPS pages. - * -o - randomize offset of file to map. (default is 0) - * -m - do random msync/fsyncs as well - * -l - if set, the output file is not removed on - * program exit. - * -d - enable debug output - * - * Compile with -DLARGE_FILE to enable file sizes > 2 GB. */ +#define _GNU_SOURCE 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "tst_test.h" + #define MAXLOOPS 500 /* max pages for map children to write */ -#define FILESIZE 4096 /* initial filesize set up by parent */ +#define TEST_FILE "mmapstress01.out" #ifdef roundup #undef roundup #endif #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) -extern time_t time(time_t *); -extern char *ctime(const time_t *); -extern void *malloc(size_t); -extern long lrand48(void); -extern void srand(unsigned); -extern void srand48(long); -extern int rand(void); -extern int atoi(const char *); - -char *usage = - "-p nprocs [-t minutes -f filesize -S sparseoffset -r -o -m -l -d]"; - -typedef unsigned char uchar_t; -#define SIZE_MAX UINT_MAX - -unsigned int initrand(void); -void finish(int sig); -void child_mapper(char *file, unsigned procno, unsigned nprocs); -int fileokay(char *file, uchar_t * expbuf); -int finished = 0; -int leavefile = 0; - -int debug = 0; -#ifdef LARGE_FILE -off64_t filesize = FILESIZE; -off64_t sparseoffset = 0; -#else /* LARGE_FILE */ -off_t filesize = FILESIZE; -off_t sparseoffset = 0; -#endif /* LARGE_FILE */ -unsigned randloops = 0; -unsigned dosync = 0; -unsigned do_offset = 0; -unsigned pattern = 0; - -int main(int argc, char *argv[]) +static unsigned int initrand(void); + +static char *debug; +static char *do_sync; +static char *do_offset; +static char *opt_filesize; +static char *opt_nprocs; +static char *opt_sparseoffset; +static char *randloops; + +static int fd; +static int finished; +static int nprocs = 20; +static long long filesize = 4096; +static long long sparseoffset; +static size_t pagesize; +static unsigned int pattern; + +static struct tst_option options[] = { + {"d", &debug, "Enable debug output"}, + {"f:", &opt_filesize, "Initial filesize (default 4096)"}, + {"m", &do_sync, "Do random msync/fsyncs as well"}, + {"o", &do_offset, "Randomize the offset of file to map"}, + {"p:", &opt_nprocs, + "Number of mapping children to create (default 20)"}, + {"r", &randloops, + "Randomize number of pages map children check (random % 500), " + "otherwise each child checks 500 pages"}, + {"S:", &opt_sparseoffset, + "When non-zero, causes the sparse area to be left before the data, " + "so that the actual initial filesize is sparseoffset + filesize " + "(default 0)"}, + {}, +}; + +static void setup(void) { - char *progname; - int fd; - int c; - extern char *optarg; - unsigned nprocs = 0; - unsigned procno; - pid_t *pidarray = NULL; - pid_t pid; - uchar_t *buf = NULL; - unsigned int seed; int pagesize = sysconf(_SC_PAGE_SIZE); - float alarmtime = 0; - struct sigaction sa; - unsigned i; - int write_cnt; - uchar_t data; - int no_prob = 0; - int wait_stat; - time_t t; -#ifdef LARGE_FILE - off64_t bytes_left; -#else /* LARGE_FILE */ - off_t bytes_left; -#endif /* LARGE_FILE */ - const char *filename = "mmapstress01.out"; - - progname = *argv; - tst_tmpdir(); - if (argc < 2) { - tst_brkm(TBROK, NULL, "usage: %s %s", progname, usage); - } - while ((c = getopt(argc, argv, "S:omdlrf:p:t:")) != -1) { - switch (c) { - case 'd': - debug = 1; - break; - case 't': - alarmtime = atof(optarg) * 60; - break; - case 'p': - nprocs = atoi(optarg); - break; - case 'l': - leavefile = 1; - break; - case 'f': -#ifdef LARGE_FILE - filesize = atoll(optarg); -#else /* LARGE_FILE */ - filesize = atoi(optarg); -#endif /* LARGE_FILE */ - if (filesize < 0) { - (void)fprintf(stderr, "error: negative " - "filesize\n"); - anyfail(); - } - break; - case 'r': - randloops = 1; - break; - case 'm': - dosync = 1; - break; - case 'o': - do_offset = 1; - break; - case 'S': -#ifdef LARGE_FILE - sparseoffset = atoll(optarg); -#else /* LARGE_FILE */ - sparseoffset = atoi(optarg); -#endif /* LARGE_FILE */ - if (sparseoffset % pagesize != 0) { - fprintf(stderr, - "sparseoffset must be pagesize multiple\n"); - anyfail(); - } - break; - default: - (void)fprintf(stderr, "usage: %s %s\n", progname, - usage); - tst_exit(); - } - } - - /* nprocs is >= 0 since it's unsigned */ - if (nprocs > 255) { - (void)fprintf(stderr, "invalid nprocs %d - (range 0-255)\n", - nprocs); - anyfail(); - } +#if _FILE_OFFSET_BITS == 64 + if (tst_parse_filesize(opt_filesize, &filesize, 0, LONG_MAX)) +#else + if (tst_parse_filesize(opt_filesize, &filesize, 0, INT_MAX)) +#endif + tst_brk(TBROK, "invalid initial filesize '%s'", opt_filesize); - (void)time(&t); +#if _FILE_OFFSET_BITS == 64 + if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, LONG_MIN, LONG_MAX)) +#else + if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, INT_MIN, INT_MAX)) +#endif + tst_brk(TBROK, "invalid sparse offset '%s'", opt_sparseoffset); + if (sparseoffset % pagesize != 0) + tst_brk(TBROK, "sparseoffset must be pagesize multiple"); - seed = initrand(); - pattern = seed & 0xff; + if (tst_parse_int(opt_nprocs, &nprocs, 0, 255)) + tst_brk(TBROK, "invalid number of mapping children '%s'", + opt_nprocs); if (debug) { -#ifdef LARGE_FILE - (void)printf("creating file <%s> with %Ld bytes, pattern %d\n", - filename, filesize, pattern); -#else /* LARGE_FILE */ - (void)printf("creating file <%s> with %ld bytes, pattern %d\n", - filename, filesize, pattern); -#endif /* LARGE_FILE */ - if (alarmtime) - (void)printf("running for %f minutes\n", - alarmtime / 60); - else - (void)printf("running with no time limit\n"); - } - - /* - * Plan for death by signal. User may have specified - * a time limit, in which set an alarm and catch SIGALRM. - * Also catch and cleanup with SIGINT. - */ - sa.sa_handler = finish; - sa.sa_flags = 0; - if (sigemptyset(&sa.sa_mask)) { - perror("sigemptyset error"); - goto cleanup; - } - - if (sigaction(SIGINT, &sa, 0) == -1) { - perror("sigaction error SIGINT"); - goto cleanup; - } - if (sigaction(SIGQUIT, &sa, 0) == -1) { - perror("sigaction error SIGQUIT"); - goto cleanup; - } - if (sigaction(SIGTERM, &sa, 0) == -1) { - perror("sigaction error SIGTERM"); - goto cleanup; - } - - if (alarmtime) { - if (sigaction(SIGALRM, &sa, 0) == -1) { - perror("sigaction error"); - goto cleanup; - } - (void)alarm(alarmtime); - } -#ifdef LARGE_FILE - if ((fd = open64(filename, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { -#else /* LARGE_FILE */ - if ((fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, 0664)) == -1) { -#endif /* LARGE_FILE */ - perror("open error"); - anyfail(); - } - - if ((buf = malloc(pagesize)) == NULL - || (pidarray = malloc(nprocs * sizeof(pid_t))) == NULL) { - perror("malloc error"); - anyfail(); - } - - for (i = 0; i < nprocs; i++) - *(pidarray + i) = 0; - - for (i = 0, data = 0; i < pagesize; i++) { - *(buf + i) = (data + pattern) & 0xff; - if (++data == nprocs) - data = 0; - } -#ifdef LARGE_FILE - if (lseek64(fd, sparseoffset, SEEK_SET) < 0) { -#else /* LARGE_FILE */ - if (lseek(fd, sparseoffset, SEEK_SET) < 0) { -#endif /* LARGE_FILE */ - perror("lseek"); - anyfail(); - } - for (bytes_left = filesize; bytes_left; bytes_left -= c) { - write_cnt = MIN(pagesize, (int)bytes_left); - if ((c = write(fd, buf, write_cnt)) != write_cnt) { - if (c == -1) { - perror("write error"); - } else { - (void)fprintf(stderr, "write: wrote %d of %d " - "bytes\n", c, write_cnt); - } - (void)close(fd); - (void)unlink(filename); - anyfail(); - } + tst_res(TINFO, "creating file <%s> with %lld bytes, pattern %d", + TEST_FILE, filesize, pattern); } +} - (void)close(fd); - - /* - * Fork off mmap children. - */ - for (procno = 0; procno < nprocs; procno++) { - switch (pid = fork()) { - - case -1: - perror("fork error"); - goto cleanup; - - case 0: - child_mapper(filename, procno, nprocs); - exit(0); - - default: - pidarray[procno] = pid; - } - } - - /* - * Now wait for children and refork them as needed. - */ - - while (!finished) { - pid = wait(&wait_stat); - /* - * Block signals while processing child exit. - */ - - if (sighold(SIGALRM) || sighold(SIGINT)) { - perror("sighold error"); - goto cleanup; - } - - if (pid != -1) { - /* - * Check exit status, then refork with the - * appropriate procno. - */ - if (!WIFEXITED(wait_stat) - || WEXITSTATUS(wait_stat) != 0) { - (void)fprintf(stderr, "child exit with err " - "\n", wait_stat); - goto cleanup; - } - for (i = 0; i < nprocs; i++) - if (pid == pidarray[i]) - break; - if (i == nprocs) { - (void)fprintf(stderr, "unknown child pid %d, " - "\n", pid, wait_stat); - goto cleanup; - } - - if ((pid = fork()) == -1) { - perror("fork error"); - pidarray[i] = 0; - goto cleanup; - } else if (pid == 0) { /* child */ - child_mapper(filename, i, nprocs); - exit(0); - } else - pidarray[i] = pid; - } else { - /* - * wait returned an error. If EINTR, then - * normal finish, else it's an unexpected - * error... - */ - if (errno != EINTR || !finished) { - perror("unexpected wait error"); - goto cleanup; - } - } - if (sigrelse(SIGALRM) || sigrelse(SIGINT)) { - perror("sigrelse error"); - goto cleanup; - } - } - - /* - * Finished! Check the file for sanity, then kill all - * the children and done!. - */ - - if (sighold(SIGALRM)) { - perror("sighold error"); - goto cleanup; - } - (void)alarm(0); - no_prob = 1; - -cleanup: - for (i = 0; i < nprocs; i++) - (void)kill(pidarray[i], SIGKILL); - - while (wait(&wait_stat) != -1 || errno != ECHILD) - continue; - - if (no_prob) { /* only check file if no errors */ - if (!fileokay(filename, buf)) { - (void)fprintf(stderr, "file data incorrect!\n"); - (void)printf(" leaving file <%s>\n", filename); - /***** LTP Port *****/ - local_flag = FAILED; - anyfail(); - /***** ** *****/ - } else { - (void)printf("file data okay\n"); - if (!leavefile) - (void)unlink(filename); - } - } else - (void)printf(" leaving file <%s>\n", filename); - - (void)time(&t); - //(void)printf("%s: Finished %s", argv[0], ctime(&t)); LTP Port - ok_exit(); - tst_exit(); +static void cleanup(void) +{ + if (fd > 0) + SAFE_CLOSE(fd); } /* @@ -454,91 +121,51 @@ cleanup: * determined based on nprocs & procno). After a specific number of * iterations, it exits. */ -void child_mapper(char *file, unsigned procno, unsigned nprocs) +static void child_mapper(char *file, unsigned int procno, unsigned int nprocs) { -#ifdef LARGE_FILE - struct stat64 statbuf; - off64_t filesize; - off64_t offset; -#else /* LARGE_FILE */ struct stat statbuf; off_t filesize; off_t offset; -#endif /* LARGE_FILE */ size_t validsize; size_t mapsize; char *maddr = NULL, *paddr; - int fd; - size_t pagesize = sysconf(_SC_PAGE_SIZE); - unsigned randpage; + unsigned int randpage; unsigned int seed; - unsigned loopcnt; - unsigned nloops; - unsigned mappages; - unsigned i; + unsigned int loopcnt; + unsigned int nloops; + unsigned int mappages; + unsigned int i; seed = initrand(); /* initialize random seed */ -#ifdef LARGE_FILE - if (stat64(file, &statbuf) == -1) { -#else /* LARGE_FILE */ - if (stat(file, &statbuf) == -1) { -#endif /* LARGE_FILE */ - perror("stat error"); - anyfail(); - } + SAFE_STAT(file, &statbuf); filesize = statbuf.st_size; -#ifdef LARGE_FILE - if ((fd = open64(file, O_RDWR)) == -1) { -#else /* LARGE_FILE */ - if ((fd = open(file, O_RDWR)) == -1) { -#endif /* LARGE_FILE */ - perror("open error"); - anyfail(); - } + fd = SAFE_OPEN(file, O_RDWR); - if (statbuf.st_size - sparseoffset > SIZE_MAX) { - fprintf(stderr, "size_t overflow when setting up map\n"); - anyfail(); - } + if (statbuf.st_size - sparseoffset > UINT_MAX) + tst_brk(TBROK, "size_t overflow when setting up map"); mapsize = (size_t) (statbuf.st_size - sparseoffset); mappages = roundup(mapsize, pagesize) / pagesize; offset = sparseoffset; if (do_offset) { int pageoffset = lrand48() % mappages; int byteoffset = pageoffset * pagesize; + offset += byteoffset; mapsize -= byteoffset; mappages -= pageoffset; } nloops = (randloops) ? (lrand48() % MAXLOOPS) : MAXLOOPS; - if (debug) { -#ifdef LARGE_FILE - (void)printf("child %d (pid %ld): seed %d, fsize %Ld, " - "mapsize %d, off %Ld, loop %d\n", - procno, getpid(), seed, filesize, mapsize, - offset / pagesize, nloops); -#else /* LARGE_FILE */ - (void)printf("child %d (pid %d): seed %d, fsize %ld, " - "mapsize %ld, off %ld, loop %d\n", - procno, getpid(), seed, filesize, (long)mapsize, - offset / pagesize, nloops); -#endif /* LARGE_FILE */ - } -#ifdef LARGE_FILE - if ((maddr = mmap64(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, - fd, offset)) == (caddr_t) - 1) { -#else /* LARGE_FILE */ - if ((maddr = mmap(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, - fd, offset)) == (caddr_t) - 1) { -#endif /* LARGE_FILE */ - perror("mmap error"); - anyfail(); - } + if (debug) + tst_res(TINFO, "child %d (pid %d): seed %d, fsize %lld, mapsize %ld, off %lld, loop %d", + procno, getpid(), seed, (long long)filesize, + (long)mapsize, (long long)offset / pagesize, nloops); - (void)close(fd); + maddr = SAFE_MMAP(0, mapsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, + offset); + SAFE_CLOSE(fd); /* * Now loop read/writing random pages. @@ -554,15 +181,11 @@ void child_mapper(char *file, unsigned procno, unsigned nprocs) for (i = procno; i < validsize; i += nprocs) { if (*((unsigned char *)(paddr + i)) - != ((procno + pattern) & 0xff)) { - (void)fprintf(stderr, "child %d: invalid data " - "", procno, - *((unsigned char *)(paddr + i))); - (void)fprintf(stderr, " at pg %d off %d, exp " - "\n", randpage, i, - (procno + pattern) & 0xff); - anyfail(); - } + != ((procno + pattern) & 0xff)) + tst_brk(TFAIL, "child %d: invalid data \n" + " at pg %d off %d, exp ", procno, + *((unsigned char *)(paddr + i)), + randpage, i, (procno + pattern) & 0xff); /* * Now write it. @@ -570,139 +193,74 @@ void child_mapper(char *file, unsigned procno, unsigned nprocs) *(paddr + i) = (procno + pattern) & 0xff; } } - if (dosync) { + if (do_sync) { /* * Exercise msync() as well! */ randpage = lrand48() % mappages; paddr = maddr + (randpage * pagesize); /* page address */ if (msync(paddr, (mappages - randpage) * pagesize, - MS_SYNC) == -1) { - anyfail(); - } - } - if (munmap(maddr, mapsize) == -1) { - perror("munmap failed"); - local_flag = FAILED; - anyfail(); + MS_SYNC) == -1) + tst_brk(TBROK | TERRNO, "msync failed"); } + SAFE_MUNMAP(maddr, mapsize); exit(0); } /* * Make sure file has all the correct data. */ -int fileokay(char *file, uchar_t * expbuf) +static void fileokay(char *file, unsigned char *expbuf) { -#ifdef LARGE_FILE - struct stat64 statbuf; -#else /* LARGE_FILE */ - struct stat statbuf; -#endif /* LARGE_FILE */ - size_t mapsize; - unsigned mappages; - unsigned pagesize = sysconf(_SC_PAGE_SIZE); - uchar_t readbuf[pagesize]; - int fd; int cnt; - unsigned i, j; - -#ifdef LARGE_FILE - if ((fd = open64(file, O_RDONLY)) == -1) { -#else /* LARGE_FILE */ - if ((fd = open(file, O_RDONLY)) == -1) { -#endif /* LARGE_FILE */ - perror("open error"); - /***** LTP Port *****/ - local_flag = FAILED; - anyfail(); - /***** ** *****/ - return 0; - } -#ifdef LARGE_FILE - if (fstat64(fd, &statbuf) == -1) { -#else /* LARGE_FILE */ - if (fstat(fd, &statbuf) == -1) { -#endif /* LARGE_FILE */ - perror("stat error"); - /***** LTP Port *****/ - local_flag = FAILED; - anyfail(); - /***** ** *****/ - return 0; - } -#ifdef LARGE_FILE - if (lseek64(fd, sparseoffset, SEEK_SET) < 0) { -#else /* LARGE_FILE */ - if (lseek(fd, sparseoffset, SEEK_SET) < 0) { -#endif /* LARGE_FILE */ - perror("lseek"); - anyfail(); - } + size_t mapsize; + struct stat statbuf; + unsigned char readbuf[pagesize]; + unsigned int i, j; + unsigned int mappages; + unsigned int pagesize = sysconf(_SC_PAGE_SIZE); - if (statbuf.st_size - sparseoffset > SIZE_MAX) { - fprintf(stderr, "size_t overflow when setting up map\n"); - anyfail(); - } + fd = SAFE_OPEN(file, O_RDONLY); + + SAFE_FSTAT(fd, &statbuf); + SAFE_LSEEK(fd, sparseoffset, SEEK_SET); + + if (statbuf.st_size - sparseoffset > UINT_MAX) + tst_brk(TBROK, "size_t overflow when setting up map"); mapsize = (size_t) (statbuf.st_size - sparseoffset); mappages = roundup(mapsize, pagesize) / pagesize; for (i = 0; i < mappages; i++) { - cnt = read(fd, readbuf, pagesize); - if (cnt == -1) { - perror("read error"); - /***** LTP Port *****/ - local_flag = FAILED; - anyfail(); - /***** ** *****/ - return 0; - } else if (cnt != pagesize) { + cnt = SAFE_READ(0, fd, readbuf, pagesize); + if ((unsigned int)cnt != pagesize) { /* * Okay if at last page in file... */ - if ((i * pagesize) + cnt != mapsize) { - (void)fprintf(stderr, "read %d of %ld bytes\n", - (i * pagesize) + cnt, - (long)mapsize); - close(fd); - return 0; - } + if ((i * pagesize) + cnt != mapsize) + tst_brk(TFAIL, "missing data: read %d of %ld bytes", + (i * pagesize) + cnt, (long)mapsize); } /* * Compare read bytes of data. */ - for (j = 0; j < cnt; j++) { - if (expbuf[j] != readbuf[j]) { - (void)fprintf(stderr, - "read bad data: exp %c got %c)", - expbuf[j], readbuf[j]); -#ifdef LARGE_FILE - (void)fprintf(stderr, ", pg %d off %d, " - "(fsize %Ld)\n", i, j, - statbuf.st_size); -#else /* LARGE_FILE */ - (void)fprintf(stderr, ", pg %d off %d, " - "(fsize %ld)\n", i, j, - statbuf.st_size); -#endif /* LARGE_FILE */ - close(fd); - return 0; - } + for (j = 0; j < (unsigned int)cnt; j++) { + if (expbuf[j] != readbuf[j]) + tst_brk(TFAIL, + "read bad data: exp %c got %c, pg %d off %d, (fsize %lld)", + expbuf[j], readbuf[j], i, j, + (long long)statbuf.st_size); } } - close(fd); - - return 1; + SAFE_CLOSE(fd); } - /*ARGSUSED*/ void finish(int sig) +static void sighandler(int sig LTP_ATTRIBUTE_UNUSED) { finished++; - return; } -unsigned int initrand(void) +static unsigned int initrand(void) { unsigned int seed; @@ -718,21 +276,147 @@ unsigned int initrand(void) seed = rand(); srand((unsigned int)time(NULL)); seed = (seed ^ rand()) % 100000; - srand48((long int)seed); - return (seed); + srand48((long)seed); + return seed; } -/***** LTP Port *****/ -void ok_exit(void) +static void run(void) { - tst_resm(TPASS, "Test passed"); - tst_rmdir(); - tst_exit(); -} + int c; + int i; + int procno; + int wait_stat; + off_t bytes_left; + pid_t pid; + pid_t *pidarray = NULL; + sigset_t set_mask; + size_t write_cnt; + struct sigaction sa; + unsigned char data; + unsigned char *buf; + unsigned int seed; -int anyfail(void) -{ - tst_brkm(TFAIL, tst_rmdir, "Test failed"); + pagesize = sysconf(_SC_PAGE_SIZE); + seed = initrand(); + pattern = seed & 0xff; + + /* + * Plan for death by signal or alarm. + * Also catch and cleanup with SIGINT. + */ + sa.sa_handler = sighandler; + sa.sa_flags = 0; + SAFE_SIGEMPTYSET(&sa.sa_mask); + SAFE_SIGACTION(SIGINT, &sa, 0); + SAFE_SIGACTION(SIGQUIT, &sa, 0); + SAFE_SIGACTION(SIGTERM, &sa, 0); + + SAFE_SIGACTION(SIGALRM, &sa, 0); + alarm(tst_remaining_runtime()); + + fd = SAFE_OPEN(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664); + + buf = SAFE_MALLOC(pagesize); + pidarray = SAFE_MALLOC(nprocs * sizeof(pid_t)); + + for (i = 0; i < nprocs; i++) + *(pidarray + i) = 0; + + for (i = 0, data = 0; i < (int)pagesize; i++) { + *(buf + i) = (data + pattern) & 0xff; + if (++data == nprocs) + data = 0; + } + SAFE_LSEEK(fd, (off_t)sparseoffset, SEEK_SET); + for (bytes_left = filesize; bytes_left; bytes_left -= c) { + write_cnt = MIN((long long)pagesize, (long long)bytes_left); + c = SAFE_WRITE(1, fd, buf, write_cnt); + } + SAFE_CLOSE(fd); + + /* + * Fork off mmap children. + */ + for (procno = 0; procno < nprocs; procno++) { + switch (pid = SAFE_FORK()) { + case 0: + child_mapper(TEST_FILE, (unsigned int)procno, (unsigned int)nprocs); + exit(0); + + default: + pidarray[procno] = pid; + } + } + + /* + * Now wait for children and refork them as needed. + */ + + SAFE_SIGEMPTYSET(&set_mask); + SAFE_SIGADDSET(&set_mask, SIGALRM); + SAFE_SIGADDSET(&set_mask, SIGINT); + while (!finished) { + pid = wait(&wait_stat); + /* + * Block signals while processing child exit. + */ + + SAFE_SIGPROCMASK(SIG_BLOCK, &set_mask, NULL); + + if (pid != -1) { + /* + * Check exit status, then refork with the + * appropriate procno. + */ + if (!WIFEXITED(wait_stat) + || WEXITSTATUS(wait_stat) != 0) + tst_brk(TBROK, "child exit with err ", + wait_stat); + for (i = 0; i < nprocs; i++) + if (pid == pidarray[i]) + break; + if (i == nprocs) + tst_brk(TBROK, "unknown child pid %d, ", + pid, wait_stat); + + pid = SAFE_FORK(); + if (pid == 0) { /* child */ + child_mapper(TEST_FILE, (unsigned int)i, (unsigned int)nprocs); + exit(0); + } else { + pidarray[i] = pid; + } + } else { + /* + * wait returned an error. If EINTR, then + * normal finish, else it's an unexpected + * error... + */ + if (errno != EINTR || !finished) + tst_brk(TBROK | TERRNO, + "unexpected wait error"); + } + SAFE_SIGPROCMASK(SIG_UNBLOCK, &set_mask, NULL); + } + + SAFE_SIGEMPTYSET(&set_mask); + SAFE_SIGADDSET(&set_mask, SIGALRM); + SAFE_SIGPROCMASK(SIG_BLOCK, &set_mask, NULL); + alarm(0); + + /* + * Finished! Check the file for sanity. + */ + fileokay(TEST_FILE, buf); + tst_res(TPASS, "file has expected data"); } -/***** ** ** *****/ +static struct tst_test test = { + .test_all = run, + .setup = setup, + .options = options, + .cleanup = cleanup, + .max_runtime = 12, + .needs_tmpdir = 1, + .forks_child = 1, +}; From patchwork Wed Oct 12 14:48:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1689169 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=Mq1xIjvH; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MnbBn56Wmz23k1 for ; Thu, 13 Oct 2022 01:49:05 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 712003CAEB4 for ; Wed, 12 Oct 2022 16:49:03 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-7.smtp.seeweb.it (in-7.smtp.seeweb.it [217.194.8.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id 5F27E3CAEB9 for ; Wed, 12 Oct 2022 16:48:38 +0200 (CEST) Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-7.smtp.seeweb.it (Postfix) with ESMTPS id 898CE2002D1 for ; Wed, 12 Oct 2022 16:48:37 +0200 (CEST) Received: by mail-pj1-x104a.google.com with SMTP id o11-20020a17090aac0b00b0020625062cbaso1556932pjq.2 for ; Wed, 12 Oct 2022 07:48:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=z8/7I6ipNopzpau11UcxujEQsyasoyogtCjtdvziyD0=; b=Mq1xIjvHmomJj2wh7gfb2p3rv42ZauUajYwwoXgckOUuiybqldOO1WGrYsYlW06SBC gX1399OtEw627ST1nwKgNhraE6NUtsy7BIqMogF4aJiyWapYWxLH9zO3g+FAh07VLSki ULBl0VDDdi4+dt+w1jr7MThzkBCt4rZzVBflQOu7CM2tagmFLiRY7jwpnhTEugWHMCTM o64BKcQW8gTX9meBP0h8L118LkENxAikLznPb2pBvxibi5YbA5v0ouRM6so2l0gRd2I7 FJXfptauK8fje4rEfVpeE15mHvVQjPlUo4v1nBe+ylLSDl89mhWWUBxQg4DdJ28bS0M9 W6Tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=z8/7I6ipNopzpau11UcxujEQsyasoyogtCjtdvziyD0=; b=qVw35ZMmX2Y9FxuSmhQUKO19d/1WU77I0kh8yb1GuKjG5iZVYxzhWREw1qdrixvkbY 9YbZDDUP0QV43L6OP5lmiCJW6dSei1j04gigYp6T2ZKK188Umk4YPhg1YtFRnt4pncIv vTz8BIWDCGd5x3smyBzLxYmrfE+mFIbHi5KST2lJeUc/GaPQz5BqSn0p+bYoH+iehA0F MrVVNYErF9ipOzjOZKeXPVeAy0Jza1ztXz2YOX/MSv9HLX1IK/tjXW+fj/OE0yny7cTr /WIbtJ5rPEDciCELakPYSeozXczqmrG0v1Yh7MpT3sN/sv7v3ZdJ8SR1XX5H4lb+/Ezp 65OA== X-Gm-Message-State: ACrzQf2NGEb1srbkR5Mks2pSvZQkmc1jYEGrHgjYLyMpIGkCFxJc+M78 yHe7jknQtjGCGJMM0VQCRJZUBJ9WvO7xlBSODxaQcrylUA7IvVRUZZdLV9Q4Q1O5Y41oye9z1II QfYfCm9F7O0FlHLMPiCofoz4B/ZBP+BJBphGaizu2yFHOhaAuUuYavO8I X-Google-Smtp-Source: AMsMyM7eIiCLAbJKTWLYBRFm4wArO59dJAOMi+dFRlKoKFl/wiGHegQT0+Sw/9NVTW287fJHuJvFIVkiy+s= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a05:6a00:1947:b0:565:c337:c53b with SMTP id s7-20020a056a00194700b00565c337c53bmr1739056pfk.10.1665586116026; Wed, 12 Oct 2022 07:48:36 -0700 (PDT) Date: Wed, 12 Oct 2022 14:48:20 +0000 In-Reply-To: <20221012144823.1595671-1-edliaw@google.com> Mime-Version: 1.0 References: <20221012144823.1595671-1-edliaw@google.com> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog Message-ID: <20221012144823.1595671-3-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-7.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-7.smtp.seeweb.it Subject: [LTP] [PATCH v5 2/5] mmapstress01: format comments X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Edward Liaw --- .../kernel/mem/mmapstress/mmapstress01.c | 102 +++++++----------- 1 file changed, 41 insertions(+), 61 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index 83d3f387d..dee73de5e 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -5,19 +5,20 @@ * 06/30/2001 Port to Linux nsharoff@us.ibm.com * 10/03/2022 Refactor to LTP framework edliaw@google.com */ -/* - * This test stresses mmaps, without dealing with fragments or anything! - * It forks a specified number of children, - * all of whom mmap the same file, make a given number of accesses - * to random pages in the map (reading & writing and comparing data). - * Then the child exits and the parent forks another to take its place. - * Each time a child is forked, it stats the file and maps the full - * length of the file. +/*\ + * [Description] + * This test stresses mmaps, without dealing with fragments or anything! + * It forks a specified number of children, + * all of whom mmap the same file, make a given number of accesses + * to random pages in the map (reading & writing and comparing data). + * Then the child exits and the parent forks another to take its place. + * Each time a child is forked, it stats the file and maps the full + * length of the file. * - * This program continues to run until it either receives a SIGINT, - * or times out (if a timeout value is specified). When either of - * these things happens, it cleans up its kids, then checks the - * file to make sure it has the correct data. + * This program continues to run until it either receives a SIGINT, + * or times out (if a timeout value is specified). When either of + * these things happens, it cleans up its kids, then checks the + * file to make sure it has the correct data. */ #define _GNU_SOURCE 1 @@ -102,10 +103,9 @@ static void setup(void) tst_brk(TBROK, "invalid number of mapping children '%s'", opt_nprocs); - if (debug) { + if (debug) tst_res(TINFO, "creating file <%s> with %lld bytes, pattern %d", TEST_FILE, filesize, pattern); - } } static void cleanup(void) @@ -115,11 +115,11 @@ static void cleanup(void) } /* - * Child process that reads/writes map. The child stats the file - * to determine the size, maps the size of the file, then reads/writes - * its own locations on random pages of the map (its locations being - * determined based on nprocs & procno). After a specific number of - * iterations, it exits. + * Child process that reads/writes map. The child stats the file + * to determine the size, maps the size of the file, then reads/writes + * its own locations on random pages of the map (its locations being + * determined based on nprocs & procno). After a specific number of + * iterations, it exits. */ static void child_mapper(char *file, unsigned int procno, unsigned int nprocs) { @@ -136,7 +136,7 @@ static void child_mapper(char *file, unsigned int procno, unsigned int nprocs) unsigned int mappages; unsigned int i; - seed = initrand(); /* initialize random seed */ + seed = initrand(); SAFE_STAT(file, &statbuf); filesize = statbuf.st_size; @@ -167,9 +167,7 @@ static void child_mapper(char *file, unsigned int procno, unsigned int nprocs) offset); SAFE_CLOSE(fd); - /* - * Now loop read/writing random pages. - */ + /* Loop read/writing random pages. */ for (loopcnt = 0; loopcnt < nloops; loopcnt++) { randpage = lrand48() % mappages; paddr = maddr + (randpage * pagesize); /* page address */ @@ -187,16 +185,12 @@ static void child_mapper(char *file, unsigned int procno, unsigned int nprocs) *((unsigned char *)(paddr + i)), randpage, i, (procno + pattern) & 0xff); - /* - * Now write it. - */ + /* Now write it. */ *(paddr + i) = (procno + pattern) & 0xff; } } if (do_sync) { - /* - * Exercise msync() as well! - */ + /* Exercise msync() as well! */ randpage = lrand48() % mappages; paddr = maddr + (randpage * pagesize); /* page address */ if (msync(paddr, (mappages - randpage) * pagesize, @@ -207,9 +201,7 @@ static void child_mapper(char *file, unsigned int procno, unsigned int nprocs) exit(0); } -/* - * Make sure file has all the correct data. - */ +/* Make sure file has all the correct data. */ static void fileokay(char *file, unsigned char *expbuf) { int cnt; @@ -234,16 +226,12 @@ static void fileokay(char *file, unsigned char *expbuf) for (i = 0; i < mappages; i++) { cnt = SAFE_READ(0, fd, readbuf, pagesize); if ((unsigned int)cnt != pagesize) { - /* - * Okay if at last page in file... - */ + /* Okay if at last page in file... */ if ((i * pagesize) + cnt != mapsize) tst_brk(TFAIL, "missing data: read %d of %ld bytes", (i * pagesize) + cnt, (long)mapsize); } - /* - * Compare read bytes of data. - */ + /* Compare read bytes of data. */ for (j = 0; j < (unsigned int)cnt; j++) { if (expbuf[j] != readbuf[j]) tst_brk(TFAIL, @@ -265,12 +253,10 @@ static unsigned int initrand(void) unsigned int seed; /* - * Initialize random seed... Got this from a test written - * by scooter: - * Use srand/rand to diffuse the information from the - * time and pid. If you start several processes, then - * the time and pid information don't provide much - * variation. + * Use srand/rand to diffuse the information from the + * time and pid. If you start several processes, then + * the time and pid information don't provide much + * variation. */ srand((unsigned int)getpid()); seed = rand(); @@ -301,8 +287,8 @@ static void run(void) pattern = seed & 0xff; /* - * Plan for death by signal or alarm. - * Also catch and cleanup with SIGINT. + * Plan for death by signal or alarm. + * Also catch and cleanup with SIGINT. */ sa.sa_handler = sighandler; sa.sa_flags = 0; @@ -334,9 +320,7 @@ static void run(void) } SAFE_CLOSE(fd); - /* - * Fork off mmap children. - */ + /* Fork off mmap children. */ for (procno = 0; procno < nprocs; procno++) { switch (pid = SAFE_FORK()) { case 0: @@ -348,9 +332,7 @@ static void run(void) } } - /* - * Now wait for children and refork them as needed. - */ + /* Now wait for children and refork them as needed. */ SAFE_SIGEMPTYSET(&set_mask); SAFE_SIGADDSET(&set_mask, SIGALRM); @@ -358,15 +340,15 @@ static void run(void) while (!finished) { pid = wait(&wait_stat); /* - * Block signals while processing child exit. + * Block signals while processing child exit. */ SAFE_SIGPROCMASK(SIG_BLOCK, &set_mask, NULL); if (pid != -1) { /* - * Check exit status, then refork with the - * appropriate procno. + * Check exit status, then refork with the + * appropriate procno. */ if (!WIFEXITED(wait_stat) || WEXITSTATUS(wait_stat) != 0) @@ -388,9 +370,9 @@ static void run(void) } } else { /* - * wait returned an error. If EINTR, then - * normal finish, else it's an unexpected - * error... + * wait returned an error. If EINTR, then + * normal finish, else it's an unexpected + * error... */ if (errno != EINTR || !finished) tst_brk(TBROK | TERRNO, @@ -404,9 +386,7 @@ static void run(void) SAFE_SIGPROCMASK(SIG_BLOCK, &set_mask, NULL); alarm(0); - /* - * Finished! Check the file for sanity. - */ + /* Finished! Check the file for sanity. */ fileokay(TEST_FILE, buf); tst_res(TPASS, "file has expected data"); } From patchwork Wed Oct 12 14:48:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1689170 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=HbMg8zpH; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MnbC106c6z23k1 for ; Thu, 13 Oct 2022 01:49:17 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 9D8013CAEBA for ; Wed, 12 Oct 2022 16:49:14 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-6.smtp.seeweb.it (in-6.smtp.seeweb.it [217.194.8.6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id E14403C9590 for ; Wed, 12 Oct 2022 16:48:39 +0200 (CEST) Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-6.smtp.seeweb.it (Postfix) with ESMTPS id 1E377140055E for ; Wed, 12 Oct 2022 16:48:39 +0200 (CEST) Received: by mail-pf1-x449.google.com with SMTP id cw4-20020a056a00450400b00561ec04e77aso9043103pfb.12 for ; Wed, 12 Oct 2022 07:48:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=N/HwfwTwEUrepO7j/Cvqy6S8AQZFC1SZz9WvuQfJrL0=; b=HbMg8zpHhyKE6xjKY++psPVXHaXiodmhhy0z83i4/yMF2jxQK0iUEV0Cxj4o7YDUEg q6YUFyHn14wkKv2EHtoLxHtqUQ216Pa/PwgdNElZDFAxyXcotladuNC7NjDsGq3etcam Btm7OJAYe13BNYft/IAeKiEkqKU5t1UIwKwbKthJKFObaxML8CbERe+QvG/K4m5qRFqb 9E9x7WtCY4FCcDuIKo5EutSwC5gI2tiKt8E6lEumdeuV+L4kmN3sS+Vy3C74aL9VIEDD HogpFOraHYKm531C5tdQxj4zMjhd9CzkwVZtyOBtlNW7mmHSMP1CgbdZ4MGXKD5iLwAN HBZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=N/HwfwTwEUrepO7j/Cvqy6S8AQZFC1SZz9WvuQfJrL0=; b=cuG+5Ynk0HGqiXMcIRu1WGvgzEouzRQAi5U/oJuKihApnoLbzeP1Qyaa2mjlwJHlDo /DDqFSU0b8AObxoe2U33C1sS9bA6vjvfsTiRE8oBWJk9v4IA5dilDsHxSXr/imwnAmWn cPGGN1/cW9dPyaPxT7Sd9b9IiCvMseNO819Fcy8289dgLgU324POpTv3mpAXaFRSrixb jc2at8xAO6Tt7TAP4KtUU2lrMBLnGZnwh/rHDp5SX652fpFCPiagk7f0xkaBlh8SSVPb k+WSXNIGSxrdveHyNqP0tGp6tc3kC/KAOuK2WhqkNj922zZOOUNPnQSanoxGkJXeEj0c taaw== X-Gm-Message-State: ACrzQf03tXl8efenKRWX1/0DX/Whow3oAiDAoexJySeGA0VeS1haehxh F26efXc2biClfIPqlLX63O3uhyaR3y7HBql/VjgvFSFXXGGs2Z0MklA4D8vpdmHVnEQ/CME5kq6 yMHNmaOtMtE3v/OnpYV8f7abT71lUILo7NUcyuFHchQlfP7DWhodIcSFD X-Google-Smtp-Source: AMsMyM7T3gYNQNHbWuHSPijY7I1YmrsGwv2iegtOmjLjHfzA1+bN7NmeZG7QECw5kwCf+qjN5VzggLQ4Hm4= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a05:6a00:2181:b0:51b:560b:dd30 with SMTP id h1-20020a056a00218100b0051b560bdd30mr31374446pfi.44.1665586117489; Wed, 12 Oct 2022 07:48:37 -0700 (PDT) Date: Wed, 12 Oct 2022 14:48:21 +0000 In-Reply-To: <20221012144823.1595671-1-edliaw@google.com> Mime-Version: 1.0 References: <20221012144823.1595671-1-edliaw@google.com> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog Message-ID: <20221012144823.1595671-4-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-6.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-6.smtp.seeweb.it Subject: [LTP] [PATCH v5 3/5] mmapstress01: define fsize bounds by file offset bits X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Edward Liaw --- .../kernel/mem/mmapstress/mmapstress01.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index dee73de5e..ea818ffcd 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -36,6 +36,13 @@ #include #include "tst_test.h" +#if _FILE_OFFSET_BITS == 64 +# define FSIZE_MIN LONG_MIN +# define FSIZE_MAX LONG_MAX +#else +# define FSIZE_MIN INT_MIN +# define FSIZE_MAX INT_MAX +#endif #define MAXLOOPS 500 /* max pages for map children to write */ #define TEST_FILE "mmapstress01.out" @@ -83,18 +90,10 @@ static void setup(void) { int pagesize = sysconf(_SC_PAGE_SIZE); -#if _FILE_OFFSET_BITS == 64 - if (tst_parse_filesize(opt_filesize, &filesize, 0, LONG_MAX)) -#else - if (tst_parse_filesize(opt_filesize, &filesize, 0, INT_MAX)) -#endif + if (tst_parse_filesize(opt_filesize, &filesize, 0, FSIZE_MAX)) tst_brk(TBROK, "invalid initial filesize '%s'", opt_filesize); -#if _FILE_OFFSET_BITS == 64 - if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, LONG_MIN, LONG_MAX)) -#else - if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, INT_MIN, INT_MAX)) -#endif + if (tst_parse_filesize(opt_sparseoffset, &sparseoffset, FSIZE_MIN, FSIZE_MAX)) tst_brk(TBROK, "invalid sparse offset '%s'", opt_sparseoffset); if (sparseoffset % pagesize != 0) tst_brk(TBROK, "sparseoffset must be pagesize multiple"); From patchwork Wed Oct 12 14:48:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1689171 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=rotHseIG; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MnbCB4xMPz23k1 for ; Thu, 13 Oct 2022 01:49:26 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 6F5793CAEC6 for ; Wed, 12 Oct 2022 16:49:24 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-5.smtp.seeweb.it (in-5.smtp.seeweb.it [217.194.8.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id 3DB603CAEC8 for ; Wed, 12 Oct 2022 16:48:41 +0200 (CEST) Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-5.smtp.seeweb.it (Postfix) with ESMTPS id B20116002CE for ; Wed, 12 Oct 2022 16:48:40 +0200 (CEST) Received: by mail-pl1-x64a.google.com with SMTP id e10-20020a17090301ca00b00183d123e2a5so3066085plh.14 for ; Wed, 12 Oct 2022 07:48:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Svf1RTHGXkUzI2Tdqrp1OahkjDeJrUYWslayTjldAI4=; b=rotHseIGrXk63WFzQDIjczCuZycc8i0orpG2CjlJwhUeLpAXv+Rlih6VX5IxATOyH8 aiKNmwR/DJix71uhyfxMR8pbLCZX5I1zw+A1+l3INbTm2dUMfOYt8rrCl5sGTpEgdjWr kViJOw6mmVKB5iFLH+CzRZMDnT0lRMi3EnCJN0uoAXKCsajgEWMv5Z8Tyoqnnm7yZiXX my6gpX3YrhIuW2AY3ao3mWJGWNV4vtS/jaOTAmd7G1ddTXNLVdAhhFLAFThG/mJJEI2o JdD3eFEVXC6GKMjW8xH5JZcKbRA3IEK4V2sPhl9CGRM1nMklOoGijKVrKDHPjIM7FT98 hILg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Svf1RTHGXkUzI2Tdqrp1OahkjDeJrUYWslayTjldAI4=; b=A29YFyAO8icLlcxOQRwL+5Xrdda98NDyfUeRnXE96CZeX9941M4vzlOuYg9M7SVMmI oWPboBopHuOywm6HG5isTWPkjOFFlMjSTHjAWpgPaLX0qrgBgQII/RBVQdR9cPO+0sKV QuBX/uPGTLKgXzz5XZGQY7BN6gqP59wO+iDxor/Nt0dOuSwPFQyWtlzbAByQp9RHm279 5UNRECV1X9Jzge7FqfV4C9kzpVlONh0rFq85jiW/cxEhnNv1ITUChImDKsJg1LgvEstw 73ibBbIyBe7L+0zlLuQRkBOd4oOpYqZKWv8K+AzKJ8pbx37TKW1/m68UhuRoGN+HJHJc tWaw== X-Gm-Message-State: ACrzQf0+yKPwzVpnlAtV7bNivOouWBl76jQyJzjYi60kcBZurfX0a6ml ZWKl/iaO4bPFGKUVYv5HQesKJyYqRjTkZbFFm8YzsHm2YyRaTdhAyLs0iSg6oyqzD+LtjsNbciB UGSrtsSwrv/LLm4VTC4CDHgIdGZMU62hG8+pE6wkTmV04aPi/H/rkqAfC X-Google-Smtp-Source: AMsMyM5NkxvBIASbnBC+S0cnvkfAIGeigAhRaPcIgEyUjT9mXiEkFZpPYBI2xG0tnv0iISNwayNrO3Minww= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a05:6a00:1ac6:b0:548:962b:4c50 with SMTP id f6-20020a056a001ac600b00548962b4c50mr30843300pfv.76.1665586119153; Wed, 12 Oct 2022 07:48:39 -0700 (PDT) Date: Wed, 12 Oct 2022 14:48:22 +0000 In-Reply-To: <20221012144823.1595671-1-edliaw@google.com> Mime-Version: 1.0 References: <20221012144823.1595671-1-edliaw@google.com> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog Message-ID: <20221012144823.1595671-5-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-5.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-5.smtp.seeweb.it Subject: [LTP] [PATCH v5 4/5] mmapstress01: remove unnecessary pidarray X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Edward Liaw --- .../kernel/mem/mmapstress/mmapstress01.c | 25 ++++--------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index ea818ffcd..de7da5b99 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -62,7 +62,7 @@ static char *opt_sparseoffset; static char *randloops; static int fd; -static int finished; +static volatile int finished; static int nprocs = 20; static long long filesize = 4096; static long long sparseoffset; @@ -273,7 +273,6 @@ static void run(void) int wait_stat; off_t bytes_left; pid_t pid; - pid_t *pidarray = NULL; sigset_t set_mask; size_t write_cnt; struct sigaction sa; @@ -289,6 +288,7 @@ static void run(void) * Plan for death by signal or alarm. * Also catch and cleanup with SIGINT. */ + finished = 0; sa.sa_handler = sighandler; sa.sa_flags = 0; SAFE_SIGEMPTYSET(&sa.sa_mask); @@ -302,10 +302,6 @@ static void run(void) fd = SAFE_OPEN(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664); buf = SAFE_MALLOC(pagesize); - pidarray = SAFE_MALLOC(nprocs * sizeof(pid_t)); - - for (i = 0; i < nprocs; i++) - *(pidarray + i) = 0; for (i = 0, data = 0; i < (int)pagesize; i++) { *(buf + i) = (data + pattern) & 0xff; @@ -321,13 +317,11 @@ static void run(void) /* Fork off mmap children. */ for (procno = 0; procno < nprocs; procno++) { - switch (pid = SAFE_FORK()) { - case 0: + pid = SAFE_FORK(); + + if (pid == 0) { child_mapper(TEST_FILE, (unsigned int)procno, (unsigned int)nprocs); exit(0); - - default: - pidarray[procno] = pid; } } @@ -353,19 +347,10 @@ static void run(void) || WEXITSTATUS(wait_stat) != 0) tst_brk(TBROK, "child exit with err ", wait_stat); - for (i = 0; i < nprocs; i++) - if (pid == pidarray[i]) - break; - if (i == nprocs) - tst_brk(TBROK, "unknown child pid %d, ", - pid, wait_stat); - pid = SAFE_FORK(); if (pid == 0) { /* child */ child_mapper(TEST_FILE, (unsigned int)i, (unsigned int)nprocs); exit(0); - } else { - pidarray[i] = pid; } } else { /* From patchwork Wed Oct 12 14:48:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Liaw X-Patchwork-Id: 1689172 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it (client-ip=2001:1418:10:5::2; helo=picard.linux.it; envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=HT7WO7L+; dkim-atps=neutral Received: from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MnbCP1J8wz23k1 for ; Thu, 13 Oct 2022 01:49:37 +1100 (AEDT) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id C27DF3CAEC4 for ; Wed, 12 Oct 2022 16:49:34 +0200 (CEST) X-Original-To: ltp@lists.linux.it Delivered-To: ltp@picard.linux.it Received: from in-5.smtp.seeweb.it (in-5.smtp.seeweb.it [IPv6:2001:4b78:1:20::5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id C50463CAEB7 for ; Wed, 12 Oct 2022 16:48:42 +0200 (CEST) Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by in-5.smtp.seeweb.it (Postfix) with ESMTPS id 67FE0600084 for ; Wed, 12 Oct 2022 16:48:42 +0200 (CEST) Received: by mail-pf1-x449.google.com with SMTP id p1-20020aa78601000000b00565a29d32e5so1175190pfn.5 for ; Wed, 12 Oct 2022 07:48:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=+egNQNfNYiMzbS2XN0P/3qrQXeOGn7oU0h3WHOwWeHc=; b=HT7WO7L+MZdvOoA+YGdKidFD9LoVImSyxtyICqT6m4Nbw8d0CW3zboGX4gY/9slwe3 3gw1zH6Pz5UdsxgBhnjgjElTuMZ5wSg7owbfy0KM0E1BLq2FUN3W26fr0uSVfss7TsNt oB1CIICSSRf8n8tVLCYaks8GvHqkNM2XTQgpQASFsdD224BHtIveTWYT8FVfZho3mbfB hbFP110U2e/Nfs/cFEyOIW1LIvPSRW+qwCej2Es6jvEmr1KSscqG23NaMGaT4CB0Ir4i DH/daP7tj4gGG3RIP8H8PpewSkx0fpUSk5siphy9zphriRdGHaqfx+hyrv8ZcxEJkPUv 0Hdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+egNQNfNYiMzbS2XN0P/3qrQXeOGn7oU0h3WHOwWeHc=; b=DZ9UyaZRr+6uB+jPfiDBmDpSzopkgFga1sYhix5TFslI8ABs/p5hcSwFBwZxyMUa7H meQ3hcOvGuahD6ZINLYZrJrK1YisuSGvDup8aOyEw5O3X1O566VgMBwCQUoXaCsM88eG jBFKaZWpxOoegQQ6UQYkT9UwlLAwgnZgOqjauHZa5UL8RNEp7rBVPJ0rM8cpk+BxBuPz nl2D56W3jB/trj/PZ9k2uPP2uYWHovWzrmbXE+OPPw1s5Niw7FxTJ3y55z2nHtJx5s/u GuZqdnUmkPQlPFw69XnpQ/BFwW5fVR5Tw9+0W8bmC9IOOO6xDGKdp+f5ZnbSLQkXZ8zA IwgQ== X-Gm-Message-State: ACrzQf0TQD+nRAjTHMaV/PXaxvW5T+4NGGK/x1VMCAEe842FJw/kGS53 xItULPLTsGA8UMR8Ma6xLDnV2Yykj0lfK06kFeIuOm5KLoX9Jv1i+VhWSMz53HtxyecwtOy4igG A18mLrrk8rhrcfiIKoSyIFlDSBKP7gGdF2ThCALX9ZkmjdbbRomkE4l7q X-Google-Smtp-Source: AMsMyM7UGHSIWIifrQKmui5GpbWZ/5jBA+q9ITgvVc+BThoLkEMfUCbWQ3REpZEZs+mm3onxPR3x64Jn/Fg= X-Received: from edliaw.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:305d]) (user=edliaw job=sendgmr) by 2002:a17:902:e548:b0:178:87d2:f29f with SMTP id n8-20020a170902e54800b0017887d2f29fmr29103376plf.142.1665586120884; Wed, 12 Oct 2022 07:48:40 -0700 (PDT) Date: Wed, 12 Oct 2022 14:48:23 +0000 In-Reply-To: <20221012144823.1595671-1-edliaw@google.com> Mime-Version: 1.0 References: <20221012144823.1595671-1-edliaw@google.com> X-Mailer: git-send-email 2.38.0.rc1.362.ged0d419d3c-goog Message-ID: <20221012144823.1595671-6-edliaw@google.com> To: ltp@lists.linux.it X-Virus-Scanned: clamav-milter 0.102.4 at in-5.smtp.seeweb.it X-Virus-Status: Clean X-Spam-Status: No, score=-7.4 required=7.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on in-5.smtp.seeweb.it Subject: [LTP] [PATCH v5 5/5] mmapstress01: move sighandler to setup and remove sig blocks X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Edward Liaw via ltp From: Edward Liaw Reply-To: Edward Liaw Cc: kernel-team@android.com Errors-To: ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it Sender: "ltp" Signed-off-by: Edward Liaw --- .../kernel/mem/mmapstress/mmapstress01.c | 51 +++++-------------- 1 file changed, 12 insertions(+), 39 deletions(-) diff --git a/testcases/kernel/mem/mmapstress/mmapstress01.c b/testcases/kernel/mem/mmapstress/mmapstress01.c index de7da5b99..cf8fb3b1f 100644 --- a/testcases/kernel/mem/mmapstress/mmapstress01.c +++ b/testcases/kernel/mem/mmapstress/mmapstress01.c @@ -52,6 +52,7 @@ #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) static unsigned int initrand(void); +static void sighandler(int); static char *debug; static char *do_sync; @@ -88,7 +89,17 @@ static struct tst_option options[] = { static void setup(void) { - int pagesize = sysconf(_SC_PAGE_SIZE); + struct sigaction sa; + + sa.sa_handler = sighandler; + sa.sa_flags = 0; + SAFE_SIGEMPTYSET(&sa.sa_mask); + SAFE_SIGACTION(SIGINT, &sa, 0); + SAFE_SIGACTION(SIGQUIT, &sa, 0); + SAFE_SIGACTION(SIGTERM, &sa, 0); + SAFE_SIGACTION(SIGALRM, &sa, 0); + + pagesize = sysconf(_SC_PAGE_SIZE); if (tst_parse_filesize(opt_filesize, &filesize, 0, FSIZE_MAX)) tst_brk(TBROK, "invalid initial filesize '%s'", opt_filesize); @@ -273,9 +284,7 @@ static void run(void) int wait_stat; off_t bytes_left; pid_t pid; - sigset_t set_mask; size_t write_cnt; - struct sigaction sa; unsigned char data; unsigned char *buf; unsigned int seed; @@ -284,19 +293,7 @@ static void run(void) seed = initrand(); pattern = seed & 0xff; - /* - * Plan for death by signal or alarm. - * Also catch and cleanup with SIGINT. - */ finished = 0; - sa.sa_handler = sighandler; - sa.sa_flags = 0; - SAFE_SIGEMPTYSET(&sa.sa_mask); - SAFE_SIGACTION(SIGINT, &sa, 0); - SAFE_SIGACTION(SIGQUIT, &sa, 0); - SAFE_SIGACTION(SIGTERM, &sa, 0); - - SAFE_SIGACTION(SIGALRM, &sa, 0); alarm(tst_remaining_runtime()); fd = SAFE_OPEN(TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, 0664); @@ -326,23 +323,9 @@ static void run(void) } /* Now wait for children and refork them as needed. */ - - SAFE_SIGEMPTYSET(&set_mask); - SAFE_SIGADDSET(&set_mask, SIGALRM); - SAFE_SIGADDSET(&set_mask, SIGINT); while (!finished) { pid = wait(&wait_stat); - /* - * Block signals while processing child exit. - */ - - SAFE_SIGPROCMASK(SIG_BLOCK, &set_mask, NULL); - if (pid != -1) { - /* - * Check exit status, then refork with the - * appropriate procno. - */ if (!WIFEXITED(wait_stat) || WEXITSTATUS(wait_stat) != 0) tst_brk(TBROK, "child exit with err ", @@ -353,21 +336,11 @@ static void run(void) exit(0); } } else { - /* - * wait returned an error. If EINTR, then - * normal finish, else it's an unexpected - * error... - */ if (errno != EINTR || !finished) tst_brk(TBROK | TERRNO, "unexpected wait error"); } - SAFE_SIGPROCMASK(SIG_UNBLOCK, &set_mask, NULL); } - - SAFE_SIGEMPTYSET(&set_mask); - SAFE_SIGADDSET(&set_mask, SIGALRM); - SAFE_SIGPROCMASK(SIG_BLOCK, &set_mask, NULL); alarm(0); /* Finished! Check the file for sanity. */