File: numa.c

package info (click to toggle)
systemtap 4.8-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 39,000 kB
  • sloc: cpp: 78,785; ansic: 62,419; xml: 49,443; exp: 42,735; sh: 11,254; python: 3,062; perl: 2,252; tcl: 1,305; makefile: 1,072; lisp: 105; awk: 101; asm: 91; java: 56; sed: 16
file content (147 lines) | stat: -rw-r--r-- 5,541 bytes parent folder | download | duplicates (4)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* COVERAGE: mbind migrate_pages move_pages */

#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/mman.h>
#include <linux/mempolicy.h>
#include <sys/types.h>
#define TEST_PAGES 2


#ifdef __NR_mbind
int __mbind(void *start, unsigned long len, int mode,
            unsigned long *nmask, unsigned long maxnode, unsigned flags) {
    return syscall(__NR_mbind, start, len, mode, nmask, maxnode, flags);
}
#endif

#ifdef __NR_migrate_pages
long __migrate_pages(pid_t pid, unsigned long maxnode,
                     const unsigned long *old_nodes,
                     const unsigned long *new_nodes) {
    return syscall(__NR_migrate_pages, pid, maxnode, old_nodes, new_nodes);
}
#endif

#ifdef __NR_move_pages
long __move_pages(pid_t pid, unsigned long nr_pages, const void **pages,
                  const int *nodes, int *status, int flags) {
    return syscall(__NR_move_pages, pid, nr_pages, pages, nodes, status, flags);
}
#endif


int main()
{
    unsigned long *p;
    unsigned long len = 100;
    const unsigned long node0 = 1;
    const void *pages[TEST_PAGES] = { 0 };
    int status[TEST_PAGES];

// ---- normal operation --------------

#ifdef __NR_mbind
    p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
    __mbind(p, len, MPOL_DEFAULT, NULL, 0, 0);
    //staptest// [[[[mbind (XXXX, 100, MPOL_DEFAULT, 0x0, 0, 0x0)!!!!ni_syscall ()]]]] = NNNN
#endif

#ifdef __NR_move_pages
    __move_pages(0, TEST_PAGES, pages, NULL, status, 0);
    //staptest// [[[[move_pages (0, 2, XXXX, 0x0, XXXX, 0x0) = 0!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

#ifdef __NR_migrate_pages
    __migrate_pages(0, 2, &node0, &node0);
    //staptest// [[[[migrate_pages (0, 2, XXXX, XXXX) = 0!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif


// ---- ugly calls --------------------

#ifdef __NR_mbind
    __mbind((void *)-1, 0, 0, NULL, 0, 0);
    //staptest// [[[[mbind (0x[f]+, 0, MPOL_DEFAULT, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __mbind(NULL, -1, 0, NULL, 0, 0);
#if __WORDSIZE == 64
    //staptest// [[[[mbind (0x0, 18446744073709551615, MPOL_DEFAULT, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#else
    //staptest// [[[[mbind (0x0, 4294967295, MPOL_DEFAULT, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

    __mbind(NULL, 0, -1, NULL, 0, 0);
    //staptest// [[[[mbind (0x0, 0, 0x[f]+, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __mbind(NULL, 0, 0, (unsigned long *)-1, 0, 0);
    //staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x[f]+, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __mbind(NULL, 0, 0, NULL, -1, 0);
#if __WORDSIZE == 64
    //staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x0, 18446744073709551615, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#else
    //staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x0, 4294967295, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

    __mbind(NULL, 0, 0, NULL, 0, -1);
    //staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x0, 0, MPOL_F_NODE|MPOL_F_ADDR[[[[!!!!|MPOL_F_MEMS_ALLOWED]]]]|XXXX)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

#ifdef MPOL_F_STATIC_NODES
    __mbind(NULL, 0, MPOL_F_STATIC_NODES|MPOL_PREFERRED, NULL, 0, 0);
    //staptest// [[[[mbind (0x0, 0, MPOL_F_STATIC_NODES|MPOL_PREFERRED, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

    __mbind(NULL, 0, 0, NULL, 0, MPOL_F_ADDR);
    //staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x0, 0, MPOL_F_ADDR)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

#ifdef __NR_move_pages
    __move_pages(-1, 0, NULL, NULL, NULL, 0);
    //staptest// [[[[move_pages (-1, 0, 0x0, 0x0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __move_pages(0, -1, NULL, NULL, NULL, 0);
#if __WORDSIZE == 64
    //staptest// [[[[move_pages (0, 18446744073709551615, 0x0, 0x0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#else
    //staptest// [[[[move_pages (0, 4294967295, 0x0, 0x0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

    __move_pages(0, 0, (const void **)-1, NULL, NULL, 0);
    //staptest// [[[[move_pages (0, 0, 0x[f]+, 0x0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __move_pages(0, 0, NULL, (const int *)-1, NULL, 0);
    //staptest// [[[[move_pages (0, 0, 0x0, 0x[f]+, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __move_pages(0, 0, NULL, NULL, (int *)-1, 0);
    //staptest// [[[[move_pages (0, 0, 0x0, 0x0, 0x[f]+, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __move_pages(0, 0, NULL, NULL, NULL, -1);
    //staptest// [[[[move_pages (0, 0, 0x0, 0x0, 0x0, MPOL_F_NODE|MPOL_F_ADDR[[[[!!!!|MPOL_F_MEMS_ALLOWED]]]]|XXXX)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __move_pages(0, 0, NULL, NULL, NULL, MPOL_F_ADDR);
    //staptest// [[[[move_pages (0, 0, 0x0, 0x0, 0x0, MPOL_F_ADDR)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

#ifdef __NR_migrate_pages
    __migrate_pages(-1, 0, NULL, NULL);
    //staptest// [[[[migrate_pages (-1, 0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __migrate_pages(0, -1, NULL, NULL);
#if __WORDSIZE == 64
    //staptest// [[[[migrate_pages (0, 18446744073709551615, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#else
    //staptest// [[[[migrate_pages (0, 4294967295, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

    __migrate_pages(0, 0, (const unsigned long *)-1, NULL);
    //staptest// [[[[migrate_pages (0, 0, 0x[f]+, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]

    __migrate_pages(0, 0, NULL, (const unsigned long *)-1);
    //staptest// [[[[migrate_pages (0, 0, 0x0, 0x[f]+)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif

    return 0;

}