aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2017-05-09 06:51:49 -0400
committerPaolo Bonzini <pbonzini@redhat.com>2017-05-09 06:51:49 -0400
commit36c344f3f1ffc0b1b20abd237b7401dc6687ee8f (patch)
tree24b330a2e62bfc8f576cccdc833b53e1f1b69050 /include
parent03efce6f935f89f90a98997ceea514aeff47b6dc (diff)
parenta2b19e6e2d4bb662a64799541c144fd94f8fb024 (diff)
Merge tag 'kvm-arm-for-v4.12-round2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
Second round of KVM/ARM Changes for v4.12. Changes include: - A fix related to the 32-bit idmap stub - A fix to the bitmask used to deode the operands of an AArch32 CP instruction - We have moved the files shared between arch/arm/kvm and arch/arm64/kvm to virt/kvm/arm - We add support for saving/restoring the virtual ITS state to userspace
Diffstat (limited to 'include')
-rw-r--r--include/kvm/arm_vgic.h5
-rw-r--r--include/linux/irqchip/arm-gic-v3.h14
-rw-r--r--include/linux/kvm_host.h11
3 files changed, 29 insertions, 1 deletions
diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h
index 581a59ea7e34..97b8d3728b31 100644
--- a/include/kvm/arm_vgic.h
+++ b/include/kvm/arm_vgic.h
@@ -148,7 +148,6 @@ struct vgic_its {
148 gpa_t vgic_its_base; 148 gpa_t vgic_its_base;
149 149
150 bool enabled; 150 bool enabled;
151 bool initialized;
152 struct vgic_io_device iodev; 151 struct vgic_io_device iodev;
153 struct kvm_device *dev; 152 struct kvm_device *dev;
154 153
@@ -162,6 +161,9 @@ struct vgic_its {
162 u32 creadr; 161 u32 creadr;
163 u32 cwriter; 162 u32 cwriter;
164 163
164 /* migration ABI revision in use */
165 u32 abi_rev;
166
165 /* Protects the device and collection lists */ 167 /* Protects the device and collection lists */
166 struct mutex its_lock; 168 struct mutex its_lock;
167 struct list_head device_list; 169 struct list_head device_list;
@@ -283,6 +285,7 @@ extern struct static_key_false vgic_v2_cpuif_trap;
283 285
284int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write); 286int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write);
285void kvm_vgic_early_init(struct kvm *kvm); 287void kvm_vgic_early_init(struct kvm *kvm);
288int kvm_vgic_vcpu_init(struct kvm_vcpu *vcpu);
286int kvm_vgic_create(struct kvm *kvm, u32 type); 289int kvm_vgic_create(struct kvm *kvm, u32 type);
287void kvm_vgic_destroy(struct kvm *kvm); 290void kvm_vgic_destroy(struct kvm *kvm);
288void kvm_vgic_vcpu_early_init(struct kvm_vcpu *vcpu); 291void kvm_vgic_vcpu_early_init(struct kvm_vcpu *vcpu);
diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
index 97cbca19430d..fffb91202bc9 100644
--- a/include/linux/irqchip/arm-gic-v3.h
+++ b/include/linux/irqchip/arm-gic-v3.h
@@ -132,6 +132,9 @@
132#define GIC_BASER_SHAREABILITY(reg, type) \ 132#define GIC_BASER_SHAREABILITY(reg, type) \
133 (GIC_BASER_##type << reg##_SHAREABILITY_SHIFT) 133 (GIC_BASER_##type << reg##_SHAREABILITY_SHIFT)
134 134
135/* encode a size field of width @w containing @n - 1 units */
136#define GIC_ENCODE_SZ(n, w) (((unsigned long)(n) - 1) & GENMASK_ULL(((w) - 1), 0))
137
135#define GICR_PROPBASER_SHAREABILITY_SHIFT (10) 138#define GICR_PROPBASER_SHAREABILITY_SHIFT (10)
136#define GICR_PROPBASER_INNER_CACHEABILITY_SHIFT (7) 139#define GICR_PROPBASER_INNER_CACHEABILITY_SHIFT (7)
137#define GICR_PROPBASER_OUTER_CACHEABILITY_SHIFT (56) 140#define GICR_PROPBASER_OUTER_CACHEABILITY_SHIFT (56)
@@ -156,6 +159,8 @@
156#define GICR_PROPBASER_RaWaWb GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RaWaWb) 159#define GICR_PROPBASER_RaWaWb GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RaWaWb)
157 160
158#define GICR_PROPBASER_IDBITS_MASK (0x1f) 161#define GICR_PROPBASER_IDBITS_MASK (0x1f)
162#define GICR_PROPBASER_ADDRESS(x) ((x) & GENMASK_ULL(51, 12))
163#define GICR_PENDBASER_ADDRESS(x) ((x) & GENMASK_ULL(51, 16))
159 164
160#define GICR_PENDBASER_SHAREABILITY_SHIFT (10) 165#define GICR_PENDBASER_SHAREABILITY_SHIFT (10)
161#define GICR_PENDBASER_INNER_CACHEABILITY_SHIFT (7) 166#define GICR_PENDBASER_INNER_CACHEABILITY_SHIFT (7)
@@ -232,12 +237,18 @@
232#define GITS_CTLR_QUIESCENT (1U << 31) 237#define GITS_CTLR_QUIESCENT (1U << 31)
233 238
234#define GITS_TYPER_PLPIS (1UL << 0) 239#define GITS_TYPER_PLPIS (1UL << 0)
240#define GITS_TYPER_ITT_ENTRY_SIZE_SHIFT 4
235#define GITS_TYPER_IDBITS_SHIFT 8 241#define GITS_TYPER_IDBITS_SHIFT 8
236#define GITS_TYPER_DEVBITS_SHIFT 13 242#define GITS_TYPER_DEVBITS_SHIFT 13
237#define GITS_TYPER_DEVBITS(r) ((((r) >> GITS_TYPER_DEVBITS_SHIFT) & 0x1f) + 1) 243#define GITS_TYPER_DEVBITS(r) ((((r) >> GITS_TYPER_DEVBITS_SHIFT) & 0x1f) + 1)
238#define GITS_TYPER_PTA (1UL << 19) 244#define GITS_TYPER_PTA (1UL << 19)
239#define GITS_TYPER_HWCOLLCNT_SHIFT 24 245#define GITS_TYPER_HWCOLLCNT_SHIFT 24
240 246
247#define GITS_IIDR_REV_SHIFT 12
248#define GITS_IIDR_REV_MASK (0xf << GITS_IIDR_REV_SHIFT)
249#define GITS_IIDR_REV(r) (((r) >> GITS_IIDR_REV_SHIFT) & 0xf)
250#define GITS_IIDR_PRODUCTID_SHIFT 24
251
241#define GITS_CBASER_VALID (1ULL << 63) 252#define GITS_CBASER_VALID (1ULL << 63)
242#define GITS_CBASER_SHAREABILITY_SHIFT (10) 253#define GITS_CBASER_SHAREABILITY_SHIFT (10)
243#define GITS_CBASER_INNER_CACHEABILITY_SHIFT (59) 254#define GITS_CBASER_INNER_CACHEABILITY_SHIFT (59)
@@ -290,6 +301,7 @@
290#define GITS_BASER_TYPE(r) (((r) >> GITS_BASER_TYPE_SHIFT) & 7) 301#define GITS_BASER_TYPE(r) (((r) >> GITS_BASER_TYPE_SHIFT) & 7)
291#define GITS_BASER_ENTRY_SIZE_SHIFT (48) 302#define GITS_BASER_ENTRY_SIZE_SHIFT (48)
292#define GITS_BASER_ENTRY_SIZE(r) ((((r) >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0x1f) + 1) 303#define GITS_BASER_ENTRY_SIZE(r) ((((r) >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0x1f) + 1)
304#define GITS_BASER_ENTRY_SIZE_MASK GENMASK_ULL(52, 48)
293#define GITS_BASER_SHAREABILITY_SHIFT (10) 305#define GITS_BASER_SHAREABILITY_SHIFT (10)
294#define GITS_BASER_InnerShareable \ 306#define GITS_BASER_InnerShareable \
295 GIC_BASER_SHAREABILITY(GITS_BASER, InnerShareable) 307 GIC_BASER_SHAREABILITY(GITS_BASER, InnerShareable)
@@ -337,9 +349,11 @@
337#define E_ITS_INT_UNMAPPED_INTERRUPT 0x010307 349#define E_ITS_INT_UNMAPPED_INTERRUPT 0x010307
338#define E_ITS_CLEAR_UNMAPPED_INTERRUPT 0x010507 350#define E_ITS_CLEAR_UNMAPPED_INTERRUPT 0x010507
339#define E_ITS_MAPD_DEVICE_OOR 0x010801 351#define E_ITS_MAPD_DEVICE_OOR 0x010801
352#define E_ITS_MAPD_ITTSIZE_OOR 0x010802
340#define E_ITS_MAPC_PROCNUM_OOR 0x010902 353#define E_ITS_MAPC_PROCNUM_OOR 0x010902
341#define E_ITS_MAPC_COLLECTION_OOR 0x010903 354#define E_ITS_MAPC_COLLECTION_OOR 0x010903
342#define E_ITS_MAPTI_UNMAPPED_DEVICE 0x010a04 355#define E_ITS_MAPTI_UNMAPPED_DEVICE 0x010a04
356#define E_ITS_MAPTI_ID_OOR 0x010a05
343#define E_ITS_MAPTI_PHYSICALID_OOR 0x010a06 357#define E_ITS_MAPTI_PHYSICALID_OOR 0x010a06
344#define E_ITS_INV_UNMAPPED_INTERRUPT 0x010c07 358#define E_ITS_INV_UNMAPPED_INTERRUPT 0x010c07
345#define E_ITS_INVALL_UNMAPPED_COLLECTION 0x010d09 359#define E_ITS_INVALL_UNMAPPED_COLLECTION 0x010d09
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 4f12fb6b01de..9ff201b63512 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -499,6 +499,17 @@ static inline struct kvm_vcpu *kvm_get_vcpu_by_id(struct kvm *kvm, int id)
499 return NULL; 499 return NULL;
500} 500}
501 501
502static inline int kvm_vcpu_get_idx(struct kvm_vcpu *vcpu)
503{
504 struct kvm_vcpu *tmp;
505 int idx;
506
507 kvm_for_each_vcpu(idx, tmp, vcpu->kvm)
508 if (tmp == vcpu)
509 return idx;
510 BUG();
511}
512
502#define kvm_for_each_memslot(memslot, slots) \ 513#define kvm_for_each_memslot(memslot, slots) \
503 for (memslot = &slots->memslots[0]; \ 514 for (memslot = &slots->memslots[0]; \
504 memslot < slots->memslots + KVM_MEM_SLOTS_NUM && memslot->npages;\ 515 memslot < slots->memslots + KVM_MEM_SLOTS_NUM && memslot->npages;\