From patchwork Fri Feb 16 08:46:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haozhong Zhang X-Patchwork-Id: 10224199 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 6A22960231 for ; Fri, 16 Feb 2018 08:52:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5F91D22376 for ; Fri, 16 Feb 2018 08:52:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 544142933B; Fri, 16 Feb 2018 08:52:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id AAFBF22376 for ; Fri, 16 Feb 2018 08:52:13 +0000 (UTC) Received: from localhost ([::1]:52561 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1embka-0000Ot-S3 for patchwork-qemu-devel@patchwork.kernel.org; Fri, 16 Feb 2018 03:52:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44432) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1embfe-0004LQ-FO for qemu-devel@nongnu.org; Fri, 16 Feb 2018 03:47:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1embfd-0001Go-7X for qemu-devel@nongnu.org; Fri, 16 Feb 2018 03:47:06 -0500 Received: from mga17.intel.com ([192.55.52.151]:12665) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1embfc-0001Da-Uj for qemu-devel@nongnu.org; Fri, 16 Feb 2018 03:47:05 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Feb 2018 00:47:04 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,519,1511856000"; d="scan'208";a="28535506" Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.13.35]) by orsmga003.jf.intel.com with ESMTP; 16 Feb 2018 00:47:02 -0800 From: Haozhong Zhang To: qemu-devel@nongnu.org Date: Fri, 16 Feb 2018 16:46:10 +0800 Message-Id: <20180216084615.26483-4-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180216084615.26483-1-haozhong.zhang@intel.com> References: <20180216084615.26483-1-haozhong.zhang@intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.151 Subject: [Qemu-devel] [PATCH v3 3/8] configure: add libpmem support X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Haozhong Zhang , Xiao Guangrong , mst@redhat.com, Juan Quintela , dgilbert@redhat.com, Stefan Hajnoczi , Paolo Bonzini , Igor Mammedov , Dan Williams , Eduardo Habkost Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Add a pair of configure options --{enable,disable}-libpmem to control whether QEMU is compiled with PMDK libpmem [1]. QEMU may write to the host persistent memory (e.g. in vNVDIMM label emulation and live migration), so it must take the proper operations to ensure the persistence of its own writes. Depending on the CPU models and available instructions, the optimal operation can vary [2]. PMDK libpmem have already implemented those operations on multiple CPU models (x86 and ARM) and the logic to select the optimal ones, so QEMU can just use libpmem rather than re-implement them. [1] PMDK (formerly known as NMVL), https://github.com/pmem/pmdk/ [2] https://github.com/pmem/pmdk/blob/38bfa652721a37fd94c0130ce0e3f5d8baa3ed40/src/libpmem/pmem.c#L33 Signed-off-by: Haozhong Zhang --- configure | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/configure b/configure index 913e14839d..ba9953fffe 100755 --- a/configure +++ b/configure @@ -450,6 +450,7 @@ jemalloc="no" replication="yes" vxhs="" libxml2="" +libpmem="" supported_cpu="no" supported_os="no" @@ -1359,6 +1360,10 @@ for opt do ;; --disable-git-update) git_update=no ;; + --enable-libpmem) libpmem=yes + ;; + --disable-libpmem) libpmem=no + ;; *) echo "ERROR: unknown option $opt" echo "Try '$0 --help' for more information" @@ -1611,6 +1616,7 @@ disabled with --disable-FEATURE, default is enabled if available: crypto-afalg Linux AF_ALG crypto backend driver vhost-user vhost-user support capstone capstone disassembler support + libpmem libpmem support NOTE: The object files are built at the place where configure is launched EOF @@ -5345,6 +5351,30 @@ EOF fi fi +########################################## +# check for libpmem + +if test "$libpmem" != "no"; then + cat > $TMPC < +int main(void) +{ + pmem_is_pmem(0, 0); + return 0; +} +EOF + libpmem_libs="-lpmem" + if compile_prog "" "$libpmem_libs" ; then + libs_softmmu="$libpmem_libs $libs_softmmu" + libpmem="yes" + else + if test "$libpmem" = "yes" ; then + feature_not_found "libpmem" "Install nvml or pmdk" + fi + libpmem="no" + fi +fi + ########################################## # End of CC checks # After here, no more $cc or $ld runs @@ -5815,6 +5845,7 @@ echo "avx2 optimization $avx2_opt" echo "replication support $replication" echo "VxHS block device $vxhs" echo "capstone $capstone" +echo "libpmem support $libpmem" if test "$sdl_too_old" = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support" @@ -6540,6 +6571,10 @@ if test "$vxhs" = "yes" ; then echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak fi +if test "$libpmem" = "yes" ; then + echo "CONFIG_LIBPMEM=y" >> $config_host_mak +fi + if test "$tcg_interpreter" = "yes"; then QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" elif test "$ARCH" = "sparc64" ; then