xref: /linux/arch/arm64/kvm/vgic/vgic-its.c (revision 4ea7c1717f3f2344f7a1cdab4f5875cfa89c87a9)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * GICv3 ITS emulation
4  *
5  * Copyright (C) 2015,2016 ARM Ltd.
6  * Author: Andre Przywara <andre.przywara@arm.com>
7  */
8 
9 #include <linux/cpu.h>
10 #include <linux/kvm.h>
11 #include <linux/kvm_host.h>
12 #include <linux/interrupt.h>
13 #include <linux/list.h>
14 #include <linux/uaccess.h>
15 #include <linux/list_sort.h>
16 
17 #include <linux/irqchip/arm-gic-v3.h>
18 
19 #include <asm/kvm_emulate.h>
20 #include <asm/kvm_arm.h>
21 #include <asm/kvm_mmu.h>
22 
23 #include "vgic.h"
24 #include "vgic-mmio.h"
25 
26 static struct kvm_device_ops kvm_arm_vgic_its_ops;
27 
28 static int vgic_its_save_tables_v0(struct vgic_its *its);
29 static int vgic_its_restore_tables_v0(struct vgic_its *its);
30 static int vgic_its_commit_v0(struct vgic_its *its);
31 static int update_lpi_config(struct kvm *kvm, struct vgic_irq *irq,
32 			     struct kvm_vcpu *filter_vcpu, bool needs_inv);
33 
34 #define vgic_its_read_entry_lock(i, g, valp, t)				\
35 	({								\
36 		int __sz = vgic_its_get_abi(i)->t##_esz;		\
37 		struct kvm *__k = (i)->dev->kvm;			\
38 		int __ret;						\
39 									\
40 		BUILD_BUG_ON(NR_ITS_ABIS == 1 &&			\
41 			     sizeof(*(valp)) != ABI_0_ESZ);		\
42 		if (NR_ITS_ABIS > 1 &&					\
43 		    KVM_BUG_ON(__sz != sizeof(*(valp)), __k))		\
44 			__ret = -EINVAL;				\
45 		else							\
46 			__ret = kvm_read_guest_lock(__k, (g),		\
47 						    valp, __sz);	\
48 		__ret;							\
49 	})
50 
51 #define vgic_its_write_entry_lock(i, g, val, t)				\
52 	({								\
53 		int __sz = vgic_its_get_abi(i)->t##_esz;		\
54 		struct kvm *__k = (i)->dev->kvm;			\
55 		typeof(val) __v = (val);				\
56 		int __ret;						\
57 									\
58 		BUILD_BUG_ON(NR_ITS_ABIS == 1 &&			\
59 			     sizeof(__v) != ABI_0_ESZ);			\
60 		if (NR_ITS_ABIS > 1 &&					\
61 		    KVM_BUG_ON(__sz != sizeof(__v), __k))		\
62 			__ret = -EINVAL;				\
63 		else							\
64 			__ret = vgic_write_guest_lock(__k, (g),		\
65 						      &__v, __sz);	\
66 		__ret;							\
67 	})
68 
69 /*
70  * Creates a new (reference to a) struct vgic_irq for a given LPI.
71  * If this LPI is already mapped on another ITS, we increase its refcount
72  * and return a pointer to the existing structure.
73  * If this is a "new" LPI, we allocate and initialize a new struct vgic_irq.
74  * This function returns a pointer to the _unlocked_ structure.
75  */
vgic_add_lpi(struct kvm * kvm,u32 intid,struct kvm_vcpu * vcpu)76 static struct vgic_irq *vgic_add_lpi(struct kvm *kvm, u32 intid,
77 				     struct kvm_vcpu *vcpu)
78 {
79 	struct vgic_dist *dist = &kvm->arch.vgic;
80 	struct vgic_irq *irq = vgic_get_irq(kvm, intid), *oldirq;
81 	unsigned long flags;
82 	int ret;
83 
84 	/* In this case there is no put, since we keep the reference. */
85 	if (irq)
86 		return irq;
87 
88 	irq = kzalloc(sizeof(struct vgic_irq), GFP_KERNEL_ACCOUNT);
89 	if (!irq)
90 		return ERR_PTR(-ENOMEM);
91 
92 	ret = xa_reserve_irq(&dist->lpi_xa, intid, GFP_KERNEL_ACCOUNT);
93 	if (ret) {
94 		kfree(irq);
95 		return ERR_PTR(ret);
96 	}
97 
98 	INIT_LIST_HEAD(&irq->ap_list);
99 	raw_spin_lock_init(&irq->irq_lock);
100 
101 	irq->config = VGIC_CONFIG_EDGE;
102 	refcount_set(&irq->refcount, 1);
103 	irq->intid = intid;
104 	irq->target_vcpu = vcpu;
105 	irq->group = 1;
106 
107 	xa_lock_irqsave(&dist->lpi_xa, flags);
108 
109 	/*
110 	 * There could be a race with another vgic_add_lpi(), so we need to
111 	 * check that we don't add a second list entry with the same LPI.
112 	 */
113 	oldirq = xa_load(&dist->lpi_xa, intid);
114 	if (vgic_try_get_irq_ref(oldirq)) {
115 		/* Someone was faster with adding this LPI, lets use that. */
116 		kfree(irq);
117 		irq = oldirq;
118 	} else {
119 		ret = xa_err(__xa_store(&dist->lpi_xa, intid, irq, 0));
120 	}
121 
122 	xa_unlock_irqrestore(&dist->lpi_xa, flags);
123 
124 	if (ret) {
125 		xa_release(&dist->lpi_xa, intid);
126 		kfree(irq);
127 
128 		return ERR_PTR(ret);
129 	}
130 
131 	/*
132 	 * We "cache" the configuration table entries in our struct vgic_irq's.
133 	 * However we only have those structs for mapped IRQs, so we read in
134 	 * the respective config data from memory here upon mapping the LPI.
135 	 *
136 	 * Should any of these fail, behave as if we couldn't create the LPI
137 	 * by dropping the refcount and returning the error.
138 	 */
139 	ret = update_lpi_config(kvm, irq, NULL, false);
140 	if (ret) {
141 		vgic_put_irq(kvm, irq);
142 		return ERR_PTR(ret);
143 	}
144 
145 	ret = vgic_v3_lpi_sync_pending_status(kvm, irq);
146 	if (ret) {
147 		vgic_put_irq(kvm, irq);
148 		return ERR_PTR(ret);
149 	}
150 
151 	return irq;
152 }
153 
154 /**
155  * struct vgic_its_abi - ITS abi ops and settings
156  * @cte_esz: collection table entry size
157  * @dte_esz: device table entry size
158  * @ite_esz: interrupt translation table entry size
159  * @save_tables: save the ITS tables into guest RAM
160  * @restore_tables: restore the ITS internal structs from tables
161  *  stored in guest RAM
162  * @commit: initialize the registers which expose the ABI settings,
163  *  especially the entry sizes
164  */
165 struct vgic_its_abi {
166 	int cte_esz;
167 	int dte_esz;
168 	int ite_esz;
169 	int (*save_tables)(struct vgic_its *its);
170 	int (*restore_tables)(struct vgic_its *its);
171 	int (*commit)(struct vgic_its *its);
172 };
173 
174 #define ABI_0_ESZ	8
175 #define ESZ_MAX		ABI_0_ESZ
176 
177 static const struct vgic_its_abi its_table_abi_versions[] = {
178 	[0] = {
179 	 .cte_esz = ABI_0_ESZ,
180 	 .dte_esz = ABI_0_ESZ,
181 	 .ite_esz = ABI_0_ESZ,
182 	 .save_tables = vgic_its_save_tables_v0,
183 	 .restore_tables = vgic_its_restore_tables_v0,
184 	 .commit = vgic_its_commit_v0,
185 	},
186 };
187 
188 #define NR_ITS_ABIS	ARRAY_SIZE(its_table_abi_versions)
189 
vgic_its_get_abi(struct vgic_its * its)190 inline const struct vgic_its_abi *vgic_its_get_abi(struct vgic_its *its)
191 {
192 	return &its_table_abi_versions[its->abi_rev];
193 }
194 
vgic_its_set_abi(struct vgic_its * its,u32 rev)195 static int vgic_its_set_abi(struct vgic_its *its, u32 rev)
196 {
197 	const struct vgic_its_abi *abi;
198 
199 	its->abi_rev = rev;
200 	abi = vgic_its_get_abi(its);
201 	return abi->commit(its);
202 }
203 
204 /*
205  * Find and returns a device in the device table for an ITS.
206  * Must be called with the its_lock mutex held.
207  */
find_its_device(struct vgic_its * its,u32 device_id)208 static struct its_device *find_its_device(struct vgic_its *its, u32 device_id)
209 {
210 	struct its_device *device;
211 
212 	list_for_each_entry(device, &its->device_list, dev_list)
213 		if (device_id == device->device_id)
214 			return device;
215 
216 	return NULL;
217 }
218 
219 /*
220  * Find and returns an interrupt translation table entry (ITTE) for a given
221  * Device ID/Event ID pair on an ITS.
222  * Must be called with the its_lock mutex held.
223  */
find_ite(struct vgic_its * its,u32 device_id,u32 event_id)224 static struct its_ite *find_ite(struct vgic_its *its, u32 device_id,
225 				  u32 event_id)
226 {
227 	struct its_device *device;
228 	struct its_ite *ite;
229 
230 	device = find_its_device(its, device_id);
231 	if (device == NULL)
232 		return NULL;
233 
234 	list_for_each_entry(ite, &device->itt_head, ite_list)
235 		if (ite->event_id == event_id)
236 			return ite;
237 
238 	return NULL;
239 }
240 
241 /* To be used as an iterator this macro misses the enclosing parentheses */
242 #define for_each_lpi_its(dev, ite, its) \
243 	list_for_each_entry(dev, &(its)->device_list, dev_list) \
244 		list_for_each_entry(ite, &(dev)->itt_head, ite_list)
245 
246 #define GIC_LPI_OFFSET 8192
247 
248 #define VITS_TYPER_IDBITS		16
249 #define VITS_MAX_EVENTID		(BIT(VITS_TYPER_IDBITS) - 1)
250 #define VITS_TYPER_DEVBITS		16
251 #define VITS_MAX_DEVID			(BIT(VITS_TYPER_DEVBITS) - 1)
252 #define VITS_DTE_MAX_DEVID_OFFSET	(BIT(14) - 1)
253 #define VITS_ITE_MAX_EVENTID_OFFSET	(BIT(16) - 1)
254 
255 /*
256  * Finds and returns a collection in the ITS collection table.
257  * Must be called with the its_lock mutex held.
258  */
find_collection(struct vgic_its * its,int coll_id)259 static struct its_collection *find_collection(struct vgic_its *its, int coll_id)
260 {
261 	struct its_collection *collection;
262 
263 	list_for_each_entry(collection, &its->collection_list, coll_list) {
264 		if (coll_id == collection->collection_id)
265 			return collection;
266 	}
267 
268 	return NULL;
269 }
270 
271 #define LPI_PROP_ENABLE_BIT(p)	((p) & LPI_PROP_ENABLED)
272 #define LPI_PROP_PRIORITY(p)	((p) & 0xfc)
273 
274 /*
275  * Reads the configuration data for a given LPI from guest memory and
276  * updates the fields in struct vgic_irq.
277  * If filter_vcpu is not NULL, applies only if the IRQ is targeting this
278  * VCPU. Unconditionally applies if filter_vcpu is NULL.
279  */
update_lpi_config(struct kvm * kvm,struct vgic_irq * irq,struct kvm_vcpu * filter_vcpu,bool needs_inv)280 static int update_lpi_config(struct kvm *kvm, struct vgic_irq *irq,
281 			     struct kvm_vcpu *filter_vcpu, bool needs_inv)
282 {
283 	u64 propbase = GICR_PROPBASER_ADDRESS(kvm->arch.vgic.propbaser);
284 	u8 prop;
285 	int ret;
286 	unsigned long flags;
287 
288 	ret = kvm_read_guest_lock(kvm, propbase + irq->intid - GIC_LPI_OFFSET,
289 				  &prop, 1);
290 
291 	if (ret)
292 		return ret;
293 
294 	raw_spin_lock_irqsave(&irq->irq_lock, flags);
295 
296 	if (!filter_vcpu || filter_vcpu == irq->target_vcpu) {
297 		irq->priority = LPI_PROP_PRIORITY(prop);
298 		irq->enabled = LPI_PROP_ENABLE_BIT(prop);
299 
300 		if (!irq->hw) {
301 			vgic_queue_irq_unlock(kvm, irq, flags);
302 			return 0;
303 		}
304 	}
305 
306 	if (irq->hw)
307 		ret = its_prop_update_vlpi(irq->host_irq, prop, needs_inv);
308 
309 	raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
310 	return ret;
311 }
312 
update_affinity(struct vgic_irq * irq,struct kvm_vcpu * vcpu)313 static int update_affinity(struct vgic_irq *irq, struct kvm_vcpu *vcpu)
314 {
315 	struct its_vlpi_map map;
316 	int ret;
317 
318 	guard(raw_spinlock_irqsave)(&irq->irq_lock);
319 	irq->target_vcpu = vcpu;
320 
321 	if (!irq->hw)
322 		return 0;
323 
324 	ret = its_get_vlpi(irq->host_irq, &map);
325 	if (ret)
326 		return ret;
327 
328 	if (map.vpe)
329 		atomic_dec(&map.vpe->vlpi_count);
330 
331 	map.vpe = &vcpu->arch.vgic_cpu.vgic_v3.its_vpe;
332 	atomic_inc(&map.vpe->vlpi_count);
333 	return its_map_vlpi(irq->host_irq, &map);
334 }
335 
collection_to_vcpu(struct kvm * kvm,struct its_collection * col)336 static struct kvm_vcpu *collection_to_vcpu(struct kvm *kvm,
337 					   struct its_collection *col)
338 {
339 	return kvm_get_vcpu_by_id(kvm, col->target_addr);
340 }
341 
342 /*
343  * Promotes the ITS view of affinity of an ITTE (which redistributor this LPI
344  * is targeting) to the VGIC's view, which deals with target VCPUs.
345  * Needs to be called whenever either the collection for a LPIs has
346  * changed or the collection itself got retargeted.
347  */
update_affinity_ite(struct kvm * kvm,struct its_ite * ite)348 static void update_affinity_ite(struct kvm *kvm, struct its_ite *ite)
349 {
350 	struct kvm_vcpu *vcpu;
351 
352 	if (!its_is_collection_mapped(ite->collection))
353 		return;
354 
355 	vcpu = collection_to_vcpu(kvm, ite->collection);
356 	update_affinity(ite->irq, vcpu);
357 }
358 
359 /*
360  * Updates the target VCPU for every LPI targeting this collection.
361  * Must be called with the its_lock mutex held.
362  */
update_affinity_collection(struct kvm * kvm,struct vgic_its * its,struct its_collection * coll)363 static void update_affinity_collection(struct kvm *kvm, struct vgic_its *its,
364 				       struct its_collection *coll)
365 {
366 	struct its_device *device;
367 	struct its_ite *ite;
368 
369 	for_each_lpi_its(device, ite, its) {
370 		if (ite->collection != coll)
371 			continue;
372 
373 		update_affinity_ite(kvm, ite);
374 	}
375 }
376 
max_lpis_propbaser(u64 propbaser)377 static u32 max_lpis_propbaser(u64 propbaser)
378 {
379 	int nr_idbits = (propbaser & 0x1f) + 1;
380 
381 	return 1U << min(nr_idbits, INTERRUPT_ID_BITS_ITS);
382 }
383 
384 /*
385  * Sync the pending table pending bit of LPIs targeting @vcpu
386  * with our own data structures. This relies on the LPI being
387  * mapped before.
388  */
its_sync_lpi_pending_table(struct kvm_vcpu * vcpu)389 static int its_sync_lpi_pending_table(struct kvm_vcpu *vcpu)
390 {
391 	gpa_t pendbase = GICR_PENDBASER_ADDRESS(vcpu->arch.vgic_cpu.pendbaser);
392 	struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
393 	unsigned long intid, flags;
394 	struct vgic_irq *irq;
395 	int last_byte_offset = -1;
396 	int ret = 0;
397 	u8 pendmask;
398 
399 	xa_for_each(&dist->lpi_xa, intid, irq) {
400 		int byte_offset, bit_nr;
401 
402 		byte_offset = intid / BITS_PER_BYTE;
403 		bit_nr = intid % BITS_PER_BYTE;
404 
405 		/*
406 		 * For contiguously allocated LPIs chances are we just read
407 		 * this very same byte in the last iteration. Reuse that.
408 		 */
409 		if (byte_offset != last_byte_offset) {
410 			ret = kvm_read_guest_lock(vcpu->kvm,
411 						  pendbase + byte_offset,
412 						  &pendmask, 1);
413 			if (ret)
414 				return ret;
415 
416 			last_byte_offset = byte_offset;
417 		}
418 
419 		irq = vgic_get_irq(vcpu->kvm, intid);
420 		if (!irq)
421 			continue;
422 
423 		raw_spin_lock_irqsave(&irq->irq_lock, flags);
424 		if (irq->target_vcpu == vcpu)
425 			irq->pending_latch = pendmask & (1U << bit_nr);
426 		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
427 		vgic_put_irq(vcpu->kvm, irq);
428 	}
429 
430 	return ret;
431 }
432 
vgic_mmio_read_its_typer(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len)433 static unsigned long vgic_mmio_read_its_typer(struct kvm *kvm,
434 					      struct vgic_its *its,
435 					      gpa_t addr, unsigned int len)
436 {
437 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
438 	u64 reg = GITS_TYPER_PLPIS;
439 
440 	/*
441 	 * We use linear CPU numbers for redistributor addressing,
442 	 * so GITS_TYPER.PTA is 0.
443 	 * Also we force all PROPBASER registers to be the same, so
444 	 * CommonLPIAff is 0 as well.
445 	 * To avoid memory waste in the guest, we keep the number of IDBits and
446 	 * DevBits low - as least for the time being.
447 	 */
448 	reg |= GIC_ENCODE_SZ(VITS_TYPER_DEVBITS, 5) << GITS_TYPER_DEVBITS_SHIFT;
449 	reg |= GIC_ENCODE_SZ(VITS_TYPER_IDBITS, 5) << GITS_TYPER_IDBITS_SHIFT;
450 	reg |= GIC_ENCODE_SZ(abi->ite_esz, 4) << GITS_TYPER_ITT_ENTRY_SIZE_SHIFT;
451 
452 	return extract_bytes(reg, addr & 7, len);
453 }
454 
vgic_mmio_read_its_iidr(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len)455 static unsigned long vgic_mmio_read_its_iidr(struct kvm *kvm,
456 					     struct vgic_its *its,
457 					     gpa_t addr, unsigned int len)
458 {
459 	u32 val;
460 
461 	val = (its->abi_rev << GITS_IIDR_REV_SHIFT) & GITS_IIDR_REV_MASK;
462 	val |= (PRODUCT_ID_KVM << GITS_IIDR_PRODUCTID_SHIFT) | IMPLEMENTER_ARM;
463 	return val;
464 }
465 
vgic_mmio_uaccess_write_its_iidr(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len,unsigned long val)466 static int vgic_mmio_uaccess_write_its_iidr(struct kvm *kvm,
467 					    struct vgic_its *its,
468 					    gpa_t addr, unsigned int len,
469 					    unsigned long val)
470 {
471 	u32 rev = GITS_IIDR_REV(val);
472 
473 	if (rev >= NR_ITS_ABIS)
474 		return -EINVAL;
475 	return vgic_its_set_abi(its, rev);
476 }
477 
vgic_mmio_read_its_idregs(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len)478 static unsigned long vgic_mmio_read_its_idregs(struct kvm *kvm,
479 					       struct vgic_its *its,
480 					       gpa_t addr, unsigned int len)
481 {
482 	switch (addr & 0xffff) {
483 	case GITS_PIDR0:
484 		return 0x92;	/* part number, bits[7:0] */
485 	case GITS_PIDR1:
486 		return 0xb4;	/* part number, bits[11:8] */
487 	case GITS_PIDR2:
488 		return GIC_PIDR2_ARCH_GICv3 | 0x0b;
489 	case GITS_PIDR4:
490 		return 0x40;	/* This is a 64K software visible page */
491 	/* The following are the ID registers for (any) GIC. */
492 	case GITS_CIDR0:
493 		return 0x0d;
494 	case GITS_CIDR1:
495 		return 0xf0;
496 	case GITS_CIDR2:
497 		return 0x05;
498 	case GITS_CIDR3:
499 		return 0xb1;
500 	}
501 
502 	return 0;
503 }
504 
__vgic_doorbell_to_its(struct kvm * kvm,gpa_t db)505 static struct vgic_its *__vgic_doorbell_to_its(struct kvm *kvm, gpa_t db)
506 {
507 	struct kvm_io_device *kvm_io_dev;
508 	struct vgic_io_device *iodev;
509 
510 	kvm_io_dev = kvm_io_bus_get_dev(kvm, KVM_MMIO_BUS, db);
511 	if (!kvm_io_dev)
512 		return ERR_PTR(-EINVAL);
513 
514 	if (kvm_io_dev->ops != &kvm_io_gic_ops)
515 		return ERR_PTR(-EINVAL);
516 
517 	iodev = container_of(kvm_io_dev, struct vgic_io_device, dev);
518 	if (iodev->iodev_type != IODEV_ITS)
519 		return ERR_PTR(-EINVAL);
520 
521 	return iodev->its;
522 }
523 
vgic_its_cache_key(u32 devid,u32 eventid)524 static unsigned long vgic_its_cache_key(u32 devid, u32 eventid)
525 {
526 	return (((unsigned long)devid) << VITS_TYPER_IDBITS) | eventid;
527 
528 }
529 
vgic_its_check_cache(struct kvm * kvm,phys_addr_t db,u32 devid,u32 eventid)530 static struct vgic_irq *vgic_its_check_cache(struct kvm *kvm, phys_addr_t db,
531 					     u32 devid, u32 eventid)
532 {
533 	unsigned long cache_key = vgic_its_cache_key(devid, eventid);
534 	struct vgic_its *its;
535 	struct vgic_irq *irq;
536 
537 	if (devid > VITS_MAX_DEVID || eventid > VITS_MAX_EVENTID)
538 		return NULL;
539 
540 	its = __vgic_doorbell_to_its(kvm, db);
541 	if (IS_ERR(its))
542 		return NULL;
543 
544 	rcu_read_lock();
545 
546 	irq = xa_load(&its->translation_cache, cache_key);
547 	if (!vgic_try_get_irq_ref(irq))
548 		irq = NULL;
549 
550 	rcu_read_unlock();
551 
552 	return irq;
553 }
554 
vgic_its_cache_translation(struct kvm * kvm,struct vgic_its * its,u32 devid,u32 eventid,struct vgic_irq * irq)555 static void vgic_its_cache_translation(struct kvm *kvm, struct vgic_its *its,
556 				       u32 devid, u32 eventid,
557 				       struct vgic_irq *irq)
558 {
559 	unsigned long cache_key = vgic_its_cache_key(devid, eventid);
560 	struct vgic_irq *old;
561 
562 	/* Do not cache a directly injected interrupt */
563 	if (irq->hw)
564 		return;
565 
566 	/*
567 	 * The irq refcount is guaranteed to be nonzero while holding the
568 	 * its_lock, as the ITE (and the reference it holds) cannot be freed.
569 	 */
570 	lockdep_assert_held(&its->its_lock);
571 	vgic_get_irq_ref(irq);
572 
573 	old = xa_store(&its->translation_cache, cache_key, irq, GFP_KERNEL_ACCOUNT);
574 
575 	/*
576 	 * Put the reference taken on @irq if the store fails. Intentionally do
577 	 * not return the error as the translation cache is best effort.
578 	 */
579 	if (xa_is_err(old)) {
580 		vgic_put_irq(kvm, irq);
581 		return;
582 	}
583 
584 	/*
585 	 * We could have raced with another CPU caching the same
586 	 * translation behind our back, ensure we don't leak a
587 	 * reference if that is the case.
588 	 */
589 	if (old)
590 		vgic_put_irq(kvm, old);
591 }
592 
vgic_its_invalidate_cache(struct vgic_its * its)593 static void vgic_its_invalidate_cache(struct vgic_its *its)
594 {
595 	struct kvm *kvm = its->dev->kvm;
596 	struct vgic_irq *irq;
597 	unsigned long idx;
598 
599 	xa_for_each(&its->translation_cache, idx, irq) {
600 		xa_erase(&its->translation_cache, idx);
601 		vgic_put_irq(kvm, irq);
602 	}
603 }
604 
vgic_its_invalidate_all_caches(struct kvm * kvm)605 void vgic_its_invalidate_all_caches(struct kvm *kvm)
606 {
607 	struct kvm_device *dev;
608 	struct vgic_its *its;
609 
610 	rcu_read_lock();
611 
612 	list_for_each_entry_rcu(dev, &kvm->devices, vm_node) {
613 		if (dev->ops != &kvm_arm_vgic_its_ops)
614 			continue;
615 
616 		its = dev->private;
617 		vgic_its_invalidate_cache(its);
618 	}
619 
620 	rcu_read_unlock();
621 }
622 
vgic_its_resolve_lpi(struct kvm * kvm,struct vgic_its * its,u32 devid,u32 eventid,struct vgic_irq ** irq)623 int vgic_its_resolve_lpi(struct kvm *kvm, struct vgic_its *its,
624 			 u32 devid, u32 eventid, struct vgic_irq **irq)
625 {
626 	struct kvm_vcpu *vcpu;
627 	struct its_ite *ite;
628 
629 	if (!its->enabled)
630 		return -EBUSY;
631 
632 	ite = find_ite(its, devid, eventid);
633 	if (!ite || !its_is_collection_mapped(ite->collection))
634 		return E_ITS_INT_UNMAPPED_INTERRUPT;
635 
636 	vcpu = collection_to_vcpu(kvm, ite->collection);
637 	if (!vcpu)
638 		return E_ITS_INT_UNMAPPED_INTERRUPT;
639 
640 	if (!vgic_lpis_enabled(vcpu))
641 		return -EBUSY;
642 
643 	vgic_its_cache_translation(kvm, its, devid, eventid, ite->irq);
644 
645 	*irq = ite->irq;
646 	return 0;
647 }
648 
vgic_msi_to_its(struct kvm * kvm,struct kvm_msi * msi)649 struct vgic_its *vgic_msi_to_its(struct kvm *kvm, struct kvm_msi *msi)
650 {
651 	u64 address;
652 
653 	if (!vgic_has_its(kvm))
654 		return ERR_PTR(-ENODEV);
655 
656 	if (!(msi->flags & KVM_MSI_VALID_DEVID))
657 		return ERR_PTR(-EINVAL);
658 
659 	address = (u64)msi->address_hi << 32 | msi->address_lo;
660 
661 	return __vgic_doorbell_to_its(kvm, address);
662 }
663 
664 /*
665  * Find the target VCPU and the LPI number for a given devid/eventid pair
666  * and make this IRQ pending, possibly injecting it.
667  * Must be called with the its_lock mutex held.
668  * Returns 0 on success, a positive error value for any ITS mapping
669  * related errors and negative error values for generic errors.
670  */
vgic_its_trigger_msi(struct kvm * kvm,struct vgic_its * its,u32 devid,u32 eventid)671 static int vgic_its_trigger_msi(struct kvm *kvm, struct vgic_its *its,
672 				u32 devid, u32 eventid)
673 {
674 	struct vgic_irq *irq = NULL;
675 	unsigned long flags;
676 	int err;
677 
678 	err = vgic_its_resolve_lpi(kvm, its, devid, eventid, &irq);
679 	if (err)
680 		return err;
681 
682 	if (irq->hw)
683 		return irq_set_irqchip_state(irq->host_irq,
684 					     IRQCHIP_STATE_PENDING, true);
685 
686 	raw_spin_lock_irqsave(&irq->irq_lock, flags);
687 	irq->pending_latch = true;
688 	vgic_queue_irq_unlock(kvm, irq, flags);
689 
690 	return 0;
691 }
692 
vgic_its_inject_cached_translation(struct kvm * kvm,struct kvm_msi * msi)693 int vgic_its_inject_cached_translation(struct kvm *kvm, struct kvm_msi *msi)
694 {
695 	struct vgic_irq *irq;
696 	unsigned long flags;
697 	phys_addr_t db;
698 
699 	db = (u64)msi->address_hi << 32 | msi->address_lo;
700 	irq = vgic_its_check_cache(kvm, db, msi->devid, msi->data);
701 	if (!irq)
702 		return -EWOULDBLOCK;
703 
704 	raw_spin_lock_irqsave(&irq->irq_lock, flags);
705 	irq->pending_latch = true;
706 	vgic_queue_irq_unlock(kvm, irq, flags);
707 	vgic_put_irq(kvm, irq);
708 
709 	return 0;
710 }
711 
712 /*
713  * Queries the KVM IO bus framework to get the ITS pointer from the given
714  * doorbell address.
715  * We then call vgic_its_trigger_msi() with the decoded data.
716  * According to the KVM_SIGNAL_MSI API description returns 1 on success.
717  */
vgic_its_inject_msi(struct kvm * kvm,struct kvm_msi * msi)718 int vgic_its_inject_msi(struct kvm *kvm, struct kvm_msi *msi)
719 {
720 	struct vgic_its *its;
721 	int ret;
722 
723 	if (!vgic_its_inject_cached_translation(kvm, msi))
724 		return 1;
725 
726 	its = vgic_msi_to_its(kvm, msi);
727 	if (IS_ERR(its))
728 		return PTR_ERR(its);
729 
730 	mutex_lock(&its->its_lock);
731 	ret = vgic_its_trigger_msi(kvm, its, msi->devid, msi->data);
732 	mutex_unlock(&its->its_lock);
733 
734 	if (ret < 0)
735 		return ret;
736 
737 	/*
738 	 * KVM_SIGNAL_MSI demands a return value > 0 for success and 0
739 	 * if the guest has blocked the MSI. So we map any LPI mapping
740 	 * related error to that.
741 	 */
742 	if (ret)
743 		return 0;
744 	else
745 		return 1;
746 }
747 
748 /* Requires the its_lock to be held. */
its_free_ite(struct kvm * kvm,struct its_ite * ite)749 static void its_free_ite(struct kvm *kvm, struct its_ite *ite)
750 {
751 	struct vgic_irq *irq = ite->irq;
752 	list_del(&ite->ite_list);
753 
754 	/* This put matches the get in vgic_add_lpi. */
755 	if (irq) {
756 		scoped_guard(raw_spinlock_irqsave, &irq->irq_lock) {
757 			if (irq->hw)
758 				its_unmap_vlpi(ite->irq->host_irq);
759 
760 			irq->hw = false;
761 		}
762 
763 		vgic_put_irq(kvm, ite->irq);
764 	}
765 
766 	kfree(ite);
767 }
768 
its_cmd_mask_field(u64 * its_cmd,int word,int shift,int size)769 static u64 its_cmd_mask_field(u64 *its_cmd, int word, int shift, int size)
770 {
771 	return (le64_to_cpu(its_cmd[word]) >> shift) & (BIT_ULL(size) - 1);
772 }
773 
774 #define its_cmd_get_command(cmd)	its_cmd_mask_field(cmd, 0,  0,  8)
775 #define its_cmd_get_deviceid(cmd)	its_cmd_mask_field(cmd, 0, 32, 32)
776 #define its_cmd_get_size(cmd)		(its_cmd_mask_field(cmd, 1,  0,  5) + 1)
777 #define its_cmd_get_id(cmd)		its_cmd_mask_field(cmd, 1,  0, 32)
778 #define its_cmd_get_physical_id(cmd)	its_cmd_mask_field(cmd, 1, 32, 32)
779 #define its_cmd_get_collection(cmd)	its_cmd_mask_field(cmd, 2,  0, 16)
780 #define its_cmd_get_ittaddr(cmd)	(its_cmd_mask_field(cmd, 2,  8, 44) << 8)
781 #define its_cmd_get_target_addr(cmd)	its_cmd_mask_field(cmd, 2, 16, 32)
782 #define its_cmd_get_validbit(cmd)	its_cmd_mask_field(cmd, 2, 63,  1)
783 
784 /*
785  * The DISCARD command frees an Interrupt Translation Table Entry (ITTE).
786  * Must be called with the its_lock mutex held.
787  */
vgic_its_cmd_handle_discard(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)788 static int vgic_its_cmd_handle_discard(struct kvm *kvm, struct vgic_its *its,
789 				       u64 *its_cmd)
790 {
791 	u32 device_id = its_cmd_get_deviceid(its_cmd);
792 	u32 event_id = its_cmd_get_id(its_cmd);
793 	struct its_ite *ite;
794 
795 	ite = find_ite(its, device_id, event_id);
796 	if (ite && its_is_collection_mapped(ite->collection)) {
797 		struct its_device *device = find_its_device(its, device_id);
798 		int ite_esz = vgic_its_get_abi(its)->ite_esz;
799 		gpa_t gpa = device->itt_addr + ite->event_id * ite_esz;
800 		/*
801 		 * Though the spec talks about removing the pending state, we
802 		 * don't bother here since we clear the ITTE anyway and the
803 		 * pending state is a property of the ITTE struct.
804 		 */
805 		vgic_its_invalidate_cache(its);
806 
807 		its_free_ite(kvm, ite);
808 
809 		return vgic_its_write_entry_lock(its, gpa, 0ULL, ite);
810 	}
811 
812 	return E_ITS_DISCARD_UNMAPPED_INTERRUPT;
813 }
814 
815 /*
816  * The MOVI command moves an ITTE to a different collection.
817  * Must be called with the its_lock mutex held.
818  */
vgic_its_cmd_handle_movi(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)819 static int vgic_its_cmd_handle_movi(struct kvm *kvm, struct vgic_its *its,
820 				    u64 *its_cmd)
821 {
822 	u32 device_id = its_cmd_get_deviceid(its_cmd);
823 	u32 event_id = its_cmd_get_id(its_cmd);
824 	u32 coll_id = its_cmd_get_collection(its_cmd);
825 	struct kvm_vcpu *vcpu;
826 	struct its_ite *ite;
827 	struct its_collection *collection;
828 
829 	ite = find_ite(its, device_id, event_id);
830 	if (!ite)
831 		return E_ITS_MOVI_UNMAPPED_INTERRUPT;
832 
833 	if (!its_is_collection_mapped(ite->collection))
834 		return E_ITS_MOVI_UNMAPPED_COLLECTION;
835 
836 	collection = find_collection(its, coll_id);
837 	if (!its_is_collection_mapped(collection))
838 		return E_ITS_MOVI_UNMAPPED_COLLECTION;
839 
840 	ite->collection = collection;
841 	vcpu = collection_to_vcpu(kvm, collection);
842 
843 	vgic_its_invalidate_cache(its);
844 
845 	return update_affinity(ite->irq, vcpu);
846 }
847 
__is_visible_gfn_locked(struct vgic_its * its,gpa_t gpa)848 static bool __is_visible_gfn_locked(struct vgic_its *its, gpa_t gpa)
849 {
850 	gfn_t gfn = gpa >> PAGE_SHIFT;
851 	int idx;
852 	bool ret;
853 
854 	idx = srcu_read_lock(&its->dev->kvm->srcu);
855 	ret = kvm_is_visible_gfn(its->dev->kvm, gfn);
856 	srcu_read_unlock(&its->dev->kvm->srcu, idx);
857 	return ret;
858 }
859 
860 /*
861  * Check whether an ID can be stored into the corresponding guest table.
862  * For a direct table this is pretty easy, but gets a bit nasty for
863  * indirect tables. We check whether the resulting guest physical address
864  * is actually valid (covered by a memslot and guest accessible).
865  * For this we have to read the respective first level entry.
866  */
vgic_its_check_id(struct vgic_its * its,u64 baser,u32 id,gpa_t * eaddr)867 static bool vgic_its_check_id(struct vgic_its *its, u64 baser, u32 id,
868 			      gpa_t *eaddr)
869 {
870 	int l1_tbl_size = GITS_BASER_NR_PAGES(baser) * SZ_64K;
871 	u64 indirect_ptr, type = GITS_BASER_TYPE(baser);
872 	phys_addr_t base = GITS_BASER_ADDR_48_to_52(baser);
873 	int esz = GITS_BASER_ENTRY_SIZE(baser);
874 	int index;
875 
876 	switch (type) {
877 	case GITS_BASER_TYPE_DEVICE:
878 		if (id > VITS_MAX_DEVID)
879 			return false;
880 		break;
881 	case GITS_BASER_TYPE_COLLECTION:
882 		/* as GITS_TYPER.CIL == 0, ITS supports 16-bit collection ID */
883 		if (id >= BIT_ULL(16))
884 			return false;
885 		break;
886 	default:
887 		return false;
888 	}
889 
890 	if (!(baser & GITS_BASER_INDIRECT)) {
891 		phys_addr_t addr;
892 
893 		if (id >= (l1_tbl_size / esz))
894 			return false;
895 
896 		addr = base + id * esz;
897 
898 		if (eaddr)
899 			*eaddr = addr;
900 
901 		return __is_visible_gfn_locked(its, addr);
902 	}
903 
904 	/* calculate and check the index into the 1st level */
905 	index = id / (SZ_64K / esz);
906 	if (index >= (l1_tbl_size / sizeof(u64)))
907 		return false;
908 
909 	/* Each 1st level entry is represented by a 64-bit value. */
910 	if (kvm_read_guest_lock(its->dev->kvm,
911 			   base + index * sizeof(indirect_ptr),
912 			   &indirect_ptr, sizeof(indirect_ptr)))
913 		return false;
914 
915 	indirect_ptr = le64_to_cpu(indirect_ptr);
916 
917 	/* check the valid bit of the first level entry */
918 	if (!(indirect_ptr & BIT_ULL(63)))
919 		return false;
920 
921 	/* Mask the guest physical address and calculate the frame number. */
922 	indirect_ptr &= GENMASK_ULL(51, 16);
923 
924 	/* Find the address of the actual entry */
925 	index = id % (SZ_64K / esz);
926 	indirect_ptr += index * esz;
927 
928 	if (eaddr)
929 		*eaddr = indirect_ptr;
930 
931 	return __is_visible_gfn_locked(its, indirect_ptr);
932 }
933 
934 /*
935  * Check whether an event ID can be stored in the corresponding Interrupt
936  * Translation Table, which starts at device->itt_addr.
937  */
vgic_its_check_event_id(struct vgic_its * its,struct its_device * device,u32 event_id)938 static bool vgic_its_check_event_id(struct vgic_its *its, struct its_device *device,
939 		u32 event_id)
940 {
941 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
942 	int ite_esz = abi->ite_esz;
943 	gpa_t gpa;
944 
945 	/* max table size is: BIT_ULL(device->num_eventid_bits) * ite_esz */
946 	if (event_id >= BIT_ULL(device->num_eventid_bits))
947 		return false;
948 
949 	gpa = device->itt_addr + event_id * ite_esz;
950 	return __is_visible_gfn_locked(its, gpa);
951 }
952 
953 /*
954  * Add a new collection into the ITS collection table.
955  * Returns 0 on success, and a negative error value for generic errors.
956  */
vgic_its_alloc_collection(struct vgic_its * its,struct its_collection ** colp,u32 coll_id)957 static int vgic_its_alloc_collection(struct vgic_its *its,
958 				     struct its_collection **colp,
959 				     u32 coll_id)
960 {
961 	struct its_collection *collection;
962 
963 	collection = kzalloc(sizeof(*collection), GFP_KERNEL_ACCOUNT);
964 	if (!collection)
965 		return -ENOMEM;
966 
967 	collection->collection_id = coll_id;
968 	collection->target_addr = COLLECTION_NOT_MAPPED;
969 
970 	list_add_tail(&collection->coll_list, &its->collection_list);
971 	*colp = collection;
972 
973 	return 0;
974 }
975 
vgic_its_free_collection(struct vgic_its * its,u32 coll_id)976 static void vgic_its_free_collection(struct vgic_its *its, u32 coll_id)
977 {
978 	struct its_collection *collection;
979 	struct its_device *device;
980 	struct its_ite *ite;
981 
982 	/*
983 	 * Clearing the mapping for that collection ID removes the
984 	 * entry from the list. If there wasn't any before, we can
985 	 * go home early.
986 	 */
987 	collection = find_collection(its, coll_id);
988 	if (!collection)
989 		return;
990 
991 	for_each_lpi_its(device, ite, its)
992 		if (ite->collection &&
993 		    ite->collection->collection_id == coll_id)
994 			ite->collection = NULL;
995 
996 	list_del(&collection->coll_list);
997 	kfree(collection);
998 }
999 
1000 /* Must be called with its_lock mutex held */
vgic_its_alloc_ite(struct its_device * device,struct its_collection * collection,u32 event_id)1001 static struct its_ite *vgic_its_alloc_ite(struct its_device *device,
1002 					  struct its_collection *collection,
1003 					  u32 event_id)
1004 {
1005 	struct its_ite *ite;
1006 
1007 	ite = kzalloc(sizeof(*ite), GFP_KERNEL_ACCOUNT);
1008 	if (!ite)
1009 		return ERR_PTR(-ENOMEM);
1010 
1011 	ite->event_id	= event_id;
1012 	ite->collection = collection;
1013 
1014 	list_add_tail(&ite->ite_list, &device->itt_head);
1015 	return ite;
1016 }
1017 
1018 /*
1019  * The MAPTI and MAPI commands map LPIs to ITTEs.
1020  * Must be called with its_lock mutex held.
1021  */
vgic_its_cmd_handle_mapi(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1022 static int vgic_its_cmd_handle_mapi(struct kvm *kvm, struct vgic_its *its,
1023 				    u64 *its_cmd)
1024 {
1025 	u32 device_id = its_cmd_get_deviceid(its_cmd);
1026 	u32 event_id = its_cmd_get_id(its_cmd);
1027 	u32 coll_id = its_cmd_get_collection(its_cmd);
1028 	struct its_ite *ite;
1029 	struct kvm_vcpu *vcpu = NULL;
1030 	struct its_device *device;
1031 	struct its_collection *collection, *new_coll = NULL;
1032 	struct vgic_irq *irq;
1033 	int lpi_nr;
1034 
1035 	device = find_its_device(its, device_id);
1036 	if (!device)
1037 		return E_ITS_MAPTI_UNMAPPED_DEVICE;
1038 
1039 	if (!vgic_its_check_event_id(its, device, event_id))
1040 		return E_ITS_MAPTI_ID_OOR;
1041 
1042 	if (its_cmd_get_command(its_cmd) == GITS_CMD_MAPTI)
1043 		lpi_nr = its_cmd_get_physical_id(its_cmd);
1044 	else
1045 		lpi_nr = event_id;
1046 	if (lpi_nr < GIC_LPI_OFFSET ||
1047 	    lpi_nr >= max_lpis_propbaser(kvm->arch.vgic.propbaser))
1048 		return E_ITS_MAPTI_PHYSICALID_OOR;
1049 
1050 	/* If there is an existing mapping, behavior is UNPREDICTABLE. */
1051 	if (find_ite(its, device_id, event_id))
1052 		return 0;
1053 
1054 	collection = find_collection(its, coll_id);
1055 	if (!collection) {
1056 		int ret;
1057 
1058 		if (!vgic_its_check_id(its, its->baser_coll_table, coll_id, NULL))
1059 			return E_ITS_MAPC_COLLECTION_OOR;
1060 
1061 		ret = vgic_its_alloc_collection(its, &collection, coll_id);
1062 		if (ret)
1063 			return ret;
1064 		new_coll = collection;
1065 	}
1066 
1067 	ite = vgic_its_alloc_ite(device, collection, event_id);
1068 	if (IS_ERR(ite)) {
1069 		if (new_coll)
1070 			vgic_its_free_collection(its, coll_id);
1071 		return PTR_ERR(ite);
1072 	}
1073 
1074 	if (its_is_collection_mapped(collection))
1075 		vcpu = collection_to_vcpu(kvm, collection);
1076 
1077 	irq = vgic_add_lpi(kvm, lpi_nr, vcpu);
1078 	if (IS_ERR(irq)) {
1079 		if (new_coll)
1080 			vgic_its_free_collection(its, coll_id);
1081 		its_free_ite(kvm, ite);
1082 		return PTR_ERR(irq);
1083 	}
1084 	ite->irq = irq;
1085 
1086 	return 0;
1087 }
1088 
1089 /* Requires the its_lock to be held. */
vgic_its_free_device(struct kvm * kvm,struct vgic_its * its,struct its_device * device)1090 static void vgic_its_free_device(struct kvm *kvm, struct vgic_its *its,
1091 				 struct its_device *device)
1092 {
1093 	struct its_ite *ite, *temp;
1094 
1095 	/*
1096 	 * The spec says that unmapping a device with still valid
1097 	 * ITTEs associated is UNPREDICTABLE. We remove all ITTEs,
1098 	 * since we cannot leave the memory unreferenced.
1099 	 */
1100 	list_for_each_entry_safe(ite, temp, &device->itt_head, ite_list)
1101 		its_free_ite(kvm, ite);
1102 
1103 	vgic_its_invalidate_cache(its);
1104 
1105 	list_del(&device->dev_list);
1106 	kfree(device);
1107 }
1108 
1109 /* its lock must be held */
vgic_its_free_device_list(struct kvm * kvm,struct vgic_its * its)1110 static void vgic_its_free_device_list(struct kvm *kvm, struct vgic_its *its)
1111 {
1112 	struct its_device *cur, *temp;
1113 
1114 	list_for_each_entry_safe(cur, temp, &its->device_list, dev_list)
1115 		vgic_its_free_device(kvm, its, cur);
1116 }
1117 
1118 /* its lock must be held */
vgic_its_free_collection_list(struct kvm * kvm,struct vgic_its * its)1119 static void vgic_its_free_collection_list(struct kvm *kvm, struct vgic_its *its)
1120 {
1121 	struct its_collection *cur, *temp;
1122 
1123 	list_for_each_entry_safe(cur, temp, &its->collection_list, coll_list)
1124 		vgic_its_free_collection(its, cur->collection_id);
1125 }
1126 
1127 /* Must be called with its_lock mutex held */
vgic_its_alloc_device(struct vgic_its * its,u32 device_id,gpa_t itt_addr,u8 num_eventid_bits)1128 static struct its_device *vgic_its_alloc_device(struct vgic_its *its,
1129 						u32 device_id, gpa_t itt_addr,
1130 						u8 num_eventid_bits)
1131 {
1132 	struct its_device *device;
1133 
1134 	device = kzalloc(sizeof(*device), GFP_KERNEL_ACCOUNT);
1135 	if (!device)
1136 		return ERR_PTR(-ENOMEM);
1137 
1138 	device->device_id = device_id;
1139 	device->itt_addr = itt_addr;
1140 	device->num_eventid_bits = num_eventid_bits;
1141 	INIT_LIST_HEAD(&device->itt_head);
1142 
1143 	list_add_tail(&device->dev_list, &its->device_list);
1144 	return device;
1145 }
1146 
1147 /*
1148  * MAPD maps or unmaps a device ID to Interrupt Translation Tables (ITTs).
1149  * Must be called with the its_lock mutex held.
1150  */
vgic_its_cmd_handle_mapd(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1151 static int vgic_its_cmd_handle_mapd(struct kvm *kvm, struct vgic_its *its,
1152 				    u64 *its_cmd)
1153 {
1154 	u32 device_id = its_cmd_get_deviceid(its_cmd);
1155 	bool valid = its_cmd_get_validbit(its_cmd);
1156 	u8 num_eventid_bits = its_cmd_get_size(its_cmd);
1157 	gpa_t itt_addr = its_cmd_get_ittaddr(its_cmd);
1158 	struct its_device *device;
1159 	gpa_t gpa;
1160 
1161 	if (!vgic_its_check_id(its, its->baser_device_table, device_id, &gpa))
1162 		return E_ITS_MAPD_DEVICE_OOR;
1163 
1164 	if (valid && num_eventid_bits > VITS_TYPER_IDBITS)
1165 		return E_ITS_MAPD_ITTSIZE_OOR;
1166 
1167 	device = find_its_device(its, device_id);
1168 
1169 	/*
1170 	 * The spec says that calling MAPD on an already mapped device
1171 	 * invalidates all cached data for this device. We implement this
1172 	 * by removing the mapping and re-establishing it.
1173 	 */
1174 	if (device)
1175 		vgic_its_free_device(kvm, its, device);
1176 
1177 	/*
1178 	 * The spec does not say whether unmapping a not-mapped device
1179 	 * is an error, so we are done in any case.
1180 	 */
1181 	if (!valid)
1182 		return vgic_its_write_entry_lock(its, gpa, 0ULL, dte);
1183 
1184 	device = vgic_its_alloc_device(its, device_id, itt_addr,
1185 				       num_eventid_bits);
1186 
1187 	return PTR_ERR_OR_ZERO(device);
1188 }
1189 
1190 /*
1191  * The MAPC command maps collection IDs to redistributors.
1192  * Must be called with the its_lock mutex held.
1193  */
vgic_its_cmd_handle_mapc(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1194 static int vgic_its_cmd_handle_mapc(struct kvm *kvm, struct vgic_its *its,
1195 				    u64 *its_cmd)
1196 {
1197 	u16 coll_id;
1198 	struct its_collection *collection;
1199 	bool valid;
1200 
1201 	valid = its_cmd_get_validbit(its_cmd);
1202 	coll_id = its_cmd_get_collection(its_cmd);
1203 
1204 	if (!valid) {
1205 		vgic_its_free_collection(its, coll_id);
1206 		vgic_its_invalidate_cache(its);
1207 	} else {
1208 		struct kvm_vcpu *vcpu;
1209 
1210 		vcpu = kvm_get_vcpu_by_id(kvm, its_cmd_get_target_addr(its_cmd));
1211 		if (!vcpu)
1212 			return E_ITS_MAPC_PROCNUM_OOR;
1213 
1214 		collection = find_collection(its, coll_id);
1215 
1216 		if (!collection) {
1217 			int ret;
1218 
1219 			if (!vgic_its_check_id(its, its->baser_coll_table,
1220 						coll_id, NULL))
1221 				return E_ITS_MAPC_COLLECTION_OOR;
1222 
1223 			ret = vgic_its_alloc_collection(its, &collection,
1224 							coll_id);
1225 			if (ret)
1226 				return ret;
1227 			collection->target_addr = vcpu->vcpu_id;
1228 		} else {
1229 			collection->target_addr = vcpu->vcpu_id;
1230 			update_affinity_collection(kvm, its, collection);
1231 		}
1232 	}
1233 
1234 	return 0;
1235 }
1236 
1237 /*
1238  * The CLEAR command removes the pending state for a particular LPI.
1239  * Must be called with the its_lock mutex held.
1240  */
vgic_its_cmd_handle_clear(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1241 static int vgic_its_cmd_handle_clear(struct kvm *kvm, struct vgic_its *its,
1242 				     u64 *its_cmd)
1243 {
1244 	u32 device_id = its_cmd_get_deviceid(its_cmd);
1245 	u32 event_id = its_cmd_get_id(its_cmd);
1246 	struct its_ite *ite;
1247 
1248 
1249 	ite = find_ite(its, device_id, event_id);
1250 	if (!ite)
1251 		return E_ITS_CLEAR_UNMAPPED_INTERRUPT;
1252 
1253 	ite->irq->pending_latch = false;
1254 
1255 	if (ite->irq->hw)
1256 		return irq_set_irqchip_state(ite->irq->host_irq,
1257 					     IRQCHIP_STATE_PENDING, false);
1258 
1259 	return 0;
1260 }
1261 
vgic_its_inv_lpi(struct kvm * kvm,struct vgic_irq * irq)1262 int vgic_its_inv_lpi(struct kvm *kvm, struct vgic_irq *irq)
1263 {
1264 	return update_lpi_config(kvm, irq, NULL, true);
1265 }
1266 
1267 /*
1268  * The INV command syncs the configuration bits from the memory table.
1269  * Must be called with the its_lock mutex held.
1270  */
vgic_its_cmd_handle_inv(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1271 static int vgic_its_cmd_handle_inv(struct kvm *kvm, struct vgic_its *its,
1272 				   u64 *its_cmd)
1273 {
1274 	u32 device_id = its_cmd_get_deviceid(its_cmd);
1275 	u32 event_id = its_cmd_get_id(its_cmd);
1276 	struct its_ite *ite;
1277 
1278 
1279 	ite = find_ite(its, device_id, event_id);
1280 	if (!ite)
1281 		return E_ITS_INV_UNMAPPED_INTERRUPT;
1282 
1283 	return vgic_its_inv_lpi(kvm, ite->irq);
1284 }
1285 
1286 /**
1287  * vgic_its_invall - invalidate all LPIs targeting a given vcpu
1288  * @vcpu: the vcpu for which the RD is targeted by an invalidation
1289  *
1290  * Contrary to the INVALL command, this targets a RD instead of a
1291  * collection, and we don't need to hold the its_lock, since no ITS is
1292  * involved here.
1293  */
vgic_its_invall(struct kvm_vcpu * vcpu)1294 int vgic_its_invall(struct kvm_vcpu *vcpu)
1295 {
1296 	struct kvm *kvm = vcpu->kvm;
1297 	struct vgic_dist *dist = &kvm->arch.vgic;
1298 	struct vgic_irq *irq;
1299 	unsigned long intid;
1300 
1301 	xa_for_each(&dist->lpi_xa, intid, irq) {
1302 		irq = vgic_get_irq(kvm, intid);
1303 		if (!irq)
1304 			continue;
1305 
1306 		update_lpi_config(kvm, irq, vcpu, false);
1307 		vgic_put_irq(kvm, irq);
1308 	}
1309 
1310 	if (vcpu->arch.vgic_cpu.vgic_v3.its_vpe.its_vm)
1311 		its_invall_vpe(&vcpu->arch.vgic_cpu.vgic_v3.its_vpe);
1312 
1313 	return 0;
1314 }
1315 
1316 /*
1317  * The INVALL command requests flushing of all IRQ data in this collection.
1318  * Find the VCPU mapped to that collection, then iterate over the VM's list
1319  * of mapped LPIs and update the configuration for each IRQ which targets
1320  * the specified vcpu. The configuration will be read from the in-memory
1321  * configuration table.
1322  * Must be called with the its_lock mutex held.
1323  */
vgic_its_cmd_handle_invall(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1324 static int vgic_its_cmd_handle_invall(struct kvm *kvm, struct vgic_its *its,
1325 				      u64 *its_cmd)
1326 {
1327 	u32 coll_id = its_cmd_get_collection(its_cmd);
1328 	struct its_collection *collection;
1329 	struct kvm_vcpu *vcpu;
1330 
1331 	collection = find_collection(its, coll_id);
1332 	if (!its_is_collection_mapped(collection))
1333 		return E_ITS_INVALL_UNMAPPED_COLLECTION;
1334 
1335 	vcpu = collection_to_vcpu(kvm, collection);
1336 	vgic_its_invall(vcpu);
1337 
1338 	return 0;
1339 }
1340 
1341 /*
1342  * The MOVALL command moves the pending state of all IRQs targeting one
1343  * redistributor to another. We don't hold the pending state in the VCPUs,
1344  * but in the IRQs instead, so there is really not much to do for us here.
1345  * However the spec says that no IRQ must target the old redistributor
1346  * afterwards, so we make sure that no LPI is using the associated target_vcpu.
1347  * This command affects all LPIs in the system that target that redistributor.
1348  */
vgic_its_cmd_handle_movall(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1349 static int vgic_its_cmd_handle_movall(struct kvm *kvm, struct vgic_its *its,
1350 				      u64 *its_cmd)
1351 {
1352 	struct vgic_dist *dist = &kvm->arch.vgic;
1353 	struct kvm_vcpu *vcpu1, *vcpu2;
1354 	struct vgic_irq *irq;
1355 	unsigned long intid;
1356 
1357 	/* We advertise GITS_TYPER.PTA==0, making the address the vcpu ID */
1358 	vcpu1 = kvm_get_vcpu_by_id(kvm, its_cmd_get_target_addr(its_cmd));
1359 	vcpu2 = kvm_get_vcpu_by_id(kvm, its_cmd_mask_field(its_cmd, 3, 16, 32));
1360 
1361 	if (!vcpu1 || !vcpu2)
1362 		return E_ITS_MOVALL_PROCNUM_OOR;
1363 
1364 	if (vcpu1 == vcpu2)
1365 		return 0;
1366 
1367 	xa_for_each(&dist->lpi_xa, intid, irq) {
1368 		irq = vgic_get_irq(kvm, intid);
1369 		if (!irq)
1370 			continue;
1371 
1372 		update_affinity(irq, vcpu2);
1373 
1374 		vgic_put_irq(kvm, irq);
1375 	}
1376 
1377 	vgic_its_invalidate_cache(its);
1378 
1379 	return 0;
1380 }
1381 
1382 /*
1383  * The INT command injects the LPI associated with that DevID/EvID pair.
1384  * Must be called with the its_lock mutex held.
1385  */
vgic_its_cmd_handle_int(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1386 static int vgic_its_cmd_handle_int(struct kvm *kvm, struct vgic_its *its,
1387 				   u64 *its_cmd)
1388 {
1389 	u32 msi_data = its_cmd_get_id(its_cmd);
1390 	u64 msi_devid = its_cmd_get_deviceid(its_cmd);
1391 
1392 	return vgic_its_trigger_msi(kvm, its, msi_devid, msi_data);
1393 }
1394 
1395 /*
1396  * This function is called with the its_cmd lock held, but the ITS data
1397  * structure lock dropped.
1398  */
vgic_its_handle_command(struct kvm * kvm,struct vgic_its * its,u64 * its_cmd)1399 static int vgic_its_handle_command(struct kvm *kvm, struct vgic_its *its,
1400 				   u64 *its_cmd)
1401 {
1402 	int ret = -ENODEV;
1403 
1404 	mutex_lock(&its->its_lock);
1405 	switch (its_cmd_get_command(its_cmd)) {
1406 	case GITS_CMD_MAPD:
1407 		ret = vgic_its_cmd_handle_mapd(kvm, its, its_cmd);
1408 		break;
1409 	case GITS_CMD_MAPC:
1410 		ret = vgic_its_cmd_handle_mapc(kvm, its, its_cmd);
1411 		break;
1412 	case GITS_CMD_MAPI:
1413 		ret = vgic_its_cmd_handle_mapi(kvm, its, its_cmd);
1414 		break;
1415 	case GITS_CMD_MAPTI:
1416 		ret = vgic_its_cmd_handle_mapi(kvm, its, its_cmd);
1417 		break;
1418 	case GITS_CMD_MOVI:
1419 		ret = vgic_its_cmd_handle_movi(kvm, its, its_cmd);
1420 		break;
1421 	case GITS_CMD_DISCARD:
1422 		ret = vgic_its_cmd_handle_discard(kvm, its, its_cmd);
1423 		break;
1424 	case GITS_CMD_CLEAR:
1425 		ret = vgic_its_cmd_handle_clear(kvm, its, its_cmd);
1426 		break;
1427 	case GITS_CMD_MOVALL:
1428 		ret = vgic_its_cmd_handle_movall(kvm, its, its_cmd);
1429 		break;
1430 	case GITS_CMD_INT:
1431 		ret = vgic_its_cmd_handle_int(kvm, its, its_cmd);
1432 		break;
1433 	case GITS_CMD_INV:
1434 		ret = vgic_its_cmd_handle_inv(kvm, its, its_cmd);
1435 		break;
1436 	case GITS_CMD_INVALL:
1437 		ret = vgic_its_cmd_handle_invall(kvm, its, its_cmd);
1438 		break;
1439 	case GITS_CMD_SYNC:
1440 		/* we ignore this command: we are in sync all of the time */
1441 		ret = 0;
1442 		break;
1443 	}
1444 	mutex_unlock(&its->its_lock);
1445 
1446 	return ret;
1447 }
1448 
vgic_sanitise_its_baser(u64 reg)1449 static u64 vgic_sanitise_its_baser(u64 reg)
1450 {
1451 	reg = vgic_sanitise_field(reg, GITS_BASER_SHAREABILITY_MASK,
1452 				  GITS_BASER_SHAREABILITY_SHIFT,
1453 				  vgic_sanitise_shareability);
1454 	reg = vgic_sanitise_field(reg, GITS_BASER_INNER_CACHEABILITY_MASK,
1455 				  GITS_BASER_INNER_CACHEABILITY_SHIFT,
1456 				  vgic_sanitise_inner_cacheability);
1457 	reg = vgic_sanitise_field(reg, GITS_BASER_OUTER_CACHEABILITY_MASK,
1458 				  GITS_BASER_OUTER_CACHEABILITY_SHIFT,
1459 				  vgic_sanitise_outer_cacheability);
1460 
1461 	/* We support only one (ITS) page size: 64K */
1462 	reg = (reg & ~GITS_BASER_PAGE_SIZE_MASK) | GITS_BASER_PAGE_SIZE_64K;
1463 
1464 	return reg;
1465 }
1466 
vgic_sanitise_its_cbaser(u64 reg)1467 static u64 vgic_sanitise_its_cbaser(u64 reg)
1468 {
1469 	reg = vgic_sanitise_field(reg, GITS_CBASER_SHAREABILITY_MASK,
1470 				  GITS_CBASER_SHAREABILITY_SHIFT,
1471 				  vgic_sanitise_shareability);
1472 	reg = vgic_sanitise_field(reg, GITS_CBASER_INNER_CACHEABILITY_MASK,
1473 				  GITS_CBASER_INNER_CACHEABILITY_SHIFT,
1474 				  vgic_sanitise_inner_cacheability);
1475 	reg = vgic_sanitise_field(reg, GITS_CBASER_OUTER_CACHEABILITY_MASK,
1476 				  GITS_CBASER_OUTER_CACHEABILITY_SHIFT,
1477 				  vgic_sanitise_outer_cacheability);
1478 
1479 	/* Sanitise the physical address to be 64k aligned. */
1480 	reg &= ~GENMASK_ULL(15, 12);
1481 
1482 	return reg;
1483 }
1484 
vgic_mmio_read_its_cbaser(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len)1485 static unsigned long vgic_mmio_read_its_cbaser(struct kvm *kvm,
1486 					       struct vgic_its *its,
1487 					       gpa_t addr, unsigned int len)
1488 {
1489 	return extract_bytes(its->cbaser, addr & 7, len);
1490 }
1491 
vgic_mmio_write_its_cbaser(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len,unsigned long val)1492 static void vgic_mmio_write_its_cbaser(struct kvm *kvm, struct vgic_its *its,
1493 				       gpa_t addr, unsigned int len,
1494 				       unsigned long val)
1495 {
1496 	/* When GITS_CTLR.Enable is 1, this register is RO. */
1497 	if (its->enabled)
1498 		return;
1499 
1500 	mutex_lock(&its->cmd_lock);
1501 	its->cbaser = update_64bit_reg(its->cbaser, addr & 7, len, val);
1502 	its->cbaser = vgic_sanitise_its_cbaser(its->cbaser);
1503 	its->creadr = 0;
1504 	/*
1505 	 * CWRITER is architecturally UNKNOWN on reset, but we need to reset
1506 	 * it to CREADR to make sure we start with an empty command buffer.
1507 	 */
1508 	its->cwriter = its->creadr;
1509 	mutex_unlock(&its->cmd_lock);
1510 }
1511 
1512 #define ITS_CMD_BUFFER_SIZE(baser)	((((baser) & 0xff) + 1) << 12)
1513 #define ITS_CMD_SIZE			32
1514 #define ITS_CMD_OFFSET(reg)		((reg) & GENMASK(19, 5))
1515 
1516 /* Must be called with the cmd_lock held. */
vgic_its_process_commands(struct kvm * kvm,struct vgic_its * its)1517 static void vgic_its_process_commands(struct kvm *kvm, struct vgic_its *its)
1518 {
1519 	gpa_t cbaser;
1520 	u64 cmd_buf[4];
1521 
1522 	/* Commands are only processed when the ITS is enabled. */
1523 	if (!its->enabled)
1524 		return;
1525 
1526 	cbaser = GITS_CBASER_ADDRESS(its->cbaser);
1527 
1528 	while (its->cwriter != its->creadr) {
1529 		int ret = kvm_read_guest_lock(kvm, cbaser + its->creadr,
1530 					      cmd_buf, ITS_CMD_SIZE);
1531 		/*
1532 		 * If kvm_read_guest() fails, this could be due to the guest
1533 		 * programming a bogus value in CBASER or something else going
1534 		 * wrong from which we cannot easily recover.
1535 		 * According to section 6.3.2 in the GICv3 spec we can just
1536 		 * ignore that command then.
1537 		 */
1538 		if (!ret)
1539 			vgic_its_handle_command(kvm, its, cmd_buf);
1540 
1541 		its->creadr += ITS_CMD_SIZE;
1542 		if (its->creadr == ITS_CMD_BUFFER_SIZE(its->cbaser))
1543 			its->creadr = 0;
1544 	}
1545 }
1546 
1547 /*
1548  * By writing to CWRITER the guest announces new commands to be processed.
1549  * To avoid any races in the first place, we take the its_cmd lock, which
1550  * protects our ring buffer variables, so that there is only one user
1551  * per ITS handling commands at a given time.
1552  */
vgic_mmio_write_its_cwriter(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len,unsigned long val)1553 static void vgic_mmio_write_its_cwriter(struct kvm *kvm, struct vgic_its *its,
1554 					gpa_t addr, unsigned int len,
1555 					unsigned long val)
1556 {
1557 	u64 reg;
1558 
1559 	if (!its)
1560 		return;
1561 
1562 	mutex_lock(&its->cmd_lock);
1563 
1564 	reg = update_64bit_reg(its->cwriter, addr & 7, len, val);
1565 	reg = ITS_CMD_OFFSET(reg);
1566 	if (reg >= ITS_CMD_BUFFER_SIZE(its->cbaser)) {
1567 		mutex_unlock(&its->cmd_lock);
1568 		return;
1569 	}
1570 	its->cwriter = reg;
1571 
1572 	vgic_its_process_commands(kvm, its);
1573 
1574 	mutex_unlock(&its->cmd_lock);
1575 }
1576 
vgic_mmio_read_its_cwriter(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len)1577 static unsigned long vgic_mmio_read_its_cwriter(struct kvm *kvm,
1578 						struct vgic_its *its,
1579 						gpa_t addr, unsigned int len)
1580 {
1581 	return extract_bytes(its->cwriter, addr & 0x7, len);
1582 }
1583 
vgic_mmio_read_its_creadr(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len)1584 static unsigned long vgic_mmio_read_its_creadr(struct kvm *kvm,
1585 					       struct vgic_its *its,
1586 					       gpa_t addr, unsigned int len)
1587 {
1588 	return extract_bytes(its->creadr, addr & 0x7, len);
1589 }
1590 
vgic_mmio_uaccess_write_its_creadr(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len,unsigned long val)1591 static int vgic_mmio_uaccess_write_its_creadr(struct kvm *kvm,
1592 					      struct vgic_its *its,
1593 					      gpa_t addr, unsigned int len,
1594 					      unsigned long val)
1595 {
1596 	u32 cmd_offset;
1597 	int ret = 0;
1598 
1599 	mutex_lock(&its->cmd_lock);
1600 
1601 	if (its->enabled) {
1602 		ret = -EBUSY;
1603 		goto out;
1604 	}
1605 
1606 	cmd_offset = ITS_CMD_OFFSET(val);
1607 	if (cmd_offset >= ITS_CMD_BUFFER_SIZE(its->cbaser)) {
1608 		ret = -EINVAL;
1609 		goto out;
1610 	}
1611 
1612 	its->creadr = cmd_offset;
1613 out:
1614 	mutex_unlock(&its->cmd_lock);
1615 	return ret;
1616 }
1617 
1618 #define BASER_INDEX(addr) (((addr) / sizeof(u64)) & 0x7)
vgic_mmio_read_its_baser(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len)1619 static unsigned long vgic_mmio_read_its_baser(struct kvm *kvm,
1620 					      struct vgic_its *its,
1621 					      gpa_t addr, unsigned int len)
1622 {
1623 	u64 reg;
1624 
1625 	switch (BASER_INDEX(addr)) {
1626 	case 0:
1627 		reg = its->baser_device_table;
1628 		break;
1629 	case 1:
1630 		reg = its->baser_coll_table;
1631 		break;
1632 	default:
1633 		reg = 0;
1634 		break;
1635 	}
1636 
1637 	return extract_bytes(reg, addr & 7, len);
1638 }
1639 
1640 #define GITS_BASER_RO_MASK	(GENMASK_ULL(52, 48) | GENMASK_ULL(58, 56))
vgic_mmio_write_its_baser(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len,unsigned long val)1641 static void vgic_mmio_write_its_baser(struct kvm *kvm,
1642 				      struct vgic_its *its,
1643 				      gpa_t addr, unsigned int len,
1644 				      unsigned long val)
1645 {
1646 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
1647 	u64 entry_size, table_type;
1648 	u64 reg, *regptr, clearbits = 0;
1649 
1650 	/* When GITS_CTLR.Enable is 1, we ignore write accesses. */
1651 	if (its->enabled)
1652 		return;
1653 
1654 	switch (BASER_INDEX(addr)) {
1655 	case 0:
1656 		regptr = &its->baser_device_table;
1657 		entry_size = abi->dte_esz;
1658 		table_type = GITS_BASER_TYPE_DEVICE;
1659 		break;
1660 	case 1:
1661 		regptr = &its->baser_coll_table;
1662 		entry_size = abi->cte_esz;
1663 		table_type = GITS_BASER_TYPE_COLLECTION;
1664 		clearbits = GITS_BASER_INDIRECT;
1665 		break;
1666 	default:
1667 		return;
1668 	}
1669 
1670 	reg = update_64bit_reg(*regptr, addr & 7, len, val);
1671 	reg &= ~GITS_BASER_RO_MASK;
1672 	reg &= ~clearbits;
1673 
1674 	reg |= (entry_size - 1) << GITS_BASER_ENTRY_SIZE_SHIFT;
1675 	reg |= table_type << GITS_BASER_TYPE_SHIFT;
1676 	reg = vgic_sanitise_its_baser(reg);
1677 
1678 	*regptr = reg;
1679 
1680 	if (!(reg & GITS_BASER_VALID)) {
1681 		/* Take the its_lock to prevent a race with a save/restore */
1682 		mutex_lock(&its->its_lock);
1683 		switch (table_type) {
1684 		case GITS_BASER_TYPE_DEVICE:
1685 			vgic_its_free_device_list(kvm, its);
1686 			break;
1687 		case GITS_BASER_TYPE_COLLECTION:
1688 			vgic_its_free_collection_list(kvm, its);
1689 			break;
1690 		}
1691 		mutex_unlock(&its->its_lock);
1692 	}
1693 }
1694 
vgic_mmio_read_its_ctlr(struct kvm * vcpu,struct vgic_its * its,gpa_t addr,unsigned int len)1695 static unsigned long vgic_mmio_read_its_ctlr(struct kvm *vcpu,
1696 					     struct vgic_its *its,
1697 					     gpa_t addr, unsigned int len)
1698 {
1699 	u32 reg = 0;
1700 
1701 	mutex_lock(&its->cmd_lock);
1702 	if (its->creadr == its->cwriter)
1703 		reg |= GITS_CTLR_QUIESCENT;
1704 	if (its->enabled)
1705 		reg |= GITS_CTLR_ENABLE;
1706 	mutex_unlock(&its->cmd_lock);
1707 
1708 	return reg;
1709 }
1710 
vgic_mmio_write_its_ctlr(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len,unsigned long val)1711 static void vgic_mmio_write_its_ctlr(struct kvm *kvm, struct vgic_its *its,
1712 				     gpa_t addr, unsigned int len,
1713 				     unsigned long val)
1714 {
1715 	mutex_lock(&its->cmd_lock);
1716 
1717 	/*
1718 	 * It is UNPREDICTABLE to enable the ITS if any of the CBASER or
1719 	 * device/collection BASER are invalid
1720 	 */
1721 	if (!its->enabled && (val & GITS_CTLR_ENABLE) &&
1722 		(!(its->baser_device_table & GITS_BASER_VALID) ||
1723 		 !(its->baser_coll_table & GITS_BASER_VALID) ||
1724 		 !(its->cbaser & GITS_CBASER_VALID)))
1725 		goto out;
1726 
1727 	its->enabled = !!(val & GITS_CTLR_ENABLE);
1728 	if (!its->enabled)
1729 		vgic_its_invalidate_cache(its);
1730 
1731 	/*
1732 	 * Try to process any pending commands. This function bails out early
1733 	 * if the ITS is disabled or no commands have been queued.
1734 	 */
1735 	vgic_its_process_commands(kvm, its);
1736 
1737 out:
1738 	mutex_unlock(&its->cmd_lock);
1739 }
1740 
1741 #define REGISTER_ITS_DESC(off, rd, wr, length, acc)		\
1742 {								\
1743 	.reg_offset = off,					\
1744 	.len = length,						\
1745 	.access_flags = acc,					\
1746 	.its_read = rd,						\
1747 	.its_write = wr,					\
1748 }
1749 
1750 #define REGISTER_ITS_DESC_UACCESS(off, rd, wr, uwr, length, acc)\
1751 {								\
1752 	.reg_offset = off,					\
1753 	.len = length,						\
1754 	.access_flags = acc,					\
1755 	.its_read = rd,						\
1756 	.its_write = wr,					\
1757 	.uaccess_its_write = uwr,				\
1758 }
1759 
its_mmio_write_wi(struct kvm * kvm,struct vgic_its * its,gpa_t addr,unsigned int len,unsigned long val)1760 static void its_mmio_write_wi(struct kvm *kvm, struct vgic_its *its,
1761 			      gpa_t addr, unsigned int len, unsigned long val)
1762 {
1763 	/* Ignore */
1764 }
1765 
1766 static struct vgic_register_region its_registers[] = {
1767 	REGISTER_ITS_DESC(GITS_CTLR,
1768 		vgic_mmio_read_its_ctlr, vgic_mmio_write_its_ctlr, 4,
1769 		VGIC_ACCESS_32bit),
1770 	REGISTER_ITS_DESC_UACCESS(GITS_IIDR,
1771 		vgic_mmio_read_its_iidr, its_mmio_write_wi,
1772 		vgic_mmio_uaccess_write_its_iidr, 4,
1773 		VGIC_ACCESS_32bit),
1774 	REGISTER_ITS_DESC(GITS_TYPER,
1775 		vgic_mmio_read_its_typer, its_mmio_write_wi, 8,
1776 		VGIC_ACCESS_64bit | VGIC_ACCESS_32bit),
1777 	REGISTER_ITS_DESC(GITS_CBASER,
1778 		vgic_mmio_read_its_cbaser, vgic_mmio_write_its_cbaser, 8,
1779 		VGIC_ACCESS_64bit | VGIC_ACCESS_32bit),
1780 	REGISTER_ITS_DESC(GITS_CWRITER,
1781 		vgic_mmio_read_its_cwriter, vgic_mmio_write_its_cwriter, 8,
1782 		VGIC_ACCESS_64bit | VGIC_ACCESS_32bit),
1783 	REGISTER_ITS_DESC_UACCESS(GITS_CREADR,
1784 		vgic_mmio_read_its_creadr, its_mmio_write_wi,
1785 		vgic_mmio_uaccess_write_its_creadr, 8,
1786 		VGIC_ACCESS_64bit | VGIC_ACCESS_32bit),
1787 	REGISTER_ITS_DESC(GITS_BASER,
1788 		vgic_mmio_read_its_baser, vgic_mmio_write_its_baser, 0x40,
1789 		VGIC_ACCESS_64bit | VGIC_ACCESS_32bit),
1790 	REGISTER_ITS_DESC(GITS_IDREGS_BASE,
1791 		vgic_mmio_read_its_idregs, its_mmio_write_wi, 0x30,
1792 		VGIC_ACCESS_32bit),
1793 };
1794 
1795 /* This is called on setting the LPI enable bit in the redistributor. */
vgic_enable_lpis(struct kvm_vcpu * vcpu)1796 void vgic_enable_lpis(struct kvm_vcpu *vcpu)
1797 {
1798 	if (!(vcpu->arch.vgic_cpu.pendbaser & GICR_PENDBASER_PTZ))
1799 		its_sync_lpi_pending_table(vcpu);
1800 }
1801 
vgic_register_its_iodev(struct kvm * kvm,struct vgic_its * its,u64 addr)1802 static int vgic_register_its_iodev(struct kvm *kvm, struct vgic_its *its,
1803 				   u64 addr)
1804 {
1805 	struct vgic_io_device *iodev = &its->iodev;
1806 	int ret;
1807 
1808 	mutex_lock(&kvm->slots_lock);
1809 	if (!IS_VGIC_ADDR_UNDEF(its->vgic_its_base)) {
1810 		ret = -EBUSY;
1811 		goto out;
1812 	}
1813 
1814 	its->vgic_its_base = addr;
1815 	iodev->regions = its_registers;
1816 	iodev->nr_regions = ARRAY_SIZE(its_registers);
1817 	kvm_iodevice_init(&iodev->dev, &kvm_io_gic_ops);
1818 
1819 	iodev->base_addr = its->vgic_its_base;
1820 	iodev->iodev_type = IODEV_ITS;
1821 	iodev->its = its;
1822 	ret = kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS, iodev->base_addr,
1823 				      KVM_VGIC_V3_ITS_SIZE, &iodev->dev);
1824 out:
1825 	mutex_unlock(&kvm->slots_lock);
1826 
1827 	return ret;
1828 }
1829 
1830 #define INITIAL_BASER_VALUE						  \
1831 	(GIC_BASER_CACHEABILITY(GITS_BASER, INNER, RaWb)		| \
1832 	 GIC_BASER_CACHEABILITY(GITS_BASER, OUTER, SameAsInner)		| \
1833 	 GIC_BASER_SHAREABILITY(GITS_BASER, InnerShareable)		| \
1834 	 GITS_BASER_PAGE_SIZE_64K)
1835 
1836 #define INITIAL_PROPBASER_VALUE						  \
1837 	(GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RaWb)		| \
1838 	 GIC_BASER_CACHEABILITY(GICR_PROPBASER, OUTER, SameAsInner)	| \
1839 	 GIC_BASER_SHAREABILITY(GICR_PROPBASER, InnerShareable))
1840 
vgic_its_create(struct kvm_device * dev,u32 type)1841 static int vgic_its_create(struct kvm_device *dev, u32 type)
1842 {
1843 	int ret;
1844 	struct vgic_its *its;
1845 
1846 	if (type != KVM_DEV_TYPE_ARM_VGIC_ITS)
1847 		return -ENODEV;
1848 
1849 	its = kzalloc(sizeof(struct vgic_its), GFP_KERNEL_ACCOUNT);
1850 	if (!its)
1851 		return -ENOMEM;
1852 
1853 	mutex_lock(&dev->kvm->arch.config_lock);
1854 
1855 	if (vgic_initialized(dev->kvm)) {
1856 		ret = vgic_v4_init(dev->kvm);
1857 		if (ret < 0) {
1858 			mutex_unlock(&dev->kvm->arch.config_lock);
1859 			kfree(its);
1860 			return ret;
1861 		}
1862 	}
1863 
1864 	mutex_init(&its->its_lock);
1865 	mutex_init(&its->cmd_lock);
1866 
1867 	/* Yep, even more trickery for lock ordering... */
1868 #ifdef CONFIG_LOCKDEP
1869 	mutex_lock(&its->cmd_lock);
1870 	mutex_lock(&its->its_lock);
1871 	mutex_unlock(&its->its_lock);
1872 	mutex_unlock(&its->cmd_lock);
1873 #endif
1874 
1875 	its->vgic_its_base = VGIC_ADDR_UNDEF;
1876 
1877 	INIT_LIST_HEAD(&its->device_list);
1878 	INIT_LIST_HEAD(&its->collection_list);
1879 	xa_init(&its->translation_cache);
1880 
1881 	dev->kvm->arch.vgic.msis_require_devid = true;
1882 	dev->kvm->arch.vgic.has_its = true;
1883 	its->enabled = false;
1884 	its->dev = dev;
1885 
1886 	its->baser_device_table = INITIAL_BASER_VALUE			|
1887 		((u64)GITS_BASER_TYPE_DEVICE << GITS_BASER_TYPE_SHIFT);
1888 	its->baser_coll_table = INITIAL_BASER_VALUE |
1889 		((u64)GITS_BASER_TYPE_COLLECTION << GITS_BASER_TYPE_SHIFT);
1890 	dev->kvm->arch.vgic.propbaser = INITIAL_PROPBASER_VALUE;
1891 
1892 	dev->private = its;
1893 
1894 	ret = vgic_its_set_abi(its, NR_ITS_ABIS - 1);
1895 
1896 	mutex_unlock(&dev->kvm->arch.config_lock);
1897 
1898 	return ret;
1899 }
1900 
vgic_its_destroy(struct kvm_device * kvm_dev)1901 static void vgic_its_destroy(struct kvm_device *kvm_dev)
1902 {
1903 	struct kvm *kvm = kvm_dev->kvm;
1904 	struct vgic_its *its = kvm_dev->private;
1905 
1906 	mutex_lock(&its->its_lock);
1907 
1908 	vgic_its_debug_destroy(kvm_dev);
1909 
1910 	vgic_its_free_device_list(kvm, its);
1911 	vgic_its_free_collection_list(kvm, its);
1912 	vgic_its_invalidate_cache(its);
1913 	xa_destroy(&its->translation_cache);
1914 
1915 	mutex_unlock(&its->its_lock);
1916 	kfree(its);
1917 	kfree(kvm_dev);/* alloc by kvm_ioctl_create_device, free by .destroy */
1918 }
1919 
vgic_its_has_attr_regs(struct kvm_device * dev,struct kvm_device_attr * attr)1920 static int vgic_its_has_attr_regs(struct kvm_device *dev,
1921 				  struct kvm_device_attr *attr)
1922 {
1923 	const struct vgic_register_region *region;
1924 	gpa_t offset = attr->attr;
1925 	int align;
1926 
1927 	align = (offset < GITS_TYPER) || (offset >= GITS_PIDR4) ? 0x3 : 0x7;
1928 
1929 	if (offset & align)
1930 		return -EINVAL;
1931 
1932 	region = vgic_find_mmio_region(its_registers,
1933 				       ARRAY_SIZE(its_registers),
1934 				       offset);
1935 	if (!region)
1936 		return -ENXIO;
1937 
1938 	return 0;
1939 }
1940 
vgic_its_attr_regs_access(struct kvm_device * dev,struct kvm_device_attr * attr,u64 * reg,bool is_write)1941 static int vgic_its_attr_regs_access(struct kvm_device *dev,
1942 				     struct kvm_device_attr *attr,
1943 				     u64 *reg, bool is_write)
1944 {
1945 	const struct vgic_register_region *region;
1946 	struct vgic_its *its;
1947 	gpa_t addr, offset;
1948 	unsigned int len;
1949 	int align, ret = 0;
1950 
1951 	its = dev->private;
1952 	offset = attr->attr;
1953 
1954 	/*
1955 	 * Although the spec supports upper/lower 32-bit accesses to
1956 	 * 64-bit ITS registers, the userspace ABI requires 64-bit
1957 	 * accesses to all 64-bit wide registers. We therefore only
1958 	 * support 32-bit accesses to GITS_CTLR, GITS_IIDR and GITS ID
1959 	 * registers
1960 	 */
1961 	if ((offset < GITS_TYPER) || (offset >= GITS_PIDR4))
1962 		align = 0x3;
1963 	else
1964 		align = 0x7;
1965 
1966 	if (offset & align)
1967 		return -EINVAL;
1968 
1969 	mutex_lock(&dev->kvm->lock);
1970 
1971 	if (kvm_trylock_all_vcpus(dev->kvm)) {
1972 		mutex_unlock(&dev->kvm->lock);
1973 		return -EBUSY;
1974 	}
1975 
1976 	mutex_lock(&dev->kvm->arch.config_lock);
1977 
1978 	if (IS_VGIC_ADDR_UNDEF(its->vgic_its_base)) {
1979 		ret = -ENXIO;
1980 		goto out;
1981 	}
1982 
1983 	region = vgic_find_mmio_region(its_registers,
1984 				       ARRAY_SIZE(its_registers),
1985 				       offset);
1986 	if (!region) {
1987 		ret = -ENXIO;
1988 		goto out;
1989 	}
1990 
1991 	addr = its->vgic_its_base + offset;
1992 
1993 	len = region->access_flags & VGIC_ACCESS_64bit ? 8 : 4;
1994 
1995 	if (is_write) {
1996 		if (region->uaccess_its_write)
1997 			ret = region->uaccess_its_write(dev->kvm, its, addr,
1998 							len, *reg);
1999 		else
2000 			region->its_write(dev->kvm, its, addr, len, *reg);
2001 	} else {
2002 		*reg = region->its_read(dev->kvm, its, addr, len);
2003 	}
2004 out:
2005 	mutex_unlock(&dev->kvm->arch.config_lock);
2006 	kvm_unlock_all_vcpus(dev->kvm);
2007 	mutex_unlock(&dev->kvm->lock);
2008 	return ret;
2009 }
2010 
compute_next_devid_offset(struct list_head * h,struct its_device * dev)2011 static u32 compute_next_devid_offset(struct list_head *h,
2012 				     struct its_device *dev)
2013 {
2014 	struct its_device *next;
2015 	u32 next_offset;
2016 
2017 	if (list_is_last(&dev->dev_list, h))
2018 		return 0;
2019 	next = list_next_entry(dev, dev_list);
2020 	next_offset = next->device_id - dev->device_id;
2021 
2022 	return min_t(u32, next_offset, VITS_DTE_MAX_DEVID_OFFSET);
2023 }
2024 
compute_next_eventid_offset(struct list_head * h,struct its_ite * ite)2025 static u32 compute_next_eventid_offset(struct list_head *h, struct its_ite *ite)
2026 {
2027 	struct its_ite *next;
2028 	u32 next_offset;
2029 
2030 	if (list_is_last(&ite->ite_list, h))
2031 		return 0;
2032 	next = list_next_entry(ite, ite_list);
2033 	next_offset = next->event_id - ite->event_id;
2034 
2035 	return min_t(u32, next_offset, VITS_ITE_MAX_EVENTID_OFFSET);
2036 }
2037 
2038 /**
2039  * typedef entry_fn_t - Callback called on a table entry restore path
2040  * @its: its handle
2041  * @id: id of the entry
2042  * @entry: pointer to the entry
2043  * @opaque: pointer to an opaque data
2044  *
2045  * Return: < 0 on error, 0 if last element was identified, id offset to next
2046  * element otherwise
2047  */
2048 typedef int (*entry_fn_t)(struct vgic_its *its, u32 id, void *entry,
2049 			  void *opaque);
2050 
2051 /**
2052  * scan_its_table - Scan a contiguous table in guest RAM and applies a function
2053  * to each entry
2054  *
2055  * @its: its handle
2056  * @base: base gpa of the table
2057  * @size: size of the table in bytes
2058  * @esz: entry size in bytes
2059  * @start_id: the ID of the first entry in the table
2060  * (non zero for 2d level tables)
2061  * @fn: function to apply on each entry
2062  * @opaque: pointer to opaque data
2063  *
2064  * Return: < 0 on error, 0 if last element was identified, 1 otherwise
2065  * (the last element may not be found on second level tables)
2066  */
scan_its_table(struct vgic_its * its,gpa_t base,int size,u32 esz,int start_id,entry_fn_t fn,void * opaque)2067 static int scan_its_table(struct vgic_its *its, gpa_t base, int size, u32 esz,
2068 			  int start_id, entry_fn_t fn, void *opaque)
2069 {
2070 	struct kvm *kvm = its->dev->kvm;
2071 	unsigned long len = size;
2072 	int id = start_id;
2073 	gpa_t gpa = base;
2074 	char entry[ESZ_MAX];
2075 	int ret;
2076 
2077 	memset(entry, 0, esz);
2078 
2079 	while (true) {
2080 		int next_offset;
2081 		size_t byte_offset;
2082 
2083 		ret = kvm_read_guest_lock(kvm, gpa, entry, esz);
2084 		if (ret)
2085 			return ret;
2086 
2087 		next_offset = fn(its, id, entry, opaque);
2088 		if (next_offset <= 0)
2089 			return next_offset;
2090 
2091 		byte_offset = next_offset * esz;
2092 		if (byte_offset >= len)
2093 			break;
2094 
2095 		id += next_offset;
2096 		gpa += byte_offset;
2097 		len -= byte_offset;
2098 	}
2099 	return 1;
2100 }
2101 
2102 /*
2103  * vgic_its_save_ite - Save an interrupt translation entry at @gpa
2104  */
vgic_its_save_ite(struct vgic_its * its,struct its_device * dev,struct its_ite * ite,gpa_t gpa)2105 static int vgic_its_save_ite(struct vgic_its *its, struct its_device *dev,
2106 			      struct its_ite *ite, gpa_t gpa)
2107 {
2108 	u32 next_offset;
2109 	u64 val;
2110 
2111 	next_offset = compute_next_eventid_offset(&dev->itt_head, ite);
2112 	val = ((u64)next_offset << KVM_ITS_ITE_NEXT_SHIFT) |
2113 	       ((u64)ite->irq->intid << KVM_ITS_ITE_PINTID_SHIFT) |
2114 		ite->collection->collection_id;
2115 	val = cpu_to_le64(val);
2116 
2117 	return vgic_its_write_entry_lock(its, gpa, val, ite);
2118 }
2119 
2120 /**
2121  * vgic_its_restore_ite - restore an interrupt translation entry
2122  *
2123  * @its: its handle
2124  * @event_id: id used for indexing
2125  * @ptr: pointer to the ITE entry
2126  * @opaque: pointer to the its_device
2127  */
vgic_its_restore_ite(struct vgic_its * its,u32 event_id,void * ptr,void * opaque)2128 static int vgic_its_restore_ite(struct vgic_its *its, u32 event_id,
2129 				void *ptr, void *opaque)
2130 {
2131 	struct its_device *dev = opaque;
2132 	struct its_collection *collection;
2133 	struct kvm *kvm = its->dev->kvm;
2134 	struct kvm_vcpu *vcpu = NULL;
2135 	u64 val;
2136 	u64 *p = (u64 *)ptr;
2137 	struct vgic_irq *irq;
2138 	u32 coll_id, lpi_id;
2139 	struct its_ite *ite;
2140 	u32 offset;
2141 
2142 	val = *p;
2143 
2144 	val = le64_to_cpu(val);
2145 
2146 	coll_id = val & KVM_ITS_ITE_ICID_MASK;
2147 	lpi_id = (val & KVM_ITS_ITE_PINTID_MASK) >> KVM_ITS_ITE_PINTID_SHIFT;
2148 
2149 	if (!lpi_id)
2150 		return 1; /* invalid entry, no choice but to scan next entry */
2151 
2152 	if (lpi_id < VGIC_MIN_LPI)
2153 		return -EINVAL;
2154 
2155 	offset = val >> KVM_ITS_ITE_NEXT_SHIFT;
2156 	if (event_id + offset >= BIT_ULL(dev->num_eventid_bits))
2157 		return -EINVAL;
2158 
2159 	collection = find_collection(its, coll_id);
2160 	if (!collection)
2161 		return -EINVAL;
2162 
2163 	if (!vgic_its_check_event_id(its, dev, event_id))
2164 		return -EINVAL;
2165 
2166 	ite = vgic_its_alloc_ite(dev, collection, event_id);
2167 	if (IS_ERR(ite))
2168 		return PTR_ERR(ite);
2169 
2170 	if (its_is_collection_mapped(collection))
2171 		vcpu = kvm_get_vcpu_by_id(kvm, collection->target_addr);
2172 
2173 	irq = vgic_add_lpi(kvm, lpi_id, vcpu);
2174 	if (IS_ERR(irq)) {
2175 		its_free_ite(kvm, ite);
2176 		return PTR_ERR(irq);
2177 	}
2178 	ite->irq = irq;
2179 
2180 	return offset;
2181 }
2182 
vgic_its_ite_cmp(void * priv,const struct list_head * a,const struct list_head * b)2183 static int vgic_its_ite_cmp(void *priv, const struct list_head *a,
2184 			    const struct list_head *b)
2185 {
2186 	struct its_ite *itea = container_of(a, struct its_ite, ite_list);
2187 	struct its_ite *iteb = container_of(b, struct its_ite, ite_list);
2188 
2189 	if (itea->event_id < iteb->event_id)
2190 		return -1;
2191 	else
2192 		return 1;
2193 }
2194 
vgic_its_save_itt(struct vgic_its * its,struct its_device * device)2195 static int vgic_its_save_itt(struct vgic_its *its, struct its_device *device)
2196 {
2197 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
2198 	gpa_t base = device->itt_addr;
2199 	struct its_ite *ite;
2200 	int ret;
2201 	int ite_esz = abi->ite_esz;
2202 
2203 	list_sort(NULL, &device->itt_head, vgic_its_ite_cmp);
2204 
2205 	list_for_each_entry(ite, &device->itt_head, ite_list) {
2206 		gpa_t gpa = base + ite->event_id * ite_esz;
2207 
2208 		/*
2209 		 * If an LPI carries the HW bit, this means that this
2210 		 * interrupt is controlled by GICv4, and we do not
2211 		 * have direct access to that state without GICv4.1.
2212 		 * Let's simply fail the save operation...
2213 		 */
2214 		if (ite->irq->hw && !kvm_vgic_global_state.has_gicv4_1)
2215 			return -EACCES;
2216 
2217 		ret = vgic_its_save_ite(its, device, ite, gpa);
2218 		if (ret)
2219 			return ret;
2220 	}
2221 	return 0;
2222 }
2223 
2224 /**
2225  * vgic_its_restore_itt - restore the ITT of a device
2226  *
2227  * @its: its handle
2228  * @dev: device handle
2229  *
2230  * Return 0 on success, < 0 on error
2231  */
vgic_its_restore_itt(struct vgic_its * its,struct its_device * dev)2232 static int vgic_its_restore_itt(struct vgic_its *its, struct its_device *dev)
2233 {
2234 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
2235 	gpa_t base = dev->itt_addr;
2236 	int ret;
2237 	int ite_esz = abi->ite_esz;
2238 	size_t max_size = BIT_ULL(dev->num_eventid_bits) * ite_esz;
2239 
2240 	ret = scan_its_table(its, base, max_size, ite_esz, 0,
2241 			     vgic_its_restore_ite, dev);
2242 
2243 	/* scan_its_table returns +1 if all ITEs are invalid */
2244 	if (ret > 0)
2245 		ret = 0;
2246 
2247 	return ret;
2248 }
2249 
2250 /**
2251  * vgic_its_save_dte - Save a device table entry at a given GPA
2252  *
2253  * @its: ITS handle
2254  * @dev: ITS device
2255  * @ptr: GPA
2256  */
vgic_its_save_dte(struct vgic_its * its,struct its_device * dev,gpa_t ptr)2257 static int vgic_its_save_dte(struct vgic_its *its, struct its_device *dev,
2258 			     gpa_t ptr)
2259 {
2260 	u64 val, itt_addr_field;
2261 	u32 next_offset;
2262 
2263 	itt_addr_field = dev->itt_addr >> 8;
2264 	next_offset = compute_next_devid_offset(&its->device_list, dev);
2265 	val = (1ULL << KVM_ITS_DTE_VALID_SHIFT |
2266 	       ((u64)next_offset << KVM_ITS_DTE_NEXT_SHIFT) |
2267 	       (itt_addr_field << KVM_ITS_DTE_ITTADDR_SHIFT) |
2268 		(dev->num_eventid_bits - 1));
2269 	val = cpu_to_le64(val);
2270 
2271 	return vgic_its_write_entry_lock(its, ptr, val, dte);
2272 }
2273 
2274 /**
2275  * vgic_its_restore_dte - restore a device table entry
2276  *
2277  * @its: its handle
2278  * @id: device id the DTE corresponds to
2279  * @ptr: kernel VA where the 8 byte DTE is located
2280  * @opaque: unused
2281  *
2282  * Return: < 0 on error, 0 if the dte is the last one, id offset to the
2283  * next dte otherwise
2284  */
vgic_its_restore_dte(struct vgic_its * its,u32 id,void * ptr,void * opaque)2285 static int vgic_its_restore_dte(struct vgic_its *its, u32 id,
2286 				void *ptr, void *opaque)
2287 {
2288 	struct its_device *dev;
2289 	u64 baser = its->baser_device_table;
2290 	gpa_t itt_addr;
2291 	u8 num_eventid_bits;
2292 	u64 entry = *(u64 *)ptr;
2293 	bool valid;
2294 	u32 offset;
2295 	int ret;
2296 
2297 	entry = le64_to_cpu(entry);
2298 
2299 	valid = entry >> KVM_ITS_DTE_VALID_SHIFT;
2300 	num_eventid_bits = (entry & KVM_ITS_DTE_SIZE_MASK) + 1;
2301 	itt_addr = ((entry & KVM_ITS_DTE_ITTADDR_MASK)
2302 			>> KVM_ITS_DTE_ITTADDR_SHIFT) << 8;
2303 
2304 	if (!valid)
2305 		return 1;
2306 
2307 	/* dte entry is valid */
2308 	offset = (entry & KVM_ITS_DTE_NEXT_MASK) >> KVM_ITS_DTE_NEXT_SHIFT;
2309 
2310 	if (!vgic_its_check_id(its, baser, id, NULL))
2311 		return -EINVAL;
2312 
2313 	dev = vgic_its_alloc_device(its, id, itt_addr, num_eventid_bits);
2314 	if (IS_ERR(dev))
2315 		return PTR_ERR(dev);
2316 
2317 	ret = vgic_its_restore_itt(its, dev);
2318 	if (ret) {
2319 		vgic_its_free_device(its->dev->kvm, its, dev);
2320 		return ret;
2321 	}
2322 
2323 	return offset;
2324 }
2325 
vgic_its_device_cmp(void * priv,const struct list_head * a,const struct list_head * b)2326 static int vgic_its_device_cmp(void *priv, const struct list_head *a,
2327 			       const struct list_head *b)
2328 {
2329 	struct its_device *deva = container_of(a, struct its_device, dev_list);
2330 	struct its_device *devb = container_of(b, struct its_device, dev_list);
2331 
2332 	if (deva->device_id < devb->device_id)
2333 		return -1;
2334 	else
2335 		return 1;
2336 }
2337 
2338 /*
2339  * vgic_its_save_device_tables - Save the device table and all ITT
2340  * into guest RAM
2341  *
2342  * L1/L2 handling is hidden by vgic_its_check_id() helper which directly
2343  * returns the GPA of the device entry
2344  */
vgic_its_save_device_tables(struct vgic_its * its)2345 static int vgic_its_save_device_tables(struct vgic_its *its)
2346 {
2347 	u64 baser = its->baser_device_table;
2348 	struct its_device *dev;
2349 
2350 	if (!(baser & GITS_BASER_VALID))
2351 		return 0;
2352 
2353 	list_sort(NULL, &its->device_list, vgic_its_device_cmp);
2354 
2355 	list_for_each_entry(dev, &its->device_list, dev_list) {
2356 		int ret;
2357 		gpa_t eaddr;
2358 
2359 		if (!vgic_its_check_id(its, baser,
2360 				       dev->device_id, &eaddr))
2361 			return -EINVAL;
2362 
2363 		ret = vgic_its_save_itt(its, dev);
2364 		if (ret)
2365 			return ret;
2366 
2367 		ret = vgic_its_save_dte(its, dev, eaddr);
2368 		if (ret)
2369 			return ret;
2370 	}
2371 	return 0;
2372 }
2373 
2374 /**
2375  * handle_l1_dte - callback used for L1 device table entries (2 stage case)
2376  *
2377  * @its: its handle
2378  * @id: index of the entry in the L1 table
2379  * @addr: kernel VA
2380  * @opaque: unused
2381  *
2382  * L1 table entries are scanned by steps of 1 entry
2383  * Return < 0 if error, 0 if last dte was found when scanning the L2
2384  * table, +1 otherwise (meaning next L1 entry must be scanned)
2385  */
handle_l1_dte(struct vgic_its * its,u32 id,void * addr,void * opaque)2386 static int handle_l1_dte(struct vgic_its *its, u32 id, void *addr,
2387 			 void *opaque)
2388 {
2389 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
2390 	int l2_start_id = id * (SZ_64K / abi->dte_esz);
2391 	u64 entry = *(u64 *)addr;
2392 	int dte_esz = abi->dte_esz;
2393 	gpa_t gpa;
2394 	int ret;
2395 
2396 	entry = le64_to_cpu(entry);
2397 
2398 	if (!(entry & KVM_ITS_L1E_VALID_MASK))
2399 		return 1;
2400 
2401 	gpa = entry & KVM_ITS_L1E_ADDR_MASK;
2402 
2403 	ret = scan_its_table(its, gpa, SZ_64K, dte_esz,
2404 			     l2_start_id, vgic_its_restore_dte, NULL);
2405 
2406 	return ret;
2407 }
2408 
2409 /*
2410  * vgic_its_restore_device_tables - Restore the device table and all ITT
2411  * from guest RAM to internal data structs
2412  */
vgic_its_restore_device_tables(struct vgic_its * its)2413 static int vgic_its_restore_device_tables(struct vgic_its *its)
2414 {
2415 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
2416 	u64 baser = its->baser_device_table;
2417 	int l1_esz, ret;
2418 	int l1_tbl_size = GITS_BASER_NR_PAGES(baser) * SZ_64K;
2419 	gpa_t l1_gpa;
2420 
2421 	if (!(baser & GITS_BASER_VALID))
2422 		return 0;
2423 
2424 	l1_gpa = GITS_BASER_ADDR_48_to_52(baser);
2425 
2426 	if (baser & GITS_BASER_INDIRECT) {
2427 		l1_esz = GITS_LVL1_ENTRY_SIZE;
2428 		ret = scan_its_table(its, l1_gpa, l1_tbl_size, l1_esz, 0,
2429 				     handle_l1_dte, NULL);
2430 	} else {
2431 		l1_esz = abi->dte_esz;
2432 		ret = scan_its_table(its, l1_gpa, l1_tbl_size, l1_esz, 0,
2433 				     vgic_its_restore_dte, NULL);
2434 	}
2435 
2436 	/* scan_its_table returns +1 if all entries are invalid */
2437 	if (ret > 0)
2438 		ret = 0;
2439 
2440 	if (ret < 0)
2441 		vgic_its_free_device_list(its->dev->kvm, its);
2442 
2443 	return ret;
2444 }
2445 
vgic_its_save_cte(struct vgic_its * its,struct its_collection * collection,gpa_t gpa)2446 static int vgic_its_save_cte(struct vgic_its *its,
2447 			     struct its_collection *collection,
2448 			     gpa_t gpa)
2449 {
2450 	u64 val;
2451 
2452 	val = (1ULL << KVM_ITS_CTE_VALID_SHIFT |
2453 	       ((u64)collection->target_addr << KVM_ITS_CTE_RDBASE_SHIFT) |
2454 	       collection->collection_id);
2455 	val = cpu_to_le64(val);
2456 
2457 	return vgic_its_write_entry_lock(its, gpa, val, cte);
2458 }
2459 
2460 /*
2461  * Restore a collection entry into the ITS collection table.
2462  * Return +1 on success, 0 if the entry was invalid (which should be
2463  * interpreted as end-of-table), and a negative error value for generic errors.
2464  */
vgic_its_restore_cte(struct vgic_its * its,gpa_t gpa)2465 static int vgic_its_restore_cte(struct vgic_its *its, gpa_t gpa)
2466 {
2467 	struct its_collection *collection;
2468 	struct kvm *kvm = its->dev->kvm;
2469 	u32 target_addr, coll_id;
2470 	u64 val;
2471 	int ret;
2472 
2473 	ret = vgic_its_read_entry_lock(its, gpa, &val, cte);
2474 	if (ret)
2475 		return ret;
2476 	val = le64_to_cpu(val);
2477 	if (!(val & KVM_ITS_CTE_VALID_MASK))
2478 		return 0;
2479 
2480 	target_addr = (u32)(val >> KVM_ITS_CTE_RDBASE_SHIFT);
2481 	coll_id = val & KVM_ITS_CTE_ICID_MASK;
2482 
2483 	if (target_addr != COLLECTION_NOT_MAPPED &&
2484 	    !kvm_get_vcpu_by_id(kvm, target_addr))
2485 		return -EINVAL;
2486 
2487 	collection = find_collection(its, coll_id);
2488 	if (collection)
2489 		return -EEXIST;
2490 
2491 	if (!vgic_its_check_id(its, its->baser_coll_table, coll_id, NULL))
2492 		return -EINVAL;
2493 
2494 	ret = vgic_its_alloc_collection(its, &collection, coll_id);
2495 	if (ret)
2496 		return ret;
2497 	collection->target_addr = target_addr;
2498 	return 1;
2499 }
2500 
2501 /*
2502  * vgic_its_save_collection_table - Save the collection table into
2503  * guest RAM
2504  */
vgic_its_save_collection_table(struct vgic_its * its)2505 static int vgic_its_save_collection_table(struct vgic_its *its)
2506 {
2507 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
2508 	u64 baser = its->baser_coll_table;
2509 	gpa_t gpa = GITS_BASER_ADDR_48_to_52(baser);
2510 	struct its_collection *collection;
2511 	size_t max_size, filled = 0;
2512 	int ret, cte_esz = abi->cte_esz;
2513 
2514 	if (!(baser & GITS_BASER_VALID))
2515 		return 0;
2516 
2517 	max_size = GITS_BASER_NR_PAGES(baser) * SZ_64K;
2518 
2519 	list_for_each_entry(collection, &its->collection_list, coll_list) {
2520 		ret = vgic_its_save_cte(its, collection, gpa);
2521 		if (ret)
2522 			return ret;
2523 		gpa += cte_esz;
2524 		filled += cte_esz;
2525 	}
2526 
2527 	if (filled == max_size)
2528 		return 0;
2529 
2530 	/*
2531 	 * table is not fully filled, add a last dummy element
2532 	 * with valid bit unset
2533 	 */
2534 	return vgic_its_write_entry_lock(its, gpa, 0ULL, cte);
2535 }
2536 
2537 /*
2538  * vgic_its_restore_collection_table - reads the collection table
2539  * in guest memory and restores the ITS internal state. Requires the
2540  * BASER registers to be restored before.
2541  */
vgic_its_restore_collection_table(struct vgic_its * its)2542 static int vgic_its_restore_collection_table(struct vgic_its *its)
2543 {
2544 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
2545 	u64 baser = its->baser_coll_table;
2546 	int cte_esz = abi->cte_esz;
2547 	size_t max_size, read = 0;
2548 	gpa_t gpa;
2549 	int ret;
2550 
2551 	if (!(baser & GITS_BASER_VALID))
2552 		return 0;
2553 
2554 	gpa = GITS_BASER_ADDR_48_to_52(baser);
2555 
2556 	max_size = GITS_BASER_NR_PAGES(baser) * SZ_64K;
2557 
2558 	while (read < max_size) {
2559 		ret = vgic_its_restore_cte(its, gpa);
2560 		if (ret <= 0)
2561 			break;
2562 		gpa += cte_esz;
2563 		read += cte_esz;
2564 	}
2565 
2566 	if (ret > 0)
2567 		return 0;
2568 
2569 	if (ret < 0)
2570 		vgic_its_free_collection_list(its->dev->kvm, its);
2571 
2572 	return ret;
2573 }
2574 
2575 /*
2576  * vgic_its_save_tables_v0 - Save the ITS tables into guest ARM
2577  * according to v0 ABI
2578  */
vgic_its_save_tables_v0(struct vgic_its * its)2579 static int vgic_its_save_tables_v0(struct vgic_its *its)
2580 {
2581 	int ret;
2582 
2583 	ret = vgic_its_save_device_tables(its);
2584 	if (ret)
2585 		return ret;
2586 
2587 	return vgic_its_save_collection_table(its);
2588 }
2589 
2590 /*
2591  * vgic_its_restore_tables_v0 - Restore the ITS tables from guest RAM
2592  * to internal data structs according to V0 ABI
2593  *
2594  */
vgic_its_restore_tables_v0(struct vgic_its * its)2595 static int vgic_its_restore_tables_v0(struct vgic_its *its)
2596 {
2597 	int ret;
2598 
2599 	ret = vgic_its_restore_collection_table(its);
2600 	if (ret)
2601 		return ret;
2602 
2603 	ret = vgic_its_restore_device_tables(its);
2604 	if (ret)
2605 		vgic_its_free_collection_list(its->dev->kvm, its);
2606 	return ret;
2607 }
2608 
vgic_its_commit_v0(struct vgic_its * its)2609 static int vgic_its_commit_v0(struct vgic_its *its)
2610 {
2611 	const struct vgic_its_abi *abi;
2612 
2613 	abi = vgic_its_get_abi(its);
2614 	its->baser_coll_table &= ~GITS_BASER_ENTRY_SIZE_MASK;
2615 	its->baser_device_table &= ~GITS_BASER_ENTRY_SIZE_MASK;
2616 
2617 	its->baser_coll_table |= (GIC_ENCODE_SZ(abi->cte_esz, 5)
2618 					<< GITS_BASER_ENTRY_SIZE_SHIFT);
2619 
2620 	its->baser_device_table |= (GIC_ENCODE_SZ(abi->dte_esz, 5)
2621 					<< GITS_BASER_ENTRY_SIZE_SHIFT);
2622 	return 0;
2623 }
2624 
vgic_its_reset(struct kvm * kvm,struct vgic_its * its)2625 static void vgic_its_reset(struct kvm *kvm, struct vgic_its *its)
2626 {
2627 	/* We need to keep the ABI specific field values */
2628 	its->baser_coll_table &= ~GITS_BASER_VALID;
2629 	its->baser_device_table &= ~GITS_BASER_VALID;
2630 	its->cbaser = 0;
2631 	its->creadr = 0;
2632 	its->cwriter = 0;
2633 	its->enabled = 0;
2634 	vgic_its_free_device_list(kvm, its);
2635 	vgic_its_free_collection_list(kvm, its);
2636 }
2637 
vgic_its_has_attr(struct kvm_device * dev,struct kvm_device_attr * attr)2638 static int vgic_its_has_attr(struct kvm_device *dev,
2639 			     struct kvm_device_attr *attr)
2640 {
2641 	switch (attr->group) {
2642 	case KVM_DEV_ARM_VGIC_GRP_ADDR:
2643 		switch (attr->attr) {
2644 		case KVM_VGIC_ITS_ADDR_TYPE:
2645 			return 0;
2646 		}
2647 		break;
2648 	case KVM_DEV_ARM_VGIC_GRP_CTRL:
2649 		switch (attr->attr) {
2650 		case KVM_DEV_ARM_VGIC_CTRL_INIT:
2651 			return 0;
2652 		case KVM_DEV_ARM_ITS_CTRL_RESET:
2653 			return 0;
2654 		case KVM_DEV_ARM_ITS_SAVE_TABLES:
2655 			return 0;
2656 		case KVM_DEV_ARM_ITS_RESTORE_TABLES:
2657 			return 0;
2658 		}
2659 		break;
2660 	case KVM_DEV_ARM_VGIC_GRP_ITS_REGS:
2661 		return vgic_its_has_attr_regs(dev, attr);
2662 	}
2663 	return -ENXIO;
2664 }
2665 
vgic_its_ctrl(struct kvm * kvm,struct vgic_its * its,u64 attr)2666 static int vgic_its_ctrl(struct kvm *kvm, struct vgic_its *its, u64 attr)
2667 {
2668 	const struct vgic_its_abi *abi = vgic_its_get_abi(its);
2669 	int ret = 0;
2670 
2671 	if (attr == KVM_DEV_ARM_VGIC_CTRL_INIT) /* Nothing to do */
2672 		return 0;
2673 
2674 	mutex_lock(&kvm->lock);
2675 
2676 	if (kvm_trylock_all_vcpus(kvm)) {
2677 		mutex_unlock(&kvm->lock);
2678 		return -EBUSY;
2679 	}
2680 
2681 	mutex_lock(&kvm->arch.config_lock);
2682 	mutex_lock(&its->its_lock);
2683 
2684 	switch (attr) {
2685 	case KVM_DEV_ARM_ITS_CTRL_RESET:
2686 		vgic_its_reset(kvm, its);
2687 		break;
2688 	case KVM_DEV_ARM_ITS_SAVE_TABLES:
2689 		ret = abi->save_tables(its);
2690 		break;
2691 	case KVM_DEV_ARM_ITS_RESTORE_TABLES:
2692 		ret = abi->restore_tables(its);
2693 		break;
2694 	default:
2695 		ret = -ENXIO;
2696 		break;
2697 	}
2698 
2699 	mutex_unlock(&its->its_lock);
2700 	mutex_unlock(&kvm->arch.config_lock);
2701 	kvm_unlock_all_vcpus(kvm);
2702 	mutex_unlock(&kvm->lock);
2703 	return ret;
2704 }
2705 
2706 /*
2707  * kvm_arch_allow_write_without_running_vcpu - allow writing guest memory
2708  * without the running VCPU when dirty ring is enabled.
2709  *
2710  * The running VCPU is required to track dirty guest pages when dirty ring
2711  * is enabled. Otherwise, the backup bitmap should be used to track the
2712  * dirty guest pages. When vgic/its tables are being saved, the backup
2713  * bitmap is used to track the dirty guest pages due to the missed running
2714  * VCPU in the period.
2715  */
kvm_arch_allow_write_without_running_vcpu(struct kvm * kvm)2716 bool kvm_arch_allow_write_without_running_vcpu(struct kvm *kvm)
2717 {
2718 	struct vgic_dist *dist = &kvm->arch.vgic;
2719 
2720 	return dist->table_write_in_progress;
2721 }
2722 
vgic_its_set_attr(struct kvm_device * dev,struct kvm_device_attr * attr)2723 static int vgic_its_set_attr(struct kvm_device *dev,
2724 			     struct kvm_device_attr *attr)
2725 {
2726 	struct vgic_its *its = dev->private;
2727 	int ret;
2728 
2729 	switch (attr->group) {
2730 	case KVM_DEV_ARM_VGIC_GRP_ADDR: {
2731 		u64 __user *uaddr = (u64 __user *)(long)attr->addr;
2732 		unsigned long type = (unsigned long)attr->attr;
2733 		u64 addr;
2734 
2735 		if (type != KVM_VGIC_ITS_ADDR_TYPE)
2736 			return -ENODEV;
2737 
2738 		if (copy_from_user(&addr, uaddr, sizeof(addr)))
2739 			return -EFAULT;
2740 
2741 		ret = vgic_check_iorange(dev->kvm, its->vgic_its_base,
2742 					 addr, SZ_64K, KVM_VGIC_V3_ITS_SIZE);
2743 		if (ret)
2744 			return ret;
2745 
2746 		ret = vgic_register_its_iodev(dev->kvm, its, addr);
2747 		if (ret)
2748 			return ret;
2749 
2750 		return vgic_its_debug_init(dev);
2751 
2752 	}
2753 	case KVM_DEV_ARM_VGIC_GRP_CTRL:
2754 		return vgic_its_ctrl(dev->kvm, its, attr->attr);
2755 	case KVM_DEV_ARM_VGIC_GRP_ITS_REGS: {
2756 		u64 __user *uaddr = (u64 __user *)(long)attr->addr;
2757 		u64 reg;
2758 
2759 		if (get_user(reg, uaddr))
2760 			return -EFAULT;
2761 
2762 		return vgic_its_attr_regs_access(dev, attr, &reg, true);
2763 	}
2764 	}
2765 	return -ENXIO;
2766 }
2767 
vgic_its_get_attr(struct kvm_device * dev,struct kvm_device_attr * attr)2768 static int vgic_its_get_attr(struct kvm_device *dev,
2769 			     struct kvm_device_attr *attr)
2770 {
2771 	switch (attr->group) {
2772 	case KVM_DEV_ARM_VGIC_GRP_ADDR: {
2773 		struct vgic_its *its = dev->private;
2774 		u64 addr = its->vgic_its_base;
2775 		u64 __user *uaddr = (u64 __user *)(long)attr->addr;
2776 		unsigned long type = (unsigned long)attr->attr;
2777 
2778 		if (type != KVM_VGIC_ITS_ADDR_TYPE)
2779 			return -ENODEV;
2780 
2781 		if (copy_to_user(uaddr, &addr, sizeof(addr)))
2782 			return -EFAULT;
2783 		break;
2784 	}
2785 	case KVM_DEV_ARM_VGIC_GRP_ITS_REGS: {
2786 		u64 __user *uaddr = (u64 __user *)(long)attr->addr;
2787 		u64 reg;
2788 		int ret;
2789 
2790 		ret = vgic_its_attr_regs_access(dev, attr, &reg, false);
2791 		if (ret)
2792 			return ret;
2793 		return put_user(reg, uaddr);
2794 	}
2795 	default:
2796 		return -ENXIO;
2797 	}
2798 
2799 	return 0;
2800 }
2801 
2802 static struct kvm_device_ops kvm_arm_vgic_its_ops = {
2803 	.name = "kvm-arm-vgic-its",
2804 	.create = vgic_its_create,
2805 	.destroy = vgic_its_destroy,
2806 	.set_attr = vgic_its_set_attr,
2807 	.get_attr = vgic_its_get_attr,
2808 	.has_attr = vgic_its_has_attr,
2809 };
2810 
kvm_vgic_register_its_device(void)2811 int kvm_vgic_register_its_device(void)
2812 {
2813 	return kvm_register_device_ops(&kvm_arm_vgic_its_ops,
2814 				       KVM_DEV_TYPE_ARM_VGIC_ITS);
2815 }
2816