OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-dev message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: [PATCH 1/1] Clarify padding in structures


Explicitly specify that our C struct specifications are without padding,
and add some definitions for our integer data types. Also note what the
__packed__ annotation signifies.

Remove __packed__ annotation from all ccw structures that don't need it,
and make the length requirements explicit for those that do.

This resolves VIRTIO-56.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 content.tex      |   14 +++++++++-----
 introduction.tex |   21 +++++++++++++++++++++
 2 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/content.tex b/content.tex
index e8a2445..a3e8188 100644
--- a/content.tex
+++ b/content.tex
@@ -1994,7 +1994,7 @@ about a queue. It uses the following structure for communicating:
 	struct vq_config_block {
 		be16 index;
 		be16 max_num;
-	} __attribute__ ((packed));
+	};
 \end{lstlisting}
 
 The requested number of buffers for queue index is returned in
@@ -2012,7 +2012,7 @@ structure is
 		be16 num;
 		be64 avail;
 		be64 used;
-	} __attribute__ ((packed));
+	};
 \end{lstlisting}
 
 desc, avail and used contain the guest addresses for the descriptor table,
@@ -2031,7 +2031,7 @@ CCW_CMD_SET_VQ uses the following communication block:
 		be32 align;
 		be16 index;
 		be16 num;
-	} __attribute__ ((packed));
+	};
 \end{lstlisting}
 
 queue contains the guest address for queue index, num the number of buffers
@@ -2079,12 +2079,13 @@ communication block:
 	struct virtio_feature_desc {
 		le32 features;
 		u8 index;
-	} __attribute__ ((packed));
+	} __attribute__((packed));
 \end{lstlisting}
 
 features are the 32 bits of features currently accessed, while
 index describes which of the feature bit values is to be
-accessed.
+accessed. No padding is added at the end of the structure, it is
+exactly 5 bytes in length.
 
 The guest obtains the device's device feature set via the
 CCW_CMD_READ_FEAT command. The device stores the features at index
@@ -2181,6 +2182,9 @@ significant bit in the first byte is assigned the bit number 0.
 isc contains the I/O interruption subclass to be used for the adapter
 I/O interrupt. It may be different from the isc used by the proxy
 virtio-ccw device's subchannel.
+No padding is added at the end of the structure, it is exactly 25 bytes
+in length.
+
 
 If the driver has already set up classic queue indicators via the
 CCW_CMD_SET_IND command, the device MUST post a unit check with
diff --git a/introduction.tex b/introduction.tex
index 5d57f78..2830f30 100644
--- a/introduction.tex
+++ b/introduction.tex
@@ -44,5 +44,26 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S
 	\phantomsection\label{intro:S390 Common I/O}\textbf{[S390 Common I/O]} & ESA/390 Common I/O-Device and Self-Description, \newline IBM Publication SA22-7204\\
 \end{longtable}
 
+\section{Structure Specifications}
+
+Many device and driver in-memory structure layouts are documented using
+the C struct syntax. All structures are assumed to be without additional
+padding. To stress this, cases where common C compilers are known to insert
+extra padding within structures are tagged using the GNU C
+__attribute__((packed))  syntax.
+
+For the integer data types used in the structure definitions, the following
+conventions are used:
+
+\begin{description}
+\item[u8, u16, u32, u64] An unsigned integer of the specified length in bits.
+
+\item[le16, le32, le64] An unsigend integer of the specified length in bits,
+in little-endian byte order.
+
+\item[be16, be32, be64] An unsigned integer of the specified length in bits,
+in big-endian byte order.
+\end{description}
+
 \newpage
 
-- 
1.7.9.5



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]