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