From nobody Sun May 19 03:38:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1669827337; cv=none; d=zohomail.com; s=zohoarc; b=C3edwFxsdJsCGm/i2qYprl8N3icoblX/lfN6t7QtjbSzrncidEKNnqh91ppWTXvfiM+lQH7oz27Zt++MOpmjgmxNyKGfjlcItxxQI+ViGhlC0+b8WoKx0OsDhKcqdi8U1h+uzeqapjFQZEZL/WHqmMbiXI0JT0RJtnHm2KpbQwQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1669827337; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=hESm+PKHcKOTqdq9K75y9eopm7gd8q3uRbInQSV6H9M=; b=UuCbUwViAXG9JVIY7kYmIhV+WVvO23xAyzGdd32B5TKeowX/2xnHakWrC0zPSqlDfCHrRgwyoJ0pq6ScJsSnTCeDMrW34Qb61QDnRWjLMVXGVNvC3OL9DkHVdSCb3bH8EyXu0KUtaTTGq64F2XMPFg5jsho14njUTWIYc7XhZGI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1669827337530405.30448306792084; Wed, 30 Nov 2022 08:55:37 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.450016.707125 (Exim 4.92) (envelope-from ) id 1p0QMW-0001hO-HY; Wed, 30 Nov 2022 16:55:08 +0000 Received: by outflank-mailman (output) from mailman id 450016.707125; Wed, 30 Nov 2022 16:55:08 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMW-0001hH-Cp; Wed, 30 Nov 2022 16:55:08 +0000 Received: by outflank-mailman (input) for mailman id 450016; Wed, 30 Nov 2022 16:55:07 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMU-0001h8-VT for xen-devel@lists.xenproject.org; Wed, 30 Nov 2022 16:55:07 +0000 Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com [216.71.145.153]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id bb6406d4-70cf-11ed-8fd2-01056ac49cbb; Wed, 30 Nov 2022 17:55:05 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: bb6406d4-70cf-11ed-8fd2-01056ac49cbb DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1669827304; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=z/izcCZYLALenFQZc+ciAhdGz2w/UXtld5npiWlVuFM=; b=Is2DDria1i3/f5QVBpl0lXRZsUP1aLpd3ze/2RYCWwu2cS5uykoC81sl wR4+5CKW+jvuz1+aRUKxJ/AYS/ySvVxZ+Dx0rUxdeL+nwjfvx3vk1/Toi 6F+b7q89NvC/uRBjWkKKlBrTbkfrMbYuo4r26F4YEfUylzs06Yebwo3jq U=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: 4.0 X-MesageID: 85899572 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:rw8Izay4JRXhP7MlDNZ6t+c6xirEfRIJ4+MujC+fZmUNrF6WrkUOz 2MfWGCDOfaINmbwLdEjaYvg9h8Fu8WBzIIxTgo/pCAxQypGp/SeCIXCJC8cHc8wwu7rFxs7s ppEOrEsCOhuExcwcz/0auCJQUFUjP3OHfykTbaeYUidfCc8IA85kxVvhuUltYBhhNm9Emult Mj75sbSIzdJ4RYtWo4vw//F+U0HUMja4mtC5AVnPqgT5zcyqlFOZH4hDfDpR5fHatE88t6SH 47r0Ly/92XFyBYhYvvNfmHTKxBirhb6ZGBiu1IOM0SQqkEqSh8ai87XAME0e0ZP4whlqvgqo Dl7WT5cfi9yVkHEsLx1vxC1iEiSN4UekFPMCSDXXcB+UyQq2pYjqhljJBheAGEWxgp4KU9s9 80aIShcVTGotse4/6+/b9BNr/12eaEHPKtH0p1h5TTQDPJgSpHfWaTao9Rf2V/chOgXQ6yYP ZBAL2MyMlKQOHWjOX9OYH46tM6uimPybHtzr1WNqLBsy2PS0BZwwP7mN9+9ltmiFZgFzxfF+ TiuE2LRHQ4nKN2SmTW/ryi8g/3kjCHYCaE4LejtnhJtqALKnTFCYPEMbnO3qOe0olSzUNVeL woT4CVGhbg/8gmnQ8fwWzW8oWWYpVgMVtxICeo45QqRjK3O7G6k6nMsF2AbLoZ87YlvGGJsh gThc87V6SJHnp+XeHCU7uavjBiDHCYqMGsnXA4tdF5QizX8m70bghXKR9dlNae6iNzpBD39q wy3QDgCa6Y71pBSifjilbzTq3f1/8WSEFZpjunCdjj9hj6VcrJJcGBBBbLzyf9bZLiUQVCa1 JTvs5jPtbteZX1hecHkfQnsIF1Lz6zdWNE/qQQ1d3XEy9hK0yDLQGyoyGsiTHqFy+5dEdMTX GfduBlK+LhYN2awYKl8buqZUpp0nPe8S4q4CKyIMLKih6SdkifdpEmCgmbJjwjQfLUEy/lja f93j+7zZZrlNUiX5GXvHLpMuVPa7is/2XnSVfjGI+ePiNKjiIquYe5dajOmN7lphJ5oVS2Jq 76zwePWkUQAOAA/CwGLmbMuwacidCNqX8mp+5EPL4Zu4GNOQQkcNhMY+pt5E6QNokifvrqgE q2VMqOA9GfCuA== IronPort-HdrOrdr: A9a23:oRJkH6y0SElKDWwFRqXxKrPwLL1zdoMgy1knxilNoRw8SKOlfq GV7ZImPHDP6Qr5NEtMpTnEAtjjfZq+z+8T3WByB9eftWDd0QPCRr2Kr7GSpgEIcxeOktK1vp 0PT0ERMrHN5CBB/KXH3DU= X-IronPort-AV: E=Sophos;i="5.96,207,1665460800"; d="scan'208";a="85899572" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Christian Lindig , David Scott , Edwin Torok , Rob Hoes Subject: [PATCH v2 1/6] tools/oxenstored: Style fixes to Domain Date: Wed, 30 Nov 2022 16:54:50 +0000 Message-ID: <20221130165455.31125-2-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20221130165455.31125-1-andrew.cooper3@citrix.com> References: <20221130165455.31125-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1669827339741100004 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This file has some style problems so severe that they interfere with the readability of the subsequent bugfix patches. Fix these issues ahead of time, to make the subsequent changes more readabl= e. No functional change. Signed-off-by: Andrew Cooper Acked-by: Christian Lindig Reviewed-by: Edwin T=C3=B6r=C3=B6k --- CC: Christian Lindig CC: David Scott CC: Edwin Torok CC: Rob Hoes v2: * New --- tools/ocaml/xenstored/domain.ml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tools/ocaml/xenstored/domain.ml b/tools/ocaml/xenstored/domain= .ml index 81cb59b8f1a2..ab08dcf37f62 100644 --- a/tools/ocaml/xenstored/domain.ml +++ b/tools/ocaml/xenstored/domain.ml @@ -57,17 +57,16 @@ let is_paused_for_conflict dom =3D dom.conflict_credit = <=3D 0.0 let is_free_to_conflict =3D is_dom0 =20 let string_of_port =3D function -| None -> "None" -| Some x -> string_of_int (Xeneventchn.to_int x) + | None -> "None" + | Some x -> string_of_int (Xeneventchn.to_int x) =20 let dump d chan =3D fprintf chan "dom,%d,%nd,%d\n" d.id d.mfn d.remote_port =20 -let notify dom =3D match dom.port with -| None -> - warn "domain %d: attempt to notify on unknown port" dom.id -| Some port -> - Event.notify dom.eventchn port +let notify dom =3D + match dom.port with + | None -> warn "domain %d: attempt to notify on unknown port" dom.id + | Some port -> Event.notify dom.eventchn port =20 let bind_interdomain dom =3D begin match dom.port with @@ -84,8 +83,7 @@ let close dom =3D | None -> () | Some port -> Event.unbind dom.eventchn port end; - Xenmmap.unmap dom.interface; - () + Xenmmap.unmap dom.interface =20 let make id mfn remote_port interface eventchn =3D { id =3D id; --=20 2.11.0 From nobody Sun May 19 03:38:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1669827338; cv=none; d=zohomail.com; s=zohoarc; b=OaFxrl0ykDQb9T+Ue3mdyYtaNrmbruYQ8ZCxP6zqjsntMF0UueRYYEGmv1u6N3TkklpMw5L1H49sO+CW4/GiXxOYZyF2omBEa3vtcbE+1QYCgfeUJOhQ6Ue5foqmQa7polPkN9Bh1Qy59q3bIl4OrFIEHd7yG8NPzIAMDD8CTnw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1669827338; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TktyQDDfxgLCgnzAbfl+M5f02JyW8iaZUP8OBj5kPZc=; b=Xt3oORHgf1ntwGJ1Oz7WInshSfQmSJe2/3tnBWHh0tdV4R9IeIuOpNtoZH3cDyovcw8WC3n0dnPh44WEioPJoD9V5ZQF1zgv3uq6s9iny6rIpUAVWHF53tc3KJ2yhtZR4CXjuyQQ/fCHP8mXtEZFJ8ls4kSqtiSD53YdIDOvS30= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 16698273386921021.4751805028452; Wed, 30 Nov 2022 08:55:38 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.450018.707147 (Exim 4.92) (envelope-from ) id 1p0QMb-0002FV-4i; Wed, 30 Nov 2022 16:55:13 +0000 Received: by outflank-mailman (output) from mailman id 450018.707147; Wed, 30 Nov 2022 16:55:13 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMb-0002FN-0R; Wed, 30 Nov 2022 16:55:13 +0000 Received: by outflank-mailman (input) for mailman id 450018; Wed, 30 Nov 2022 16:55:11 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMY-00028d-Ux for xen-devel@lists.xenproject.org; Wed, 30 Nov 2022 16:55:10 +0000 Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id be61cc1a-70cf-11ed-91b6-6bf2151ebd3b; Wed, 30 Nov 2022 17:55:09 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: be61cc1a-70cf-11ed-91b6-6bf2151ebd3b DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1669827309; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=m3N373zQMCSuoA562ubDzuK9w6uDDTqYPMgngEFce1I=; b=fms+vslK6IKOD+vkSNBLLioGfyhTLfrwEvxo1CvEI/Igfp9Ls6mRBysg BFEp+i0wA0dK0Erm4Dw0L21L6cIYrmk0oZ8SZsCX41VEDIneOv7jZKJJc d7WTL4GfUtoR0XFnl1Ex9m+GsErQGTlxk+b/oCFZUfr2tLCNRvyg1BU+N k=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: 4.0 X-MesageID: 85447238 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:q9OwQK/7JjS3R8cTsVQoDrUDjX6TJUtcMsCJ2f8bNWPcYEJGY0x3z 2dMXziFPPiIZzegeY12YYvioUsA6MPWzoViSgdkr3o8E34SpcT7XtnIdU2Y0wF+jCHgZBk+s 5hBMImowOQcFCK0SsKFa+C5xZVE/fjUAOG6UKucYHsZqTZMEE8JkQhkl/MynrlmiN24BxLlk d7pqojUNUTNNwRcawr40Ire7kIx1BjOkGlA5AZnPKsT5AS2e0Q9V/rzG4ngdxMUfaEMdgKKb 76r5K20+Grf4yAsBruN+losWhRXKlJ6FVHmZkt+A8BOsDAbzsAB+v9T2M4nQVVWk120c+VZk 72hg3ASpTABZcUgkMxFO/VR/roX0aduoNcrKlDn2SCfItGvn9IBDJyCAWlvVbD09NqbDklw1 dwgKxpQbyytnqWP0qyDesI1g9YaeZyD0IM34hmMzBncBPciB5vCX7/L9ZlT2zJYasJmRKiEI ZBDMHw2MUqGM0Yn1lQ/UfrSmM+BgHXlfiIeg1WSvactuEDYzRBr0airO93QEjCPbZUIwhrH/ DmWl4j/Kk8/b+SG0TGXyGK1h6zdjD/2dK42BaLto5aGh3XMnzdOWXX6T2CTrfCnh2akVtlYK khS/TAhxYAi+UruQtTjUhmQpH+fogVaS9dWC/c96gyG1uzT+QnxO4QfZmcfMpp87pZwHGF0k A/S9z/0OdBxmIO1aUqe3OqVkR2rfhEHM1cyTnYBXzJQtrEPv7oPph7IS99iFou8gdv0BSz8z li2kcQuu1kApZVVjvvmpDgrlxrp/8GUFVBtum07S0r/tmtEiJiZi5tEALQxxdJJN86nQ1aIp xDocODOvblVXflheMFgKdjh/Y1FBd7faFUwYnY1RfHNEghBHFb9Fb28GBkkeC9U3j8sIFcFm nP7twJL/4N0N3C3d6JxaI/ZI510k/m/SYq7C66IMoQmjn1NmOmvpnkGiam4hjCFraTRuftnZ cfznTiEUh729piLPBLpHrxAgNfHNwg1xH/JRICT8vhU+eP2WZJhcp9caAHmRrlgvMu5TPD9r 4432z2il08OD4UTo0D/reYuELz9BSFgVMqv9JwKLrfrz8gPMDhJNsI9CIgJI+RN95m5XM+Ul p1hcie0EGbCuEA= IronPort-HdrOrdr: A9a23:y9w/SqAHcX70Ak3lHemd55DYdb4zR+YMi2TDj3oBLSC9Afbo8P xG/c5rrSMc5wxwZJhNo7290ey7MBbhHP1OkPIs1NWZLWrbUQKTRekIh7cKgQeQeREWndQz6U 4USclD4arLY2SS4/yX3ODyKadH/DDOytHQudvj X-IronPort-AV: E=Sophos;i="5.96,207,1665460800"; d="scan'208";a="85447238" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Christian Lindig , David Scott , Edwin Torok , Rob Hoes Subject: [PATCH v2 2/6] tools/oxenstored: Bind the DOM_EXC VIRQ in in Event.init() Date: Wed, 30 Nov 2022 16:54:51 +0000 Message-ID: <20221130165455.31125-3-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20221130165455.31125-1-andrew.cooper3@citrix.com> References: <20221130165455.31125-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1669827339732100003 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Xenstored always needs to bind the DOM_EXC VIRQ. Instead of doing it shortly after the call to Event.init(), do it in the init() call itself. This removes the need for the field to be a mutable option. It will also simplify a future change to restore both parts from the live update record, rather than re-initialising them from scratch. Rename the field from virq_port (which could be any VIRQ) to it's proper na= me. Signed-off-by: Andrew Cooper Acked-by: Christian Lindig Reviewed-by: Edwin T=C3=B6r=C3=B6k --- CC: Christian Lindig CC: David Scott CC: Edwin Torok CC: Rob Hoes v2: * New. --- tools/ocaml/xenstored/event.ml | 9 ++++++--- tools/ocaml/xenstored/xenstored.ml | 4 +--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/tools/ocaml/xenstored/event.ml b/tools/ocaml/xenstored/event.ml index ccca90b6fc4f..a3be296374ff 100644 --- a/tools/ocaml/xenstored/event.ml +++ b/tools/ocaml/xenstored/event.ml @@ -17,12 +17,15 @@ (**************** high level binding ****************) type t =3D { handle: Xeneventchn.handle; - mutable virq_port: Xeneventchn.t option; + domexc: Xeneventchn.t; } =20 -let init () =3D { handle =3D Xeneventchn.init (); virq_port =3D None; } +let init () =3D + let handle =3D Xeneventchn.init () in + let domexc =3D Xeneventchn.bind_dom_exc_virq handle in + { handle; domexc } + let fd eventchn =3D Xeneventchn.fd eventchn.handle -let bind_dom_exc_virq eventchn =3D eventchn.virq_port <- Some (Xeneventchn= .bind_dom_exc_virq eventchn.handle) let bind_interdomain eventchn domid port =3D Xeneventchn.bind_interdomain = eventchn.handle domid port let unbind eventchn port =3D Xeneventchn.unbind eventchn.handle port let notify eventchn port =3D Xeneventchn.notify eventchn.handle port diff --git a/tools/ocaml/xenstored/xenstored.ml b/tools/ocaml/xenstored/xen= stored.ml index c5dc7a28d082..55071b49eccb 100644 --- a/tools/ocaml/xenstored/xenstored.ml +++ b/tools/ocaml/xenstored/xenstored.ml @@ -397,7 +397,6 @@ let _ =3D if cf.restart && Sys.file_exists Disk.xs_daemon_database then ( let rwro =3D DB.from_file store domains cons Disk.xs_daemon_database in info "Live reload: database loaded"; - Event.bind_dom_exc_virq eventchn; Process.LiveUpdate.completed (); rwro ) else ( @@ -413,7 +412,6 @@ let _ =3D =20 if cf.domain_init then ( Connections.add_domain cons (Domains.create0 domains); - Event.bind_dom_exc_virq eventchn ); rw_sock ) in @@ -451,7 +449,7 @@ let _ =3D let port =3D Event.pending eventchn in debug "pending port %d" (Xeneventchn.to_int port); finally (fun () -> - if Some port =3D eventchn.Event.virq_port then ( + if port =3D eventchn.Event.domexc then ( let (notify, deaddom) =3D Domains.cleanup domains in List.iter (Store.reset_permissions store) deaddom; List.iter (Connections.del_domain cons) deaddom; --=20 2.11.0 From nobody Sun May 19 03:38:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1669827338; cv=none; d=zohomail.com; s=zohoarc; b=RL6ZUbm2ABZeu0Et1Vf10iE+hTWBNPFynd2/YLXuYaLj3oYEaEpPR6GGopHVBT2c8jYFlbHnX8r4w0Q81MeYZY6z60ZMD+mWLZlUeeOF7pEuNwKDlSUfwfKGNIRjnddm5SLSefcXxx+FADS2+0gG2e2HgWcvIGMSmAvHj3nCv6I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1669827338; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=e7/KZzc2xNZob23PwjG90K+oALVJNntNKr4gGYbCRA4=; b=OFauMSVpJTGfF+78rAh9vdQXgpGvpNboUTXpxQZOIrBHUeUOFXQybE65Hej6dBiWLAYb9lln2IJ0rC5yKWA/Hjyga4B9n53LSUm5ih5LlLSuBsEuDSmVKqZCVL1bniFXyctLbUjebTDnQUrsgR7WhO0CllzOzAh/3yCTBeGFUW0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 166982733828472.86114971333598; Wed, 30 Nov 2022 08:55:38 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.450017.707136 (Exim 4.92) (envelope-from ) id 1p0QMX-0001wj-NX; Wed, 30 Nov 2022 16:55:09 +0000 Received: by outflank-mailman (output) from mailman id 450017.707136; Wed, 30 Nov 2022 16:55:09 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMX-0001wa-Kk; Wed, 30 Nov 2022 16:55:09 +0000 Received: by outflank-mailman (input) for mailman id 450017; Wed, 30 Nov 2022 16:55:08 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMW-0001h8-Gm for xen-devel@lists.xenproject.org; Wed, 30 Nov 2022 16:55:08 +0000 Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com [216.71.145.142]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id bd83c3e6-70cf-11ed-8fd2-01056ac49cbb; Wed, 30 Nov 2022 17:55:07 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: bd83c3e6-70cf-11ed-8fd2-01056ac49cbb DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1669827307; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=mzelpp6BGU6o/XUMBaOnSaYdaYXaC5D7r7SG8hFEgRM=; b=iP9CtfXsTZQCMSs5Jf87J60B6MgimTwM3YnkRyHTVQnhHKfKEGTgqG1I z0UzQRlx0ulMt6XN2rlfdlpynf6FTzCPVSg1f30CAUih1B0WJHHlMRbpe 1Q9qrT1rR3f1q2mMgwwmQV/rKyTF2m0eYzPfYmTrGodCuxgGiwGsyn388 s=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: 4.0 X-MesageID: 86305928 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:QoajPqIRyYI7XtnQFE+R3JUlxSXFcZb7ZxGr2PjKsXjdYENS1WMEz 2IfXT+Eb//fajH8fd5/Ot61pk0GvcDRyoJrHFNlqX01Q3x08seUXt7xwmUcnc+xBpaaEB84t ZV2hv3odp1coqr0/0/1WlTZhSAgk/rOHv+kUrWs1hlZHWdMUD0mhQ9oh9k3i4tphcnRKw6Ws Jb5rta31GWNglaYCUpJrfPdwP9TlK6q4mlB5wdmPasjUGL2zBH5MrpOfcldEFOgKmVkNrbSb /rOyri/4lTY838FYj9yuu+mGqGiaue60Tmm0hK6aYD76vRxjnVaPpIAHOgdcS9qZwChxLid/ jnvWauYEm/FNoWU8AgUvoIx/ytWZcWq85efSZSzXFD6I+QrvBIAzt03ZHzaM7H09c5+GVlq3 MQEOAorQQGoieWLnIuASLNz05FLwMnDZOvzu1llxDDdS/0nXYrCU+PB4towMDUY354UW6yEP oxANGQpPE+ojx5nYz/7DLoXmuuyi2a5WDpfsF+P/oI84nTJzRw327/oWDbQUozUHp0IzxzIz o7A11rgLj8gFJuO8CrG1W+Bp+LAp3nRdKtHQdVU8dY12QbOlwT/EiY+WVKlrNGjh0W5WtYZL FYbkgI+oK53+EG1Q93VWxyjvGXCrhMaQ8BXEeAx9EeK0KW83uqCLjFaFHgbMoVg7ZJoA2xxv rOUoz/3LTV3iJm8cW6NzJG7vBi8PhVJFFQAPzBRGGPp/OLfiI00ixvOSPNqH6i0ksD5FFnM/ tyakMQtr+5N1JBWjs1X6XiC2mvx/caREmbZ8y2NBgqYAhVFiJlJjmBCwXzS9r5+IYmQVTFtV 1BUypHFvIji4Xxg/RFhodnh/pnzv55p0xWG2zaD+qXNEBzzk0NPhagKvFlDyL5Ba67ogwPBb k7Joh9275ROJnasZqIfS9vvVZV1kfa+SIq5Cq68gj9yjn5ZLlfvEMZGPB744owQuBJ0zfFX1 WmzLq5A8kr2+Yw4lWHrFo/xIJcgxzwkxHO7eHwI503P7FZqX1bMEe1tGALXPogEAFas/F29H yB3a5HblH2ykYTWPkHqzGLkBQlRfCJiWsCr85U/myzqClMOJVzNwsT5mdsJE7GJVYwP/gsU1 hlRgnNl9Wc= IronPort-HdrOrdr: A9a23:3f9LKqgEOMqhZWJZVPiYILU51XBQXusji2hC6mlwRA09TyXBrb HLoB1p726StN9xYgBZpTnuAsm9qB/nmKKdpLNhWItKPzOWw1dATrsSjrcKqgeIc0aVygce79 YDT0EUMrLN5C1B7PoSlzPXLz9P+rW6GeuT9IHjJj9WPHhXV50= X-IronPort-AV: E=Sophos;i="5.96,207,1665460800"; d="scan'208";a="86305928" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Christian Lindig , David Scott , Edwin Torok , Rob Hoes Subject: [PATCH v2 3/6] tools/oxenstored: Rename some 'port' variables to 'remote_port' Date: Wed, 30 Nov 2022 16:54:52 +0000 Message-ID: <20221130165455.31125-4-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20221130165455.31125-1-andrew.cooper3@citrix.com> References: <20221130165455.31125-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1669827339743100005 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This will make the logic clearer when we plumb local_port through these functions. While changing this, simplify the construct in Domains.create0 to separate = the remote port handling from the interface. Signed-off-by: Andrew Cooper Acked-by: Christian Lindig Reviewed-by: Edwin T=C3=B6r=C3=B6k --- CC: Christian Lindig CC: David Scott CC: Edwin Torok CC: Rob Hoes v2: * New. --- tools/ocaml/xenstored/domains.ml | 26 ++++++++++++-------------- tools/ocaml/xenstored/process.ml | 12 ++++++------ tools/ocaml/xenstored/xenstored.ml | 8 ++++---- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/tools/ocaml/xenstored/domains.ml b/tools/ocaml/xenstored/domai= ns.ml index 17fe2fa25772..26018ac0dd3d 100644 --- a/tools/ocaml/xenstored/domains.ml +++ b/tools/ocaml/xenstored/domains.ml @@ -122,9 +122,9 @@ let cleanup doms =3D let resume _doms _domid =3D () =20 -let create doms domid mfn port =3D +let create doms domid mfn remote_port =3D let interface =3D Xenctrl.map_foreign_range xc domid (Xenmmap.getpagesize= ()) mfn in - let dom =3D Domain.make domid mfn port interface doms.eventchn in + let dom =3D Domain.make domid mfn remote_port interface doms.eventchn in Hashtbl.add doms.table domid dom; Domain.bind_interdomain dom; dom @@ -133,18 +133,16 @@ let xenstored_kva =3D ref "" let xenstored_port =3D ref "" =20 let create0 doms =3D - let port, interface =3D - ( - let port =3D Utils.read_file_single_integer !xenstored_port - and fd =3D Unix.openfile !xenstored_kva - [ Unix.O_RDWR ] 0o600 in - let interface =3D Xenmmap.mmap fd Xenmmap.RDWR Xenmmap.SHARED - (Xenmmap.getpagesize()) 0 in - Unix.close fd; - port, interface - ) - in - let dom =3D Domain.make 0 Nativeint.zero port interface doms.eventchn in + let remote_port =3D Utils.read_file_single_integer !xenstored_port in + + let interface =3D + let fd =3D Unix.openfile !xenstored_kva [ Unix.O_RDWR ] 0o600 in + let interface =3D Xenmmap.mmap fd Xenmmap.RDWR Xenmmap.SHARED (Xenmmap.g= etpagesize()) 0 in + Unix.close fd; + interface + in + + let dom =3D Domain.make 0 Nativeint.zero remote_port interface doms.event= chn in Hashtbl.add doms.table 0 dom; Domain.bind_interdomain dom; Domain.notify dom; diff --git a/tools/ocaml/xenstored/process.ml b/tools/ocaml/xenstored/proce= ss.ml index 72a79e9328dd..b2973aca2a82 100644 --- a/tools/ocaml/xenstored/process.ml +++ b/tools/ocaml/xenstored/process.ml @@ -558,10 +558,10 @@ let do_transaction_end con t domains cons data =3D let do_introduce con t domains cons data =3D if not (Connection.is_dom0 con) then raise Define.Permission_denied; - let (domid, mfn, port) =3D + let (domid, mfn, remote_port) =3D match (split None '\000' data) with - | domid :: mfn :: port :: _ -> - int_of_string domid, Nativeint.of_string mfn, int_of_string port + | domid :: mfn :: remote_port :: _ -> + int_of_string domid, Nativeint.of_string mfn, int_of_string remote_port | _ -> raise Invalid_Cmd_Args; in let dom =3D @@ -569,18 +569,18 @@ let do_introduce con t domains cons data =3D let edom =3D Domains.find domains domid in if (Domain.get_mfn edom) =3D mfn && (Connections.find_domain cons domid= ) !=3D con then begin (* Use XS_INTRODUCE for recreating the xenbus event-channel. *) - edom.remote_port <- port; + edom.remote_port <- remote_port; Domain.bind_interdomain edom; end; edom else try - let ndom =3D Domains.create domains domid mfn port in + let ndom =3D Domains.create domains domid mfn remote_port in Connections.add_domain cons ndom; Connections.fire_spec_watches (Transaction.get_root t) cons Store.Path.= introduce_domain; ndom with _ -> raise Invalid_Cmd_Args in - if (Domain.get_remote_port dom) <> port || (Domain.get_mfn dom) <> mfn th= en + if (Domain.get_remote_port dom) <> remote_port || (Domain.get_mfn dom) <>= mfn then raise Domain_not_match =20 let do_release con t domains cons data =3D diff --git a/tools/ocaml/xenstored/xenstored.ml b/tools/ocaml/xenstored/xen= stored.ml index 55071b49eccb..1f11f576b515 100644 --- a/tools/ocaml/xenstored/xenstored.ml +++ b/tools/ocaml/xenstored/xenstored.ml @@ -167,10 +167,10 @@ let from_channel_f chan global_f socket_f domain_f wa= tch_f store_f =3D global_f ~rw | "socket" :: fd :: [] -> socket_f ~fd:(int_of_string fd) - | "dom" :: domid :: mfn :: port :: []-> + | "dom" :: domid :: mfn :: remote_port :: []-> domain_f (int_of_string domid) (Nativeint.of_string mfn) - (int_of_string port) + (int_of_string remote_port) | "watch" :: domid :: path :: token :: [] -> watch_f (int_of_string domid) (unhexify path) (unhexify token) @@ -209,10 +209,10 @@ let from_channel store cons doms chan =3D else warn "Ignoring invalid socket FD %d" fd in - let domain_f domid mfn port =3D + let domain_f domid mfn remote_port =3D let ndom =3D if domid > 0 then - Domains.create doms domid mfn port + Domains.create doms domid mfn remote_port else Domains.create0 doms in --=20 2.11.0 From nobody Sun May 19 03:38:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1669827339; cv=none; d=zohomail.com; s=zohoarc; b=gk7xHxruIpy6wsFzk2AFy4cDCPRnsL8A9KzZGLBKGtOUoYZJkW8Tn6wxJ+uvYTz1iYcyD3NqiPKd3Ex54K0w7ucDdWC3SctwUa6RMZDGoRC62O49hop9WiB9wFPm4yy2uOyB5uS7khz2+tJISUx3/EHWegQCOUkW99pJKZe6NV4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1669827339; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=idcfqeL/bfggDoj7VJwOLjXmgALs8/PuXlhtdfZM6ww=; b=GYK0Xy56hDnks97KaFsgyqFqx91gvPCk5L4TInRQBSxvZtZxvi8ISWNNh8keXIeAEHlk0/+n0iJt/sNp8JcbLKvsZicj0YpI61maiemc3n4kAtpXDlxGxFGHitGQc4D0WjSd0+lurMAarWtNL1GPXhXSIZi5IFmFMXjdB8SPzmg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1669827339942607.5704587687674; Wed, 30 Nov 2022 08:55:39 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.450021.707164 (Exim 4.92) (envelope-from ) id 1p0QMc-0002Xj-Cy; Wed, 30 Nov 2022 16:55:14 +0000 Received: by outflank-mailman (output) from mailman id 450021.707164; Wed, 30 Nov 2022 16:55:14 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMc-0002Vl-76; Wed, 30 Nov 2022 16:55:14 +0000 Received: by outflank-mailman (input) for mailman id 450021; Wed, 30 Nov 2022 16:55:12 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMa-00028d-Mr for xen-devel@lists.xenproject.org; Wed, 30 Nov 2022 16:55:12 +0000 Received: from esa6.hc3370-68.iphmx.com (esa6.hc3370-68.iphmx.com [216.71.155.175]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id c03f4542-70cf-11ed-91b6-6bf2151ebd3b; Wed, 30 Nov 2022 17:55:10 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: c03f4542-70cf-11ed-91b6-6bf2151ebd3b DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1669827310; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=5iFdPLx5Ne+VS5VelIwx4FrDJLK/XUFQknR4+A17ij0=; b=YqGvEO7i6oa3ke2P3GX4m7jo/8fokxWZxbtK/AFGJQbTa+d7qYULTwda eVzsOn7RkHAL226qlXwS1OAacL7yx/OuP5txnMgRdQ5AXpu0zzyaepwSN hAR+y5iVFpKMe0A2xj1LCmX/xmHCzmk95SYpwKe4uQqboCiu5W3yf7jJ7 8=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: 4.0 X-MesageID: 85447248 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:U5sKI62u7wZwXFuKhvbD5d5xkn2cJEfYwER7XKvMYLTBsI5bpzUFm GEaWTiGO/fZZDSnLYskaonn9xwE6JHTmNZqGgJlpC1hF35El5HIVI+TRqvS04F+DeWYFR46s J9OAjXkBJppJpMJjk71atANlVEliefTAOK5ULSfUsxIbVcMYD87jh5+kPIOjIdtgNyoayuAo tq3qMDEULOf82cc3lk8tuTS9nuDgNyo4GlC5wVlPagQ1LPjvyJ94Kw3dPnZw0TQGuG4LsbiL 87fwbew+H/u/htFIrtJRZ6iLyXm6paLVeS/oiI+t5qK23CulQRrukoPD9IOaF8/ttm8t4sZJ OOhF3CHYVxB0qXkwIzxWvTDes10FfUuFLTveRBTvSEPpqFvnrSFL/hGVSkL0YMkFulfAnlV1 qEZAS80aBXS3bmPwI2lYdl2v5F2RCXrFNt3VnBIyDjYCbAtQIzZQrWM7thdtNsyrpkQR7CEP ZNfMGcxKkSbC/FMEg5/5JYWteGknHTgNRZfr0qYv/Ef6GnP1g1hlrPqNbI5f/TaGJkJwRzE9 goq+UzyHDNDFuHB4wCH43mTmsnskSH6B9I7QejQGvlC3wTImz175ActfVeyv/SRkEO1XNNbb UsO9UIGvaU0sUCmUNT5dxm5u2Kf+A4RXcJKFO834x3LzbDbizt1HUBdEGQHMoZ/8pZrG3p6j Tdlgu8FGxRsqKa2FHO06Y6SqGLoYhEVEnEpVTU9GF5tD8bYnKk/iRfGT9BGGaGzj8HoFTyY/ w1mvBTSlJ1I05dVivzTEUTvxmv1+8OXFlJdChD/BDrN0+9vWGKyi2VEA3D/5O0IEouWR0LpU JMsy5nHt7Bm4X1geUWwrAQx8FOBva7t3N702wQH83wdG9OFpRaekXh4um0WGauQGp9slcXVS EHSoxhNw5RYIWGna6R6C6roVZp7kvS+S4m7CqyKBjarXnSXXFXflM2JTRfAt10BbWB2yf1vU XtlWZnE4Ykm5VRPk2PtGrZ1PU4DzSEi32LDLa0XPDz+uYdykEW9EO9fWHPXN7BR0U9xiFmNm zqpH5fQmko3vSyXSnW/zLP/2nhTdilhXM+m9pQOHgNBSyI/cFwc5zbq6etJU+RYc259z48kI lnVtpdk9WfC IronPort-HdrOrdr: A9a23:B5XRNaO4lEXGs8BcTvCjsMiBIKoaSvp037By7TEUdfUnSL3+qy nOpoVi6faaslYssR0b9OxofZPwJE80lqQFmrX5X43SPzUO0VHAROoJ0WKh+UyDJ8SUzIFgPN JbEpSWf+efMbEVt6rHCUKDYrAdKZG8gdmVuds= X-IronPort-AV: E=Sophos;i="5.96,207,1665460800"; d="scan'208";a="85447248" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Christian Lindig , David Scott , Edwin Torok , Rob Hoes Subject: [PATCH v2 4/6] tools/oxenstored: Implement Domain.rebind_evtchn Date: Wed, 30 Nov 2022 16:54:53 +0000 Message-ID: <20221130165455.31125-5-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20221130165455.31125-1-andrew.cooper3@citrix.com> References: <20221130165455.31125-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1669827341808100009 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Generally speaking, the event channel local/remote port is fixed for the lifetime of the associated domain object. The exception to this is a secondary XS_INTRODUCE (defined to re-bind to a new event channel) which po= kes around at the domain object's internal state. We need to refactor the evtchn handling to support live update, so start by moving the relevant manipulation into Domain. No practical change. Signed-off-by: Andrew Cooper Acked-by: Christian Lindig Reviewed-by: Edwin T=C3=B6r=C3=B6k --- CC: Christian Lindig CC: David Scott CC: Edwin Torok CC: Rob Hoes Note: This change deliberately doesn't reuse Domain.bind_interdomain, which= is removed by the end of the refactoring. v2: * New. --- tools/ocaml/xenstored/domain.ml | 12 ++++++++++++ tools/ocaml/xenstored/process.ml | 6 ++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tools/ocaml/xenstored/domain.ml b/tools/ocaml/xenstored/domain= .ml index ab08dcf37f62..d59a9401e211 100644 --- a/tools/ocaml/xenstored/domain.ml +++ b/tools/ocaml/xenstored/domain.ml @@ -63,6 +63,18 @@ let string_of_port =3D function let dump d chan =3D fprintf chan "dom,%d,%nd,%d\n" d.id d.mfn d.remote_port =20 +let rebind_evtchn d remote_port =3D + begin match d.port with + | None -> () + | Some p -> Event.unbind d.eventchn p + end; + let local =3D Event.bind_interdomain d.eventchn d.id remote_port in + debug "domain %d rebind (l %s, r %d) =3D> (l %d, r %d)" + d.id (string_of_port d.port) d.remote_port + (Xeneventchn.to_int local) remote_port; + d.remote_port <- remote_port; + d.port <- Some (local) + let notify dom =3D match dom.port with | None -> warn "domain %d: attempt to notify on unknown port" dom.id diff --git a/tools/ocaml/xenstored/process.ml b/tools/ocaml/xenstored/proce= ss.ml index b2973aca2a82..2ea940d7e2d5 100644 --- a/tools/ocaml/xenstored/process.ml +++ b/tools/ocaml/xenstored/process.ml @@ -567,11 +567,9 @@ let do_introduce con t domains cons data =3D let dom =3D if Domains.exist domains domid then let edom =3D Domains.find domains domid in - if (Domain.get_mfn edom) =3D mfn && (Connections.find_domain cons domid= ) !=3D con then begin + if (Domain.get_mfn edom) =3D mfn && (Connections.find_domain cons domid= ) !=3D con then (* Use XS_INTRODUCE for recreating the xenbus event-channel. *) - edom.remote_port <- remote_port; - Domain.bind_interdomain edom; - end; + Domain.rebind_evtchn edom remote_port; edom else try let ndom =3D Domains.create domains domid mfn remote_port in --=20 2.11.0 From nobody Sun May 19 03:38:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1669827341; cv=none; d=zohomail.com; s=zohoarc; b=cB6hZKm47rVelQgwF719qZwhg3Y1i5M80BDia0V94CSYRycU0kqjbQl+xetnqktt57Y3KXtXCxL1lN+hlY9WOhGzjBLvYwTulN/EbKwQiSRiNeyfhRvdzTvPep4mkWkdrSaq91r1xZ1jVSQ8/pYS0R+8bri30Npso2vS0ayRtxo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1669827341; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JHPaZnU4MRBqSr5mpoSeQPWq5CVxMy/v2+ZVcqfofCI=; b=honh4Ux8LJJ+uxxJXsjHrAZFMYOk1iDbHAXHMaqvWE987LSYtdeTRzsOMUWHsniRNd8utpUXHTXICwYlhXGSB1eX9BKQGVT+MLXRurT/DVg6wTFGz1VqJ7ANVTnlOpYESK+/vy+4zfXVndtltFzs+e+G8+y7rbHomGobpAUmStw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1669827341813606.3558574139672; Wed, 30 Nov 2022 08:55:41 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.450020.707157 (Exim 4.92) (envelope-from ) id 1p0QMb-0002NR-Qp; Wed, 30 Nov 2022 16:55:13 +0000 Received: by outflank-mailman (output) from mailman id 450020.707157; Wed, 30 Nov 2022 16:55:13 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMb-0002Kg-JF; Wed, 30 Nov 2022 16:55:13 +0000 Received: by outflank-mailman (input) for mailman id 450020; Wed, 30 Nov 2022 16:55:12 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMZ-0001h8-TM for xen-devel@lists.xenproject.org; Wed, 30 Nov 2022 16:55:12 +0000 Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com [216.71.145.153]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id bffddb96-70cf-11ed-8fd2-01056ac49cbb; Wed, 30 Nov 2022 17:55:10 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: bffddb96-70cf-11ed-8fd2-01056ac49cbb DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1669827310; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=dD1YNLn+pJ3fr6aL1kBtVoehn7b49zfM4pfTGJrb8DE=; b=heBqp1BQSb8OnPyyurxJ0kIzfDRfUz7j2czMhN4ywcmQdozdkU6OMvqP 3qPKp0KGfkl72LToYz8Jzo5FPeqyGHnOAutHtyIXWHjbCo04JLoUXPx25 zEuucMzaSO1VXtrD//8zC9fGB5KV7KbKrFMmfnTogJhcyYTSYuzWlu25j o=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: 4.0 X-MesageID: 85899597 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:y0M+66lAKnZxRRQmg86dt07o5gyMJkRdPkR7XQ2eYbSJt1+Wr1Gzt xIWCzjSa/rcNzH3Lt9+aYq38xsCv5XcyYdmSwI+rHw8QiMWpZLJC+rCIxarNUt+DCFhoGFPt JxCN4aafKjYaleG+39B55C49SEUOZmgH+a6U6icf3grHmeIcQ954Tp7gek1n4V0ttawBgKJq LvartbWfVSowFaYCEpNg064gE4p7aqaVA8w5ARkP6kS5weGzBH5MbpETU2PByqgKmVrNrbSq 9brlNmR4m7f9hExPdKp+p6TnpoiG+O60aCm0xK6aoD66vRwjnVaPpUTbZLwXXx/mTSR9+2d/ f0W3XCGpaXFCYWX8AgVe0Ew/yiTpsSq8pefSZS0mZT7I0Er7xIAahihZa07FdRwxwp5PY1B3 f4EGS8PSiibvuOzx761DbNco/59cMa+aevzulk4pd3YJfMvQJSFSKTW/95Imjw3g6iiH96HO ZBfM2A2Kk2dPVsfYT/7C7pn9AusrlD5fydVtxS+oq0v7nKI5AdwzKLsIJzefdniqcB9zhvI9 zObrjuR7hcyBtODkzu8zG6XvfaUsHrRRqYgNrGx+as/6LGU7jNKU0BHPbehmtG1g1Czc8hSI EsV/mwpt6da3FymSJzxUgO1pFaAvwUAQJxAHusi8gaPx6HIpQGDCQA5oiVpMYJ88pVsHHpzi wHPz4iB6SFTXKO9S26s6bWwlSuLOC0SIWFFPx8hd1VZ7Iy2yG0stS7nQtFmGa+zq9T6HzDs3 jyHxBQDa6UvYd0jjPviow2e6964jt2QF1NuuF2LNo6wxlkhDLNJcbBE/rQyARxoCI+CBmeMs 3Ef8yR1xLBfVMrd/MBhrQhkIV1I2xpnGGeE6bKMN8N7n9hIx5JEVd443d2GDB01WvvogBewC KMphStf5YVIIFyhZrJtboS6BqwClPa+RIu5CK6JMIYSPPCdkTNrGgk0PSZ8OEi0wCARfVwXY 8/HIa5A815FYUiY8NZGb7hEiuJ6rszP7WjSWYr633yaPUm2PRaopUM+GALWNIgRtfrUyDg5B v4Db6NmPT0DCryhCsQWmKZPRW03wY8TXMun8ZUIJrPbe2KL2ggJUpfs/F/oQKQ994w9qwsC1 i3VtpNwoLYnuUD6FA== IronPort-HdrOrdr: A9a23:YlkT2KobVUVd3nNO11rWDYMaV5oZeYIsimQD101hICG9E/bo9f xG+c5x6faaslsssR0b9exoQZPwOU80lqQFgrX5X43CYOCOggLBRr2Ki7GM/9SKIU3DH4Bmu5 uIPJIObOEYSWIK6/oT3WGDYrMdKObuytHQuQ/9p00dKj1XVw== X-IronPort-AV: E=Sophos;i="5.96,207,1665460800"; d="scan'208";a="85899597" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Christian Lindig , David Scott , Edwin Torok , Rob Hoes Subject: [PATCH v2 5/6] tools/oxenstored: Rework Domain evtchn handling to use port_pair Date: Wed, 30 Nov 2022 16:54:54 +0000 Message-ID: <20221130165455.31125-6-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20221130165455.31125-1-andrew.cooper3@citrix.com> References: <20221130165455.31125-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1669827343737100011 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Inter-domain event channels are always a pair of local and remote ports. Right now the handling is asymmetric, caused by the fact that the evtchn is bound after the associated Domain object is constructed. First, move binding of the event channel into the Domain.make() constructor. This means the local port no longer needs to be an option. It also removes the final callers of Domain.bind_interdomain. Next, introduce a new port_pair type to encapsulate the fact that these two should be updated together, and replace the previous port and remote_port fields. This refactoring also changes the Domain.get_port interface (remov= ing an option) so take the opportunity to name it get_local_port instead. Also, this fixes a use-after-free risk with Domain.close. Once the evtchn = has been unbound, the same local port number can be reused for a different purpose, so explicitly invalidate the ports to prevent their accidental mis= use in the future. This also cleans up some of the debugging, to always print a port pair. Signed-off-by: Andrew Cooper Acked-by: Christian Lindig Reviewed-by: Edwin T=C3=B6r=C3=B6k --- CC: Christian Lindig CC: David Scott CC: Edwin Torok CC: Rob Hoes v2: * New --- tools/ocaml/xenstored/connections.ml | 9 +---- tools/ocaml/xenstored/domain.ml | 75 ++++++++++++++++++--------------= ---- tools/ocaml/xenstored/domains.ml | 2 - 3 files changed, 39 insertions(+), 47 deletions(-) diff --git a/tools/ocaml/xenstored/connections.ml b/tools/ocaml/xenstored/c= onnections.ml index 7d68c583b43a..a80ae0bed2ce 100644 --- a/tools/ocaml/xenstored/connections.ml +++ b/tools/ocaml/xenstored/connections.ml @@ -48,9 +48,7 @@ let add_domain cons dom =3D let xbcon =3D Xenbus.Xb.open_mmap ~capacity (Domain.get_interface dom) (f= un () -> Domain.notify dom) in let con =3D Connection.create xbcon (Some dom) in Hashtbl.add cons.domains (Domain.get_id dom) con; - match Domain.get_port dom with - | Some p -> Hashtbl.add cons.ports p con; - | None -> () + Hashtbl.add cons.ports (Domain.get_local_port dom) con =20 let select ?(only_if =3D (fun _ -> true)) cons =3D Hashtbl.fold (fun _ con (ins, outs) -> @@ -97,10 +95,7 @@ let del_domain cons id =3D let con =3D find_domain cons id in Hashtbl.remove cons.domains id; (match Connection.get_domain con with - | Some d -> - (match Domain.get_port d with - | Some p -> Hashtbl.remove cons.ports p - | None -> ()) + | Some d -> Hashtbl.remove cons.ports (Domain.get_local_port d) | None -> ()); del_watches cons con; Connection.close con diff --git a/tools/ocaml/xenstored/domain.ml b/tools/ocaml/xenstored/domain= .ml index d59a9401e211..ecdd65f3209a 100644 --- a/tools/ocaml/xenstored/domain.ml +++ b/tools/ocaml/xenstored/domain.ml @@ -19,14 +19,31 @@ open Printf let debug fmt =3D Logging.debug "domain" fmt let warn fmt =3D Logging.warn "domain" fmt =20 +(* An event channel port pair. The remote port, and the local port it is + bound to. *) +type port_pair =3D +{ + local: Xeneventchn.t; + remote: int; +} + +(* Sentinal port_pair with both set to EVTCHN_INVALID *) +let invalid_ports =3D +{ + local =3D Xeneventchn.of_int 0; + remote =3D 0 +} + +let string_of_port_pair p =3D + sprintf "(l %d, r %d)" (Xeneventchn.to_int p.local) p.remote + type t =3D { id: Xenctrl.domid; mfn: nativeint; interface: Xenmmap.mmap_interface; eventchn: Event.t; - mutable remote_port: int; - mutable port: Xeneventchn.t option; + mutable ports: port_pair; mutable bad_client: bool; mutable io_credit: int; (* the rounds of ring process left to do, default= is 0, usually set to 1 when there is work detected, = could @@ -41,8 +58,8 @@ let is_dom0 d =3D d.id =3D 0 let get_id domain =3D domain.id let get_interface d =3D d.interface let get_mfn d =3D d.mfn -let get_remote_port d =3D d.remote_port -let get_port d =3D d.port +let get_remote_port d =3D d.ports.remote +let get_local_port d =3D d.ports.local =20 let is_bad_domain domain =3D domain.bad_client let mark_as_bad domain =3D domain.bad_client <- true @@ -56,54 +73,36 @@ let is_paused_for_conflict dom =3D dom.conflict_credit = <=3D 0.0 =20 let is_free_to_conflict =3D is_dom0 =20 -let string_of_port =3D function - | None -> "None" - | Some x -> string_of_int (Xeneventchn.to_int x) - let dump d chan =3D - fprintf chan "dom,%d,%nd,%d\n" d.id d.mfn d.remote_port + fprintf chan "dom,%d,%nd,%d\n" d.id d.mfn d.ports.remote =20 let rebind_evtchn d remote_port =3D - begin match d.port with - | None -> () - | Some p -> Event.unbind d.eventchn p - end; + Event.unbind d.eventchn d.ports.local; let local =3D Event.bind_interdomain d.eventchn d.id remote_port in - debug "domain %d rebind (l %s, r %d) =3D> (l %d, r %d)" - d.id (string_of_port d.port) d.remote_port - (Xeneventchn.to_int local) remote_port; - d.remote_port <- remote_port; - d.port <- Some (local) + let ports =3D { local; remote =3D remote_port } in + debug "domain %d rebind %s =3D> %s" + d.id (string_of_port_pair d.ports) (string_of_port_pair ports); + d.ports <- ports =20 let notify dom =3D - match dom.port with - | None -> warn "domain %d: attempt to notify on unknown port" dom.id - | Some port -> Event.notify dom.eventchn port - -let bind_interdomain dom =3D - begin match dom.port with - | None -> () - | Some port -> Event.unbind dom.eventchn port - end; - dom.port <- Some (Event.bind_interdomain dom.eventchn dom.id dom.remote_p= ort); - debug "bound domain %d remote port %d to local port %s" dom.id dom.remote= _port (string_of_port dom.port) - + Event.notify dom.eventchn dom.ports.local =20 let close dom =3D - debug "domain %d unbound port %s" dom.id (string_of_port dom.port); - begin match dom.port with - | None -> () - | Some port -> Event.unbind dom.eventchn port - end; + debug "domain %d unbind %s" dom.id (string_of_port_pair dom.ports); + Event.unbind dom.eventchn dom.ports.local; + dom.ports <- invalid_ports; Xenmmap.unmap dom.interface =20 -let make id mfn remote_port interface eventchn =3D { +let make id mfn remote_port interface eventchn =3D + let local =3D Event.bind_interdomain eventchn id remote_port in + let ports =3D { local; remote =3D remote_port } in + debug "domain %d bind %s" id (string_of_port_pair ports); +{ id =3D id; mfn =3D mfn; - remote_port =3D remote_port; + ports; interface =3D interface; eventchn =3D eventchn; - port =3D None; bad_client =3D false; io_credit =3D 0; conflict_credit =3D !Define.conflict_burst_limit; diff --git a/tools/ocaml/xenstored/domains.ml b/tools/ocaml/xenstored/domai= ns.ml index 26018ac0dd3d..2ab0c5f4d8d0 100644 --- a/tools/ocaml/xenstored/domains.ml +++ b/tools/ocaml/xenstored/domains.ml @@ -126,7 +126,6 @@ let create doms domid mfn remote_port =3D let interface =3D Xenctrl.map_foreign_range xc domid (Xenmmap.getpagesize= ()) mfn in let dom =3D Domain.make domid mfn remote_port interface doms.eventchn in Hashtbl.add doms.table domid dom; - Domain.bind_interdomain dom; dom =20 let xenstored_kva =3D ref "" @@ -144,7 +143,6 @@ let create0 doms =3D =20 let dom =3D Domain.make 0 Nativeint.zero remote_port interface doms.event= chn in Hashtbl.add doms.table 0 dom; - Domain.bind_interdomain dom; Domain.notify dom; dom =20 --=20 2.11.0 From nobody Sun May 19 03:38:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1669827345; cv=none; d=zohomail.com; s=zohoarc; b=adyePh7TQsXrHNQ9om9nKhIjS1u+pRvDrPLqKZWpy3k672XK1ZIlJlRZBwotF3Nb1vtKqs6KdHalUUfDSnBN4IKHIDZ4qNW3I6sMH7sPhtjbp6Ie6tPCqs3IPamwHHBnK9cQPfxI33yAiEfxosAsYY4L3FlNKXEF7/CST/vNGgY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1669827345; 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; bh=8pKUwJhi+/yp/CENcUoGJ31eV/QVxpkERTqgO/l0tgI=; b=kG04Ub8t3XZ0uOWqT7WOhaOaeG57S5n3FuwSTAiB6vmyvYYgrLx+gjZcKWOmEb2/h/seohqyqBO71DV2XWJRIZssSPzCU46gJ5EPMCPqIH8KvGxQF/WRkSkoi6lfgGWUlSuyKwjIbM3L37Q6TivHFVdbXcKQyLpeOJl6dSQ21vU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1669827345167795.858266877675; Wed, 30 Nov 2022 08:55:45 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.450022.707191 (Exim 4.92) (envelope-from ) id 1p0QMh-0003RT-Ps; Wed, 30 Nov 2022 16:55:19 +0000 Received: by outflank-mailman (output) from mailman id 450022.707191; Wed, 30 Nov 2022 16:55:19 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMh-0003RI-Lp; Wed, 30 Nov 2022 16:55:19 +0000 Received: by outflank-mailman (input) for mailman id 450022; Wed, 30 Nov 2022 16:55:19 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1p0QMg-00028d-MN for xen-devel@lists.xenproject.org; Wed, 30 Nov 2022 16:55:18 +0000 Received: from esa4.hc3370-68.iphmx.com (esa4.hc3370-68.iphmx.com [216.71.155.144]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id c2e3d686-70cf-11ed-91b6-6bf2151ebd3b; Wed, 30 Nov 2022 17:55:16 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: c2e3d686-70cf-11ed-91b6-6bf2151ebd3b DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1669827316; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4h8p5ZL96QWbBFw35D5N8A/MjngJvTY0xr47198+Zqo=; b=K1CwKvxzDkmhSMgUwTNfPqbwjMf6/d3Zvsglj0NiM/ncTYhpi7qknguk v7G5Rg9UUFkwL88d0zIP0LrDajyuIeGSLjLyo0Mc+AfWtNEoUTX1yHcXV C4GpTFE+RRPhFRekUNJUqQkZzRPno/k1nsaspWr3lgJQBp5jvlHh9apkS Q=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: 4.0 X-MesageID: 88419233 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:klQNaaOKBZGGsdfvrR2ol8FynXyQoLVcMsEvi/4bfWQNrUoj1WYPm zEcXG2EPanbNjGnfNEnOY7ip05U7MfTztU1Twto+SlhQUwRpJueD7x1DKtS0wC6dZSfER09v 63yTvGacajYm1eF/k/F3oDJ9CU6jufQA+KmU4YoAwgpLSd8UiAtlBl/rOAwh49skLCRDhiE/ Nj/uKUzAnf8s9JPGj9SuvzrRC9H5qyo4mpB5QRmPpingXeF/5UrJMNHTU2OByOQrrl8RoaSW +vFxbelyWLVlz9F5gSNy+uTnuUiG9Y+DCDW4pZkc/HKbitq/0Te5p0TJvsEAXq7vh3S9zxHJ HehgrTrIeshFvWkdO3wyHC0GQkmVUFN0OevzXRSLaV/ZqAJGpfh66wGMa04AWEX0stzGEMVq cQgETcmdwumwLiH+ZKkSOY506zPLOGzVG8eknRpzDWfBvc6W5HTBa7N4Le03h9p2JoIR6yHI ZNEN3w/N3wsYDUWUrsTILs4kP2lmT/UdDpApUjOjaE2/3LS3Ep6172F3N/9KozWHJQPxR3wS mTu1lXUCUoLDuSmzBmgrni3hrbxrwL8R9dHfFG/3qEz2wDCroAJMzUaXEW2ieO0gUm/X5RYM UN80jojq+0++VKmSvH5XgakuziUsxgEQd1SHuYmrgaXxcLpDx2xXzZeCGQbMZp/6ZFwFWdCO kK1c83BKDh2kubJcUqk8ZyNthb1YxksDXAAanpRJeca2OXLrIY2hxPJa99sFq+pk9H4cQ3NL yC2QDsW3OtK05NSv0mv1RWe2m/3+MCVJuIgzl+PNl9J+D+Vc2JMi2aAzVHApchNI4+CJrVql ChVwpPOhAzi4HzkqcBsfAnvNOvxjxpmGGeG6bKKI3XG32rFxpJbVdoMiAyS3W8wWir+RRfnY VXIpSRa74JJMX2hYMdfOtzvWpt2k/a9S4i5CJg4i+aihLArLGdrGwk3NSatM53FyhBwwcnTx 7/EGSpTMZrqIfs+l2fnLwvs+bQq2jo/1QvuqWPTlnyaPU6lTCfNE98taQLeBt3VGYvY+G05B f4DbZrVo/ieOcWiChTqHXk7dAtbdyFkVc2u8qS6tIere2JbJY3oMNeJqZtJRmCvt/09ejvgl p1lZnJl9Q== IronPort-HdrOrdr: A9a23:X3nigaiwbQqmKpLzJgOaLmQ1h3BQXvIji2hC6mlwRA09TyX+ra +TdZUguyMc7Qx7ZJhOo6HiBEDtewK/yXcX2+gs1MmZLW7bUQKTRekP0WKI+UyFJ8SRzJ856U 4ZSchDIey1N35crey/zSuZN5Ib4PehmZrDuc7ui01qSgFhL4VOhj0VNjqm X-IronPort-AV: E=Sophos;i="5.96,207,1665460800"; d="scan'208";a="88419233" From: Andrew Cooper To: Xen-devel CC: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= , "Andrew Cooper" , Christian Lindig , David Scott , Rob Hoes Subject: [PATCH v2 6/6] tools/oxenstored: Keep /dev/xen/evtchn open across live update Date: Wed, 30 Nov 2022 16:54:55 +0000 Message-ID: <20221130165455.31125-7-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20221130165455.31125-1-andrew.cooper3@citrix.com> References: <20221130165455.31125-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1669827345838100013 From: Edwin T=C3=B6r=C3=B6k Closing the evtchn handle will unbind and free all local ports. The new xenstored would need to rebind all evtchns, which is work that we don't want or need to be doing during the critical handover period. However, it turns out that the Windows PV drivers also rebind their local p= ort too across suspend/resume, leaving (o)xenstored with a stale idea of the remote port to use. In this case, reusing the established connection is the only robust option. Therefore: * Have oxenstored open /dev/xen/evtchn without CLOEXEC at start of day. * Extend the handover information with the evtchn fd, domexc virq local po= rt, and the local port number for each domain connection. * Have (the new) oxenstored recover the open handle using Xeneventchn.fdop= en, and use the provided local ports rather than trying to rebind them. When this new information isn't present (i.e. live updating from an oxensto= red prior to this change), the best-effort status quo will have to do. Signed-off-by: Edwin T=C3=B6r=C3=B6k Signed-off-by: Andrew Cooper --- CC: Christian Lindig CC: David Scott CC: Edwin Torok CC: Rob Hoes v2: * Bind DOM_EXC virq for non-LU starts. (Regression introduced between v2 = and v3 of the original series) * Rebase over previous Evtchn.init() virq cleanup * Preserve the DOM_EXC virq local port too --- tools/ocaml/xenstored/domain.ml | 13 ++++-- tools/ocaml/xenstored/domains.ml | 9 ++-- tools/ocaml/xenstored/event.ml | 20 +++++++-- tools/ocaml/xenstored/process.ml | 2 +- tools/ocaml/xenstored/xenstored.ml | 85 +++++++++++++++++++++++++---------= ---- 5 files changed, 90 insertions(+), 39 deletions(-) diff --git a/tools/ocaml/xenstored/domain.ml b/tools/ocaml/xenstored/domain= .ml index ecdd65f3209a..c196edf6a059 100644 --- a/tools/ocaml/xenstored/domain.ml +++ b/tools/ocaml/xenstored/domain.ml @@ -74,7 +74,8 @@ let is_paused_for_conflict dom =3D dom.conflict_credit <= =3D 0.0 let is_free_to_conflict =3D is_dom0 =20 let dump d chan =3D - fprintf chan "dom,%d,%nd,%d\n" d.id d.mfn d.ports.remote + fprintf chan "dom,%d,%nd,%d,%d\n" + d.id d.mfn d.ports.remote (Xeneventchn.to_int d.ports.local) =20 let rebind_evtchn d remote_port =3D Event.unbind d.eventchn d.ports.local; @@ -93,8 +94,14 @@ let close dom =3D dom.ports <- invalid_ports; Xenmmap.unmap dom.interface =20 -let make id mfn remote_port interface eventchn =3D - let local =3D Event.bind_interdomain eventchn id remote_port in +(* On clean start, local_port will be None, and we must bind the remote po= rt + given. On Live Update, the event channel is already bound, and both the + local and remote port numbers come from the transfer record. *) +let make ?local_port ~remote_port id mfn interface eventchn =3D + let local =3D match local_port with + | None -> Event.bind_interdomain eventchn id remote_port + | Some p -> Xeneventchn.of_int p + in let ports =3D { local; remote =3D remote_port } in debug "domain %d bind %s" id (string_of_port_pair ports); { diff --git a/tools/ocaml/xenstored/domains.ml b/tools/ocaml/xenstored/domai= ns.ml index 2ab0c5f4d8d0..b6c075c838ab 100644 --- a/tools/ocaml/xenstored/domains.ml +++ b/tools/ocaml/xenstored/domains.ml @@ -56,6 +56,7 @@ let exist doms id =3D Hashtbl.mem doms.table id let find doms id =3D Hashtbl.find doms.table id let number doms =3D Hashtbl.length doms.table let iter doms fct =3D Hashtbl.iter (fun _ b -> fct b) doms.table +let eventchn doms =3D doms.eventchn =20 let rec is_empty_queue q =3D Queue.is_empty q || @@ -122,16 +123,16 @@ let cleanup doms =3D let resume _doms _domid =3D () =20 -let create doms domid mfn remote_port =3D +let create doms ?local_port ~remote_port domid mfn =3D let interface =3D Xenctrl.map_foreign_range xc domid (Xenmmap.getpagesize= ()) mfn in - let dom =3D Domain.make domid mfn remote_port interface doms.eventchn in + let dom =3D Domain.make ?local_port ~remote_port domid mfn interface doms= .eventchn in Hashtbl.add doms.table domid dom; dom =20 let xenstored_kva =3D ref "" let xenstored_port =3D ref "" =20 -let create0 doms =3D +let create0 ?local_port doms =3D let remote_port =3D Utils.read_file_single_integer !xenstored_port in =20 let interface =3D @@ -141,7 +142,7 @@ let create0 doms =3D interface in =20 - let dom =3D Domain.make 0 Nativeint.zero remote_port interface doms.event= chn in + let dom =3D Domain.make ?local_port ~remote_port 0 Nativeint.zero interfa= ce doms.eventchn in Hashtbl.add doms.table 0 dom; Domain.notify dom; dom diff --git a/tools/ocaml/xenstored/event.ml b/tools/ocaml/xenstored/event.ml index a3be296374ff..629dc6041bb0 100644 --- a/tools/ocaml/xenstored/event.ml +++ b/tools/ocaml/xenstored/event.ml @@ -20,9 +20,18 @@ type t =3D { domexc: Xeneventchn.t; } =20 -let init () =3D - let handle =3D Xeneventchn.init () in - let domexc =3D Xeneventchn.bind_dom_exc_virq handle in +(* On clean start, both parameters will be None, and we must open the evtc= hn + handle and bind the DOM_EXC VIRQ. On Live Update, the fd is preserved + across exec(), and the DOM_EXC VIRQ still bound. *) +let init ?fd ?domexc_port () =3D + let handle =3D match fd with + | None -> Xeneventchn.init ~cloexec:false () + | Some fd -> fd |> Utils.FD.of_int |> Xeneventchn.fdopen + in + let domexc =3D match domexc_port with + | None -> Xeneventchn.bind_dom_exc_virq handle + | Some p -> Xeneventchn.of_int p + in { handle; domexc } =20 let fd eventchn =3D Xeneventchn.fd eventchn.handle @@ -31,3 +40,8 @@ let unbind eventchn port =3D Xeneventchn.unbind eventchn.= handle port let notify eventchn port =3D Xeneventchn.notify eventchn.handle port let pending eventchn =3D Xeneventchn.pending eventchn.handle let unmask eventchn port =3D Xeneventchn.unmask eventchn.handle port + +let dump e chan =3D + Printf.fprintf chan "evtchn-dev,%d,%d\n" + (Utils.FD.to_int @@ Xeneventchn.fd e.handle) + (Xeneventchn.to_int e.domexc) diff --git a/tools/ocaml/xenstored/process.ml b/tools/ocaml/xenstored/proce= ss.ml index 2ea940d7e2d5..ad2e0fa70f4a 100644 --- a/tools/ocaml/xenstored/process.ml +++ b/tools/ocaml/xenstored/process.ml @@ -572,7 +572,7 @@ let do_introduce con t domains cons data =3D Domain.rebind_evtchn edom remote_port; edom else try - let ndom =3D Domains.create domains domid mfn remote_port in + let ndom =3D Domains.create ~remote_port domains domid mfn in Connections.add_domain cons ndom; Connections.fire_spec_watches (Transaction.get_root t) cons Store.Path.= introduce_domain; ndom diff --git a/tools/ocaml/xenstored/xenstored.ml b/tools/ocaml/xenstored/xen= stored.ml index 1f11f576b515..f526f4fb2310 100644 --- a/tools/ocaml/xenstored/xenstored.ml +++ b/tools/ocaml/xenstored/xenstored.ml @@ -144,7 +144,7 @@ exception Bad_format of string =20 let dump_format_header =3D "$xenstored-dump-format" =20 -let from_channel_f chan global_f socket_f domain_f watch_f store_f =3D +let from_channel_f chan global_f evtchn_f socket_f domain_f watch_f store_= f =3D let unhexify s =3D Utils.unhexify s in let getpath s =3D let u =3D Utils.unhexify s in @@ -165,12 +165,19 @@ let from_channel_f chan global_f socket_f domain_f wa= tch_f store_f =3D (* there might be more parameters here, e.g. a RO socket from a previous version: ignore it *) global_f ~rw + | "evtchn-dev" :: fd :: domexc_port :: [] -> + evtchn_f ~fd:(int_of_string fd) + ~domexc_port:(int_of_string domexc_port) | "socket" :: fd :: [] -> socket_f ~fd:(int_of_string fd) - | "dom" :: domid :: mfn :: remote_port :: []-> - domain_f (int_of_string domid) - (Nativeint.of_string mfn) - (int_of_string remote_port) + | "dom" :: domid :: mfn :: remote_port :: rest -> + let local_port =3D match rest with + | [] -> None (* backward compat: old version didn't have it *) + | local_port :: _ -> Some (int_of_string local_port) in + domain_f ?local_port + ~remote_port:(int_of_string remote_port) + (int_of_string domid) + (Nativeint.of_string mfn) | "watch" :: domid :: path :: token :: [] -> watch_f (int_of_string domid) (unhexify path) (unhexify token) @@ -189,10 +196,21 @@ let from_channel_f chan global_f socket_f domain_f wa= tch_f store_f =3D done; info "Completed loading xenstore dump" =20 -let from_channel store cons doms chan =3D +let from_channel store cons domains_init chan =3D (* don't let the permission get on our way, full perm ! *) let op =3D Store.get_ops store Perms.Connection.full_rights in let rwro =3D ref (None) in + let doms =3D ref (None) in + + let require_doms () =3D + match !doms with + | None -> + warn "No event channel file descriptor available in dump!"; + let domains =3D domains_init @@ Event.init () in + doms :=3D Some domains; + domains + | Some d -> d + in let global_f ~rw =3D let get_listen_sock sockfd =3D let fd =3D sockfd |> int_of_string |> Utils.FD.of_int in @@ -201,6 +219,10 @@ let from_channel store cons doms chan =3D in rwro :=3D get_listen_sock rw in + let evtchn_f ~fd ~domexc_port =3D + let evtchn =3D Event.init ~fd ~domexc_port () in + doms :=3D Some(domains_init evtchn) + in let socket_f ~fd =3D let ufd =3D Utils.FD.of_int fd in let is_valid =3D try (Unix.fstat ufd).Unix.st_kind =3D Unix.S_SOCK with = _ -> false in @@ -209,12 +231,13 @@ let from_channel store cons doms chan =3D else warn "Ignoring invalid socket FD %d" fd in - let domain_f domid mfn remote_port =3D + let domain_f ?local_port ~remote_port domid mfn =3D + let doms =3D require_doms () in let ndom =3D if domid > 0 then - Domains.create doms domid mfn remote_port + Domains.create ?local_port ~remote_port doms domid mfn else - Domains.create0 doms + Domains.create0 ?local_port doms in Connections.add_domain cons ndom; in @@ -229,8 +252,8 @@ let from_channel store cons doms chan =3D op.Store.write path value; op.Store.setperms path perms in - from_channel_f chan global_f socket_f domain_f watch_f store_f; - !rwro + from_channel_f chan global_f evtchn_f socket_f domain_f watch_f store_f; + !rwro, require_doms () =20 let from_file store cons doms file =3D info "Loading xenstore dump from %s" file; @@ -238,7 +261,7 @@ let from_file store cons doms file =3D finally (fun () -> from_channel store doms cons channel) (fun () -> close_in channel) =20 -let to_channel store cons rw chan =3D +let to_channel store cons (rw, evtchn) chan =3D let hexify s =3D Utils.hexify s in =20 fprintf chan "%s\n" dump_format_header; @@ -248,6 +271,9 @@ let to_channel store cons rw chan =3D Utils.FD.to_int fd in fprintf chan "global,%d\n" (fdopt rw); =20 + (* dump evtchn device info *) + Event.dump evtchn chan; + (* dump connections related to domains: domid, mfn, eventchn port/ socket= s, and watches *) Connections.iter cons (fun con -> Connection.dump con chan); =20 @@ -367,7 +393,6 @@ let _ =3D | None -> () end; =20 let store =3D Store.create () in - let eventchn =3D Event.init () in let next_frequent_ops =3D ref 0. in let advance_next_frequent_ops () =3D next_frequent_ops :=3D (Unix.gettimeofday () +. !Define.conflict_max_his= tory_seconds) @@ -375,16 +400,8 @@ let _ =3D let delay_next_frequent_ops_by duration =3D next_frequent_ops :=3D !next_frequent_ops +. duration in - let domains =3D Domains.init eventchn advance_next_frequent_ops in + let domains_init eventchn =3D Domains.init eventchn advance_next_frequent= _ops in =20 - (* For things that need to be done periodically but more often - * than the periodic_ops function *) - let frequent_ops () =3D - if Unix.gettimeofday () > !next_frequent_ops then ( - History.trim (); - Domains.incr_conflict_credit domains; - advance_next_frequent_ops () - ) in let cons =3D Connections.create () in =20 let quit =3D ref false in @@ -393,14 +410,15 @@ let _ =3D List.iter (fun path -> Store.write store Perms.Connection.full_rights path "") Store.Path.speci= als; =20 - let rw_sock =3D + let rw_sock, domains =3D if cf.restart && Sys.file_exists Disk.xs_daemon_database then ( - let rwro =3D DB.from_file store domains cons Disk.xs_daemon_database in + let rw, domains =3D DB.from_file store domains_init cons Disk.xs_daemon_= database in info "Live reload: database loaded"; Process.LiveUpdate.completed (); - rwro + rw, domains ) else ( info "No live reload: regular startup"; + let domains =3D domains_init @@ Event.init () in if !Disk.enable then ( info "reading store from disk"; Disk.read store @@ -413,9 +431,18 @@ let _ =3D if cf.domain_init then ( Connections.add_domain cons (Domains.create0 domains); ); - rw_sock + rw_sock, domains ) in =20 + (* For things that need to be done periodically but more often + * than the periodic_ops function *) + let frequent_ops () =3D + if Unix.gettimeofday () > !next_frequent_ops then ( + History.trim (); + Domains.incr_conflict_credit domains; + advance_next_frequent_ops () + ) in + (* required for xenstore-control to detect availability of live-update *) let tool_path =3D Store.Path.of_string "/tool" in if not (Store.path_exists store tool_path) then @@ -430,8 +457,10 @@ let _ =3D Sys.set_signal Sys.sigusr1 (Sys.Signal_handle (fun _ -> sigusr1_handler s= tore)); Sys.set_signal Sys.sigpipe Sys.Signal_ignore; =20 + let eventchn =3D Domains.eventchn domains in + if cf.activate_access_log then begin - let post_rotate () =3D DB.to_file store cons (None) Disk.xs_daemon_datab= ase in + let post_rotate () =3D DB.to_file store cons (None, eventchn) Disk.xs_da= emon_database in Logging.init_access_log post_rotate end; =20 @@ -593,7 +622,7 @@ let _ =3D live_update :=3D Process.LiveUpdate.should_run cons; if !live_update || !quit then begin (* don't initiate live update if saving state fails *) - DB.to_file store cons (rw_sock) Disk.xs_daemon_database; + DB.to_file store cons (rw_sock, eventchn) Disk.xs_daemon_database; quit :=3D true; end with exc -> --=20 2.11.0