Date: Sun, 30 Jun 2013 10:54:34 +0200 From: Martin Birgmeier <Martin.Birgmeier@aon.at> To: freebsd-virtualization@freebsd.org Subject: VirtualBox GUI: Fix memory size computation (native implementation of RTSystemQueryTotalRam) Message-ID: <51CFF24A.5010103@aon.at>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------020301080806090508080404 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit VirtualBox on FreeBSD needs an implementation of RTSystemQueryTotalRam. I have put together the attached patches, comments are welcome. Regards, Martin --------------020301080806090508080404 Content-Type: text/plain; charset=ISO-8859-1; name="patch-src-VBox-Runtime-Makefile.kmk" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="patch-src-VBox-Runtime-Makefile.kmk" --- ./src/VBox/Runtime/Makefile.kmk.ORIG 2013-06-21 14:27:18.000000000 +0200 +++ ./src/VBox/Runtime/Makefile.kmk 2013-06-30 09:44:38.000000000 +0200 @@ -844,7 +844,7 @@ r3/posix/RTMemProtect-posix.cpp \ r3/posix/RTPathUserHome-posix.cpp \ r3/posix/RTSystemQueryOSInfo-posix.cpp \ - r3/posix/RTSystemQueryTotalRam-posix.cpp \ + r3/freebsd/RTSystemQueryTotalRam-freebsd.cpp \ r3/posix/RTTimeNow-posix.cpp \ r3/posix/RTTimeSet-posix.cpp \ r3/posix/dir-posix.cpp \ --------------020301080806090508080404 Content-Type: text/plain; charset=ISO-8859-1; name="patch-src-VBox-Runtime-r3-freebsd-RTSystemQueryTotalRam-freebsd.cpp" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="patch-src-VBox-Runtime-r3-freebsd-RTSystemQueryTotalRam-free"; filename*1="bsd.cpp" --- ./src/VBox/Runtime/r3/freebsd/RTSystemQueryTotalRam-freebsd.cpp.ORIG 2013-06-30 09:27:59.000000000 +0200 +++ ./src/VBox/Runtime/r3/freebsd/RTSystemQueryTotalRam-freebsd.cpp 2013-06-30 09:51:29.000000000 +0200 @@ -0,0 +1,80 @@ +/* $Id: RTSystemQueryTotalRam-freebsd.cpp $ */ +/** @file + * IPRT - RTSystemQueryTotalRam, FreeBSD style + */ + +/* + * Copyright (C) 2013 Martin Birgmeier, Oracle Corporation + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) as published by the Free Software + * Foundation, in version 2 as it comes in the "COPYING" file of the + * VirtualBox OSE distribution. VirtualBox OSE is distributed in the + * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL) only, as it comes in the "COPYING.CDDL" file of the + * VirtualBox OSE distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + */ + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#include <iprt/system.h> +#include "internal/iprt.h" + +#include <iprt/err.h> +#include <iprt/assert.h> +#include <iprt/string.h> + +/* FreeBSD */ +#include <sys/types.h> +#include <sys/sysctl.h> +#include <sys/errno.h> + +RTDECL(int) RTSystemQueryTotalRam(uint64_t *pcb) +{ + int mib[2]; + size_t pcblen = sizeof(*pcb); + + AssertPtrReturn(pcb, VERR_INVALID_POINTER); + + mib[0] = CTL_HW; + mib[1] = HW_PHYSMEM; /* HW_REALMEM is also possible, but + includes non-main memory as well */ + *pcb = 0; + if (sysctl(mib, 2, pcb, &pcblen, NULL, 0) == 0) { + if (pcblen == sizeof(*pcb)) + return VINF_SUCCESS; + else + return VERR_NO_MEMORY; /* XXX */ + } + return RTErrConvertFromErrno(errno); +} + +RTDECL(int) RTSystemQueryAvailableRam(uint64_t *pcb) +{ + int mib[2]; + size_t pcblen = sizeof(*pcb); + + AssertPtrReturn(pcb, VERR_INVALID_POINTER); + + mib[0] = CTL_HW; + mib[1] = HW_USERMEM; + *pcb = 0; + if (sysctl(mib, 2, pcb, &pcblen, NULL, 0) == 0) { + if (pcblen == sizeof(*pcb)) + return VINF_SUCCESS; + else + return VERR_NO_MEMORY; /* XXX */ + } + return RTErrConvertFromErrno(errno); +} --------------020301080806090508080404--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51CFF24A.5010103>