From nobody Mon Feb 9 11:33:29 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org ARC-Seal: i=1; a=rsa-sha256; t=1568891166; cv=none; d=zoho.com; s=zohoarc; b=mB2vsf4vKPoaEd9XANPeHj/3+SGujsGCjEZgVrYnl/pvU3Dk4QXuACI7xwXp4rjC8cqx3wBtnvFJt61Xw8NmWMvH7td/T2aVTuq1HTXGvjfZ6bWNG9mn/OP5DMOoxc9rlcGogemVnciRuIQU+JEQV+biu/GthcA692CG+vgNTWc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1568891166; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=g8PJENVUiaEAlCc9c2alvXBREOz6rkk7L9Owj6Fgh9s=; b=JCrGZOQqEurQhUsSS39Ea3rrZmqNSnj690yT48FVBFmTbWfFBQ501L+/EFuc/qb48MKM/EQLwm0XjsXOJkh2hsO5rK7cbFoCZksr4t5s7hV1AqBagm6Pf3ENokHjIJF9uLpAvaknZTk0KotUL7f5zpaILWjDRZmhW2oi83/uFAw= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 156889116607175.92424155912045; Thu, 19 Sep 2019 04:06:06 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iAuFE-0003Fb-54; Thu, 19 Sep 2019 11:05:04 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iAuFC-0003E2-17 for xen-devel@lists.xenproject.org; Thu, 19 Sep 2019 11:05:02 +0000 Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 4ad7a34c-dacd-11e9-978d-bc764e2007e4; Thu, 19 Sep 2019 11:04:47 +0000 (UTC) X-Inumbo-ID: 4ad7a34c-dacd-11e9-978d-bc764e2007e4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1568891088; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fHoVEVSkXhSzI0FXEPwiA7EymZytSRCNOJViXlquIBY=; b=MvGmJiCCV6+p1Wa2XM7im2A/U3ONJxkDD1ZzLu/cb8k8PIlca888oiFX TW0iEarSA9yTph+7viH9dHpkeHbUyDMYbVc16WzDcm6UYABuEWTGM3M21 k1n1bn4L8Eo+w4fxiK7pSZ5ih8TiKetm7s6HA8qJlayJJTSQTmOhFhEYb 8=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=anthony.perard@citrix.com; spf=Pass smtp.mailfrom=anthony.perard@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of anthony.perard@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa1.hc3370-68.iphmx.com: domain of anthony.perard@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="anthony.perard@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="anthony.perard@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: b3mOAUbssE1nLUrHlgC6tF3e/1GbGZYplUh1f5b2WAR6Etw1u6qOEqeNWfXgq57nyJGKN1NE9I KZb6ZTpQLrV5AZx/cszib1024+LXc9kjYWNUOz7ymHqRoiwtsIWBAvn9FN4aNwOICv9zzrz0XD vu0nXgiK8Vdu4eCNeJSCpPieyuUrgJue9kt2e9JDHONreA7tFLVCxbdVrxIEF0sRHWcBf4fpMf /MYfHT2RBLFHxLAj/tN8KiOoMf/GOAG6//9V05Vl/wN/AuizgSRwVmXzs3IvLgf7TBd1AK8N90 6+A= X-SBRS: 2.7 X-MesageID: 5840081 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.64,523,1559534400"; d="scan'208";a="5840081" From: Anthony PERARD To: Date: Thu, 19 Sep 2019 12:04:38 +0100 Message-ID: <20190919110443.817594-5-anthony.perard@citrix.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190919110443.817594-1-anthony.perard@citrix.com> References: <20190919110443.817594-1-anthony.perard@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 4/9] libxl: Add optimisation to ev_lock X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Anthony PERARD , Ian Jackson , Wei Liu Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) It will often be the case that the lock is free to grab. So we first try to grab it before we have to fork. Even though in this case the locks are grabbed in the wrong order in the lock hierarchy (ev_lock should be outside of CTX_LOCK), it is fine to try without blocking. If that failed, we will release CTX_LOCK and try to grab both lock again in the right order. That optimisation is only enabled in releases (debug=3Dn) so the more complicated code with fork is actually exercised. Signed-off-by: Anthony PERARD Acked-by: Ian Jackson --- Notes: v2: - new patch tools/libxl/Makefile | 3 +++ tools/libxl/libxl_internal.c | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile index 6fdcbbddd6b6..4587a6fc9c65 100644 --- a/tools/libxl/Makefile +++ b/tools/libxl/Makefile @@ -35,6 +35,9 @@ ifeq ($(CONFIG_LIBNL),y) CFLAGS_LIBXL +=3D $(LIBNL3_CFLAGS) endif CFLAGS_LIBXL +=3D -Wshadow +ifeq ($(debug),y) +CFLAGS_LIBXL +=3D -DCONFIG_DEBUG +endif =20 LIBXL_LIBS-$(CONFIG_ARM) +=3D -lfdt =20 diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c index 28a126ccc342..a7a4d546c47a 100644 --- a/tools/libxl/libxl_internal.c +++ b/tools/libxl/libxl_internal.c @@ -620,6 +620,25 @@ static void ev_lock_prepare_fork(libxl__egc *egc, libx= l__ev_devlock *lock) } fd =3D lock->fd; =20 + /* Enable this optimisation only in releases, so the fork code is + * exercised while libxl is built with debug=3Dy. */ +#ifndef CONFIG_DEBUG + /* + * We try to grab the lock before forking as it is likely to be free. + * Even though we are supposed to CTX_UNLOCK before attempting to grab + * the ev_lock, it is fine to do a non-blocking request now with the + * CTX_LOCK held as if that fails we'll try again in a fork (CTX_UNLOCK + * will be called in libxl), that will avoid deadlocks. + */ + int r =3D flock(fd, LOCK_EX | LOCK_NB); + if (!r) { + libxl_fd_set_cloexec(CTX, fd, 1); + /* We held a lock, no need to fork but we need to check it. */ + ev_lock_child_callback(egc, &lock->child, 0, 0); + return; + } +#endif + pid =3D libxl__ev_child_fork(gc, &lock->child, ev_lock_child_callback); if (pid < 0) goto out; --=20 Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel