On 06/07/2015 04:10, Alexey Kardashevskiy wrote: > This updates linux-headers against master 4.2-rc1 (commit > d770e558e21961ad6cfdf0ff7df0eb5d7d4f0754). This is the result of > ./scripts/update-linux-headers.sh work. > > Cc: Paolo Bonzini <pbonz...@redhat.com> > Cc: Michael S. Tsirkin <m...@redhat.com> > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> > --- > > This is for DDW support on sPAPR. > --- > include/standard-headers/linux/input.h | 10 +- > include/standard-headers/linux/virtio_balloon.h | 1 + > include/standard-headers/linux/virtio_gpu.h | 2 + > linux-headers/asm-x86/hyperv.h | 11 ++ > linux-headers/linux/kvm.h | 2 +- > linux-headers/linux/vfio.h | 102 ++++++++++++- > linux-headers/linux/virtio_pci.h | 192 > ------------------------ > 7 files changed, 121 insertions(+), 199 deletions(-) > delete mode 100644 linux-headers/linux/virtio_pci.h > > diff --git a/include/standard-headers/linux/input.h > b/include/standard-headers/linux/input.h > index b94d365..a459dd2 100644 > --- a/include/standard-headers/linux/input.h > +++ b/include/standard-headers/linux/input.h > @@ -367,7 +367,8 @@ struct input_keymap_entry { > #define KEY_MSDOS 151 > #define KEY_COFFEE 152 /* AL Terminal Lock/Screensaver */ > #define KEY_SCREENLOCK KEY_COFFEE > -#define KEY_DIRECTION 153 > +#define KEY_ROTATE_DISPLAY 153 /* Display orientation for e.g. tablets > */ > +#define KEY_DIRECTION KEY_ROTATE_DISPLAY > #define KEY_CYCLEWINDOWS 154 > #define KEY_MAIL 155 > #define KEY_BOOKMARKS 156 /* AC Bookmarks */ > @@ -700,6 +701,10 @@ struct input_keymap_entry { > #define KEY_NUMERIC_9 0x209 > #define KEY_NUMERIC_STAR 0x20a > #define KEY_NUMERIC_POUND 0x20b > +#define KEY_NUMERIC_A 0x20c /* Phone key A - HUT Telephony > 0xb9 */ > +#define KEY_NUMERIC_B 0x20d > +#define KEY_NUMERIC_C 0x20e > +#define KEY_NUMERIC_D 0x20f > > #define KEY_CAMERA_FOCUS 0x210 > #define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */ > @@ -971,7 +976,8 @@ struct input_keymap_entry { > */ > #define MT_TOOL_FINGER 0 > #define MT_TOOL_PEN 1 > -#define MT_TOOL_MAX 1 > +#define MT_TOOL_PALM 2 > +#define MT_TOOL_MAX 2 > > /* > * Values describing the status of a force-feedback effect > diff --git a/include/standard-headers/linux/virtio_balloon.h > b/include/standard-headers/linux/virtio_balloon.h > index 88ada1d..2e2a6dc 100644 > --- a/include/standard-headers/linux/virtio_balloon.h > +++ b/include/standard-headers/linux/virtio_balloon.h > @@ -26,6 +26,7 @@ > * 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_types.h" > #include "standard-headers/linux/virtio_ids.h" > #include "standard-headers/linux/virtio_config.h" > > diff --git a/include/standard-headers/linux/virtio_gpu.h > b/include/standard-headers/linux/virtio_gpu.h > index cfcfb46..72ef815 100644 > --- a/include/standard-headers/linux/virtio_gpu.h > +++ b/include/standard-headers/linux/virtio_gpu.h > @@ -38,6 +38,8 @@ > #ifndef VIRTIO_GPU_HW_H > #define VIRTIO_GPU_HW_H > > +#include "standard-headers/linux/types.h" > + > enum virtio_gpu_ctrl_type { > VIRTIO_GPU_UNDEFINED = 0, > > diff --git a/linux-headers/asm-x86/hyperv.h b/linux-headers/asm-x86/hyperv.h > index ce6068d..8fba544 100644 > --- a/linux-headers/asm-x86/hyperv.h > +++ b/linux-headers/asm-x86/hyperv.h > @@ -199,6 +199,17 @@ > #define HV_X64_MSR_STIMER3_CONFIG 0x400000B6 > #define HV_X64_MSR_STIMER3_COUNT 0x400000B7 > > +/* Hyper-V guest crash notification MSR's */ > +#define HV_X64_MSR_CRASH_P0 0x40000100 > +#define HV_X64_MSR_CRASH_P1 0x40000101 > +#define HV_X64_MSR_CRASH_P2 0x40000102 > +#define HV_X64_MSR_CRASH_P3 0x40000103 > +#define HV_X64_MSR_CRASH_P4 0x40000104 > +#define HV_X64_MSR_CRASH_CTL 0x40000105 > +#define HV_X64_MSR_CRASH_CTL_NOTIFY (1ULL << 63) > +#define HV_X64_MSR_CRASH_PARAMS \ > + (1 + (HV_X64_MSR_CRASH_P4 - HV_X64_MSR_CRASH_P0)) > + > #define HV_X64_MSR_HYPERCALL_ENABLE 0x00000001 > #define HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_SHIFT 12 > #define HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_MASK \ > diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h > index fad9e5c..3bac873 100644 > --- a/linux-headers/linux/kvm.h > +++ b/linux-headers/linux/kvm.h > @@ -897,7 +897,7 @@ struct kvm_xen_hvm_config { > * > * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies > * the irqfd to operate in resampling mode for level triggered interrupt > - * emlation. See Documentation/virtual/kvm/api.txt. > + * emulation. See Documentation/virtual/kvm/api.txt. > */ > #define KVM_IRQFD_FLAG_RESAMPLE (1 << 1) > > diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h > index 0508d0b..aa276bc 100644 > --- a/linux-headers/linux/vfio.h > +++ b/linux-headers/linux/vfio.h > @@ -36,6 +36,8 @@ > /* Two-stage IOMMU */ > #define VFIO_TYPE1_NESTING_IOMMU 6 /* Implies v2 */ > > +#define VFIO_SPAPR_TCE_v2_IOMMU 7 > + > /* > * The IOCTL interface is designed for extensibility by embedding the > * structure length (argsz) and flags into structures passed between > @@ -443,6 +445,23 @@ struct vfio_iommu_type1_dma_unmap { > /* -------- Additional API for SPAPR TCE (Server POWERPC) IOMMU -------- */ > > /* > + * The SPAPR TCE DDW info struct provides the information about > + * the details of Dynamic DMA window capability. > + * > + * @pgsizes contains a page size bitmask, 4K/64K/16M are supported. > + * @max_dynamic_windows_supported tells the maximum number of windows > + * which the platform can create. > + * @levels tells the maximum number of levels in multi-level IOMMU tables; > + * this allows splitting a table into smaller chunks which reduces > + * the amount of physically contiguous memory required for the table. > + */ > +struct vfio_iommu_spapr_tce_ddw_info { > + __u64 pgsizes; /* Bitmap of supported page sizes */ > + __u32 max_dynamic_windows_supported; > + __u32 levels; > +}; > + > +/* > * The SPAPR TCE info struct provides the information about the PCI bus > * address ranges available for DMA, these values are programmed into > * the hardware so the guest has to know that information. > @@ -452,14 +471,17 @@ struct vfio_iommu_type1_dma_unmap { > * addresses too so the window works as a filter rather than an offset > * for IOVA addresses. > * > - * A flag will need to be added if other page sizes are supported, > - * so as defined here, it is always 4k. > + * Flags supported: > + * - VFIO_IOMMU_SPAPR_INFO_DDW: informs the userspace that dynamic DMA > windows > + * (DDW) support is present. @ddw is only supported when DDW is present. > */ > struct vfio_iommu_spapr_tce_info { > __u32 argsz; > - __u32 flags; /* reserved for future use */ > + __u32 flags; > +#define VFIO_IOMMU_SPAPR_INFO_DDW (1 << 0) /* DDW supported */ > __u32 dma32_window_start; /* 32 bit window start (bytes) */ > __u32 dma32_window_size; /* 32 bit window size (bytes) */ > + struct vfio_iommu_spapr_tce_ddw_info ddw; > }; > > #define VFIO_IOMMU_SPAPR_TCE_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12) > @@ -470,12 +492,23 @@ struct vfio_iommu_spapr_tce_info { > * - unfreeze IO/DMA for frozen PE; > * - read PE state; > * - reset PE; > - * - configure PE. > + * - configure PE; > + * - inject EEH error. > */ > +struct vfio_eeh_pe_err { > + __u32 type; > + __u32 func; > + __u64 addr; > + __u64 mask; > +}; > + > struct vfio_eeh_pe_op { > __u32 argsz; > __u32 flags; > __u32 op; > + union { > + struct vfio_eeh_pe_err err; > + }; > }; > > #define VFIO_EEH_PE_DISABLE 0 /* Disable EEH functionality */ > @@ -492,9 +525,70 @@ struct vfio_eeh_pe_op { > #define VFIO_EEH_PE_RESET_HOT 6 /* Assert hot reset > */ > #define VFIO_EEH_PE_RESET_FUNDAMENTAL 7 /* Assert fundamental > reset */ > #define VFIO_EEH_PE_CONFIGURE 8 /* PE configuration > */ > +#define VFIO_EEH_PE_INJECT_ERR 9 /* Inject EEH error > */ > > #define VFIO_EEH_PE_OP _IO(VFIO_TYPE, VFIO_BASE + 21) > > +/** > + * VFIO_IOMMU_SPAPR_REGISTER_MEMORY - _IOW(VFIO_TYPE, VFIO_BASE + 17, struct > vfio_iommu_spapr_register_memory) > + * > + * Registers user space memory where DMA is allowed. It pins > + * user pages and does the locked memory accounting so > + * subsequent VFIO_IOMMU_MAP_DMA/VFIO_IOMMU_UNMAP_DMA calls > + * get faster. > + */ > +struct vfio_iommu_spapr_register_memory { > + __u32 argsz; > + __u32 flags; > + __u64 vaddr; /* Process virtual address */ > + __u64 size; /* Size of mapping (bytes) */ > +}; > +#define VFIO_IOMMU_SPAPR_REGISTER_MEMORY _IO(VFIO_TYPE, VFIO_BASE + 17) > + > +/** > + * VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY - _IOW(VFIO_TYPE, VFIO_BASE + 18, > struct vfio_iommu_spapr_register_memory) > + * > + * Unregisters user space memory registered with > + * VFIO_IOMMU_SPAPR_REGISTER_MEMORY. > + * Uses vfio_iommu_spapr_register_memory for parameters. > + */ > +#define VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY _IO(VFIO_TYPE, VFIO_BASE + 18) > + > +/** > + * VFIO_IOMMU_SPAPR_TCE_CREATE - _IOWR(VFIO_TYPE, VFIO_BASE + 19, struct > vfio_iommu_spapr_tce_create) > + * > + * Creates an additional TCE table and programs it (sets a new DMA window) > + * to every IOMMU group in the container. It receives page shift, window > + * size and number of levels in the TCE table being created. > + * > + * It allocates and returns an offset on a PCI bus of the new DMA window. > + */ > +struct vfio_iommu_spapr_tce_create { > + __u32 argsz; > + __u32 flags; > + /* in */ > + __u32 page_shift; > + __u64 window_size; > + __u32 levels; > + /* out */ > + __u64 start_addr; > +}; > +#define VFIO_IOMMU_SPAPR_TCE_CREATE _IO(VFIO_TYPE, VFIO_BASE + 19) > + > +/** > + * VFIO_IOMMU_SPAPR_TCE_REMOVE - _IOW(VFIO_TYPE, VFIO_BASE + 20, struct > vfio_iommu_spapr_tce_remove) > + * > + * Unprograms a TCE table from all groups in the container and destroys it. > + * It receives a PCI bus offset as a window id. > + */ > +struct vfio_iommu_spapr_tce_remove { > + __u32 argsz; > + __u32 flags; > + /* in */ > + __u64 start_addr; > +}; > +#define VFIO_IOMMU_SPAPR_TCE_REMOVE _IO(VFIO_TYPE, VFIO_BASE + 20) > + > /* ***************************************************************** */ > > #endif /* VFIO_H */ > diff --git a/linux-headers/linux/virtio_pci.h > b/linux-headers/linux/virtio_pci.h > deleted file mode 100644 > index 92624e5..0000000 > --- a/linux-headers/linux/virtio_pci.h > +++ /dev/null > @@ -1,192 +0,0 @@ > -/* > - * 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 <aligu...@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 <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 confiuration */ > -#define VIRTIO_PCI_CAP_DEVICE_CFG 4 > - > -/* This is the PCI capability header: */ > -struct virtio_pci_cap { > - __u8 cap_vndr; /* Generic PCI field: PCI_CAP_ID_VNDR */ > - __u8 cap_next; /* Generic PCI field: next ptr. */ > - __u8 cap_len; /* Generic PCI field: capability length */ > - __u8 cfg_type; /* Identifies the structure. */ > - __u8 bar; /* Where to find it. */ > - __u8 padding[3]; /* Pad to full dword. */ > - __le32 offset; /* Offset within bar. */ > - __le32 length; /* Length of the structure, in bytes. */ > -}; > - > -struct virtio_pci_notify_cap { > - struct virtio_pci_cap cap; > - __le32 notify_off_multiplier; /* Multiplier for queue_notify_off. */ > -}; > - > -/* Fields in VIRTIO_PCI_CAP_COMMON_CFG: */ > -struct virtio_pci_common_cfg { > - /* About the whole device. */ > - __le32 device_feature_select; /* read-write */ > - __le32 device_feature; /* read-only */ > - __le32 guest_feature_select; /* read-write */ > - __le32 guest_feature; /* read-write */ > - __le16 msix_config; /* read-write */ > - __le16 num_queues; /* read-only */ > - __u8 device_status; /* read-write */ > - __u8 config_generation; /* read-only */ > - > - /* About a specific virtqueue. */ > - __le16 queue_select; /* read-write */ > - __le16 queue_size; /* read-write, power of 2. */ > - __le16 queue_msix_vector; /* read-write */ > - __le16 queue_enable; /* read-write */ > - __le16 queue_notify_off; /* read-only */ > - __le32 queue_desc_lo; /* read-write */ > - __le32 queue_desc_hi; /* read-write */ > - __le32 queue_avail_lo; /* read-write */ > - __le32 queue_avail_hi; /* read-write */ > - __le32 queue_used_lo; /* read-write */ > - __le32 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 >
I'm adding this patch to my final pull request for 2.4. Paolo