Fixed mbind bug on Loongson 3B. Check the return value of my_mbind function.

This commit is contained in:
Xianyi Zhang 2011-11-23 17:17:41 +00:00
parent 285e69e2d1
commit ef6f7f32ae
2 changed files with 8 additions and 3 deletions

View File

@ -68,9 +68,13 @@ extern long int syscall (long int __sysno, ...);
static inline int my_mbind(void *addr, unsigned long len, int mode,
unsigned long *nodemask, unsigned long maxnode,
unsigned flags) {
#if defined (LOONGSON3B)
return syscall(SYS_mbind, addr, len, mode, nodemask, maxnode, flags);
#else
//Fixed randomly SEGFAULT when nodemask==NULL with above Linux 2.6.34
unsigned long null_nodemask=0;
return syscall(SYS_mbind, addr, len, mode, &null_nodemask, maxnode, flags);
#endif
}
static inline int my_set_mempolicy(int mode, const unsigned long *addr, unsigned long flag) {

View File

@ -389,12 +389,13 @@ static void *alloc_mmap(void *address){
if (map_address != (void *)-1) {
#ifdef OS_LINUX
#ifdef DEBUG
int ret;
#if 1
//#ifdef DEBUG
int ret=0;
ret=my_mbind(map_address, BUFFER_SIZE * SCALING, MPOL_PREFERRED, NULL, 0, 0);
if(ret==-1){
int errsv=errno;
perror("alloc_mmap:");
perror("OpenBLAS alloc_mmap:");
printf("error code=%d,\tmap_address=%lx\n",errsv,map_address);
}