From: Andreas Gustafsson <g...@gson.org> Check for the presence of posix_memalign() in the configure script, not using "defined(_POSIX_C_SOURCE) && !defined(__sun__)". This lets qemu use posix_memalign() on NetBSD versions that have it, instead of falling back to valloc() which is wasteful when the required alignment is smaller than a page.
Signed-off-by: Andreas Gustafsson <g...@gson.org> Signed-off-by: Michael Tokarev <m...@tls.msk.ru> Reviewed-by: Kamil Rytarowski <n...@gmx.com> Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> --- configure | 19 +++++++++++++++++++ util/oslib-posix.c | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/configure b/configure index c1bbf17559..fe9eea9218 100755 --- a/configure +++ b/configure @@ -4659,6 +4659,21 @@ if compile_prog "" "" ; then fi ########################################## +# check if we have posix_memalign() + +posix_memalign=no +cat > $TMPC << EOF +#include <stdlib.h> +int main(void) { + void *p; + return posix_memalign(&p, 8, 8); +} +EOF +if compile_prog "" "" ; then + posix_memalign=yes +fi + +########################################## # check if we have posix_syslog posix_syslog=no @@ -5746,6 +5761,7 @@ echo "preadv support $preadv" echo "fdatasync $fdatasync" echo "madvise $madvise" echo "posix_madvise $posix_madvise" +echo "posix_memalign $posix_memalign" echo "libcap-ng support $cap_ng" echo "vhost-net support $vhost_net" echo "vhost-scsi support $vhost_scsi" @@ -6232,6 +6248,9 @@ fi if test "$posix_madvise" = "yes" ; then echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak fi +if test "$posix_memalign" = "yes" ; then + echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak +fi if test "$spice" = "yes" ; then echo "CONFIG_SPICE=y" >> $config_host_mak diff --git a/util/oslib-posix.c b/util/oslib-posix.c index 77369c92ce..4655bc1f89 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -105,7 +105,7 @@ void *qemu_try_memalign(size_t alignment, size_t size) alignment = sizeof(void*); } -#if defined(_POSIX_C_SOURCE) && !defined(__sun__) +#if defined(CONFIG_POSIX_MEMALIGN) int ret; ret = posix_memalign(&ptr, alignment, size); if (ret != 0) { -- 2.11.0