qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] Fix QEMU compilation on Debian 10
@ 2023-04-05 17:21 David 'Digit' Turner
  2023-04-05 17:21 ` [PATCH 1/3] Fix libvhost-user.c compilation David 'Digit' Turner
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: David 'Digit' Turner @ 2023-04-05 17:21 UTC (permalink / raw)
  To: qemu-devel; +Cc: David 'Digit' Turner

QEMU does not compile on an old Debian 10 system for the
following reasons:

- Several sources include recent kernel headers that are
  not provided by this system, and not listed in
  linux-headers/

- The libvhost-user.c source file ends up including a
  system kernel header, instead of the up-to-date
  standard-headers/ version that contains the right
  macro definition.

David 'Digit' Turner (3):
  Fix libvhost-user.c compilation.
  update-linux-headers.sh: Add missing kernel headers.
  Update linux headers to v6.3rc5

 include/standard-headers/drm/drm_fourcc.h    |  12 ++
 include/standard-headers/linux/ethtool.h     |  48 +++++++-
 include/standard-headers/linux/fuse.h        |  45 +++++++-
 include/standard-headers/linux/pci_regs.h    |   1 +
 include/standard-headers/linux/vhost_types.h |   2 +
 include/standard-headers/linux/virtio_blk.h  | 105 +++++++++++++++++
 linux-headers/asm-arm64/kvm.h                |   1 +
 linux-headers/asm-x86/kvm.h                  |  34 +++++-
 linux-headers/linux/const.h                  |  36 ++++++
 linux-headers/linux/kvm.h                    |   9 ++
 linux-headers/linux/memfd.h                  |  39 +++++++
 linux-headers/linux/nvme_ioctl.h             | 114 +++++++++++++++++++
 linux-headers/linux/vfio.h                   |  15 ++-
 linux-headers/linux/vhost.h                  |   8 ++
 scripts/update-linux-headers.sh              |   4 +-
 subprojects/libvhost-user/libvhost-user.c    |   6 +
 16 files changed, 467 insertions(+), 12 deletions(-)
 create mode 100644 linux-headers/linux/const.h
 create mode 100644 linux-headers/linux/memfd.h
 create mode 100644 linux-headers/linux/nvme_ioctl.h

-- 
2.40.0.348.gf938b09366-goog



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

* [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-05 17:21 [PATCH v2] Fix QEMU compilation on Debian 10 David 'Digit' Turner
@ 2023-04-05 17:21 ` David 'Digit' Turner
  2023-04-07  8:03   ` Michael S. Tsirkin
  2023-04-18 11:47   ` Michael S. Tsirkin
  2023-04-05 17:21 ` [PATCH 2/3] update-linux-headers.sh: Add missing kernel headers David 'Digit' Turner
  2023-04-05 17:21 ` [PATCH 3/3] Update linux headers to v6.3rc5 David 'Digit' Turner
  2 siblings, 2 replies; 15+ messages in thread
From: David 'Digit' Turner @ 2023-04-05 17:21 UTC (permalink / raw)
  To: qemu-devel; +Cc: David 'Digit' Turner, Michael S. Tsirkin

The source file uses VIRTIO_F_VERSION_1 which is
not defined by <linux/virtio_config.h> on Debian 10.

The system-provided <linux/virtio_config.h> which
does not include the macro definition is included
through <linux/vhost.h>, so fix the issue by including
the standard-headers version before that.

Signed-off-by: David 'Digit' Turner <digit@google.com>
---
 subprojects/libvhost-user/libvhost-user.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c
index 0200b78e8e..0a5768cb55 100644
--- a/subprojects/libvhost-user/libvhost-user.c
+++ b/subprojects/libvhost-user/libvhost-user.c
@@ -32,6 +32,12 @@
 #include <sys/mman.h>
 #include <endian.h>
 
+/* Necessary to provide VIRTIO_F_VERSION_1 on system
+ * with older linux headers. Must appear before
+ * <linux/vhost.h> below.
+ */
+#include "standard-headers/linux/virtio_config.h"
+
 #if defined(__linux__)
 #include <sys/syscall.h>
 #include <fcntl.h>
-- 
2.40.0.348.gf938b09366-goog



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

* [PATCH 2/3] update-linux-headers.sh: Add missing kernel headers.
  2023-04-05 17:21 [PATCH v2] Fix QEMU compilation on Debian 10 David 'Digit' Turner
  2023-04-05 17:21 ` [PATCH 1/3] Fix libvhost-user.c compilation David 'Digit' Turner
@ 2023-04-05 17:21 ` David 'Digit' Turner
  2023-04-05 17:21 ` [PATCH 3/3] Update linux headers to v6.3rc5 David 'Digit' Turner
  2 siblings, 0 replies; 15+ messages in thread
From: David 'Digit' Turner @ 2023-04-05 17:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: David 'Digit' Turner, Michael S. Tsirkin, Cornelia Huck,
	Paolo Bonzini

Add <linux/memfd.h>, used by hw/display/virtio-gpu-udmabuf.c
Add <linux/nvme_ioctl.h>, used by qga/commands-posix.c
Add <linux/const.h> used by kvm-all.c, which requires
the _BITUL() macro definition to be available.

Without these, QEMU will not compile on Debian 10 systems.

Signed-off-by: David 'Digit' Turner <digit@google.com>
---
 scripts/update-linux-headers.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
index b1ad99cba8..e21225baf3 100755
--- a/scripts/update-linux-headers.sh
+++ b/scripts/update-linux-headers.sh
@@ -160,8 +160,8 @@ done
 
 rm -rf "$output/linux-headers/linux"
 mkdir -p "$output/linux-headers/linux"
-for header in kvm.h vfio.h vfio_ccw.h vfio_zdev.h vhost.h \
-              psci.h psp-sev.h userfaultfd.h mman.h vduse.h; do
+for header in const.h kvm.h vfio.h vfio_ccw.h vfio_zdev.h vhost.h \
+              psci.h psp-sev.h userfaultfd.h memfd.h mman.h nvme_ioctl.h vduse.h; do
     cp "$tmpdir/include/linux/$header" "$output/linux-headers/linux"
 done
 
-- 
2.40.0.348.gf938b09366-goog



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

* [PATCH 3/3] Update linux headers to v6.3rc5
  2023-04-05 17:21 [PATCH v2] Fix QEMU compilation on Debian 10 David 'Digit' Turner
  2023-04-05 17:21 ` [PATCH 1/3] Fix libvhost-user.c compilation David 'Digit' Turner
  2023-04-05 17:21 ` [PATCH 2/3] update-linux-headers.sh: Add missing kernel headers David 'Digit' Turner
@ 2023-04-05 17:21 ` David 'Digit' Turner
  2 siblings, 0 replies; 15+ messages in thread
From: David 'Digit' Turner @ 2023-04-05 17:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: David 'Digit' Turner, Michael S. Tsirkin, Cornelia Huck,
	Paolo Bonzini, open list:Overall KVM CPUs

commit 7e364e56293bb98cae1b55fd835f5991c4e96e7d

Signed-off-by: David 'Digit' Turner <digit@google.com>
---
 include/standard-headers/drm/drm_fourcc.h    |  12 ++
 include/standard-headers/linux/ethtool.h     |  48 +++++++-
 include/standard-headers/linux/fuse.h        |  45 +++++++-
 include/standard-headers/linux/pci_regs.h    |   1 +
 include/standard-headers/linux/vhost_types.h |   2 +
 include/standard-headers/linux/virtio_blk.h  | 105 +++++++++++++++++
 linux-headers/asm-arm64/kvm.h                |   1 +
 linux-headers/asm-x86/kvm.h                  |  34 +++++-
 linux-headers/linux/const.h                  |  36 ++++++
 linux-headers/linux/kvm.h                    |   9 ++
 linux-headers/linux/memfd.h                  |  39 +++++++
 linux-headers/linux/nvme_ioctl.h             | 114 +++++++++++++++++++
 linux-headers/linux/vfio.h                   |  15 ++-
 linux-headers/linux/vhost.h                  |   8 ++
 14 files changed, 459 insertions(+), 10 deletions(-)
 create mode 100644 linux-headers/linux/const.h
 create mode 100644 linux-headers/linux/memfd.h
 create mode 100644 linux-headers/linux/nvme_ioctl.h

diff --git a/include/standard-headers/drm/drm_fourcc.h b/include/standard-headers/drm/drm_fourcc.h
index 69cab17b38..dc3e6112c1 100644
--- a/include/standard-headers/drm/drm_fourcc.h
+++ b/include/standard-headers/drm/drm_fourcc.h
@@ -87,6 +87,18 @@ extern "C" {
  *
  * The authoritative list of format modifier codes is found in
  * `include/uapi/drm/drm_fourcc.h`
+ *
+ * Open Source User Waiver
+ * -----------------------
+ *
+ * Because this is the authoritative source for pixel formats and modifiers
+ * referenced by GL, Vulkan extensions and other standards and hence used both
+ * by open source and closed source driver stacks, the usual requirement for an
+ * upstream in-kernel or open source userspace user does not apply.
+ *
+ * To ensure, as much as feasible, compatibility across stacks and avoid
+ * confusion with incompatible enumerations stakeholders for all relevant driver
+ * stacks should approve additions.
  */
 
 #define fourcc_code(a, b, c, d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \
diff --git a/include/standard-headers/linux/ethtool.h b/include/standard-headers/linux/ethtool.h
index 87176ab075..99fcddf04f 100644
--- a/include/standard-headers/linux/ethtool.h
+++ b/include/standard-headers/linux/ethtool.h
@@ -711,6 +711,24 @@ enum ethtool_stringset {
 	ETH_SS_COUNT
 };
 
+/**
+ * enum ethtool_mac_stats_src - source of ethtool MAC statistics
+ * @ETHTOOL_MAC_STATS_SRC_AGGREGATE:
+ *	if device supports a MAC merge layer, this retrieves the aggregate
+ *	statistics of the eMAC and pMAC. Otherwise, it retrieves just the
+ *	statistics of the single (express) MAC.
+ * @ETHTOOL_MAC_STATS_SRC_EMAC:
+ *	if device supports a MM layer, this retrieves the eMAC statistics.
+ *	Otherwise, it retrieves the statistics of the single (express) MAC.
+ * @ETHTOOL_MAC_STATS_SRC_PMAC:
+ *	if device supports a MM layer, this retrieves the pMAC statistics.
+ */
+enum ethtool_mac_stats_src {
+	ETHTOOL_MAC_STATS_SRC_AGGREGATE,
+	ETHTOOL_MAC_STATS_SRC_EMAC,
+	ETHTOOL_MAC_STATS_SRC_PMAC,
+};
+
 /**
  * enum ethtool_module_power_mode_policy - plug-in module power mode policy
  * @ETHTOOL_MODULE_POWER_MODE_POLICY_HIGH: Module is always in high power mode.
@@ -779,6 +797,31 @@ enum ethtool_podl_pse_pw_d_status {
 	ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR,
 };
 
+/**
+ * enum ethtool_mm_verify_status - status of MAC Merge Verify function
+ * @ETHTOOL_MM_VERIFY_STATUS_UNKNOWN:
+ *	verification status is unknown
+ * @ETHTOOL_MM_VERIFY_STATUS_INITIAL:
+ *	the 802.3 Verify State diagram is in the state INIT_VERIFICATION
+ * @ETHTOOL_MM_VERIFY_STATUS_VERIFYING:
+ *	the Verify State diagram is in the state VERIFICATION_IDLE,
+ *	SEND_VERIFY or WAIT_FOR_RESPONSE
+ * @ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED:
+ *	indicates that the Verify State diagram is in the state VERIFIED
+ * @ETHTOOL_MM_VERIFY_STATUS_FAILED:
+ *	the Verify State diagram is in the state VERIFY_FAIL
+ * @ETHTOOL_MM_VERIFY_STATUS_DISABLED:
+ *	verification of preemption operation is disabled
+ */
+enum ethtool_mm_verify_status {
+	ETHTOOL_MM_VERIFY_STATUS_UNKNOWN,
+	ETHTOOL_MM_VERIFY_STATUS_INITIAL,
+	ETHTOOL_MM_VERIFY_STATUS_VERIFYING,
+	ETHTOOL_MM_VERIFY_STATUS_SUCCEEDED,
+	ETHTOOL_MM_VERIFY_STATUS_FAILED,
+	ETHTOOL_MM_VERIFY_STATUS_DISABLED,
+};
+
 /**
  * struct ethtool_gstrings - string set for data tagging
  * @cmd: Command number = %ETHTOOL_GSTRINGS
@@ -1183,7 +1226,7 @@ struct ethtool_rxnfc {
 		uint32_t			rule_cnt;
 		uint32_t			rss_context;
 	};
-	uint32_t				rule_locs[0];
+	uint32_t				rule_locs[];
 };
 
 
@@ -1741,6 +1784,9 @@ enum ethtool_link_mode_bit_indices {
 	ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT	 = 96,
 	ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT	 = 97,
 	ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT	 = 98,
+	ETHTOOL_LINK_MODE_10baseT1S_Full_BIT		 = 99,
+	ETHTOOL_LINK_MODE_10baseT1S_Half_BIT		 = 100,
+	ETHTOOL_LINK_MODE_10baseT1S_P2MP_Half_BIT	 = 101,
 
 	/* must be last entry */
 	__ETHTOOL_LINK_MODE_MASK_NBITS
diff --git a/include/standard-headers/linux/fuse.h b/include/standard-headers/linux/fuse.h
index a1af78d989..35c131a107 100644
--- a/include/standard-headers/linux/fuse.h
+++ b/include/standard-headers/linux/fuse.h
@@ -201,6 +201,11 @@
  *  7.38
  *  - add FUSE_EXPIRE_ONLY flag to fuse_notify_inval_entry
  *  - add FOPEN_PARALLEL_DIRECT_WRITES
+ *  - add total_extlen to fuse_in_header
+ *  - add FUSE_MAX_NR_SECCTX
+ *  - add extension header
+ *  - add FUSE_EXT_GROUPS
+ *  - add FUSE_CREATE_SUPP_GROUP
  */
 
 #ifndef _LINUX_FUSE_H
@@ -358,6 +363,8 @@ struct fuse_file_lock {
  * FUSE_SECURITY_CTX:	add security context to create, mkdir, symlink, and
  *			mknod
  * FUSE_HAS_INODE_DAX:  use per inode DAX
+ * FUSE_CREATE_SUPP_GROUP: add supplementary group info to create, mkdir,
+ *			symlink and mknod (single group that matches parent)
  */
 #define FUSE_ASYNC_READ		(1 << 0)
 #define FUSE_POSIX_LOCKS	(1 << 1)
@@ -394,6 +401,7 @@ struct fuse_file_lock {
 /* bits 32..63 get shifted down 32 bits into the flags2 field */
 #define FUSE_SECURITY_CTX	(1ULL << 32)
 #define FUSE_HAS_INODE_DAX	(1ULL << 33)
+#define FUSE_CREATE_SUPP_GROUP	(1ULL << 34)
 
 /**
  * CUSE INIT request/reply flags
@@ -499,6 +507,17 @@ struct fuse_file_lock {
  */
 #define FUSE_EXPIRE_ONLY		(1 << 0)
 
+/**
+ * extension type
+ * FUSE_MAX_NR_SECCTX: maximum value of &fuse_secctx_header.nr_secctx
+ * FUSE_EXT_GROUPS: &fuse_supp_groups extension
+ */
+enum fuse_ext_type {
+	/* Types 0..31 are reserved for fuse_secctx_header */
+	FUSE_MAX_NR_SECCTX	= 31,
+	FUSE_EXT_GROUPS		= 32,
+};
+
 enum fuse_opcode {
 	FUSE_LOOKUP		= 1,
 	FUSE_FORGET		= 2,  /* no reply */
@@ -882,7 +901,8 @@ struct fuse_in_header {
 	uint32_t	uid;
 	uint32_t	gid;
 	uint32_t	pid;
-	uint32_t	padding;
+	uint16_t	total_extlen; /* length of extensions in 8byte units */
+	uint16_t	padding;
 };
 
 struct fuse_out_header {
@@ -1043,4 +1063,27 @@ struct fuse_secctx_header {
 	uint32_t	nr_secctx;
 };
 
+/**
+ * struct fuse_ext_header - extension header
+ * @size: total size of this extension including this header
+ * @type: type of extension
+ *
+ * This is made compatible with fuse_secctx_header by using type values >
+ * FUSE_MAX_NR_SECCTX
+ */
+struct fuse_ext_header {
+	uint32_t	size;
+	uint32_t	type;
+};
+
+/**
+ * struct fuse_supp_groups - Supplementary group extension
+ * @nr_groups: number of supplementary groups
+ * @groups: flexible array of group IDs
+ */
+struct fuse_supp_groups {
+	uint32_t	nr_groups;
+	uint32_t	groups[];
+};
+
 #endif /* _LINUX_FUSE_H */
diff --git a/include/standard-headers/linux/pci_regs.h b/include/standard-headers/linux/pci_regs.h
index 85ab127881..dc2000e0fe 100644
--- a/include/standard-headers/linux/pci_regs.h
+++ b/include/standard-headers/linux/pci_regs.h
@@ -693,6 +693,7 @@
 #define  PCI_EXP_LNKCTL2_TX_MARGIN	0x0380 /* Transmit Margin */
 #define  PCI_EXP_LNKCTL2_HASD		0x0020 /* HW Autonomous Speed Disable */
 #define PCI_EXP_LNKSTA2		0x32	/* Link Status 2 */
+#define  PCI_EXP_LNKSTA2_FLIT		0x0400 /* Flit Mode Status */
 #define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2	0x32	/* end of v2 EPs w/ link */
 #define PCI_EXP_SLTCAP2		0x34	/* Slot Capabilities 2 */
 #define  PCI_EXP_SLTCAP2_IBPD	0x00000001 /* In-band PD Disable Supported */
diff --git a/include/standard-headers/linux/vhost_types.h b/include/standard-headers/linux/vhost_types.h
index c41a73fe36..88600e2d9f 100644
--- a/include/standard-headers/linux/vhost_types.h
+++ b/include/standard-headers/linux/vhost_types.h
@@ -163,5 +163,7 @@ struct vhost_vdpa_iova_range {
 #define VHOST_BACKEND_F_IOTLB_ASID  0x3
 /* Device can be suspended */
 #define VHOST_BACKEND_F_SUSPEND  0x4
+/* Device can be resumed */
+#define VHOST_BACKEND_F_RESUME  0x5
 
 #endif
diff --git a/include/standard-headers/linux/virtio_blk.h b/include/standard-headers/linux/virtio_blk.h
index e81715cd70..7155b1a470 100644
--- a/include/standard-headers/linux/virtio_blk.h
+++ b/include/standard-headers/linux/virtio_blk.h
@@ -41,6 +41,7 @@
 #define VIRTIO_BLK_F_DISCARD	13	/* DISCARD is supported */
 #define VIRTIO_BLK_F_WRITE_ZEROES	14	/* WRITE ZEROES is supported */
 #define VIRTIO_BLK_F_SECURE_ERASE	16 /* Secure Erase is supported */
+#define VIRTIO_BLK_F_ZONED		17	/* Zoned block device */
 
 /* Legacy feature bits */
 #ifndef VIRTIO_BLK_NO_LEGACY
@@ -135,6 +136,16 @@ struct virtio_blk_config {
 	/* Secure erase commands must be aligned to this number of sectors. */
 	__virtio32 secure_erase_sector_alignment;
 
+	/* Zoned block device characteristics (if VIRTIO_BLK_F_ZONED) */
+	struct virtio_blk_zoned_characteristics {
+		uint32_t zone_sectors;
+		uint32_t max_open_zones;
+		uint32_t max_active_zones;
+		uint32_t max_append_sectors;
+		uint32_t write_granularity;
+		uint8_t model;
+		uint8_t unused2[3];
+	} zoned;
 } QEMU_PACKED;
 
 /*
@@ -172,6 +183,27 @@ struct virtio_blk_config {
 /* Secure erase command */
 #define VIRTIO_BLK_T_SECURE_ERASE	14
 
+/* Zone append command */
+#define VIRTIO_BLK_T_ZONE_APPEND    15
+
+/* Report zones command */
+#define VIRTIO_BLK_T_ZONE_REPORT    16
+
+/* Open zone command */
+#define VIRTIO_BLK_T_ZONE_OPEN      18
+
+/* Close zone command */
+#define VIRTIO_BLK_T_ZONE_CLOSE     20
+
+/* Finish zone command */
+#define VIRTIO_BLK_T_ZONE_FINISH    22
+
+/* Reset zone command */
+#define VIRTIO_BLK_T_ZONE_RESET     24
+
+/* Reset All zones command */
+#define VIRTIO_BLK_T_ZONE_RESET_ALL 26
+
 #ifndef VIRTIO_BLK_NO_LEGACY
 /* Barrier before this op. */
 #define VIRTIO_BLK_T_BARRIER	0x80000000
@@ -191,6 +223,72 @@ struct virtio_blk_outhdr {
 	__virtio64 sector;
 };
 
+/*
+ * Supported zoned device models.
+ */
+
+/* Regular block device */
+#define VIRTIO_BLK_Z_NONE      0
+/* Host-managed zoned device */
+#define VIRTIO_BLK_Z_HM        1
+/* Host-aware zoned device */
+#define VIRTIO_BLK_Z_HA        2
+
+/*
+ * Zone descriptor. A part of VIRTIO_BLK_T_ZONE_REPORT command reply.
+ */
+struct virtio_blk_zone_descriptor {
+	/* Zone capacity */
+	uint64_t z_cap;
+	/* The starting sector of the zone */
+	uint64_t z_start;
+	/* Zone write pointer position in sectors */
+	uint64_t z_wp;
+	/* Zone type */
+	uint8_t z_type;
+	/* Zone state */
+	uint8_t z_state;
+	uint8_t reserved[38];
+};
+
+struct virtio_blk_zone_report {
+	uint64_t nr_zones;
+	uint8_t reserved[56];
+	struct virtio_blk_zone_descriptor zones[];
+};
+
+/*
+ * Supported zone types.
+ */
+
+/* Conventional zone */
+#define VIRTIO_BLK_ZT_CONV         1
+/* Sequential Write Required zone */
+#define VIRTIO_BLK_ZT_SWR          2
+/* Sequential Write Preferred zone */
+#define VIRTIO_BLK_ZT_SWP          3
+
+/*
+ * Zone states that are available for zones of all types.
+ */
+
+/* Not a write pointer (conventional zones only) */
+#define VIRTIO_BLK_ZS_NOT_WP       0
+/* Empty */
+#define VIRTIO_BLK_ZS_EMPTY        1
+/* Implicitly Open */
+#define VIRTIO_BLK_ZS_IOPEN        2
+/* Explicitly Open */
+#define VIRTIO_BLK_ZS_EOPEN        3
+/* Closed */
+#define VIRTIO_BLK_ZS_CLOSED       4
+/* Read-Only */
+#define VIRTIO_BLK_ZS_RDONLY       13
+/* Full */
+#define VIRTIO_BLK_ZS_FULL         14
+/* Offline */
+#define VIRTIO_BLK_ZS_OFFLINE      15
+
 /* Unmap this range (only valid for write zeroes command) */
 #define VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP	0x00000001
 
@@ -217,4 +315,11 @@ struct virtio_scsi_inhdr {
 #define VIRTIO_BLK_S_OK		0
 #define VIRTIO_BLK_S_IOERR	1
 #define VIRTIO_BLK_S_UNSUPP	2
+
+/* Error codes that are specific to zoned block devices */
+#define VIRTIO_BLK_S_ZONE_INVALID_CMD     3
+#define VIRTIO_BLK_S_ZONE_UNALIGNED_WP    4
+#define VIRTIO_BLK_S_ZONE_OPEN_RESOURCE   5
+#define VIRTIO_BLK_S_ZONE_ACTIVE_RESOURCE 6
+
 #endif /* _LINUX_VIRTIO_BLK_H */
diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h
index a7cfefb3a8..d7e7bb885e 100644
--- a/linux-headers/asm-arm64/kvm.h
+++ b/linux-headers/asm-arm64/kvm.h
@@ -109,6 +109,7 @@ struct kvm_regs {
 #define KVM_ARM_VCPU_SVE		4 /* enable SVE for this CPU */
 #define KVM_ARM_VCPU_PTRAUTH_ADDRESS	5 /* VCPU uses address authentication */
 #define KVM_ARM_VCPU_PTRAUTH_GENERIC	6 /* VCPU uses generic authentication */
+#define KVM_ARM_VCPU_HAS_EL2		7 /* Support nested virtualization */
 
 struct kvm_vcpu_init {
 	__u32 target;
diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h
index 2747d2ce14..2937e7bf69 100644
--- a/linux-headers/asm-x86/kvm.h
+++ b/linux-headers/asm-x86/kvm.h
@@ -9,6 +9,7 @@
 
 #include <linux/types.h>
 #include <linux/ioctl.h>
+#include <linux/stddef.h>
 
 #define KVM_PIO_PAGE_OFFSET 1
 #define KVM_COALESCED_MMIO_PAGE_OFFSET 2
@@ -505,8 +506,8 @@ struct kvm_nested_state {
 	 * KVM_{GET,PUT}_NESTED_STATE ioctl values.
 	 */
 	union {
-		struct kvm_vmx_nested_state_data vmx[0];
-		struct kvm_svm_nested_state_data svm[0];
+		__DECLARE_FLEX_ARRAY(struct kvm_vmx_nested_state_data, vmx);
+		__DECLARE_FLEX_ARRAY(struct kvm_svm_nested_state_data, svm);
 	} data;
 };
 
@@ -523,6 +524,35 @@ struct kvm_pmu_event_filter {
 #define KVM_PMU_EVENT_ALLOW 0
 #define KVM_PMU_EVENT_DENY 1
 
+#define KVM_PMU_EVENT_FLAG_MASKED_EVENTS BIT(0)
+#define KVM_PMU_EVENT_FLAGS_VALID_MASK (KVM_PMU_EVENT_FLAG_MASKED_EVENTS)
+
+/*
+ * Masked event layout.
+ * Bits   Description
+ * ----   -----------
+ * 7:0    event select (low bits)
+ * 15:8   umask match
+ * 31:16  unused
+ * 35:32  event select (high bits)
+ * 36:54  unused
+ * 55     exclude bit
+ * 63:56  umask mask
+ */
+
+#define KVM_PMU_ENCODE_MASKED_ENTRY(event_select, mask, match, exclude) \
+	(((event_select) & 0xFFULL) | (((event_select) & 0XF00ULL) << 24) | \
+	(((mask) & 0xFFULL) << 56) | \
+	(((match) & 0xFFULL) << 8) | \
+	((__u64)(!!(exclude)) << 55))
+
+#define KVM_PMU_MASKED_ENTRY_EVENT_SELECT \
+	(GENMASK_ULL(7, 0) | GENMASK_ULL(35, 32))
+#define KVM_PMU_MASKED_ENTRY_UMASK_MASK		(GENMASK_ULL(63, 56))
+#define KVM_PMU_MASKED_ENTRY_UMASK_MATCH	(GENMASK_ULL(15, 8))
+#define KVM_PMU_MASKED_ENTRY_EXCLUDE		(BIT_ULL(55))
+#define KVM_PMU_MASKED_ENTRY_UMASK_MASK_SHIFT	(56)
+
 /* for KVM_{GET,SET,HAS}_DEVICE_ATTR */
 #define KVM_VCPU_TSC_CTRL 0 /* control group for the timestamp counter (TSC) */
 #define   KVM_VCPU_TSC_OFFSET 0 /* attribute for the TSC offset */
diff --git a/linux-headers/linux/const.h b/linux-headers/linux/const.h
new file mode 100644
index 0000000000..5e48987251
--- /dev/null
+++ b/linux-headers/linux/const.h
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/* const.h: Macros for dealing with constants.  */
+
+#ifndef _LINUX_CONST_H
+#define _LINUX_CONST_H
+
+/* Some constant macros are used in both assembler and
+ * C code.  Therefore we cannot annotate them always with
+ * 'UL' and other type specifiers unilaterally.  We
+ * use the following macros to deal with this.
+ *
+ * Similarly, _AT() will cast an expression with a type in C, but
+ * leave it unchanged in asm.
+ */
+
+#ifdef __ASSEMBLY__
+#define _AC(X,Y)	X
+#define _AT(T,X)	X
+#else
+#define __AC(X,Y)	(X##Y)
+#define _AC(X,Y)	__AC(X,Y)
+#define _AT(T,X)	((T)(X))
+#endif
+
+#define _UL(x)		(_AC(x, UL))
+#define _ULL(x)		(_AC(x, ULL))
+
+#define _BITUL(x)	(_UL(1) << (x))
+#define _BITULL(x)	(_ULL(1) << (x))
+
+#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
+#define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
+
+#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
+
+#endif /* _LINUX_CONST_H */
diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
index 1e2c16cfe3..599de3c6e3 100644
--- a/linux-headers/linux/kvm.h
+++ b/linux-headers/linux/kvm.h
@@ -581,6 +581,8 @@ struct kvm_s390_mem_op {
 		struct {
 			__u8 ar;	/* the access register number */
 			__u8 key;	/* access key, ignored if flag unset */
+			__u8 pad1[6];	/* ignored */
+			__u64 old_addr;	/* ignored if cmpxchg flag unset */
 		};
 		__u32 sida_offset; /* offset into the sida */
 		__u8 reserved[32]; /* ignored */
@@ -593,11 +595,17 @@ struct kvm_s390_mem_op {
 #define KVM_S390_MEMOP_SIDA_WRITE	3
 #define KVM_S390_MEMOP_ABSOLUTE_READ	4
 #define KVM_S390_MEMOP_ABSOLUTE_WRITE	5
+#define KVM_S390_MEMOP_ABSOLUTE_CMPXCHG	6
+
 /* flags for kvm_s390_mem_op->flags */
 #define KVM_S390_MEMOP_F_CHECK_ONLY		(1ULL << 0)
 #define KVM_S390_MEMOP_F_INJECT_EXCEPTION	(1ULL << 1)
 #define KVM_S390_MEMOP_F_SKEY_PROTECTION	(1ULL << 2)
 
+/* flags specifying extension support via KVM_CAP_S390_MEM_OP_EXTENSION */
+#define KVM_S390_MEMOP_EXTENSION_CAP_BASE	(1 << 0)
+#define KVM_S390_MEMOP_EXTENSION_CAP_CMPXCHG	(1 << 1)
+
 /* for KVM_INTERRUPT */
 struct kvm_interrupt {
 	/* in */
@@ -1173,6 +1181,7 @@ struct kvm_ppc_resize_hpt {
 #define KVM_CAP_DIRTY_LOG_RING_ACQ_REL 223
 #define KVM_CAP_S390_PROTECTED_ASYNC_DISABLE 224
 #define KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP 225
+#define KVM_CAP_PMU_EVENT_MASKED_EVENTS 226
 
 #ifdef KVM_CAP_IRQ_ROUTING
 
diff --git a/linux-headers/linux/memfd.h b/linux-headers/linux/memfd.h
new file mode 100644
index 0000000000..01c0324e77
--- /dev/null
+++ b/linux-headers/linux/memfd.h
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _LINUX_MEMFD_H
+#define _LINUX_MEMFD_H
+
+#include <asm-generic/hugetlb_encode.h>
+
+/* flags for memfd_create(2) (unsigned int) */
+#define MFD_CLOEXEC		0x0001U
+#define MFD_ALLOW_SEALING	0x0002U
+#define MFD_HUGETLB		0x0004U
+/* not executable and sealed to prevent changing to executable. */
+#define MFD_NOEXEC_SEAL		0x0008U
+/* executable */
+#define MFD_EXEC		0x0010U
+
+/*
+ * Huge page size encoding when MFD_HUGETLB is specified, and a huge page
+ * size other than the default is desired.  See hugetlb_encode.h.
+ * All known huge page size encodings are provided here.  It is the
+ * responsibility of the application to know which sizes are supported on
+ * the running system.  See mmap(2) man page for details.
+ */
+#define MFD_HUGE_SHIFT	HUGETLB_FLAG_ENCODE_SHIFT
+#define MFD_HUGE_MASK	HUGETLB_FLAG_ENCODE_MASK
+
+#define MFD_HUGE_64KB	HUGETLB_FLAG_ENCODE_64KB
+#define MFD_HUGE_512KB	HUGETLB_FLAG_ENCODE_512KB
+#define MFD_HUGE_1MB	HUGETLB_FLAG_ENCODE_1MB
+#define MFD_HUGE_2MB	HUGETLB_FLAG_ENCODE_2MB
+#define MFD_HUGE_8MB	HUGETLB_FLAG_ENCODE_8MB
+#define MFD_HUGE_16MB	HUGETLB_FLAG_ENCODE_16MB
+#define MFD_HUGE_32MB	HUGETLB_FLAG_ENCODE_32MB
+#define MFD_HUGE_256MB	HUGETLB_FLAG_ENCODE_256MB
+#define MFD_HUGE_512MB	HUGETLB_FLAG_ENCODE_512MB
+#define MFD_HUGE_1GB	HUGETLB_FLAG_ENCODE_1GB
+#define MFD_HUGE_2GB	HUGETLB_FLAG_ENCODE_2GB
+#define MFD_HUGE_16GB	HUGETLB_FLAG_ENCODE_16GB
+
+#endif /* _LINUX_MEMFD_H */
diff --git a/linux-headers/linux/nvme_ioctl.h b/linux-headers/linux/nvme_ioctl.h
new file mode 100644
index 0000000000..f8df31dbc4
--- /dev/null
+++ b/linux-headers/linux/nvme_ioctl.h
@@ -0,0 +1,114 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * Definitions for the NVM Express ioctl interface
+ * Copyright (c) 2011-2014, Intel Corporation.
+ */
+
+#ifndef _LINUX_NVME_IOCTL_H
+#define _LINUX_NVME_IOCTL_H
+
+#include <linux/types.h>
+
+struct nvme_user_io {
+	__u8	opcode;
+	__u8	flags;
+	__u16	control;
+	__u16	nblocks;
+	__u16	rsvd;
+	__u64	metadata;
+	__u64	addr;
+	__u64	slba;
+	__u32	dsmgmt;
+	__u32	reftag;
+	__u16	apptag;
+	__u16	appmask;
+};
+
+struct nvme_passthru_cmd {
+	__u8	opcode;
+	__u8	flags;
+	__u16	rsvd1;
+	__u32	nsid;
+	__u32	cdw2;
+	__u32	cdw3;
+	__u64	metadata;
+	__u64	addr;
+	__u32	metadata_len;
+	__u32	data_len;
+	__u32	cdw10;
+	__u32	cdw11;
+	__u32	cdw12;
+	__u32	cdw13;
+	__u32	cdw14;
+	__u32	cdw15;
+	__u32	timeout_ms;
+	__u32	result;
+};
+
+struct nvme_passthru_cmd64 {
+	__u8	opcode;
+	__u8	flags;
+	__u16	rsvd1;
+	__u32	nsid;
+	__u32	cdw2;
+	__u32	cdw3;
+	__u64	metadata;
+	__u64	addr;
+	__u32	metadata_len;
+	union {
+		__u32	data_len; /* for non-vectored io */
+		__u32	vec_cnt; /* for vectored io */
+	};
+	__u32	cdw10;
+	__u32	cdw11;
+	__u32	cdw12;
+	__u32	cdw13;
+	__u32	cdw14;
+	__u32	cdw15;
+	__u32	timeout_ms;
+	__u32   rsvd2;
+	__u64	result;
+};
+
+/* same as struct nvme_passthru_cmd64, minus the 8b result field */
+struct nvme_uring_cmd {
+	__u8	opcode;
+	__u8	flags;
+	__u16	rsvd1;
+	__u32	nsid;
+	__u32	cdw2;
+	__u32	cdw3;
+	__u64	metadata;
+	__u64	addr;
+	__u32	metadata_len;
+	__u32	data_len;
+	__u32	cdw10;
+	__u32	cdw11;
+	__u32	cdw12;
+	__u32	cdw13;
+	__u32	cdw14;
+	__u32	cdw15;
+	__u32	timeout_ms;
+	__u32   rsvd2;
+};
+
+#define nvme_admin_cmd nvme_passthru_cmd
+
+#define NVME_IOCTL_ID		_IO('N', 0x40)
+#define NVME_IOCTL_ADMIN_CMD	_IOWR('N', 0x41, struct nvme_admin_cmd)
+#define NVME_IOCTL_SUBMIT_IO	_IOW('N', 0x42, struct nvme_user_io)
+#define NVME_IOCTL_IO_CMD	_IOWR('N', 0x43, struct nvme_passthru_cmd)
+#define NVME_IOCTL_RESET	_IO('N', 0x44)
+#define NVME_IOCTL_SUBSYS_RESET	_IO('N', 0x45)
+#define NVME_IOCTL_RESCAN	_IO('N', 0x46)
+#define NVME_IOCTL_ADMIN64_CMD	_IOWR('N', 0x47, struct nvme_passthru_cmd64)
+#define NVME_IOCTL_IO64_CMD	_IOWR('N', 0x48, struct nvme_passthru_cmd64)
+#define NVME_IOCTL_IO64_CMD_VEC	_IOWR('N', 0x49, struct nvme_passthru_cmd64)
+
+/* io_uring async commands: */
+#define NVME_URING_CMD_IO	_IOWR('N', 0x80, struct nvme_uring_cmd)
+#define NVME_URING_CMD_IO_VEC	_IOWR('N', 0x81, struct nvme_uring_cmd)
+#define NVME_URING_CMD_ADMIN	_IOWR('N', 0x82, struct nvme_uring_cmd)
+#define NVME_URING_CMD_ADMIN_VEC _IOWR('N', 0x83, struct nvme_uring_cmd)
+
+#endif /* _LINUX_NVME_IOCTL_H */
diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h
index c59692ce0b..4a534edbdc 100644
--- a/linux-headers/linux/vfio.h
+++ b/linux-headers/linux/vfio.h
@@ -49,7 +49,11 @@
 /* Supports VFIO_DMA_UNMAP_FLAG_ALL */
 #define VFIO_UNMAP_ALL			9
 
-/* Supports the vaddr flag for DMA map and unmap */
+/*
+ * Supports the vaddr flag for DMA map and unmap.  Not supported for mediated
+ * devices, so this capability is subject to change as groups are added or
+ * removed.
+ */
 #define VFIO_UPDATE_VADDR		10
 
 /*
@@ -1343,8 +1347,7 @@ struct vfio_iommu_type1_info_dma_avail {
  * Map process virtual addresses to IO virtual addresses using the
  * provided struct vfio_dma_map. Caller sets argsz. READ &/ WRITE required.
  *
- * If flags & VFIO_DMA_MAP_FLAG_VADDR, update the base vaddr for iova, and
- * unblock translation of host virtual addresses in the iova range.  The vaddr
+ * If flags & VFIO_DMA_MAP_FLAG_VADDR, update the base vaddr for iova. The vaddr
  * must have previously been invalidated with VFIO_DMA_UNMAP_FLAG_VADDR.  To
  * maintain memory consistency within the user application, the updated vaddr
  * must address the same memory object as originally mapped.  Failure to do so
@@ -1395,9 +1398,9 @@ struct vfio_bitmap {
  * must be 0.  This cannot be combined with the get-dirty-bitmap flag.
  *
  * If flags & VFIO_DMA_UNMAP_FLAG_VADDR, do not unmap, but invalidate host
- * virtual addresses in the iova range.  Tasks that attempt to translate an
- * iova's vaddr will block.  DMA to already-mapped pages continues.  This
- * cannot be combined with the get-dirty-bitmap flag.
+ * virtual addresses in the iova range.  DMA to already-mapped pages continues.
+ * Groups may not be added to the container while any addresses are invalid.
+ * This cannot be combined with the get-dirty-bitmap flag.
  */
 struct vfio_iommu_type1_dma_unmap {
 	__u32	argsz;
diff --git a/linux-headers/linux/vhost.h b/linux-headers/linux/vhost.h
index f9f115a7c7..92e1b700b5 100644
--- a/linux-headers/linux/vhost.h
+++ b/linux-headers/linux/vhost.h
@@ -180,4 +180,12 @@
  */
 #define VHOST_VDPA_SUSPEND		_IO(VHOST_VIRTIO, 0x7D)
 
+/* Resume a device so it can resume processing virtqueue requests
+ *
+ * After the return of this ioctl the device will have restored all the
+ * necessary states and it is fully operational to continue processing the
+ * virtqueue descriptors.
+ */
+#define VHOST_VDPA_RESUME		_IO(VHOST_VIRTIO, 0x7E)
+
 #endif
-- 
2.40.0.348.gf938b09366-goog



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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-05 17:21 ` [PATCH 1/3] Fix libvhost-user.c compilation David 'Digit' Turner
@ 2023-04-07  8:03   ` Michael S. Tsirkin
  2023-04-07  9:24     ` David Turner
  2023-04-18 11:47   ` Michael S. Tsirkin
  1 sibling, 1 reply; 15+ messages in thread
From: Michael S. Tsirkin @ 2023-04-07  8:03 UTC (permalink / raw)
  To: David 'Digit' Turner; +Cc: qemu-devel

If you are reposting, please version patchsets, E.g.
-v2 flag for git format-patch will enerate [PATCH v2] for you.

Repeating what I said on previous version:

On Wed, Apr 05, 2023 at 07:21:07PM +0200, David 'Digit' Turner wrote:
> The source file uses VIRTIO_F_VERSION_1 which is
> not defined by <linux/virtio_config.h> on Debian 10.
> 
> The system-provided <linux/virtio_config.h> which
> does not include the macro definition is included
> through <linux/vhost.h>, so fix the issue by including
> the standard-headers version before that.
> 
> Signed-off-by: David 'Digit' Turner <digit@google.com>

This happens to work usually but there's no guarantee
"standard-headers/linux/virtio_config.h"
and <linux/virtio_config.h> are interchangeable or
even do not conflict.

But where is <linux/vhost.h> using <linux/virtio_config.h>?
Everyone should be using "standard-headers/linux/virtio_config.h".


> ---
>  subprojects/libvhost-user/libvhost-user.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c
> index 0200b78e8e..0a5768cb55 100644
> --- a/subprojects/libvhost-user/libvhost-user.c
> +++ b/subprojects/libvhost-user/libvhost-user.c
> @@ -32,6 +32,12 @@
>  #include <sys/mman.h>
>  #include <endian.h>
>  
> +/* Necessary to provide VIRTIO_F_VERSION_1 on system
> + * with older linux headers. Must appear before
> + * <linux/vhost.h> below.
> + */
> +#include "standard-headers/linux/virtio_config.h"
> +
>  #if defined(__linux__)
>  #include <sys/syscall.h>
>  #include <fcntl.h>
> -- 
> 2.40.0.348.gf938b09366-goog



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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-07  8:03   ` Michael S. Tsirkin
@ 2023-04-07  9:24     ` David Turner
  2023-04-07  9:25       ` David Turner
  0 siblings, 1 reply; 15+ messages in thread
From: David Turner @ 2023-04-07  9:24 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel

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

The <linux/vhost.h> of glib-2.17 begins with:

#ifndef _LINUX_VHOST_H
#define _LINUX_VHOST_H
/* Userspace interface for in-kernel virtio accelerators. */
/* vhost is used to reduce the number of system calls involved in virtio.
 *
 * Existing virtio net code is used in the guest without modification.
 *
 * This header includes interface used by userspace hypervisor for
 * device configuration.
 */
#include <linux/types.h>
#include <linux/ioctl.h>
#include <linux/virtio_config.h>
#include <linux/virtio_ring.h>


See
https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/+/refs/heads/master/sysroot/usr/include/linux/vhost.h

Here's the compilation error I get in this case:

FAILED: subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o

/src/prebuilts/clang/clang-r487747/bin/clang --sysroot=/out/sysroot -m64
-mcx16 -Isubprojects/libvhost-user/libvhost-user.a.p
-Isubprojects/libvhost-user -I../../
src/third_party/qemu/subprojects/libvhost-user
-I/out/dest-install/usr/include -fcolor-diagnostics -Wall -Winvalid-pch
-std=gnu99 -O2 -g -Wsign-compare -Wdeclarat
ion-after-statement -Wstrict-aliasing -fno-pie -D_FILE_OFFSET_BITS=64
-D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -Wundef
-Wwrite-strings -Wmissi
ng-prototypes -Wstrict-prototypes -Wredundant-decls -Wold-style-definition
-Wtype-limits -Wformat-security -Wformat-y2k -Winit-self
-Wignored-qualifiers -Wempty-b
ody -Wnested-externs -Wendif-labels -Wexpansion-to-defined
-Wmissing-format-attribute -Wthread-safety -Wno-initializer-overrides
-Wno-missing-include-dirs -Wno-sh
ift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition
-Wno-tautological-type-limit-compare -Wno-psabi
-Wno-gnu-variable-sized-type-not-at-end -fstack-
protector-strong -pthread -D_GNU_SOURCE -MD -MQ
subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o -MF
subprojects/libvhost-user/libvhost-user.a.p/libv
host-user.c.o.d -o
subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o -c
../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c

../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:529:17:
error: use of undeclared identifier 'VIRTIO_F_VERSION_1'

        1ULL << VIRTIO_F_VERSION_1 |

                ^
../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:563:30:
error: use of undeclared identifier 'VIRTIO_F_VERSION_1'

    if (!vu_has_feature(dev, VIRTIO_F_VERSION_1)) {

                             ^
../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:632:22:
warning: unused variable 'dev_region' [-Wunused-variable]

        VuDevRegion *dev_region = &dev->regions[i];

                     ^
../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:633:13:
warning: unused variable 'ret' [-Wunused-variable]

        int ret;

            ^
2 warnings and 2 errors generated.


On Fri, Apr 7, 2023 at 10:03 AM Michael S. Tsirkin <mst@redhat.com> wrote:

> If you are reposting, please version patchsets, E.g.
> -v2 flag for git format-patch will enerate [PATCH v2] for you.
>
> Repeating what I said on previous version:
>
> On Wed, Apr 05, 2023 at 07:21:07PM +0200, David 'Digit' Turner wrote:
> > The source file uses VIRTIO_F_VERSION_1 which is
> > not defined by <linux/virtio_config.h> on Debian 10.
> >
> > The system-provided <linux/virtio_config.h> which
> > does not include the macro definition is included
> > through <linux/vhost.h>, so fix the issue by including
> > the standard-headers version before that.
> >
> > Signed-off-by: David 'Digit' Turner <digit@google.com>
>
> This happens to work usually but there's no guarantee
> "standard-headers/linux/virtio_config.h"
> and <linux/virtio_config.h> are interchangeable or
> even do not conflict.
>
> But where is <linux/vhost.h> using <linux/virtio_config.h>?
> Everyone should be using "standard-headers/linux/virtio_config.h".
>
>
> > ---
> >  subprojects/libvhost-user/libvhost-user.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> >
> > diff --git a/subprojects/libvhost-user/libvhost-user.c
> b/subprojects/libvhost-user/libvhost-user.c
> > index 0200b78e8e..0a5768cb55 100644
> > --- a/subprojects/libvhost-user/libvhost-user.c
> > +++ b/subprojects/libvhost-user/libvhost-user.c
> > @@ -32,6 +32,12 @@
> >  #include <sys/mman.h>
> >  #include <endian.h>
> >
> > +/* Necessary to provide VIRTIO_F_VERSION_1 on system
> > + * with older linux headers. Must appear before
> > + * <linux/vhost.h> below.
> > + */
> > +#include "standard-headers/linux/virtio_config.h"
> > +
> >  #if defined(__linux__)
> >  #include <sys/syscall.h>
> >  #include <fcntl.h>
> > --
> > 2.40.0.348.gf938b09366-goog
>
>

[-- Attachment #2: Type: text/html, Size: 7253 bytes --]

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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-07  9:24     ` David Turner
@ 2023-04-07  9:25       ` David Turner
  2023-04-07  9:29         ` David Turner
  2023-04-18  8:47         ` Daniel P. Berrangé
  0 siblings, 2 replies; 15+ messages in thread
From: David Turner @ 2023-04-07  9:25 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel

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

I meant glibc-2.17, I am using a sysroot to ensure the generated binaries
run on older Linux distributions.

On Fri, Apr 7, 2023 at 11:24 AM David Turner <digit@google.com> wrote:

> The <linux/vhost.h> of glib-2.17 begins with:
>
> #ifndef _LINUX_VHOST_H
> #define _LINUX_VHOST_H
> /* Userspace interface for in-kernel virtio accelerators. */
> /* vhost is used to reduce the number of system calls involved in virtio.
>  *
>  * Existing virtio net code is used in the guest without modification.
>  *
>  * This header includes interface used by userspace hypervisor for
>  * device configuration.
>  */
> #include <linux/types.h>
> #include <linux/ioctl.h>
> #include <linux/virtio_config.h>
> #include <linux/virtio_ring.h>
>
>
> See
> https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/+/refs/heads/master/sysroot/usr/include/linux/vhost.h
>
> Here's the compilation error I get in this case:
>
> FAILED: subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o
>
> /src/prebuilts/clang/clang-r487747/bin/clang --sysroot=/out/sysroot -m64
> -mcx16 -Isubprojects/libvhost-user/libvhost-user.a.p
> -Isubprojects/libvhost-user -I../../
> src/third_party/qemu/subprojects/libvhost-user
> -I/out/dest-install/usr/include -fcolor-diagnostics -Wall -Winvalid-pch
> -std=gnu99 -O2 -g -Wsign-compare -Wdeclarat
> ion-after-statement -Wstrict-aliasing -fno-pie -D_FILE_OFFSET_BITS=64
> -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -Wundef
> -Wwrite-strings -Wmissi
> ng-prototypes -Wstrict-prototypes -Wredundant-decls -Wold-style-definition
> -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self
> -Wignored-qualifiers -Wempty-b
> ody -Wnested-externs -Wendif-labels -Wexpansion-to-defined
> -Wmissing-format-attribute -Wthread-safety -Wno-initializer-overrides
> -Wno-missing-include-dirs -Wno-sh
> ift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition
> -Wno-tautological-type-limit-compare -Wno-psabi
> -Wno-gnu-variable-sized-type-not-at-end -fstack-
> protector-strong -pthread -D_GNU_SOURCE -MD -MQ
> subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o -MF
> subprojects/libvhost-user/libvhost-user.a.p/libv
> host-user.c.o.d -o
> subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o -c
> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c
>
> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:529:17:
> error: use of undeclared identifier 'VIRTIO_F_VERSION_1'
>
>         1ULL << VIRTIO_F_VERSION_1 |
>
>                 ^
> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:563:30:
> error: use of undeclared identifier 'VIRTIO_F_VERSION_1'
>
>     if (!vu_has_feature(dev, VIRTIO_F_VERSION_1)) {
>
>                              ^
> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:632:22:
> warning: unused variable 'dev_region' [-Wunused-variable]
>
>         VuDevRegion *dev_region = &dev->regions[i];
>
>                      ^
> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:633:13:
> warning: unused variable 'ret' [-Wunused-variable]
>
>         int ret;
>
>             ^
> 2 warnings and 2 errors generated.
>
>
> On Fri, Apr 7, 2023 at 10:03 AM Michael S. Tsirkin <mst@redhat.com> wrote:
>
>> If you are reposting, please version patchsets, E.g.
>> -v2 flag for git format-patch will enerate [PATCH v2] for you.
>>
>> Repeating what I said on previous version:
>>
>> On Wed, Apr 05, 2023 at 07:21:07PM +0200, David 'Digit' Turner wrote:
>> > The source file uses VIRTIO_F_VERSION_1 which is
>> > not defined by <linux/virtio_config.h> on Debian 10.
>> >
>> > The system-provided <linux/virtio_config.h> which
>> > does not include the macro definition is included
>> > through <linux/vhost.h>, so fix the issue by including
>> > the standard-headers version before that.
>> >
>> > Signed-off-by: David 'Digit' Turner <digit@google.com>
>>
>> This happens to work usually but there's no guarantee
>> "standard-headers/linux/virtio_config.h"
>> and <linux/virtio_config.h> are interchangeable or
>> even do not conflict.
>>
>> But where is <linux/vhost.h> using <linux/virtio_config.h>?
>> Everyone should be using "standard-headers/linux/virtio_config.h".
>>
>>
>> > ---
>> >  subprojects/libvhost-user/libvhost-user.c | 6 ++++++
>> >  1 file changed, 6 insertions(+)
>> >
>> > diff --git a/subprojects/libvhost-user/libvhost-user.c
>> b/subprojects/libvhost-user/libvhost-user.c
>> > index 0200b78e8e..0a5768cb55 100644
>> > --- a/subprojects/libvhost-user/libvhost-user.c
>> > +++ b/subprojects/libvhost-user/libvhost-user.c
>> > @@ -32,6 +32,12 @@
>> >  #include <sys/mman.h>
>> >  #include <endian.h>
>> >
>> > +/* Necessary to provide VIRTIO_F_VERSION_1 on system
>> > + * with older linux headers. Must appear before
>> > + * <linux/vhost.h> below.
>> > + */
>> > +#include "standard-headers/linux/virtio_config.h"
>> > +
>> >  #if defined(__linux__)
>> >  #include <sys/syscall.h>
>> >  #include <fcntl.h>
>> > --
>> > 2.40.0.348.gf938b09366-goog
>>
>>

[-- Attachment #2: Type: text/html, Size: 7756 bytes --]

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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-07  9:25       ` David Turner
@ 2023-04-07  9:29         ` David Turner
  2023-04-07  9:46           ` Michael S. Tsirkin
  2023-04-07  9:47           ` David Turner
  2023-04-18  8:47         ` Daniel P. Berrangé
  1 sibling, 2 replies; 15+ messages in thread
From: David Turner @ 2023-04-07  9:29 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel

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

So it looks like that for some reason, the QEMU linux-headers directory is
not in the include search path for this compilation command, and that the
system-or-sysroot provided <linux/vhost.h> is picked instead. Fixing this
might be a better long-term fix than what I am proposing in this patch. I
am not sure how to do that yet though. Do you have any recommendations?


On Fri, Apr 7, 2023 at 11:25 AM David Turner <digit@google.com> wrote:

> I meant glibc-2.17, I am using a sysroot to ensure the generated binaries
> run on older Linux distributions.
>
> On Fri, Apr 7, 2023 at 11:24 AM David Turner <digit@google.com> wrote:
>
>> The <linux/vhost.h> of glib-2.17 begins with:
>>
>> #ifndef _LINUX_VHOST_H
>> #define _LINUX_VHOST_H
>> /* Userspace interface for in-kernel virtio accelerators. */
>> /* vhost is used to reduce the number of system calls involved in virtio.
>>  *
>>  * Existing virtio net code is used in the guest without modification.
>>  *
>>  * This header includes interface used by userspace hypervisor for
>>  * device configuration.
>>  */
>> #include <linux/types.h>
>> #include <linux/ioctl.h>
>> #include <linux/virtio_config.h>
>> #include <linux/virtio_ring.h>
>>
>>
>> See
>> https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/+/refs/heads/master/sysroot/usr/include/linux/vhost.h
>>
>> Here's the compilation error I get in this case:
>>
>> FAILED: subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o
>>
>> /src/prebuilts/clang/clang-r487747/bin/clang --sysroot=/out/sysroot -m64
>> -mcx16 -Isubprojects/libvhost-user/libvhost-user.a.p
>> -Isubprojects/libvhost-user -I../../
>> src/third_party/qemu/subprojects/libvhost-user
>> -I/out/dest-install/usr/include -fcolor-diagnostics -Wall -Winvalid-pch
>> -std=gnu99 -O2 -g -Wsign-compare -Wdeclarat
>> ion-after-statement -Wstrict-aliasing -fno-pie -D_FILE_OFFSET_BITS=64
>> -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -Wundef
>> -Wwrite-strings -Wmissi
>> ng-prototypes -Wstrict-prototypes -Wredundant-decls
>> -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k
>> -Winit-self -Wignored-qualifiers -Wempty-b
>> ody -Wnested-externs -Wendif-labels -Wexpansion-to-defined
>> -Wmissing-format-attribute -Wthread-safety -Wno-initializer-overrides
>> -Wno-missing-include-dirs -Wno-sh
>> ift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition
>> -Wno-tautological-type-limit-compare -Wno-psabi
>> -Wno-gnu-variable-sized-type-not-at-end -fstack-
>> protector-strong -pthread -D_GNU_SOURCE -MD -MQ
>> subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o -MF
>> subprojects/libvhost-user/libvhost-user.a.p/libv
>> host-user.c.o.d -o
>> subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o -c
>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c
>>
>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:529:17:
>> error: use of undeclared identifier 'VIRTIO_F_VERSION_1'
>>
>>         1ULL << VIRTIO_F_VERSION_1 |
>>
>>                 ^
>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:563:30:
>> error: use of undeclared identifier 'VIRTIO_F_VERSION_1'
>>
>>     if (!vu_has_feature(dev, VIRTIO_F_VERSION_1)) {
>>
>>                              ^
>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:632:22:
>> warning: unused variable 'dev_region' [-Wunused-variable]
>>
>>         VuDevRegion *dev_region = &dev->regions[i];
>>
>>                      ^
>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:633:13:
>> warning: unused variable 'ret' [-Wunused-variable]
>>
>>         int ret;
>>
>>             ^
>> 2 warnings and 2 errors generated.
>>
>>
>> On Fri, Apr 7, 2023 at 10:03 AM Michael S. Tsirkin <mst@redhat.com>
>> wrote:
>>
>>> If you are reposting, please version patchsets, E.g.
>>> -v2 flag for git format-patch will enerate [PATCH v2] for you.
>>>
>>> Repeating what I said on previous version:
>>>
>>> On Wed, Apr 05, 2023 at 07:21:07PM +0200, David 'Digit' Turner wrote:
>>> > The source file uses VIRTIO_F_VERSION_1 which is
>>> > not defined by <linux/virtio_config.h> on Debian 10.
>>> >
>>> > The system-provided <linux/virtio_config.h> which
>>> > does not include the macro definition is included
>>> > through <linux/vhost.h>, so fix the issue by including
>>> > the standard-headers version before that.
>>> >
>>> > Signed-off-by: David 'Digit' Turner <digit@google.com>
>>>
>>> This happens to work usually but there's no guarantee
>>> "standard-headers/linux/virtio_config.h"
>>> and <linux/virtio_config.h> are interchangeable or
>>> even do not conflict.
>>>
>>> But where is <linux/vhost.h> using <linux/virtio_config.h>?
>>> Everyone should be using "standard-headers/linux/virtio_config.h".
>>>
>>>
>>> > ---
>>> >  subprojects/libvhost-user/libvhost-user.c | 6 ++++++
>>> >  1 file changed, 6 insertions(+)
>>> >
>>> > diff --git a/subprojects/libvhost-user/libvhost-user.c
>>> b/subprojects/libvhost-user/libvhost-user.c
>>> > index 0200b78e8e..0a5768cb55 100644
>>> > --- a/subprojects/libvhost-user/libvhost-user.c
>>> > +++ b/subprojects/libvhost-user/libvhost-user.c
>>> > @@ -32,6 +32,12 @@
>>> >  #include <sys/mman.h>
>>> >  #include <endian.h>
>>> >
>>> > +/* Necessary to provide VIRTIO_F_VERSION_1 on system
>>> > + * with older linux headers. Must appear before
>>> > + * <linux/vhost.h> below.
>>> > + */
>>> > +#include "standard-headers/linux/virtio_config.h"
>>> > +
>>> >  #if defined(__linux__)
>>> >  #include <sys/syscall.h>
>>> >  #include <fcntl.h>
>>> > --
>>> > 2.40.0.348.gf938b09366-goog
>>>
>>>

[-- Attachment #2: Type: text/html, Size: 8513 bytes --]

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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-07  9:29         ` David Turner
@ 2023-04-07  9:46           ` Michael S. Tsirkin
  2023-04-07  9:49             ` David Turner
  2023-04-07  9:47           ` David Turner
  1 sibling, 1 reply; 15+ messages in thread
From: Michael S. Tsirkin @ 2023-04-07  9:46 UTC (permalink / raw)
  To: David Turner; +Cc: qemu-devel

On Fri, Apr 07, 2023 at 11:29:46AM +0200, David Turner wrote:
> So it looks like that for some reason, the QEMU linux-headers directory is not
> in the include search path for this compilation command, and that the
> system-or-sysroot provided <linux/vhost.h> is picked instead. Fixing this might
> be a better long-term fix than what I am proposing in this patch. I am not sure
> how to do that yet though. Do you have any recommendations?

Check what flags are passed to the compiler :)
meson.build has:

if targetos == 'linux'
  add_project_arguments('-isystem', meson.current_source_dir() / 'linux-headers',
                        '-isystem', 'linux-headers',
                        language: all_languages)
endif


-- 
MST



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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-07  9:29         ` David Turner
  2023-04-07  9:46           ` Michael S. Tsirkin
@ 2023-04-07  9:47           ` David Turner
  2023-04-07 10:01             ` Michael S. Tsirkin
  1 sibling, 1 reply; 15+ messages in thread
From: David Turner @ 2023-04-07  9:47 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel

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

Digging a little further, the top-level meson.build for qemu has the
following:

if targetos == 'linux'
  add_project_arguments('-isystem', meson.current_source_dir() /
'linux-headers',
                        '-isystem', 'linux-headers',
                        language: all_languages)
endif


But this does not carry to the subprojects (and there is nothing equivalent
in subprojects/libvhost-user/meson.build)/
If I change the above to use add_global_arguments() instead, compilation
succeeds.

I don´t know if this is going to break other things though, but I'd be
happy to change the patch to do that instead.


On Fri, Apr 7, 2023 at 11:29 AM David Turner <digit@google.com> wrote:

> So it looks like that for some reason, the QEMU linux-headers directory is
> not in the include search path for this compilation command, and that the
> system-or-sysroot provided <linux/vhost.h> is picked instead. Fixing this
> might be a better long-term fix than what I am proposing in this patch. I
> am not sure how to do that yet though. Do you have any recommendations?
>
>
> On Fri, Apr 7, 2023 at 11:25 AM David Turner <digit@google.com> wrote:
>
>> I meant glibc-2.17, I am using a sysroot to ensure the generated binaries
>> run on older Linux distributions.
>>
>> On Fri, Apr 7, 2023 at 11:24 AM David Turner <digit@google.com> wrote:
>>
>>> The <linux/vhost.h> of glib-2.17 begins with:
>>>
>>> #ifndef _LINUX_VHOST_H
>>> #define _LINUX_VHOST_H
>>> /* Userspace interface for in-kernel virtio accelerators. */
>>> /* vhost is used to reduce the number of system calls involved in virtio.
>>>  *
>>>  * Existing virtio net code is used in the guest without modification.
>>>  *
>>>  * This header includes interface used by userspace hypervisor for
>>>  * device configuration.
>>>  */
>>> #include <linux/types.h>
>>> #include <linux/ioctl.h>
>>> #include <linux/virtio_config.h>
>>> #include <linux/virtio_ring.h>
>>>
>>>
>>> See
>>> https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/+/refs/heads/master/sysroot/usr/include/linux/vhost.h
>>>
>>> Here's the compilation error I get in this case:
>>>
>>> FAILED: subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o
>>>
>>> /src/prebuilts/clang/clang-r487747/bin/clang --sysroot=/out/sysroot -m64
>>> -mcx16 -Isubprojects/libvhost-user/libvhost-user.a.p
>>> -Isubprojects/libvhost-user -I../../
>>> src/third_party/qemu/subprojects/libvhost-user
>>> -I/out/dest-install/usr/include -fcolor-diagnostics -Wall -Winvalid-pch
>>> -std=gnu99 -O2 -g -Wsign-compare -Wdeclarat
>>> ion-after-statement -Wstrict-aliasing -fno-pie -D_FILE_OFFSET_BITS=64
>>> -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -Wundef
>>> -Wwrite-strings -Wmissi
>>> ng-prototypes -Wstrict-prototypes -Wredundant-decls
>>> -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k
>>> -Winit-self -Wignored-qualifiers -Wempty-b
>>> ody -Wnested-externs -Wendif-labels -Wexpansion-to-defined
>>> -Wmissing-format-attribute -Wthread-safety -Wno-initializer-overrides
>>> -Wno-missing-include-dirs -Wno-sh
>>> ift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition
>>> -Wno-tautological-type-limit-compare -Wno-psabi
>>> -Wno-gnu-variable-sized-type-not-at-end -fstack-
>>> protector-strong -pthread -D_GNU_SOURCE -MD -MQ
>>> subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o -MF
>>> subprojects/libvhost-user/libvhost-user.a.p/libv
>>> host-user.c.o.d -o
>>> subprojects/libvhost-user/libvhost-user.a.p/libvhost-user.c.o -c
>>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c
>>>
>>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:529:17:
>>> error: use of undeclared identifier 'VIRTIO_F_VERSION_1'
>>>
>>>         1ULL << VIRTIO_F_VERSION_1 |
>>>
>>>                 ^
>>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:563:30:
>>> error: use of undeclared identifier 'VIRTIO_F_VERSION_1'
>>>
>>>     if (!vu_has_feature(dev, VIRTIO_F_VERSION_1)) {
>>>
>>>                              ^
>>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:632:22:
>>> warning: unused variable 'dev_region' [-Wunused-variable]
>>>
>>>         VuDevRegion *dev_region = &dev->regions[i];
>>>
>>>                      ^
>>> ../../src/third_party/qemu/subprojects/libvhost-user/libvhost-user.c:633:13:
>>> warning: unused variable 'ret' [-Wunused-variable]
>>>
>>>         int ret;
>>>
>>>             ^
>>> 2 warnings and 2 errors generated.
>>>
>>>
>>> On Fri, Apr 7, 2023 at 10:03 AM Michael S. Tsirkin <mst@redhat.com>
>>> wrote:
>>>
>>>> If you are reposting, please version patchsets, E.g.
>>>> -v2 flag for git format-patch will enerate [PATCH v2] for you.
>>>>
>>>> Repeating what I said on previous version:
>>>>
>>>> On Wed, Apr 05, 2023 at 07:21:07PM +0200, David 'Digit' Turner wrote:
>>>> > The source file uses VIRTIO_F_VERSION_1 which is
>>>> > not defined by <linux/virtio_config.h> on Debian 10.
>>>> >
>>>> > The system-provided <linux/virtio_config.h> which
>>>> > does not include the macro definition is included
>>>> > through <linux/vhost.h>, so fix the issue by including
>>>> > the standard-headers version before that.
>>>> >
>>>> > Signed-off-by: David 'Digit' Turner <digit@google.com>
>>>>
>>>> This happens to work usually but there's no guarantee
>>>> "standard-headers/linux/virtio_config.h"
>>>> and <linux/virtio_config.h> are interchangeable or
>>>> even do not conflict.
>>>>
>>>> But where is <linux/vhost.h> using <linux/virtio_config.h>?
>>>> Everyone should be using "standard-headers/linux/virtio_config.h".
>>>>
>>>>
>>>> > ---
>>>> >  subprojects/libvhost-user/libvhost-user.c | 6 ++++++
>>>> >  1 file changed, 6 insertions(+)
>>>> >
>>>> > diff --git a/subprojects/libvhost-user/libvhost-user.c
>>>> b/subprojects/libvhost-user/libvhost-user.c
>>>> > index 0200b78e8e..0a5768cb55 100644
>>>> > --- a/subprojects/libvhost-user/libvhost-user.c
>>>> > +++ b/subprojects/libvhost-user/libvhost-user.c
>>>> > @@ -32,6 +32,12 @@
>>>> >  #include <sys/mman.h>
>>>> >  #include <endian.h>
>>>> >
>>>> > +/* Necessary to provide VIRTIO_F_VERSION_1 on system
>>>> > + * with older linux headers. Must appear before
>>>> > + * <linux/vhost.h> below.
>>>> > + */
>>>> > +#include "standard-headers/linux/virtio_config.h"
>>>> > +
>>>> >  #if defined(__linux__)
>>>> >  #include <sys/syscall.h>
>>>> >  #include <fcntl.h>
>>>> > --
>>>> > 2.40.0.348.gf938b09366-goog
>>>>
>>>>

[-- Attachment #2: Type: text/html, Size: 9857 bytes --]

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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-07  9:46           ` Michael S. Tsirkin
@ 2023-04-07  9:49             ` David Turner
  0 siblings, 0 replies; 15+ messages in thread
From: David Turner @ 2023-04-07  9:49 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel

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

On Fri, Apr 7, 2023 at 11:46 AM Michael S. Tsirkin <mst@redhat.com> wrote:

> On Fri, Apr 07, 2023 at 11:29:46AM +0200, David Turner wrote:
> > So it looks like that for some reason, the QEMU linux-headers directory
> is not
> > in the include search path for this compilation command, and that the
> > system-or-sysroot provided <linux/vhost.h> is picked instead. Fixing
> this might
> > be a better long-term fix than what I am proposing in this patch. I am
> not sure
> > how to do that yet though. Do you have any recommendations?
>
> Check what flags are passed to the compiler :)
>

That's what I did :-)

meson.build has:
>
> if targetos == 'linux'
>   add_project_arguments('-isystem', meson.current_source_dir() /
> 'linux-headers',
>                         '-isystem', 'linux-headers',
>                         language: all_languages)
> endif
>
> add_project_arguments() does not apply the arguments to subprojects, hence
why this fails for subprojects/libvhost-user /


> --
> MST
>
>

[-- Attachment #2: Type: text/html, Size: 1770 bytes --]

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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-07  9:47           ` David Turner
@ 2023-04-07 10:01             ` Michael S. Tsirkin
  0 siblings, 0 replies; 15+ messages in thread
From: Michael S. Tsirkin @ 2023-04-07 10:01 UTC (permalink / raw)
  To: David Turner; +Cc: qemu-devel

On Fri, Apr 07, 2023 at 11:47:50AM +0200, David Turner wrote:
> Digging a little further, the top-level meson.build for qemu has the following:
> 
> 
>     if targetos == 'linux'
>       add_project_arguments('-isystem', meson.current_source_dir() /
>     'linux-headers',
>                             '-isystem', 'linux-headers',
>                             language: all_languages)
>     endif
> 
> 
> But this does not carry to the subprojects (and there is nothing equivalent in
> subprojects/libvhost-user/meson.build)/
> If I change the above to use add_global_arguments() instead, compilation
> succeeds.
> 
> I don´t know if this is going to break other things though, but I'd be happy to
> change the patch to do that instead.

Or just add above lines to libvhost-user. That's probably safer.

-- 
MST



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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-07  9:25       ` David Turner
  2023-04-07  9:29         ` David Turner
@ 2023-04-18  8:47         ` Daniel P. Berrangé
  2023-04-18 11:04           ` David Turner
  1 sibling, 1 reply; 15+ messages in thread
From: Daniel P. Berrangé @ 2023-04-18  8:47 UTC (permalink / raw)
  To: David Turner; +Cc: Michael S. Tsirkin, qemu-devel

On Fri, Apr 07, 2023 at 11:25:14AM +0200, David Turner wrote:
> I meant glibc-2.17, I am using a sysroot to ensure the generated binaries
> run on older Linux distributions.

I think that would be considered an unsupported buld configuration
from QEMU's POV. Our platform policy is declared here:

  https://www.qemu.org/docs/master/about/build-platforms.html

and from this policy we decide the minimum versions of libraries
we intend to build against.

Our two oldest build targets are Debian 10 / RHEL 8, both of
which ship with GLibC 2.28.

IOW, trying to build with a sysroot contanining ancient glibc
2.17 is well outside what QEMU intends to support. 2.17 is
from circa 2012.


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-18  8:47         ` Daniel P. Berrangé
@ 2023-04-18 11:04           ` David Turner
  0 siblings, 0 replies; 15+ messages in thread
From: David Turner @ 2023-04-18 11:04 UTC (permalink / raw)
  To: Daniel P. Berrangé; +Cc: Michael S. Tsirkin, qemu-devel

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

On Tue, Apr 18, 2023 at 10:47 AM Daniel P. Berrangé <berrange@redhat.com>
wrote:

> On Fri, Apr 07, 2023 at 11:25:14AM +0200, David Turner wrote:
> > I meant glibc-2.17, I am using a sysroot to ensure the generated binaries
> > run on older Linux distributions.
>
> I think that would be considered an unsupported buld configuration
> from QEMU's POV. Our platform policy is declared here:
>
>   https://www.qemu.org/docs/master/about/build-platforms.html
>
> and from this policy we decide the minimum versions of libraries
> we intend to build against.
>
> Our two oldest build targets are Debian 10 / RHEL 8, both of
> which ship with GLibC 2.28.
>
> IOW, trying to build with a sysroot contanining ancient glibc
> 2.17 is well outside what QEMU intends to support. 2.17 is
> from circa 2012.
>
> Thank you for the clarification. My use of 2.17 is purely accidental at
that point (just reusing this Android prebuilt sysroot
<https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/>
which is quite dated).
I will try with a Debian 10 based sysroot first and will let you know.
Maybe these patches are not needed after all.

>
> With regards,
> Daniel
> --
> |: https://berrange.com      -o-
> https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org         -o-
> https://fstop138.berrange.com :|
> |: https://entangle-photo.org    -o-
> https://www.instagram.com/dberrange :|
>
>

[-- Attachment #2: Type: text/html, Size: 2597 bytes --]

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

* Re: [PATCH 1/3] Fix libvhost-user.c compilation.
  2023-04-05 17:21 ` [PATCH 1/3] Fix libvhost-user.c compilation David 'Digit' Turner
  2023-04-07  8:03   ` Michael S. Tsirkin
@ 2023-04-18 11:47   ` Michael S. Tsirkin
  1 sibling, 0 replies; 15+ messages in thread
From: Michael S. Tsirkin @ 2023-04-18 11:47 UTC (permalink / raw)
  To: David 'Digit' Turner; +Cc: qemu-devel

On Wed, Apr 05, 2023 at 07:21:07PM +0200, David 'Digit' Turner wrote:
> The source file uses VIRTIO_F_VERSION_1 which is
> not defined by <linux/virtio_config.h> on Debian 10.
> 
> The system-provided <linux/virtio_config.h> which
> does not include the macro definition is included
> through <linux/vhost.h>, so fix the issue by including
> the standard-headers version before that.
> 
> Signed-off-by: David 'Digit' Turner <digit@google.com>

And maybe we want to use linux-headers on Linux then?

> ---
>  subprojects/libvhost-user/libvhost-user.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c
> index 0200b78e8e..0a5768cb55 100644
> --- a/subprojects/libvhost-user/libvhost-user.c
> +++ b/subprojects/libvhost-user/libvhost-user.c
> @@ -32,6 +32,12 @@
>  #include <sys/mman.h>
>  #include <endian.h>
>  
> +/* Necessary to provide VIRTIO_F_VERSION_1 on system
> + * with older linux headers. Must appear before
> + * <linux/vhost.h> below.
> + */
> +#include "standard-headers/linux/virtio_config.h"
> +
>  #if defined(__linux__)
>  #include <sys/syscall.h>
>  #include <fcntl.h>
> -- 
> 2.40.0.348.gf938b09366-goog



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

end of thread, other threads:[~2023-04-18 11:47 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-05 17:21 [PATCH v2] Fix QEMU compilation on Debian 10 David 'Digit' Turner
2023-04-05 17:21 ` [PATCH 1/3] Fix libvhost-user.c compilation David 'Digit' Turner
2023-04-07  8:03   ` Michael S. Tsirkin
2023-04-07  9:24     ` David Turner
2023-04-07  9:25       ` David Turner
2023-04-07  9:29         ` David Turner
2023-04-07  9:46           ` Michael S. Tsirkin
2023-04-07  9:49             ` David Turner
2023-04-07  9:47           ` David Turner
2023-04-07 10:01             ` Michael S. Tsirkin
2023-04-18  8:47         ` Daniel P. Berrangé
2023-04-18 11:04           ` David Turner
2023-04-18 11:47   ` Michael S. Tsirkin
2023-04-05 17:21 ` [PATCH 2/3] update-linux-headers.sh: Add missing kernel headers David 'Digit' Turner
2023-04-05 17:21 ` [PATCH 3/3] Update linux headers to v6.3rc5 David 'Digit' Turner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).