Commit 41e3175a authored by Tina Zhang's avatar Tina Zhang Committed by Zheng Zengkai
Browse files

vfio: Use capability chains to handle device specific irq

virt inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I401IF


CVE: NA

------------------------------

Caps the number of irqs with fixed indexes and uses capability chains
to chain device specific irqs.

Signed-off-by: default avatarTina Zhang <tina.zhang@intel.com>
Signed-off-by: default avatarEric Auger <eric.auger@redhat.com>
Signed-off-by: default avatarKunkun <Jiang&lt;jiangkunkun@huawei.com>
[Eric: Put cap_offset at the end of the vfio_irq_info struct,
remove GFX IRQ at the moment and remove any reference to this latter
in the commit message]
Reviewed-by: default avatarKeqian Zhu <zhukeqian1@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent e57dd79b
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -712,11 +712,27 @@ struct vfio_irq_info {
#define VFIO_IRQ_INFO_MASKABLE		(1 << 1)
#define VFIO_IRQ_INFO_AUTOMASKED	(1 << 2)
#define VFIO_IRQ_INFO_NORESIZE		(1 << 3)
#define VFIO_IRQ_INFO_FLAG_CAPS		(1 << 4) /* Info supports caps */
	__u32	index;		/* IRQ index */
	__u32	count;		/* Number of IRQs within this index */
	__u32	cap_offset;	/* Offset within info struct of first cap */
};
#define VFIO_DEVICE_GET_IRQ_INFO	_IO(VFIO_TYPE, VFIO_BASE + 9)

/*
 * The irq type capability allows IRQs unique to a specific device or
 * class of devices to be exposed.
 *
 * The structures below define version 1 of this capability.
 */
#define VFIO_IRQ_INFO_CAP_TYPE      3

struct vfio_irq_info_cap_type {
	struct vfio_info_cap_header header;
	__u32 type;     /* global per bus driver */
	__u32 subtype;  /* type specific */
};

/**
 * VFIO_DEVICE_SET_IRQS - _IOW(VFIO_TYPE, VFIO_BASE + 10, struct vfio_irq_set)
 *
@@ -818,7 +834,8 @@ enum {
	VFIO_PCI_MSIX_IRQ_INDEX,
	VFIO_PCI_ERR_IRQ_INDEX,
	VFIO_PCI_REQ_IRQ_INDEX,
	VFIO_PCI_NUM_IRQS
	VFIO_PCI_NUM_IRQS = 5	/* Fixed user ABI, IRQ indexes >=5 use   */
				/* device specific cap to define content */
};

/*