From: Markus Armbruster <armbru@redhat.com>
To: Steven Smith <sos22@cam.ac.uk>
Cc: xen-devel@lists.xensource.com, sos22@srcf.ucam.org
Subject: Re: [PATCH 2/2] PV framebuffer
Date: Wed, 15 Nov 2006 18:46:20 +0100 [thread overview]
Message-ID: <87lkmciowj.fsf@pike.pond.sub.org> (raw)
In-Reply-To: <20061115121839.GB2001@cam.ac.uk> (Steven Smith's message of "Wed, 15 Nov 2006 12:18:39 +0000")
Steven Smith <sos22@cam.ac.uk> writes:
[...]
>> >> + if (xenfb_hotplug(xsh, vfb_backdir) < 0)
>> >> + goto error;
>> >> + if (xenfb_hotplug(xsh, vkbd_backdir) < 0)
>> >> + goto error;
>> >> +
>> >> + if (xenfb_xs_printf(xsh, vkbd_backdir, "feature-abs-pointer", "1"))
>> >> + goto error;
>> >> + if (xenfb_xs_printf(xsh, vfb_backdir, "state", "%d",
>> >> + XenbusStateInitWait))
>> >> + goto error;
>> >> + if (xenfb_xs_printf(xsh, vkbd_backdir, "state", "%d",
>> >> + XenbusStateInitWait))
>> >> + goto error;
>> >> +
>> > I'd probably reorder this a little to look more like this:
>> >
>> > (1) Set feature-abs-pointer
>> > (2) Set state to InitWait
>> > (3) Set hotplug status
>> >
>> > The only actual *required* constraint is (1) before (2), so that the
>> > frontend doesn't initialise before we've set the feature and
>> > potentially miss it.
>> >
>> > (2) before (3) is kind of nice, in that it makes sure that the backend
>> > is ready before xend unpauses the domain, and so the frontend'll be
>> > able to connect the first time it tries, but that's a lot less
>> > important here than for e.g. block devices.
>> Based on our previous discussions, I designed the startup protocol
>> this way:
>>
>> backend frontend
>> ------------------------------------------------------------------
>> hotplug_status = connected
>> [makes xend populate xenstore, set fe and be state = Initialising]
>> wait for be state = Initialising
>> [i.e. wait for xend]
>> write xs: feature-abs-pointer write xs: feature-update
>> be state = InitWait fe state = Initialised
>> ------------------------------ sync ------------------------------
>> wait for fe state = Initialised wait for be state = InitWait
>> ------------------------------ sync ------------------------------
>> read xs: feature-update read xs: feature-abs-pointer
>> write xs: request-update write xs: request-abs-pointer
>> be state = Connected fe state = Connected
>> ------------------------------ sync ------------------------------
>> wait for fe state = Connected wait for be state = Connected
>> ------------------------------ sync ------------------------------
>> read xs: request-abs-pointer read xs: request-update
>>
>> The symmetry made sense to me.
> Ah, sorry, I wasn't clear enough. You've got everything right after
> the first sync line, but the bit before that isn't quite right. Xend
> creates xenstore area when the domain is created, and then waits until
> hotplug-status is set before starting the domain running. The idea is
> that the backend driver should be watching its area of xenbus (so
> /local/domain/0/backend/vif, say), so that it notices when the area is
> created and creates the appropriate backend devices. Creating the
> backend devices triggers the hotplug scripts via some udev magic which
> I've never quite understood, and they then e.g. connect vifs up to the
> bridge. Once they've finished, the backends are all ready, and so
> it's safe to start the guest. If you start the guest before the
> backends are ready, you potentially have issues like your root
> fileystem not becoming available until after the guest has booted,
> which tends to make Linux unhappy.
>
> xend backend driver hotplug scripts
> Creates a new domain
> paused
> Creates backend area
> Notices new backend
> area, creates
> backend device
> Does some basic setup
> on backend device
> Go to state InitWait
> Kicks udev
> Does a bit more setup
> on backend
> device
> Sets hotplug-status
> Notices hotplug status,
> unpauses domain
>
> Now, the obvious mapping of this protocol onto the PVFB would have
> xend create the xenstore area when the guest is created and spawn the
> backend itself. The backend could then set hotplug-status to indicate
> that it's ready, which would unpause the guest and things would then
> proceed in the usual way.
I coded this, and it works.
> This would work, and I'd be quite happy with it, but it does have the
> slight disadvantage that you can't start a domain with a framebuffer
> configured and no backend attached. If this worries you, you could
> have xend not wait for the hotplug status but instead start the domain
> immediately (there's a waitForBackend method on class DevController
> which you'd have to override. I don't remember the details, but I
> don't think it's very hard). If you go this path, you need to
> consider the possibility that the backend area isn't set up in time
> when the _probe function is run in the frontend, but I think that
> works already.
I like this, but I'm saving it for another day.
Thanks again for your help!
[...]
next prev parent reply other threads:[~2006-11-15 17:46 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-10 8:54 [PATCH 2/2] PV framebuffer Markus Armbruster
2006-11-12 14:20 ` Steven Smith
2006-11-14 14:01 ` Markus Armbruster
2006-11-15 12:18 ` Steven Smith
2006-11-15 17:46 ` Markus Armbruster [this message]
2006-11-16 16:13 ` Markus Armbruster
2006-11-17 13:23 ` Markus Armbruster
2006-11-17 13:26 ` Markus Armbruster
2006-11-22 11:49 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-11-22 13:46 ` [PATCH] " Markus Armbruster
2006-11-24 5:00 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-11-24 8:10 ` [PATCH] " Markus Armbruster
2006-11-24 8:48 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-11-28 13:04 ` Atsushi SAKAI
2006-11-28 13:55 ` [PATCH] " Markus Armbruster
2006-11-29 13:08 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-12-01 12:35 ` Atsushi SAKAI
2006-12-01 18:03 ` [PATCH] " Markus Armbruster
2006-12-04 8:46 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-12-04 19:44 ` [PATCH] " Markus Armbruster
2006-12-05 12:01 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-12-05 17:32 ` [PATCH] " Markus Armbruster
2006-12-07 0:55 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-12-07 7:58 ` [PATCH] " Markus Armbruster
2006-12-12 11:54 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-12-12 12:23 ` [PATCH] " Markus Armbruster
2006-12-13 2:18 ` Atsushi SAKAI
2006-12-14 10:58 ` [PATCH] Re: [Xen-devel] " Atsushi SAKAI
2006-12-14 11:30 ` [PATCH] " Keir Fraser
2006-12-14 12:37 ` Markus Armbruster
2006-12-14 13:30 ` Keir Fraser
2006-12-15 16:38 ` [PATCH][PVFB][LINUX] Fix possible sleep while holding spinlock Markus Armbruster
2006-12-15 18:06 ` Keir Fraser
2006-12-15 18:35 ` Markus Armbruster
2006-12-19 2:52 ` Atsushi SAKAI
2006-12-19 7:49 ` Markus Armbruster
2006-12-19 8:17 ` Atsushi SAKAI
2007-01-10 8:50 ` Markus Armbruster
2006-11-28 15:36 ` [PATCH] Re: Re: [PATCH 2/2] PV framebuffer Stephen C. Tweedie
2006-11-24 8:05 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87lkmciowj.fsf@pike.pond.sub.org \
--to=armbru@redhat.com \
--cc=sos22@cam.ac.uk \
--cc=sos22@srcf.ucam.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.