All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [virtio-dev][RFC 0/2] Signal Distribution Module virtio device specification
@ 2016-06-17 16:03 Christian Pinto
  2016-06-17 16:03 ` [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID Christian Pinto
  2016-06-17 16:03 ` [Qemu-devel] [virtio-dev][RFC 2/2] virtio-sdm: new device specification Christian Pinto
  0 siblings, 2 replies; 9+ messages in thread
From: Christian Pinto @ 2016-06-17 16:03 UTC (permalink / raw)
  To: virtio-dev
  Cc: qemu-devel, b.reynal, tech, Claudio.Fontana, Jani.Kokkonen,
	Christian Pinto

Hi all,

This patch series proposes the specification of a new virtio device on which we
are working on, namely the Signal Distribution Module (SDM). 
The SDM routes inter-processor signals intra and inter QEMU
instances, using a user-defined communication channel. At the current state the 
SDM provides a local channel, for intra-QEMU signals, and a channel based on
sockets (UNIX or TCP) to exchange signals between processors in different
instances of QEMU. Each communication channel exports a common interface for 
the sake of ease of extension and integration of new channels.

In addition to the virtio version, a platform device version is available as
well to be used for cases where a processor is not running Linux but another
OS/firmware that does not support virtio.

This patch is related to :

[Qemu-devel][RFC v3 0/6] SDM Interface

where you can find the latest RFC patch set for the QEMU code of the virtio SDM 
device.

Kernel code is publicly accessible from:

https://git.virtualopensystems.com/dev/qemu-het-tools

branch sdm_test_virtio_mod_v2.


QEMU code is accessible from:

https://git.virtualopensystems.com/dev/qemu-het-tools

branch sdm-dev-v3

Thanks,

Christian

Christian Pinto (2):
  content: reserve virtio device ID
  virtio-sdm: new device specification

 content.tex    |   4 ++
 virtio-sdm.tex | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 130 insertions(+)
 create mode 100644 virtio-sdm.tex

-- 
1.9.1

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID
  2016-06-17 16:03 [Qemu-devel] [virtio-dev][RFC 0/2] Signal Distribution Module virtio device specification Christian Pinto
@ 2016-06-17 16:03 ` Christian Pinto
  2016-06-23 18:57   ` Stefan Hajnoczi
  2016-06-17 16:03 ` [Qemu-devel] [virtio-dev][RFC 2/2] virtio-sdm: new device specification Christian Pinto
  1 sibling, 1 reply; 9+ messages in thread
From: Christian Pinto @ 2016-06-17 16:03 UTC (permalink / raw)
  To: virtio-dev
  Cc: qemu-devel, b.reynal, tech, Claudio.Fontana, Jani.Kokkonen,
	Christian Pinto

Signed-off-by: Christian Pinto <c.pinto@virtualopensystems.com>
---
 content.tex | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/content.tex b/content.tex
index d989d98..0d98926 100644
--- a/content.tex
+++ b/content.tex
@@ -2990,6 +2990,8 @@ Device ID  &  Virtio Device    \\
 \hline
 18         &   Input device \\
 \hline
+19         &   Signal Distribution Module \\
+\hline
 \end{tabular}
 
 Some of the devices above are unspecified by this document,
@@ -5641,6 +5643,8 @@ descriptor for the \field{sense_len}, \field{residual},
 \field{status_qualifier}, \field{status}, \field{response} and
 \field{sense} fields.
 
+\input{virtio-sdm.tex}
+
 \chapter{Reserved Feature Bits}\label{sec:Reserved Feature Bits}
 
 Currently there are three device-independent feature bits defined:
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [virtio-dev][RFC 2/2] virtio-sdm: new device specification
  2016-06-17 16:03 [Qemu-devel] [virtio-dev][RFC 0/2] Signal Distribution Module virtio device specification Christian Pinto
  2016-06-17 16:03 ` [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID Christian Pinto
@ 2016-06-17 16:03 ` Christian Pinto
  2016-06-23 19:39   ` Stefan Hajnoczi
  1 sibling, 1 reply; 9+ messages in thread
From: Christian Pinto @ 2016-06-17 16:03 UTC (permalink / raw)
  To: virtio-dev
  Cc: qemu-devel, b.reynal, tech, Claudio.Fontana, Jani.Kokkonen,
	Christian Pinto

This patch adds the specification of the Signal Dristribution Module virtio
device to the current virtio specification document.

Signed-off-by: Christian Pinto <c.pinto@virtualopensystems.com>
---
 virtio-sdm.tex | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 126 insertions(+)
 create mode 100644 virtio-sdm.tex

diff --git a/virtio-sdm.tex b/virtio-sdm.tex
new file mode 100644
index 0000000..abbdb80
--- /dev/null
+++ b/virtio-sdm.tex
@@ -0,0 +1,126 @@
+\section{Signal Distribution Module}\label{sec:Device Types / SDM Device}
+
+The virtio Signal Distribution Module is meant to enable Inter Processor
+interrupts in QEMU/KVM environment. The SDM enables different processors in the
+same or different QEMU instances to send mutual signals. An example are Inter
+Processor Interrupts used in AMP systems, for the processors involved to notify
+the presence of new data in the communication queues.
+
+\subsection{Device ID}\label{sec:Device Types / SDM Device / Device ID}
+
+19
+
+\subsection{Virtqueues}\label{sec:Device Types / SDM Device / Virtqueues}
+
+\begin{description}
+\item[0] hg_vq
+\item[1] gh_vq
+\end{description}
+
+Queue 0 is used for host-guest communication (i.e., notification of a signal),
+while queue 1 for guest-host communication.
+
+\subsection{Feature bits}\label{sec:Device Types / SDM Device / Feature bits}
+
+None.
+
+\subsection{Device configuration layout}\label{sec:Device Types / SDM Device / 
+Device configuration layout}
+
+The device configuration is composed by three fields: \texttt{master},
+\texttt{max_slaves} and \texttt{current_slaves}.
+
+\begin{lstlisting}
+struct virtio_sdm_config {
+	u8    master;
+	u16   max_slaves;
+	u16   current_slaves;
+};
+\end{lstlisting}
+
+The SDM device can be instantiated either as a master or as a slave. The master
+slave behavior is meant on purpose to reflect the AMP like type of communication
+where a master processor controls one or more slave processors.
+A master SDM instance can send a signal to any of the slaves instances,
+while slaves can only signal the master. 
+
+The \texttt{master} field of the configuration space is meant to be read by the
+Linux driver to figure out whether a specific instance is a master or a slave.
+The \texttt{max_slaves} field contains the maximum number of slaves supported by
+the SDM device. 
+The value of \texttt{max_slaves} is initially set from the command line of QEMU,
+but can be changed during operations through the configuration space.
+Finally the \texttt{current_slaves} field contains the actual number of slaves
+registered to the master SDM. This field is a read only field. 
+
+\subsection{Device Initialization}\label{sec:Device Types / SDM Device /
+evice Initialization}
+
+During initialization the \texttt{hg_vq} and \texttt{gh_vq} are identified and
+the device is immediately operational. A master instance can access the number
+of slaves registered at any time by reading the configuration space of the
+device.
+
+During the initialization phase the device connects also to the communication
+channel that is specificied as a parameter when configuring the device. At the
+current state there are two types of communication channels: local and
+socket(TCP or UNIX).
+The local channel is meant for SDM devices attached to the same QEMU instance,
+while the network channel makes it possible to exchange signals between
+SDMs in different instances of QEMU. 
+The type of communication channel is chosen at QEMU boot time and cannot be
+changed during operations. It has to be noted that the behavior of the device is
+independent from the communication channel used.
+
+\subsection{Device Operation}\label{sec:Device Types / SDM Device / Device
+peration}
+
+The SDM device  handles signal coming from the two following sources:
+
+\begin{enumerate}
+\item The local processor to which the devics is attached to.
+\item The communication channel connecting to other slaves/master. 
+\end{enumerate}
+
+The first case is verified when the processor attached to the SDM device wants
+to send a signal to SDM device instance (being it the same QEMU instance or a
+separate one).
+The second case is instead when an SDM device instance receives a signal from
+another SDM device, to be forwarded to the local processor.
+It is important to note that due to the master/slave behavior, slaves cannot
+signal among themsleves but only with the master SDM instance.
+
+In both cases, before sending over the communication channel, the signal is
+packed in the \texttt{SDMSignalData} data structure.
+
+\begin{lstlisting}
+enum sdm_signal_type {
+    SDM_IRQ,
+    SDM_BOOT,
+};
+
+struct SDMSignalData {
+    uint32_t type;
+    uint32_t slave;
+    uint32_t payload[2];
+};
+\end{lstlisting}
+
+The \texttt{type} field indicates the type of signal to be sent to the
+destination SDM. The current implementation supports two signal types.
+The \texttt{SDM_IRQ} signal is used to send an inter processor interrupt, while
+the \texttt{SDM_BOOT} signal is sent to trigger the boot of the destination
+processor. The boot signal is meant to be used in an AMP like scenario where a
+master processor boots one or more slave processors (e.g., via remoteproc).
+The \texttt{slave} field contains the id of the SDM instance destination of the
+signal. Id 0 is reserved for the master, from 1 onwards for the slaves.
+This means that the \texttt{slave} field will always contain 0 when the source
+of the signal is a slave SDM instance, while the actual id of the slave in case
+of a master.
+The \texttt{payload} is used to pass extra accompanying information with the
+signal. The use case for the payload field is a hardware mailbox, where data is
+pushed into the mailbox and an interrupt is triggered towards all the devices
+registered with the mailbox.
+
+The \texttt{SDMSignalData} structure is first filled by the source SDM kernel
+virtio driver and sent over the gh_vq.
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID
  2016-06-17 16:03 ` [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID Christian Pinto
@ 2016-06-23 18:57   ` Stefan Hajnoczi
  2016-06-24 12:45     ` Christian Pinto
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Hajnoczi @ 2016-06-23 18:57 UTC (permalink / raw)
  To: Christian Pinto
  Cc: virtio-dev, qemu-devel, b.reynal, tech, Claudio.Fontana, Jani.Kokkonen

[-- Attachment #1: Type: text/plain, Size: 968 bytes --]

On Fri, Jun 17, 2016 at 06:03:13PM +0200, Christian Pinto wrote:
> Signed-off-by: Christian Pinto <c.pinto@virtualopensystems.com>
> ---
>  content.tex | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/content.tex b/content.tex
> index d989d98..0d98926 100644
> --- a/content.tex
> +++ b/content.tex
> @@ -2990,6 +2990,8 @@ Device ID  &  Virtio Device    \\
>  \hline
>  18         &   Input device \\
>  \hline
> +19         &   Signal Distribution Module \\
> +\hline

Please use a higher number, 19 is already proposed for virtio-vsock:
https://lists.oasis-open.org/archives/virtio-dev/201603/msg00042.html

> @@ -5641,6 +5643,8 @@ descriptor for the \field{sense_len}, \field{residual},
>  \field{status_qualifier}, \field{status}, \field{response} and
>  \field{sense} fields.
>  
> +\input{virtio-sdm.tex}

Please move this to the patch that adds virtio-sdm.tex.  Each patch must
be self-contained and build successfully.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [virtio-dev][RFC 2/2] virtio-sdm: new device specification
  2016-06-17 16:03 ` [Qemu-devel] [virtio-dev][RFC 2/2] virtio-sdm: new device specification Christian Pinto
@ 2016-06-23 19:39   ` Stefan Hajnoczi
  2016-06-24 12:39     ` Christian Pinto
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Hajnoczi @ 2016-06-23 19:39 UTC (permalink / raw)
  To: Christian Pinto
  Cc: virtio-dev, qemu-devel, b.reynal, tech, Claudio.Fontana, Jani.Kokkonen

[-- Attachment #1: Type: text/plain, Size: 7714 bytes --]

On Fri, Jun 17, 2016 at 06:03:14PM +0200, Christian Pinto wrote:
> This patch adds the specification of the Signal Dristribution Module virtio
> device to the current virtio specification document.
> 
> Signed-off-by: Christian Pinto <c.pinto@virtualopensystems.com>
> ---
>  virtio-sdm.tex | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 126 insertions(+)
>  create mode 100644 virtio-sdm.tex
> 
> diff --git a/virtio-sdm.tex b/virtio-sdm.tex
> new file mode 100644
> index 0000000..abbdb80
> --- /dev/null
> +++ b/virtio-sdm.tex
> @@ -0,0 +1,126 @@
> +\section{Signal Distribution Module}\label{sec:Device Types / SDM Device}
> +
> +The virtio Signal Distribution Module is meant to enable Inter Processor
> +interrupts in QEMU/KVM environment. The SDM enables different processors in the
> +same or different QEMU instances to send mutual signals. An example are Inter
> +Processor Interrupts used in AMP systems, for the processors involved to notify
> +the presence of new data in the communication queues.

Please rephrase without mentioning QEMU/KVM.  Focus on the device
functionality and purpose.  VIRTIO's scope is more general than
QEMU/KVM.

I'm not familiar with AMP systems.  Can you explain how SDM relates to
remoteproc and rpmsg?  There seems to be overlap because remoteproc can
also boot a remote processor.

> +
> +\subsection{Device ID}\label{sec:Device Types / SDM Device / Device ID}
> +
> +19
> +
> +\subsection{Virtqueues}\label{sec:Device Types / SDM Device / Virtqueues}
> +
> +\begin{description}
> +\item[0] hg_vq
> +\item[1] gh_vq
> +\end{description}
> +
> +Queue 0 is used for host-guest communication (i.e., notification of a signal),
> +while queue 1 for guest-host communication.

I think the VIRTIO terminology is "device" (host) and "driver" (guest).
So it would be:

Queue 0 is used for device-to-driver communication (i.e. notification of
a signal), while queue 1 is for driver-to-device communication.

> +
> +\subsection{Feature bits}\label{sec:Device Types / SDM Device / Feature bits}
> +
> +None.
> +
> +\subsection{Device configuration layout}\label{sec:Device Types / SDM Device / 
> +Device configuration layout}
> +
> +The device configuration is composed by three fields: \texttt{master},
> +\texttt{max_slaves} and \texttt{current_slaves}.
> +
> +\begin{lstlisting}
> +struct virtio_sdm_config {
> +	u8    master;
> +	u16   max_slaves;
> +	u16   current_slaves;
> +};
> +\end{lstlisting}
> +
> +The SDM device can be instantiated either as a master or as a slave. The master
> +slave behavior is meant on purpose to reflect the AMP like type of communication
> +where a master processor controls one or more slave processors.
> +A master SDM instance can send a signal to any of the slaves instances,
> +while slaves can only signal the master. 
> +
> +The \texttt{master} field of the configuration space is meant to be read by the
> +Linux driver to figure out whether a specific instance is a master or a slave.

The scope of VIRTIO is wider than Linux, just saying "the driver" is
preferred.

> +The \texttt{max_slaves} field contains the maximum number of slaves supported by
> +the SDM device. 
> +The value of \texttt{max_slaves} is initially set from the command line of QEMU,

The QEMU command-line is out of scope for the VIRTIO specification.
Please drop this part of the sentence.  I suggest saying that a
configuration change notification is sent when the value of max_slaves
changes.

> +but can be changed during operations through the configuration space.
> +Finally the \texttt{current_slaves} field contains the actual number of slaves
> +registered to the master SDM. This field is a read only field. 
> +
> +\subsection{Device Initialization}\label{sec:Device Types / SDM Device /
> +evice Initialization}
> +
> +During initialization the \texttt{hg_vq} and \texttt{gh_vq} are identified and
> +the device is immediately operational. A master instance can access the number
> +of slaves registered at any time by reading the configuration space of the
> +device.
> +
> +During the initialization phase the device connects also to the communication
> +channel that is specificied as a parameter when configuring the device. At the
> +current state there are two types of communication channels: local and
> +socket(TCP or UNIX).
> +The local channel is meant for SDM devices attached to the same QEMU instance,
> +while the network channel makes it possible to exchange signals between
> +SDMs in different instances of QEMU. 
> +The type of communication channel is chosen at QEMU boot time and cannot be
> +changed during operations. It has to be noted that the behavior of the device is
> +independent from the communication channel used.

This paragraph is specific to QEMU and not directly relevant to the
device specification.  It can be dropped (feel free to extract any
pieces of information in there that you consider relevant to the device
spec).

> +
> +\subsection{Device Operation}\label{sec:Device Types / SDM Device / Device
> +peration}
> +
> +The SDM device  handles signal coming from the two following sources:

s/  / /
s/signal/signals/

> +
> +\begin{enumerate}
> +\item The local processor to which the devics is attached to.

s/devics is attached to/device is attached/

> +\item The communication channel connecting to other slaves/master. 
> +\end{enumerate}
> +
> +The first case is verified when the processor attached to the SDM device wants
> +to send a signal to SDM device instance (being it the same QEMU instance or a
> +separate one).
> +The second case is instead when an SDM device instance receives a signal from
> +another SDM device, to be forwarded to the local processor.
> +It is important to note that due to the master/slave behavior, slaves cannot
> +signal among themsleves but only with the master SDM instance.
> +
> +In both cases, before sending over the communication channel, the signal is
> +packed in the \texttt{SDMSignalData} data structure.
> +
> +\begin{lstlisting}
> +enum sdm_signal_type {
> +    SDM_IRQ,
> +    SDM_BOOT,
> +};
> +
> +struct SDMSignalData {
> +    uint32_t type;
> +    uint32_t slave;
> +    uint32_t payload[2];
> +};
> +\end{lstlisting}
> +
> +The \texttt{type} field indicates the type of signal to be sent to the
> +destination SDM. The current implementation supports two signal types.
> +The \texttt{SDM_IRQ} signal is used to send an inter processor interrupt, while
> +the \texttt{SDM_BOOT} signal is sent to trigger the boot of the destination
> +processor. The boot signal is meant to be used in an AMP like scenario where a
> +master processor boots one or more slave processors (e.g., via remoteproc).
> +The \texttt{slave} field contains the id of the SDM instance destination of the
> +signal. Id 0 is reserved for the master, from 1 onwards for the slaves.
> +This means that the \texttt{slave} field will always contain 0 when the source
> +of the signal is a slave SDM instance, while the actual id of the slave in case
> +of a master.
> +The \texttt{payload} is used to pass extra accompanying information with the
> +signal. The use case for the payload field is a hardware mailbox, where data is
> +pushed into the mailbox and an interrupt is triggered towards all the devices
> +registered with the mailbox.

This spec cannot be implemented because it does not explain the
semantics of the payload.  Please provide those details.  Even if it
doesn't make it into the final spec it will help reviewers understand
how SDM works.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [virtio-dev][RFC 2/2] virtio-sdm: new device specification
  2016-06-23 19:39   ` Stefan Hajnoczi
@ 2016-06-24 12:39     ` Christian Pinto
  0 siblings, 0 replies; 9+ messages in thread
From: Christian Pinto @ 2016-06-24 12:39 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: virtio-dev, qemu-devel@nongnu.org Developers, Baptiste Reynal,
	VirtualOpenSystems Technical Team, Claudio Fontana,
	Jani Kokkonen

Hello Stefan,

On Thu, Jun 23, 2016 at 9:39 PM, Stefan Hajnoczi <stefanha@redhat.com>
wrote:

> On Fri, Jun 17, 2016 at 06:03:14PM +0200, Christian Pinto wrote:
> > This patch adds the specification of the Signal Dristribution Module
> virtio
> > device to the current virtio specification document.
> >
> > Signed-off-by: Christian Pinto <c.pinto@virtualopensystems.com>
> > ---
> >  virtio-sdm.tex | 126
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 126 insertions(+)
> >  create mode 100644 virtio-sdm.tex
> >
> > diff --git a/virtio-sdm.tex b/virtio-sdm.tex
> > new file mode 100644
> > index 0000000..abbdb80
> > --- /dev/null
> > +++ b/virtio-sdm.tex
> > @@ -0,0 +1,126 @@
> > +\section{Signal Distribution Module}\label{sec:Device Types / SDM
> Device}
> > +
> > +The virtio Signal Distribution Module is meant to enable Inter Processor
> > +interrupts in QEMU/KVM environment. The SDM enables different
> processors in the
> > +same or different QEMU instances to send mutual signals. An example are
> Inter
> > +Processor Interrupts used in AMP systems, for the processors involved
> to notify
> > +the presence of new data in the communication queues.
>
> Please rephrase without mentioning QEMU/KVM.  Focus on the device
> functionality and purpose.  VIRTIO's scope is more general than
> QEMU/KVM.
>

Right, thanks for pointing this out. I will remove any dependence from
QEMU/KVM from the device specs.


>
> I'm not familiar with AMP systems.  Can you explain how SDM relates to
> remoteproc and rpmsg?  There seems to be overlap because remoteproc can
> also boot a remote processor.
>

I will clarify this aspect in the cover letter of the next release.

In any case, to give you some preliminary information, the SDM is a device
to send generic signals among processors. Such signals can be customized
according to their purpose, as an example a payload can be added to a
signal in order to model a mailbox-like behavior.
 As an example it can be used by the remoteproc driver to send the BOOT
signal to the processor that needs to be booted. Similarly it is used in
rpmsg to send a signal to the destination every time a new message is
available. RPMSG uses virtio queues to exchange messages, and the SDM is
used when kicking a virtqueue to raise the associated interrupt in the
destination processor.



> > +
> > +\subsection{Device ID}\label{sec:Device Types / SDM Device / Device ID}
> > +
> > +19
> > +
> > +\subsection{Virtqueues}\label{sec:Device Types / SDM Device /
> Virtqueues}
> > +
> > +\begin{description}
> > +\item[0] hg_vq
> > +\item[1] gh_vq
> > +\end{description}
> > +
> > +Queue 0 is used for host-guest communication (i.e., notification of a
> signal),
> > +while queue 1 for guest-host communication.
>
> I think the VIRTIO terminology is "device" (host) and "driver" (guest).
> So it would be:
>
> Queue 0 is used for device-to-driver communication (i.e. notification of
> a signal), while queue 1 is for driver-to-device communication.
>

Thanks, I will update the text according to this comment.


>
> > +
> > +\subsection{Feature bits}\label{sec:Device Types / SDM Device / Feature
> bits}
> > +
> > +None.
> > +
> > +\subsection{Device configuration layout}\label{sec:Device Types / SDM
> Device /
> > +Device configuration layout}
> > +
> > +The device configuration is composed by three fields: \texttt{master},
> > +\texttt{max_slaves} and \texttt{current_slaves}.
> > +
> > +\begin{lstlisting}
> > +struct virtio_sdm_config {
> > +     u8    master;
> > +     u16   max_slaves;
> > +     u16   current_slaves;
> > +};
> > +\end{lstlisting}
> > +
> > +The SDM device can be instantiated either as a master or as a slave.
> The master
> > +slave behavior is meant on purpose to reflect the AMP like type of
> communication
> > +where a master processor controls one or more slave processors.
> > +A master SDM instance can send a signal to any of the slaves instances,
> > +while slaves can only signal the master.
> > +
> > +The \texttt{master} field of the configuration space is meant to be
> read by the
> > +Linux driver to figure out whether a specific instance is a master or a
> slave.
>
> The scope of VIRTIO is wider than Linux, just saying "the driver" is
> preferred.
>

ACK


>
> > +The \texttt{max_slaves} field contains the maximum number of slaves
> supported by
> > +the SDM device.
> > +The value of \texttt{max_slaves} is initially set from the command line
> of QEMU,
>
> The QEMU command-line is out of scope for the VIRTIO specification.
> Please drop this part of the sentence.  I suggest saying that a
> configuration change notification is sent when the value of max_slaves
> changes.
>

I agree, this will make the description agnostic w.r.t. QEMU.


>
> > +but can be changed during operations through the configuration space.
> > +Finally the \texttt{current_slaves} field contains the actual number of
> slaves
> > +registered to the master SDM. This field is a read only field.
> > +
> > +\subsection{Device Initialization}\label{sec:Device Types / SDM Device /
> > +evice Initialization}
> > +
> > +During initialization the \texttt{hg_vq} and \texttt{gh_vq} are
> identified and
> > +the device is immediately operational. A master instance can access the
> number
> > +of slaves registered at any time by reading the configuration space of
> the
> > +device.
> > +
> > +During the initialization phase the device connects also to the
> communication
> > +channel that is specificied as a parameter when configuring the device.
> At the
> > +current state there are two types of communication channels: local and
> > +socket(TCP or UNIX).
> > +The local channel is meant for SDM devices attached to the same QEMU
> instance,
> > +while the network channel makes it possible to exchange signals between
> > +SDMs in different instances of QEMU.
> > +The type of communication channel is chosen at QEMU boot time and
> cannot be
> > +changed during operations. It has to be noted that the behavior of the
> device is
> > +independent from the communication channel used.
>
> This paragraph is specific to QEMU and not directly relevant to the
> device specification.  It can be dropped (feel free to extract any
> pieces of information in there that you consider relevant to the device
> spec).
>
>
As already commented, I will remove all dependencies from QEMU.


> > +
> > +\subsection{Device Operation}\label{sec:Device Types / SDM Device /
> Device
> > +peration}
> > +
> > +The SDM device  handles signal coming from the two following sources:
>
> s/  / /
> s/signal/signals/
>

ACK


>
> > +
> > +\begin{enumerate}
> > +\item The local processor to which the devics is attached to.
>
> s/devics is attached to/device is attached/
>
>
ACK


> > +\item The communication channel connecting to other slaves/master.
> > +\end{enumerate}
> > +
> > +The first case is verified when the processor attached to the SDM
> device wants
> > +to send a signal to SDM device instance (being it the same QEMU
> instance or a
> > +separate one).
> > +The second case is instead when an SDM device instance receives a
> signal from
> > +another SDM device, to be forwarded to the local processor.
> > +It is important to note that due to the master/slave behavior, slaves
> cannot
> > +signal among themsleves but only with the master SDM instance.
> > +
> > +In both cases, before sending over the communication channel, the
> signal is
> > +packed in the \texttt{SDMSignalData} data structure.
> > +
> > +\begin{lstlisting}
> > +enum sdm_signal_type {
> > +    SDM_IRQ,
> > +    SDM_BOOT,
> > +};
> > +
> > +struct SDMSignalData {
> > +    uint32_t type;
> > +    uint32_t slave;
> > +    uint32_t payload[2];
> > +};
> > +\end{lstlisting}
> > +
> > +The \texttt{type} field indicates the type of signal to be sent to the
> > +destination SDM. The current implementation supports two signal types.
> > +The \texttt{SDM_IRQ} signal is used to send an inter processor
> interrupt, while
> > +the \texttt{SDM_BOOT} signal is sent to trigger the boot of the
> destination
> > +processor. The boot signal is meant to be used in an AMP like scenario
> where a
> > +master processor boots one or more slave processors (e.g., via
> remoteproc).
> > +The \texttt{slave} field contains the id of the SDM instance
> destination of the
> > +signal. Id 0 is reserved for the master, from 1 onwards for the slaves.
> > +This means that the \texttt{slave} field will always contain 0 when the
> source
> > +of the signal is a slave SDM instance, while the actual id of the slave
> in case
> > +of a master.
> > +The \texttt{payload} is used to pass extra accompanying information
> with the
> > +signal. The use case for the payload field is a hardware mailbox, where
> data is
> > +pushed into the mailbox and an interrupt is triggered towards all the
> devices
> > +registered with the mailbox.
>
> This spec cannot be implemented because it does not explain the
> semantics of the payload.  Please provide those details.  Even if it
> doesn't make it into the final spec it will help reviewers understand
> how SDM works.
>

Thanks again for your comments, I will improve the description in  the next
release.


Best,

Christian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID
  2016-06-23 18:57   ` Stefan Hajnoczi
@ 2016-06-24 12:45     ` Christian Pinto
  2016-06-24 13:04       ` Cornelia Huck
  0 siblings, 1 reply; 9+ messages in thread
From: Christian Pinto @ 2016-06-24 12:45 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: virtio-dev, qemu-devel@nongnu.org Developers, Baptiste Reynal,
	VirtualOpenSystems Technical Team, Claudio Fontana,
	Jani Kokkonen

Hello Stefan,

On Thu, Jun 23, 2016 at 8:57 PM, Stefan Hajnoczi <stefanha@redhat.com>
wrote:

> On Fri, Jun 17, 2016 at 06:03:13PM +0200, Christian Pinto wrote:
> > Signed-off-by: Christian Pinto <c.pinto@virtualopensystems.com>
> > ---
> >  content.tex | 4 ++++
> >  1 file changed, 4 insertions(+)
> >
> > diff --git a/content.tex b/content.tex
> > index d989d98..0d98926 100644
> > --- a/content.tex
> > +++ b/content.tex
> > @@ -2990,6 +2990,8 @@ Device ID  &  Virtio Device    \\
> >  \hline
> >  18         &   Input device \\
> >  \hline
> > +19         &   Signal Distribution Module \\
> > +\hline
>
> Please use a higher number, 19 is already proposed for virtio-vsock:
> https://lists.oasis-open.org/archives/virtio-dev/201603/msg00042.html


Thanks, I will use 20 then.


>
>
> > @@ -5641,6 +5643,8 @@ descriptor for the \field{sense_len},
> \field{residual},
> >  \field{status_qualifier}, \field{status}, \field{response} and
> >  \field{sense} fields.
> >
> > +\input{virtio-sdm.tex}
>
> Please move this to the patch that adds virtio-sdm.tex.  Each patch must
> be self-contained and build successfully.
>

Right, I will add this change to the patch adding the device specification
text.


Best,

Christian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID
  2016-06-24 12:45     ` Christian Pinto
@ 2016-06-24 13:04       ` Cornelia Huck
  2016-06-24 14:08         ` Christian Pinto
  0 siblings, 1 reply; 9+ messages in thread
From: Cornelia Huck @ 2016-06-24 13:04 UTC (permalink / raw)
  To: Christian Pinto
  Cc: Stefan Hajnoczi, virtio-dev, qemu-devel@nongnu.org Developers,
	Baptiste Reynal, VirtualOpenSystems Technical Team,
	Claudio Fontana, Jani Kokkonen

On Fri, 24 Jun 2016 14:45:29 +0200
Christian Pinto <c.pinto@virtualopensystems.com> wrote:

> On Thu, Jun 23, 2016 at 8:57 PM, Stefan Hajnoczi <stefanha@redhat.com>
> wrote:
> 
> > On Fri, Jun 17, 2016 at 06:03:13PM +0200, Christian Pinto wrote:

> > > @@ -2990,6 +2990,8 @@ Device ID  &  Virtio Device    \\
> > >  \hline
> > >  18         &   Input device \\
> > >  \hline
> > > +19         &   Signal Distribution Module \\
> > > +\hline
> >
> > Please use a higher number, 19 is already proposed for virtio-vsock:
> > https://lists.oasis-open.org/archives/virtio-dev/201603/msg00042.html
> 
> 
> Thanks, I will use 20 then.

I think virtio-crypto already wants to use 20. We sadly have a bit of a
backlog...

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID
  2016-06-24 13:04       ` Cornelia Huck
@ 2016-06-24 14:08         ` Christian Pinto
  0 siblings, 0 replies; 9+ messages in thread
From: Christian Pinto @ 2016-06-24 14:08 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: Stefan Hajnoczi, virtio-dev, qemu-devel@nongnu.org Developers,
	Baptiste Reynal, VirtualOpenSystems Technical Team,
	Claudio Fontana, Jani Kokkonen

On Fri, Jun 24, 2016 at 3:04 PM, Cornelia Huck <cornelia.huck@de.ibm.com>
wrote:

> On Fri, 24 Jun 2016 14:45:29 +0200
> Christian Pinto <c.pinto@virtualopensystems.com> wrote:
>
> > On Thu, Jun 23, 2016 at 8:57 PM, Stefan Hajnoczi <stefanha@redhat.com>
> > wrote:
> >
> > > On Fri, Jun 17, 2016 at 06:03:13PM +0200, Christian Pinto wrote:
>
> > > > @@ -2990,6 +2990,8 @@ Device ID  &  Virtio Device    \\
> > > >  \hline
> > > >  18         &   Input device \\
> > > >  \hline
> > > > +19         &   Signal Distribution Module \\
> > > > +\hline
> > >
> > > Please use a higher number, 19 is already proposed for virtio-vsock:
> > > https://lists.oasis-open.org/archives/virtio-dev/201603/msg00042.html
> >
> >
> > Thanks, I will use 20 then.
>
> I think virtio-crypto already wants to use 20. We sadly have a bit of a
> backlog...
>

Thanks Cornelia,

I'll use another number.

BTW, Is there a way to know which one is the first free device ID? I was
not following virtio-dev before, so not aware of all the pending device
specs.

Thanks,

Christian

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-06-24 14:09 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-17 16:03 [Qemu-devel] [virtio-dev][RFC 0/2] Signal Distribution Module virtio device specification Christian Pinto
2016-06-17 16:03 ` [Qemu-devel] [virtio-dev][RFC 1/2] content: reserve virtio device ID Christian Pinto
2016-06-23 18:57   ` Stefan Hajnoczi
2016-06-24 12:45     ` Christian Pinto
2016-06-24 13:04       ` Cornelia Huck
2016-06-24 14:08         ` Christian Pinto
2016-06-17 16:03 ` [Qemu-devel] [virtio-dev][RFC 2/2] virtio-sdm: new device specification Christian Pinto
2016-06-23 19:39   ` Stefan Hajnoczi
2016-06-24 12:39     ` Christian Pinto

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.