diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2017-05-09 06:51:49 -0400 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-05-09 06:51:49 -0400 |
| commit | 36c344f3f1ffc0b1b20abd237b7401dc6687ee8f (patch) | |
| tree | 24b330a2e62bfc8f576cccdc833b53e1f1b69050 /include | |
| parent | 03efce6f935f89f90a98997ceea514aeff47b6dc (diff) | |
| parent | a2b19e6e2d4bb662a64799541c144fd94f8fb024 (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.h | 5 | ||||
| -rw-r--r-- | include/linux/irqchip/arm-gic-v3.h | 14 | ||||
| -rw-r--r-- | include/linux/kvm_host.h | 11 |
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 | ||
| 284 | int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write); | 286 | int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write); |
| 285 | void kvm_vgic_early_init(struct kvm *kvm); | 287 | void kvm_vgic_early_init(struct kvm *kvm); |
| 288 | int kvm_vgic_vcpu_init(struct kvm_vcpu *vcpu); | ||
| 286 | int kvm_vgic_create(struct kvm *kvm, u32 type); | 289 | int kvm_vgic_create(struct kvm *kvm, u32 type); |
| 287 | void kvm_vgic_destroy(struct kvm *kvm); | 290 | void kvm_vgic_destroy(struct kvm *kvm); |
| 288 | void kvm_vgic_vcpu_early_init(struct kvm_vcpu *vcpu); | 291 | void 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 | ||
| 502 | static 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;\ |
