cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

vgic-mmio.c (28275B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * VGIC MMIO handling functions
      4 */
      5
      6#include <linux/bitops.h>
      7#include <linux/bsearch.h>
      8#include <linux/interrupt.h>
      9#include <linux/irq.h>
     10#include <linux/kvm.h>
     11#include <linux/kvm_host.h>
     12#include <kvm/iodev.h>
     13#include <kvm/arm_arch_timer.h>
     14#include <kvm/arm_vgic.h>
     15
     16#include "vgic.h"
     17#include "vgic-mmio.h"
     18
     19unsigned long vgic_mmio_read_raz(struct kvm_vcpu *vcpu,
     20				 gpa_t addr, unsigned int len)
     21{
     22	return 0;
     23}
     24
     25unsigned long vgic_mmio_read_rao(struct kvm_vcpu *vcpu,
     26				 gpa_t addr, unsigned int len)
     27{
     28	return -1UL;
     29}
     30
     31void vgic_mmio_write_wi(struct kvm_vcpu *vcpu, gpa_t addr,
     32			unsigned int len, unsigned long val)
     33{
     34	/* Ignore */
     35}
     36
     37int vgic_mmio_uaccess_write_wi(struct kvm_vcpu *vcpu, gpa_t addr,
     38			       unsigned int len, unsigned long val)
     39{
     40	/* Ignore */
     41	return 0;
     42}
     43
     44unsigned long vgic_mmio_read_group(struct kvm_vcpu *vcpu,
     45				   gpa_t addr, unsigned int len)
     46{
     47	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
     48	u32 value = 0;
     49	int i;
     50
     51	/* Loop over all IRQs affected by this read */
     52	for (i = 0; i < len * 8; i++) {
     53		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
     54
     55		if (irq->group)
     56			value |= BIT(i);
     57
     58		vgic_put_irq(vcpu->kvm, irq);
     59	}
     60
     61	return value;
     62}
     63
     64static void vgic_update_vsgi(struct vgic_irq *irq)
     65{
     66	WARN_ON(its_prop_update_vsgi(irq->host_irq, irq->priority, irq->group));
     67}
     68
     69void vgic_mmio_write_group(struct kvm_vcpu *vcpu, gpa_t addr,
     70			   unsigned int len, unsigned long val)
     71{
     72	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
     73	int i;
     74	unsigned long flags;
     75
     76	for (i = 0; i < len * 8; i++) {
     77		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
     78
     79		raw_spin_lock_irqsave(&irq->irq_lock, flags);
     80		irq->group = !!(val & BIT(i));
     81		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
     82			vgic_update_vsgi(irq);
     83			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
     84		} else {
     85			vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
     86		}
     87
     88		vgic_put_irq(vcpu->kvm, irq);
     89	}
     90}
     91
     92/*
     93 * Read accesses to both GICD_ICENABLER and GICD_ISENABLER return the value
     94 * of the enabled bit, so there is only one function for both here.
     95 */
     96unsigned long vgic_mmio_read_enable(struct kvm_vcpu *vcpu,
     97				    gpa_t addr, unsigned int len)
     98{
     99	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    100	u32 value = 0;
    101	int i;
    102
    103	/* Loop over all IRQs affected by this read */
    104	for (i = 0; i < len * 8; i++) {
    105		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    106
    107		if (irq->enabled)
    108			value |= (1U << i);
    109
    110		vgic_put_irq(vcpu->kvm, irq);
    111	}
    112
    113	return value;
    114}
    115
    116void vgic_mmio_write_senable(struct kvm_vcpu *vcpu,
    117			     gpa_t addr, unsigned int len,
    118			     unsigned long val)
    119{
    120	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    121	int i;
    122	unsigned long flags;
    123
    124	for_each_set_bit(i, &val, len * 8) {
    125		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    126
    127		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    128		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
    129			if (!irq->enabled) {
    130				struct irq_data *data;
    131
    132				irq->enabled = true;
    133				data = &irq_to_desc(irq->host_irq)->irq_data;
    134				while (irqd_irq_disabled(data))
    135					enable_irq(irq->host_irq);
    136			}
    137
    138			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    139			vgic_put_irq(vcpu->kvm, irq);
    140
    141			continue;
    142		} else if (vgic_irq_is_mapped_level(irq)) {
    143			bool was_high = irq->line_level;
    144
    145			/*
    146			 * We need to update the state of the interrupt because
    147			 * the guest might have changed the state of the device
    148			 * while the interrupt was disabled at the VGIC level.
    149			 */
    150			irq->line_level = vgic_get_phys_line_level(irq);
    151			/*
    152			 * Deactivate the physical interrupt so the GIC will let
    153			 * us know when it is asserted again.
    154			 */
    155			if (!irq->active && was_high && !irq->line_level)
    156				vgic_irq_set_phys_active(irq, false);
    157		}
    158		irq->enabled = true;
    159		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
    160
    161		vgic_put_irq(vcpu->kvm, irq);
    162	}
    163}
    164
    165void vgic_mmio_write_cenable(struct kvm_vcpu *vcpu,
    166			     gpa_t addr, unsigned int len,
    167			     unsigned long val)
    168{
    169	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    170	int i;
    171	unsigned long flags;
    172
    173	for_each_set_bit(i, &val, len * 8) {
    174		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    175
    176		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    177		if (irq->hw && vgic_irq_is_sgi(irq->intid) && irq->enabled)
    178			disable_irq_nosync(irq->host_irq);
    179
    180		irq->enabled = false;
    181
    182		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    183		vgic_put_irq(vcpu->kvm, irq);
    184	}
    185}
    186
    187int vgic_uaccess_write_senable(struct kvm_vcpu *vcpu,
    188			       gpa_t addr, unsigned int len,
    189			       unsigned long val)
    190{
    191	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    192	int i;
    193	unsigned long flags;
    194
    195	for_each_set_bit(i, &val, len * 8) {
    196		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    197
    198		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    199		irq->enabled = true;
    200		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
    201
    202		vgic_put_irq(vcpu->kvm, irq);
    203	}
    204
    205	return 0;
    206}
    207
    208int vgic_uaccess_write_cenable(struct kvm_vcpu *vcpu,
    209			       gpa_t addr, unsigned int len,
    210			       unsigned long val)
    211{
    212	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    213	int i;
    214	unsigned long flags;
    215
    216	for_each_set_bit(i, &val, len * 8) {
    217		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    218
    219		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    220		irq->enabled = false;
    221		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    222
    223		vgic_put_irq(vcpu->kvm, irq);
    224	}
    225
    226	return 0;
    227}
    228
    229static unsigned long __read_pending(struct kvm_vcpu *vcpu,
    230				    gpa_t addr, unsigned int len,
    231				    bool is_user)
    232{
    233	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    234	u32 value = 0;
    235	int i;
    236
    237	/* Loop over all IRQs affected by this read */
    238	for (i = 0; i < len * 8; i++) {
    239		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    240		unsigned long flags;
    241		bool val;
    242
    243		/*
    244		 * When used from userspace with a GICv3 model:
    245		 *
    246		 * Pending state of interrupt is latched in pending_latch
    247		 * variable.  Userspace will save and restore pending state
    248		 * and line_level separately.
    249		 * Refer to Documentation/virt/kvm/devices/arm-vgic-v3.rst
    250		 * for handling of ISPENDR and ICPENDR.
    251		 */
    252		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    253		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
    254			int err;
    255
    256			val = false;
    257			err = irq_get_irqchip_state(irq->host_irq,
    258						    IRQCHIP_STATE_PENDING,
    259						    &val);
    260			WARN_RATELIMIT(err, "IRQ %d", irq->host_irq);
    261		} else if (!is_user && vgic_irq_is_mapped_level(irq)) {
    262			val = vgic_get_phys_line_level(irq);
    263		} else {
    264			switch (vcpu->kvm->arch.vgic.vgic_model) {
    265			case KVM_DEV_TYPE_ARM_VGIC_V3:
    266				if (is_user) {
    267					val = irq->pending_latch;
    268					break;
    269				}
    270				fallthrough;
    271			default:
    272				val = irq_is_pending(irq);
    273				break;
    274			}
    275		}
    276
    277		value |= ((u32)val << i);
    278		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    279
    280		vgic_put_irq(vcpu->kvm, irq);
    281	}
    282
    283	return value;
    284}
    285
    286unsigned long vgic_mmio_read_pending(struct kvm_vcpu *vcpu,
    287				     gpa_t addr, unsigned int len)
    288{
    289	return __read_pending(vcpu, addr, len, false);
    290}
    291
    292unsigned long vgic_uaccess_read_pending(struct kvm_vcpu *vcpu,
    293					gpa_t addr, unsigned int len)
    294{
    295	return __read_pending(vcpu, addr, len, true);
    296}
    297
    298static bool is_vgic_v2_sgi(struct kvm_vcpu *vcpu, struct vgic_irq *irq)
    299{
    300	return (vgic_irq_is_sgi(irq->intid) &&
    301		vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2);
    302}
    303
    304void vgic_mmio_write_spending(struct kvm_vcpu *vcpu,
    305			      gpa_t addr, unsigned int len,
    306			      unsigned long val)
    307{
    308	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    309	int i;
    310	unsigned long flags;
    311
    312	for_each_set_bit(i, &val, len * 8) {
    313		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    314
    315		/* GICD_ISPENDR0 SGI bits are WI */
    316		if (is_vgic_v2_sgi(vcpu, irq)) {
    317			vgic_put_irq(vcpu->kvm, irq);
    318			continue;
    319		}
    320
    321		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    322
    323		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
    324			/* HW SGI? Ask the GIC to inject it */
    325			int err;
    326			err = irq_set_irqchip_state(irq->host_irq,
    327						    IRQCHIP_STATE_PENDING,
    328						    true);
    329			WARN_RATELIMIT(err, "IRQ %d", irq->host_irq);
    330
    331			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    332			vgic_put_irq(vcpu->kvm, irq);
    333
    334			continue;
    335		}
    336
    337		irq->pending_latch = true;
    338		if (irq->hw)
    339			vgic_irq_set_phys_active(irq, true);
    340
    341		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
    342		vgic_put_irq(vcpu->kvm, irq);
    343	}
    344}
    345
    346int vgic_uaccess_write_spending(struct kvm_vcpu *vcpu,
    347				gpa_t addr, unsigned int len,
    348				unsigned long val)
    349{
    350	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    351	int i;
    352	unsigned long flags;
    353
    354	for_each_set_bit(i, &val, len * 8) {
    355		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    356
    357		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    358		irq->pending_latch = true;
    359
    360		/*
    361		 * GICv2 SGIs are terribly broken. We can't restore
    362		 * the source of the interrupt, so just pick the vcpu
    363		 * itself as the source...
    364		 */
    365		if (is_vgic_v2_sgi(vcpu, irq))
    366			irq->source |= BIT(vcpu->vcpu_id);
    367
    368		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
    369
    370		vgic_put_irq(vcpu->kvm, irq);
    371	}
    372
    373	return 0;
    374}
    375
    376/* Must be called with irq->irq_lock held */
    377static void vgic_hw_irq_cpending(struct kvm_vcpu *vcpu, struct vgic_irq *irq)
    378{
    379	irq->pending_latch = false;
    380
    381	/*
    382	 * We don't want the guest to effectively mask the physical
    383	 * interrupt by doing a write to SPENDR followed by a write to
    384	 * CPENDR for HW interrupts, so we clear the active state on
    385	 * the physical side if the virtual interrupt is not active.
    386	 * This may lead to taking an additional interrupt on the
    387	 * host, but that should not be a problem as the worst that
    388	 * can happen is an additional vgic injection.  We also clear
    389	 * the pending state to maintain proper semantics for edge HW
    390	 * interrupts.
    391	 */
    392	vgic_irq_set_phys_pending(irq, false);
    393	if (!irq->active)
    394		vgic_irq_set_phys_active(irq, false);
    395}
    396
    397void vgic_mmio_write_cpending(struct kvm_vcpu *vcpu,
    398			      gpa_t addr, unsigned int len,
    399			      unsigned long val)
    400{
    401	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    402	int i;
    403	unsigned long flags;
    404
    405	for_each_set_bit(i, &val, len * 8) {
    406		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    407
    408		/* GICD_ICPENDR0 SGI bits are WI */
    409		if (is_vgic_v2_sgi(vcpu, irq)) {
    410			vgic_put_irq(vcpu->kvm, irq);
    411			continue;
    412		}
    413
    414		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    415
    416		if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
    417			/* HW SGI? Ask the GIC to clear its pending bit */
    418			int err;
    419			err = irq_set_irqchip_state(irq->host_irq,
    420						    IRQCHIP_STATE_PENDING,
    421						    false);
    422			WARN_RATELIMIT(err, "IRQ %d", irq->host_irq);
    423
    424			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    425			vgic_put_irq(vcpu->kvm, irq);
    426
    427			continue;
    428		}
    429
    430		if (irq->hw)
    431			vgic_hw_irq_cpending(vcpu, irq);
    432		else
    433			irq->pending_latch = false;
    434
    435		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    436		vgic_put_irq(vcpu->kvm, irq);
    437	}
    438}
    439
    440int vgic_uaccess_write_cpending(struct kvm_vcpu *vcpu,
    441				gpa_t addr, unsigned int len,
    442				unsigned long val)
    443{
    444	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    445	int i;
    446	unsigned long flags;
    447
    448	for_each_set_bit(i, &val, len * 8) {
    449		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    450
    451		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    452		/*
    453		 * More fun with GICv2 SGIs! If we're clearing one of them
    454		 * from userspace, which source vcpu to clear? Let's not
    455		 * even think of it, and blow the whole set.
    456		 */
    457		if (is_vgic_v2_sgi(vcpu, irq))
    458			irq->source = 0;
    459
    460		irq->pending_latch = false;
    461
    462		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    463
    464		vgic_put_irq(vcpu->kvm, irq);
    465	}
    466
    467	return 0;
    468}
    469
    470/*
    471 * If we are fiddling with an IRQ's active state, we have to make sure the IRQ
    472 * is not queued on some running VCPU's LRs, because then the change to the
    473 * active state can be overwritten when the VCPU's state is synced coming back
    474 * from the guest.
    475 *
    476 * For shared interrupts as well as GICv3 private interrupts, we have to
    477 * stop all the VCPUs because interrupts can be migrated while we don't hold
    478 * the IRQ locks and we don't want to be chasing moving targets.
    479 *
    480 * For GICv2 private interrupts we don't have to do anything because
    481 * userspace accesses to the VGIC state already require all VCPUs to be
    482 * stopped, and only the VCPU itself can modify its private interrupts
    483 * active state, which guarantees that the VCPU is not running.
    484 */
    485static void vgic_access_active_prepare(struct kvm_vcpu *vcpu, u32 intid)
    486{
    487	if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 ||
    488	    intid >= VGIC_NR_PRIVATE_IRQS)
    489		kvm_arm_halt_guest(vcpu->kvm);
    490}
    491
    492/* See vgic_access_active_prepare */
    493static void vgic_access_active_finish(struct kvm_vcpu *vcpu, u32 intid)
    494{
    495	if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 ||
    496	    intid >= VGIC_NR_PRIVATE_IRQS)
    497		kvm_arm_resume_guest(vcpu->kvm);
    498}
    499
    500static unsigned long __vgic_mmio_read_active(struct kvm_vcpu *vcpu,
    501					     gpa_t addr, unsigned int len)
    502{
    503	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    504	u32 value = 0;
    505	int i;
    506
    507	/* Loop over all IRQs affected by this read */
    508	for (i = 0; i < len * 8; i++) {
    509		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    510
    511		/*
    512		 * Even for HW interrupts, don't evaluate the HW state as
    513		 * all the guest is interested in is the virtual state.
    514		 */
    515		if (irq->active)
    516			value |= (1U << i);
    517
    518		vgic_put_irq(vcpu->kvm, irq);
    519	}
    520
    521	return value;
    522}
    523
    524unsigned long vgic_mmio_read_active(struct kvm_vcpu *vcpu,
    525				    gpa_t addr, unsigned int len)
    526{
    527	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    528	u32 val;
    529
    530	mutex_lock(&vcpu->kvm->lock);
    531	vgic_access_active_prepare(vcpu, intid);
    532
    533	val = __vgic_mmio_read_active(vcpu, addr, len);
    534
    535	vgic_access_active_finish(vcpu, intid);
    536	mutex_unlock(&vcpu->kvm->lock);
    537
    538	return val;
    539}
    540
    541unsigned long vgic_uaccess_read_active(struct kvm_vcpu *vcpu,
    542				    gpa_t addr, unsigned int len)
    543{
    544	return __vgic_mmio_read_active(vcpu, addr, len);
    545}
    546
    547/* Must be called with irq->irq_lock held */
    548static void vgic_hw_irq_change_active(struct kvm_vcpu *vcpu, struct vgic_irq *irq,
    549				      bool active, bool is_uaccess)
    550{
    551	if (is_uaccess)
    552		return;
    553
    554	irq->active = active;
    555	vgic_irq_set_phys_active(irq, active);
    556}
    557
    558static void vgic_mmio_change_active(struct kvm_vcpu *vcpu, struct vgic_irq *irq,
    559				    bool active)
    560{
    561	unsigned long flags;
    562	struct kvm_vcpu *requester_vcpu = kvm_get_running_vcpu();
    563
    564	raw_spin_lock_irqsave(&irq->irq_lock, flags);
    565
    566	if (irq->hw && !vgic_irq_is_sgi(irq->intid)) {
    567		vgic_hw_irq_change_active(vcpu, irq, active, !requester_vcpu);
    568	} else if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
    569		/*
    570		 * GICv4.1 VSGI feature doesn't track an active state,
    571		 * so let's not kid ourselves, there is nothing we can
    572		 * do here.
    573		 */
    574		irq->active = false;
    575	} else {
    576		u32 model = vcpu->kvm->arch.vgic.vgic_model;
    577		u8 active_source;
    578
    579		irq->active = active;
    580
    581		/*
    582		 * The GICv2 architecture indicates that the source CPUID for
    583		 * an SGI should be provided during an EOI which implies that
    584		 * the active state is stored somewhere, but at the same time
    585		 * this state is not architecturally exposed anywhere and we
    586		 * have no way of knowing the right source.
    587		 *
    588		 * This may lead to a VCPU not being able to receive
    589		 * additional instances of a particular SGI after migration
    590		 * for a GICv2 VM on some GIC implementations.  Oh well.
    591		 */
    592		active_source = (requester_vcpu) ? requester_vcpu->vcpu_id : 0;
    593
    594		if (model == KVM_DEV_TYPE_ARM_VGIC_V2 &&
    595		    active && vgic_irq_is_sgi(irq->intid))
    596			irq->active_source = active_source;
    597	}
    598
    599	if (irq->active)
    600		vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
    601	else
    602		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    603}
    604
    605static void __vgic_mmio_write_cactive(struct kvm_vcpu *vcpu,
    606				      gpa_t addr, unsigned int len,
    607				      unsigned long val)
    608{
    609	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    610	int i;
    611
    612	for_each_set_bit(i, &val, len * 8) {
    613		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    614		vgic_mmio_change_active(vcpu, irq, false);
    615		vgic_put_irq(vcpu->kvm, irq);
    616	}
    617}
    618
    619void vgic_mmio_write_cactive(struct kvm_vcpu *vcpu,
    620			     gpa_t addr, unsigned int len,
    621			     unsigned long val)
    622{
    623	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    624
    625	mutex_lock(&vcpu->kvm->lock);
    626	vgic_access_active_prepare(vcpu, intid);
    627
    628	__vgic_mmio_write_cactive(vcpu, addr, len, val);
    629
    630	vgic_access_active_finish(vcpu, intid);
    631	mutex_unlock(&vcpu->kvm->lock);
    632}
    633
    634int vgic_mmio_uaccess_write_cactive(struct kvm_vcpu *vcpu,
    635				     gpa_t addr, unsigned int len,
    636				     unsigned long val)
    637{
    638	__vgic_mmio_write_cactive(vcpu, addr, len, val);
    639	return 0;
    640}
    641
    642static void __vgic_mmio_write_sactive(struct kvm_vcpu *vcpu,
    643				      gpa_t addr, unsigned int len,
    644				      unsigned long val)
    645{
    646	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    647	int i;
    648
    649	for_each_set_bit(i, &val, len * 8) {
    650		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    651		vgic_mmio_change_active(vcpu, irq, true);
    652		vgic_put_irq(vcpu->kvm, irq);
    653	}
    654}
    655
    656void vgic_mmio_write_sactive(struct kvm_vcpu *vcpu,
    657			     gpa_t addr, unsigned int len,
    658			     unsigned long val)
    659{
    660	u32 intid = VGIC_ADDR_TO_INTID(addr, 1);
    661
    662	mutex_lock(&vcpu->kvm->lock);
    663	vgic_access_active_prepare(vcpu, intid);
    664
    665	__vgic_mmio_write_sactive(vcpu, addr, len, val);
    666
    667	vgic_access_active_finish(vcpu, intid);
    668	mutex_unlock(&vcpu->kvm->lock);
    669}
    670
    671int vgic_mmio_uaccess_write_sactive(struct kvm_vcpu *vcpu,
    672				     gpa_t addr, unsigned int len,
    673				     unsigned long val)
    674{
    675	__vgic_mmio_write_sactive(vcpu, addr, len, val);
    676	return 0;
    677}
    678
    679unsigned long vgic_mmio_read_priority(struct kvm_vcpu *vcpu,
    680				      gpa_t addr, unsigned int len)
    681{
    682	u32 intid = VGIC_ADDR_TO_INTID(addr, 8);
    683	int i;
    684	u64 val = 0;
    685
    686	for (i = 0; i < len; i++) {
    687		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    688
    689		val |= (u64)irq->priority << (i * 8);
    690
    691		vgic_put_irq(vcpu->kvm, irq);
    692	}
    693
    694	return val;
    695}
    696
    697/*
    698 * We currently don't handle changing the priority of an interrupt that
    699 * is already pending on a VCPU. If there is a need for this, we would
    700 * need to make this VCPU exit and re-evaluate the priorities, potentially
    701 * leading to this interrupt getting presented now to the guest (if it has
    702 * been masked by the priority mask before).
    703 */
    704void vgic_mmio_write_priority(struct kvm_vcpu *vcpu,
    705			      gpa_t addr, unsigned int len,
    706			      unsigned long val)
    707{
    708	u32 intid = VGIC_ADDR_TO_INTID(addr, 8);
    709	int i;
    710	unsigned long flags;
    711
    712	for (i = 0; i < len; i++) {
    713		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    714
    715		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    716		/* Narrow the priority range to what we actually support */
    717		irq->priority = (val >> (i * 8)) & GENMASK(7, 8 - VGIC_PRI_BITS);
    718		if (irq->hw && vgic_irq_is_sgi(irq->intid))
    719			vgic_update_vsgi(irq);
    720		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    721
    722		vgic_put_irq(vcpu->kvm, irq);
    723	}
    724}
    725
    726unsigned long vgic_mmio_read_config(struct kvm_vcpu *vcpu,
    727				    gpa_t addr, unsigned int len)
    728{
    729	u32 intid = VGIC_ADDR_TO_INTID(addr, 2);
    730	u32 value = 0;
    731	int i;
    732
    733	for (i = 0; i < len * 4; i++) {
    734		struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    735
    736		if (irq->config == VGIC_CONFIG_EDGE)
    737			value |= (2U << (i * 2));
    738
    739		vgic_put_irq(vcpu->kvm, irq);
    740	}
    741
    742	return value;
    743}
    744
    745void vgic_mmio_write_config(struct kvm_vcpu *vcpu,
    746			    gpa_t addr, unsigned int len,
    747			    unsigned long val)
    748{
    749	u32 intid = VGIC_ADDR_TO_INTID(addr, 2);
    750	int i;
    751	unsigned long flags;
    752
    753	for (i = 0; i < len * 4; i++) {
    754		struct vgic_irq *irq;
    755
    756		/*
    757		 * The configuration cannot be changed for SGIs in general,
    758		 * for PPIs this is IMPLEMENTATION DEFINED. The arch timer
    759		 * code relies on PPIs being level triggered, so we also
    760		 * make them read-only here.
    761		 */
    762		if (intid + i < VGIC_NR_PRIVATE_IRQS)
    763			continue;
    764
    765		irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    766		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    767
    768		if (test_bit(i * 2 + 1, &val))
    769			irq->config = VGIC_CONFIG_EDGE;
    770		else
    771			irq->config = VGIC_CONFIG_LEVEL;
    772
    773		raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    774		vgic_put_irq(vcpu->kvm, irq);
    775	}
    776}
    777
    778u64 vgic_read_irq_line_level_info(struct kvm_vcpu *vcpu, u32 intid)
    779{
    780	int i;
    781	u64 val = 0;
    782	int nr_irqs = vcpu->kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS;
    783
    784	for (i = 0; i < 32; i++) {
    785		struct vgic_irq *irq;
    786
    787		if ((intid + i) < VGIC_NR_SGIS || (intid + i) >= nr_irqs)
    788			continue;
    789
    790		irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    791		if (irq->config == VGIC_CONFIG_LEVEL && irq->line_level)
    792			val |= (1U << i);
    793
    794		vgic_put_irq(vcpu->kvm, irq);
    795	}
    796
    797	return val;
    798}
    799
    800void vgic_write_irq_line_level_info(struct kvm_vcpu *vcpu, u32 intid,
    801				    const u64 val)
    802{
    803	int i;
    804	int nr_irqs = vcpu->kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS;
    805	unsigned long flags;
    806
    807	for (i = 0; i < 32; i++) {
    808		struct vgic_irq *irq;
    809		bool new_level;
    810
    811		if ((intid + i) < VGIC_NR_SGIS || (intid + i) >= nr_irqs)
    812			continue;
    813
    814		irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
    815
    816		/*
    817		 * Line level is set irrespective of irq type
    818		 * (level or edge) to avoid dependency that VM should
    819		 * restore irq config before line level.
    820		 */
    821		new_level = !!(val & (1U << i));
    822		raw_spin_lock_irqsave(&irq->irq_lock, flags);
    823		irq->line_level = new_level;
    824		if (new_level)
    825			vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
    826		else
    827			raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
    828
    829		vgic_put_irq(vcpu->kvm, irq);
    830	}
    831}
    832
    833static int match_region(const void *key, const void *elt)
    834{
    835	const unsigned int offset = (unsigned long)key;
    836	const struct vgic_register_region *region = elt;
    837
    838	if (offset < region->reg_offset)
    839		return -1;
    840
    841	if (offset >= region->reg_offset + region->len)
    842		return 1;
    843
    844	return 0;
    845}
    846
    847const struct vgic_register_region *
    848vgic_find_mmio_region(const struct vgic_register_region *regions,
    849		      int nr_regions, unsigned int offset)
    850{
    851	return bsearch((void *)(uintptr_t)offset, regions, nr_regions,
    852		       sizeof(regions[0]), match_region);
    853}
    854
    855void vgic_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr)
    856{
    857	if (kvm_vgic_global_state.type == VGIC_V2)
    858		vgic_v2_set_vmcr(vcpu, vmcr);
    859	else
    860		vgic_v3_set_vmcr(vcpu, vmcr);
    861}
    862
    863void vgic_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr)
    864{
    865	if (kvm_vgic_global_state.type == VGIC_V2)
    866		vgic_v2_get_vmcr(vcpu, vmcr);
    867	else
    868		vgic_v3_get_vmcr(vcpu, vmcr);
    869}
    870
    871/*
    872 * kvm_mmio_read_buf() returns a value in a format where it can be converted
    873 * to a byte array and be directly observed as the guest wanted it to appear
    874 * in memory if it had done the store itself, which is LE for the GIC, as the
    875 * guest knows the GIC is always LE.
    876 *
    877 * We convert this value to the CPUs native format to deal with it as a data
    878 * value.
    879 */
    880unsigned long vgic_data_mmio_bus_to_host(const void *val, unsigned int len)
    881{
    882	unsigned long data = kvm_mmio_read_buf(val, len);
    883
    884	switch (len) {
    885	case 1:
    886		return data;
    887	case 2:
    888		return le16_to_cpu(data);
    889	case 4:
    890		return le32_to_cpu(data);
    891	default:
    892		return le64_to_cpu(data);
    893	}
    894}
    895
    896/*
    897 * kvm_mmio_write_buf() expects a value in a format such that if converted to
    898 * a byte array it is observed as the guest would see it if it could perform
    899 * the load directly.  Since the GIC is LE, and the guest knows this, the
    900 * guest expects a value in little endian format.
    901 *
    902 * We convert the data value from the CPUs native format to LE so that the
    903 * value is returned in the proper format.
    904 */
    905void vgic_data_host_to_mmio_bus(void *buf, unsigned int len,
    906				unsigned long data)
    907{
    908	switch (len) {
    909	case 1:
    910		break;
    911	case 2:
    912		data = cpu_to_le16(data);
    913		break;
    914	case 4:
    915		data = cpu_to_le32(data);
    916		break;
    917	default:
    918		data = cpu_to_le64(data);
    919	}
    920
    921	kvm_mmio_write_buf(buf, len, data);
    922}
    923
    924static
    925struct vgic_io_device *kvm_to_vgic_iodev(const struct kvm_io_device *dev)
    926{
    927	return container_of(dev, struct vgic_io_device, dev);
    928}
    929
    930static bool check_region(const struct kvm *kvm,
    931			 const struct vgic_register_region *region,
    932			 gpa_t addr, int len)
    933{
    934	int flags, nr_irqs = kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS;
    935
    936	switch (len) {
    937	case sizeof(u8):
    938		flags = VGIC_ACCESS_8bit;
    939		break;
    940	case sizeof(u32):
    941		flags = VGIC_ACCESS_32bit;
    942		break;
    943	case sizeof(u64):
    944		flags = VGIC_ACCESS_64bit;
    945		break;
    946	default:
    947		return false;
    948	}
    949
    950	if ((region->access_flags & flags) && IS_ALIGNED(addr, len)) {
    951		if (!region->bits_per_irq)
    952			return true;
    953
    954		/* Do we access a non-allocated IRQ? */
    955		return VGIC_ADDR_TO_INTID(addr, region->bits_per_irq) < nr_irqs;
    956	}
    957
    958	return false;
    959}
    960
    961const struct vgic_register_region *
    962vgic_get_mmio_region(struct kvm_vcpu *vcpu, struct vgic_io_device *iodev,
    963		     gpa_t addr, int len)
    964{
    965	const struct vgic_register_region *region;
    966
    967	region = vgic_find_mmio_region(iodev->regions, iodev->nr_regions,
    968				       addr - iodev->base_addr);
    969	if (!region || !check_region(vcpu->kvm, region, addr, len))
    970		return NULL;
    971
    972	return region;
    973}
    974
    975static int vgic_uaccess_read(struct kvm_vcpu *vcpu, struct vgic_io_device *iodev,
    976			     gpa_t addr, u32 *val)
    977{
    978	const struct vgic_register_region *region;
    979	struct kvm_vcpu *r_vcpu;
    980
    981	region = vgic_get_mmio_region(vcpu, iodev, addr, sizeof(u32));
    982	if (!region) {
    983		*val = 0;
    984		return 0;
    985	}
    986
    987	r_vcpu = iodev->redist_vcpu ? iodev->redist_vcpu : vcpu;
    988	if (region->uaccess_read)
    989		*val = region->uaccess_read(r_vcpu, addr, sizeof(u32));
    990	else
    991		*val = region->read(r_vcpu, addr, sizeof(u32));
    992
    993	return 0;
    994}
    995
    996static int vgic_uaccess_write(struct kvm_vcpu *vcpu, struct vgic_io_device *iodev,
    997			      gpa_t addr, const u32 *val)
    998{
    999	const struct vgic_register_region *region;
   1000	struct kvm_vcpu *r_vcpu;
   1001
   1002	region = vgic_get_mmio_region(vcpu, iodev, addr, sizeof(u32));
   1003	if (!region)
   1004		return 0;
   1005
   1006	r_vcpu = iodev->redist_vcpu ? iodev->redist_vcpu : vcpu;
   1007	if (region->uaccess_write)
   1008		return region->uaccess_write(r_vcpu, addr, sizeof(u32), *val);
   1009
   1010	region->write(r_vcpu, addr, sizeof(u32), *val);
   1011	return 0;
   1012}
   1013
   1014/*
   1015 * Userland access to VGIC registers.
   1016 */
   1017int vgic_uaccess(struct kvm_vcpu *vcpu, struct vgic_io_device *dev,
   1018		 bool is_write, int offset, u32 *val)
   1019{
   1020	if (is_write)
   1021		return vgic_uaccess_write(vcpu, dev, offset, val);
   1022	else
   1023		return vgic_uaccess_read(vcpu, dev, offset, val);
   1024}
   1025
   1026static int dispatch_mmio_read(struct kvm_vcpu *vcpu, struct kvm_io_device *dev,
   1027			      gpa_t addr, int len, void *val)
   1028{
   1029	struct vgic_io_device *iodev = kvm_to_vgic_iodev(dev);
   1030	const struct vgic_register_region *region;
   1031	unsigned long data = 0;
   1032
   1033	region = vgic_get_mmio_region(vcpu, iodev, addr, len);
   1034	if (!region) {
   1035		memset(val, 0, len);
   1036		return 0;
   1037	}
   1038
   1039	switch (iodev->iodev_type) {
   1040	case IODEV_CPUIF:
   1041		data = region->read(vcpu, addr, len);
   1042		break;
   1043	case IODEV_DIST:
   1044		data = region->read(vcpu, addr, len);
   1045		break;
   1046	case IODEV_REDIST:
   1047		data = region->read(iodev->redist_vcpu, addr, len);
   1048		break;
   1049	case IODEV_ITS:
   1050		data = region->its_read(vcpu->kvm, iodev->its, addr, len);
   1051		break;
   1052	}
   1053
   1054	vgic_data_host_to_mmio_bus(val, len, data);
   1055	return 0;
   1056}
   1057
   1058static int dispatch_mmio_write(struct kvm_vcpu *vcpu, struct kvm_io_device *dev,
   1059			       gpa_t addr, int len, const void *val)
   1060{
   1061	struct vgic_io_device *iodev = kvm_to_vgic_iodev(dev);
   1062	const struct vgic_register_region *region;
   1063	unsigned long data = vgic_data_mmio_bus_to_host(val, len);
   1064
   1065	region = vgic_get_mmio_region(vcpu, iodev, addr, len);
   1066	if (!region)
   1067		return 0;
   1068
   1069	switch (iodev->iodev_type) {
   1070	case IODEV_CPUIF:
   1071		region->write(vcpu, addr, len, data);
   1072		break;
   1073	case IODEV_DIST:
   1074		region->write(vcpu, addr, len, data);
   1075		break;
   1076	case IODEV_REDIST:
   1077		region->write(iodev->redist_vcpu, addr, len, data);
   1078		break;
   1079	case IODEV_ITS:
   1080		region->its_write(vcpu->kvm, iodev->its, addr, len, data);
   1081		break;
   1082	}
   1083
   1084	return 0;
   1085}
   1086
   1087const struct kvm_io_device_ops kvm_io_gic_ops = {
   1088	.read = dispatch_mmio_read,
   1089	.write = dispatch_mmio_write,
   1090};
   1091
   1092int vgic_register_dist_iodev(struct kvm *kvm, gpa_t dist_base_address,
   1093			     enum vgic_type type)
   1094{
   1095	struct vgic_io_device *io_device = &kvm->arch.vgic.dist_iodev;
   1096	int ret = 0;
   1097	unsigned int len;
   1098
   1099	switch (type) {
   1100	case VGIC_V2:
   1101		len = vgic_v2_init_dist_iodev(io_device);
   1102		break;
   1103	case VGIC_V3:
   1104		len = vgic_v3_init_dist_iodev(io_device);
   1105		break;
   1106	default:
   1107		BUG_ON(1);
   1108	}
   1109
   1110	io_device->base_addr = dist_base_address;
   1111	io_device->iodev_type = IODEV_DIST;
   1112	io_device->redist_vcpu = NULL;
   1113
   1114	mutex_lock(&kvm->slots_lock);
   1115	ret = kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS, dist_base_address,
   1116				      len, &io_device->dev);
   1117	mutex_unlock(&kvm->slots_lock);
   1118
   1119	return ret;
   1120}