From patchwork Mon Jul 11 10:44:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marek_Marczykowski-G=C3=B3recki?= X-Patchwork-Id: 9223241 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B234560760 for ; Mon, 11 Jul 2016 10:47:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A156C27AC2 for ; Mon, 11 Jul 2016 10:47:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 95EB027C14; Mon, 11 Jul 2016 10:47:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 242A527AC2 for ; Mon, 11 Jul 2016 10:47:27 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMYho-000159-BM; Mon, 11 Jul 2016 10:44:52 +0000 Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMYhn-000152-Oz for xen-devel@lists.xen.org; Mon, 11 Jul 2016 10:44:51 +0000 Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id DF/21-09524-3A873875; Mon, 11 Jul 2016 10:44:51 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrAIsWRWlGSWpSXmKPExsVykCGBTXdRRXO 4QdNVQYslHxezODB6HN39mymAMYo1My8pvyKBNWPRxOtsBbvEKvau2cfewPiev4uRi0NIYC6j xIO3v9i6GDk5JAR0JL5MesQEkdjNKNHWtYsVJCEkkC9x9WA7M4jNJhAq0b59BlhcREBa4trny 4wgDcwgk2Zs+Ag2SVggRuLQz8lACQ4OFgFVie431SBhXgE/iYvbnjNBLJOT2LZlDyOIzSlgJP HgfC87xC5DiT8tU9gh6gUlTs58wgIyhllAXWL9PCGQML+AksS29ZfBWpkF5CWat85mnsAoOAt JxyyEjllIqhYwMq9iVC9OLSpLLdI11EsqykzPKMlNzMzRNTQ00ctNLS5OTE/NSUwq1kvOz93E CAxZBiDYwXi00/kQoyQHk5Ior2Buc7gQX1J+SmVGYnFGfFFpTmrxIUYZDg4lCV61cqCcYFFqe mpFWmYOMHpg0hIcPEoivFEgad7igsTc4sx0iNQpRkUpcV4tkIQASCKjNA+uDRaxlxhlpYR5GY EOEeIpSC3KzSxBlX/FKM7BqCTMqw0yhSczrwRu+iugxUxAi2sdwBaXJCKkpBoYcz6fmPfdNyp Q2PCr+Icb829Nf9dm8EPHstpppuDXZufsX2umPOfK1WyZtyC6ambcKd5d8fJqBYtDv0zXcT+9 //zjE5cM5m11td8QlLpgxs1zq9aVyyUs4ugqf3Hp8O5q8UVHdK7tuNmykvvLg60nQ2fOZJDLO vN1g2+/gjnHagvz2c3N78Si3yqxFGckGmoxFxUnAgBdbN9B0wIAAA== X-Env-Sender: marmarek@mimuw.edu.pl X-Msg-Ref: server-11.tower-27.messagelabs.com!1468233889!44469254!1 X-Originating-IP: [193.0.96.6] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 8.77; banners=-,-,- X-VirusChecked: Checked Received: (qmail 29370 invoked from network); 11 Jul 2016 10:44:50 -0000 Received: from mail.mimuw.edu.pl (HELO mail.mimuw.edu.pl) (193.0.96.6) by server-11.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 11 Jul 2016 10:44:50 -0000 Received: from localhost (localhost [127.0.0.1] ident=amavis) by duch.mimuw.edu.pl (Postfix) with ESMTP id 51FD074A; Mon, 11 Jul 2016 12:44:49 +0200 (CEST) X-Virus-Scanned: amavisd-new at mimuw.edu.pl Received: from mail.mimuw.edu.pl ([193.0.96.6]) by localhost (mail.mimuw.edu.pl [127.0.0.1]) (amavisd-new, port 10028) with ESMTP id p_0JpAZI8E81; Mon, 11 Jul 2016 12:44:47 +0200 (CEST) Received: by duch.mimuw.edu.pl (Postfix, from userid 1575) id 21FCF746; Mon, 11 Jul 2016 12:44:47 +0200 (CEST) From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= To: xen-devel@lists.xen.org Date: Mon, 11 Jul 2016 12:44:42 +0200 Message-Id: <1468233882-9507-1-git-send-email-marmarek@invisiblethingslab.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <20160711100002.uiguv74u3iqlzmsg@mac> References: <20160711100002.uiguv74u3iqlzmsg@mac> MIME-Version: 1.0 Organization: Invisible Things Lab Cc: Wei Liu , Ian Jackson , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Subject: [Xen-devel] [PATCH v2] libxl: trigger attach events for devices attached before xl devd startup X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP When this daemon is started after creating backend device, that device will not be configured. Racy situation: 1. driver domain is started 2. frontend domain is started (just after kicking driver domain off) 3. device in frontend domain is connected to the backend (as specified in frontend domain configuration) 4. xl devd is started in driver domain End result is that backend device in driver domain is not configured (like network interface is not enabled), so the device doesn't work. Fix this by artifically triggering events for devices already present in xenstore before xl devd is started. Do this only after xenstore watch is already registered, and only for devices not already initialized (in XenbusStateInitWait state). Cc: Ian Jackson Cc: Wei Liu Signed-off-by: Marek Marczykowski-Górecki Acked-by: Roger Pau Monné --- tools/libxl/libxl.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 1c81239..dd20e29 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -4743,6 +4743,12 @@ int libxl_device_events_handler(libxl_ctx *ctx, uint32_t domid; libxl__ddomain ddomain; char *be_path; + char **kinds = NULL, **domains = NULL, **devs = NULL; + const char *sstate; + char *state_path; + int state; + unsigned int nkinds, ndomains, ndevs; + int i, j, k; ddomain.ao = ao; LIBXL_SLIST_INIT(&ddomain.guests); @@ -4762,6 +4768,33 @@ int libxl_device_events_handler(libxl_ctx *ctx, be_path); if (rc) goto out; + kinds = libxl__xs_directory(gc, XBT_NULL, be_path, &nkinds); + if (kinds) { + for (i = 0; i < nkinds; i++) { + domains = libxl__xs_directory(gc, XBT_NULL, + GCSPRINTF("%s/%s", be_path, kinds[i]), &ndomains); + if (!domains) + continue; + for (j = 0; j < ndomains; j++) { + devs = libxl__xs_directory(gc, XBT_NULL, + GCSPRINTF("%s/%s/%s", be_path, kinds[i], domains[j]), &ndevs); + if (!devs) + continue; + for (k = 0; k < ndevs; k++) { + state_path = GCSPRINTF("%s/%s/%s/%s/state", + be_path, kinds[i], domains[j], devs[k]); + rc = libxl__xs_read_checked(gc, XBT_NULL, state_path, &sstate); + if (rc) + continue; + state = atoi(sstate); + if (state == XenbusStateInitWait) + backend_watch_callback(egc, &ddomain.watch, + be_path, state_path); + } + } + } + } + return AO_INPROGRESS; out: