On 4/15/20 4:35 AM, Jingqi Liu wrote: > Add a pair of configure options --{enable,disable}-libdaxctl to control > whether QEMU is compiled with libdaxctl [1]. Libdaxctl is a utility > library for managing the device dax subsystem. > > QEMU uses mmap(2) to maps vNVDIMM backends and aligns the mapping > address to the page size (getpagesize(2)) by default. However, some > types of backends may require an alignment different than the page > size. The 'align' option is provided to memory-backend-file to allow > users to specify the proper alignment. > > For device dax (e.g., /dev/dax0.0), the 'align' option needs to match > the alignment requirement of the device dax, which can be fetched > through the libdaxctl APIs. > > [1] Libdaxctl is a part of ndctl project. > The project's repository is: https://github.com/pmem/ndctl > > For more information about libdaxctl APIs, you can refer to the > comments in source code of: pmem/ndctl/daxctl/lib/libdaxctl.c. > > Signed-off-by: Jingqi Liu <jingqi....@intel.com> > --- > configure | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/configure b/configure > index e225a1e3ff..df1752cf08 100755 > --- a/configure > +++ b/configure > @@ -509,6 +509,7 @@ libpmem="" > default_devices="yes" > plugins="no" > fuzzing="no" > +libdaxctl="" > > supported_cpu="no" > supported_os="no" > @@ -1601,6 +1602,10 @@ for opt do > ;; > --gdb=*) gdb_bin="$optarg" > ;; > + --enable-libdaxctl) libdaxctl=yes > + ;; > + --disable-libdaxctl) libdaxctl=no > + ;; > *) > echo "ERROR: unknown option $opt" > echo "Try '$0 --help' for more information" > @@ -1894,6 +1899,7 @@ disabled with --disable-FEATURE, default is enabled if > available: > debug-mutex mutex debugging support > libpmem libpmem support > xkbcommon xkbcommon support > + libdaxctl libdaxctl support > > NOTE: The object files are built at the place where configure is launched > EOF > @@ -6190,6 +6196,25 @@ if test "$libpmem" != "no"; then > fi > fi > > +########################################## > +# check for libdaxctl > + > +if test "$libdaxctl" != "no"; then > + if $pkg_config --exists "libdaxctl"; then > + libdaxctl="yes" > + libdaxctl_libs=$($pkg_config --libs libdaxctl) > + libdaxctl_cflags=$($pkg_config --cflags libdaxctl) > + libs_softmmu="$libs_softmmu $libdaxctl_libs" > + QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" > + else > + if test "$libdaxctl" = "yes" ; then > + feature_not_found "libdaxctl" "Install libdaxctl" > + fi
Region iteration APIs, align and path getter routines are only available since libdaxctl v56/v57 (the latest is v68). Not sure how likely this happens in today's distros but if we care about systems with < v57 we should probably check that daxctl_region_foreach/daxctl_region_get_align/daxctl_region_get_path symbols exist? Or alternatively requiring v57 or up which serves as a bandage, but more long term ... any usage of newer daxctl APIs will require the former. > + libdaxctl="no" > + fi > +fi > + > + > ########################################## > # check for slirp > > @@ -6767,6 +6792,7 @@ echo "parallels support $parallels" > echo "sheepdog support $sheepdog" > echo "capstone $capstone" > echo "libpmem support $libpmem" > +echo "libdaxctl support $libdaxctl" > echo "libudev $libudev" > echo "default devices $default_devices" > echo "plugin support $plugins" > @@ -7590,6 +7616,10 @@ if test "$libpmem" = "yes" ; then > echo "CONFIG_LIBPMEM=y" >> $config_host_mak > fi > > +if test "$libdaxctl" = "yes" ; then > + echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak > +fi > + > if test "$bochs" = "yes" ; then > echo "CONFIG_BOCHS=y" >> $config_host_mak > fi >