1c7a14a6f24c0246364085a047d96afc2faae00acrobbiew/*************************************************************************** 2c7a14a6f24c0246364085a047d96afc2faae00acrobbiew HTaffinity.c - description 3c7a14a6f24c0246364085a047d96afc2faae00acrobbiew ------------------- 4c7a14a6f24c0246364085a047d96afc2faae00acrobbiew email : sonic,zhang@intel.com 5c7a14a6f24c0246364085a047d96afc2faae00acrobbiew ***************************************************************************/ 6c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 7c7a14a6f24c0246364085a047d96afc2faae00acrobbiew/*************************************************************************** 8c7a14a6f24c0246364085a047d96afc2faae00acrobbiew * * 9c7a14a6f24c0246364085a047d96afc2faae00acrobbiew * This program is free software; you can redistribute it and/or modify * 10c7a14a6f24c0246364085a047d96afc2faae00acrobbiew * it under the terms of the GNU General Public License as published by * 11c7a14a6f24c0246364085a047d96afc2faae00acrobbiew * the Free Software Foundation; either version 2 of the License, or * 12c7a14a6f24c0246364085a047d96afc2faae00acrobbiew * (at your option) any later version. * 13c7a14a6f24c0246364085a047d96afc2faae00acrobbiew * * 14c7a14a6f24c0246364085a047d96afc2faae00acrobbiew ***************************************************************************/ 15ef77253961f909f87e82e6d2b620e87af33e9665yaberauneya#include "ht_utils.h" 16c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#include <sys/syscall.h> 17c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#include <sys/types.h> 18c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#include <unistd.h> 19f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak#include <sys/wait.h> 20c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#include <stdio.h> 21c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#include <stdlib.h> 22c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#include <string.h> 23c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#include "test.h" 24c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 25fbac41af9f2c5e34864b71f0eb94cdb3a2c08038subrata_modakchar *TCID = "smt_smp_affinity"; 26c7a14a6f24c0246364085a047d96afc2faae00acrobbiewint TST_TOTAL = 3; 27c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 28c7a14a6f24c0246364085a047d96afc2faae00acrobbiew/************************************************************************************ 29c7a14a6f24c0246364085a047d96afc2faae00acrobbiewint set_affinity(pid_t pid, unsigned int len, unsigned long *mask_ptr) 30c7a14a6f24c0246364085a047d96afc2faae00acrobbiewpid - pid of the process whose affinity is desired to be set. 31c7a14a6f24c0246364085a047d96afc2faae00acrobbiewmask_ptr - pointer to the new cpu_affinity_mask. 32c7a14a6f24c0246364085a047d96afc2faae00acrobbiewlen - length in bytes of the bitmask pointed to by user_mask_ptr. 33c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 34c7a14a6f24c0246364085a047d96afc2faae00acrobbiewint get_affinity(pid_t pid, unsigned int len, unsigned long *mask_ptr) 35c7a14a6f24c0246364085a047d96afc2faae00acrobbiewpid - pid of the process whose affinity is being read. 36c7a14a6f24c0246364085a047d96afc2faae00acrobbiewmask_ptr pointer to store the current affinity information. 37c7a14a6f24c0246364085a047d96afc2faae00acrobbiewlen - length in bytes of the bitmask pointed to by user_mask_ptr. 38c7a14a6f24c0246364085a047d96afc2faae00acrobbiew************************************************************************************/ 39c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 40c7a14a6f24c0246364085a047d96afc2faae00acrobbiew//Any application program can invoke these system call using sched_setaffinity() and sched_getaffinity(), 41c7a14a6f24c0246364085a047d96afc2faae00acrobbiew//with the syntax mentioned in the previous section, after declaring the interface as: 4263f55aa0948d60f8cbe6ddf45f0731f4d7c8136avapier 4363f55aa0948d60f8cbe6ddf45f0731f4d7c8136avapier#define sched_setaffinity(pid, cpusetsize, mask) syscall(__NR_sched_setaffinity, pid, cpusetsize, mask) 4463f55aa0948d60f8cbe6ddf45f0731f4d7c8136avapier#define sched_getaffinity(pid, cpusetsize, mask) syscall(__NR_sched_getaffinity, pid, cpusetsize, mask) 45c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 46c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#define AFFINITY_NAME "affinity" 47c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#define PROCFS_PATH "/proc/" 48c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 49c7a14a6f24c0246364085a047d96afc2faae00acrobbiewint HT_SetAffinity() 50c7a14a6f24c0246364085a047d96afc2faae00acrobbiew{ 51f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak unsigned int mask; 52c7a14a6f24c0246364085a047d96afc2faae00acrobbiew pid_t pid; 53354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int result = 1; 54c7a14a6f24c0246364085a047d96afc2faae00acrobbiew int cpu_count, i, j, k, cpuid; 55c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 56354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao pid = getpid(); 57c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 58befdb9871ca29fab80453284469ba5fc825ddb49subrata_modak tst_resm(TINFO, "Set affinity through system call"); 59c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 60354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao cpu_count = get_cpu_count(); 61354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (cpu_count == 0) { 62354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao return 0; 63354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else if (cpu_count > 32) 64354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao cpu_count = 32; 65c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 66354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0, mask = 0x1; i < cpu_count; i++, mask = mask << 1) { 67c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_resm(TINFO, "Set test process affinity."); 68354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("mask: %x\n", mask); 69c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 70c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sched_setaffinity(pid, sizeof(unsigned long), &mask); 71c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 72354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (j = 0; j < 10; j++) { 73354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (k = 0; k < 10; k++) { 74354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (fork() == 0) { 75c7a14a6f24c0246364085a047d96afc2faae00acrobbiew system("ps > /dev/null"); 76c7a14a6f24c0246364085a047d96afc2faae00acrobbiew exit(0); 77c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 78c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 79c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 80c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sleep(1); 81c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 82354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (get_current_cpu(pid) != i) 83c7a14a6f24c0246364085a047d96afc2faae00acrobbiew break; 84c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 85c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (j < 10) { 87befdb9871ca29fab80453284469ba5fc825ddb49subrata_modak tst_resm(TINFO, "...Error"); 88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao result = 0; 89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else 90befdb9871ca29fab80453284469ba5fc825ddb49subrata_modak tst_resm(TINFO, "...OK"); 91c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 92c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 93c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0, mask = 0x3; i < cpu_count - 1; i++, mask = mask << 1) { 95c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_resm(TINFO, "Set test process affinity."); 96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("mask: %x\n", mask); 97c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 98c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sched_setaffinity(pid, sizeof(unsigned long), &mask); 99c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (j = 0; j < 10; j++) { 101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (k = 0; k < 10; k++) { 102354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (fork() == 0) { 103c7a14a6f24c0246364085a047d96afc2faae00acrobbiew system("ps > /dev/null"); 104c7a14a6f24c0246364085a047d96afc2faae00acrobbiew exit(0); 105c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 106c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 107c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 108c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sleep(1); 109c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao cpuid = get_current_cpu(pid); 111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (cpuid != i && cpuid != i + 1) 112c7a14a6f24c0246364085a047d96afc2faae00acrobbiew break; 113c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 114c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (j < 10) { 116befdb9871ca29fab80453284469ba5fc825ddb49subrata_modak tst_resm(TINFO, "...Error"); 117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao result = 0; 118354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else 119befdb9871ca29fab80453284469ba5fc825ddb49subrata_modak tst_resm(TINFO, "...OK"); 120c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 121c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 122c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 123df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (result) 124c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 1; 125c7a14a6f24c0246364085a047d96afc2faae00acrobbiew else 126c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 0; 127c7a14a6f24c0246364085a047d96afc2faae00acrobbiew} 128c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 129c7a14a6f24c0246364085a047d96afc2faae00acrobbiewunsigned long get_porc_affinity(pid_t pid) 130c7a14a6f24c0246364085a047d96afc2faae00acrobbiew{ 131c7a14a6f24c0246364085a047d96afc2faae00acrobbiew FILE *pfile; 132c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 133c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sprintf(buf, "%s%d/%s%c", PROCFS_PATH, pid, AFFINITY_NAME, 0); 134c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((pfile = fopen(buf, "r")) == NULL) 136c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 0; 137c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (fgets(buf, 255, pfile) == NULL) { 139c7a14a6f24c0246364085a047d96afc2faae00acrobbiew fclose(pfile); 140c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 0; 141c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 142c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 143c7a14a6f24c0246364085a047d96afc2faae00acrobbiew fclose(pfile); 144c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 145c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return atol(buf); 146c7a14a6f24c0246364085a047d96afc2faae00acrobbiew} 147c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 148c7a14a6f24c0246364085a047d96afc2faae00acrobbiewint HT_GetAffinity() 149c7a14a6f24c0246364085a047d96afc2faae00acrobbiew{ 150f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak unsigned int mask[2], mask1[2]; 151c7a14a6f24c0246364085a047d96afc2faae00acrobbiew pid_t pid; 152c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 153f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak mask[0] = 0x1; 154f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak pid = getpid(); 155c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 156befdb9871ca29fab80453284469ba5fc825ddb49subrata_modak tst_resm(TINFO, "Get affinity through system call"); 157c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 158f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak sched_setaffinity(pid, sizeof(mask), mask); 159c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 160c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sleep(1); 161c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 162f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak sched_getaffinity(pid, sizeof(mask), mask1); 163c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 164354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (mask[0] == 0x1 && mask[0] == mask1[0]) { 165f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak mask[0] = 0x2; 166f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak sched_setaffinity(pid, sizeof(mask), mask); 167c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 168c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sleep(1); 169c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 170f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak sched_getaffinity(pid, sizeof(mask), mask1); 171c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 172f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak if (mask[0] == 0x2 && mask[0] == mask1[0]) 173c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 1; 174c7a14a6f24c0246364085a047d96afc2faae00acrobbiew else 175c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 0; 176354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else 177c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 0; 178c7a14a6f24c0246364085a047d96afc2faae00acrobbiew} 179c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 180c7a14a6f24c0246364085a047d96afc2faae00acrobbiewint HT_InheritAffinity() 181c7a14a6f24c0246364085a047d96afc2faae00acrobbiew{ 182f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak unsigned int mask[2]; 183c7a14a6f24c0246364085a047d96afc2faae00acrobbiew pid_t pid; 184f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak int status; 185f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak mask[0] = 0x2; 186f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak pid = getpid(); 187c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 188f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak sched_setaffinity(pid, sizeof(mask), mask); 189c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 190c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sleep(1); 191f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak pid = fork(); 192354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (pid == 0) { 193c7a14a6f24c0246364085a047d96afc2faae00acrobbiew sleep(1); 194f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak sched_getaffinity(pid, sizeof(mask), mask); 195f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak if (mask[0] == 0x2) 196f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak exit(0); 197c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 198f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak else 199f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak exit(1); 200f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak } else if (pid < 0) { 201befdb9871ca29fab80453284469ba5fc825ddb49subrata_modak tst_resm(TINFO, "Inherit affinity:fork failed!"); 202f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak return 0; 203f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak } 204f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak waitpid(pid, &status, 0); 205c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 206f1de0dbc4f8dc1cd022903a1a9734f809041e292subrata_modak if (WEXITSTATUS(status) == 0) { 207befdb9871ca29fab80453284469ba5fc825ddb49subrata_modak tst_resm(TINFO, "Inherited affinity from parent process"); 208c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 1; 209354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else 210c7a14a6f24c0246364085a047d96afc2faae00acrobbiew return 0; 211c7a14a6f24c0246364085a047d96afc2faae00acrobbiew} 212c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 213c7a14a6f24c0246364085a047d96afc2faae00acrobbiew// return 0 means Pass, return 1 means Fail 214c7a14a6f24c0246364085a047d96afc2faae00acrobbiewint main(int argc, char *argv[]) 215c7a14a6f24c0246364085a047d96afc2faae00acrobbiew{ 216c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 2178b0ca7e9a5e7dcab8d7cbad0b6f0c808798bdc53Garrett Cooper#if (!defined __i386__ && !defined __x86_64__) 218354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TCONF, NULL, 219354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "This test suite can only execute on x86 architecture."); 220c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#else 221354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (!check_ht_capability()) { 222c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 223df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (HT_GetAffinity()) 224c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_resm(TPASS, "System call getaffinity() is OK."); 225c7a14a6f24c0246364085a047d96afc2faae00acrobbiew else 226c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_resm(TFAIL, "System call getaffinity() is error."); 227c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 228c7a14a6f24c0246364085a047d96afc2faae00acrobbiew printf("\n"); 229c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 230df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (HT_InheritAffinity()) 231c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_resm(TPASS, "Inheritance of affinity is OK."); 232c7a14a6f24c0246364085a047d96afc2faae00acrobbiew else 233c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_resm(TFAIL, "Inheritance of affinity is error."); 234c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 235c7a14a6f24c0246364085a047d96afc2faae00acrobbiew printf("\n"); 236c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 237df3eb16e38c6a163b0a7367c885679eed6140964Garrett Cooper if (HT_SetAffinity()) 238c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_resm(TPASS, "System call setaffinity() is OK."); 239c7a14a6f24c0246364085a047d96afc2faae00acrobbiew else 240c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_resm(TFAIL, "System call setaffinity() is error."); 241354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else { 242c7a14a6f24c0246364085a047d96afc2faae00acrobbiew tst_brkm(TCONF, NULL, "HT is not enabled or not supported."); 243c7a14a6f24c0246364085a047d96afc2faae00acrobbiew } 244c7a14a6f24c0246364085a047d96afc2faae00acrobbiew#endif 245c7a14a6f24c0246364085a047d96afc2faae00acrobbiew 2462c28215423293e443469a07ae7011135d058b671Garrett Cooper tst_exit(); 247ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 248