From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Oleksandr Andrushchenko <andr2000@gmail.com>
Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>,
vlad.babchuk@gmail.com, andrii.anisov@gmail.com,
olekstysh@gmail.com, al1img@gmail.com,
Oleksandr Grytsov <oleksandr_grytsov@epam.com>,
xen-devel@lists.xenproject.org, joculator@gmail.com
Subject: Re: [PATCH v3] displif: add ABI for para-virtual display
Date: Wed, 15 Feb 2017 16:33:06 -0500 [thread overview]
Message-ID: <20170215213306.GA24021@char.us.ORACLE.com> (raw)
In-Reply-To: <0331d90e-bd07-704a-e198-595c20ec2b0b@gmail.com>
.snip..
> > > > > I will define 2 sections:
> > > > > *------------------ Connector Request Transport Parameters
> > > > > -------------------
> > > > > *
> > > > > * ctrl-event-channel
> > > > > * ctrl-ring-ref
> > > > > *
> > > > > *------------------- Connector Event Transport Parameters
> > > > > --------------------
> > > > > *
> > > > > * event-channel
> > > > > * event-ring-ref
> > > > >
> > > > > > Or is the other ring buffer the one that is created via 'gref_directory' ?
> > > > > no
> > > > > At the bottom:
> > > > > * In order to deliver asynchronous events from back to front a shared page
> > > > > is
> > > > > * allocated by front and its gref propagated to back via XenStore entries
> > > > > * (event-XXX).
> > > > AAnd you may want to say this is guarded by REQ_ALLOC feature right?
> > > Not sure I understood you. Event path is totally independent
> > > from any feature, e.g. REQ_ALLOC.
> > > It just provides means to send async events
> > > from back to front, "page flip done" in my case.
> > <scratche his head> Why do you need a seperate ring to send
> > responses back? Why not use the same ring on which requests
> > were sent
> Ok, it seems we are not on the same page for rings/channels usage.
> Let me describe how those are used:
>
> 1. Command/control event channel and its corresponding ring are used
> to pass requests from front to back (XENDISPL_OP_XXX) and get responses
> from the back. These are synchronous, use macros from ring.h:
> ctrl-event-channel + ctrl-ring-ref
> I call them "ctrl-" because this way front controls back, or sends commands
> if you will. Maybe "cmd-" would fit better here?
>
> 2. Event channel - asynchronous path for the backend to signal activity
> to the frontend, currently used for "page flip done" event which is sent
> at some point of time after back has actually completed the page flip
> requested
> (so, before that the corresponding request was sent and response received,
> but
> operation didn't complete yet, instead it was scheduled)
> No macros exist for this use-case in ring.h (kbdif+fbif implement
> this on their own, so do I)
> These are: event-channel + event-ring-ref
> Probably here is the point from where confusion comes, naming.
> We can have something like "be-to-fe-event-channel" or anything else
> more cute and descriptive.
>
> Hope this explains the need for 2 paths
Aha!
So this is like the network where there is an 'rx' and 'tx'!
Now I get it.
In that case why not just prefix it with 'in' and 'out'? Such as:
'out-ring-ref' and 'out-event-channel' and 'in-ring-ref' along
with 'in-event-channel'.
Or perhaps better - borrow the same idea that Stefano came up for
9pfs and PV calls - where his ring does both.
Then you just need 'ring-ref', 'event-channel', 'max-page-ring-order'
(which must be 1 or larger).
And you split the ring-ref in two - one for 'in' events and the other
part for 'out' events?
..giant snip..
> > > > > Thus, I was thinking of XenbusStateReconfiguringstate as appropriate in this
> > > > > case
> > > > Right, but somebody has to move to this state. Who would do it?
> > > when backend dies its state changes to "closed".
> > > At this moment front tries to remove virtualized device
> > > and if it is possible/done, then it goes into "initialized"
> > > state. If not - "reconfiguring".
> > > So, you would ask how does the front go from "reconfiguring"
> > > into "initialized" state? This is OS/front specific, but:
> > > 1. the underlying framework, e.g. DRM/KMS, ALSA, provide
> > > a callback(s) to signal that the last client to the
> > > virtualized device has gone and the driver can be removed
> > > (equivalent to module's usage counter 0)
> > > 2. one can schedule a delayed work (timer/tasklet/workqueue)
> > > to periodically check if this is the right time to re-try
> > > the removal and remove
> > >
> > > In both cases, after the virtualized device has been removed we move
> > > into "initialized" state again and are ready for new connections
> > > with backend (if it arose from the dead :)
> > > > Would the
> > > > frontend have some form of timer to make sure that the backend is still
> > > > alive? And if it had died then move to Reconfiguring?
> > > There are at least 2 ways to understand if back is dead:
> > > 1. XenBus state change (back is closed)
> > .. If the backend does a nice shutdown..
> hm, on Linux I can kill -9 backend and XenBus driver seems
> to be able to turn back's state into "closed"
> isn't this expected behavior?
That is the expected behavior. I was thinking more of a backend
being a guest - and the guest completly going away and nobody
clearing its XenStore keys.
In which case your second option of doing a timeout will work.
But you may need an 'PING' type request to figure this out?
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-02-15 21:33 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-10 7:29 [PATCH v3] displif: add ABI for para-virtual display Oleksandr Andrushchenko
2017-02-10 7:29 ` Oleksandr Andrushchenko
2017-02-10 21:27 ` Konrad Rzeszutek Wilk
2017-02-13 8:50 ` Oleksandr Andrushchenko
2017-02-14 20:27 ` Konrad Rzeszutek Wilk
2017-02-15 7:33 ` Oleksandr Andrushchenko
2017-02-15 15:45 ` Konrad Rzeszutek Wilk
2017-02-15 18:32 ` Oleksandr Andrushchenko
2017-02-15 21:33 ` Konrad Rzeszutek Wilk [this message]
2017-02-16 8:36 ` Oleksandr Andrushchenko
2017-02-17 16:33 ` Konrad Rzeszutek Wilk
2017-02-17 17:33 ` Oleksandr Andrushchenko
2017-03-01 16:40 ` Oleksandr Andrushchenko
2017-02-17 19:12 ` Stefano Stabellini
2017-02-17 19:22 ` Oleksandr Andrushchenko
2017-02-17 19:28 ` Konrad Rzeszutek Wilk
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=20170215213306.GA24021@char.us.ORACLE.com \
--to=konrad.wilk@oracle.com \
--cc=al1img@gmail.com \
--cc=andr2000@gmail.com \
--cc=andrii.anisov@gmail.com \
--cc=joculator@gmail.com \
--cc=oleksandr_andrushchenko@epam.com \
--cc=oleksandr_grytsov@epam.com \
--cc=olekstysh@gmail.com \
--cc=vlad.babchuk@gmail.com \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).