forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests/powerpc: exec() with suspended transaction
Perform an exec() class syscall with a suspended transaction. This is a test for the bug we fixed in 8e96a87 ("powerpc/tm: Always reclaim in start_thread() for exec() class syscalls"). Signed-off-by: Cyril Bur <[email protected]> [mpe: Fix build errors, use a single binary for the test] Signed-off-by: Michael Ellerman <[email protected]>
- Loading branch information
1 parent
dd57023
commit a431b94
Showing
5 changed files
with
98 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,3 +6,4 @@ tm-vmxcopy | |
tm-fork | ||
tm-tar | ||
tm-tmspr | ||
tm-exec |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/* | ||
* Copyright 2016, Cyril Bur, IBM Corp. | ||
* | ||
* 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. | ||
* | ||
* Syscalls can be performed provided the transactions are suspended. | ||
* The exec() class of syscall is unique as a new process is loaded. | ||
* | ||
* It makes little sense for after an exec() call for the previously | ||
* suspended transaction to still exist. | ||
*/ | ||
|
||
#define _GNU_SOURCE | ||
#include <errno.h> | ||
#include <inttypes.h> | ||
#include <libgen.h> | ||
#include <pthread.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <string.h> | ||
#include <unistd.h> | ||
|
||
#include "utils.h" | ||
#include "tm.h" | ||
|
||
static char *path; | ||
|
||
static int test_exec(void) | ||
{ | ||
SKIP_IF(!have_htm()); | ||
|
||
asm __volatile__( | ||
"tbegin.;" | ||
"blt 1f; " | ||
"tsuspend.;" | ||
"1: ;" | ||
: : : "memory"); | ||
|
||
execl(path, "tm-exec", "--child", NULL); | ||
|
||
/* Shouldn't get here */ | ||
perror("execl() failed"); | ||
return 1; | ||
} | ||
|
||
static int after_exec(void) | ||
{ | ||
asm __volatile__( | ||
"tbegin.;" | ||
"blt 1f;" | ||
"tsuspend.;" | ||
"1: ;" | ||
: : : "memory"); | ||
|
||
FAIL_IF(failure_is_nesting()); | ||
return 0; | ||
} | ||
|
||
int main(int argc, char *argv[]) | ||
{ | ||
path = argv[0]; | ||
|
||
if (argc > 1 && strcmp(argv[1], "--child") == 0) | ||
return after_exec(); | ||
|
||
return test_harness(test_exec, "tm_exec"); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters