All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux
@ 2015-02-16 21:35 Michael S. Tsirkin
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 01/17] scripts/update-linux-headers.sh: pull virtio hdrs Michael S. Tsirkin
                   ` (16 more replies)
  0 siblings, 17 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

This reuses virtio headers from files exported by linux.
The current situation is quite messy: for example we
have multiple copies of the virtio net packet structure,
and the virtio ring structure.
We already use some of them for linux-specific code,
reusing more widely gets rid of code duplication.

One of the reasons we didn't do this previously
was portability considerations: this patchset addresses
this by fixing up headers in question - turns out to
be easy to do since they are already quite portable.

One of comments asked about support for functionality missing from linux
guests. This patchet addresses this simply by adding code in include/hw/virtio
like we did before.
One example of this is VIRTIO_NET_CTRL_GUEST_OFFLOADS command in
virtio-net, which is currently only used by windows guests.
The definition was therefore left in include/hw/virtio/virtio-net.h,
this approach makes it easy to find functionality that linux guests
are missing, which is important e.g. for testing.

Ability to synchronize headers in this way will bring long-term benefits in
case bugfixes need to apply to both host and guest.

In particular, this gives us known-good virtio 1.0 headers for free, right now.

This refactoring also better separates between guest ABI and internal
qemu functionality, which is a good thing as we need to be extra
careful about guest ABI changes.

This might also enable better static checking with sparse,
as linux tags virtio headers with correct endian-ness.
For now, sparse tags are automatically stripped, for
compatibility with existing code.

Some pieces are more widely applicable (outside virtio): e.g.
everyone will be able to pull ETH_ALEN from the
standard header.

The infrastructure also might be of use for other headers (pci_regs.h)?

s390 patches have been built and smoke-tested by Cornelia.

Tested on linux on x86 and s390 only, with windows and linux guests.
Needs windows, osx host testing.
Testing (even just build-test) reports would be very much appreciated.

changes from v2:
    - rename sys/ to linux/ to address comments by Peter and Paolo
    - address comments by Thomas

Changes from v1:
    - add s390 headers (untested)
    - add code to check no unexpected linux-specific headers are pulled in
      by mistake
    - add if_ether.h to provide ETH_ALEN for virtio net
    - move headers from standard-headers/linux to standard-headers/sys
      and put them under include so they are on search path
    - fix up __leXX
    - fix up __attribute__((packed))

Michael S. Tsirkin (17):
  scripts/update-linux-headers.sh: pull virtio hdrs
  include: import virtio headers from linux 4.0
  virtio: use standard virtio_ring.h
  virtio: use standard-headers
  virtio-balloon: use standard headers
  virtio-9p: use standard headers
  virtio-blk: switch to standard-headers
  virtio-net,tap: use standard-headers
  virtio-rng: use standard-headers
  virtio-scsi: use standard-headers
  virtio-serial: switch to standard-headers
  update-linux-headers: use standard-headers
  linux-headers: use standard-headers
  virtio-pci: use standard headers
  scripts: add arch specific standard-headers
  standard-headers: add s390 virtio headers
  s390: use standard headers

 hw/9pfs/virtio-9p.h                                |  18 +-
 hw/s390x/s390-virtio-bus.h                         |  36 ++--
 hw/s390x/s390-virtio.h                             |   7 +-
 include/hw/virtio/dataplane/vring.h                |   2 +-
 include/hw/virtio/virtio-balloon.h                 |  35 +---
 include/hw/virtio/virtio-blk.h                     |  77 +------
 include/hw/virtio/virtio-net.h                     | 151 +------------
 include/hw/virtio/virtio-rng.h                     |   4 +-
 include/hw/virtio/virtio-scsi.h                    | 120 +----------
 include/hw/virtio/virtio-serial.h                  |  40 +---
 include/hw/virtio/virtio.h                         |  48 +----
 include/net/tap.h                                  |  24 +--
 include/standard-headers/asm-s390/kvm_virtio.h     |  64 ++++++
 include/standard-headers/asm-s390/virtio-ccw.h     |  21 ++
 include/standard-headers/linux/if_ether.h          |   1 +
 include/standard-headers/linux/types.h             |   2 +
 include/standard-headers/linux/virtio_9p.h         |  44 ++++
 include/standard-headers/linux/virtio_balloon.h    |  59 ++++++
 include/standard-headers/linux/virtio_blk.h        | 143 +++++++++++++
 include/standard-headers/linux/virtio_config.h     |  64 ++++++
 include/standard-headers/linux/virtio_console.h    |  78 +++++++
 include/standard-headers/linux/virtio_ids.h        |  43 ++++
 include/standard-headers/linux/virtio_net.h        | 233 +++++++++++++++++++++
 include/standard-headers/linux/virtio_pci.h        | 193 +++++++++++++++++
 .../linux}/virtio_ring.h                           | 138 ++++++------
 include/standard-headers/linux/virtio_rng.h        |   8 +
 include/standard-headers/linux/virtio_scsi.h       | 164 +++++++++++++++
 include/standard-headers/linux/virtio_types.h      |  46 ++++
 linux-headers/linux/virtio_config.h                |  58 +----
 linux-headers/linux/virtio_ring.h                  | 164 +--------------
 hw/block/virtio-blk.c                              |   8 +-
 hw/char/virtio-serial-bus.c                        |   1 +
 hw/net/vhost_net.c                                 |   2 +-
 hw/scsi/virtio-scsi.c                              |   1 +
 hw/virtio/virtio-pci.c                             |  54 +----
 hw/virtio/virtio.c                                 |  23 +-
 scripts/update-linux-headers.sh                    |  51 ++++-
 37 files changed, 1345 insertions(+), 880 deletions(-)
 create mode 100644 include/standard-headers/asm-s390/kvm_virtio.h
 create mode 100644 include/standard-headers/asm-s390/virtio-ccw.h
 create mode 100644 include/standard-headers/linux/if_ether.h
 create mode 100644 include/standard-headers/linux/types.h
 create mode 100644 include/standard-headers/linux/virtio_9p.h
 create mode 100644 include/standard-headers/linux/virtio_balloon.h
 create mode 100644 include/standard-headers/linux/virtio_blk.h
 create mode 100644 include/standard-headers/linux/virtio_config.h
 create mode 100644 include/standard-headers/linux/virtio_console.h
 create mode 100644 include/standard-headers/linux/virtio_ids.h
 create mode 100644 include/standard-headers/linux/virtio_net.h
 create mode 100644 include/standard-headers/linux/virtio_pci.h
 rename include/{hw/virtio => standard-headers/linux}/virtio_ring.h (57%)
 create mode 100644 include/standard-headers/linux/virtio_rng.h
 create mode 100644 include/standard-headers/linux/virtio_scsi.h
 create mode 100644 include/standard-headers/linux/virtio_types.h

-- 
MST

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

* [Qemu-devel] [PATCH v3 01/17] scripts/update-linux-headers.sh: pull virtio hdrs
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
@ 2015-02-16 21:35 ` Michael S. Tsirkin
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 02/17] include: import virtio headers from linux 4.0 Michael S. Tsirkin
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

It doesn't make sense to copy values manually:
the only issue with getting headers from linux
seems to be dealing with linux/types, we
can easily fix that automatically while importing.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
---
 scripts/update-linux-headers.sh | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
index c8e026d..8926dec 100755
--- a/scripts/update-linux-headers.sh
+++ b/scripts/update-linux-headers.sh
@@ -28,6 +28,36 @@ if [ -z "$output" ]; then
     output="$PWD"
 fi
 
+cp_virtio() {
+    from=$1
+    to=$2
+    virtio=$(find "$from" -name '*virtio*h')
+    if [ "$virtio" ]; then
+        rm -rf "$to"
+        mkdir -p "$to"
+        for f in $virtio; do
+            if
+                grep '#include' "$f" | grep -v -e 'linux/virtio' \
+                                             -e 'linux/types' \
+                                             -e 'linux/if_ether' \
+                                             > /dev/null
+            then
+                echo "Unexpected #include in input file $f".
+                exit 2
+            fi
+
+            header=$(basename "$f");
+            sed -e 's/__u\([0-9][0-9]*\)/uint\1_t/g' \
+                -e 's/__le\([0-9][0-9]*\)/uint\1_t/g' \
+                -e 's/__be\([0-9][0-9]*\)/uint\1_t/g' \
+                -e 's/<linux\/\([^>]*\)>/"standard-headers\/linux\/\1"/' \
+                -e 's/__bitwise__//' \
+                -e 's/__attribute__((packed))/QEMU_PACKED/' \
+                "$f" > "$to/$header";
+        done
+    fi
+}
+
 # This will pick up non-directories too (eg "Kconfig") but we will
 # ignore them in the next loop.
 ARCHLIST=$(cd "$linux/arch" && echo *)
@@ -76,4 +106,15 @@ else
     cp "$linux/COPYING" "$output/linux-headers"
 fi
 
+
+cp_virtio "$tmpdir/include/linux/" "$output/include/standard-headers/linux"
+
+cat <<EOF >$output/include/standard-headers/linux/types.h
+#include <stdint.h>
+#include "qemu/compiler.h"
+EOF
+cat <<EOF >$output/include/standard-headers/linux/if_ether.h
+#define ETH_ALEN    6
+EOF
+
 rm -rf "$tmpdir"
-- 
MST

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

* [Qemu-devel] [PATCH v3 02/17] include: import virtio headers from linux 4.0
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 01/17] scripts/update-linux-headers.sh: pull virtio hdrs Michael S. Tsirkin
@ 2015-02-16 21:35 ` Michael S. Tsirkin
  2015-02-17 12:45   ` Thomas Huth
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 03/17] virtio: use standard virtio_ring.h Michael S. Tsirkin
                   ` (14 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

Add files imported from linux-next (what will become linux 4.0) using
scripts/update-linux-headers.sh

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/standard-headers/linux/if_ether.h       |   1 +
 include/standard-headers/linux/types.h          |   2 +
 include/standard-headers/linux/virtio_9p.h      |  44 +++++
 include/standard-headers/linux/virtio_balloon.h |  59 ++++++
 include/standard-headers/linux/virtio_blk.h     | 143 +++++++++++++++
 include/standard-headers/linux/virtio_config.h  |  64 +++++++
 include/standard-headers/linux/virtio_console.h |  78 ++++++++
 include/standard-headers/linux/virtio_ids.h     |  43 +++++
 include/standard-headers/linux/virtio_net.h     | 233 ++++++++++++++++++++++++
 include/standard-headers/linux/virtio_pci.h     | 193 ++++++++++++++++++++
 include/standard-headers/linux/virtio_ring.h    | 171 +++++++++++++++++
 include/standard-headers/linux/virtio_rng.h     |   8 +
 include/standard-headers/linux/virtio_scsi.h    | 164 +++++++++++++++++
 include/standard-headers/linux/virtio_types.h   |  46 +++++
 14 files changed, 1249 insertions(+)
 create mode 100644 include/standard-headers/linux/if_ether.h
 create mode 100644 include/standard-headers/linux/types.h
 create mode 100644 include/standard-headers/linux/virtio_9p.h
 create mode 100644 include/standard-headers/linux/virtio_balloon.h
 create mode 100644 include/standard-headers/linux/virtio_blk.h
 create mode 100644 include/standard-headers/linux/virtio_config.h
 create mode 100644 include/standard-headers/linux/virtio_console.h
 create mode 100644 include/standard-headers/linux/virtio_ids.h
 create mode 100644 include/standard-headers/linux/virtio_net.h
 create mode 100644 include/standard-headers/linux/virtio_pci.h
 create mode 100644 include/standard-headers/linux/virtio_ring.h
 create mode 100644 include/standard-headers/linux/virtio_rng.h
 create mode 100644 include/standard-headers/linux/virtio_scsi.h
 create mode 100644 include/standard-headers/linux/virtio_types.h

diff --git a/include/standard-headers/linux/if_ether.h b/include/standard-headers/linux/if_ether.h
new file mode 100644
index 0000000..91cf735
--- /dev/null
+++ b/include/standard-headers/linux/if_ether.h
@@ -0,0 +1 @@
+#define ETH_ALEN    6
diff --git a/include/standard-headers/linux/types.h b/include/standard-headers/linux/types.h
new file mode 100644
index 0000000..7d42ac6
--- /dev/null
+++ b/include/standard-headers/linux/types.h
@@ -0,0 +1,2 @@
+#include <inttypes.h>
+#include "qemu/compiler.h"
diff --git a/include/standard-headers/linux/virtio_9p.h b/include/standard-headers/linux/virtio_9p.h
new file mode 100644
index 0000000..e68f71d
--- /dev/null
+++ b/include/standard-headers/linux/virtio_9p.h
@@ -0,0 +1,44 @@
+#ifndef _LINUX_VIRTIO_9P_H
+#define _LINUX_VIRTIO_9P_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include "standard-headers/linux/types.h"
+#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/virtio_config.h"
+
+/* The feature bitmap for virtio 9P */
+
+/* The mount point is specified in a config variable */
+#define VIRTIO_9P_MOUNT_TAG 0
+
+struct virtio_9p_config {
+	/* length of the tag name */
+	uint16_t tag_len;
+	/* non-NULL terminated tag name */
+	uint8_t tag[0];
+} QEMU_PACKED;
+
+#endif /* _LINUX_VIRTIO_9P_H */
diff --git a/include/standard-headers/linux/virtio_balloon.h b/include/standard-headers/linux/virtio_balloon.h
new file mode 100644
index 0000000..799376d
--- /dev/null
+++ b/include/standard-headers/linux/virtio_balloon.h
@@ -0,0 +1,59 @@
+#ifndef _LINUX_VIRTIO_BALLOON_H
+#define _LINUX_VIRTIO_BALLOON_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/virtio_config.h"
+
+/* The feature bitmap for virtio balloon */
+#define VIRTIO_BALLOON_F_MUST_TELL_HOST	0 /* Tell before reclaiming pages */
+#define VIRTIO_BALLOON_F_STATS_VQ	1 /* Memory Stats virtqueue */
+#define VIRTIO_BALLOON_F_DEFLATE_ON_OOM	2 /* Deflate balloon on OOM */
+
+/* Size of a PFN in the balloon interface. */
+#define VIRTIO_BALLOON_PFN_SHIFT 12
+
+struct virtio_balloon_config {
+	/* Number of pages host wants Guest to give up. */
+	uint32_t num_pages;
+	/* Number of pages we've actually got in balloon. */
+	uint32_t actual;
+};
+
+#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
+#define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */
+#define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */
+#define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */
+#define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */
+#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
+#define VIRTIO_BALLOON_S_NR       6
+
+struct virtio_balloon_stat {
+	uint16_t tag;
+	uint64_t val;
+} QEMU_PACKED;
+
+#endif /* _LINUX_VIRTIO_BALLOON_H */
diff --git a/include/standard-headers/linux/virtio_blk.h b/include/standard-headers/linux/virtio_blk.h
new file mode 100644
index 0000000..12016b4
--- /dev/null
+++ b/include/standard-headers/linux/virtio_blk.h
@@ -0,0 +1,143 @@
+#ifndef _LINUX_VIRTIO_BLK_H
+#define _LINUX_VIRTIO_BLK_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include "standard-headers/linux/types.h"
+#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/virtio_config.h"
+#include "standard-headers/linux/virtio_types.h"
+
+/* Feature bits */
+#define VIRTIO_BLK_F_SIZE_MAX	1	/* Indicates maximum segment size */
+#define VIRTIO_BLK_F_SEG_MAX	2	/* Indicates maximum # of segments */
+#define VIRTIO_BLK_F_GEOMETRY	4	/* Legacy geometry available  */
+#define VIRTIO_BLK_F_RO		5	/* Disk is read-only */
+#define VIRTIO_BLK_F_BLK_SIZE	6	/* Block size of disk is available*/
+#define VIRTIO_BLK_F_TOPOLOGY	10	/* Topology information is available */
+#define VIRTIO_BLK_F_MQ		12	/* support more than one vq */
+
+/* Legacy feature bits */
+#ifndef VIRTIO_BLK_NO_LEGACY
+#define VIRTIO_BLK_F_BARRIER	0	/* Does host support barriers? */
+#define VIRTIO_BLK_F_SCSI	7	/* Supports scsi command passthru */
+#define VIRTIO_BLK_F_WCE	9	/* Writeback mode enabled after reset */
+#define VIRTIO_BLK_F_CONFIG_WCE	11	/* Writeback mode available in config */
+/* Old (deprecated) name for VIRTIO_BLK_F_WCE. */
+#define VIRTIO_BLK_F_FLUSH VIRTIO_BLK_F_WCE
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+#define VIRTIO_BLK_ID_BYTES	20	/* ID string length */
+
+struct virtio_blk_config {
+	/* The capacity (in 512-byte sectors). */
+	uint64_t capacity;
+	/* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */
+	uint32_t size_max;
+	/* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */
+	uint32_t seg_max;
+	/* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */
+	struct virtio_blk_geometry {
+		uint16_t cylinders;
+		uint8_t heads;
+		uint8_t sectors;
+	} geometry;
+
+	/* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
+	uint32_t blk_size;
+
+	/* the next 4 entries are guarded by VIRTIO_BLK_F_TOPOLOGY  */
+	/* exponent for physical block per logical block. */
+	uint8_t physical_block_exp;
+	/* alignment offset in logical blocks. */
+	uint8_t alignment_offset;
+	/* minimum I/O size without performance penalty in logical blocks. */
+	uint16_t min_io_size;
+	/* optimal sustained I/O size in logical blocks. */
+	uint32_t opt_io_size;
+
+	/* writeback mode (if VIRTIO_BLK_F_CONFIG_WCE) */
+	uint8_t wce;
+	uint8_t unused;
+
+	/* number of vqs, only available when VIRTIO_BLK_F_MQ is set */
+	uint16_t num_queues;
+} QEMU_PACKED;
+
+/*
+ * Command types
+ *
+ * Usage is a bit tricky as some bits are used as flags and some are not.
+ *
+ * Rules:
+ *   VIRTIO_BLK_T_OUT may be combined with VIRTIO_BLK_T_SCSI_CMD or
+ *   VIRTIO_BLK_T_BARRIER.  VIRTIO_BLK_T_FLUSH is a command of its own
+ *   and may not be combined with any of the other flags.
+ */
+
+/* These two define direction. */
+#define VIRTIO_BLK_T_IN		0
+#define VIRTIO_BLK_T_OUT	1
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+/* This bit says it's a scsi command, not an actual read or write. */
+#define VIRTIO_BLK_T_SCSI_CMD	2
+#endif /* VIRTIO_BLK_NO_LEGACY */
+
+/* Cache flush command */
+#define VIRTIO_BLK_T_FLUSH	4
+
+/* Get device ID command */
+#define VIRTIO_BLK_T_GET_ID    8
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+/* Barrier before this op. */
+#define VIRTIO_BLK_T_BARRIER	0x80000000
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+/* This is the first element of the read scatter-gather list. */
+struct virtio_blk_outhdr {
+	/* VIRTIO_BLK_T* */
+	__virtio32 type;
+	/* io priority. */
+	__virtio32 ioprio;
+	/* Sector (ie. 512 byte offset) */
+	__virtio64 sector;
+};
+
+#ifndef VIRTIO_BLK_NO_LEGACY
+struct virtio_scsi_inhdr {
+	__virtio32 errors;
+	__virtio32 data_len;
+	__virtio32 sense_len;
+	__virtio32 residual;
+};
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+
+/* And this is the final byte of the write scatter-gather list. */
+#define VIRTIO_BLK_S_OK		0
+#define VIRTIO_BLK_S_IOERR	1
+#define VIRTIO_BLK_S_UNSUPP	2
+#endif /* _LINUX_VIRTIO_BLK_H */
diff --git a/include/standard-headers/linux/virtio_config.h b/include/standard-headers/linux/virtio_config.h
new file mode 100644
index 0000000..bcc445b
--- /dev/null
+++ b/include/standard-headers/linux/virtio_config.h
@@ -0,0 +1,64 @@
+#ifndef _LINUX_VIRTIO_CONFIG_H
+#define _LINUX_VIRTIO_CONFIG_H
+/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
+ * anyone can use the definitions to implement compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+
+/* Virtio devices use a standardized configuration space to define their
+ * features and pass configuration information, but each implementation can
+ * store and access that space differently. */
+#include "standard-headers/linux/types.h"
+
+/* Status byte for guest to report progress, and synchronize features. */
+/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */
+#define VIRTIO_CONFIG_S_ACKNOWLEDGE	1
+/* We have found a driver for the device. */
+#define VIRTIO_CONFIG_S_DRIVER		2
+/* Driver has used its parts of the config, and is happy */
+#define VIRTIO_CONFIG_S_DRIVER_OK	4
+/* Driver has finished configuring features */
+#define VIRTIO_CONFIG_S_FEATURES_OK	8
+/* We've given up on this device. */
+#define VIRTIO_CONFIG_S_FAILED		0x80
+
+/* Some virtio feature bits (currently bits 28 through 32) are reserved for the
+ * transport being used (eg. virtio_ring), the rest are per-device feature
+ * bits. */
+#define VIRTIO_TRANSPORT_F_START	28
+#define VIRTIO_TRANSPORT_F_END		33
+
+#ifndef VIRTIO_CONFIG_NO_LEGACY
+/* Do we get callbacks when the ring is completely used, even if we've
+ * suppressed them? */
+#define VIRTIO_F_NOTIFY_ON_EMPTY	24
+
+/* Can the device handle any descriptor layout? */
+#define VIRTIO_F_ANY_LAYOUT		27
+#endif /* VIRTIO_CONFIG_NO_LEGACY */
+
+/* v1.0 compliant. */
+#define VIRTIO_F_VERSION_1		32
+
+#endif /* _LINUX_VIRTIO_CONFIG_H */
diff --git a/include/standard-headers/linux/virtio_console.h b/include/standard-headers/linux/virtio_console.h
new file mode 100644
index 0000000..0dedc9e
--- /dev/null
+++ b/include/standard-headers/linux/virtio_console.h
@@ -0,0 +1,78 @@
+/*
+ * This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
+ * anyone can use the definitions to implement compatible drivers/servers:
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright (C) Red Hat, Inc., 2009, 2010, 2011
+ * Copyright (C) Amit Shah <amit.shah@redhat.com>, 2009, 2010, 2011
+ */
+#ifndef _LINUX_VIRTIO_CONSOLE_H
+#define _LINUX_VIRTIO_CONSOLE_H
+#include "standard-headers/linux/types.h"
+#include "standard-headers/linux/virtio_types.h"
+#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/virtio_config.h"
+
+/* Feature bits */
+#define VIRTIO_CONSOLE_F_SIZE	0	/* Does host provide console size? */
+#define VIRTIO_CONSOLE_F_MULTIPORT 1	/* Does host provide multiple ports? */
+#define VIRTIO_CONSOLE_F_EMERG_WRITE 2 /* Does host support emergency write? */
+
+#define VIRTIO_CONSOLE_BAD_ID		(~(uint32_t)0)
+
+struct virtio_console_config {
+	/* colums of the screens */
+	uint16_t cols;
+	/* rows of the screens */
+	uint16_t rows;
+	/* max. number of ports this device can hold */
+	uint32_t max_nr_ports;
+	/* emergency write register */
+	uint32_t emerg_wr;
+} QEMU_PACKED;
+
+/*
+ * A message that's passed between the Host and the Guest for a
+ * particular port.
+ */
+struct virtio_console_control {
+	__virtio32 id;		/* Port number */
+	__virtio16 event;	/* The kind of control event (see below) */
+	__virtio16 value;	/* Extra information for the key */
+};
+
+/* Some events for control messages */
+#define VIRTIO_CONSOLE_DEVICE_READY	0
+#define VIRTIO_CONSOLE_PORT_ADD		1
+#define VIRTIO_CONSOLE_PORT_REMOVE	2
+#define VIRTIO_CONSOLE_PORT_READY	3
+#define VIRTIO_CONSOLE_CONSOLE_PORT	4
+#define VIRTIO_CONSOLE_RESIZE		5
+#define VIRTIO_CONSOLE_PORT_OPEN	6
+#define VIRTIO_CONSOLE_PORT_NAME	7
+
+
+#endif /* _LINUX_VIRTIO_CONSOLE_H */
diff --git a/include/standard-headers/linux/virtio_ids.h b/include/standard-headers/linux/virtio_ids.h
new file mode 100644
index 0000000..284fc3a
--- /dev/null
+++ b/include/standard-headers/linux/virtio_ids.h
@@ -0,0 +1,43 @@
+#ifndef _LINUX_VIRTIO_IDS_H
+#define _LINUX_VIRTIO_IDS_H
+/*
+ * Virtio IDs
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+
+#define VIRTIO_ID_NET		1 /* virtio net */
+#define VIRTIO_ID_BLOCK		2 /* virtio block */
+#define VIRTIO_ID_CONSOLE	3 /* virtio console */
+#define VIRTIO_ID_RNG		4 /* virtio rng */
+#define VIRTIO_ID_BALLOON	5 /* virtio balloon */
+#define VIRTIO_ID_RPMSG		7 /* virtio remote processor messaging */
+#define VIRTIO_ID_SCSI		8 /* virtio scsi */
+#define VIRTIO_ID_9P		9 /* 9p virtio console */
+#define VIRTIO_ID_RPROC_SERIAL 11 /* virtio remoteproc serial link */
+#define VIRTIO_ID_CAIF	       12 /* Virtio caif */
+
+#endif /* _LINUX_VIRTIO_IDS_H */
diff --git a/include/standard-headers/linux/virtio_net.h b/include/standard-headers/linux/virtio_net.h
new file mode 100644
index 0000000..95faf67
--- /dev/null
+++ b/include/standard-headers/linux/virtio_net.h
@@ -0,0 +1,233 @@
+#ifndef _LINUX_VIRTIO_NET_H
+#define _LINUX_VIRTIO_NET_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE. */
+#include "standard-headers/linux/types.h"
+#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/virtio_config.h"
+#include "standard-headers/linux/virtio_types.h"
+#include "standard-headers/linux/if_ether.h"
+
+/* The feature bitmap for virtio net */
+#define VIRTIO_NET_F_CSUM	0	/* Host handles pkts w/ partial csum */
+#define VIRTIO_NET_F_GUEST_CSUM	1	/* Guest handles pkts w/ partial csum */
+#define VIRTIO_NET_F_MAC	5	/* Host has given MAC address. */
+#define VIRTIO_NET_F_GUEST_TSO4	7	/* Guest can handle TSOv4 in. */
+#define VIRTIO_NET_F_GUEST_TSO6	8	/* Guest can handle TSOv6 in. */
+#define VIRTIO_NET_F_GUEST_ECN	9	/* Guest can handle TSO[6] w/ ECN in. */
+#define VIRTIO_NET_F_GUEST_UFO	10	/* Guest can handle UFO in. */
+#define VIRTIO_NET_F_HOST_TSO4	11	/* Host can handle TSOv4 in. */
+#define VIRTIO_NET_F_HOST_TSO6	12	/* Host can handle TSOv6 in. */
+#define VIRTIO_NET_F_HOST_ECN	13	/* Host can handle TSO[6] w/ ECN in. */
+#define VIRTIO_NET_F_HOST_UFO	14	/* Host can handle UFO in. */
+#define VIRTIO_NET_F_MRG_RXBUF	15	/* Host can merge receive buffers. */
+#define VIRTIO_NET_F_STATUS	16	/* virtio_net_config.status available */
+#define VIRTIO_NET_F_CTRL_VQ	17	/* Control channel available */
+#define VIRTIO_NET_F_CTRL_RX	18	/* Control channel RX mode support */
+#define VIRTIO_NET_F_CTRL_VLAN	19	/* Control channel VLAN filtering */
+#define VIRTIO_NET_F_CTRL_RX_EXTRA 20	/* Extra RX mode control support */
+#define VIRTIO_NET_F_GUEST_ANNOUNCE 21	/* Guest can announce device on the
+					 * network */
+#define VIRTIO_NET_F_MQ	22	/* Device supports Receive Flow
+					 * Steering */
+#define VIRTIO_NET_F_CTRL_MAC_ADDR 23	/* Set MAC address */
+
+#ifndef VIRTIO_NET_NO_LEGACY
+#define VIRTIO_NET_F_GSO	6	/* Host handles pkts w/ any GSO type */
+#endif /* VIRTIO_NET_NO_LEGACY */
+
+#define VIRTIO_NET_S_LINK_UP	1	/* Link is up */
+#define VIRTIO_NET_S_ANNOUNCE	2	/* Announcement is needed */
+
+struct virtio_net_config {
+	/* The config defining mac address (if VIRTIO_NET_F_MAC) */
+	uint8_t mac[ETH_ALEN];
+	/* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
+	uint16_t status;
+	/* Maximum number of each of transmit and receive queues;
+	 * see VIRTIO_NET_F_MQ and VIRTIO_NET_CTRL_MQ.
+	 * Legal values are between 1 and 0x8000
+	 */
+	uint16_t max_virtqueue_pairs;
+} QEMU_PACKED;
+
+#ifndef VIRTIO_NET_NO_LEGACY
+/* This header comes first in the scatter-gather list.
+ * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must
+ * be the first element of the scatter-gather list.  If you don't
+ * specify GSO or CSUM features, you can simply ignore the header. */
+struct virtio_net_hdr {
+#define VIRTIO_NET_HDR_F_NEEDS_CSUM	1	// Use csum_start, csum_offset
+#define VIRTIO_NET_HDR_F_DATA_VALID	2	// Csum is valid
+	uint8_t flags;
+#define VIRTIO_NET_HDR_GSO_NONE		0	// Not a GSO frame
+#define VIRTIO_NET_HDR_GSO_TCPV4	1	// GSO frame, IPv4 TCP (TSO)
+#define VIRTIO_NET_HDR_GSO_UDP		3	// GSO frame, IPv4 UDP (UFO)
+#define VIRTIO_NET_HDR_GSO_TCPV6	4	// GSO frame, IPv6 TCP
+#define VIRTIO_NET_HDR_GSO_ECN		0x80	// TCP has ECN set
+	uint8_t gso_type;
+	__virtio16 hdr_len;		/* Ethernet + IP + tcp/udp hdrs */
+	__virtio16 gso_size;		/* Bytes to append to hdr_len per frame */
+	__virtio16 csum_start;	/* Position to start checksumming from */
+	__virtio16 csum_offset;	/* Offset after that to place checksum */
+};
+
+/* This is the version of the header to use when the MRG_RXBUF
+ * feature has been negotiated. */
+struct virtio_net_hdr_mrg_rxbuf {
+	struct virtio_net_hdr hdr;
+	__virtio16 num_buffers;	/* Number of merged rx buffers */
+};
+#else /* ... VIRTIO_NET_NO_LEGACY */
+/*
+ * This header comes first in the scatter-gather list.  If you don't
+ * specify GSO or CSUM features, you can simply ignore the header.
+ *
+ * This is bitwise-equivalent to the legacy struct virtio_net_hdr_mrg_rxbuf.
+ */
+struct virtio_net_hdr_v1 {
+#define VIRTIO_NET_HDR_F_NEEDS_CSUM	1	/* Use csum_start, csum_offset */
+#define VIRTIO_NET_HDR_F_DATA_VALID	2	/* Csum is valid */
+	uint8_t flags;
+#define VIRTIO_NET_HDR_GSO_NONE		0	/* Not a GSO frame */
+#define VIRTIO_NET_HDR_GSO_TCPV4	1	/* GSO frame, IPv4 TCP (TSO) */
+#define VIRTIO_NET_HDR_GSO_UDP		3	/* GSO frame, IPv4 UDP (UFO) */
+#define VIRTIO_NET_HDR_GSO_TCPV6	4	/* GSO frame, IPv6 TCP */
+#define VIRTIO_NET_HDR_GSO_ECN		0x80	/* TCP has ECN set */
+	uint8_t gso_type;
+	__virtio16 hdr_len;	/* Ethernet + IP + tcp/udp hdrs */
+	__virtio16 gso_size;	/* Bytes to append to hdr_len per frame */
+	__virtio16 csum_start;	/* Position to start checksumming from */
+	__virtio16 csum_offset;	/* Offset after that to place checksum */
+	__virtio16 num_buffers;	/* Number of merged rx buffers */
+};
+#endif /* ...VIRTIO_NET_NO_LEGACY */
+
+/*
+ * Control virtqueue data structures
+ *
+ * The control virtqueue expects a header in the first sg entry
+ * and an ack/status response in the last entry.  Data for the
+ * command goes in between.
+ */
+struct virtio_net_ctrl_hdr {
+	uint8_t class;
+	uint8_t cmd;
+} QEMU_PACKED;
+
+typedef uint8_t virtio_net_ctrl_ack;
+
+#define VIRTIO_NET_OK     0
+#define VIRTIO_NET_ERR    1
+
+/*
+ * Control the RX mode, ie. promisucous, allmulti, etc...
+ * All commands require an "out" sg entry containing a 1 byte
+ * state value, zero = disable, non-zero = enable.  Commands
+ * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature.
+ * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA.
+ */
+#define VIRTIO_NET_CTRL_RX    0
+ #define VIRTIO_NET_CTRL_RX_PROMISC      0
+ #define VIRTIO_NET_CTRL_RX_ALLMULTI     1
+ #define VIRTIO_NET_CTRL_RX_ALLUNI       2
+ #define VIRTIO_NET_CTRL_RX_NOMULTI      3
+ #define VIRTIO_NET_CTRL_RX_NOUNI        4
+ #define VIRTIO_NET_CTRL_RX_NOBCAST      5
+
+/*
+ * Control the MAC
+ *
+ * The MAC filter table is managed by the hypervisor, the guest should
+ * assume the size is infinite.  Filtering should be considered
+ * non-perfect, ie. based on hypervisor resources, the guest may
+ * received packets from sources not specified in the filter list.
+ *
+ * In addition to the class/cmd header, the TABLE_SET command requires
+ * two out scatterlists.  Each contains a 4 byte count of entries followed
+ * by a concatenated byte stream of the ETH_ALEN MAC addresses.  The
+ * first sg list contains unicast addresses, the second is for multicast.
+ * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature
+ * is available.
+ *
+ * The ADDR_SET command requests one out scatterlist, it contains a
+ * 6 bytes MAC address. This functionality is present if the
+ * VIRTIO_NET_F_CTRL_MAC_ADDR feature is available.
+ */
+struct virtio_net_ctrl_mac {
+	__virtio32 entries;
+	uint8_t macs[][ETH_ALEN];
+} QEMU_PACKED;
+
+#define VIRTIO_NET_CTRL_MAC    1
+ #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0
+ #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
+
+/*
+ * Control VLAN filtering
+ *
+ * The VLAN filter table is controlled via a simple ADD/DEL interface.
+ * VLAN IDs not added may be filterd by the hypervisor.  Del is the
+ * opposite of add.  Both commands expect an out entry containing a 2
+ * byte VLAN ID.  VLAN filterting is available with the
+ * VIRTIO_NET_F_CTRL_VLAN feature bit.
+ */
+#define VIRTIO_NET_CTRL_VLAN       2
+ #define VIRTIO_NET_CTRL_VLAN_ADD             0
+ #define VIRTIO_NET_CTRL_VLAN_DEL             1
+
+/*
+ * Control link announce acknowledgement
+ *
+ * The command VIRTIO_NET_CTRL_ANNOUNCE_ACK is used to indicate that
+ * driver has recevied the notification; device would clear the
+ * VIRTIO_NET_S_ANNOUNCE bit in the status field after it receives
+ * this command.
+ */
+#define VIRTIO_NET_CTRL_ANNOUNCE       3
+ #define VIRTIO_NET_CTRL_ANNOUNCE_ACK         0
+
+/*
+ * Control Receive Flow Steering
+ *
+ * The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET
+ * enables Receive Flow Steering, specifying the number of the transmit and
+ * receive queues that will be used. After the command is consumed and acked by
+ * the device, the device will not steer new packets on receive virtqueues
+ * other than specified nor read from transmit virtqueues other than specified.
+ * Accordingly, driver should not transmit new packets  on virtqueues other than
+ * specified.
+ */
+struct virtio_net_ctrl_mq {
+	__virtio16 virtqueue_pairs;
+};
+
+#define VIRTIO_NET_CTRL_MQ   4
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET        0
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN        1
+ #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000
+
+#endif /* _LINUX_VIRTIO_NET_H */
diff --git a/include/standard-headers/linux/virtio_pci.h b/include/standard-headers/linux/virtio_pci.h
new file mode 100644
index 0000000..ecdc133
--- /dev/null
+++ b/include/standard-headers/linux/virtio_pci.h
@@ -0,0 +1,193 @@
+/*
+ * Virtio PCI driver
+ *
+ * This module allows virtio devices to be used over a virtual PCI device.
+ * This can be used with QEMU based VMMs like KVM or Xen.
+ *
+ * Copyright IBM Corp. 2007
+ *
+ * Authors:
+ *  Anthony Liguori  <aliguori@us.ibm.com>
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_VIRTIO_PCI_H
+#define _LINUX_VIRTIO_PCI_H
+
+#include "standard-headers/linux/types.h"
+
+#ifndef VIRTIO_PCI_NO_LEGACY
+
+/* A 32-bit r/o bitmask of the features supported by the host */
+#define VIRTIO_PCI_HOST_FEATURES	0
+
+/* A 32-bit r/w bitmask of features activated by the guest */
+#define VIRTIO_PCI_GUEST_FEATURES	4
+
+/* A 32-bit r/w PFN for the currently selected queue */
+#define VIRTIO_PCI_QUEUE_PFN		8
+
+/* A 16-bit r/o queue size for the currently selected queue */
+#define VIRTIO_PCI_QUEUE_NUM		12
+
+/* A 16-bit r/w queue selector */
+#define VIRTIO_PCI_QUEUE_SEL		14
+
+/* A 16-bit r/w queue notifier */
+#define VIRTIO_PCI_QUEUE_NOTIFY		16
+
+/* An 8-bit device status register.  */
+#define VIRTIO_PCI_STATUS		18
+
+/* An 8-bit r/o interrupt status register.  Reading the value will return the
+ * current contents of the ISR and will also clear it.  This is effectively
+ * a read-and-acknowledge. */
+#define VIRTIO_PCI_ISR			19
+
+/* MSI-X registers: only enabled if MSI-X is enabled. */
+/* A 16-bit vector for configuration changes. */
+#define VIRTIO_MSI_CONFIG_VECTOR        20
+/* A 16-bit vector for selected queue notifications. */
+#define VIRTIO_MSI_QUEUE_VECTOR         22
+
+/* The remaining space is defined by each driver as the per-driver
+ * configuration space */
+#define VIRTIO_PCI_CONFIG_OFF(msix_enabled)	((msix_enabled) ? 24 : 20)
+/* Deprecated: please use VIRTIO_PCI_CONFIG_OFF instead */
+#define VIRTIO_PCI_CONFIG(dev)	VIRTIO_PCI_CONFIG_OFF((dev)->msix_enabled)
+
+/* Virtio ABI version, this must match exactly */
+#define VIRTIO_PCI_ABI_VERSION		0
+
+/* How many bits to shift physical queue address written to QUEUE_PFN.
+ * 12 is historical, and due to x86 page size. */
+#define VIRTIO_PCI_QUEUE_ADDR_SHIFT	12
+
+/* The alignment to use between consumer and producer parts of vring.
+ * x86 pagesize again. */
+#define VIRTIO_PCI_VRING_ALIGN		4096
+
+#endif /* VIRTIO_PCI_NO_LEGACY */
+
+/* The bit of the ISR which indicates a device configuration change. */
+#define VIRTIO_PCI_ISR_CONFIG		0x2
+/* Vector value used to disable MSI for queue */
+#define VIRTIO_MSI_NO_VECTOR            0xffff
+
+#ifndef VIRTIO_PCI_NO_MODERN
+
+/* IDs for different capabilities.  Must all exist. */
+
+/* Common configuration */
+#define VIRTIO_PCI_CAP_COMMON_CFG	1
+/* Notifications */
+#define VIRTIO_PCI_CAP_NOTIFY_CFG	2
+/* ISR access */
+#define VIRTIO_PCI_CAP_ISR_CFG		3
+/* Device specific configuration */
+#define VIRTIO_PCI_CAP_DEVICE_CFG	4
+/* PCI configuration access */
+#define VIRTIO_PCI_CAP_PCI_CFG		5
+
+/* This is the PCI capability header: */
+struct virtio_pci_cap {
+	uint8_t cap_vndr;		/* Generic PCI field: PCI_CAP_ID_VNDR */
+	uint8_t cap_next;		/* Generic PCI field: next ptr. */
+	uint8_t cap_len;		/* Generic PCI field: capability length */
+	uint8_t cfg_type;		/* Identifies the structure. */
+	uint8_t bar;		/* Where to find it. */
+	uint8_t padding[3];	/* Pad to full dword. */
+	uint32_t offset;		/* Offset within bar. */
+	uint32_t length;		/* Length of the structure, in bytes. */
+};
+
+struct virtio_pci_notify_cap {
+	struct virtio_pci_cap cap;
+	uint32_t notify_off_multiplier;	/* Multiplier for queue_notify_off. */
+};
+
+/* Fields in VIRTIO_PCI_CAP_COMMON_CFG: */
+struct virtio_pci_common_cfg {
+	/* About the whole device. */
+	uint32_t device_feature_select;	/* read-write */
+	uint32_t device_feature;		/* read-only */
+	uint32_t guest_feature_select;	/* read-write */
+	uint32_t guest_feature;		/* read-write */
+	uint16_t msix_config;		/* read-write */
+	uint16_t num_queues;		/* read-only */
+	uint8_t device_status;		/* read-write */
+	uint8_t config_generation;		/* read-only */
+
+	/* About a specific virtqueue. */
+	uint16_t queue_select;		/* read-write */
+	uint16_t queue_size;		/* read-write, power of 2. */
+	uint16_t queue_msix_vector;	/* read-write */
+	uint16_t queue_enable;		/* read-write */
+	uint16_t queue_notify_off;	/* read-only */
+	uint32_t queue_desc_lo;		/* read-write */
+	uint32_t queue_desc_hi;		/* read-write */
+	uint32_t queue_avail_lo;		/* read-write */
+	uint32_t queue_avail_hi;		/* read-write */
+	uint32_t queue_used_lo;		/* read-write */
+	uint32_t queue_used_hi;		/* read-write */
+};
+
+/* Macro versions of offsets for the Old Timers! */
+#define VIRTIO_PCI_CAP_VNDR		0
+#define VIRTIO_PCI_CAP_NEXT		1
+#define VIRTIO_PCI_CAP_LEN		2
+#define VIRTIO_PCI_CAP_CFG_TYPE		3
+#define VIRTIO_PCI_CAP_BAR		4
+#define VIRTIO_PCI_CAP_OFFSET		8
+#define VIRTIO_PCI_CAP_LENGTH		12
+
+#define VIRTIO_PCI_NOTIFY_CAP_MULT	16
+
+#define VIRTIO_PCI_COMMON_DFSELECT	0
+#define VIRTIO_PCI_COMMON_DF		4
+#define VIRTIO_PCI_COMMON_GFSELECT	8
+#define VIRTIO_PCI_COMMON_GF		12
+#define VIRTIO_PCI_COMMON_MSIX		16
+#define VIRTIO_PCI_COMMON_NUMQ		18
+#define VIRTIO_PCI_COMMON_STATUS	20
+#define VIRTIO_PCI_COMMON_CFGGENERATION	21
+#define VIRTIO_PCI_COMMON_Q_SELECT	22
+#define VIRTIO_PCI_COMMON_Q_SIZE	24
+#define VIRTIO_PCI_COMMON_Q_MSIX	26
+#define VIRTIO_PCI_COMMON_Q_ENABLE	28
+#define VIRTIO_PCI_COMMON_Q_NOFF	30
+#define VIRTIO_PCI_COMMON_Q_DESCLO	32
+#define VIRTIO_PCI_COMMON_Q_DESCHI	36
+#define VIRTIO_PCI_COMMON_Q_AVAILLO	40
+#define VIRTIO_PCI_COMMON_Q_AVAILHI	44
+#define VIRTIO_PCI_COMMON_Q_USEDLO	48
+#define VIRTIO_PCI_COMMON_Q_USEDHI	52
+
+#endif /* VIRTIO_PCI_NO_MODERN */
+
+#endif
diff --git a/include/standard-headers/linux/virtio_ring.h b/include/standard-headers/linux/virtio_ring.h
new file mode 100644
index 0000000..2bd19a8
--- /dev/null
+++ b/include/standard-headers/linux/virtio_ring.h
@@ -0,0 +1,171 @@
+#ifndef _LINUX_VIRTIO_RING_H
+#define _LINUX_VIRTIO_RING_H
+/* An interface for efficient virtio implementation, currently for use by KVM
+ * and lguest, but hopefully others soon.  Do NOT change this since it will
+ * break existing servers and clients.
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright Rusty Russell IBM Corporation 2007. */
+#include "standard-headers/linux/types.h"
+#include "standard-headers/linux/virtio_types.h"
+
+/* This marks a buffer as continuing via the next field. */
+#define VRING_DESC_F_NEXT	1
+/* This marks a buffer as write-only (otherwise read-only). */
+#define VRING_DESC_F_WRITE	2
+/* This means the buffer contains a list of buffer descriptors. */
+#define VRING_DESC_F_INDIRECT	4
+
+/* The Host uses this in used->flags to advise the Guest: don't kick me when
+ * you add a buffer.  It's unreliable, so it's simply an optimization.  Guest
+ * will still kick if it's out of buffers. */
+#define VRING_USED_F_NO_NOTIFY	1
+/* The Guest uses this in avail->flags to advise the Host: don't interrupt me
+ * when you consume a buffer.  It's unreliable, so it's simply an
+ * optimization.  */
+#define VRING_AVAIL_F_NO_INTERRUPT	1
+
+/* We support indirect buffer descriptors */
+#define VIRTIO_RING_F_INDIRECT_DESC	28
+
+/* The Guest publishes the used index for which it expects an interrupt
+ * at the end of the avail ring. Host should ignore the avail->flags field. */
+/* The Host publishes the avail index for which it expects a kick
+ * at the end of the used ring. Guest should ignore the used->flags field. */
+#define VIRTIO_RING_F_EVENT_IDX		29
+
+/* Virtio ring descriptors: 16 bytes.  These can chain together via "next". */
+struct vring_desc {
+	/* Address (guest-physical). */
+	__virtio64 addr;
+	/* Length. */
+	__virtio32 len;
+	/* The flags as indicated above. */
+	__virtio16 flags;
+	/* We chain unused descriptors via this, too */
+	__virtio16 next;
+};
+
+struct vring_avail {
+	__virtio16 flags;
+	__virtio16 idx;
+	__virtio16 ring[];
+};
+
+/* u32 is used here for ids for padding reasons. */
+struct vring_used_elem {
+	/* Index of start of used descriptor chain. */
+	__virtio32 id;
+	/* Total length of the descriptor chain which was used (written to) */
+	__virtio32 len;
+};
+
+struct vring_used {
+	__virtio16 flags;
+	__virtio16 idx;
+	struct vring_used_elem ring[];
+};
+
+struct vring {
+	unsigned int num;
+
+	struct vring_desc *desc;
+
+	struct vring_avail *avail;
+
+	struct vring_used *used;
+};
+
+/* Alignment requirements for vring elements.
+ * When using pre-virtio 1.0 layout, these fall out naturally.
+ */
+#define VRING_AVAIL_ALIGN_SIZE 2
+#define VRING_USED_ALIGN_SIZE 4
+#define VRING_DESC_ALIGN_SIZE 16
+
+/* The standard layout for the ring is a continuous chunk of memory which looks
+ * like this.  We assume num is a power of 2.
+ *
+ * struct vring
+ * {
+ *	// The actual descriptors (16 bytes each)
+ *	struct vring_desc desc[num];
+ *
+ *	// A ring of available descriptor heads with free-running index.
+ *	__virtio16 avail_flags;
+ *	__virtio16 avail_idx;
+ *	__virtio16 available[num];
+ *	__virtio16 used_event_idx;
+ *
+ *	// Padding to the next align boundary.
+ *	char pad[];
+ *
+ *	// A ring of used descriptor heads with free-running index.
+ *	__virtio16 used_flags;
+ *	__virtio16 used_idx;
+ *	struct vring_used_elem used[num];
+ *	__virtio16 avail_event_idx;
+ * };
+ */
+/* We publish the used event index at the end of the available ring, and vice
+ * versa. They are at the end for backwards compatibility. */
+#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
+#define vring_avail_event(vr) (*(__virtio16 *)&(vr)->used->ring[(vr)->num])
+
+static __inline__ void vring_init(struct vring *vr, unsigned int num, void *p,
+			      unsigned long align)
+{
+	vr->num = num;
+	vr->desc = p;
+	vr->avail = p + num*sizeof(struct vring_desc);
+	vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__virtio16)
+		+ align-1) & ~(align - 1));
+}
+
+static __inline__ unsigned vring_size(unsigned int num, unsigned long align)
+{
+	return ((sizeof(struct vring_desc) * num + sizeof(__virtio16) * (3 + num)
+		 + align - 1) & ~(align - 1))
+		+ sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num;
+}
+
+/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
+/* Assuming a given event_idx value from the other size, if
+ * we have just incremented index from old to new_idx,
+ * should we trigger an event? */
+static __inline__ int vring_need_event(uint16_t event_idx, uint16_t new_idx, uint16_t old)
+{
+	/* Note: Xen has similar logic for notification hold-off
+	 * in include/xen/interface/io/ring.h with req_event and req_prod
+	 * corresponding to event_idx + 1 and new_idx respectively.
+	 * Note also that req_event and req_prod in Xen start at 1,
+	 * event indexes in virtio start at 0. */
+	return (uint16_t)(new_idx - event_idx - 1) < (uint16_t)(new_idx - old);
+}
+
+#endif /* _LINUX_VIRTIO_RING_H */
diff --git a/include/standard-headers/linux/virtio_rng.h b/include/standard-headers/linux/virtio_rng.h
new file mode 100644
index 0000000..60fc798
--- /dev/null
+++ b/include/standard-headers/linux/virtio_rng.h
@@ -0,0 +1,8 @@
+#ifndef _LINUX_VIRTIO_RNG_H
+#define _LINUX_VIRTIO_RNG_H
+/* This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers. */
+#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/virtio_config.h"
+
+#endif /* _LINUX_VIRTIO_RNG_H */
diff --git a/include/standard-headers/linux/virtio_scsi.h b/include/standard-headers/linux/virtio_scsi.h
new file mode 100644
index 0000000..78ba9d3
--- /dev/null
+++ b/include/standard-headers/linux/virtio_scsi.h
@@ -0,0 +1,164 @@
+/*
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_VIRTIO_SCSI_H
+#define _LINUX_VIRTIO_SCSI_H
+
+#include "standard-headers/linux/virtio_types.h"
+
+#define VIRTIO_SCSI_CDB_SIZE   32
+#define VIRTIO_SCSI_SENSE_SIZE 96
+
+/* SCSI command request, followed by data-out */
+struct virtio_scsi_cmd_req {
+	uint8_t lun[8];		/* Logical Unit Number */
+	__virtio64 tag;		/* Command identifier */
+	uint8_t task_attr;		/* Task attribute */
+	uint8_t prio;		/* SAM command priority field */
+	uint8_t crn;
+	uint8_t cdb[VIRTIO_SCSI_CDB_SIZE];
+} QEMU_PACKED;
+
+/* SCSI command request, followed by protection information */
+struct virtio_scsi_cmd_req_pi {
+	uint8_t lun[8];		/* Logical Unit Number */
+	__virtio64 tag;		/* Command identifier */
+	uint8_t task_attr;		/* Task attribute */
+	uint8_t prio;		/* SAM command priority field */
+	uint8_t crn;
+	__virtio32 pi_bytesout;	/* DataOUT PI Number of bytes */
+	__virtio32 pi_bytesin;		/* DataIN PI Number of bytes */
+	uint8_t cdb[VIRTIO_SCSI_CDB_SIZE];
+} QEMU_PACKED;
+
+/* Response, followed by sense data and data-in */
+struct virtio_scsi_cmd_resp {
+	__virtio32 sense_len;		/* Sense data length */
+	__virtio32 resid;		/* Residual bytes in data buffer */
+	__virtio16 status_qualifier;	/* Status qualifier */
+	uint8_t status;		/* Command completion status */
+	uint8_t response;		/* Response values */
+	uint8_t sense[VIRTIO_SCSI_SENSE_SIZE];
+} QEMU_PACKED;
+
+/* Task Management Request */
+struct virtio_scsi_ctrl_tmf_req {
+	__virtio32 type;
+	__virtio32 subtype;
+	uint8_t lun[8];
+	__virtio64 tag;
+} QEMU_PACKED;
+
+struct virtio_scsi_ctrl_tmf_resp {
+	uint8_t response;
+} QEMU_PACKED;
+
+/* Asynchronous notification query/subscription */
+struct virtio_scsi_ctrl_an_req {
+	__virtio32 type;
+	uint8_t lun[8];
+	__virtio32 event_requested;
+} QEMU_PACKED;
+
+struct virtio_scsi_ctrl_an_resp {
+	__virtio32 event_actual;
+	uint8_t response;
+} QEMU_PACKED;
+
+struct virtio_scsi_event {
+	__virtio32 event;
+	uint8_t lun[8];
+	__virtio32 reason;
+} QEMU_PACKED;
+
+struct virtio_scsi_config {
+	uint32_t num_queues;
+	uint32_t seg_max;
+	uint32_t max_sectors;
+	uint32_t cmd_per_lun;
+	uint32_t event_info_size;
+	uint32_t sense_size;
+	uint32_t cdb_size;
+	uint16_t max_channel;
+	uint16_t max_target;
+	uint32_t max_lun;
+} QEMU_PACKED;
+
+/* Feature Bits */
+#define VIRTIO_SCSI_F_INOUT                    0
+#define VIRTIO_SCSI_F_HOTPLUG                  1
+#define VIRTIO_SCSI_F_CHANGE                   2
+#define VIRTIO_SCSI_F_T10_PI                   3
+
+/* Response codes */
+#define VIRTIO_SCSI_S_OK                       0
+#define VIRTIO_SCSI_S_OVERRUN                  1
+#define VIRTIO_SCSI_S_ABORTED                  2
+#define VIRTIO_SCSI_S_BAD_TARGET               3
+#define VIRTIO_SCSI_S_RESET                    4
+#define VIRTIO_SCSI_S_BUSY                     5
+#define VIRTIO_SCSI_S_TRANSPORT_FAILURE        6
+#define VIRTIO_SCSI_S_TARGET_FAILURE           7
+#define VIRTIO_SCSI_S_NEXUS_FAILURE            8
+#define VIRTIO_SCSI_S_FAILURE                  9
+#define VIRTIO_SCSI_S_FUNCTION_SUCCEEDED       10
+#define VIRTIO_SCSI_S_FUNCTION_REJECTED        11
+#define VIRTIO_SCSI_S_INCORRECT_LUN            12
+
+/* Controlq type codes.  */
+#define VIRTIO_SCSI_T_TMF                      0
+#define VIRTIO_SCSI_T_AN_QUERY                 1
+#define VIRTIO_SCSI_T_AN_SUBSCRIBE             2
+
+/* Valid TMF subtypes.  */
+#define VIRTIO_SCSI_T_TMF_ABORT_TASK           0
+#define VIRTIO_SCSI_T_TMF_ABORT_TASK_SET       1
+#define VIRTIO_SCSI_T_TMF_CLEAR_ACA            2
+#define VIRTIO_SCSI_T_TMF_CLEAR_TASK_SET       3
+#define VIRTIO_SCSI_T_TMF_I_T_NEXUS_RESET      4
+#define VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET   5
+#define VIRTIO_SCSI_T_TMF_QUERY_TASK           6
+#define VIRTIO_SCSI_T_TMF_QUERY_TASK_SET       7
+
+/* Events.  */
+#define VIRTIO_SCSI_T_EVENTS_MISSED            0x80000000
+#define VIRTIO_SCSI_T_NO_EVENT                 0
+#define VIRTIO_SCSI_T_TRANSPORT_RESET          1
+#define VIRTIO_SCSI_T_ASYNC_NOTIFY             2
+#define VIRTIO_SCSI_T_PARAM_CHANGE             3
+
+/* Reasons of transport reset event */
+#define VIRTIO_SCSI_EVT_RESET_HARD             0
+#define VIRTIO_SCSI_EVT_RESET_RESCAN           1
+#define VIRTIO_SCSI_EVT_RESET_REMOVED          2
+
+#define VIRTIO_SCSI_S_SIMPLE                   0
+#define VIRTIO_SCSI_S_ORDERED                  1
+#define VIRTIO_SCSI_S_HEAD                     2
+#define VIRTIO_SCSI_S_ACA                      3
+
+
+#endif /* _LINUX_VIRTIO_SCSI_H */
diff --git a/include/standard-headers/linux/virtio_types.h b/include/standard-headers/linux/virtio_types.h
new file mode 100644
index 0000000..fd0d351
--- /dev/null
+++ b/include/standard-headers/linux/virtio_types.h
@@ -0,0 +1,46 @@
+#ifndef _LINUX_VIRTIO_TYPES_H
+#define _LINUX_VIRTIO_TYPES_H
+/* Type definitions for virtio implementations.
+ *
+ * This header is BSD licensed so anyone can use the definitions to implement
+ * compatible drivers/servers.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of IBM nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ * Author: Michael S. Tsirkin <mst@redhat.com>
+ */
+#include "standard-headers/linux/types.h"
+
+/*
+ * __virtio{16,32,64} have the following meaning:
+ * - __u{16,32,64} for virtio devices in legacy mode, accessed in native endian
+ * - __le{16,32,64} for standard-compliant virtio devices
+ */
+
+typedef uint16_t  __virtio16;
+typedef uint32_t  __virtio32;
+typedef uint64_t  __virtio64;
+
+#endif /* _LINUX_VIRTIO_TYPES_H */
-- 
MST

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

* [Qemu-devel] [PATCH v3 03/17] virtio: use standard virtio_ring.h
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 01/17] scripts/update-linux-headers.sh: pull virtio hdrs Michael S. Tsirkin
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 02/17] include: import virtio headers from linux 4.0 Michael S. Tsirkin
@ 2015-02-16 21:35 ` Michael S. Tsirkin
  2015-02-17 12:44   ` Thomas Huth
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 04/17] virtio: use standard-headers Michael S. Tsirkin
                   ` (13 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

Switch to virtio_ring.h from standard headers.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/dataplane/vring.h |   2 +-
 include/hw/virtio/virtio_ring.h     | 167 ------------------------------------
 hw/net/vhost_net.c                  |   2 +-
 3 files changed, 2 insertions(+), 169 deletions(-)
 delete mode 100644 include/hw/virtio/virtio_ring.h

diff --git a/include/hw/virtio/dataplane/vring.h b/include/hw/virtio/dataplane/vring.h
index d3e086a..836d26a 100644
--- a/include/hw/virtio/dataplane/vring.h
+++ b/include/hw/virtio/dataplane/vring.h
@@ -18,7 +18,7 @@
 #define VRING_H
 
 #include "qemu-common.h"
-#include "hw/virtio/virtio_ring.h"
+#include "standard-headers/linux/virtio_ring.h"
 #include "hw/virtio/virtio.h"
 
 typedef struct {
diff --git a/include/hw/virtio/virtio_ring.h b/include/hw/virtio/virtio_ring.h
deleted file mode 100644
index 0b42e6e..0000000
--- a/include/hw/virtio/virtio_ring.h
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef _LINUX_VIRTIO_RING_H
-#define _LINUX_VIRTIO_RING_H
-/*
- * This file is copied from /usr/include/linux while converting __uNN types
- * to uXX_t, __inline__ to inline, and tab to spaces.
- * */
-
-/* An interface for efficient virtio implementation, currently for use by KVM
- * and lguest, but hopefully others soon.  Do NOT change this since it will
- * break existing servers and clients.
- *
- * This header is BSD licensed so anyone can use the definitions to implement
- * compatible drivers/servers.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of IBM nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Copyright Rusty Russell IBM Corporation 2007. */
-
-/* This marks a buffer as continuing via the next field. */
-#define VRING_DESC_F_NEXT   1
-/* This marks a buffer as write-only (otherwise read-only). */
-#define VRING_DESC_F_WRITE  2
-/* This means the buffer contains a list of buffer descriptors. */
-#define VRING_DESC_F_INDIRECT   4
-
-/* The Host uses this in used->flags to advise the Guest: don't kick me when
- * you add a buffer.  It's unreliable, so it's simply an optimization.  Guest
- * will still kick if it's out of buffers. */
-#define VRING_USED_F_NO_NOTIFY  1
-/* The Guest uses this in avail->flags to advise the Host: don't interrupt me
- * when you consume a buffer.  It's unreliable, so it's simply an
- * optimization.  */
-#define VRING_AVAIL_F_NO_INTERRUPT  1
-
-/* We support indirect buffer descriptors */
-#define VIRTIO_RING_F_INDIRECT_DESC 28
-
-/* The Guest publishes the used index for which it expects an interrupt
- * at the end of the avail ring. Host should ignore the avail->flags field. */
-/* The Host publishes the avail index for which it expects a kick
- * at the end of the used ring. Guest should ignore the used->flags field. */
-#define VIRTIO_RING_F_EVENT_IDX     29
-
-/* Virtio ring descriptors: 16 bytes.  These can chain together via "next". */
-struct vring_desc {
-    /* Address (guest-physical). */
-    uint64_t addr;
-    /* Length. */
-    uint32_t len;
-    /* The flags as indicated above. */
-    uint16_t flags;
-    /* We chain unused descriptors via this, too */
-    uint16_t next;
-};
-
-struct vring_avail {
-    uint16_t flags;
-    uint16_t idx;
-    uint16_t ring[];
-};
-
-/* u32 is used here for ids for padding reasons. */
-struct vring_used_elem {
-    /* Index of start of used descriptor chain. */
-    uint32_t id;
-    /* Total length of the descriptor chain which was used (written to) */
-    uint32_t len;
-};
-
-struct vring_used {
-    uint16_t flags;
-    uint16_t idx;
-    struct vring_used_elem ring[];
-};
-
-struct vring {
-    unsigned int num;
-
-    struct vring_desc *desc;
-
-    struct vring_avail *avail;
-
-    struct vring_used *used;
-};
-
-/* The standard layout for the ring is a continuous chunk of memory which looks
- * like this.  We assume num is a power of 2.
- *
- * struct vring
- * {
- *  // The actual descriptors (16 bytes each)
- *  struct vring_desc desc[num];
- *
- *  // A ring of available descriptor heads with free-running index.
- *  uint16_t avail_flags;
- *  uint16_t avail_idx;
- *  uint16_t available[num];
- *  uint16_t used_event_idx;
- *
- *  // Padding to the next align boundary.
- *  char pad[];
- *
- *  // A ring of used descriptor heads with free-running index.
- *  uint16_t used_flags;
- *  uint16_t used_idx;
- *  struct vring_used_elem used[num];
- *  uint16_t avail_event_idx;
- * };
- */
-/* We publish the used event index at the end of the available ring, and vice
- * versa. They are at the end for backwards compatibility. */
-#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
-#define vring_avail_event(vr) (*(uint16_t *)&(vr)->used->ring[(vr)->num])
-
-static inline void vring_init(struct vring *vr, unsigned int num, void *p,
-                  unsigned long align)
-{
-    vr->num = num;
-    vr->desc = p;
-    vr->avail = p + num*sizeof(struct vring_desc);
-    vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(uint16_t)
-        + align - 1) & ~(align - 1));
-}
-
-static inline unsigned vring_size(unsigned int num, unsigned long align)
-{
-    return ((sizeof(struct vring_desc) * num + sizeof(uint16_t) * (3 + num)
-         + align - 1) & ~(align - 1))
-        + sizeof(uint16_t) * 3 + sizeof(struct vring_used_elem) * num;
-}
-
-/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
-/* Assuming a given event_idx value from the other size, if
- * we have just incremented index from old to new_idx,
- * should we trigger an event? */
-static inline int vring_need_event(uint16_t event_idx, uint16_t new_idx, uint16_t old)
-{
-    /* Note: Xen has similar logic for notification hold-off
-     * in include/xen/interface/io/ring.h with req_event and req_prod
-     * corresponding to event_idx + 1 and new_idx respectively.
-     * Note also that req_event and req_prod in Xen start at 1,
-     * event indexes in virtio start at 0. */
-    return (uint16_t)(new_idx - event_idx - 1) < (uint16_t)(new_idx - old);
-}
-
-#endif /* _LINUX_VIRTIO_RING_H */
diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
index 4e3a061..2ea1ef1 100644
--- a/hw/net/vhost_net.c
+++ b/hw/net/vhost_net.c
@@ -35,7 +35,7 @@
 
 #include <stdio.h>
 
-#include "hw/virtio/virtio_ring.h"
+#include "standard-headers/linux/virtio_ring.h"
 #include "hw/virtio/vhost.h"
 #include "hw/virtio/virtio-bus.h"
 
-- 
MST

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

* [Qemu-devel] [PATCH v3 04/17] virtio: use standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (2 preceding siblings ...)
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 03/17] virtio: use standard virtio_ring.h Michael S. Tsirkin
@ 2015-02-16 21:35 ` Michael S. Tsirkin
  2015-02-17 13:16   ` Thomas Huth
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 05/17] virtio-balloon: use standard headers Michael S. Tsirkin
                   ` (12 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Aneesh Kumar K.V,
	Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun, Anthony Liguori

Drop a bunch of code duplicated from virtio_config.h and virtio_ring.h.
This makes us rename event index accessors which conflict,
as reusing the ones from virtio_ring.h isn't trivial.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/9pfs/virtio-9p.h        |  1 +
 include/hw/virtio/virtio.h | 48 ++--------------------------------------------
 hw/virtio/virtio.c         | 23 +++++-----------------
 3 files changed, 8 insertions(+), 64 deletions(-)

diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h
index 2c3603a..0776424 100644
--- a/hw/9pfs/virtio-9p.h
+++ b/hw/9pfs/virtio-9p.h
@@ -8,6 +8,7 @@
 #include <sys/resource.h>
 #include <glib.h>
 #include "hw/virtio/virtio.h"
+#include "hw/virtio/virtio-9p.h"
 #include "fsdev/file-op-9p.h"
 #include "fsdev/virtio-9p-marshal.h"
 #include "qemu/thread.h"
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index f24997d..d1b416b 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -19,56 +19,12 @@
 #include "hw/qdev.h"
 #include "sysemu/sysemu.h"
 #include "qemu/event_notifier.h"
-#ifdef CONFIG_VIRTFS
-#include "hw/virtio/virtio-9p.h"
-#endif
+#include "standard-headers/linux/virtio_config.h"
+#include "standard-headers/linux/virtio_ring.h"
 
-/* from Linux's linux/virtio_config.h */
-
-/* Status byte for guest to report progress, and synchronize features. */
-/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */
-#define VIRTIO_CONFIG_S_ACKNOWLEDGE     1
-/* We have found a driver for the device. */
-#define VIRTIO_CONFIG_S_DRIVER          2
-/* Driver has used its parts of the config, and is happy */
-#define VIRTIO_CONFIG_S_DRIVER_OK       4
-/* We've given up on this device. */
-#define VIRTIO_CONFIG_S_FAILED          0x80
-
-/* Some virtio feature bits (currently bits 28 through 31) are reserved for the
- * transport being used (eg. virtio_ring), the rest are per-device feature bits. */
-#define VIRTIO_TRANSPORT_F_START        28
-#define VIRTIO_TRANSPORT_F_END          32
-
-/* We notify when the ring is completely used, even if the guest is suppressing
- * callbacks */
-#define VIRTIO_F_NOTIFY_ON_EMPTY        24
-/* Can the device handle any descriptor layout? */
-#define VIRTIO_F_ANY_LAYOUT             27
-/* We support indirect buffer descriptors */
-#define VIRTIO_RING_F_INDIRECT_DESC     28
-/* The Guest publishes the used index for which it expects an interrupt
- * at the end of the avail ring. Host should ignore the avail->flags field. */
-/* The Host publishes the avail index for which it expects a kick
- * at the end of the used ring. Guest should ignore the used->flags field. */
-#define VIRTIO_RING_F_EVENT_IDX         29
 /* A guest should never accept this.  It implies negotiation is broken. */
 #define VIRTIO_F_BAD_FEATURE		30
 
-/* from Linux's linux/virtio_ring.h */
-
-/* This marks a buffer as continuing via the next field. */
-#define VRING_DESC_F_NEXT       1
-/* This marks a buffer as write-only (otherwise read-only). */
-#define VRING_DESC_F_WRITE      2
-/* This means the buffer contains a list of buffer descriptors. */
-#define VRING_DESC_F_INDIRECT  4
-
-/* This means don't notify other side when buffer added. */
-#define VRING_USED_F_NO_NOTIFY  1
-/* This means don't interrupt guest when buffer consumed. */
-#define VRING_AVAIL_F_NO_INTERRUPT      1
-
 struct VirtQueue;
 
 static inline hwaddr vring_align(hwaddr addr,
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index d735343..f783f31 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -155,7 +155,7 @@ static inline uint16_t vring_avail_ring(VirtQueue *vq, int i)
     return virtio_lduw_phys(vq->vdev, pa);
 }
 
-static inline uint16_t vring_used_event(VirtQueue *vq)
+static inline uint16_t vring_get_used_event(VirtQueue *vq)
 {
     return vring_avail_ring(vq, vq->vring.num);
 }
@@ -204,7 +204,7 @@ static inline void vring_used_flags_unset_bit(VirtQueue *vq, int mask)
     virtio_stw_phys(vdev, pa, virtio_lduw_phys(vdev, pa) & ~mask);
 }
 
-static inline void vring_avail_event(VirtQueue *vq, uint16_t val)
+static inline void vring_set_avail_event(VirtQueue *vq, uint16_t val)
 {
     hwaddr pa;
     if (!vq->notification) {
@@ -218,7 +218,7 @@ void virtio_queue_set_notification(VirtQueue *vq, int enable)
 {
     vq->notification = enable;
     if (vq->vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) {
-        vring_avail_event(vq, vring_avail_idx(vq));
+        vring_set_avail_event(vq, vring_avail_idx(vq));
     } else if (enable) {
         vring_used_flags_unset_bit(vq, VRING_USED_F_NO_NOTIFY);
     } else {
@@ -469,7 +469,7 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
 
     i = head = virtqueue_get_head(vq, vq->last_avail_idx++);
     if (vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) {
-        vring_avail_event(vq, vq->last_avail_idx);
+        vring_set_avail_event(vq, vq->last_avail_idx);
     }
 
     if (vring_desc_flags(vdev, desc_pa, i) & VRING_DESC_F_INDIRECT) {
@@ -819,19 +819,6 @@ void virtio_irq(VirtQueue *vq)
     virtio_notify_vector(vq->vdev, vq->vector);
 }
 
-/* Assuming a given event_idx value from the other size, if
- * we have just incremented index from old to new_idx,
- * should we trigger an event? */
-static inline int vring_need_event(uint16_t event, uint16_t new, uint16_t old)
-{
-	/* Note: Xen has similar logic for notification hold-off
-	 * in include/xen/interface/io/ring.h with req_event and req_prod
-	 * corresponding to event_idx + 1 and new respectively.
-	 * Note also that req_event and req_prod in Xen start at 1,
-	 * event indexes in virtio start at 0. */
-	return (uint16_t)(new - event - 1) < (uint16_t)(new - old);
-}
-
 static bool vring_notify(VirtIODevice *vdev, VirtQueue *vq)
 {
     uint16_t old, new;
@@ -852,7 +839,7 @@ static bool vring_notify(VirtIODevice *vdev, VirtQueue *vq)
     vq->signalled_used_valid = true;
     old = vq->signalled_used;
     new = vq->signalled_used = vring_used_idx(vq);
-    return !v || vring_need_event(vring_used_event(vq), new, old);
+    return !v || vring_need_event(vring_get_used_event(vq), new, old);
 }
 
 void virtio_notify(VirtIODevice *vdev, VirtQueue *vq)
-- 
MST

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

* [Qemu-devel] [PATCH v3 05/17] virtio-balloon: use standard headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (3 preceding siblings ...)
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 04/17] virtio: use standard-headers Michael S. Tsirkin
@ 2015-02-16 21:35 ` Michael S. Tsirkin
  2015-02-17 13:25   ` Thomas Huth
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 06/17] virtio-9p: " Michael S. Tsirkin
                   ` (11 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

Drop code duplicated from standard headers.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/virtio-balloon.h | 35 ++---------------------------------
 1 file changed, 2 insertions(+), 33 deletions(-)

diff --git a/include/hw/virtio/virtio-balloon.h b/include/hw/virtio/virtio-balloon.h
index f863bfe..4ab8f54 100644
--- a/include/hw/virtio/virtio-balloon.h
+++ b/include/hw/virtio/virtio-balloon.h
@@ -15,6 +15,7 @@
 #ifndef _QEMU_VIRTIO_BALLOON_H
 #define _QEMU_VIRTIO_BALLOON_H
 
+#include "standard-headers/linux/virtio_balloon.h"
 #include "hw/virtio/virtio.h"
 #include "hw/pci/pci.h"
 
@@ -22,39 +23,7 @@
 #define VIRTIO_BALLOON(obj) \
         OBJECT_CHECK(VirtIOBalloon, (obj), TYPE_VIRTIO_BALLOON)
 
-/* from Linux's linux/virtio_balloon.h */
-
-/* The ID for virtio_balloon */
-#define VIRTIO_ID_BALLOON 5
-
-/* The feature bitmap for virtio balloon */
-#define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */
-#define VIRTIO_BALLOON_F_STATS_VQ 1       /* Memory stats virtqueue */
-
-/* Size of a PFN in the balloon interface. */
-#define VIRTIO_BALLOON_PFN_SHIFT 12
-
-struct virtio_balloon_config
-{
-    /* Number of pages host wants Guest to give up. */
-    uint32_t num_pages;
-    /* Number of pages we've actually got in balloon. */
-    uint32_t actual;
-};
-
-/* Memory Statistics */
-#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
-#define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */
-#define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */
-#define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */
-#define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */
-#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
-#define VIRTIO_BALLOON_S_NR       6
-
-typedef struct VirtIOBalloonStat {
-    uint16_t tag;
-    uint64_t val;
-} QEMU_PACKED VirtIOBalloonStat;
+typedef struct virtio_balloon_stat VirtIOBalloonStat;
 
 typedef struct VirtIOBalloon {
     VirtIODevice parent_obj;
-- 
MST

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

* [Qemu-devel] [PATCH v3 06/17] virtio-9p: use standard headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (4 preceding siblings ...)
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 05/17] virtio-balloon: use standard headers Michael S. Tsirkin
@ 2015-02-16 21:35 ` Michael S. Tsirkin
  2015-02-17 13:42   ` Thomas Huth
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 07/17] virtio-blk: switch to standard-headers Michael S. Tsirkin
                   ` (10 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Aneesh Kumar K.V,
	Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun, Anthony Liguori

Drop code duplicated from standard headers.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/9pfs/virtio-9p.h | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)

diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h
index 0776424..58dafa9 100644
--- a/hw/9pfs/virtio-9p.h
+++ b/hw/9pfs/virtio-9p.h
@@ -7,6 +7,7 @@
 #include <utime.h>
 #include <sys/resource.h>
 #include <glib.h>
+#include "standard-headers/linux/virtio_9p.h"
 #include "hw/virtio/virtio.h"
 #include "hw/virtio/virtio-9p.h"
 #include "fsdev/file-op-9p.h"
@@ -14,10 +15,6 @@
 #include "qemu/thread.h"
 #include "block/coroutine.h"
 
-/* The feature bitmap for virtio 9P */
-/* The mount point is specified in a config variable */
-#define VIRTIO_9P_MOUNT_TAG 0
-
 enum {
     P9_TLERROR = 6,
     P9_RLERROR,
@@ -145,10 +142,6 @@ struct V9fsPDU
  * 1) change user needs to set groups and stuff
  */
 
-/* from Linux's linux/virtio_9p.h */
-
-/* The ID for virtio console */
-#define VIRTIO_ID_9P    9
 #define MAX_REQ         128
 #define MAX_TAG_LEN     32
 
@@ -278,14 +271,6 @@ typedef struct V9fsWriteState {
     int cnt;
 } V9fsWriteState;
 
-struct virtio_9p_config
-{
-    /* number of characters in tag */
-    uint16_t tag_len;
-    /* Variable size tag name */
-    uint8_t tag[0];
-} QEMU_PACKED;
-
 typedef struct V9fsMkState {
     V9fsPDU *pdu;
     size_t offset;
-- 
MST

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

* [Qemu-devel] [PATCH v3 07/17] virtio-blk: switch to standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (5 preceding siblings ...)
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 06/17] virtio-9p: " Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-18  9:19   ` Thomas Huth
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 08/17] virtio-net, tap: use standard-headers Michael S. Tsirkin
                   ` (9 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Peter Maydell, Thomas Huth, Alexander Graf,
	Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun, Anthony Liguori

Drop duplicated code. Minor codechanges were required
as geometry is a sub-structure now.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/virtio-blk.h | 77 +-----------------------------------------
 hw/block/virtio-blk.c          |  8 ++---
 2 files changed, 5 insertions(+), 80 deletions(-)

diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
index fc7d311..b3ffcd9 100644
--- a/include/hw/virtio/virtio-blk.h
+++ b/include/hw/virtio/virtio-blk.h
@@ -14,6 +14,7 @@
 #ifndef _QEMU_VIRTIO_BLK_H
 #define _QEMU_VIRTIO_BLK_H
 
+#include "standard-headers/linux/virtio_blk.h"
 #include "hw/virtio/virtio.h"
 #include "hw/block/block.h"
 #include "sysemu/iothread.h"
@@ -23,88 +24,12 @@
 #define VIRTIO_BLK(obj) \
         OBJECT_CHECK(VirtIOBlock, (obj), TYPE_VIRTIO_BLK)
 
-/* from Linux's linux/virtio_blk.h */
-
-/* The ID for virtio_block */
-#define VIRTIO_ID_BLOCK 2
-
-/* Feature bits */
-#define VIRTIO_BLK_F_BARRIER    0       /* Does host support barriers? */
-#define VIRTIO_BLK_F_SIZE_MAX   1       /* Indicates maximum segment size */
-#define VIRTIO_BLK_F_SEG_MAX    2       /* Indicates maximum # of segments */
-#define VIRTIO_BLK_F_GEOMETRY   4       /* Indicates support of legacy geometry */
-#define VIRTIO_BLK_F_RO         5       /* Disk is read-only */
-#define VIRTIO_BLK_F_BLK_SIZE   6       /* Block size of disk is available*/
-#define VIRTIO_BLK_F_SCSI       7       /* Supports scsi command passthru */
-/* #define VIRTIO_BLK_F_IDENTIFY   8       ATA IDENTIFY supported, DEPRECATED */
-#define VIRTIO_BLK_F_WCE        9       /* write cache enabled */
-#define VIRTIO_BLK_F_TOPOLOGY   10      /* Topology information is available */
-#define VIRTIO_BLK_F_CONFIG_WCE 11      /* write cache configurable */
-
-#define VIRTIO_BLK_ID_BYTES     20      /* ID string length */
-
-struct virtio_blk_config
-{
-    uint64_t capacity;
-    uint32_t size_max;
-    uint32_t seg_max;
-    uint16_t cylinders;
-    uint8_t heads;
-    uint8_t sectors;
-    uint32_t blk_size;
-    uint8_t physical_block_exp;
-    uint8_t alignment_offset;
-    uint16_t min_io_size;
-    uint32_t opt_io_size;
-    uint8_t wce;
-} QEMU_PACKED;
-
-/* These two define direction. */
-#define VIRTIO_BLK_T_IN         0
-#define VIRTIO_BLK_T_OUT        1
-
-/* This bit says it's a scsi command, not an actual read or write. */
-#define VIRTIO_BLK_T_SCSI_CMD   2
-
-/* Flush the volatile write cache */
-#define VIRTIO_BLK_T_FLUSH      4
-
-/* return the device ID string */
-#define VIRTIO_BLK_T_GET_ID     8
-
-/* Barrier before this op. */
-#define VIRTIO_BLK_T_BARRIER    0x80000000
-
-/* This is the first element of the read scatter-gather list. */
-struct virtio_blk_outhdr
-{
-    /* VIRTIO_BLK_T* */
-    uint32_t type;
-    /* io priority. */
-    uint32_t ioprio;
-    /* Sector (ie. 512 byte offset) */
-    uint64_t sector;
-};
-
-#define VIRTIO_BLK_S_OK         0
-#define VIRTIO_BLK_S_IOERR      1
-#define VIRTIO_BLK_S_UNSUPP     2
-
 /* This is the last element of the write scatter-gather list */
 struct virtio_blk_inhdr
 {
     unsigned char status;
 };
 
-/* SCSI pass-through header */
-struct virtio_scsi_inhdr
-{
-    uint32_t errors;
-    uint32_t data_len;
-    uint32_t sense_len;
-    uint32_t residual;
-};
-
 struct VirtIOBlkConf
 {
     BlockConf conf;
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index 1a8a176..6828f48 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -667,11 +667,11 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
     memset(&blkcfg, 0, sizeof(blkcfg));
     virtio_stq_p(vdev, &blkcfg.capacity, capacity);
     virtio_stl_p(vdev, &blkcfg.seg_max, 128 - 2);
-    virtio_stw_p(vdev, &blkcfg.cylinders, conf->cyls);
+    virtio_stw_p(vdev, &blkcfg.geometry.cylinders, conf->cyls);
     virtio_stl_p(vdev, &blkcfg.blk_size, blk_size);
     virtio_stw_p(vdev, &blkcfg.min_io_size, conf->min_io_size / blk_size);
     virtio_stw_p(vdev, &blkcfg.opt_io_size, conf->opt_io_size / blk_size);
-    blkcfg.heads = conf->heads;
+    blkcfg.geometry.heads = conf->heads;
     /*
      * We must ensure that the block device capacity is a multiple of
      * the logical block size. If that is not the case, let's use
@@ -684,9 +684,9 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
      * per track (cylinder).
      */
     if (blk_getlength(s->blk) /  conf->heads / conf->secs % blk_size) {
-        blkcfg.sectors = conf->secs & ~s->sector_mask;
+        blkcfg.geometry.sectors = conf->secs & ~s->sector_mask;
     } else {
-        blkcfg.sectors = conf->secs;
+        blkcfg.geometry.sectors = conf->secs;
     }
     blkcfg.size_max = 0;
     blkcfg.physical_block_exp = get_physical_block_exp(conf);
-- 
MST

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

* [Qemu-devel] [PATCH v3 08/17] virtio-net, tap: use standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (6 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 07/17] virtio-blk: switch to standard-headers Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-18  9:30   ` Thomas Huth
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 09/17] virtio-rng: " Michael S. Tsirkin
                   ` (8 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Juan Quintela, Jason Wang,
	Alexander Graf, Vincenzo Maffione, Michael Roth, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

Drop duplicated code.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/virtio-net.h | 151 +----------------------------------------
 include/net/tap.h              |  24 +------
 2 files changed, 2 insertions(+), 173 deletions(-)

diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h
index 6ceb5aa..4c2fe83 100644
--- a/include/hw/virtio/virtio-net.h
+++ b/include/hw/virtio/virtio-net.h
@@ -14,49 +14,15 @@
 #ifndef _QEMU_VIRTIO_NET_H
 #define _QEMU_VIRTIO_NET_H
 
+#include "standard-headers/linux/virtio_net.h"
 #include "hw/virtio/virtio.h"
-#include "hw/pci/pci.h"
 
 #define TYPE_VIRTIO_NET "virtio-net-device"
 #define VIRTIO_NET(obj) \
         OBJECT_CHECK(VirtIONet, (obj), TYPE_VIRTIO_NET)
 
-#define ETH_ALEN    6
-
-/* from Linux's virtio_net.h */
-
-/* The ID for virtio_net */
-#define VIRTIO_ID_NET   1
-
-/* The feature bitmap for virtio net */
-#define VIRTIO_NET_F_CSUM       0       /* Host handles pkts w/ partial csum */
-#define VIRTIO_NET_F_GUEST_CSUM 1       /* Guest handles pkts w/ partial csum */
 #define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 /* Control channel offload
                                          * configuration support */
-#define VIRTIO_NET_F_MAC        5       /* Host has given MAC address. */
-#define VIRTIO_NET_F_GSO        6       /* Host handles pkts w/ any GSO type */
-#define VIRTIO_NET_F_GUEST_TSO4 7       /* Guest can handle TSOv4 in. */
-#define VIRTIO_NET_F_GUEST_TSO6 8       /* Guest can handle TSOv6 in. */
-#define VIRTIO_NET_F_GUEST_ECN  9       /* Guest can handle TSO[6] w/ ECN in. */
-#define VIRTIO_NET_F_GUEST_UFO  10      /* Guest can handle UFO in. */
-#define VIRTIO_NET_F_HOST_TSO4  11      /* Host can handle TSOv4 in. */
-#define VIRTIO_NET_F_HOST_TSO6  12      /* Host can handle TSOv6 in. */
-#define VIRTIO_NET_F_HOST_ECN   13      /* Host can handle TSO[6] w/ ECN in. */
-#define VIRTIO_NET_F_HOST_UFO   14      /* Host can handle UFO in. */
-#define VIRTIO_NET_F_MRG_RXBUF  15      /* Host can merge receive buffers. */
-#define VIRTIO_NET_F_STATUS     16      /* virtio_net_config.status available */
-#define VIRTIO_NET_F_CTRL_VQ    17      /* Control channel available */
-#define VIRTIO_NET_F_CTRL_RX    18      /* Control channel RX mode support */
-#define VIRTIO_NET_F_CTRL_VLAN  19      /* Control channel VLAN filtering */
-#define VIRTIO_NET_F_CTRL_RX_EXTRA 20   /* Extra RX mode control support */
-#define VIRTIO_NET_F_GUEST_ANNOUNCE 21  /* Guest can announce itself */
-#define VIRTIO_NET_F_MQ         22      /* Device supports Receive Flow
-                                         * Steering */
-
-#define VIRTIO_NET_F_CTRL_MAC_ADDR   23 /* Set MAC address */
-
-#define VIRTIO_NET_S_LINK_UP    1       /* Link is up */
-#define VIRTIO_NET_S_ANNOUNCE   2       /* Announcement is needed */
 
 #define TX_TIMER_INTERVAL 150000 /* 150 us */
 
@@ -77,72 +43,6 @@ typedef struct virtio_net_conf
 /* Maximum packet size we can receive from tap device: header + 64k */
 #define VIRTIO_NET_MAX_BUFSIZE (sizeof(struct virtio_net_hdr) + (64 << 10))
 
-struct virtio_net_config
-{
-    /* The config defining mac address ($ETH_ALEN bytes) */
-    uint8_t mac[ETH_ALEN];
-    /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
-    uint16_t status;
-    /* Max virtqueue pairs supported by the device */
-    uint16_t max_virtqueue_pairs;
-} QEMU_PACKED;
-
-/*
- * Control virtqueue data structures
- *
- * The control virtqueue expects a header in the first sg entry
- * and an ack/status response in the last entry.  Data for the
- * command goes in between.
- */
-struct virtio_net_ctrl_hdr {
-    uint8_t class;
-    uint8_t cmd;
-};
-
-typedef uint8_t virtio_net_ctrl_ack;
-
-#define VIRTIO_NET_OK     0
-#define VIRTIO_NET_ERR    1
-
-/*
- * Control the RX mode, ie. promisucous, allmulti, etc...
- * All commands require an "out" sg entry containing a 1 byte
- * state value, zero = disable, non-zero = enable.  Commands
- * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature.
- * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA.
- */
-#define VIRTIO_NET_CTRL_RX    0
- #define VIRTIO_NET_CTRL_RX_PROMISC      0
- #define VIRTIO_NET_CTRL_RX_ALLMULTI     1
- #define VIRTIO_NET_CTRL_RX_ALLUNI       2
- #define VIRTIO_NET_CTRL_RX_NOMULTI      3
- #define VIRTIO_NET_CTRL_RX_NOUNI        4
- #define VIRTIO_NET_CTRL_RX_NOBCAST      5
-
-/*
- * Control the MAC
- *
- * The MAC filter table is managed by the hypervisor, the guest should
- * assume the size is infinite.  Filtering should be considered
- * non-perfect, ie. based on hypervisor resources, the guest may
- * received packets from sources not specified in the filter list.
- *
- * In addition to the class/cmd header, the TABLE_SET command requires
- * two out scatterlists.  Each contains a 4 byte count of entries followed
- * by a concatenated byte stream of the ETH_ALEN MAC addresses.  The
- * first sg list contains unicast addresses, the second is for multicast.
- * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature
- * is available.
- *
- * The ADDR_SET command requests one out scatterlist, it contains a
- * 6 bytes MAC address. This functionality is present if the
- * VIRTIO_NET_F_CTRL_MAC_ADDR feature is available.
- */
-struct virtio_net_ctrl_mac {
-    uint32_t entries;
-    uint8_t macs[][ETH_ALEN];
-};
-
 typedef struct VirtIONetQueue {
     VirtQueue *rx_vq;
     VirtQueue *tx_vq;
@@ -199,55 +99,6 @@ typedef struct VirtIONet {
     int announce_counter;
 } VirtIONet;
 
-#define VIRTIO_NET_CTRL_MAC    1
- #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0
- #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
-
-/*
- * Control VLAN filtering
- *
- * The VLAN filter table is controlled via a simple ADD/DEL interface.
- * VLAN IDs not added may be filterd by the hypervisor.  Del is the
- * opposite of add.  Both commands expect an out entry containing a 2
- * byte VLAN ID.  VLAN filterting is available with the
- * VIRTIO_NET_F_CTRL_VLAN feature bit.
- */
-#define VIRTIO_NET_CTRL_VLAN       2
- #define VIRTIO_NET_CTRL_VLAN_ADD             0
- #define VIRTIO_NET_CTRL_VLAN_DEL             1
-
-/*
- * Control link announce acknowledgement
- *
- * VIRTIO_NET_S_ANNOUNCE bit in the status field requests link announcement from
- * guest driver. The driver is notified by config space change interrupt.  The
- * command VIRTIO_NET_CTRL_ANNOUNCE_ACK is used to indicate that the driver has
- * received the notification. It makes the device clear the bit
- * VIRTIO_NET_S_ANNOUNCE in the status field.
- */
-#define VIRTIO_NET_CTRL_ANNOUNCE       3
- #define VIRTIO_NET_CTRL_ANNOUNCE_ACK         0
-
-/*
- * Control Multiqueue
- *
- * The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET
- * enables multiqueue, specifying the number of the transmit and
- * receive queues that will be used. After the command is consumed and acked by
- * the device, the device will not steer new packets on receive virtqueues
- * other than specified nor read from transmit virtqueues other than specified.
- * Accordingly, driver should not transmit new packets  on virtqueues other than
- * specified.
- */
-struct virtio_net_ctrl_mq {
-    uint16_t virtqueue_pairs;
-};
-
-#define VIRTIO_NET_CTRL_MQ   4
- #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET        0
- #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN        1
- #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000
-
 /*
  * Control network offloads
  *
diff --git a/include/net/tap.h b/include/net/tap.h
index 6daeb42..5da4edc 100644
--- a/include/net/tap.h
+++ b/include/net/tap.h
@@ -28,6 +28,7 @@
 
 #include "qemu-common.h"
 #include "qapi-types.h"
+#include "standard-headers/linux/virtio_net.h"
 
 int tap_enable(NetClientState *nc);
 int tap_disable(NetClientState *nc);
@@ -37,27 +38,4 @@ int tap_get_fd(NetClientState *nc);
 struct vhost_net;
 struct vhost_net *tap_get_vhost_net(NetClientState *nc);
 
-struct virtio_net_hdr
-{
-#define VIRTIO_NET_HDR_F_NEEDS_CSUM     1       // Use csum_start, csum_offset
-#define VIRTIO_NET_HDR_F_DATA_VALID    2       // Csum is valid
-    uint8_t flags;
-#define VIRTIO_NET_HDR_GSO_NONE         0       // Not a GSO frame
-#define VIRTIO_NET_HDR_GSO_TCPV4        1       // GSO frame, IPv4 TCP (TSO)
-#define VIRTIO_NET_HDR_GSO_UDP          3       // GSO frame, IPv4 UDP (UFO)
-#define VIRTIO_NET_HDR_GSO_TCPV6        4       // GSO frame, IPv6 TCP
-#define VIRTIO_NET_HDR_GSO_ECN          0x80    // TCP has ECN set
-    uint8_t gso_type;
-    uint16_t hdr_len;
-    uint16_t gso_size;
-    uint16_t csum_start;
-    uint16_t csum_offset;
-};
-
-struct virtio_net_hdr_mrg_rxbuf
-{
-    struct virtio_net_hdr hdr;
-    uint16_t num_buffers;   /* Number of merged rx buffers */
-};
-
 #endif /* QEMU_NET_TAP_H */
-- 
MST

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

* [Qemu-devel] [PATCH v3 09/17] virtio-rng: use standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (7 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 08/17] virtio-net, tap: use standard-headers Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-18  9:32   ` Thomas Huth
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 10/17] virtio-scsi: " Michael S. Tsirkin
                   ` (7 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Amit Shah,
	Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun

Drop duplicated code.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/virtio-rng.h | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/include/hw/virtio/virtio-rng.h b/include/hw/virtio/virtio-rng.h
index 14e85a5..7702ff4 100644
--- a/include/hw/virtio/virtio-rng.h
+++ b/include/hw/virtio/virtio-rng.h
@@ -14,6 +14,7 @@
 
 #include "sysemu/rng.h"
 #include "sysemu/rng-random.h"
+#include "standard-headers/linux/virtio_rng.h"
 
 #define TYPE_VIRTIO_RNG "virtio-rng-device"
 #define VIRTIO_RNG(obj) \
@@ -21,9 +22,6 @@
 #define VIRTIO_RNG_GET_PARENT_CLASS(obj) \
         OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_RNG)
 
-/* The Virtio ID for the virtio rng device */
-#define VIRTIO_ID_RNG    4
-
 struct VirtIORNGConf {
     RngBackend *rng;
     uint64_t max_bytes;
-- 
MST

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

* [Qemu-devel] [PATCH v3 10/17] virtio-scsi: use standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (8 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 09/17] virtio-rng: " Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-17 14:13   ` Paolo Bonzini
  2015-03-11 10:54   ` Nikunj A Dadhania
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers Michael S. Tsirkin
                   ` (6 subsequent siblings)
  16 siblings, 2 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Paolo Bonzini, Cornelia Huck, Chen, Tiejun, Anthony Liguori

Drop duplicated code.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/virtio-scsi.h | 120 +++-------------------------------------
 hw/scsi/virtio-scsi.c           |   1 +
 2 files changed, 10 insertions(+), 111 deletions(-)

diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
index bf17cc9..864070d 100644
--- a/include/hw/virtio/virtio-scsi.h
+++ b/include/hw/virtio/virtio-scsi.h
@@ -14,6 +14,7 @@
 #ifndef _QEMU_VIRTIO_SCSI_H
 #define _QEMU_VIRTIO_SCSI_H
 
+#include "standard-headers/linux/virtio_scsi.h"
 #include "hw/virtio/virtio.h"
 #include "hw/pci/pci.h"
 #include "hw/scsi/scsi.h"
@@ -28,15 +29,6 @@
 #define VIRTIO_SCSI(obj) \
         OBJECT_CHECK(VirtIOSCSI, (obj), TYPE_VIRTIO_SCSI)
 
-
-/* The ID for virtio_scsi */
-#define VIRTIO_ID_SCSI  8
-
-/* Feature Bits */
-#define VIRTIO_SCSI_F_INOUT                    0
-#define VIRTIO_SCSI_F_HOTPLUG                  1
-#define VIRTIO_SCSI_F_CHANGE                   2
-
 #define VIRTIO_SCSI_VQ_SIZE     128
 #define VIRTIO_SCSI_CDB_SIZE    32
 #define VIRTIO_SCSI_SENSE_SIZE  96
@@ -44,108 +36,14 @@
 #define VIRTIO_SCSI_MAX_TARGET  255
 #define VIRTIO_SCSI_MAX_LUN     16383
 
-/* Response codes */
-#define VIRTIO_SCSI_S_OK                       0
-#define VIRTIO_SCSI_S_OVERRUN                  1
-#define VIRTIO_SCSI_S_ABORTED                  2
-#define VIRTIO_SCSI_S_BAD_TARGET               3
-#define VIRTIO_SCSI_S_RESET                    4
-#define VIRTIO_SCSI_S_BUSY                     5
-#define VIRTIO_SCSI_S_TRANSPORT_FAILURE        6
-#define VIRTIO_SCSI_S_TARGET_FAILURE           7
-#define VIRTIO_SCSI_S_NEXUS_FAILURE            8
-#define VIRTIO_SCSI_S_FAILURE                  9
-#define VIRTIO_SCSI_S_FUNCTION_SUCCEEDED       10
-#define VIRTIO_SCSI_S_FUNCTION_REJECTED        11
-#define VIRTIO_SCSI_S_INCORRECT_LUN            12
-
-/* Controlq type codes.  */
-#define VIRTIO_SCSI_T_TMF                      0
-#define VIRTIO_SCSI_T_AN_QUERY                 1
-#define VIRTIO_SCSI_T_AN_SUBSCRIBE             2
-
-/* Valid TMF subtypes.  */
-#define VIRTIO_SCSI_T_TMF_ABORT_TASK           0
-#define VIRTIO_SCSI_T_TMF_ABORT_TASK_SET       1
-#define VIRTIO_SCSI_T_TMF_CLEAR_ACA            2
-#define VIRTIO_SCSI_T_TMF_CLEAR_TASK_SET       3
-#define VIRTIO_SCSI_T_TMF_I_T_NEXUS_RESET      4
-#define VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET   5
-#define VIRTIO_SCSI_T_TMF_QUERY_TASK           6
-#define VIRTIO_SCSI_T_TMF_QUERY_TASK_SET       7
-
-/* Events.  */
-#define VIRTIO_SCSI_T_EVENTS_MISSED            0x80000000
-#define VIRTIO_SCSI_T_NO_EVENT                 0
-#define VIRTIO_SCSI_T_TRANSPORT_RESET          1
-#define VIRTIO_SCSI_T_ASYNC_NOTIFY             2
-#define VIRTIO_SCSI_T_PARAM_CHANGE             3
-
-/* Reasons for transport reset event */
-#define VIRTIO_SCSI_EVT_RESET_HARD             0
-#define VIRTIO_SCSI_EVT_RESET_RESCAN           1
-#define VIRTIO_SCSI_EVT_RESET_REMOVED          2
-
-/* SCSI command request, followed by CDB and data-out */
-typedef struct {
-    uint8_t lun[8];              /* Logical Unit Number */
-    uint64_t tag;                /* Command identifier */
-    uint8_t task_attr;           /* Task attribute */
-    uint8_t prio;
-    uint8_t crn;
-} QEMU_PACKED VirtIOSCSICmdReq;
-
-/* Response, followed by sense data and data-in */
-typedef struct {
-    uint32_t sense_len;          /* Sense data length */
-    uint32_t resid;              /* Residual bytes in data buffer */
-    uint16_t status_qualifier;   /* Status qualifier */
-    uint8_t status;              /* Command completion status */
-    uint8_t response;            /* Response values */
-} QEMU_PACKED VirtIOSCSICmdResp;
-
-/* Task Management Request */
-typedef struct {
-    uint32_t type;
-    uint32_t subtype;
-    uint8_t lun[8];
-    uint64_t tag;
-} QEMU_PACKED VirtIOSCSICtrlTMFReq;
-
-typedef struct {
-    uint8_t response;
-} QEMU_PACKED VirtIOSCSICtrlTMFResp;
-
-/* Asynchronous notification query/subscription */
-typedef struct {
-    uint32_t type;
-    uint8_t lun[8];
-    uint32_t event_requested;
-} QEMU_PACKED VirtIOSCSICtrlANReq;
-
-typedef struct {
-    uint32_t event_actual;
-    uint8_t response;
-} QEMU_PACKED VirtIOSCSICtrlANResp;
-
-typedef struct {
-    uint32_t event;
-    uint8_t lun[8];
-    uint32_t reason;
-} QEMU_PACKED VirtIOSCSIEvent;
-
-typedef struct {
-    uint32_t num_queues;
-    uint32_t seg_max;
-    uint32_t max_sectors;
-    uint32_t cmd_per_lun;
-    uint32_t event_info_size;
-    uint32_t sense_size;
-    uint32_t cdb_size;
-    uint16_t max_channel;
-    uint16_t max_target;
-    uint32_t max_lun;
-} QEMU_PACKED VirtIOSCSIConfig;
+typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq;
+typedef struct virtio_scsi_cmd_resp VirtIOSCSICmdResp;
+typedef struct virtio_scsi_ctrl_tmf_req VirtIOSCSICtrlTMFReq;
+typedef struct virtio_scsi_ctrl_tmf_resp VirtIOSCSICtrlTMFResp;
+typedef struct virtio_scsi_ctrl_an_req VirtIOSCSICtrlANReq;
+typedef struct virtio_scsi_ctrl_an_resp VirtIOSCSICtrlANResp;
+typedef struct virtio_scsi_event VirtIOSCSIEvent;
+typedef struct virtio_scsi_config VirtIOSCSIConfig;
 
 struct VirtIOSCSIConf {
     uint32_t num_queues;
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
index 9e2c718..d18654e 100644
--- a/hw/scsi/virtio-scsi.c
+++ b/hw/scsi/virtio-scsi.c
@@ -13,6 +13,7 @@
  *
  */
 
+#include "standard-headers/linux/virtio_ids.h"
 #include "hw/virtio/virtio-scsi.h"
 #include "qemu/error-report.h"
 #include "qemu/iov.h"
-- 
MST

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

* [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (9 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 10/17] virtio-scsi: " Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-18 14:34   ` Thomas Huth
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 12/17] update-linux-headers: use standard-headers Michael S. Tsirkin
                   ` (5 subsequent siblings)
  16 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Amit Shah,
	Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun, Anthony Liguori

Drop duplicate code.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/virtio-serial.h | 40 +--------------------------------------
 hw/char/virtio-serial-bus.c       |  1 +
 2 files changed, 2 insertions(+), 39 deletions(-)

diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-serial.h
index 11af978..ccf8459 100644
--- a/include/hw/virtio/virtio-serial.h
+++ b/include/hw/virtio/virtio-serial.h
@@ -15,53 +15,15 @@
 #ifndef _QEMU_VIRTIO_SERIAL_H
 #define _QEMU_VIRTIO_SERIAL_H
 
+#include "standard-headers/linux/virtio_console.h"
 #include "hw/qdev.h"
 #include "hw/virtio/virtio.h"
 
-/* == Interface shared between the guest kernel and qemu == */
-
-/* The Virtio ID for virtio console / serial ports */
-#define VIRTIO_ID_CONSOLE		3
-
-/* Features supported */
-#define VIRTIO_CONSOLE_F_MULTIPORT	1
-
-#define VIRTIO_CONSOLE_BAD_ID           (~(uint32_t)0)
-
-struct virtio_console_config {
-    /*
-     * These two fields are used by VIRTIO_CONSOLE_F_SIZE which
-     * isn't implemented here yet
-     */
-    uint16_t cols;
-    uint16_t rows;
-
-    uint32_t max_nr_ports;
-} QEMU_PACKED;
-
-struct virtio_console_control {
-    uint32_t id;		/* Port number */
-    uint16_t event;		/* The kind of control event (see below) */
-    uint16_t value;		/* Extra information for the key */
-};
-
 struct virtio_serial_conf {
     /* Max. number of ports we can have for a virtio-serial device */
     uint32_t max_virtserial_ports;
 };
 
-/* Some events for the internal messages (control packets) */
-#define VIRTIO_CONSOLE_DEVICE_READY	0
-#define VIRTIO_CONSOLE_PORT_ADD		1
-#define VIRTIO_CONSOLE_PORT_REMOVE	2
-#define VIRTIO_CONSOLE_PORT_READY	3
-#define VIRTIO_CONSOLE_CONSOLE_PORT	4
-#define VIRTIO_CONSOLE_RESIZE		5
-#define VIRTIO_CONSOLE_PORT_OPEN	6
-#define VIRTIO_CONSOLE_PORT_NAME	7
-
-/* == In-qemu interface == */
-
 #define TYPE_VIRTIO_SERIAL_PORT "virtio-serial-port"
 #define VIRTIO_SERIAL_PORT(obj) \
      OBJECT_CHECK(VirtIOSerialPort, (obj), TYPE_VIRTIO_SERIAL_PORT)
diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
index 47fbb34..a2bac9b 100644
--- a/hw/char/virtio-serial-bus.c
+++ b/hw/char/virtio-serial-bus.c
@@ -18,6 +18,7 @@
  * GNU GPL, version 2 or (at your option) any later version.
  */
 
+#include "standard-headers/linux/virtio_ids.h"
 #include "qemu/iov.h"
 #include "monitor/monitor.h"
 #include "qemu/queue.h"
-- 
MST

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

* [Qemu-devel] [PATCH v3 12/17] update-linux-headers: use standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (10 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 13/17] linux-headers: " Michael S. Tsirkin
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

Drop the linux-specific virtio headers, use the copy from
standard-headers instead.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 scripts/update-linux-headers.sh | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
index 8926dec..5ab3914 100755
--- a/scripts/update-linux-headers.sh
+++ b/scripts/update-linux-headers.sh
@@ -91,7 +91,7 @@ done
 
 rm -rf "$output/linux-headers/linux"
 mkdir -p "$output/linux-headers/linux"
-for header in kvm.h kvm_para.h vfio.h vhost.h virtio_config.h virtio_ring.h \
+for header in kvm.h kvm_para.h vfio.h vhost.h \
               psci.h; do
     cp "$tmpdir/include/linux/$header" "$output/linux-headers/linux"
 done
@@ -106,6 +106,12 @@ else
     cp "$linux/COPYING" "$output/linux-headers"
 fi
 
+cat <<EOF >$output/linux-headers/linux/virtio_config.h
+#include "standard-headers/linux/virtio_config.h"
+EOF
+cat <<EOF >$output/linux-headers/linux/virtio_ring.h
+#include "standard-headers/linux/virtio_ring.h"
+EOF
 
 cp_virtio "$tmpdir/include/linux/" "$output/include/standard-headers/linux"
 
-- 
MST

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

* [Qemu-devel] [PATCH v3 13/17] linux-headers: use standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (11 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 12/17] update-linux-headers: use standard-headers Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 14/17] virtio-pci: use standard headers Michael S. Tsirkin
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

Drop duplicated code.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 linux-headers/linux/virtio_config.h |  58 +------------
 linux-headers/linux/virtio_ring.h   | 164 +-----------------------------------
 2 files changed, 2 insertions(+), 220 deletions(-)

diff --git a/linux-headers/linux/virtio_config.h b/linux-headers/linux/virtio_config.h
index 75dc20b..5590f7d 100644
--- a/linux-headers/linux/virtio_config.h
+++ b/linux-headers/linux/virtio_config.h
@@ -1,57 +1 @@
-#ifndef _LINUX_VIRTIO_CONFIG_H
-#define _LINUX_VIRTIO_CONFIG_H
-/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
- * anyone can use the definitions to implement compatible drivers/servers.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of IBM nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE. */
-
-/* Virtio devices use a standardized configuration space to define their
- * features and pass configuration information, but each implementation can
- * store and access that space differently. */
-#include <linux/types.h>
-
-/* Status byte for guest to report progress, and synchronize features. */
-/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */
-#define VIRTIO_CONFIG_S_ACKNOWLEDGE	1
-/* We have found a driver for the device. */
-#define VIRTIO_CONFIG_S_DRIVER		2
-/* Driver has used its parts of the config, and is happy */
-#define VIRTIO_CONFIG_S_DRIVER_OK	4
-/* We've given up on this device. */
-#define VIRTIO_CONFIG_S_FAILED		0x80
-
-/* Some virtio feature bits (currently bits 28 through 31) are reserved for the
- * transport being used (eg. virtio_ring), the rest are per-device feature
- * bits. */
-#define VIRTIO_TRANSPORT_F_START	28
-#define VIRTIO_TRANSPORT_F_END		32
-
-/* Do we get callbacks when the ring is completely used, even if we've
- * suppressed them? */
-#define VIRTIO_F_NOTIFY_ON_EMPTY	24
-
-/* Can the device handle any descriptor layout? */
-#define VIRTIO_F_ANY_LAYOUT		27
-
-#endif /* _LINUX_VIRTIO_CONFIG_H */
+#include "standard-headers/linux/virtio_config.h"
diff --git a/linux-headers/linux/virtio_ring.h b/linux-headers/linux/virtio_ring.h
index 1b333e2..c6f0fb6 100644
--- a/linux-headers/linux/virtio_ring.h
+++ b/linux-headers/linux/virtio_ring.h
@@ -1,163 +1 @@
-#ifndef _LINUX_VIRTIO_RING_H
-#define _LINUX_VIRTIO_RING_H
-/* An interface for efficient virtio implementation, currently for use by KVM
- * and lguest, but hopefully others soon.  Do NOT change this since it will
- * break existing servers and clients.
- *
- * This header is BSD licensed so anyone can use the definitions to implement
- * compatible drivers/servers.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of IBM nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Copyright Rusty Russell IBM Corporation 2007. */
-#include <linux/types.h>
-
-/* This marks a buffer as continuing via the next field. */
-#define VRING_DESC_F_NEXT	1
-/* This marks a buffer as write-only (otherwise read-only). */
-#define VRING_DESC_F_WRITE	2
-/* This means the buffer contains a list of buffer descriptors. */
-#define VRING_DESC_F_INDIRECT	4
-
-/* The Host uses this in used->flags to advise the Guest: don't kick me when
- * you add a buffer.  It's unreliable, so it's simply an optimization.  Guest
- * will still kick if it's out of buffers. */
-#define VRING_USED_F_NO_NOTIFY	1
-/* The Guest uses this in avail->flags to advise the Host: don't interrupt me
- * when you consume a buffer.  It's unreliable, so it's simply an
- * optimization.  */
-#define VRING_AVAIL_F_NO_INTERRUPT	1
-
-/* We support indirect buffer descriptors */
-#define VIRTIO_RING_F_INDIRECT_DESC	28
-
-/* The Guest publishes the used index for which it expects an interrupt
- * at the end of the avail ring. Host should ignore the avail->flags field. */
-/* The Host publishes the avail index for which it expects a kick
- * at the end of the used ring. Guest should ignore the used->flags field. */
-#define VIRTIO_RING_F_EVENT_IDX		29
-
-/* Virtio ring descriptors: 16 bytes.  These can chain together via "next". */
-struct vring_desc {
-	/* Address (guest-physical). */
-	__u64 addr;
-	/* Length. */
-	__u32 len;
-	/* The flags as indicated above. */
-	__u16 flags;
-	/* We chain unused descriptors via this, too */
-	__u16 next;
-};
-
-struct vring_avail {
-	__u16 flags;
-	__u16 idx;
-	__u16 ring[];
-};
-
-/* u32 is used here for ids for padding reasons. */
-struct vring_used_elem {
-	/* Index of start of used descriptor chain. */
-	__u32 id;
-	/* Total length of the descriptor chain which was used (written to) */
-	__u32 len;
-};
-
-struct vring_used {
-	__u16 flags;
-	__u16 idx;
-	struct vring_used_elem ring[];
-};
-
-struct vring {
-	unsigned int num;
-
-	struct vring_desc *desc;
-
-	struct vring_avail *avail;
-
-	struct vring_used *used;
-};
-
-/* The standard layout for the ring is a continuous chunk of memory which looks
- * like this.  We assume num is a power of 2.
- *
- * struct vring
- * {
- *	// The actual descriptors (16 bytes each)
- *	struct vring_desc desc[num];
- *
- *	// A ring of available descriptor heads with free-running index.
- *	__u16 avail_flags;
- *	__u16 avail_idx;
- *	__u16 available[num];
- *	__u16 used_event_idx;
- *
- *	// Padding to the next align boundary.
- *	char pad[];
- *
- *	// A ring of used descriptor heads with free-running index.
- *	__u16 used_flags;
- *	__u16 used_idx;
- *	struct vring_used_elem used[num];
- *	__u16 avail_event_idx;
- * };
- */
-/* We publish the used event index at the end of the available ring, and vice
- * versa. They are at the end for backwards compatibility. */
-#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
-#define vring_avail_event(vr) (*(__u16 *)&(vr)->used->ring[(vr)->num])
-
-static __inline__ void vring_init(struct vring *vr, unsigned int num, void *p,
-			      unsigned long align)
-{
-	vr->num = num;
-	vr->desc = p;
-	vr->avail = p + num*sizeof(struct vring_desc);
-	vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__u16)
-		+ align-1) & ~(align - 1));
-}
-
-static __inline__ unsigned vring_size(unsigned int num, unsigned long align)
-{
-	return ((sizeof(struct vring_desc) * num + sizeof(__u16) * (3 + num)
-		 + align - 1) & ~(align - 1))
-		+ sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num;
-}
-
-/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
-/* Assuming a given event_idx value from the other size, if
- * we have just incremented index from old to new_idx,
- * should we trigger an event? */
-static __inline__ int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old)
-{
-	/* Note: Xen has similar logic for notification hold-off
-	 * in include/xen/interface/io/ring.h with req_event and req_prod
-	 * corresponding to event_idx + 1 and new_idx respectively.
-	 * Note also that req_event and req_prod in Xen start at 1,
-	 * event indexes in virtio start at 0. */
-	return (__u16)(new_idx - event_idx - 1) < (__u16)(new_idx - old);
-}
-
-#endif /* _LINUX_VIRTIO_RING_H */
+#include "standard-headers/linux/virtio_ring.h"
-- 
MST

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

* [Qemu-devel] [PATCH v3 14/17] virtio-pci: use standard headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (12 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 13/17] linux-headers: " Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 15/17] scripts: add arch specific standard-headers Michael S. Tsirkin
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun, Anthony Liguori

Drop duplicate code.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/virtio/virtio-pci.c | 54 +++++---------------------------------------------
 1 file changed, 5 insertions(+), 49 deletions(-)

diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index dde1d73..4b17ecb 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -17,6 +17,7 @@
 
 #include <inttypes.h>
 
+#include "standard-headers/linux/virtio_pci.h"
 #include "hw/virtio/virtio.h"
 #include "hw/virtio/virtio-blk.h"
 #include "hw/virtio/virtio-net.h"
@@ -35,56 +36,11 @@
 #include "hw/virtio/virtio-bus.h"
 #include "qapi/visitor.h"
 
-/* from Linux's linux/virtio_pci.h */
-
-/* A 32-bit r/o bitmask of the features supported by the host */
-#define VIRTIO_PCI_HOST_FEATURES        0
-
-/* A 32-bit r/w bitmask of features activated by the guest */
-#define VIRTIO_PCI_GUEST_FEATURES       4
-
-/* A 32-bit r/w PFN for the currently selected queue */
-#define VIRTIO_PCI_QUEUE_PFN            8
-
-/* A 16-bit r/o queue size for the currently selected queue */
-#define VIRTIO_PCI_QUEUE_NUM            12
-
-/* A 16-bit r/w queue selector */
-#define VIRTIO_PCI_QUEUE_SEL            14
-
-/* A 16-bit r/w queue notifier */
-#define VIRTIO_PCI_QUEUE_NOTIFY         16
-
-/* An 8-bit device status register.  */
-#define VIRTIO_PCI_STATUS               18
-
-/* An 8-bit r/o interrupt status register.  Reading the value will return the
- * current contents of the ISR and will also clear it.  This is effectively
- * a read-and-acknowledge. */
-#define VIRTIO_PCI_ISR                  19
-
-/* MSI-X registers: only enabled if MSI-X is enabled. */
-/* A 16-bit vector for configuration changes. */
-#define VIRTIO_MSI_CONFIG_VECTOR        20
-/* A 16-bit vector for selected queue notifications. */
-#define VIRTIO_MSI_QUEUE_VECTOR         22
-
-/* Config space size */
-#define VIRTIO_PCI_CONFIG_NOMSI         20
-#define VIRTIO_PCI_CONFIG_MSI           24
-#define VIRTIO_PCI_REGION_SIZE(dev)     (msix_present(dev) ? \
-                                         VIRTIO_PCI_CONFIG_MSI : \
-                                         VIRTIO_PCI_CONFIG_NOMSI)
+#define VIRTIO_PCI_REGION_SIZE(dev)     VIRTIO_PCI_CONFIG_OFF(msix_present(dev))
 
 /* The remaining space is defined by each driver as the per-driver
  * configuration space */
-#define VIRTIO_PCI_CONFIG(dev)          (msix_enabled(dev) ? \
-                                         VIRTIO_PCI_CONFIG_MSI : \
-                                         VIRTIO_PCI_CONFIG_NOMSI)
-
-/* How many bits to shift physical queue address written to QUEUE_PFN.
- * 12 is historical, and due to x86 page size. */
-#define VIRTIO_PCI_QUEUE_ADDR_SHIFT    12
+#define VIRTIO_PCI_CONFIG_SIZE(dev)     VIRTIO_PCI_CONFIG_OFF(msix_enabled(dev))
 
 static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size,
                                VirtIOPCIProxy *dev);
@@ -392,7 +348,7 @@ static uint64_t virtio_pci_config_read(void *opaque, hwaddr addr,
 {
     VirtIOPCIProxy *proxy = opaque;
     VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
-    uint32_t config = VIRTIO_PCI_CONFIG(&proxy->pci_dev);
+    uint32_t config = VIRTIO_PCI_CONFIG_SIZE(&proxy->pci_dev);
     uint64_t val = 0;
     if (addr < config) {
         return virtio_ioport_read(proxy, addr);
@@ -423,7 +379,7 @@ static void virtio_pci_config_write(void *opaque, hwaddr addr,
                                     uint64_t val, unsigned size)
 {
     VirtIOPCIProxy *proxy = opaque;
-    uint32_t config = VIRTIO_PCI_CONFIG(&proxy->pci_dev);
+    uint32_t config = VIRTIO_PCI_CONFIG_SIZE(&proxy->pci_dev);
     VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
     if (addr < config) {
         virtio_ioport_write(proxy, addr, val);
-- 
MST

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

* [Qemu-devel] [PATCH v3 15/17] scripts: add arch specific standard-headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (13 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 14/17] virtio-pci: use standard headers Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 16/17] standard-headers: add s390 virtio headers Michael S. Tsirkin
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 17/17] s390: use standard headers Michael S. Tsirkin
  16 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

Copy arch specific virtio headers.
ATM this applies to s390 only.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 scripts/update-linux-headers.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
index 5ab3914..9680e27 100755
--- a/scripts/update-linux-headers.sh
+++ b/scripts/update-linux-headers.sh
@@ -87,6 +87,8 @@ for arch in $ARCHLIST; do
     if [ $arch = powerpc ]; then
         cp "$tmpdir/include/asm/epapr_hcalls.h" "$output/linux-headers/asm-powerpc/"
     fi
+
+    cp_virtio "$tmpdir/include/asm" "$output/include/standard-headers/asm-$arch"
 done
 
 rm -rf "$output/linux-headers/linux"
-- 
MST

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

* [Qemu-devel] [PATCH v3 16/17] standard-headers: add s390 virtio headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (14 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 15/17] scripts: add arch specific standard-headers Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 17/17] s390: use standard headers Michael S. Tsirkin
  16 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/standard-headers/asm-s390/kvm_virtio.h | 64 ++++++++++++++++++++++++++
 include/standard-headers/asm-s390/virtio-ccw.h | 21 +++++++++
 2 files changed, 85 insertions(+)
 create mode 100644 include/standard-headers/asm-s390/kvm_virtio.h
 create mode 100644 include/standard-headers/asm-s390/virtio-ccw.h

diff --git a/include/standard-headers/asm-s390/kvm_virtio.h b/include/standard-headers/asm-s390/kvm_virtio.h
new file mode 100644
index 0000000..daad324
--- /dev/null
+++ b/include/standard-headers/asm-s390/kvm_virtio.h
@@ -0,0 +1,64 @@
+/*
+ * definition for virtio for kvm on s390
+ *
+ * Copyright IBM Corp. 2008
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License (version 2 only)
+ * as published by the Free Software Foundation.
+ *
+ *    Author(s): Christian Borntraeger <borntraeger@de.ibm.com>
+ */
+
+#ifndef __KVM_S390_VIRTIO_H
+#define __KVM_S390_VIRTIO_H
+
+#include "standard-headers/linux/types.h"
+
+struct kvm_device_desc {
+	/* The device type: console, network, disk etc.  Type 0 terminates. */
+	uint8_t type;
+	/* The number of virtqueues (first in config array) */
+	uint8_t num_vq;
+	/*
+	 * The number of bytes of feature bits.  Multiply by 2: one for host
+	 * features and one for guest acknowledgements.
+	 */
+	uint8_t feature_len;
+	/* The number of bytes of the config array after virtqueues. */
+	uint8_t config_len;
+	/* A status byte, written by the Guest. */
+	uint8_t status;
+	uint8_t config[0];
+};
+
+/*
+ * This is how we expect the device configuration field for a virtqueue
+ * to be laid out in config space.
+ */
+struct kvm_vqconfig {
+	/* The token returned with an interrupt. Set by the guest */
+	uint64_t token;
+	/* The address of the virtio ring */
+	uint64_t address;
+	/* The number of entries in the virtio_ring */
+	uint16_t num;
+
+};
+
+#define KVM_S390_VIRTIO_NOTIFY		0
+#define KVM_S390_VIRTIO_RESET		1
+#define KVM_S390_VIRTIO_SET_STATUS	2
+
+/* The alignment to use between consumer and producer parts of vring.
+ * This is pagesize for historical reasons. */
+#define KVM_S390_VIRTIO_RING_ALIGN	4096
+
+
+/* These values are supposed to be in ext_params on an interrupt */
+#define VIRTIO_PARAM_MASK		0xff
+#define VIRTIO_PARAM_VRING_INTERRUPT	0x0
+#define VIRTIO_PARAM_CONFIG_CHANGED	0x1
+#define VIRTIO_PARAM_DEV_ADD		0x2
+
+#endif
diff --git a/include/standard-headers/asm-s390/virtio-ccw.h b/include/standard-headers/asm-s390/virtio-ccw.h
new file mode 100644
index 0000000..a9a4ebf
--- /dev/null
+++ b/include/standard-headers/asm-s390/virtio-ccw.h
@@ -0,0 +1,21 @@
+/*
+ * Definitions for virtio-ccw devices.
+ *
+ * Copyright IBM Corp. 2013
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License (version 2 only)
+ * as published by the Free Software Foundation.
+ *
+ *  Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
+ */
+#ifndef __KVM_VIRTIO_CCW_H
+#define __KVM_VIRTIO_CCW_H
+
+/* Alignment of vring buffers. */
+#define KVM_VIRTIO_CCW_RING_ALIGN 4096
+
+/* Subcode for diagnose 500 (virtio hypercall). */
+#define KVM_S390_VIRTIO_CCW_NOTIFY 3
+
+#endif
-- 
MST

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

* [Qemu-devel] [PATCH v3 17/17] s390: use standard headers
  2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
                   ` (15 preceding siblings ...)
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 16/17] standard-headers: add s390 virtio headers Michael S. Tsirkin
@ 2015-02-16 21:36 ` Michael S. Tsirkin
  16 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-16 21:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun, Richard Henderson

Drop duplicated macros in favor of values from
standard headers.

Tested-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/s390x/s390-virtio-bus.h | 36 +++++++++++++++++++-----------------
 hw/s390x/s390-virtio.h     |  7 ++-----
 2 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/hw/s390x/s390-virtio-bus.h b/hw/s390x/s390-virtio-bus.h
index ffd0df7..92aa9d0 100644
--- a/hw/s390x/s390-virtio-bus.h
+++ b/hw/s390x/s390-virtio-bus.h
@@ -19,6 +19,10 @@
 #ifndef HW_S390_VIRTIO_BUS_H
 #define HW_S390_VIRTIO_BUS_H 1
 
+#include <stddef.h>
+
+#include "standard-headers/asm-s390/kvm_virtio.h"
+#include "standard-headers/linux/virtio_ring.h"
 #include "hw/virtio/virtio-blk.h"
 #include "hw/virtio/virtio-net.h"
 #include "hw/virtio/virtio-rng.h"
@@ -29,28 +33,26 @@
 #include "hw/virtio/vhost-scsi.h"
 #endif
 
-#define VIRTIO_DEV_OFFS_TYPE		0	/* 8 bits */
-#define VIRTIO_DEV_OFFS_NUM_VQ		1	/* 8 bits */
-#define VIRTIO_DEV_OFFS_FEATURE_LEN	2	/* 8 bits */
-#define VIRTIO_DEV_OFFS_CONFIG_LEN	3	/* 8 bits */
-#define VIRTIO_DEV_OFFS_STATUS		4	/* 8 bits */
-#define VIRTIO_DEV_OFFS_CONFIG		5	/* dynamic */
+typedef struct kvm_device_desc KvmDeviceDesc;
+
+#define VIRTIO_DEV_OFFS_TYPE        offsetof(KvmDeviceDesc, type)
+#define VIRTIO_DEV_OFFS_NUM_VQ      offsetof(KvmDeviceDesc, num_vq)
+#define VIRTIO_DEV_OFFS_FEATURE_LEN offsetof(KvmDeviceDesc, feature_len)
+#define VIRTIO_DEV_OFFS_CONFIG_LEN  offsetof(KvmDeviceDesc, config_len)
+#define VIRTIO_DEV_OFFS_STATUS      offsetof(KvmDeviceDesc, status)
+#define VIRTIO_DEV_OFFS_CONFIG      offsetof(KvmDeviceDesc, config)
 
-#define VIRTIO_VQCONFIG_OFFS_TOKEN	0	/* 64 bits */
-#define VIRTIO_VQCONFIG_OFFS_ADDRESS	8	/* 64 bits */
-#define VIRTIO_VQCONFIG_OFFS_NUM	16	/* 16 bits */
-#define VIRTIO_VQCONFIG_LEN		24
+typedef struct kvm_vqconfig KvmVqConfig;
+#define VIRTIO_VQCONFIG_OFFS_TOKEN   offsetof(KvmVqConfig,token)    /* 64 bit */
+#define VIRTIO_VQCONFIG_OFFS_ADDRESS offsetof(KvmVqConfig, address) /* 64 bit */
+#define VIRTIO_VQCONFIG_OFFS_NUM     offsetof(KvmVqConfig, num)     /* 16 bit */
+#define VIRTIO_VQCONFIG_LEN          sizeof(KvmVqConfig)
 
 #define VIRTIO_RING_LEN			(TARGET_PAGE_SIZE * 3)
-#define VIRTIO_VRING_AVAIL_IDX_OFFS 2
-#define VIRTIO_VRING_USED_IDX_OFFS 2
+#define VIRTIO_VRING_AVAIL_IDX_OFFS offsetof(struct vring_avail, idx)
+#define VIRTIO_VRING_USED_IDX_OFFS  offsetof(struct vring_used, idx)
 #define S390_DEVICE_PAGES		512
 
-#define VIRTIO_PARAM_MASK               0xff
-#define VIRTIO_PARAM_VRING_INTERRUPT    0x0
-#define VIRTIO_PARAM_CONFIG_CHANGED     0x1
-#define VIRTIO_PARAM_DEV_ADD            0x2
-
 #define TYPE_VIRTIO_S390_DEVICE "virtio-s390-device"
 #define VIRTIO_S390_DEVICE(obj) \
      OBJECT_CHECK(VirtIOS390Device, (obj), TYPE_VIRTIO_S390_DEVICE)
diff --git a/hw/s390x/s390-virtio.h b/hw/s390x/s390-virtio.h
index 33847ae..f9d67a8 100644
--- a/hw/s390x/s390-virtio.h
+++ b/hw/s390x/s390-virtio.h
@@ -13,11 +13,8 @@
 #define HW_S390_VIRTIO_H 1
 
 #include "hw/nmi.h"
-
-#define KVM_S390_VIRTIO_NOTIFY          0
-#define KVM_S390_VIRTIO_RESET           1
-#define KVM_S390_VIRTIO_SET_STATUS      2
-#define KVM_S390_VIRTIO_CCW_NOTIFY      3
+#include "standard-headers/asm-s390/kvm_virtio.h"
+#include "standard-headers/asm-s390/virtio-ccw.h"
 
 typedef int (*s390_virtio_fn)(const uint64_t *args);
 void s390_register_virtio_hypercall(uint64_t code, s390_virtio_fn fn);
-- 
MST

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

* Re: [Qemu-devel] [PATCH v3 03/17] virtio: use standard virtio_ring.h
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 03/17] virtio: use standard virtio_ring.h Michael S. Tsirkin
@ 2015-02-17 12:44   ` Thomas Huth
  2015-02-18 14:59     ` Michael S. Tsirkin
  0 siblings, 1 reply; 36+ messages in thread
From: Thomas Huth @ 2015-02-17 12:44 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, qemu-devel, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

On Mon, 16 Feb 2015 22:35:40 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Switch to virtio_ring.h from standard headers.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/hw/virtio/dataplane/vring.h |   2 +-
>  include/hw/virtio/virtio_ring.h     | 167 ------------------------------------
>  hw/net/vhost_net.c                  |   2 +-
>  3 files changed, 2 insertions(+), 169 deletions(-)
>  delete mode 100644 include/hw/virtio/virtio_ring.h
> 
> diff --git a/include/hw/virtio/dataplane/vring.h b/include/hw/virtio/dataplane/vring.h
> index d3e086a..836d26a 100644
> --- a/include/hw/virtio/dataplane/vring.h
> +++ b/include/hw/virtio/dataplane/vring.h
> @@ -18,7 +18,7 @@
>  #define VRING_H
> 
>  #include "qemu-common.h"
> -#include "hw/virtio/virtio_ring.h"
> +#include "standard-headers/linux/virtio_ring.h"
>  #include "hw/virtio/virtio.h"
> 
>  typedef struct {
> diff --git a/include/hw/virtio/virtio_ring.h b/include/hw/virtio/virtio_ring.h
> deleted file mode 100644
> index 0b42e6e..0000000
> --- a/include/hw/virtio/virtio_ring.h
> +++ /dev/null
> @@ -1,167 +0,0 @@
> -#ifndef _LINUX_VIRTIO_RING_H
> -#define _LINUX_VIRTIO_RING_H
> -/*
> - * This file is copied from /usr/include/linux while converting __uNN types
> - * to uXX_t, __inline__ to inline, and tab to spaces.
> - * */

Hmmm, in the old header, the "__inline__" was replaced with
"inline" ... in the new header from patch 2, there's now "__inline__"
again. Was there a good reason for this replacement? If yes, your
update-linux-headers.sh patch should maybe replace the "__inline__"
into "inline", too?

Apart from that, the patch looks good to me.

 Thomas

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

* Re: [Qemu-devel] [PATCH v3 02/17] include: import virtio headers from linux 4.0
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 02/17] include: import virtio headers from linux 4.0 Michael S. Tsirkin
@ 2015-02-17 12:45   ` Thomas Huth
  2015-02-18 15:01     ` Michael S. Tsirkin
  0 siblings, 1 reply; 36+ messages in thread
From: Thomas Huth @ 2015-02-17 12:45 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, qemu-devel, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

On Mon, 16 Feb 2015 22:35:31 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Add files imported from linux-next (what will become linux 4.0) using
> scripts/update-linux-headers.sh
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/standard-headers/linux/if_ether.h       |   1 +
>  include/standard-headers/linux/types.h          |   2 +
>  include/standard-headers/linux/virtio_9p.h      |  44 +++++
>  include/standard-headers/linux/virtio_balloon.h |  59 ++++++
>  include/standard-headers/linux/virtio_blk.h     | 143 +++++++++++++++
>  include/standard-headers/linux/virtio_config.h  |  64 +++++++
>  include/standard-headers/linux/virtio_console.h |  78 ++++++++
>  include/standard-headers/linux/virtio_ids.h     |  43 +++++
>  include/standard-headers/linux/virtio_net.h     | 233 ++++++++++++++++++++++++
>  include/standard-headers/linux/virtio_pci.h     | 193 ++++++++++++++++++++
>  include/standard-headers/linux/virtio_ring.h    | 171 +++++++++++++++++
>  include/standard-headers/linux/virtio_rng.h     |   8 +
>  include/standard-headers/linux/virtio_scsi.h    | 164 +++++++++++++++++
>  include/standard-headers/linux/virtio_types.h   |  46 +++++
>  14 files changed, 1249 insertions(+)
>  create mode 100644 include/standard-headers/linux/if_ether.h
>  create mode 100644 include/standard-headers/linux/types.h
>  create mode 100644 include/standard-headers/linux/virtio_9p.h
>  create mode 100644 include/standard-headers/linux/virtio_balloon.h
>  create mode 100644 include/standard-headers/linux/virtio_blk.h
>  create mode 100644 include/standard-headers/linux/virtio_config.h
>  create mode 100644 include/standard-headers/linux/virtio_console.h
>  create mode 100644 include/standard-headers/linux/virtio_ids.h
>  create mode 100644 include/standard-headers/linux/virtio_net.h
>  create mode 100644 include/standard-headers/linux/virtio_pci.h
>  create mode 100644 include/standard-headers/linux/virtio_ring.h
>  create mode 100644 include/standard-headers/linux/virtio_rng.h
>  create mode 100644 include/standard-headers/linux/virtio_scsi.h
>  create mode 100644 include/standard-headers/linux/virtio_types.h
> 
> diff --git a/include/standard-headers/linux/if_ether.h b/include/standard-headers/linux/if_ether.h
> new file mode 100644
> index 0000000..91cf735
> --- /dev/null
> +++ b/include/standard-headers/linux/if_ether.h
> @@ -0,0 +1 @@
> +#define ETH_ALEN    6
> diff --git a/include/standard-headers/linux/types.h b/include/standard-headers/linux/types.h
> new file mode 100644
> index 0000000..7d42ac6
> --- /dev/null
> +++ b/include/standard-headers/linux/types.h
> @@ -0,0 +1,2 @@
> +#include <inttypes.h>

That should be <stdint.h> now, shouldn't it?

 Thomas

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

* Re: [Qemu-devel] [PATCH v3 04/17] virtio: use standard-headers
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 04/17] virtio: use standard-headers Michael S. Tsirkin
@ 2015-02-17 13:16   ` Thomas Huth
  0 siblings, 0 replies; 36+ messages in thread
From: Thomas Huth @ 2015-02-17 13:16 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, Anthony Liguori, qemu-devel, Alexander Graf,
	Aneesh Kumar K.V, Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun

On Mon, 16 Feb 2015 22:35:46 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Drop a bunch of code duplicated from virtio_config.h and virtio_ring.h.
> This makes us rename event index accessors which conflict,
> as reusing the ones from virtio_ring.h isn't trivial.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  hw/9pfs/virtio-9p.h        |  1 +
>  include/hw/virtio/virtio.h | 48 ++--------------------------------------------
>  hw/virtio/virtio.c         | 23 +++++-----------------
>  3 files changed, 8 insertions(+), 64 deletions(-)
> 
> diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h
> index 2c3603a..0776424 100644
> --- a/hw/9pfs/virtio-9p.h
> +++ b/hw/9pfs/virtio-9p.h
> @@ -8,6 +8,7 @@
>  #include <sys/resource.h>
>  #include <glib.h>
>  #include "hw/virtio/virtio.h"
> +#include "hw/virtio/virtio-9p.h"
>  #include "fsdev/file-op-9p.h"
>  #include "fsdev/virtio-9p-marshal.h"
>  #include "qemu/thread.h"
> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index f24997d..d1b416b 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -19,56 +19,12 @@
>  #include "hw/qdev.h"
>  #include "sysemu/sysemu.h"
>  #include "qemu/event_notifier.h"
> -#ifdef CONFIG_VIRTFS
> -#include "hw/virtio/virtio-9p.h"
> -#endif
> +#include "standard-headers/linux/virtio_config.h"
> +#include "standard-headers/linux/virtio_ring.h"
> 
> -/* from Linux's linux/virtio_config.h */
> -
> -/* Status byte for guest to report progress, and synchronize features. */
> -/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */
> -#define VIRTIO_CONFIG_S_ACKNOWLEDGE     1
> -/* We have found a driver for the device. */
> -#define VIRTIO_CONFIG_S_DRIVER          2
> -/* Driver has used its parts of the config, and is happy */
> -#define VIRTIO_CONFIG_S_DRIVER_OK       4
> -/* We've given up on this device. */
> -#define VIRTIO_CONFIG_S_FAILED          0x80
> -
> -/* Some virtio feature bits (currently bits 28 through 31) are reserved for the
> - * transport being used (eg. virtio_ring), the rest are per-device feature bits. */
> -#define VIRTIO_TRANSPORT_F_START        28
> -#define VIRTIO_TRANSPORT_F_END          32
> -
> -/* We notify when the ring is completely used, even if the guest is suppressing
> - * callbacks */
> -#define VIRTIO_F_NOTIFY_ON_EMPTY        24
> -/* Can the device handle any descriptor layout? */
> -#define VIRTIO_F_ANY_LAYOUT             27
> -/* We support indirect buffer descriptors */
> -#define VIRTIO_RING_F_INDIRECT_DESC     28
> -/* The Guest publishes the used index for which it expects an interrupt
> - * at the end of the avail ring. Host should ignore the avail->flags field. */
> -/* The Host publishes the avail index for which it expects a kick
> - * at the end of the used ring. Guest should ignore the used->flags field. */
> -#define VIRTIO_RING_F_EVENT_IDX         29
>  /* A guest should never accept this.  It implies negotiation is broken. */
>  #define VIRTIO_F_BAD_FEATURE		30
> 
> -/* from Linux's linux/virtio_ring.h */
> -
> -/* This marks a buffer as continuing via the next field. */
> -#define VRING_DESC_F_NEXT       1
> -/* This marks a buffer as write-only (otherwise read-only). */
> -#define VRING_DESC_F_WRITE      2
> -/* This means the buffer contains a list of buffer descriptors. */
> -#define VRING_DESC_F_INDIRECT  4
> -
> -/* This means don't notify other side when buffer added. */
> -#define VRING_USED_F_NO_NOTIFY  1
> -/* This means don't interrupt guest when buffer consumed. */
> -#define VRING_AVAIL_F_NO_INTERRUPT      1
> -
>  struct VirtQueue;
> 
>  static inline hwaddr vring_align(hwaddr addr,
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index d735343..f783f31 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -155,7 +155,7 @@ static inline uint16_t vring_avail_ring(VirtQueue *vq, int i)
>      return virtio_lduw_phys(vq->vdev, pa);
>  }
> 
> -static inline uint16_t vring_used_event(VirtQueue *vq)
> +static inline uint16_t vring_get_used_event(VirtQueue *vq)
>  {
>      return vring_avail_ring(vq, vq->vring.num);
>  }
> @@ -204,7 +204,7 @@ static inline void vring_used_flags_unset_bit(VirtQueue *vq, int mask)
>      virtio_stw_phys(vdev, pa, virtio_lduw_phys(vdev, pa) & ~mask);
>  }
> 
> -static inline void vring_avail_event(VirtQueue *vq, uint16_t val)
> +static inline void vring_set_avail_event(VirtQueue *vq, uint16_t val)
>  {
>      hwaddr pa;
>      if (!vq->notification) {
> @@ -218,7 +218,7 @@ void virtio_queue_set_notification(VirtQueue *vq, int enable)
>  {
>      vq->notification = enable;
>      if (vq->vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) {
> -        vring_avail_event(vq, vring_avail_idx(vq));
> +        vring_set_avail_event(vq, vring_avail_idx(vq));
>      } else if (enable) {
>          vring_used_flags_unset_bit(vq, VRING_USED_F_NO_NOTIFY);
>      } else {
> @@ -469,7 +469,7 @@ int virtqueue_pop(VirtQueue *vq, VirtQueueElement *elem)
> 
>      i = head = virtqueue_get_head(vq, vq->last_avail_idx++);
>      if (vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) {
> -        vring_avail_event(vq, vq->last_avail_idx);
> +        vring_set_avail_event(vq, vq->last_avail_idx);
>      }
> 
>      if (vring_desc_flags(vdev, desc_pa, i) & VRING_DESC_F_INDIRECT) {
> @@ -819,19 +819,6 @@ void virtio_irq(VirtQueue *vq)
>      virtio_notify_vector(vq->vdev, vq->vector);
>  }
> 
> -/* Assuming a given event_idx value from the other size, if
> - * we have just incremented index from old to new_idx,
> - * should we trigger an event? */
> -static inline int vring_need_event(uint16_t event, uint16_t new, uint16_t old)
> -{
> -	/* Note: Xen has similar logic for notification hold-off
> -	 * in include/xen/interface/io/ring.h with req_event and req_prod
> -	 * corresponding to event_idx + 1 and new respectively.
> -	 * Note also that req_event and req_prod in Xen start at 1,
> -	 * event indexes in virtio start at 0. */
> -	return (uint16_t)(new - event - 1) < (uint16_t)(new - old);
> -}
> -
>  static bool vring_notify(VirtIODevice *vdev, VirtQueue *vq)
>  {
>      uint16_t old, new;
> @@ -852,7 +839,7 @@ static bool vring_notify(VirtIODevice *vdev, VirtQueue *vq)
>      vq->signalled_used_valid = true;
>      old = vq->signalled_used;
>      new = vq->signalled_used = vring_used_idx(vq);
> -    return !v || vring_need_event(vring_used_event(vq), new, old);
> +    return !v || vring_need_event(vring_get_used_event(vq), new, old);
>  }
> 
>  void virtio_notify(VirtIODevice *vdev, VirtQueue *vq)

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>

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

* Re: [Qemu-devel] [PATCH v3 05/17] virtio-balloon: use standard headers
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 05/17] virtio-balloon: use standard headers Michael S. Tsirkin
@ 2015-02-17 13:25   ` Thomas Huth
  0 siblings, 0 replies; 36+ messages in thread
From: Thomas Huth @ 2015-02-17 13:25 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, qemu-devel, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

On Mon, 16 Feb 2015 22:35:52 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Drop code duplicated from standard headers.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/hw/virtio/virtio-balloon.h | 35 ++---------------------------------
>  1 file changed, 2 insertions(+), 33 deletions(-)
> 
> diff --git a/include/hw/virtio/virtio-balloon.h b/include/hw/virtio/virtio-balloon.h
> index f863bfe..4ab8f54 100644
> --- a/include/hw/virtio/virtio-balloon.h
> +++ b/include/hw/virtio/virtio-balloon.h
> @@ -15,6 +15,7 @@
>  #ifndef _QEMU_VIRTIO_BALLOON_H
>  #define _QEMU_VIRTIO_BALLOON_H
> 
> +#include "standard-headers/linux/virtio_balloon.h"
>  #include "hw/virtio/virtio.h"
>  #include "hw/pci/pci.h"
> 
> @@ -22,39 +23,7 @@
>  #define VIRTIO_BALLOON(obj) \
>          OBJECT_CHECK(VirtIOBalloon, (obj), TYPE_VIRTIO_BALLOON)
> 
> -/* from Linux's linux/virtio_balloon.h */
> -
> -/* The ID for virtio_balloon */
> -#define VIRTIO_ID_BALLOON 5
> -
> -/* The feature bitmap for virtio balloon */
> -#define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */
> -#define VIRTIO_BALLOON_F_STATS_VQ 1       /* Memory stats virtqueue */
> -
> -/* Size of a PFN in the balloon interface. */
> -#define VIRTIO_BALLOON_PFN_SHIFT 12
> -
> -struct virtio_balloon_config
> -{
> -    /* Number of pages host wants Guest to give up. */
> -    uint32_t num_pages;
> -    /* Number of pages we've actually got in balloon. */
> -    uint32_t actual;
> -};
> -
> -/* Memory Statistics */
> -#define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
> -#define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */
> -#define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */
> -#define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */
> -#define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */
> -#define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
> -#define VIRTIO_BALLOON_S_NR       6
> -
> -typedef struct VirtIOBalloonStat {
> -    uint16_t tag;
> -    uint64_t val;
> -} QEMU_PACKED VirtIOBalloonStat;
> +typedef struct virtio_balloon_stat VirtIOBalloonStat;
> 
>  typedef struct VirtIOBalloon {
>      VirtIODevice parent_obj;

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>

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

* Re: [Qemu-devel] [PATCH v3 06/17] virtio-9p: use standard headers
  2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 06/17] virtio-9p: " Michael S. Tsirkin
@ 2015-02-17 13:42   ` Thomas Huth
  0 siblings, 0 replies; 36+ messages in thread
From: Thomas Huth @ 2015-02-17 13:42 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, Anthony Liguori, qemu-devel, Alexander Graf,
	Aneesh Kumar K.V, Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun

On Mon, 16 Feb 2015 22:35:57 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Drop code duplicated from standard headers.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  hw/9pfs/virtio-9p.h | 17 +----------------
>  1 file changed, 1 insertion(+), 16 deletions(-)
> 
> diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h
> index 0776424..58dafa9 100644
> --- a/hw/9pfs/virtio-9p.h
> +++ b/hw/9pfs/virtio-9p.h
> @@ -7,6 +7,7 @@
>  #include <utime.h>
>  #include <sys/resource.h>
>  #include <glib.h>
> +#include "standard-headers/linux/virtio_9p.h"
>  #include "hw/virtio/virtio.h"
>  #include "hw/virtio/virtio-9p.h"
>  #include "fsdev/file-op-9p.h"
> @@ -14,10 +15,6 @@
>  #include "qemu/thread.h"
>  #include "block/coroutine.h"
> 
> -/* The feature bitmap for virtio 9P */
> -/* The mount point is specified in a config variable */
> -#define VIRTIO_9P_MOUNT_TAG 0
> -
>  enum {
>      P9_TLERROR = 6,
>      P9_RLERROR,
> @@ -145,10 +142,6 @@ struct V9fsPDU
>   * 1) change user needs to set groups and stuff
>   */
> 
> -/* from Linux's linux/virtio_9p.h */
> -
> -/* The ID for virtio console */
> -#define VIRTIO_ID_9P    9
>  #define MAX_REQ         128
>  #define MAX_TAG_LEN     32
> 
> @@ -278,14 +271,6 @@ typedef struct V9fsWriteState {
>      int cnt;
>  } V9fsWriteState;
> 
> -struct virtio_9p_config
> -{
> -    /* number of characters in tag */
> -    uint16_t tag_len;
> -    /* Variable size tag name */
> -    uint8_t tag[0];
> -} QEMU_PACKED;
> -
>  typedef struct V9fsMkState {
>      V9fsPDU *pdu;
>      size_t offset;

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>

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

* Re: [Qemu-devel] [PATCH v3 10/17] virtio-scsi: use standard-headers
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 10/17] virtio-scsi: " Michael S. Tsirkin
@ 2015-02-17 14:13   ` Paolo Bonzini
  2015-03-11 10:54   ` Nikunj A Dadhania
  1 sibling, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2015-02-17 14:13 UTC (permalink / raw)
  To: Michael S. Tsirkin, qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun, Anthony Liguori



On 16/02/2015 22:36, Michael S. Tsirkin wrote:
> Drop duplicated code.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/hw/virtio/virtio-scsi.h | 120 +++-------------------------------------
>  hw/scsi/virtio-scsi.c           |   1 +
>  2 files changed, 10 insertions(+), 111 deletions(-)
> 
> diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
> index bf17cc9..864070d 100644
> --- a/include/hw/virtio/virtio-scsi.h
> +++ b/include/hw/virtio/virtio-scsi.h
> @@ -14,6 +14,7 @@
>  #ifndef _QEMU_VIRTIO_SCSI_H
>  #define _QEMU_VIRTIO_SCSI_H
>  
> +#include "standard-headers/linux/virtio_scsi.h"

Acked-by: Paolo Bonzini <pbonzini@redhat.com>

>  #include "hw/virtio/virtio.h"
>  #include "hw/pci/pci.h"
>  #include "hw/scsi/scsi.h"
> @@ -28,15 +29,6 @@
>  #define VIRTIO_SCSI(obj) \
>          OBJECT_CHECK(VirtIOSCSI, (obj), TYPE_VIRTIO_SCSI)
>  
> -
> -/* The ID for virtio_scsi */
> -#define VIRTIO_ID_SCSI  8
> -
> -/* Feature Bits */
> -#define VIRTIO_SCSI_F_INOUT                    0
> -#define VIRTIO_SCSI_F_HOTPLUG                  1
> -#define VIRTIO_SCSI_F_CHANGE                   2
> -
>  #define VIRTIO_SCSI_VQ_SIZE     128
>  #define VIRTIO_SCSI_CDB_SIZE    32
>  #define VIRTIO_SCSI_SENSE_SIZE  96
> @@ -44,108 +36,14 @@
>  #define VIRTIO_SCSI_MAX_TARGET  255
>  #define VIRTIO_SCSI_MAX_LUN     16383
>  
> -/* Response codes */
> -#define VIRTIO_SCSI_S_OK                       0
> -#define VIRTIO_SCSI_S_OVERRUN                  1
> -#define VIRTIO_SCSI_S_ABORTED                  2
> -#define VIRTIO_SCSI_S_BAD_TARGET               3
> -#define VIRTIO_SCSI_S_RESET                    4
> -#define VIRTIO_SCSI_S_BUSY                     5
> -#define VIRTIO_SCSI_S_TRANSPORT_FAILURE        6
> -#define VIRTIO_SCSI_S_TARGET_FAILURE           7
> -#define VIRTIO_SCSI_S_NEXUS_FAILURE            8
> -#define VIRTIO_SCSI_S_FAILURE                  9
> -#define VIRTIO_SCSI_S_FUNCTION_SUCCEEDED       10
> -#define VIRTIO_SCSI_S_FUNCTION_REJECTED        11
> -#define VIRTIO_SCSI_S_INCORRECT_LUN            12
> -
> -/* Controlq type codes.  */
> -#define VIRTIO_SCSI_T_TMF                      0
> -#define VIRTIO_SCSI_T_AN_QUERY                 1
> -#define VIRTIO_SCSI_T_AN_SUBSCRIBE             2
> -
> -/* Valid TMF subtypes.  */
> -#define VIRTIO_SCSI_T_TMF_ABORT_TASK           0
> -#define VIRTIO_SCSI_T_TMF_ABORT_TASK_SET       1
> -#define VIRTIO_SCSI_T_TMF_CLEAR_ACA            2
> -#define VIRTIO_SCSI_T_TMF_CLEAR_TASK_SET       3
> -#define VIRTIO_SCSI_T_TMF_I_T_NEXUS_RESET      4
> -#define VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET   5
> -#define VIRTIO_SCSI_T_TMF_QUERY_TASK           6
> -#define VIRTIO_SCSI_T_TMF_QUERY_TASK_SET       7
> -
> -/* Events.  */
> -#define VIRTIO_SCSI_T_EVENTS_MISSED            0x80000000
> -#define VIRTIO_SCSI_T_NO_EVENT                 0
> -#define VIRTIO_SCSI_T_TRANSPORT_RESET          1
> -#define VIRTIO_SCSI_T_ASYNC_NOTIFY             2
> -#define VIRTIO_SCSI_T_PARAM_CHANGE             3
> -
> -/* Reasons for transport reset event */
> -#define VIRTIO_SCSI_EVT_RESET_HARD             0
> -#define VIRTIO_SCSI_EVT_RESET_RESCAN           1
> -#define VIRTIO_SCSI_EVT_RESET_REMOVED          2
> -
> -/* SCSI command request, followed by CDB and data-out */
> -typedef struct {
> -    uint8_t lun[8];              /* Logical Unit Number */
> -    uint64_t tag;                /* Command identifier */
> -    uint8_t task_attr;           /* Task attribute */
> -    uint8_t prio;
> -    uint8_t crn;
> -} QEMU_PACKED VirtIOSCSICmdReq;
> -
> -/* Response, followed by sense data and data-in */
> -typedef struct {
> -    uint32_t sense_len;          /* Sense data length */
> -    uint32_t resid;              /* Residual bytes in data buffer */
> -    uint16_t status_qualifier;   /* Status qualifier */
> -    uint8_t status;              /* Command completion status */
> -    uint8_t response;            /* Response values */
> -} QEMU_PACKED VirtIOSCSICmdResp;
> -
> -/* Task Management Request */
> -typedef struct {
> -    uint32_t type;
> -    uint32_t subtype;
> -    uint8_t lun[8];
> -    uint64_t tag;
> -} QEMU_PACKED VirtIOSCSICtrlTMFReq;
> -
> -typedef struct {
> -    uint8_t response;
> -} QEMU_PACKED VirtIOSCSICtrlTMFResp;
> -
> -/* Asynchronous notification query/subscription */
> -typedef struct {
> -    uint32_t type;
> -    uint8_t lun[8];
> -    uint32_t event_requested;
> -} QEMU_PACKED VirtIOSCSICtrlANReq;
> -
> -typedef struct {
> -    uint32_t event_actual;
> -    uint8_t response;
> -} QEMU_PACKED VirtIOSCSICtrlANResp;
> -
> -typedef struct {
> -    uint32_t event;
> -    uint8_t lun[8];
> -    uint32_t reason;
> -} QEMU_PACKED VirtIOSCSIEvent;
> -
> -typedef struct {
> -    uint32_t num_queues;
> -    uint32_t seg_max;
> -    uint32_t max_sectors;
> -    uint32_t cmd_per_lun;
> -    uint32_t event_info_size;
> -    uint32_t sense_size;
> -    uint32_t cdb_size;
> -    uint16_t max_channel;
> -    uint16_t max_target;
> -    uint32_t max_lun;
> -} QEMU_PACKED VirtIOSCSIConfig;
> +typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq;
> +typedef struct virtio_scsi_cmd_resp VirtIOSCSICmdResp;
> +typedef struct virtio_scsi_ctrl_tmf_req VirtIOSCSICtrlTMFReq;
> +typedef struct virtio_scsi_ctrl_tmf_resp VirtIOSCSICtrlTMFResp;
> +typedef struct virtio_scsi_ctrl_an_req VirtIOSCSICtrlANReq;
> +typedef struct virtio_scsi_ctrl_an_resp VirtIOSCSICtrlANResp;
> +typedef struct virtio_scsi_event VirtIOSCSIEvent;
> +typedef struct virtio_scsi_config VirtIOSCSIConfig;
>  
>  struct VirtIOSCSIConf {
>      uint32_t num_queues;
> diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
> index 9e2c718..d18654e 100644
> --- a/hw/scsi/virtio-scsi.c
> +++ b/hw/scsi/virtio-scsi.c
> @@ -13,6 +13,7 @@
>   *
>   */
>  
> +#include "standard-headers/linux/virtio_ids.h"
>  #include "hw/virtio/virtio-scsi.h"
>  #include "qemu/error-report.h"
>  #include "qemu/iov.h"
> 

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

* Re: [Qemu-devel] [PATCH v3 07/17] virtio-blk: switch to standard-headers
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 07/17] virtio-blk: switch to standard-headers Michael S. Tsirkin
@ 2015-02-18  9:19   ` Thomas Huth
  0 siblings, 0 replies; 36+ messages in thread
From: Thomas Huth @ 2015-02-18  9:19 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Kevin Wolf, Peter Maydell, Anthony Liguori, qemu-devel,
	Alexander Graf, Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun

On Mon, 16 Feb 2015 22:36:03 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Drop duplicated code. Minor codechanges were required
> as geometry is a sub-structure now.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/hw/virtio/virtio-blk.h | 77 +-----------------------------------------
>  hw/block/virtio-blk.c          |  8 ++---
>  2 files changed, 5 insertions(+), 80 deletions(-)
> 
> diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
> index fc7d311..b3ffcd9 100644
> --- a/include/hw/virtio/virtio-blk.h
> +++ b/include/hw/virtio/virtio-blk.h
> @@ -14,6 +14,7 @@
>  #ifndef _QEMU_VIRTIO_BLK_H
>  #define _QEMU_VIRTIO_BLK_H
> 
> +#include "standard-headers/linux/virtio_blk.h"
>  #include "hw/virtio/virtio.h"
>  #include "hw/block/block.h"
>  #include "sysemu/iothread.h"
> @@ -23,88 +24,12 @@
>  #define VIRTIO_BLK(obj) \
>          OBJECT_CHECK(VirtIOBlock, (obj), TYPE_VIRTIO_BLK)
> 
> -/* from Linux's linux/virtio_blk.h */
> -
> -/* The ID for virtio_block */
> -#define VIRTIO_ID_BLOCK 2
> -
> -/* Feature bits */
> -#define VIRTIO_BLK_F_BARRIER    0       /* Does host support barriers? */
> -#define VIRTIO_BLK_F_SIZE_MAX   1       /* Indicates maximum segment size */
> -#define VIRTIO_BLK_F_SEG_MAX    2       /* Indicates maximum # of segments */
> -#define VIRTIO_BLK_F_GEOMETRY   4       /* Indicates support of legacy geometry */
> -#define VIRTIO_BLK_F_RO         5       /* Disk is read-only */
> -#define VIRTIO_BLK_F_BLK_SIZE   6       /* Block size of disk is available*/
> -#define VIRTIO_BLK_F_SCSI       7       /* Supports scsi command passthru */
> -/* #define VIRTIO_BLK_F_IDENTIFY   8       ATA IDENTIFY supported, DEPRECATED */
> -#define VIRTIO_BLK_F_WCE        9       /* write cache enabled */
> -#define VIRTIO_BLK_F_TOPOLOGY   10      /* Topology information is available */
> -#define VIRTIO_BLK_F_CONFIG_WCE 11      /* write cache configurable */
> -
> -#define VIRTIO_BLK_ID_BYTES     20      /* ID string length */
> -
> -struct virtio_blk_config
> -{
> -    uint64_t capacity;
> -    uint32_t size_max;
> -    uint32_t seg_max;
> -    uint16_t cylinders;
> -    uint8_t heads;
> -    uint8_t sectors;
> -    uint32_t blk_size;
> -    uint8_t physical_block_exp;
> -    uint8_t alignment_offset;
> -    uint16_t min_io_size;
> -    uint32_t opt_io_size;
> -    uint8_t wce;
> -} QEMU_PACKED;
> -
> -/* These two define direction. */
> -#define VIRTIO_BLK_T_IN         0
> -#define VIRTIO_BLK_T_OUT        1
> -
> -/* This bit says it's a scsi command, not an actual read or write. */
> -#define VIRTIO_BLK_T_SCSI_CMD   2
> -
> -/* Flush the volatile write cache */
> -#define VIRTIO_BLK_T_FLUSH      4
> -
> -/* return the device ID string */
> -#define VIRTIO_BLK_T_GET_ID     8
> -
> -/* Barrier before this op. */
> -#define VIRTIO_BLK_T_BARRIER    0x80000000
> -
> -/* This is the first element of the read scatter-gather list. */
> -struct virtio_blk_outhdr
> -{
> -    /* VIRTIO_BLK_T* */
> -    uint32_t type;
> -    /* io priority. */
> -    uint32_t ioprio;
> -    /* Sector (ie. 512 byte offset) */
> -    uint64_t sector;
> -};
> -
> -#define VIRTIO_BLK_S_OK         0
> -#define VIRTIO_BLK_S_IOERR      1
> -#define VIRTIO_BLK_S_UNSUPP     2
> -
>  /* This is the last element of the write scatter-gather list */
>  struct virtio_blk_inhdr
>  {
>      unsigned char status;
>  };
> 
> -/* SCSI pass-through header */
> -struct virtio_scsi_inhdr
> -{
> -    uint32_t errors;
> -    uint32_t data_len;
> -    uint32_t sense_len;
> -    uint32_t residual;
> -};
> -
>  struct VirtIOBlkConf
>  {
>      BlockConf conf;
> diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> index 1a8a176..6828f48 100644
> --- a/hw/block/virtio-blk.c
> +++ b/hw/block/virtio-blk.c
> @@ -667,11 +667,11 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
>      memset(&blkcfg, 0, sizeof(blkcfg));
>      virtio_stq_p(vdev, &blkcfg.capacity, capacity);
>      virtio_stl_p(vdev, &blkcfg.seg_max, 128 - 2);
> -    virtio_stw_p(vdev, &blkcfg.cylinders, conf->cyls);
> +    virtio_stw_p(vdev, &blkcfg.geometry.cylinders, conf->cyls);
>      virtio_stl_p(vdev, &blkcfg.blk_size, blk_size);
>      virtio_stw_p(vdev, &blkcfg.min_io_size, conf->min_io_size / blk_size);
>      virtio_stw_p(vdev, &blkcfg.opt_io_size, conf->opt_io_size / blk_size);
> -    blkcfg.heads = conf->heads;
> +    blkcfg.geometry.heads = conf->heads;
>      /*
>       * We must ensure that the block device capacity is a multiple of
>       * the logical block size. If that is not the case, let's use
> @@ -684,9 +684,9 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
>       * per track (cylinder).
>       */
>      if (blk_getlength(s->blk) /  conf->heads / conf->secs % blk_size) {
> -        blkcfg.sectors = conf->secs & ~s->sector_mask;
> +        blkcfg.geometry.sectors = conf->secs & ~s->sector_mask;
>      } else {
> -        blkcfg.sectors = conf->secs;
> +        blkcfg.geometry.sectors = conf->secs;
>      }
>      blkcfg.size_max = 0;
>      blkcfg.physical_block_exp = get_physical_block_exp(conf);

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>

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

* Re: [Qemu-devel] [PATCH v3 08/17] virtio-net, tap: use standard-headers
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 08/17] virtio-net, tap: use standard-headers Michael S. Tsirkin
@ 2015-02-18  9:30   ` Thomas Huth
  0 siblings, 0 replies; 36+ messages in thread
From: Thomas Huth @ 2015-02-18  9:30 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, Michael Roth, Juan Quintela, Jason Wang,
	qemu-devel, Vincenzo Maffione, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

On Mon, 16 Feb 2015 22:36:09 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Drop duplicated code.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/hw/virtio/virtio-net.h | 151 +----------------------------------------
>  include/net/tap.h              |  24 +------
>  2 files changed, 2 insertions(+), 173 deletions(-)
> 
> diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h
> index 6ceb5aa..4c2fe83 100644
> --- a/include/hw/virtio/virtio-net.h
> +++ b/include/hw/virtio/virtio-net.h
> @@ -14,49 +14,15 @@
>  #ifndef _QEMU_VIRTIO_NET_H
>  #define _QEMU_VIRTIO_NET_H
> 
> +#include "standard-headers/linux/virtio_net.h"
>  #include "hw/virtio/virtio.h"
> -#include "hw/pci/pci.h"
> 
>  #define TYPE_VIRTIO_NET "virtio-net-device"
>  #define VIRTIO_NET(obj) \
>          OBJECT_CHECK(VirtIONet, (obj), TYPE_VIRTIO_NET)
> 
> -#define ETH_ALEN    6
> -
> -/* from Linux's virtio_net.h */
> -
> -/* The ID for virtio_net */
> -#define VIRTIO_ID_NET   1
> -
> -/* The feature bitmap for virtio net */
> -#define VIRTIO_NET_F_CSUM       0       /* Host handles pkts w/ partial csum */
> -#define VIRTIO_NET_F_GUEST_CSUM 1       /* Guest handles pkts w/ partial csum */
>  #define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 /* Control channel offload
>                                           * configuration support */
> -#define VIRTIO_NET_F_MAC        5       /* Host has given MAC address. */
> -#define VIRTIO_NET_F_GSO        6       /* Host handles pkts w/ any GSO type */
> -#define VIRTIO_NET_F_GUEST_TSO4 7       /* Guest can handle TSOv4 in. */
> -#define VIRTIO_NET_F_GUEST_TSO6 8       /* Guest can handle TSOv6 in. */
> -#define VIRTIO_NET_F_GUEST_ECN  9       /* Guest can handle TSO[6] w/ ECN in. */
> -#define VIRTIO_NET_F_GUEST_UFO  10      /* Guest can handle UFO in. */
> -#define VIRTIO_NET_F_HOST_TSO4  11      /* Host can handle TSOv4 in. */
> -#define VIRTIO_NET_F_HOST_TSO6  12      /* Host can handle TSOv6 in. */
> -#define VIRTIO_NET_F_HOST_ECN   13      /* Host can handle TSO[6] w/ ECN in. */
> -#define VIRTIO_NET_F_HOST_UFO   14      /* Host can handle UFO in. */
> -#define VIRTIO_NET_F_MRG_RXBUF  15      /* Host can merge receive buffers. */
> -#define VIRTIO_NET_F_STATUS     16      /* virtio_net_config.status available */
> -#define VIRTIO_NET_F_CTRL_VQ    17      /* Control channel available */
> -#define VIRTIO_NET_F_CTRL_RX    18      /* Control channel RX mode support */
> -#define VIRTIO_NET_F_CTRL_VLAN  19      /* Control channel VLAN filtering */
> -#define VIRTIO_NET_F_CTRL_RX_EXTRA 20   /* Extra RX mode control support */
> -#define VIRTIO_NET_F_GUEST_ANNOUNCE 21  /* Guest can announce itself */
> -#define VIRTIO_NET_F_MQ         22      /* Device supports Receive Flow
> -                                         * Steering */
> -
> -#define VIRTIO_NET_F_CTRL_MAC_ADDR   23 /* Set MAC address */
> -
> -#define VIRTIO_NET_S_LINK_UP    1       /* Link is up */
> -#define VIRTIO_NET_S_ANNOUNCE   2       /* Announcement is needed */
> 
>  #define TX_TIMER_INTERVAL 150000 /* 150 us */
> 
> @@ -77,72 +43,6 @@ typedef struct virtio_net_conf
>  /* Maximum packet size we can receive from tap device: header + 64k */
>  #define VIRTIO_NET_MAX_BUFSIZE (sizeof(struct virtio_net_hdr) + (64 << 10))
> 
> -struct virtio_net_config
> -{
> -    /* The config defining mac address ($ETH_ALEN bytes) */
> -    uint8_t mac[ETH_ALEN];
> -    /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
> -    uint16_t status;
> -    /* Max virtqueue pairs supported by the device */
> -    uint16_t max_virtqueue_pairs;
> -} QEMU_PACKED;
> -
> -/*
> - * Control virtqueue data structures
> - *
> - * The control virtqueue expects a header in the first sg entry
> - * and an ack/status response in the last entry.  Data for the
> - * command goes in between.
> - */
> -struct virtio_net_ctrl_hdr {
> -    uint8_t class;
> -    uint8_t cmd;
> -};
> -
> -typedef uint8_t virtio_net_ctrl_ack;
> -
> -#define VIRTIO_NET_OK     0
> -#define VIRTIO_NET_ERR    1
> -
> -/*
> - * Control the RX mode, ie. promisucous, allmulti, etc...
> - * All commands require an "out" sg entry containing a 1 byte
> - * state value, zero = disable, non-zero = enable.  Commands
> - * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature.
> - * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA.
> - */
> -#define VIRTIO_NET_CTRL_RX    0
> - #define VIRTIO_NET_CTRL_RX_PROMISC      0
> - #define VIRTIO_NET_CTRL_RX_ALLMULTI     1
> - #define VIRTIO_NET_CTRL_RX_ALLUNI       2
> - #define VIRTIO_NET_CTRL_RX_NOMULTI      3
> - #define VIRTIO_NET_CTRL_RX_NOUNI        4
> - #define VIRTIO_NET_CTRL_RX_NOBCAST      5
> -
> -/*
> - * Control the MAC
> - *
> - * The MAC filter table is managed by the hypervisor, the guest should
> - * assume the size is infinite.  Filtering should be considered
> - * non-perfect, ie. based on hypervisor resources, the guest may
> - * received packets from sources not specified in the filter list.
> - *
> - * In addition to the class/cmd header, the TABLE_SET command requires
> - * two out scatterlists.  Each contains a 4 byte count of entries followed
> - * by a concatenated byte stream of the ETH_ALEN MAC addresses.  The
> - * first sg list contains unicast addresses, the second is for multicast.
> - * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature
> - * is available.
> - *
> - * The ADDR_SET command requests one out scatterlist, it contains a
> - * 6 bytes MAC address. This functionality is present if the
> - * VIRTIO_NET_F_CTRL_MAC_ADDR feature is available.
> - */
> -struct virtio_net_ctrl_mac {
> -    uint32_t entries;
> -    uint8_t macs[][ETH_ALEN];
> -};
> -
>  typedef struct VirtIONetQueue {
>      VirtQueue *rx_vq;
>      VirtQueue *tx_vq;
> @@ -199,55 +99,6 @@ typedef struct VirtIONet {
>      int announce_counter;
>  } VirtIONet;
> 
> -#define VIRTIO_NET_CTRL_MAC    1
> - #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0
> - #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
> -
> -/*
> - * Control VLAN filtering
> - *
> - * The VLAN filter table is controlled via a simple ADD/DEL interface.
> - * VLAN IDs not added may be filterd by the hypervisor.  Del is the
> - * opposite of add.  Both commands expect an out entry containing a 2
> - * byte VLAN ID.  VLAN filterting is available with the
> - * VIRTIO_NET_F_CTRL_VLAN feature bit.
> - */
> -#define VIRTIO_NET_CTRL_VLAN       2
> - #define VIRTIO_NET_CTRL_VLAN_ADD             0
> - #define VIRTIO_NET_CTRL_VLAN_DEL             1
> -
> -/*
> - * Control link announce acknowledgement
> - *
> - * VIRTIO_NET_S_ANNOUNCE bit in the status field requests link announcement from
> - * guest driver. The driver is notified by config space change interrupt.  The
> - * command VIRTIO_NET_CTRL_ANNOUNCE_ACK is used to indicate that the driver has
> - * received the notification. It makes the device clear the bit
> - * VIRTIO_NET_S_ANNOUNCE in the status field.
> - */
> -#define VIRTIO_NET_CTRL_ANNOUNCE       3
> - #define VIRTIO_NET_CTRL_ANNOUNCE_ACK         0
> -
> -/*
> - * Control Multiqueue
> - *
> - * The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET
> - * enables multiqueue, specifying the number of the transmit and
> - * receive queues that will be used. After the command is consumed and acked by
> - * the device, the device will not steer new packets on receive virtqueues
> - * other than specified nor read from transmit virtqueues other than specified.
> - * Accordingly, driver should not transmit new packets  on virtqueues other than
> - * specified.
> - */
> -struct virtio_net_ctrl_mq {
> -    uint16_t virtqueue_pairs;
> -};
> -
> -#define VIRTIO_NET_CTRL_MQ   4
> - #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET        0
> - #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN        1
> - #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX        0x8000
> -
>  /*
>   * Control network offloads
>   *
> diff --git a/include/net/tap.h b/include/net/tap.h
> index 6daeb42..5da4edc 100644
> --- a/include/net/tap.h
> +++ b/include/net/tap.h
> @@ -28,6 +28,7 @@
> 
>  #include "qemu-common.h"
>  #include "qapi-types.h"
> +#include "standard-headers/linux/virtio_net.h"
> 
>  int tap_enable(NetClientState *nc);
>  int tap_disable(NetClientState *nc);
> @@ -37,27 +38,4 @@ int tap_get_fd(NetClientState *nc);
>  struct vhost_net;
>  struct vhost_net *tap_get_vhost_net(NetClientState *nc);
> 
> -struct virtio_net_hdr
> -{
> -#define VIRTIO_NET_HDR_F_NEEDS_CSUM     1       // Use csum_start, csum_offset
> -#define VIRTIO_NET_HDR_F_DATA_VALID    2       // Csum is valid
> -    uint8_t flags;
> -#define VIRTIO_NET_HDR_GSO_NONE         0       // Not a GSO frame
> -#define VIRTIO_NET_HDR_GSO_TCPV4        1       // GSO frame, IPv4 TCP (TSO)
> -#define VIRTIO_NET_HDR_GSO_UDP          3       // GSO frame, IPv4 UDP (UFO)
> -#define VIRTIO_NET_HDR_GSO_TCPV6        4       // GSO frame, IPv6 TCP
> -#define VIRTIO_NET_HDR_GSO_ECN          0x80    // TCP has ECN set
> -    uint8_t gso_type;
> -    uint16_t hdr_len;
> -    uint16_t gso_size;
> -    uint16_t csum_start;
> -    uint16_t csum_offset;
> -};
> -
> -struct virtio_net_hdr_mrg_rxbuf
> -{
> -    struct virtio_net_hdr hdr;
> -    uint16_t num_buffers;   /* Number of merged rx buffers */
> -};
> -
>  #endif /* QEMU_NET_TAP_H */

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>

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

* Re: [Qemu-devel] [PATCH v3 09/17] virtio-rng: use standard-headers
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 09/17] virtio-rng: " Michael S. Tsirkin
@ 2015-02-18  9:32   ` Thomas Huth
  0 siblings, 0 replies; 36+ messages in thread
From: Thomas Huth @ 2015-02-18  9:32 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, qemu-devel, Alexander Graf, Cornelia Huck,
	Stefan Hajnoczi, Amit Shah, Chen, Tiejun

On Mon, 16 Feb 2015 22:36:15 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Drop duplicated code.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/hw/virtio/virtio-rng.h | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/include/hw/virtio/virtio-rng.h b/include/hw/virtio/virtio-rng.h
> index 14e85a5..7702ff4 100644
> --- a/include/hw/virtio/virtio-rng.h
> +++ b/include/hw/virtio/virtio-rng.h
> @@ -14,6 +14,7 @@
> 
>  #include "sysemu/rng.h"
>  #include "sysemu/rng-random.h"
> +#include "standard-headers/linux/virtio_rng.h"
> 
>  #define TYPE_VIRTIO_RNG "virtio-rng-device"
>  #define VIRTIO_RNG(obj) \
> @@ -21,9 +22,6 @@
>  #define VIRTIO_RNG_GET_PARENT_CLASS(obj) \
>          OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_RNG)
> 
> -/* The Virtio ID for the virtio rng device */
> -#define VIRTIO_ID_RNG    4
> -
>  struct VirtIORNGConf {
>      RngBackend *rng;
>      uint64_t max_bytes;

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>

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

* Re: [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers Michael S. Tsirkin
@ 2015-02-18 14:34   ` Thomas Huth
  2015-02-18 14:55     ` Michael S. Tsirkin
  0 siblings, 1 reply; 36+ messages in thread
From: Thomas Huth @ 2015-02-18 14:34 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, Anthony Liguori, qemu-devel, Alexander Graf,
	Cornelia Huck, Stefan Hajnoczi, Amit Shah, Chen, Tiejun

On Mon, 16 Feb 2015 22:36:26 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> Drop duplicate code.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  include/hw/virtio/virtio-serial.h | 40 +--------------------------------------
>  hw/char/virtio-serial-bus.c       |  1 +
>  2 files changed, 2 insertions(+), 39 deletions(-)
> 
> diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-serial.h
> index 11af978..ccf8459 100644
> --- a/include/hw/virtio/virtio-serial.h
> +++ b/include/hw/virtio/virtio-serial.h
> @@ -15,53 +15,15 @@
>  #ifndef _QEMU_VIRTIO_SERIAL_H
>  #define _QEMU_VIRTIO_SERIAL_H
> 
> +#include "standard-headers/linux/virtio_console.h"
>  #include "hw/qdev.h"
>  #include "hw/virtio/virtio.h"
> 
> -/* == Interface shared between the guest kernel and qemu == */
> -
> -/* The Virtio ID for virtio console / serial ports */
> -#define VIRTIO_ID_CONSOLE		3
> -
> -/* Features supported */
> -#define VIRTIO_CONSOLE_F_MULTIPORT	1
> -
> -#define VIRTIO_CONSOLE_BAD_ID           (~(uint32_t)0)
> -
> -struct virtio_console_config {
> -    /*
> -     * These two fields are used by VIRTIO_CONSOLE_F_SIZE which
> -     * isn't implemented here yet
> -     */
> -    uint16_t cols;
> -    uint16_t rows;
> -
> -    uint32_t max_nr_ports;
> -} QEMU_PACKED;
> -
> -struct virtio_console_control {
> -    uint32_t id;		/* Port number */
> -    uint16_t event;		/* The kind of control event (see below) */
> -    uint16_t value;		/* Extra information for the key */
> -};
> -
>  struct virtio_serial_conf {
>      /* Max. number of ports we can have for a virtio-serial device */
>      uint32_t max_virtserial_ports;
>  };
> 
> -/* Some events for the internal messages (control packets) */
> -#define VIRTIO_CONSOLE_DEVICE_READY	0
> -#define VIRTIO_CONSOLE_PORT_ADD		1
> -#define VIRTIO_CONSOLE_PORT_REMOVE	2
> -#define VIRTIO_CONSOLE_PORT_READY	3
> -#define VIRTIO_CONSOLE_CONSOLE_PORT	4
> -#define VIRTIO_CONSOLE_RESIZE		5
> -#define VIRTIO_CONSOLE_PORT_OPEN	6
> -#define VIRTIO_CONSOLE_PORT_NAME	7
> -
> -/* == In-qemu interface == */
> -
>  #define TYPE_VIRTIO_SERIAL_PORT "virtio-serial-port"
>  #define VIRTIO_SERIAL_PORT(obj) \
>       OBJECT_CHECK(VirtIOSerialPort, (obj), TYPE_VIRTIO_SERIAL_PORT)
> diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
> index 47fbb34..a2bac9b 100644
> --- a/hw/char/virtio-serial-bus.c
> +++ b/hw/char/virtio-serial-bus.c
> @@ -18,6 +18,7 @@
>   * GNU GPL, version 2 or (at your option) any later version.
>   */
> 
> +#include "standard-headers/linux/virtio_ids.h"

Could you omit this include? Later in virtio-serial-bus.c, the code
includes hw/virtio/virtio-serial.h, which in turn includes
standard-headers/linux/virtio_console.h - and that one already includes
the ids.h file. So I think it should work without the above change, too.

 Thomas

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

* Re: [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers
  2015-02-18 14:34   ` Thomas Huth
@ 2015-02-18 14:55     ` Michael S. Tsirkin
  2015-02-18 15:36       ` Thomas Huth
  0 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-18 14:55 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Peter Maydell, Anthony Liguori, qemu-devel, Alexander Graf,
	Cornelia Huck, Stefan Hajnoczi, Amit Shah, Chen, Tiejun

On Wed, Feb 18, 2015 at 03:34:13PM +0100, Thomas Huth wrote:
> On Mon, 16 Feb 2015 22:36:26 +0100
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > Drop duplicate code.
> > 
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> >  include/hw/virtio/virtio-serial.h | 40 +--------------------------------------
> >  hw/char/virtio-serial-bus.c       |  1 +
> >  2 files changed, 2 insertions(+), 39 deletions(-)
> > 
> > diff --git a/include/hw/virtio/virtio-serial.h b/include/hw/virtio/virtio-serial.h
> > index 11af978..ccf8459 100644
> > --- a/include/hw/virtio/virtio-serial.h
> > +++ b/include/hw/virtio/virtio-serial.h
> > @@ -15,53 +15,15 @@
> >  #ifndef _QEMU_VIRTIO_SERIAL_H
> >  #define _QEMU_VIRTIO_SERIAL_H
> > 
> > +#include "standard-headers/linux/virtio_console.h"
> >  #include "hw/qdev.h"
> >  #include "hw/virtio/virtio.h"
> > 
> > -/* == Interface shared between the guest kernel and qemu == */
> > -
> > -/* The Virtio ID for virtio console / serial ports */
> > -#define VIRTIO_ID_CONSOLE		3
> > -
> > -/* Features supported */
> > -#define VIRTIO_CONSOLE_F_MULTIPORT	1
> > -
> > -#define VIRTIO_CONSOLE_BAD_ID           (~(uint32_t)0)
> > -
> > -struct virtio_console_config {
> > -    /*
> > -     * These two fields are used by VIRTIO_CONSOLE_F_SIZE which
> > -     * isn't implemented here yet
> > -     */
> > -    uint16_t cols;
> > -    uint16_t rows;
> > -
> > -    uint32_t max_nr_ports;
> > -} QEMU_PACKED;
> > -
> > -struct virtio_console_control {
> > -    uint32_t id;		/* Port number */
> > -    uint16_t event;		/* The kind of control event (see below) */
> > -    uint16_t value;		/* Extra information for the key */
> > -};
> > -
> >  struct virtio_serial_conf {
> >      /* Max. number of ports we can have for a virtio-serial device */
> >      uint32_t max_virtserial_ports;
> >  };
> > 
> > -/* Some events for the internal messages (control packets) */
> > -#define VIRTIO_CONSOLE_DEVICE_READY	0
> > -#define VIRTIO_CONSOLE_PORT_ADD		1
> > -#define VIRTIO_CONSOLE_PORT_REMOVE	2
> > -#define VIRTIO_CONSOLE_PORT_READY	3
> > -#define VIRTIO_CONSOLE_CONSOLE_PORT	4
> > -#define VIRTIO_CONSOLE_RESIZE		5
> > -#define VIRTIO_CONSOLE_PORT_OPEN	6
> > -#define VIRTIO_CONSOLE_PORT_NAME	7
> > -
> > -/* == In-qemu interface == */
> > -
> >  #define TYPE_VIRTIO_SERIAL_PORT "virtio-serial-port"
> >  #define VIRTIO_SERIAL_PORT(obj) \
> >       OBJECT_CHECK(VirtIOSerialPort, (obj), TYPE_VIRTIO_SERIAL_PORT)
> > diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
> > index 47fbb34..a2bac9b 100644
> > --- a/hw/char/virtio-serial-bus.c
> > +++ b/hw/char/virtio-serial-bus.c
> > @@ -18,6 +18,7 @@
> >   * GNU GPL, version 2 or (at your option) any later version.
> >   */
> > 
> > +#include "standard-headers/linux/virtio_ids.h"
> 
> Could you omit this include? Later in virtio-serial-bus.c, the code
> includes hw/virtio/virtio-serial.h, which in turn includes
> standard-headers/linux/virtio_console.h - and that one already includes
> the ids.h file. So I think it should work without the above change, too.
> 
>  Thomas

Yes but it's generally not a good idea to depend on headers
including each other.

-- 
MST

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

* Re: [Qemu-devel] [PATCH v3 03/17] virtio: use standard virtio_ring.h
  2015-02-17 12:44   ` Thomas Huth
@ 2015-02-18 14:59     ` Michael S. Tsirkin
  0 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-18 14:59 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Peter Maydell, qemu-devel, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

On Tue, Feb 17, 2015 at 01:44:26PM +0100, Thomas Huth wrote:
> On Mon, 16 Feb 2015 22:35:40 +0100
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > Switch to virtio_ring.h from standard headers.
> > 
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> >  include/hw/virtio/dataplane/vring.h |   2 +-
> >  include/hw/virtio/virtio_ring.h     | 167 ------------------------------------
> >  hw/net/vhost_net.c                  |   2 +-
> >  3 files changed, 2 insertions(+), 169 deletions(-)
> >  delete mode 100644 include/hw/virtio/virtio_ring.h
> > 
> > diff --git a/include/hw/virtio/dataplane/vring.h b/include/hw/virtio/dataplane/vring.h
> > index d3e086a..836d26a 100644
> > --- a/include/hw/virtio/dataplane/vring.h
> > +++ b/include/hw/virtio/dataplane/vring.h
> > @@ -18,7 +18,7 @@
> >  #define VRING_H
> > 
> >  #include "qemu-common.h"
> > -#include "hw/virtio/virtio_ring.h"
> > +#include "standard-headers/linux/virtio_ring.h"
> >  #include "hw/virtio/virtio.h"
> > 
> >  typedef struct {
> > diff --git a/include/hw/virtio/virtio_ring.h b/include/hw/virtio/virtio_ring.h
> > deleted file mode 100644
> > index 0b42e6e..0000000
> > --- a/include/hw/virtio/virtio_ring.h
> > +++ /dev/null
> > @@ -1,167 +0,0 @@
> > -#ifndef _LINUX_VIRTIO_RING_H
> > -#define _LINUX_VIRTIO_RING_H
> > -/*
> > - * This file is copied from /usr/include/linux while converting __uNN types
> > - * to uXX_t, __inline__ to inline, and tab to spaces.
> > - * */
> 
> Hmmm, in the old header, the "__inline__" was replaced with
> "inline" ... in the new header from patch 2, there's now "__inline__"
> again. Was there a good reason for this replacement? If yes, your
> update-linux-headers.sh patch should maybe replace the "__inline__"
> into "inline", too?
> 
> Apart from that, the patch looks good to me.
> 
>  Thomas

Probably a good idea, will do, though I wonder why does
qemu use always_inline so aggressively.

OK to do as patch on top? This series is too big already.

-- 
MST

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

* Re: [Qemu-devel] [PATCH v3 02/17] include: import virtio headers from linux 4.0
  2015-02-17 12:45   ` Thomas Huth
@ 2015-02-18 15:01     ` Michael S. Tsirkin
  0 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-18 15:01 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Peter Maydell, qemu-devel, Alexander Graf, Stefan Hajnoczi,
	Cornelia Huck, Chen, Tiejun

On Tue, Feb 17, 2015 at 01:45:28PM +0100, Thomas Huth wrote:
> On Mon, 16 Feb 2015 22:35:31 +0100
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > Add files imported from linux-next (what will become linux 4.0) using
> > scripts/update-linux-headers.sh
> > 
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> >  include/standard-headers/linux/if_ether.h       |   1 +
> >  include/standard-headers/linux/types.h          |   2 +
> >  include/standard-headers/linux/virtio_9p.h      |  44 +++++
> >  include/standard-headers/linux/virtio_balloon.h |  59 ++++++
> >  include/standard-headers/linux/virtio_blk.h     | 143 +++++++++++++++
> >  include/standard-headers/linux/virtio_config.h  |  64 +++++++
> >  include/standard-headers/linux/virtio_console.h |  78 ++++++++
> >  include/standard-headers/linux/virtio_ids.h     |  43 +++++
> >  include/standard-headers/linux/virtio_net.h     | 233 ++++++++++++++++++++++++
> >  include/standard-headers/linux/virtio_pci.h     | 193 ++++++++++++++++++++
> >  include/standard-headers/linux/virtio_ring.h    | 171 +++++++++++++++++
> >  include/standard-headers/linux/virtio_rng.h     |   8 +
> >  include/standard-headers/linux/virtio_scsi.h    | 164 +++++++++++++++++
> >  include/standard-headers/linux/virtio_types.h   |  46 +++++
> >  14 files changed, 1249 insertions(+)
> >  create mode 100644 include/standard-headers/linux/if_ether.h
> >  create mode 100644 include/standard-headers/linux/types.h
> >  create mode 100644 include/standard-headers/linux/virtio_9p.h
> >  create mode 100644 include/standard-headers/linux/virtio_balloon.h
> >  create mode 100644 include/standard-headers/linux/virtio_blk.h
> >  create mode 100644 include/standard-headers/linux/virtio_config.h
> >  create mode 100644 include/standard-headers/linux/virtio_console.h
> >  create mode 100644 include/standard-headers/linux/virtio_ids.h
> >  create mode 100644 include/standard-headers/linux/virtio_net.h
> >  create mode 100644 include/standard-headers/linux/virtio_pci.h
> >  create mode 100644 include/standard-headers/linux/virtio_ring.h
> >  create mode 100644 include/standard-headers/linux/virtio_rng.h
> >  create mode 100644 include/standard-headers/linux/virtio_scsi.h
> >  create mode 100644 include/standard-headers/linux/virtio_types.h
> > 
> > diff --git a/include/standard-headers/linux/if_ether.h b/include/standard-headers/linux/if_ether.h
> > new file mode 100644
> > index 0000000..91cf735
> > --- /dev/null
> > +++ b/include/standard-headers/linux/if_ether.h
> > @@ -0,0 +1 @@
> > +#define ETH_ALEN    6
> > diff --git a/include/standard-headers/linux/types.h b/include/standard-headers/linux/types.h
> > new file mode 100644
> > index 0000000..7d42ac6
> > --- /dev/null
> > +++ b/include/standard-headers/linux/types.h
> > @@ -0,0 +1,2 @@
> > +#include <inttypes.h>
> 
> That should be <stdint.h> now, shouldn't it?
> 
>  Thomas

Oh, right, I forgot to re-run it.
I'll fix it up with a patch on top?

-- 
MST

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

* Re: [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers
  2015-02-18 14:55     ` Michael S. Tsirkin
@ 2015-02-18 15:36       ` Thomas Huth
  2015-02-18 15:41         ` Michael S. Tsirkin
  0 siblings, 1 reply; 36+ messages in thread
From: Thomas Huth @ 2015-02-18 15:36 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, Anthony Liguori, qemu-devel, Alexander Graf,
	Amit Shah, Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun

On Wed, 18 Feb 2015 15:55:54 +0100
"Michael S. Tsirkin" <mst@redhat.com> wrote:

> On Wed, Feb 18, 2015 at 03:34:13PM +0100, Thomas Huth wrote:
> > On Mon, 16 Feb 2015 22:36:26 +0100
> > "Michael S. Tsirkin" <mst@redhat.com> wrote:
...
> > > diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
> > > index 47fbb34..a2bac9b 100644
> > > --- a/hw/char/virtio-serial-bus.c
> > > +++ b/hw/char/virtio-serial-bus.c
> > > @@ -18,6 +18,7 @@
> > >   * GNU GPL, version 2 or (at your option) any later version.
> > >   */
> > > 
> > > +#include "standard-headers/linux/virtio_ids.h"
> > 
> > Could you omit this include? Later in virtio-serial-bus.c, the code
> > includes hw/virtio/virtio-serial.h, which in turn includes
> > standard-headers/linux/virtio_console.h - and that one already includes
> > the ids.h file. So I think it should work without the above change, too.
> > 
> >  Thomas
> 
> Yes but it's generally not a good idea to depend on headers
> including each other.
 
But as far as I can see, you also did not do this change in your other
patches of this series, so this seems a little bit inconsequent (e.g.
virtio-blk.c depends on VIRTIO_ID_BLOCK, but you did not include the
virtio_ids.h header there).

 Thomas

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

* Re: [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers
  2015-02-18 15:36       ` Thomas Huth
@ 2015-02-18 15:41         ` Michael S. Tsirkin
  0 siblings, 0 replies; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-02-18 15:41 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Peter Maydell, Anthony Liguori, qemu-devel, Alexander Graf,
	Amit Shah, Stefan Hajnoczi, Cornelia Huck, Chen, Tiejun

On Wed, Feb 18, 2015 at 04:36:39PM +0100, Thomas Huth wrote:
> On Wed, 18 Feb 2015 15:55:54 +0100
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > On Wed, Feb 18, 2015 at 03:34:13PM +0100, Thomas Huth wrote:
> > > On Mon, 16 Feb 2015 22:36:26 +0100
> > > "Michael S. Tsirkin" <mst@redhat.com> wrote:
> ...
> > > > diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
> > > > index 47fbb34..a2bac9b 100644
> > > > --- a/hw/char/virtio-serial-bus.c
> > > > +++ b/hw/char/virtio-serial-bus.c
> > > > @@ -18,6 +18,7 @@
> > > >   * GNU GPL, version 2 or (at your option) any later version.
> > > >   */
> > > > 
> > > > +#include "standard-headers/linux/virtio_ids.h"
> > > 
> > > Could you omit this include? Later in virtio-serial-bus.c, the code
> > > includes hw/virtio/virtio-serial.h, which in turn includes
> > > standard-headers/linux/virtio_console.h - and that one already includes
> > > the ids.h file. So I think it should work without the above change, too.
> > > 
> > >  Thomas
> > 
> > Yes but it's generally not a good idea to depend on headers
> > including each other.
>  
> But as far as I can see, you also did not do this change in your other
> patches of this series, so this seems a little bit inconsequent (e.g.
> virtio-blk.c depends on VIRTIO_ID_BLOCK, but you did not include the
> virtio_ids.h header there).
> 
>  Thomas

OK - I'll do this as a patch on top?
Don't want to repost the whole series.

-- 
MST

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

* Re: [Qemu-devel] [PATCH v3 10/17] virtio-scsi: use standard-headers
  2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 10/17] virtio-scsi: " Michael S. Tsirkin
  2015-02-17 14:13   ` Paolo Bonzini
@ 2015-03-11 10:54   ` Nikunj A Dadhania
  2015-03-11 12:03     ` Michael S. Tsirkin
  1 sibling, 1 reply; 36+ messages in thread
From: Nikunj A Dadhania @ 2015-03-11 10:54 UTC (permalink / raw)
  To: Michael S. Tsirkin, qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, Stefan Hajnoczi,
	Chen, Tiejun, Cornelia Huck, Paolo Bonzini, Anthony Liguori


Hi Michael,

"Michael S. Tsirkin" <mst@redhat.com> writes:
> Drop duplicated code.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

This patch is breaking SLOF. Reason below:

> ---
>  include/hw/virtio/virtio-scsi.h | 120 +++-------------------------------------
>  hw/scsi/virtio-scsi.c           |   1 +
>  2 files changed, 10 insertions(+), 111 deletions(-)
>
> diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
> index bf17cc9..864070d 100644
> --- a/include/hw/virtio/virtio-scsi.h
> +++ b/include/hw/virtio/virtio-scsi.h

For instance:

> -
> -/* SCSI command request, followed by CDB and data-out */
> -typedef struct {
> -    uint8_t lun[8];              /* Logical Unit Number */
> -    uint64_t tag;                /* Command identifier */
> -    uint8_t task_attr;           /* Task attribute */
> -    uint8_t prio;
> -    uint8_t crn;
> -} QEMU_PACKED VirtIOSCSICmdReq;

in include/standard-headers/linux/virtio_scsi.h

	#define VIRTIO_SCSI_CDB_SIZE   32
	#define VIRTIO_SCSI_SENSE_SIZE 96
	
	/* SCSI command request, followed by data-out */
	struct virtio_scsi_cmd_req {
	        uint8_t lun[8]; 	/* Logical Unit Number */
	        __virtio64 tag;         /* Command identifier */
	        uint8_t task_attr;              /* Task attribute */
		uint8_t prio;           /* SAM command priority field */
	        uint8_t crn;
	        uint8_t cdb[VIRTIO_SCSI_CDB_SIZE];
	} QEMU_PACKED;


Here the structure is changed having cdb as extra member. Moreover, we
have checks like below in hw/scsi/virtio-scsi.c

    rc = virtio_scsi_parse_req(req, sizeof(VirtIOSCSICmdReq) + vs->cdb_size,
                               sizeof(VirtIOSCSICmdResp) + vs->sense_size);

Now that the size of CmdReq structure is not the same as
earlier. Similarly for CmdResp structure.

SLOF has these headers replicated, IMHO, we should be changing the structure size.

> -
> -/* Response, followed by sense data and data-in */
> -typedef struct {
> -    uint32_t sense_len;          /* Sense data length */
> -    uint32_t resid;              /* Residual bytes in data buffer */
> -    uint16_t status_qualifier;   /* Status qualifier */
> -    uint8_t status;              /* Command completion status */
> -    uint8_t response;            /* Response values */
> -} QEMU_PACKED VirtIOSCSICmdResp;
> -
> -/* Task Management Request */
> -typedef struct {
> -    uint32_t type;
> -    uint32_t subtype;
> -    uint8_t lun[8];
> -    uint64_t tag;
> -} QEMU_PACKED VirtIOSCSICtrlTMFReq;
> -
> -typedef struct {
> -    uint8_t response;
> -} QEMU_PACKED VirtIOSCSICtrlTMFResp;
> -
> -/* Asynchronous notification query/subscription */
> -typedef struct {
> -    uint32_t type;
> -    uint8_t lun[8];
> -    uint32_t event_requested;
> -} QEMU_PACKED VirtIOSCSICtrlANReq;
> -
> -typedef struct {
> -    uint32_t event_actual;
> -    uint8_t response;
> -} QEMU_PACKED VirtIOSCSICtrlANResp;
> -
> -typedef struct {
> -    uint32_t event;
> -    uint8_t lun[8];
> -    uint32_t reason;
> -} QEMU_PACKED VirtIOSCSIEvent;
> -
> -typedef struct {
> -    uint32_t num_queues;
> -    uint32_t seg_max;
> -    uint32_t max_sectors;
> -    uint32_t cmd_per_lun;
> -    uint32_t event_info_size;
> -    uint32_t sense_size;
> -    uint32_t cdb_size;
> -    uint16_t max_channel;
> -    uint16_t max_target;
> -    uint32_t max_lun;
> -} QEMU_PACKED VirtIOSCSIConfig;
> +typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq;
> +typedef struct virtio_scsi_cmd_resp VirtIOSCSICmdResp;
> +typedef struct virtio_scsi_ctrl_tmf_req VirtIOSCSICtrlTMFReq;
> +typedef struct virtio_scsi_ctrl_tmf_resp VirtIOSCSICtrlTMFResp;
> +typedef struct virtio_scsi_ctrl_an_req VirtIOSCSICtrlANReq;
> +typedef struct virtio_scsi_ctrl_an_resp VirtIOSCSICtrlANResp;
> +typedef struct virtio_scsi_event VirtIOSCSIEvent;
> +typedef struct virtio_scsi_config VirtIOSCSIConfig;
>  
>  struct VirtIOSCSIConf {
>      uint32_t num_queues;
> diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
> index 9e2c718..d18654e 100644
> --- a/hw/scsi/virtio-scsi.c
> +++ b/hw/scsi/virtio-scsi.c
> @@ -13,6 +13,7 @@
>   *
>   */
>  
> +#include "standard-headers/linux/virtio_ids.h"
>  #include "hw/virtio/virtio-scsi.h"
>  #include "qemu/error-report.h"
>  #include "qemu/iov.h"
> -- 
> MST

Thanks
Nikunj

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

* Re: [Qemu-devel] [PATCH v3 10/17] virtio-scsi: use standard-headers
  2015-03-11 10:54   ` Nikunj A Dadhania
@ 2015-03-11 12:03     ` Michael S. Tsirkin
  2015-03-11 13:06       ` Nikunj A Dadhania
  0 siblings, 1 reply; 36+ messages in thread
From: Michael S. Tsirkin @ 2015-03-11 12:03 UTC (permalink / raw)
  To: Nikunj A Dadhania
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, qemu-devel,
	Stefan Hajnoczi, Chen, Tiejun, Cornelia Huck, Paolo Bonzini,
	Anthony Liguori

On Wed, Mar 11, 2015 at 04:24:55PM +0530, Nikunj A Dadhania wrote:
> 
> Hi Michael,
> 
> "Michael S. Tsirkin" <mst@redhat.com> writes:
> > Drop duplicated code.
> >
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> 
> This patch is breaking SLOF. Reason below:

Can you please try out this patch:
mid.gmane.org/20150311101858-mutt-send-email-mst@redhat.com

Thanks!


> > ---
> >  include/hw/virtio/virtio-scsi.h | 120 +++-------------------------------------
> >  hw/scsi/virtio-scsi.c           |   1 +
> >  2 files changed, 10 insertions(+), 111 deletions(-)
> >
> > diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
> > index bf17cc9..864070d 100644
> > --- a/include/hw/virtio/virtio-scsi.h
> > +++ b/include/hw/virtio/virtio-scsi.h
> 
> For instance:
> 
> > -
> > -/* SCSI command request, followed by CDB and data-out */
> > -typedef struct {
> > -    uint8_t lun[8];              /* Logical Unit Number */
> > -    uint64_t tag;                /* Command identifier */
> > -    uint8_t task_attr;           /* Task attribute */
> > -    uint8_t prio;
> > -    uint8_t crn;
> > -} QEMU_PACKED VirtIOSCSICmdReq;
> 
> in include/standard-headers/linux/virtio_scsi.h
> 
> 	#define VIRTIO_SCSI_CDB_SIZE   32
> 	#define VIRTIO_SCSI_SENSE_SIZE 96
> 	
> 	/* SCSI command request, followed by data-out */
> 	struct virtio_scsi_cmd_req {
> 	        uint8_t lun[8]; 	/* Logical Unit Number */
> 	        __virtio64 tag;         /* Command identifier */
> 	        uint8_t task_attr;              /* Task attribute */
> 		uint8_t prio;           /* SAM command priority field */
> 	        uint8_t crn;
> 	        uint8_t cdb[VIRTIO_SCSI_CDB_SIZE];
> 	} QEMU_PACKED;
> 
> 
> Here the structure is changed having cdb as extra member. Moreover, we
> have checks like below in hw/scsi/virtio-scsi.c
> 
>     rc = virtio_scsi_parse_req(req, sizeof(VirtIOSCSICmdReq) + vs->cdb_size,
>                                sizeof(VirtIOSCSICmdResp) + vs->sense_size);
> 
> Now that the size of CmdReq structure is not the same as
> earlier. Similarly for CmdResp structure.
> 
> SLOF has these headers replicated, IMHO, we should be changing the structure size.
> 
> > -
> > -/* Response, followed by sense data and data-in */
> > -typedef struct {
> > -    uint32_t sense_len;          /* Sense data length */
> > -    uint32_t resid;              /* Residual bytes in data buffer */
> > -    uint16_t status_qualifier;   /* Status qualifier */
> > -    uint8_t status;              /* Command completion status */
> > -    uint8_t response;            /* Response values */
> > -} QEMU_PACKED VirtIOSCSICmdResp;
> > -
> > -/* Task Management Request */
> > -typedef struct {
> > -    uint32_t type;
> > -    uint32_t subtype;
> > -    uint8_t lun[8];
> > -    uint64_t tag;
> > -} QEMU_PACKED VirtIOSCSICtrlTMFReq;
> > -
> > -typedef struct {
> > -    uint8_t response;
> > -} QEMU_PACKED VirtIOSCSICtrlTMFResp;
> > -
> > -/* Asynchronous notification query/subscription */
> > -typedef struct {
> > -    uint32_t type;
> > -    uint8_t lun[8];
> > -    uint32_t event_requested;
> > -} QEMU_PACKED VirtIOSCSICtrlANReq;
> > -
> > -typedef struct {
> > -    uint32_t event_actual;
> > -    uint8_t response;
> > -} QEMU_PACKED VirtIOSCSICtrlANResp;
> > -
> > -typedef struct {
> > -    uint32_t event;
> > -    uint8_t lun[8];
> > -    uint32_t reason;
> > -} QEMU_PACKED VirtIOSCSIEvent;
> > -
> > -typedef struct {
> > -    uint32_t num_queues;
> > -    uint32_t seg_max;
> > -    uint32_t max_sectors;
> > -    uint32_t cmd_per_lun;
> > -    uint32_t event_info_size;
> > -    uint32_t sense_size;
> > -    uint32_t cdb_size;
> > -    uint16_t max_channel;
> > -    uint16_t max_target;
> > -    uint32_t max_lun;
> > -} QEMU_PACKED VirtIOSCSIConfig;
> > +typedef struct virtio_scsi_cmd_req VirtIOSCSICmdReq;
> > +typedef struct virtio_scsi_cmd_resp VirtIOSCSICmdResp;
> > +typedef struct virtio_scsi_ctrl_tmf_req VirtIOSCSICtrlTMFReq;
> > +typedef struct virtio_scsi_ctrl_tmf_resp VirtIOSCSICtrlTMFResp;
> > +typedef struct virtio_scsi_ctrl_an_req VirtIOSCSICtrlANReq;
> > +typedef struct virtio_scsi_ctrl_an_resp VirtIOSCSICtrlANResp;
> > +typedef struct virtio_scsi_event VirtIOSCSIEvent;
> > +typedef struct virtio_scsi_config VirtIOSCSIConfig;
> >  
> >  struct VirtIOSCSIConf {
> >      uint32_t num_queues;
> > diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
> > index 9e2c718..d18654e 100644
> > --- a/hw/scsi/virtio-scsi.c
> > +++ b/hw/scsi/virtio-scsi.c
> > @@ -13,6 +13,7 @@
> >   *
> >   */
> >  
> > +#include "standard-headers/linux/virtio_ids.h"
> >  #include "hw/virtio/virtio-scsi.h"
> >  #include "qemu/error-report.h"
> >  #include "qemu/iov.h"
> > -- 
> > MST
> 
> Thanks
> Nikunj

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

* Re: [Qemu-devel] [PATCH v3 10/17] virtio-scsi: use standard-headers
  2015-03-11 12:03     ` Michael S. Tsirkin
@ 2015-03-11 13:06       ` Nikunj A Dadhania
  0 siblings, 0 replies; 36+ messages in thread
From: Nikunj A Dadhania @ 2015-03-11 13:06 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, qemu-devel,
	Stefan Hajnoczi, Chen, Tiejun, Cornelia Huck, Paolo Bonzini,
	Anthony Liguori

"Michael S. Tsirkin" <mst@redhat.com> writes:

> On Wed, Mar 11, 2015 at 04:24:55PM +0530, Nikunj A Dadhania wrote:
>> 
>> Hi Michael,
>> 
>> "Michael S. Tsirkin" <mst@redhat.com> writes:
>> > Drop duplicated code.
>> >
>> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
>> 
>> This patch is breaking SLOF. Reason below:
>
> Can you please try out this patch:
> mid.gmane.org/20150311101858-mutt-send-email-mst@redhat.com

Yes its fixed.

Regards
Nikunj

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

end of thread, other threads:[~2015-03-11 13:06 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-16 21:35 [Qemu-devel] [PATCH v3 00/17] virtio: pull headers from linux Michael S. Tsirkin
2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 01/17] scripts/update-linux-headers.sh: pull virtio hdrs Michael S. Tsirkin
2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 02/17] include: import virtio headers from linux 4.0 Michael S. Tsirkin
2015-02-17 12:45   ` Thomas Huth
2015-02-18 15:01     ` Michael S. Tsirkin
2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 03/17] virtio: use standard virtio_ring.h Michael S. Tsirkin
2015-02-17 12:44   ` Thomas Huth
2015-02-18 14:59     ` Michael S. Tsirkin
2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 04/17] virtio: use standard-headers Michael S. Tsirkin
2015-02-17 13:16   ` Thomas Huth
2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 05/17] virtio-balloon: use standard headers Michael S. Tsirkin
2015-02-17 13:25   ` Thomas Huth
2015-02-16 21:35 ` [Qemu-devel] [PATCH v3 06/17] virtio-9p: " Michael S. Tsirkin
2015-02-17 13:42   ` Thomas Huth
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 07/17] virtio-blk: switch to standard-headers Michael S. Tsirkin
2015-02-18  9:19   ` Thomas Huth
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 08/17] virtio-net, tap: use standard-headers Michael S. Tsirkin
2015-02-18  9:30   ` Thomas Huth
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 09/17] virtio-rng: " Michael S. Tsirkin
2015-02-18  9:32   ` Thomas Huth
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 10/17] virtio-scsi: " Michael S. Tsirkin
2015-02-17 14:13   ` Paolo Bonzini
2015-03-11 10:54   ` Nikunj A Dadhania
2015-03-11 12:03     ` Michael S. Tsirkin
2015-03-11 13:06       ` Nikunj A Dadhania
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 11/17] virtio-serial: switch to standard-headers Michael S. Tsirkin
2015-02-18 14:34   ` Thomas Huth
2015-02-18 14:55     ` Michael S. Tsirkin
2015-02-18 15:36       ` Thomas Huth
2015-02-18 15:41         ` Michael S. Tsirkin
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 12/17] update-linux-headers: use standard-headers Michael S. Tsirkin
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 13/17] linux-headers: " Michael S. Tsirkin
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 14/17] virtio-pci: use standard headers Michael S. Tsirkin
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 15/17] scripts: add arch specific standard-headers Michael S. Tsirkin
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 16/17] standard-headers: add s390 virtio headers Michael S. Tsirkin
2015-02-16 21:36 ` [Qemu-devel] [PATCH v3 17/17] s390: use standard headers Michael S. Tsirkin

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.