xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
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

  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).