From nobody Fri Nov 29 00:35:13 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=none dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1652476807; cv=none; d=zohomail.com; s=zohoarc; b=SzGU36TttsLMS8m5gfeDxfxxhLtvLMnIRvajXpIYN3oy5q63cYxRDF1WjcGV/cmzh4vIGdWu8FGTTnX63C7C5xmWLSzVB2yXIXBh0tYpyy8Hfky1jo+6sOUh7c8f9u5Eq5Tbam3NO98ooukioKA/mtL12X+5/Q2isPahnHUUv5c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1652476807; h=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=lDs6H4Wxv5KLnqL/T1m/4y7ht2khpUm85NhPkBXoCNk=; b=mphuhDDbdaOBrOuVR7y3Z54OeRgTQwWoRrtdbJQVyQE0YajOGuVxVFFdUQC8qYMPpe7BGZKHQDbNR20EmTqy9ttm8qTd0SnFYLJMCgmPj2VdotTkQfdetciyfTGsBGbFMxOMLIAMVLZyLAhelO4+S+l9MH0vRr/sIoDtOiS8bqo= 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=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1652476807900818.5486539063604; Fri, 13 May 2022 14:20:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.328857.552019 (Exim 4.92) (envelope-from ) id 1npchM-0003EC-9Z; Fri, 13 May 2022 21:19:44 +0000 Received: by outflank-mailman (output) from mailman id 328857.552019; Fri, 13 May 2022 21:19:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1npchM-0003E5-6F; Fri, 13 May 2022 21:19:44 +0000 Received: by outflank-mailman (input) for mailman id 328857; Fri, 13 May 2022 21:19:43 +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 1npchK-0002hA-VF for xen-devel@lists.xenproject.org; Fri, 13 May 2022 21:19:43 +0000 Received: from dfw.source.kernel.org (dfw.source.kernel.org [2604:1380:4641:c500::1]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 66e8a839-d302-11ec-b8b8-f95467ff1ed0; Fri, 13 May 2022 23:19:41 +0200 (CEST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id BA6A061F5C; Fri, 13 May 2022 21:19:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DCFE4C34100; Fri, 13 May 2022 21:19:39 +0000 (UTC) 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: 66e8a839-d302-11ec-b8b8-f95467ff1ed0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652476780; bh=1seN4daKntnM5guSKJ74plZIHGGLz1D4C2nyHZd8PjU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PyX6D3o+LcpMEojSPU6QoJvVWNdFER/RInuyzYrME0iuwcfoHomkF4rgUh39/EBz0 yh35ljGKyg8E+PRKhsBjMTCKaEMiIy+f7Yaq690OMbJlEbYiJ7tIiAYPxwWbd1CGow zwbPXMY1k6z+8zZ7Q1hqwUoZP0wpXdKJr8g7lhFj1DzpJp4eKYcN+1GzHskwmOJm1a dUF+l73LJRxF9IbjSs2yCsvNFhlWjMArLq0fpuqKxxzA6KiWaCtT0J5soYIvVuIB8h q29xlpsEKKuRGNIgSaODizJ0kxB1EKd4IVVYcJPvajUmxZKzojjuf9NxTiOn1hKJ1g /06N/9EaxYvew== From: Stefano Stabellini To: boris.ostrovsky@oracle.com, jgross@suse.com Cc: sstabellini@kernel.org, xen-devel@lists.xenproject.org, Stefano Stabellini Subject: [PATCH LINUX v5 1/2] xen: sync xs_wire.h header with upstream xen Date: Fri, 13 May 2022 14:19:37 -0700 Message-Id: <20220513211938.719341-1-sstabellini@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1652476809165100001 Content-Type: text/plain; charset="utf-8" From: Stefano Stabellini Sync the xs_wire.h header file in Linux with the one in Xen. Signed-off-by: Stefano Stabellini Reviewed-by: Boris Ostrovsky --- Changes in v5: - add XSD_ERROR(E2BIG) - Boris gave his reviewed-by but due to this change I removed it --- include/xen/interface/io/xs_wire.h | 37 ++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/include/xen/interface/io/xs_wire.h b/include/xen/interface/io/= xs_wire.h index d40a44f09b16..b62365478ac0 100644 --- a/include/xen/interface/io/xs_wire.h +++ b/include/xen/interface/io/xs_wire.h @@ -10,7 +10,8 @@ =20 enum xsd_sockmsg_type { - XS_DEBUG, + XS_CONTROL, +#define XS_DEBUG XS_CONTROL XS_DIRECTORY, XS_READ, XS_GET_PERMS, @@ -30,8 +31,13 @@ enum xsd_sockmsg_type XS_IS_DOMAIN_INTRODUCED, XS_RESUME, XS_SET_TARGET, - XS_RESTRICT, - XS_RESET_WATCHES, + /* XS_RESTRICT has been removed */ + XS_RESET_WATCHES =3D XS_SET_TARGET + 2, + XS_DIRECTORY_PART, + + XS_TYPE_COUNT, /* Number of valid types. */ + + XS_INVALID =3D 0xffff /* Guaranteed to remain an invalid type */ }; =20 #define XS_WRITE_NONE "NONE" @@ -59,7 +65,8 @@ static struct xsd_errors xsd_errors[] __attribute__((unus= ed)) =3D { XSD_ERROR(EROFS), XSD_ERROR(EBUSY), XSD_ERROR(EAGAIN), - XSD_ERROR(EISCONN) + XSD_ERROR(EISCONN), + XSD_ERROR(E2BIG) }; =20 struct xsd_sockmsg @@ -87,9 +94,31 @@ struct xenstore_domain_interface { char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */ XENSTORE_RING_IDX req_cons, req_prod; XENSTORE_RING_IDX rsp_cons, rsp_prod; + uint32_t server_features; /* Bitmap of features supported by the serve= r */ + uint32_t connection; + uint32_t error; }; =20 /* Violating this is very bad. See docs/misc/xenstore.txt. */ #define XENSTORE_PAYLOAD_MAX 4096 =20 +/* Violating these just gets you an error back */ +#define XENSTORE_ABS_PATH_MAX 3072 +#define XENSTORE_REL_PATH_MAX 2048 + +/* The ability to reconnect a ring */ +#define XENSTORE_SERVER_FEATURE_RECONNECTION 1 +/* The presence of the "error" field in the ring page */ +#define XENSTORE_SERVER_FEATURE_ERROR 2 + +/* Valid values for the connection field */ +#define XENSTORE_CONNECTED 0 /* the steady-state */ +#define XENSTORE_RECONNECT 1 /* guest has initiated a reconnect */ + +/* Valid values for the error field */ +#define XENSTORE_ERROR_NONE 0 /* No error */ +#define XENSTORE_ERROR_COMM 1 /* Communication problem */ +#define XENSTORE_ERROR_RINGIDX 2 /* Invalid ring index */ +#define XENSTORE_ERROR_PROTO 3 /* Protocol violation (payload too long) = */ + #endif /* _XS_WIRE_H */ --=20 2.25.1 From nobody Fri Nov 29 00:35:13 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=none dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1652476804; cv=none; d=zohomail.com; s=zohoarc; b=Svbih3IBHFt8NrWV6EC96iYJp3VUvkzyYBfuSrE42CJMjAStAUjXOpp/GxkV0SLJRQk1dkgOv7vKaBy6V16mdKZHcEWx/W3lzJJlzFow0Exo2/n6wqJok1Tf73iSC9ortimCBMVVYCR+SVoX52OYOSwAIf3ADm4YePnEwRvXRHs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1652476804; h=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=q6XpCojuznlm0+aSUtPqw48Dg/d695miljxnm0sHJkc=; b=IET+rtLxbGFI6guoFblSqS7YH52CGqlWKwEX70nH600u+9n3aTnUpE06tIcUMkk+ZSdC8Ue7Lg0r/AVcX7uz3RVJBky4O+AV7gVnNlAmJaPEgkHyyQjW2wjCBa+pNYGFZGVmS/rteQ7nfaPRdyFTltBG7gZaHKLj9ppq7ljSb/c= 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=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 165247680438729.97286736254523; Fri, 13 May 2022 14:20:04 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.328859.552029 (Exim 4.92) (envelope-from ) id 1npchN-0003UL-HR; Fri, 13 May 2022 21:19:45 +0000 Received: by outflank-mailman (output) from mailman id 328859.552029; Fri, 13 May 2022 21:19:45 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1npchN-0003UA-EZ; Fri, 13 May 2022 21:19:45 +0000 Received: by outflank-mailman (input) for mailman id 328859; Fri, 13 May 2022 21:19:44 +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 1npchL-0003Bg-Vn for xen-devel@lists.xenproject.org; Fri, 13 May 2022 21:19:43 +0000 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 672742ff-d302-11ec-aa76-f101dd46aeb6; Fri, 13 May 2022 23:19:42 +0200 (CEST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 3A4EB62314; Fri, 13 May 2022 21:19:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 550F0C34113; Fri, 13 May 2022 21:19:40 +0000 (UTC) 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: 672742ff-d302-11ec-aa76-f101dd46aeb6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652476780; bh=bilc60kub9Jt+89+0VvQBOq5M0jsXFwdI/d4eFUURIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pOPTONZ+xevYYDUIfEq7+1V70ZmDaYD/GR9gzPL4FkPDqMRkApP6Q6SkT3QdynkkB RpbNK5vj5xzQ8WtEyPbg07QzEphRck+zhn1+SZRN9Ugc6DSLDQ5Jj+0GrG4BxvSBev lEgxidEInASsP7rqrzxBc3gC21thVD6AFgxW9PuK46YwQx1iG4tYgNCGte/s7w7LF2 +5LJcUC27u+kKJ4wZUUQzQKYX94eiFVulFxDN/uv9nArsTv3eNVYOnuf49VRZsehtI Gp2+UizmCUX7XESzjLCSPpV4WNCYcGBgZWVwCDgyAaE8QobybmJkeP7vaWqYEsjTQT c4k+I7h/ct/Og== From: Stefano Stabellini To: boris.ostrovsky@oracle.com, jgross@suse.com Cc: sstabellini@kernel.org, xen-devel@lists.xenproject.org, Luca Miccio , Stefano Stabellini Subject: [PATCH LINUX v5 2/2] xen: add support for initializing xenstore later as HVM domain Date: Fri, 13 May 2022 14:19:38 -0700 Message-Id: <20220513211938.719341-2-sstabellini@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1652476805346100001 Content-Type: text/plain; charset="utf-8" From: Luca Miccio When running as dom0less guest (HVM domain on ARM) the xenstore event channel is available at domain creation but the shared xenstore interface page only becomes available later on. In that case, wait for a notification on the xenstore event channel, then complete the xenstore initialization later, when the shared page is actually available. The xenstore page has few extra field. Add them to the shared struct. One of the field is "connection", when the connection is ready, it is zero. If the connection is not-zero, wait for a notification. Signed-off-by: Luca Miccio Signed-off-by: Stefano Stabellini Reviewed-by: Boris Ostrovsky Tested-by: Petr Mladek --- Changes in v5: - no need to initialize local variable err - code alignment Changes in v4: - improve in-code comments - move header sync to separate patch - use XENSTORE_CONNECTED Changes in v3: - check for the connection field, if it is not zero, wait for event Changes in v2: - remove XENFEAT_xenstore_late_init --- drivers/xen/xenbus/xenbus_probe.c | 91 ++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 20 deletions(-) diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_= probe.c index fe360c33ce71..d367f2bd2b93 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c @@ -65,6 +65,7 @@ #include "xenbus.h" =20 =20 +static int xs_init_irq; int xen_store_evtchn; EXPORT_SYMBOL_GPL(xen_store_evtchn); =20 @@ -750,6 +751,20 @@ static void xenbus_probe(void) { xenstored_ready =3D 1; =20 + if (!xen_store_interface) { + xen_store_interface =3D xen_remap(xen_store_gfn << XEN_PAGE_SHIFT, + XEN_PAGE_SIZE); + /* + * Now it is safe to free the IRQ used for xenstore late + * initialization. No need to unbind: it is about to be + * bound again from xb_init_comms. Note that calling + * unbind_from_irqhandler now would result in xen_evtchn_close() + * being called and the event channel not being enabled again + * afterwards, resulting in missed event notifications. + */ + free_irq(xs_init_irq, &xb_waitq); + } + /* * In the HVM case, xenbus_init() deferred its call to * xs_init() in case callbacks were not operational yet. @@ -798,20 +813,22 @@ static int __init xenbus_probe_initcall(void) { /* * Probe XenBus here in the XS_PV case, and also XS_HVM unless we - * need to wait for the platform PCI device to come up. + * need to wait for the platform PCI device to come up or + * xen_store_interface is not ready. */ if (xen_store_domain_type =3D=3D XS_PV || (xen_store_domain_type =3D=3D XS_HVM && - !xs_hvm_defer_init_for_callback())) + !xs_hvm_defer_init_for_callback() && + xen_store_interface !=3D NULL)) xenbus_probe(); =20 /* - * For XS_LOCAL, spawn a thread which will wait for xenstored - * or a xenstore-stubdom to be started, then probe. It will be - * triggered when communication starts happening, by waiting - * on xb_waitq. + * For XS_LOCAL or when xen_store_interface is not ready, spawn a + * thread which will wait for xenstored or a xenstore-stubdom to be + * started, then probe. It will be triggered when communication + * starts happening, by waiting on xb_waitq. */ - if (xen_store_domain_type =3D=3D XS_LOCAL) { + if (xen_store_domain_type =3D=3D XS_LOCAL || xen_store_interface =3D=3D N= ULL) { struct task_struct *probe_task; =20 probe_task =3D kthread_run(xenbus_probe_thread, NULL, @@ -907,10 +924,25 @@ static struct notifier_block xenbus_resume_nb =3D { .notifier_call =3D xenbus_resume_cb, }; =20 +static irqreturn_t xenbus_late_init(int irq, void *unused) +{ + int err; + uint64_t v =3D 0; + + err =3D hvm_get_parameter(HVM_PARAM_STORE_PFN, &v); + if (err || !v || !~v) + return IRQ_HANDLED; + xen_store_gfn =3D (unsigned long)v; + + wake_up(&xb_waitq); + return IRQ_HANDLED; +} + static int __init xenbus_init(void) { int err; uint64_t v =3D 0; + bool wait =3D false; xen_store_domain_type =3D XS_UNKNOWN; =20 if (!xen_domain()) @@ -957,25 +989,44 @@ static int __init xenbus_init(void) * been properly initialized. Instead of attempting to map a * wrong guest physical address return error. * - * Also recognize all bits set as an invalid value. + * Also recognize all bits set as an invalid/uninitialized value. */ - if (!v || !~v) { + if (!v) { err =3D -ENOENT; goto out_error; } - /* Avoid truncation on 32-bit. */ + if (v =3D=3D ~0ULL) { + wait =3D true; + } else { + /* Avoid truncation on 32-bit. */ #if BITS_PER_LONG =3D=3D 32 - if (v > ULONG_MAX) { - pr_err("%s: cannot handle HVM_PARAM_STORE_PFN=3D%llx > ULONG_MAX\n", - __func__, v); - err =3D -EINVAL; - goto out_error; - } + if (v > ULONG_MAX) { + pr_err("%s: cannot handle HVM_PARAM_STORE_PFN=3D%llx > ULONG_MAX\n", + __func__, v); + err =3D -EINVAL; + goto out_error; + } #endif - xen_store_gfn =3D (unsigned long)v; - xen_store_interface =3D - xen_remap(xen_store_gfn << XEN_PAGE_SHIFT, - XEN_PAGE_SIZE); + xen_store_gfn =3D (unsigned long)v; + xen_store_interface =3D + xen_remap(xen_store_gfn << XEN_PAGE_SHIFT, + XEN_PAGE_SIZE); + if (xen_store_interface->connection !=3D XENSTORE_CONNECTED) + wait =3D true; + } + if (wait) { + err =3D bind_evtchn_to_irqhandler(xen_store_evtchn, + xenbus_late_init, + 0, "xenstore_late_init", + &xb_waitq); + if (err < 0) { + pr_err("xenstore_late_init couldn't bind irq err=3D%d\n", + err); + return err; + } + + xs_init_irq =3D err; + } break; default: pr_warn("Xenstore state unknown\n"); --=20 2.25.1