subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 1 | /******************************************************************************/ |
yaberauneya | c236508 | 2009-11-04 06:18:27 +0000 | [diff] [blame] | 2 | /* Copyright (c) Crackerjack Project., 2007-2008 ,Hitachi, Ltd */ |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +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> */ |
| 6 | /* */ |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 7 | /* This program is free software; you can redistribute it and/or modify */ |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 8 | /* it under the terms of the GNU General Public License as published by */ |
yaberauneya | c236508 | 2009-11-04 06:18:27 +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 | daad27e | 2012-03-09 14:42:49 +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 | c236508 | 2009-11-04 06:18:27 +0000 | [diff] [blame] | 20 | /* */ |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 21 | /******************************************************************************/ |
| 22 | /******************************************************************************/ |
yaberauneya | c236508 | 2009-11-04 06:18:27 +0000 | [diff] [blame] | 23 | /* */ |
| 24 | /* File: get_mempolicy01.c */ |
| 25 | /* */ |
| 26 | /* Description: This tests the get_mempolicy() syscall */ |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 27 | /* */ |
yaberauneya | c236508 | 2009-11-04 06:18:27 +0000 | [diff] [blame] | 28 | /* Usage: <for command-line> */ |
| 29 | /* get_mempolicy01 [-c n] [-e][-i n] [-I x] [-p x] [-t] */ |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 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 | c236508 | 2009-11-04 06:18:27 +0000 | [diff] [blame] | 36 | /* */ |
| 37 | /* Total Tests: 1 */ |
| 38 | /* */ |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 39 | /* Test Name: get_mempolicy01 */ |
| 40 | /* History: Porting from Crackerjack to LTP is done by */ |
| 41 | /* Manas Kumar Nayak maknayak@in.ibm.com> */ |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 42 | /******************************************************************************/ |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 43 | |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 44 | #include "config.h" |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 45 | #include <sys/types.h> |
| 46 | #include <sys/mman.h> |
| 47 | #include <getopt.h> |
| 48 | #include <string.h> |
| 49 | #include <stdlib.h> |
| 50 | #include <errno.h> |
| 51 | #include <stdio.h> |
| 52 | #include <unistd.h> |
| 53 | #include <libgen.h> |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 54 | #if HAVE_NUMA_H |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 55 | #include <numa.h> |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 56 | #endif |
| 57 | #if HAVE_NUMAIF_H |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 58 | #include <numaif.h> |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 59 | #endif |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 60 | #include "test.h" |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 61 | #include "linux_syscall_numbers.h" |
| 62 | #include "include_j_h.h" |
| 63 | #include "common_j_h.c" |
Jan Stancek | d537be8 | 2012-06-28 11:03:17 +0200 | [diff] [blame] | 64 | #include "numa_helper.h" |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 65 | |
Cyril Hrubis | fdce7d5 | 2013-04-04 18:35:48 +0200 | [diff] [blame] | 66 | char *TCID = "get_mempolicy01"; |
| 67 | int TST_TOTAL = 1; |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 68 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 69 | #if HAVE_NUMA_H && HAVE_NUMAIF_H && HAVE_MPOL_CONSTANTS |
Garrett Cooper | 2c28215 | 2010-12-16 00:55:50 -0800 | [diff] [blame] | 70 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 71 | #define MEM_LENGTH (4 * 1024 * 1024) |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 72 | |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 73 | static int testno; |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 74 | |
| 75 | enum test_type { |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 76 | DEFAULT, /* get default policy */ |
| 77 | ADDR, /* get policy of memory which include mapped address */ |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 78 | INVALID_POINTER, |
| 79 | INVALID_FLAGS, |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 80 | }; |
| 81 | |
| 82 | enum from_node { |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 83 | NONE, |
| 84 | SELF, |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 85 | }; |
| 86 | |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 87 | struct test_case { |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 88 | int ttype; |
| 89 | int policy; |
| 90 | int from_node; |
| 91 | int ret; |
| 92 | int err; |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 93 | }; |
| 94 | |
| 95 | /* Test cases |
| 96 | * |
| 97 | * test status of errors on man page |
| 98 | * |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 99 | * (NONE) man page hadn't been completed. |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 100 | * |
| 101 | * test status of errors NOT on man page |
| 102 | * |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 103 | * EFAULT v (invalid address) |
| 104 | * EINVAL v (invalid parameters) |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 105 | */ |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 106 | static struct test_case tcase[] = { |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 107 | { /* case00 */ |
| 108 | .ttype = DEFAULT, |
| 109 | .policy = MPOL_DEFAULT, |
| 110 | .from_node = NONE, |
| 111 | .ret = 0, |
| 112 | .err = 0, |
| 113 | }, |
| 114 | { /* case01 */ |
| 115 | .ttype = DEFAULT, |
| 116 | .policy = MPOL_BIND, |
| 117 | .from_node = SELF, |
| 118 | .ret = 0, |
| 119 | .err = 0, |
| 120 | }, |
| 121 | { /* case02 */ |
| 122 | .ttype = DEFAULT, |
| 123 | .policy = MPOL_INTERLEAVE, |
| 124 | .from_node = SELF, |
| 125 | .ret = 0, |
| 126 | .err = 0, |
| 127 | }, |
| 128 | { /* case03 */ |
| 129 | .ttype = DEFAULT, |
| 130 | .policy = MPOL_PREFERRED, |
| 131 | .from_node = NONE, |
| 132 | .ret = 0, |
| 133 | .err = 0, |
| 134 | }, |
| 135 | { /* case04 */ |
| 136 | .ttype = DEFAULT, |
| 137 | .policy = MPOL_PREFERRED, |
| 138 | .from_node = SELF, |
| 139 | .ret = 0, |
| 140 | .err = 0, |
| 141 | }, |
| 142 | { /* case05 */ |
| 143 | .ttype = ADDR, |
| 144 | .policy = MPOL_DEFAULT, |
| 145 | .from_node = NONE, |
| 146 | .ret = 0, |
| 147 | .err = 0, |
| 148 | }, |
| 149 | { /* case06 */ |
| 150 | .ttype = ADDR, |
| 151 | .policy = MPOL_BIND, |
| 152 | .from_node = SELF, |
| 153 | .ret = 0, |
| 154 | .err = 0, |
| 155 | }, |
| 156 | { /* case07 */ |
| 157 | .ttype = ADDR, |
| 158 | .policy = MPOL_INTERLEAVE, |
| 159 | .from_node = SELF, |
| 160 | .ret = 0, |
| 161 | .err = 0, |
| 162 | }, |
| 163 | { /* case08 */ |
| 164 | .ttype = ADDR, |
| 165 | .policy = MPOL_PREFERRED, |
| 166 | .from_node = NONE, |
| 167 | .ret = 0, |
| 168 | .err = 0, |
| 169 | }, |
| 170 | { /* case09 */ |
| 171 | .ttype = ADDR, |
| 172 | .policy = MPOL_PREFERRED, |
| 173 | .from_node = SELF, |
| 174 | .ret = 0, |
| 175 | .err = 0, |
| 176 | }, |
| 177 | { /* case10 */ |
| 178 | .ttype = INVALID_POINTER, |
| 179 | .policy = MPOL_DEFAULT, |
| 180 | .from_node = NONE, |
| 181 | .ret = -1, |
| 182 | .err = EFAULT, |
| 183 | }, |
| 184 | { /* case11 */ |
| 185 | .ttype = INVALID_FLAGS, |
| 186 | .policy = MPOL_DEFAULT, |
| 187 | .from_node = NONE, |
| 188 | .ret = -1, |
| 189 | .err = EINVAL, |
| 190 | }, |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 191 | }; |
| 192 | |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 193 | static int do_test(struct test_case *tc); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 194 | static void setup(void); |
| 195 | static void cleanup(void); |
| 196 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 197 | int main(int argc, char **argv) |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 198 | { |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 199 | int i, ret, lc; |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 200 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 201 | setup(); |
| 202 | |
| 203 | ret = 0; |
Cyril Hrubis | b863a0b | 2014-09-24 13:15:29 +0200 | [diff] [blame] | 204 | testno = (int)ARRAY_SIZE(tcase); |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 205 | for (lc = 0; TEST_LOOPING(lc); lc++) { |
Caspar Zhang | d59a659 | 2013-03-07 14:59:12 +0800 | [diff] [blame] | 206 | tst_count = 0; |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 207 | |
| 208 | for (i = 0; i < testno; i++) { |
| 209 | tst_resm(TINFO, "(case%02d) START", i); |
| 210 | ret = do_test(&tcase[i]); |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 211 | tst_resm((ret == 0 ? TPASS : TFAIL | TERRNO), |
| 212 | "(case%02d) END", i); |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 213 | } |
| 214 | } |
| 215 | |
| 216 | cleanup(); |
| 217 | tst_exit(); |
| 218 | } |
| 219 | |
| 220 | static int do_test(struct test_case *tc) |
| 221 | { |
| 222 | int ret, err, result, cmp_ok; |
| 223 | int policy, flags; |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 224 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
| 225 | nodemask_t *nodemask, *getnodemask; |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 226 | unsigned long maxnode = NUMA_NUM_NODES; |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 227 | #else |
| 228 | struct bitmask *nodemask = numa_allocate_nodemask(); |
| 229 | struct bitmask *getnodemask = numa_allocate_nodemask(); |
| 230 | #endif |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 231 | char *p = NULL; |
| 232 | unsigned long len = MEM_LENGTH; |
Jan Stancek | d537be8 | 2012-06-28 11:03:17 +0200 | [diff] [blame] | 233 | int test_node = -1; |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 234 | |
Jan Stancek | d534a44 | 2012-08-09 14:15:38 +0800 | [diff] [blame] | 235 | ret = get_allowed_nodes(NH_MEMS, 1, &test_node); |
| 236 | if (ret < 0) |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 237 | tst_brkm(TBROK | TERRNO, cleanup, "get_allowed_nodes: %d", ret); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 238 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
| 239 | nodemask = malloc(sizeof(nodemask_t)); |
| 240 | nodemask_zero(nodemask); |
Jan Stancek | d537be8 | 2012-06-28 11:03:17 +0200 | [diff] [blame] | 241 | nodemask_set(nodemask, test_node); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 242 | getnodemask = malloc(sizeof(nodemask_t)); |
| 243 | nodemask_zero(getnodemask); |
| 244 | #else |
Jan Stancek | d537be8 | 2012-06-28 11:03:17 +0200 | [diff] [blame] | 245 | numa_bitmask_setbit(nodemask, test_node); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 246 | #endif |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 247 | switch (tc->ttype) { |
| 248 | case DEFAULT: |
| 249 | flags = 0; |
| 250 | p = NULL; |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 251 | if (tc->from_node == NONE) |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 252 | TEST(ltp_syscall(__NR_set_mempolicy, tc->policy, |
| 253 | NULL, 0)); |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 254 | else |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 255 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 256 | TEST(ltp_syscall(__NR_set_mempolicy, tc->policy, |
| 257 | nodemask, maxnode)); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 258 | #else |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 259 | TEST(ltp_syscall(__NR_set_mempolicy, tc->policy, |
| 260 | nodemask->maskp, nodemask->size)); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 261 | #endif |
| 262 | if (TEST_RETURN < 0) { |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 263 | tst_resm(TBROK | TERRNO, "set_mempolicy"); |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 264 | return -1; |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 265 | } |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 266 | |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 267 | break; |
| 268 | default: |
| 269 | flags = MPOL_F_ADDR; |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 270 | p = mmap(NULL, len, PROT_READ | PROT_WRITE, |
| 271 | MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 272 | if (p == MAP_FAILED) |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 273 | tst_brkm(TBROK | TERRNO, cleanup, "mmap"); |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 274 | if (tc->from_node == NONE) |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 275 | TEST(ltp_syscall(__NR_mbind, p, len, tc->policy, |
| 276 | NULL, 0, 0)); |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 277 | else |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 278 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 279 | TEST(ltp_syscall(__NR_mbind, p, len, tc->policy, |
| 280 | nodemask, maxnode, 0)); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 281 | #else |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 282 | TEST(ltp_syscall(__NR_mbind, p, len, tc->policy, |
| 283 | nodemask->maskp, nodemask->size, 0)); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 284 | #endif |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 285 | if (TEST_RETURN < 0) { |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 286 | tst_resm(TBROK | TERRNO, "mbind"); |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 287 | return -1; |
| 288 | } |
| 289 | |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 290 | if (tc->ttype == INVALID_POINTER) |
Caspar Zhang | a4bf003 | 2012-03-09 23:24:05 +0800 | [diff] [blame] | 291 | #ifdef __ia64__ |
| 292 | p = (char *)0x8000000000000000UL; |
| 293 | #else |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 294 | p = 0; |
Caspar Zhang | a4bf003 | 2012-03-09 23:24:05 +0800 | [diff] [blame] | 295 | #endif |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 296 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 297 | if (tc->ttype == INVALID_FLAGS) |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 298 | flags = -1; |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 299 | } |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 300 | errno = 0; |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 301 | cmp_ok = 1; |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 302 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 303 | TEST(ret = ltp_syscall(__NR_get_mempolicy, &policy, getnodemask, |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 304 | maxnode, p, flags)); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 305 | #else |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 306 | TEST(ret = ltp_syscall(__NR_get_mempolicy, &policy, getnodemask->maskp, |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 307 | getnodemask->size, p, flags)); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 308 | #endif |
| 309 | err = TEST_ERRNO; |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 310 | if (ret < 0) |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 311 | goto TEST_END; |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 312 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 313 | /* if policy == MPOL_DEFAULT, get_mempolicy doesn't return nodemask */ |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 314 | if (tc->policy == MPOL_DEFAULT) |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 315 | #if !defined(LIBNUMA_API_VERSION) || LIBNUMA_API_VERSION < 2 |
| 316 | nodemask_zero(nodemask); |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 317 | cmp_ok = (tc->policy == policy && (tc->from_node == NONE || |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 318 | nodemask_equal(nodemask, |
| 319 | getnodemask))); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 320 | #else |
| 321 | numa_bitmask_clearall(nodemask); |
| 322 | cmp_ok = (tc->policy == policy && (tc->from_node == NONE || |
Wanlong Gao | 354ebb4 | 2012-12-07 10:10:04 +0800 | [diff] [blame] | 323 | numa_bitmask_equal(nodemask, |
| 324 | getnodemask))); |
Caspar Zhang | f8576b1 | 2012-03-09 16:46:21 +0800 | [diff] [blame] | 325 | #endif |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 326 | TEST_END: |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 327 | result = (err != tc->err) || !cmp_ok; |
| 328 | PRINT_RESULT_CMP(0, tc->ret, tc->err, ret, err, cmp_ok); |
yaberauneya | a95028f | 2009-11-04 04:28:20 +0000 | [diff] [blame] | 329 | return result; |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 330 | } |
| 331 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 332 | static void cleanup(void) |
| 333 | { |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 334 | tst_rmdir(); |
| 335 | } |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 336 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 337 | static void setup(void) |
| 338 | { |
Caspar Zhang | 07e750a | 2012-08-09 18:31:56 +0800 | [diff] [blame] | 339 | /* check syscall availability */ |
Jan Stancek | 359980f | 2013-02-15 10:16:05 +0100 | [diff] [blame] | 340 | ltp_syscall(__NR_get_mempolicy, NULL, NULL, 0, NULL, 0); |
Caspar Zhang | 07e750a | 2012-08-09 18:31:56 +0800 | [diff] [blame] | 341 | |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 342 | TEST_PAUSE; |
| 343 | tst_tmpdir(); |
subrata_modak | e63f96b | 2009-05-29 10:29:58 +0000 | [diff] [blame] | 344 | } |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 345 | #else |
Caspar Zhang | daad27e | 2012-03-09 14:42:49 +0800 | [diff] [blame] | 346 | int main(void) |
| 347 | { |
Garrett Cooper | 5374050 | 2010-12-16 00:04:01 -0800 | [diff] [blame] | 348 | tst_brkm(TCONF, NULL, "System doesn't have required numa support"); |
yaberauneya | c6fed3d | 2009-12-23 00:05:33 +0000 | [diff] [blame] | 349 | } |
Garrett Cooper | e683a86 | 2010-12-20 12:51:50 -0800 | [diff] [blame] | 350 | #endif |