File: membarrier.c

package info (click to toggle)
trinity 1.9%2Bgit20200331.4d2343bd18c7b-2%2Bdeb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,080 kB
  • sloc: ansic: 32,746; sh: 536; makefile: 164
file content (36 lines) | stat: -rw-r--r-- 809 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 * SYSCALL_DEFINE2(membarrier, int, cmd, int, flags)
 */
#include <stdlib.h>
#include "random.h"
#include "sanitise.h"

static void sanitise_membarrier(struct syscallrecord *rec)
{
	// for now, there are no flags, but for future
	// proofing, we'll leak something random occasionally.
	// 0 the rest of the time, or we just EINVAL
	if (ONE_IN(1000))
		rec->a2 = 1 << (rnd() % 4);
	else
		rec->a2 = 0;
}

enum membarrier_cmd {
	MEMBARRIER_CMD_QUERY = 0,
	MEMBARRIER_CMD_SHARED = (1 << 0),
};

static unsigned long membarrier_cmds[] = {
	MEMBARRIER_CMD_QUERY, MEMBARRIER_CMD_SHARED,
};

struct syscallentry syscall_membarrier = {
	.name = "membarrier",
	.num_args = 2,
	.arg1type = ARG_OP,
	.arg1name = "cmd",
	.arg1list = ARGLIST(membarrier_cmds),
	.arg2name = "flags",
	.sanitise = sanitise_membarrier,
};