subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 1 | /******************************************************************************/ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 2 | /* Copyright (c) Crackerjack Project., 2007-2008 */ |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 3 | /* Author(s): Takahiro Yasui <takahiro.yasui.mp@hitachi.com>, */ |
| 4 | /* Yumiko Sugita <yumiko.sugita.yf@hitachi.com>, */ |
| 5 | /* Satoshi Fujiwara <sa-fuji@sdl.hitachi.co.jp> */ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 6 | /* */ |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 7 | /* This program is free software; you can redistribute it and/or modify */ |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 8 | /* it under the terms of the GNU General Public License as published by */ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 9 | /* the Free Software Foundation; either version 2 of the License, or */ |
| 10 | /* (at your option) any later version. */ |
| 11 | /* */ |
| 12 | /* This program is distributed in the hope that it will be useful, */ |
| 13 | /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ |
| 14 | /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */ |
| 15 | /* the GNU General Public License for more details. */ |
| 16 | /* */ |
| 17 | /* You should have received a copy of the GNU General Public License */ |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 18 | /* along with this program; if not, write to the Free Software */ |
Wanlong Gao | 4548c6c | 2012-10-19 18:03:36 +0800 | [diff] [blame] | 19 | /* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 20 | /* */ |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 21 | /******************************************************************************/ |
| 22 | /******************************************************************************/ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 23 | /* */ |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 24 | /* File: mbind01.c */ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 25 | /* */ |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 26 | /* Description: This tests the mbind() syscall */ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 27 | /* */ |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 28 | /* Usage: <for command-line> */ |
| 29 | /* mbind01 [-c n] [-e][-i n] [-I x] [-p x] [-t] */ |
| 30 | /* where, -c n : Run n copies concurrently. */ |
| 31 | /* -e : Turn on errno logging. */ |
| 32 | /* -i n : Execute test n times. */ |
| 33 | /* -I x : Execute test for x seconds. */ |
| 34 | /* -P x : Pause for x seconds between iterations. */ |
| 35 | /* -t : Turn on syscall timing. */ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 36 | /* */ |
| 37 | /* Total Tests: 1 */ |
| 38 | /* */ |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 39 | /* Test Name: mbind01 */ |
| 40 | /* History: Porting from Crackerjack to LTP is done by */ |
| 41 | /* Manas Kumar Nayak maknayak@in.ibm.com> */ |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 42 | /******************************************************************************/ |
| 43 | |
yaberauneya | b8b3564 | 2009-12-23 00:13:20 +0000 | [diff] [blame] | 44 | #include "config.h" |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 45 | #include <sys/types.h> |
| 46 | #include <sys/mman.h> |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 47 | #include <sys/syscall.h> |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 48 | #include <errno.h> |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 49 | #include <getopt.h> |
| 50 | #include <libgen.h> |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 51 | #if HAVE_NUMA_H |
| 52 | #include <numa.h> |
| 53 | #endif |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 54 | #if HAVE_NUMAIF_H |
| 55 | #include <numaif.h> |
| 56 | #endif |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 57 | #include <stdio.h> |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 58 | #include <stdlib.h> |
| 59 | #include <string.h> |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 60 | #include <unistd.h> |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 61 | |
| 62 | #include "test.h" |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 63 | #include "linux_syscall_numbers.h" |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 64 | #include "include_j_h.h" |
Jan Stancek | a03a9d9 | 2012-06-28 11:03:16 +0200 | [diff] [blame] | 65 | #include "numa_helper.h" |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 66 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 67 | char *TCID = "mbind01"; |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 68 | int TST_TOTAL = 2; |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 69 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 70 | #if HAVE_NUMA_H && HAVE_LINUX_MEMPOLICY_H && HAVE_NUMAIF_H && \ |
| 71 | HAVE_MPOL_CONSTANTS |
Garrett Cooper | 2c28215 | 2010-12-16 00:55:50 -0800 | [diff] [blame] | 72 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 73 | #define MEM_LENGTH (4 * 1024 * 1024) |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 74 | |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 75 | static int testno; |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 76 | |
| 77 | enum test_type { |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 78 | NORMAL, |
| 79 | INVALID_POINTER, |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 80 | }; |
| 81 | |
| 82 | enum from_node { |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 83 | NONE, |
| 84 | SELF, |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 85 | }; |
| 86 | |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 87 | struct test_case { |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 88 | int ttype; |
| 89 | int policy; |
| 90 | int from_node; |
| 91 | unsigned flags; |
| 92 | int ret; |
| 93 | int err; |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 94 | }; |
| 95 | |
| 96 | /* Test cases |
| 97 | * |
| 98 | * test status of errors on man page |
| 99 | * |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 100 | * EFAULT v (detect unmapped hole or invalid pointer) |
| 101 | * EINVAL v (invalid arguments) |
| 102 | * ENOMEM can't check because it's difficult to create no-memory |
| 103 | * EIO can't check because we don't have N-node NUMA system |
| 104 | * (only we can do is simulate 1-node NUMA) |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 105 | */ |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 106 | static struct test_case tcase[] = { |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 107 | { /* case00 */ |
| 108 | .policy = MPOL_DEFAULT, |
| 109 | .from_node = NONE, |
| 110 | .ret = 0, |
| 111 | .err = 0, |
| 112 | }, |
| 113 | { /* case01 */ |
| 114 | .policy = MPOL_DEFAULT, |
| 115 | .from_node = SELF, /* target exists */ |
| 116 | .ret = -1, |
| 117 | .err = EINVAL, |
| 118 | }, |
| 119 | { /* case02 */ |
| 120 | .policy = MPOL_BIND, |
| 121 | .from_node = NONE, /* no target */ |
| 122 | .ret = -1, |
| 123 | .err = EINVAL, |
| 124 | }, |
| 125 | { /* case03 */ |
| 126 | .policy = MPOL_BIND, |
| 127 | .from_node = SELF, |
| 128 | .ret = 0, |
| 129 | .err = 0, |
| 130 | }, |
| 131 | { /* case04 */ |
| 132 | .policy = MPOL_INTERLEAVE, |
| 133 | .from_node = NONE, /* no target */ |
| 134 | .ret = -1, |
| 135 | .err = EINVAL, |
| 136 | }, |
| 137 | { /* case05 */ |
| 138 | .policy = MPOL_INTERLEAVE, |
| 139 | .from_node = SELF, |
| 140 | .ret = 0, |
| 141 | .err = 0, |
| 142 | }, |
| 143 | { /* case06 */ |
| 144 | .policy = MPOL_PREFERRED, |
| 145 | .from_node = NONE, |
| 146 | .ret = 0, |
| 147 | .err = 0, |
| 148 | }, |
| 149 | { /* case07 */ |
| 150 | .policy = MPOL_PREFERRED, |
| 151 | .from_node = SELF, |
| 152 | .ret = 0, |
| 153 | .err = 0, |
| 154 | }, |
| 155 | { /* case08 */ |
| 156 | .policy = -1, /* unknown policy */ |
| 157 | .from_node = NONE, |
| 158 | .ret = -1, |
| 159 | .err = EINVAL, |
| 160 | }, |
| 161 | { /* case09 */ |
| 162 | .policy = MPOL_DEFAULT, |
| 163 | .from_node = NONE, |
| 164 | .flags = -1, /* invalid flags */ |
| 165 | .ret = -1, |
| 166 | .err = EINVAL, |
| 167 | }, |
| 168 | { /* case10 */ |
| 169 | .ttype = INVALID_POINTER, |
| 170 | .policy = MPOL_PREFERRED, |
| 171 | .from_node = SELF, |
| 172 | .ret = -1, |
| 173 | .err = EFAULT, |
| 174 | }, |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 175 | }; |
| 176 | |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 177 | static int do_test(struct test_case *tc); |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 178 | static void setup(void); |
| 179 | static void cleanup(void); |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 180 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 181 | int main(int argc, char **argv) |
| 182 | { |
Cyril Hrubis | 0b9589f | 2014-05-27 17:40:33 +0200 | [diff] [blame] | 183 | const char *msg; |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 184 | int lc, i, ret; |
| 185 | |
| 186 | msg = parse_opts(argc, argv, NULL, NULL); |
| 187 | if (msg != NULL) |
| 188 | tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg); |
| 189 | |
| 190 | setup(); |
| 191 | testno = (int)(sizeof(tcase) / sizeof(tcase[0])); |
| 192 | |
| 193 | for (lc = 0; TEST_LOOPING(lc); ++lc) { |
Caspar Zhang | d59a659 | 2013-03-07 14:59:12 +0800 | [diff] [blame] | 194 | tst_count = 0; |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 195 | for (i = 0; i < testno; i++) { |
| 196 | tst_resm(TINFO, "(case%02d) START", i); |
| 197 | ret = do_test(&tcase[i]); |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 198 | tst_resm((ret == 0 ? TPASS : TFAIL | TERRNO), |
| 199 | "(case%02d) END", i); |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 200 | } |
| 201 | } |
| 202 | cleanup(); |
| 203 | tst_exit(); |
| 204 | } |
| 205 | |
| 206 | static int do_test(struct test_case *tc) |
| 207 | { |
| 208 | int ret, err, result, cmp_ok = 1; |
| 209 | int policy; |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 210 | char *p = NULL; |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 211 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
| 212 | nodemask_t *nodemask, *getnodemask; |
| 213 | #else |
| 214 | struct bitmask *nodemask = numa_allocate_nodemask(); |
| 215 | struct bitmask *getnodemask = numa_allocate_nodemask(); |
| 216 | #endif |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 217 | unsigned long maxnode = NUMA_NUM_NODES; |
| 218 | unsigned long len = MEM_LENGTH; |
subrata_modak | 2130b5e | 2009-09-07 09:28:08 +0000 | [diff] [blame] | 219 | unsigned long *invalid_nodemask; |
Jan Stancek | a03a9d9 | 2012-06-28 11:03:16 +0200 | [diff] [blame] | 220 | int test_node = -1; |
| 221 | |
Jan Stancek | d534a44 | 2012-08-09 14:15:38 +0800 | [diff] [blame] | 222 | ret = get_allowed_nodes(NH_MEMS, 1, &test_node); |
| 223 | if (ret < 0) |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 224 | tst_brkm(TBROK | TERRNO, cleanup, "get_allowed_nodes: %d", ret); |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 225 | |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 226 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
| 227 | nodemask = malloc(sizeof(nodemask_t)); |
| 228 | nodemask_zero(nodemask); |
Jan Stancek | a03a9d9 | 2012-06-28 11:03:16 +0200 | [diff] [blame] | 229 | nodemask_set(nodemask, test_node); |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 230 | getnodemask = malloc(sizeof(nodemask_t)); |
| 231 | nodemask_zero(getnodemask); |
| 232 | #else |
Jan Stancek | a03a9d9 | 2012-06-28 11:03:16 +0200 | [diff] [blame] | 233 | numa_bitmask_setbit(nodemask, test_node); |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 234 | #endif |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 235 | p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, |
| 236 | 0, 0); |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 237 | if (p == MAP_FAILED) |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 238 | tst_brkm(TBROK | TERRNO, cleanup, "mmap"); |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 239 | |
Garrett Cooper | df3eb16 | 2010-11-28 22:44:32 -0800 | [diff] [blame] | 240 | if (tc->ttype == INVALID_POINTER) |
subrata_modak | 2130b5e | 2009-09-07 09:28:08 +0000 | [diff] [blame] | 241 | invalid_nodemask = (unsigned long *)0xc0000000; |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 242 | |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 243 | errno = 0; |
| 244 | if (tc->from_node == NONE) |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 245 | TEST(ret = ltp_syscall(__NR_mbind, p, len, tc->policy, |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 246 | NULL, 0, tc->flags)); |
subrata_modak | 2130b5e | 2009-09-07 09:28:08 +0000 | [diff] [blame] | 247 | else if (tc->ttype == INVALID_POINTER) |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 248 | TEST(ret = ltp_syscall(__NR_mbind, p, len, tc->policy, |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 249 | invalid_nodemask, maxnode, tc->flags)); |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 250 | else |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 251 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 252 | TEST(ret = ltp_syscall(__NR_mbind, p, len, tc->policy, |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 253 | nodemask, maxnode, tc->flags)); |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 254 | #else |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 255 | TEST(ret = ltp_syscall(__NR_mbind, p, len, tc->policy, |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 256 | nodemask->maskp, nodemask->size, tc->flags)); |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 257 | #endif |
| 258 | |
| 259 | err = TEST_ERRNO; |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 260 | if (ret < 0) |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 261 | goto TEST_END; |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 262 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 263 | /* Check policy of the allocated memory */ |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 264 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 265 | TEST(ltp_syscall(__NR_get_mempolicy, &policy, getnodemask, |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 266 | maxnode, p, MPOL_F_ADDR)); |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 267 | #else |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 268 | TEST(ltp_syscall(__NR_get_mempolicy, &policy, getnodemask->maskp, |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 269 | getnodemask->size, p, MPOL_F_ADDR)); |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 270 | #endif |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 271 | if (TEST_RETURN < 0) { |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 272 | tst_resm(TFAIL | TERRNO, "get_mempolicy failed"); |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 273 | return -1; |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 274 | } |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 275 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 276 | /* If policy == MPOL_DEFAULT, get_mempolicy doesn't return nodemask */ |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 277 | if (tc->policy == MPOL_DEFAULT) |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 278 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
| 279 | nodemask_zero(nodemask); |
| 280 | #else |
| 281 | numa_bitmask_clearall(nodemask); |
| 282 | #endif |
| 283 | |
subrata_modak | 3c2d60d | 2009-09-07 09:26:42 +0000 | [diff] [blame] | 284 | if ((tc->policy == MPOL_PREFERRED) && (tc->from_node == NONE)) |
| 285 | cmp_ok = (tc->policy == policy); |
| 286 | else |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 287 | cmp_ok = ((tc->policy == policy) && |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 288 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 289 | nodemask_equal(nodemask, getnodemask)); |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 290 | #else |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 291 | numa_bitmask_equal(nodemask, getnodemask)); |
Caspar Zhang | 6e914e0 | 2012-03-09 17:51:35 +0800 | [diff] [blame] | 292 | #endif |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 293 | TEST_END: |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 294 | result = ((err != tc->err) || (!cmp_ok)); |
| 295 | PRINT_RESULT_CMP(0, tc->ret, tc->err, ret, err, cmp_ok); |
yaberauneya | 6eb4bde | 2009-11-04 04:59:44 +0000 | [diff] [blame] | 296 | return result; |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 297 | } |
| 298 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 299 | static void setup(void) |
| 300 | { |
Caspar Zhang | 07e750a | 2012-08-09 18:31:56 +0800 | [diff] [blame] | 301 | /* check syscall availability */ |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 302 | ltp_syscall(__NR_mbind, NULL, 0, 0, NULL, 0, 0); |
Caspar Zhang | 07e750a | 2012-08-09 18:31:56 +0800 | [diff] [blame] | 303 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 304 | TEST_PAUSE; |
| 305 | tst_tmpdir(); |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 306 | } |
| 307 | |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 308 | static void cleanup(void) |
| 309 | { |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 310 | tst_rmdir(); |
subrata_modak | fa09c3a | 2009-06-15 18:36:14 +0000 | [diff] [blame] | 311 | } |
Caspar Zhang | 459abbd | 2012-03-09 17:40:43 +0800 | [diff] [blame] | 312 | #else /* no NUMA */ |
| 313 | int main(void) |
| 314 | { |
| 315 | tst_brkm(TCONF, NULL, "System doesn't have required numa support"); |
yaberauneya | b8b3564 | 2009-12-23 00:13:20 +0000 | [diff] [blame] | 316 | } |
Caspar Zhang | 384b3f5 | 2011-04-25 09:07:37 +0800 | [diff] [blame] | 317 | #endif |