mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
nodeinfo: fix physical memory size on Mac OS X
HW_PHYSMEM is available on Mac OS X as well as FreeBSD, however, its resulting value for Mac OS X is 32 bits. Mac OS X provides HW_MEMSIZE that is 64 bits version of HW_PHYSMEM. We have to use it. I tested the patch on Mac OS X 10.6.8, 10.7.4, 10.8.5 and FreeBSD 9.2. Signed-off-by: Ryota Ozaki <ozaki.ryota@gmail.com>
This commit is contained in:
parent
69e047ae21
commit
ae6b5da3d1
@ -73,6 +73,33 @@ appleFreebsdNodeGetCPUCount(void)
|
|||||||
|
|
||||||
return ncpu;
|
return ncpu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* VIR_HW_PHYSMEM - the resulting value of HW_PHYSMEM of FreeBSD
|
||||||
|
* is 64 bits while that of Mac OS X is still 32 bits.
|
||||||
|
* Mac OS X provides HW_MEMSIZE for 64 bits version of HW_PHYSMEM
|
||||||
|
* since 10.6.8 (Snow Leopard) at least.
|
||||||
|
*/
|
||||||
|
# ifdef HW_MEMSIZE
|
||||||
|
# define VIR_HW_PHYSMEM HW_MEMSIZE
|
||||||
|
# else
|
||||||
|
# define VIR_HW_PHYSMEM HW_PHYSMEM
|
||||||
|
# endif
|
||||||
|
static int
|
||||||
|
appleFreebsdNodeGetMemorySize(unsigned long *memory)
|
||||||
|
{
|
||||||
|
int mib[2] = { CTL_HW, VIR_HW_PHYSMEM };
|
||||||
|
unsigned long physmem;
|
||||||
|
size_t len = sizeof(physmem);
|
||||||
|
|
||||||
|
if (sysctl(mib, 2, &physmem, &len, NULL, 0) == -1) {
|
||||||
|
virReportSystemError(errno, "%s", _("cannot obtain memory size"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*memory = (unsigned long)(physmem / 1024);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
@ -914,17 +941,8 @@ cleanup:
|
|||||||
nodeinfo->mhz = cpu_freq / 1000000;
|
nodeinfo->mhz = cpu_freq / 1000000;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* get memory information */
|
if (appleFreebsdNodeGetMemorySize(&nodeinfo->memory) < 0)
|
||||||
int mib[2] = { CTL_HW, HW_PHYSMEM };
|
|
||||||
unsigned long physmem;
|
|
||||||
size_t len = sizeof(physmem);
|
|
||||||
|
|
||||||
if (sysctl(mib, 2, &physmem, &len, NULL, 0) == -1) {
|
|
||||||
virReportSystemError(errno, "%s", _("cannot obtain memory size"));
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
|
|
||||||
nodeinfo->memory = (unsigned long)(physmem / 1024);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user