diff mbox series

[7/9] util: Use meson checks for valloc() and memalign() presence

Message ID 20220226180723.1706285-8-peter.maydell@linaro.org
State Superseded
Headers show
Series Cleanup of qemu_oom_check() and qemu_memalign() | expand

Commit Message

Peter Maydell Feb. 26, 2022, 6:07 p.m. UTC
Instead of assuming that all CONFIG_BSD have valloc() and anything
else is memalign(), explicitly check for those functions in
meson.build and use the "is the function present" define.  Tests for
specific functionality are better than which-OS checks; this also
lets us give a helpful error message if somehow there's no usable
function present.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 meson.build     | 2 ++
 util/memalign.c | 8 ++++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

Comments

Richard Henderson Feb. 27, 2022, 12:58 a.m. UTC | #1
On 2/26/22 08:07, Peter Maydell wrote:
> Instead of assuming that all CONFIG_BSD have valloc() and anything
> else is memalign(), explicitly check for those functions in
> meson.build and use the "is the function present" define.  Tests for
> specific functionality are better than which-OS checks; this also
> lets us give a helpful error message if somehow there's no usable
> function present.
> 
> Signed-off-by: Peter Maydell<peter.maydell@linaro.org>
> ---
>   meson.build     | 2 ++
>   util/memalign.c | 8 ++++++--
>   2 files changed, 8 insertions(+), 2 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~
Philippe Mathieu-Daudé Feb. 28, 2022, 11:56 p.m. UTC | #2
On 26/2/22 19:07, Peter Maydell wrote:
> Instead of assuming that all CONFIG_BSD have valloc() and anything
> else is memalign(), explicitly check for those functions in
> meson.build and use the "is the function present" define.  Tests for
> specific functionality are better than which-OS checks; this also
> lets us give a helpful error message if somehow there's no usable
> function present.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>   meson.build     | 2 ++
>   util/memalign.c | 8 ++++++--
>   2 files changed, 8 insertions(+), 2 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
diff mbox series

Patch

diff --git a/meson.build b/meson.build
index 21511d4fb61..1c44198ebda 100644
--- a/meson.build
+++ b/meson.build
@@ -1610,6 +1610,8 @@  config_host_data.set('CONFIG_POSIX_FALLOCATE', cc.has_function('posix_fallocate'
 # thinking that Windows has posix_memalign()
 config_host_data.set('CONFIG_POSIX_MEMALIGN', cc.has_function('posix_memalign', prefix: '#include <stdlib.h>'))
 config_host_data.set('CONFIG_ALIGNED_MALLOC', cc.has_function('_aligned_malloc'))
+config_host_data.set('CONFIG_VALLOC', cc.has_function('valloc'))
+config_host_data.set('CONFIG_MEMALIGN', cc.has_function('memalign'))
 config_host_data.set('CONFIG_PPOLL', cc.has_function('ppoll'))
 config_host_data.set('CONFIG_PREADV', cc.has_function('preadv', prefix: '#include <sys/uio.h>'))
 config_host_data.set('CONFIG_SEM_TIMEDWAIT', cc.has_function('sem_timedwait', dependencies: threads))
diff --git a/util/memalign.c b/util/memalign.c
index ee3393cc601..fc8228bffb5 100644
--- a/util/memalign.c
+++ b/util/memalign.c
@@ -25,6 +25,8 @@ 
  */
 
 #include "qemu/osdep.h"
+#include "qemu/host-utils.h"
+#include "trace.h"
 
 void *qemu_try_memalign(size_t alignment, size_t size)
 {
@@ -50,10 +52,12 @@  void *qemu_try_memalign(size_t alignment, size_t size)
     } else {
         ptr = NULL;
     }
-#elif defined(CONFIG_BSD)
+#elif defined(CONFIG_VALLOC)
     ptr = valloc(size);
-#else
+#elif defined(CONFIG_MEMALIGN)
     ptr = memalign(alignment, size);
+#else
+    #error No function to allocate aligned memory available
 #endif
     trace_qemu_memalign(alignment, size, ptr);
     return ptr;