blob: 3991955f113170fff41cca5b74893691966a10c1 [file] [log] [blame]
/******************************************************************************/
/* */
/* Copyright (c) International Business Machines Corp., 2007 */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */
/* the GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
/* */
/******************************************************************************/
/******************************************************************************/
/* */
/* File: support_numa.c */
/* */
/* Description: Allocates 1MB of memory and touches it to verify numa */
/* */
/* Author: Sivakumar Chinnaiah Sivakumar.C@in.ibm.com */
/* */
/* History: Created - Jul 18 2007 - Sivakumar Chinnaiah */
/* Sivakumar.C@in.ibm.com */
/* */
/******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <limits.h>
#include <string.h>
#include "test.h"
/* Global Variables */
#define MB (1<<20)
#define PAGE_SIZE getpagesize()
#define barrier() __asm__ __volatile__("": : :"memory")
/* Extern Global Variables */
extern int tst_count; /* to avoid compilation errors. */
extern char *TESTDIR; /* to avoid compilation errors. */
/* Global Variables */
char *TCID = "support_numa"; /* to avoid compilation errors. */
int TST_TOTAL = 1; /* to avoid compilation errors. */
void sigfunc(int sig)
{
tst_resm(TINFO, "#Caught signal signum=%d", sig);
}
/******************************************************************************/
/* */
/* Function: main */
/* */
/* Description: Alloctes 1MB of memory and touches it to verify numa behaviour*/
/* */
/* Input: Describe input arguments to this program */
/* argv[1] ==1 then print pagesize */
/* argv[1] ==2 then allocate 1MB of memory */
/* argv[1] ==3 then pause the program to catch sigint */
/* */
/* Exit: On failure - Exits with non-zero value. */
/* On success - exits with 0 exit value. */
/* */
/******************************************************************************/
int main(int argc, char *argv[])
{
int i;
char *buf = NULL;
int count = 0;
struct sigaction sa;
switch (atoi(argv[1])) {
case 1:
printf("%d", PAGE_SIZE);
tst_exit();
case 2:
buf = malloc(MB);
if (!buf) {
tst_resm(TINFO, "#Memory is not available\n");
tst_exit();
exit(2);
}
for (i = 0; i < MB; i += PAGE_SIZE) {
count++;
buf[i] = 'a';
barrier();
}
free(buf);
tst_exit();
case 3:
/* Trap SIGINT */
sa.sa_handler = sigfunc;
sa.sa_flags = SA_RESTART;
sigemptyset(&sa.sa_mask);
if (sigaction(SIGINT, &sa, 0) < 0) {
tst_brkm(TBROK, NULL, "#Sigaction SIGINT failed\n");
tst_exit();
exit(1);
}
/* wait for signat Int */
pause();
tst_exit();
default:
exit(1);
}
}