Commit ad06ef0e authored by Alex Bennée's avatar Alex Bennée
Browse files

util: add qemu_get_host_physmem utility function



This will be used in a future patch. For POSIX systems _SC_PHYS_PAGES
isn't standardised but at least appears in the man pages for
Open/FreeBSD. The result is advisory so any users of it shouldn't just
fail if we can't work it out.

The win32 stub currently returns 0 until someone with a Windows system
can develop and test a patch.

Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
Cc: BALATON Zoltan <balaton@eik.bme.hu>
Cc: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Message-Id: <20200724064509.331-5-alex.bennee@linaro.org>
parent 7d2d6522
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -668,4 +668,16 @@ static inline void qemu_reset_optind(void)
 */
char *qemu_get_host_name(Error **errp);

/**
 * qemu_get_host_physmem:
 *
 * Operating system agnostic way of querying host memory.
 *
 * Returns amount of physical memory on the system. This is purely
 * advisery and may return 0 if we can't work it out. At the other
 * end we saturate to SIZE_MAX if you are lucky enough to have that
 * much memory.
 */
size_t qemu_get_host_physmem(void);

#endif
+15 −0
Original line number Diff line number Diff line
@@ -841,3 +841,18 @@ char *qemu_get_host_name(Error **errp)

    return g_steal_pointer(&hostname);
}

size_t qemu_get_host_physmem(void)
{
#ifdef _SC_PHYS_PAGES
    long pages = sysconf(_SC_PHYS_PAGES);
    if (pages > 0) {
        if (pages > SIZE_MAX / qemu_real_host_page_size) {
            return SIZE_MAX;
        } else {
            return pages * qemu_real_host_page_size;
        }
    }
#endif
    return 0;
}
+6 −0
Original line number Diff line number Diff line
@@ -828,3 +828,9 @@ char *qemu_get_host_name(Error **errp)

    return g_utf16_to_utf8(tmp, size, NULL, NULL, NULL);
}

size_t qemu_get_host_physmem(void)
{
    /* currently unimplemented */
    return 0;
}