[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 2/2] sndif: add explicit back and front synchronization



On 03/02/2018 12:11 AM, Konrad Rzeszutek Wilk wrote:
   * +----------------+----------------+----------------+----------------+
   * |                           gref_directory                          | 24
   * +----------------+----------------+----------------+----------------+
- * |                             reserved                              | 28
- * +----------------+----------------+----------------+----------------+
- * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
+ * |                             period_sz                             | 28
   * +----------------+----------------+----------------+----------------+
   * |                             reserved                              | 32
   * +----------------+----------------+----------------+----------------+
@@ -578,6 +616,14 @@
   * pcm_channels - uint8_t, number of channels of this stream,
   *   [channels-min; channels-max]
   * buffer_sz - uint32_t, buffer size to be allocated, octets
+ * period_sz - uint32_t, recommended event period size, octets
+ *   This is the recommended (hint) value of the period at which frontend would
+ *   like to receive XENSND_EVT_CUR_POS notifications from the backend when
+ *   stream position advances during playback/capture.
+ *   It shows how many octets are expected to be played/captured before
+ *   sending such an event.
+ *   If set to 0 no XENSND_EVT_CUR_POS events are sent by the backend.
+ *
I would gate this based on the version. That is if version 0 then this
field does not exist.
Well, by default we have all unused fields set to 0: [1]
And for version 1 (or 0, initial) of the protocol it means
that period_sz falls into reserved region [2].
With the comment above for version 2 it means that old
behavior is in use, e.g. no XENSND_EVT_CUR_POS events
are sent by the backend, so we are backward compatible
in this case
   * gref_directory - grant_ref_t, a reference to the first shared page
   *   describing shared buffer references. At least one page exists. If shared
   *   buffer size  (buffer_sz) exceeds what can be addressed by this single 
page,
@@ -592,6 +638,7 @@ struct xensnd_open_req {
      uint16_t reserved;
      uint32_t buffer_sz;
      grant_ref_t gref_directory;
+    uint32_t period_sz;
The same here. Just put a comment mentioning the version part.
So, if you still want to gate it, how would you like it?
XENSND_PROTOCOL_VERSION was defined as a string "1"/"2"
and preprocessor won't allow comparing strings, e.g.
you can't do #if XENSND_PROTOCOL_VERSION == "1"
So, we might want re-defining XENSND_PROTOCOL_VERSION as
an integer in the first patch, so it can be used here.
Then, if it is an integer:
1.
#if XENSND_PROTOCOL_VERSION != 1
    uint32_t period_sz;
#endif
2.
#if XENSND_PROTOCOL_VERSION > 1
    uint32_t period_sz;
#endif
3.
#if XENSND_PROTOCOL_VERSION == 2
    uint32_t period_sz;
#endif

Please let me know whether we still want gating and if so
in which way.

Thank you,
Oleksandr
[1] https://elixir.bootlin.com/linux/v4.16-rc3/source/include/xen/interface/io/sndif.h#L525 [2] https://elixir.bootlin.com/linux/v4.16-rc3/source/include/xen/interface/io/sndif.h#L562

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.