From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C9967C77B73 for ; Tue, 30 May 2023 12:07:55 +0000 (UTC) Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 486413CCFAA for ; Tue, 30 May 2023 14:07:53 +0200 (CEST) Received: from in-4.smtp.seeweb.it (in-4.smtp.seeweb.it [IPv6:2001:4b78:1:20::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 BDBC93C9F12 for ; Tue, 30 May 2023 14:07:42 +0200 (CEST) Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 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 AAE021000924 for ; Tue, 30 May 2023 14:07:40 +0200 (CEST) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id DAD8D1F889; Tue, 30 May 2023 12:07:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1685448459; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mt9e3CxaiL7j4lD8DRj5sP9Gi2fxNEK9hITxp982kCI=; b=bC4fdqmzuoINCJli6xQCBjZqoYWC0Xr5Z9EqCyGEP9C2GH44pogx/jk//Zy6b1Ps689d9p IoqIkSUR6j7v1EDwpy1Z87JlROiggED28J4GaMbI7ZuoSiqmbWt6kC+rtIo/WWPSUMhQ0I pR1ir9rFXjmUsPYLrKriksMT3nDwSCw= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 066E213597; Tue, 30 May 2023 12:07:38 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id HWKgMArndWRFEgAAMHmgww (envelope-from ); Tue, 30 May 2023 12:07:38 +0000 To: ltp@lists.linux.it Date: Tue, 30 May 2023 08:07:23 -0400 Message-Id: <20230530120723.29745-1-wegao@suse.com> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230316072231.19157-3-wegao@suse.com> References: <20230316072231.19157-3-wegao@suse.com> MIME-Version: 1.0 X-Virus-Scanned: clamav-milter 1.0.1 at in-4.smtp.seeweb.it X-Virus-Status: Clean Subject: [LTP] [v5,2/2] semop04: Refactor with new API 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: , From: Wei Gao via ltp Reply-To: Wei Gao Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ltp-bounces+ltp=archiver.kernel.org@lists.linux.it Sender: "ltp" Signed-off-by: Wei Gao --- testcases/kernel/syscalls/ipc/semop/semop04.c | 155 +++++------------- 1 file changed, 45 insertions(+), 110 deletions(-) diff --git a/testcases/kernel/syscalls/ipc/semop/semop04.c b/testcases/kernel/syscalls/ipc/semop/semop04.c index 582624d60..dee09d9fd 100644 --- a/testcases/kernel/syscalls/ipc/semop/semop04.c +++ b/testcases/kernel/syscalls/ipc/semop/semop04.c @@ -1,164 +1,99 @@ +// SPDX-License-Identifier: GPL-2.0-or-later /* - * - * Copyright (c) International Business Machines Corp., 2001 - * - * 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., 2001 + * Copyright (C) 2003-2023 Linux Test Project, Inc. + * Author: 2001 Paul Larson + * Modified: 2001 Manoj Iyer */ -/* - * FILE : sem01.c - * DESCRIPTION : Creates a semaphore and two processes. The processes - * each go through a loop where they semdown, delay for a - * random amount of time, and semup, so they will almost - * always be fighting for control of the semaphore. - * HISTORY: - * 01/15/2001 Paul Larson (plars@us.ibm.com) - * -written - * 11/09/2001 Manoj Iyer (manjo@ausin.ibm.com) - * Modified. - * - Removed compiler warnings. - * added exit to the end of function main() +/*\ + * [Description] * + * Creates a semaphore and two processes. The processes + * each go through a loop where they semdown, delay for a + * random amount of time, and semup, so they will almost + * always be fighting for control of the semaphore. */ #include #include #include -#include #include -#include #include #include "lapi/sem.h" +#include "tst_test.h" +#include "tst_safe_sysv_ipc.h" -int verbose = 0; -int loops = 100; -int errors = 0; +#define LOOPS 1000 -int semup(int semid) +static void semup(int semid) { struct sembuf semops; + semops.sem_num = 0; semops.sem_op = 1; semops.sem_flg = SEM_UNDO; - if (semop(semid, &semops, 1) == -1) { - perror("semup"); - errors++; - return 1; - } - return 0; + + SAFE_SEMOP(semid, &semops, 1); } -int semdown(int semid) +static void semdown(int semid) { struct sembuf semops; + semops.sem_num = 0; semops.sem_op = -1; semops.sem_flg = SEM_UNDO; - if (semop(semid, &semops, 1) == -1) { - perror("semdown"); - errors++; - return 1; - } - return 0; + + SAFE_SEMOP(semid, &semops, 1); } -void delayloop() +static void delayloop(void) { int delay; + delay = 1 + ((100.0 * rand()) / RAND_MAX); - if (verbose) - printf("in delay function for %d microseconds\n", delay); usleep(delay); } -void mainloop(int semid) +static void mainloop(int semid) { int i; - for (i = 0; i < loops; i++) { - if (semdown(semid)) { - printf("semdown failed\n"); - } - if (verbose) - printf("sem is down\n"); + + for (i = 0; i < LOOPS; i++) { + semdown(semid); delayloop(); - if (semup(semid)) { - printf("semup failed\n"); - } - if (verbose) - printf("sem is up\n"); + semup(semid); } } -int main(int argc, char *argv[]) +static void run(void) { - int semid, opt; + int semid; union semun semunion; - extern char *optarg; pid_t pid; - int chstat; - - while ((opt = getopt(argc, argv, "l:vh")) != EOF) { - switch ((char)opt) { - case 'l': - loops = atoi(optarg); - break; - case 'v': - verbose = 1; - break; - case 'h': - default: - printf("Usage: -l loops [-v]\n"); - exit(1); - } - } /* set up the semaphore */ - if ((semid = semget((key_t) 9142, 1, 0666 | IPC_CREAT)) < 0) { - printf("error in semget()\n"); - exit(-1); - } + semid = SAFE_SEMGET((key_t) 9142, 1, 0666 | IPC_CREAT); + semunion.val = 1; - if (semctl(semid, 0, SETVAL, semunion) == -1) { - printf("error in semctl\n"); - } - if ((pid = fork()) < 0) { - printf("fork error\n"); - exit(-1); - } + SAFE_SEMCTL(semid, 0, SETVAL, semunion); + + pid = SAFE_FORK(); + if (pid) { - /* parent */ srand(pid); mainloop(semid); - waitpid(pid, &chstat, 0); - if (!WIFEXITED(chstat)) { - printf("child exited with status\n"); - exit(-1); - } - if (semctl(semid, 0, IPC_RMID, semunion) == -1) { - printf("error in semctl\n"); - } - if (errors) { - printf("FAIL: there were %d errors\n", errors); - } else { - printf("PASS: error count is 0\n"); - } - exit(errors); + tst_reap_children(); + SAFE_SEMCTL(semid, 0, IPC_RMID, semunion); + tst_res(TPASS, "Semaphore up/down check success"); } else { - /* child */ mainloop(semid); } - exit(0); } + +static struct tst_test test = { + .test_all = run, + .forks_child = 1, +}; -- 2.35.3 -- Mailing list info: https://lists.linux.it/listinfo/ltp