All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH 1/2] Keep the definition of union semun in one place
@ 2015-04-13  9:45 Stanislav Kholmanskikh
  2015-04-13  9:45 ` [LTP] [PATCH 2/2] sem_comm: pass a semun union to semctl() Stanislav Kholmanskikh
  0 siblings, 1 reply; 2+ messages in thread
From: Stanislav Kholmanskikh @ 2015-04-13  9:45 UTC (permalink / raw)
  To: ltp-list; +Cc: vasily.isaenko

Signed-off-by: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
---
 include/lapi/semun.h                               |   35 ++++++++++++++++++++
 .../kernel/ipc/ipc_stress/semaphore_test_01.c      |   13 +-------
 .../kernel/ipc/ipc_stress/semaphore_test_02.c      |    7 +---
 .../kernel/ipc/ipc_stress/semaphore_test_03.c      |    7 +---
 testcases/kernel/ipc/ipc_stress/shmem_test_03.c    |    7 +---
 testcases/kernel/ipc/pipeio/pipeio.c               |    7 +---
 testcases/kernel/ipc/semaphore/sem01.c             |    7 +---
 testcases/kernel/ipc/semaphore/sem02.c             |    8 +----
 testcases/kernel/sched/process_stress/process.c    |    8 +---
 testcases/kernel/syscalls/cma/process_vm.h         |    7 +---
 testcases/kernel/syscalls/ipc/lib/ipcsem.h         |    8 +----
 testcases/kernel/syscalls/ipc/semctl/semctl07.c    |    6 ---
 testcases/kernel/syscalls/ipc/semop/semop02.c      |    2 +-
 testcases/kernel/syscalls/sendmsg/sendmsg02.c      |    7 +---
 14 files changed, 52 insertions(+), 77 deletions(-)
 create mode 100644 include/lapi/semun.h

diff --git a/include/lapi/semun.h b/include/lapi/semun.h
new file mode 100644
index 0000000..a2e695a
--- /dev/null
+++ b/include/lapi/semun.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015 Linux Test Project
+ *
+ * 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 would 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 the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef SEMUN_H__
+#define SEMUN_H__
+
+#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
+/* union semun is defined by including <sys/sem.h> */
+#else
+/* according to X/OPEN we have to define it ourselves */
+union semun {
+	int val;                /* value for SETVAL */
+	struct semid_ds *buf;   /* buffer for IPC_STAT, IPC_SET */
+	unsigned short *array;  /* array for GETALL, SETALL */
+	/* Linux specific part: */
+	struct seminfo *__buf;  /* buffer for IPC_INFO */
+};
+#endif
+
+#endif /* SEMUN_H__ */
diff --git a/testcases/kernel/ipc/ipc_stress/semaphore_test_01.c b/testcases/kernel/ipc/ipc_stress/semaphore_test_01.c
index 72218ff..7d55481 100644
--- a/testcases/kernel/ipc/ipc_stress/semaphore_test_01.c
+++ b/testcases/kernel/ipc/ipc_stress/semaphore_test_01.c
@@ -72,18 +72,7 @@
 #include <sys/stat.h>
 #endif
 
-#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
-/* union semun is defined by including <sys/sem.h> */
-#else
-/* according to X/OPEN we have to define it ourselves */
-union semun {
-	int val;		/* value for SETVAL */
-	struct semid_ds *buf;	/* buffer for IPC_STAT, IPC_SET */
-	unsigned short *array;	/* array for GETALL, SETALL */
-	/* Linux specific part: */
-	struct seminfo *__buf;	/* buffer for IPC_INFO */
-};
-#endif
+#include "lapi/semun.h"
 
 /* Defines
  *
diff --git a/testcases/kernel/ipc/ipc_stress/semaphore_test_02.c b/testcases/kernel/ipc/ipc_stress/semaphore_test_02.c
index f733389..fc8d2d9 100644
--- a/testcases/kernel/ipc/ipc_stress/semaphore_test_02.c
+++ b/testcases/kernel/ipc/ipc_stress/semaphore_test_02.c
@@ -77,6 +77,7 @@
 #include <sys/wait.h>
 #include <stdlib.h>
 #include <string.h>
+#include "lapi/semun.h"
 
 /*
  * Defines
@@ -120,11 +121,7 @@ int childpid[MAX_CHILDREN];
 int errors = 0;
 pid_t parent_pid;
 
-union semun {
-	int val;
-	struct semid_ds *buf;
-	unsigned short *array;
-} arg;
+union semun arg;
 
 /*---------------------------------------------------------------------+
 |                               main                                   |
diff --git a/testcases/kernel/ipc/ipc_stress/semaphore_test_03.c b/testcases/kernel/ipc/ipc_stress/semaphore_test_03.c
index 8955e02..d82e217 100644
--- a/testcases/kernel/ipc/ipc_stress/semaphore_test_03.c
+++ b/testcases/kernel/ipc/ipc_stress/semaphore_test_03.c
@@ -71,6 +71,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
+#include "lapi/semun.h"
 
 /*
  * Defines
@@ -136,11 +137,7 @@ pid_t childpid[MAX_CHILDREN];
 pid_t parent_pid;
 pid_t errpid;
 
-union semun {
-	int val;
-	struct semid_ds *buf;
-	unsigned short *array;
-} arg;
+union semun arg;
 
 /*---------------------------------------------------------------------+
 |                               main                                   |
diff --git a/testcases/kernel/ipc/ipc_stress/shmem_test_03.c b/testcases/kernel/ipc/ipc_stress/shmem_test_03.c
index 845d3e6..c1b11fd 100644
--- a/testcases/kernel/ipc/ipc_stress/shmem_test_03.c
+++ b/testcases/kernel/ipc/ipc_stress/shmem_test_03.c
@@ -79,6 +79,7 @@
 #include <sys/signal.h>
 #include <sys/types.h>
 #include <sys/wait.h>
+#include "lapi/semun.h"
 
 /* Defines
  *
@@ -140,11 +141,7 @@ int semid;			/* semaphore id */
 int num_children = DEFAULT_NUM_CHILDREN;
 int buffer_size = DEFAULT_SHMEM_SIZE;
 
-union semun {
-	int val;
-	struct semid_ds *buf;
-	unsigned short *array;
-} arg;
+union semun arg;
 
 /*---------------------------------------------------------------------+
 |                               main                                   |
diff --git a/testcases/kernel/ipc/pipeio/pipeio.c b/testcases/kernel/ipc/pipeio/pipeio.c
index da6a397..89c6cfb 100644
--- a/testcases/kernel/ipc/pipeio/pipeio.c
+++ b/testcases/kernel/ipc/pipeio/pipeio.c
@@ -53,6 +53,7 @@
 
 #include "test.h"
 #include "safe_macros.h"
+#include "lapi/semun.h"
 
 char *TCID = "pipeio";
 int TST_TOTAL = 1;
@@ -123,11 +124,7 @@ static int write_fd;
 static int empty_read;
 static int sem_id;
 
-static union semun {
-	int val;
-	struct semid_ds *buf;
-	unsigned short int *array;
-} u;
+static union semun u;
 
 int main(int ac, char *av[])
 {
diff --git a/testcases/kernel/ipc/semaphore/sem01.c b/testcases/kernel/ipc/semaphore/sem01.c
index d6fb8fb..5a45238 100644
--- a/testcases/kernel/ipc/semaphore/sem01.c
+++ b/testcases/kernel/ipc/semaphore/sem01.c
@@ -41,12 +41,7 @@
 #include <sys/wait.h>
 #include <sys/ipc.h>
 #include <sys/sem.h>
-
-union semun {
-	int val;
-	struct semid_ds *buf;
-	unsigned short *array;
-};
+#include "lapi/semun.h"
 
 int verbose = 0;
 int loops = 100;
diff --git a/testcases/kernel/ipc/semaphore/sem02.c b/testcases/kernel/ipc/semaphore/sem02.c
index 6d25569..7db142b 100644
--- a/testcases/kernel/ipc/semaphore/sem02.c
+++ b/testcases/kernel/ipc/semaphore/sem02.c
@@ -51,6 +51,7 @@
 #include <pthread.h>
 #include <sys/types.h>
 #include <sys/ipc.h>
+#include "lapi/semun.h"
 
 #define KEY IPC_PRIVATE
 
@@ -67,13 +68,6 @@ int TST_TOTAL = 1;
 struct sembuf Psembuf = { 0, -1, SEM_UNDO };
 struct sembuf Vsembuf = { 0, 1, SEM_UNDO };
 
-union semun {
-	int val;		/* value for SETVAL */
-	struct semid_ds *buf;	/* buffer for IPC_STAT & IPC_SET */
-	unsigned short *array;	/* array for GETALL & SETALL */
-	struct seminfo *ipc_buf;	/* buffer for IPC_INFO */
-};
-
 int sem_id;
 int err_ret;			/* This is used to determine PASS/FAIL status */
 int main(int argc, char **argv)
diff --git a/testcases/kernel/sched/process_stress/process.c b/testcases/kernel/sched/process_stress/process.c
index 8ed9e23..e0a1e38 100644
--- a/testcases/kernel/sched/process_stress/process.c
+++ b/testcases/kernel/sched/process_stress/process.c
@@ -45,6 +45,7 @@
 #include <sys/shm.h>
 #include <sys/types.h>
 #include <sys/wait.h>
+#include "lapi/semun.h"
 
 /* indexes into environment variable array */
 #define ADBG 0
@@ -103,12 +104,7 @@ typedef struct messagebuf {
 	char mtext[80];		/* message text */
 } Msgbuf;
 
-union semun {			/* to fix problem with 4th arg of semctl in 64 bits MARIOG */
-	int val;
-	struct semid_ds *buf;
-	unsigned short *array;
-} semarg = {
-0};
+union semun semarg;
 
 /* structure of all environment variable used by program */
 struct envstruct {
diff --git a/testcases/kernel/syscalls/cma/process_vm.h b/testcases/kernel/syscalls/cma/process_vm.h
index 5241fa1..7df9aac 100644
--- a/testcases/kernel/syscalls/cma/process_vm.h
+++ b/testcases/kernel/syscalls/cma/process_vm.h
@@ -31,12 +31,7 @@
 #include <sys/syscall.h>
 #include <sys/uio.h>
 #include <unistd.h>
-
-union semun {
-	int val;
-	struct semid_ds *buf;
-	unsigned short int *array;
-};
+#include "lapi/semun.h"
 
 static inline ssize_t test_process_vm_readv(pid_t pid,
 		const struct iovec *lvec, unsigned long liovcnt,
diff --git a/testcases/kernel/syscalls/ipc/lib/ipcsem.h b/testcases/kernel/syscalls/ipc/lib/ipcsem.h
index 9324e69..6a37672 100644
--- a/testcases/kernel/syscalls/ipc/lib/ipcsem.h
+++ b/testcases/kernel/syscalls/ipc/lib/ipcsem.h
@@ -29,6 +29,7 @@
 #include <sys/sem.h>
 
 #include "test.h"
+#include "lapi/semun.h"
 
 void cleanup(void);
 void setup(void);
@@ -46,13 +47,6 @@ key_t semkey;			/* an IPC key generated by ftok() */
 extern key_t semkey;	 	 /* an IPC key generated by ftok() */
 #endif
 
-union semun {
-	int val;			/* value for SETVAL */
-	struct semid_ds *buf;		/* buffer for IPC_STAT & IPC_SET */
-	unsigned short *array;		/* array for GETALL & SETALL */
-	struct seminfo *ipc_buf;	/* buffer for IPC_INFO */
-};
-
 void rm_sema(int sem_id);
 
 int getipckey();
diff --git a/testcases/kernel/syscalls/ipc/semctl/semctl07.c b/testcases/kernel/syscalls/ipc/semctl/semctl07.c
index f51099b..3cc1eff 100644
--- a/testcases/kernel/syscalls/ipc/semctl/semctl07.c
+++ b/testcases/kernel/syscalls/ipc/semctl/semctl07.c
@@ -62,12 +62,6 @@ int main(int argc, char *argv[])
 	int status;
 	struct semid_ds buf_ds;
 
-	union semun {
-		int val;
-		struct semid_ds *buf;
-		short *array;
-	};
-
 	union semun arg;
 
 	setup();
diff --git a/testcases/kernel/syscalls/ipc/semop/semop02.c b/testcases/kernel/syscalls/ipc/semop/semop02.c
index 6d3b3ec..cf6d1ab 100644
--- a/testcases/kernel/syscalls/ipc/semop/semop02.c
+++ b/testcases/kernel/syscalls/ipc/semop/semop02.c
@@ -124,7 +124,7 @@ void setup(void)
 			 "couldn't create semaphore in setup");
 	}
 
-	arr.ipc_buf = &ipc_buf;
+	arr.__buf = &ipc_buf;
 	if (semctl(sem_id_1, 0, IPC_INFO, arr) == -1)
 		tst_brkm(TBROK | TERRNO, cleanup, "semctl() IPC_INFO failed");
 
diff --git a/testcases/kernel/syscalls/sendmsg/sendmsg02.c b/testcases/kernel/syscalls/sendmsg/sendmsg02.c
index 06f8163..bc71e9d 100644
--- a/testcases/kernel/syscalls/sendmsg/sendmsg02.c
+++ b/testcases/kernel/syscalls/sendmsg/sendmsg02.c
@@ -44,12 +44,7 @@
 #include "config.h"
 #include "test.h"
 #include "safe_macros.h"
-
-union semun {
-	int val;
-	struct semid_ds *buf;
-	unsigned short int *array;
-};
+#include "lapi/semun.h"
 
 char *TCID = "sendmsg02";
 
-- 
1.7.1


------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [LTP] [PATCH 2/2] sem_comm: pass a semun union to semctl()
  2015-04-13  9:45 [LTP] [PATCH 1/2] Keep the definition of union semun in one place Stanislav Kholmanskikh
@ 2015-04-13  9:45 ` Stanislav Kholmanskikh
  0 siblings, 0 replies; 2+ messages in thread
From: Stanislav Kholmanskikh @ 2015-04-13  9:45 UTC (permalink / raw)
  To: ltp-list; +Cc: vasily.isaenko

It's required by the semctl() API plus without that the test
case may fail on 64-bit Big Endian systems (like sparc64).

Signed-off-by: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
---
 testcases/kernel/containers/sysvipc/sem_comm.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/testcases/kernel/containers/sysvipc/sem_comm.c b/testcases/kernel/containers/sysvipc/sem_comm.c
index 157ba0c..3d7e7bb 100644
--- a/testcases/kernel/containers/sysvipc/sem_comm.c
+++ b/testcases/kernel/containers/sysvipc/sem_comm.c
@@ -36,6 +36,7 @@
 #include "safe_macros.h"
 #include "libclone.h"
 #include "ipcns_helper.h"
+#include "lapi/semun.h"
 
 #define TESTKEY 124426L
 char *TCID	= "sem_comm";
@@ -57,6 +58,7 @@ static void setup(void)
 int chld1_sem(void *arg)
 {
 	int id;
+	union semun su;
 	struct sembuf sm;
 
 	id = semget(TESTKEY, 1, IPC_CREAT);
@@ -65,7 +67,8 @@ int chld1_sem(void *arg)
 		return 2;
 	}
 
-	if (semctl(id, 0, SETVAL, 1) == -1) {
+	su.val = 1;
+	if (semctl(id, 0, SETVAL, su) == -1) {
 		perror("semctl");
 		semctl(id, 0, IPC_RMID);
 		return 2;
@@ -97,6 +100,7 @@ int chld2_sem(void *arg)
 {
 	int id, rval = 0;
 	struct sembuf sm;
+	union semun su;
 
 	/* wait for child1 to create the semaphore */
 	TST_SAFE_CHECKPOINT_WAIT(NULL, 0);
@@ -107,7 +111,8 @@ int chld2_sem(void *arg)
 		return 2;
 	}
 
-	if (semctl(id, 0, SETVAL, 1) == -1) {
+	su.val = 1;
+	if (semctl(id, 0, SETVAL, su) == -1) {
 		perror("semctl");
 		semctl(id, 0, IPC_RMID);
 		return 2;
-- 
1.7.1


------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-04-13  9:45 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-13  9:45 [LTP] [PATCH 1/2] Keep the definition of union semun in one place Stanislav Kholmanskikh
2015-04-13  9:45 ` [LTP] [PATCH 2/2] sem_comm: pass a semun union to semctl() Stanislav Kholmanskikh

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.