On Fri, Jul 17, 2020 at 3:32 PM BALATON Zoltan <bala...@eik.bme.hu> wrote:
> On Fri, 17 Jul 2020, Alex Bennée wrote: > > 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: Alex Bennée <alex.ben...@linaro.org> > > Cc: BALATON Zoltan <bala...@eik.bme.hu> > > Cc: Christian Ehrhardt <christian.ehrha...@canonical.com> > > --- > > include/qemu/osdep.h | 10 ++++++++++ > > util/oslib-posix.c | 11 +++++++++++ > > util/oslib-win32.c | 6 ++++++ > > 3 files changed, 27 insertions(+) > > > > diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h > > index 4841b5c6b5f..7ff209983e2 100644 > > --- a/include/qemu/osdep.h > > +++ b/include/qemu/osdep.h > > @@ -665,4 +665,14 @@ static inline void qemu_reset_optind(void) > > */ > > char *qemu_get_host_name(Error **errp); > > > > +/** > > + * qemu_get_host_physmem: > > + * > > + * Operating system agnostiv way of querying host memory. > > Typo: agnostiv -> agnostic > > > + * > > + * Returns amount of physical memory on the system. This is purely > > + * advisery and may return 0 if we can't work it out. > > + */ > > +size_t qemu_get_host_physmem(void); > > + > > #endif > > diff --git a/util/oslib-posix.c b/util/oslib-posix.c > > index 36bf8593f8c..d9da782b896 100644 > > --- a/util/oslib-posix.c > > +++ b/util/oslib-posix.c > > @@ -839,3 +839,14 @@ 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) { > > + return pages * qemu_real_host_page_size; > > The Linux man page warns that this product may overflow so maybe you could > return pages here. > The caller might be even less aware of that than this function - so maybe better handle it here. How about handling overflows and cutting it to MiB before returning? > > + } > > +#endif > > + return 0; > > +} > > diff --git a/util/oslib-win32.c b/util/oslib-win32.c > > index 7eedbe5859a..31030463cc9 100644 > > --- a/util/oslib-win32.c > > +++ b/util/oslib-win32.c > > @@ -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; > > +} > > For Windows this may help: > > https://stackoverflow.com/questions/5553665/get-ram-system-size > > not sure about other OSes. > > Regards, > BALATON Zoltan -- Christian Ehrhardt Staff Engineer, Ubuntu Server Canonical Ltd