[Qemu-devel] [PATCH] oslib-posix: check for posix_memalign in configure script

Andreas Gustafsson posted 1 patch 7 years, 9 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/23118.26328.811644.330716@guava.gson.org
Test checkpatch passed
Test docker passed
Test ppc passed
Test s390x passed
configure          | 19 +++++++++++++++++++
util/oslib-posix.c |  2 +-
2 files changed, 20 insertions(+), 1 deletion(-)
[Qemu-devel] [PATCH] oslib-posix: check for posix_memalign in configure script
Posted by Andreas Gustafsson 7 years, 9 months ago
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 <gson@gson.org>
---
 configure          | 19 +++++++++++++++++++
 util/oslib-posix.c |  2 +-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/configure b/configure
index 100309c33f..9f8580332a 100755
--- a/configure
+++ b/configure
@@ -4573,6 +4573,21 @@ if compile_prog "" "" ; then
     posix_madvise=yes
 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
 
@@ -5542,6 +5557,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"
@@ -6015,6 +6031,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.15.1


Re: [Qemu-devel] [PATCH] oslib-posix: check for posix_memalign in configure script
Posted by Kamil Rytarowski 7 years, 9 months ago
On 04.01.2018 18:39, Andreas Gustafsson wrote:
> 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 <gson@gson.org>

Reviewed-by: Kamil Rytarowski <n54@gmx.com>

> ---
>  configure          | 19 +++++++++++++++++++
>  util/oslib-posix.c |  2 +-
>  2 files changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/configure b/configure
> index 100309c33f..9f8580332a 100755
> --- a/configure
> +++ b/configure
> @@ -4573,6 +4573,21 @@ if compile_prog "" "" ; then
>      posix_madvise=yes
>  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
>  
> @@ -5542,6 +5557,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"
> @@ -6015,6 +6031,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) {
> 


Re: [Qemu-devel] [PATCH] oslib-posix: check for posix_memalign in configure script
Posted by Peter Maydell 7 years, 9 months ago
On 4 January 2018 at 17:39, Andreas Gustafsson <gson@gson.org> wrote:
> 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 <gson@gson.org>
> ---
>  configure          | 19 +++++++++++++++++++
>  util/oslib-posix.c |  2 +-
>  2 files changed, 20 insertions(+), 1 deletion(-)

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

Can we put this through the -trivial tree? (cc'd)

thanks
-- PMM

Re: [Qemu-devel] [PATCH] oslib-posix: check for posix_memalign in configure script
Posted by Michael Tokarev 7 years, 8 months ago
04.01.2018 20:39, Andreas Gustafsson wrote:
> 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.

Applied to -trivial, thanks!

/mjt