Skip to content

Commit 545f639

Browse files
committed
Merge tag 'kvmarm-fixes-5.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into kvm-master
KVM/arm64 fixes for v5.10, take #4 - Fix alignment of the new HYP sections - Fix GICR_TYPER access from userspace
2 parents c2b1209 + 23bde34 commit 545f639

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

arch/arm64/kvm/hyp/nvhe/hyp.lds.S

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313

1414
SECTIONS {
1515
HYP_SECTION(.text)
16+
/*
17+
* .hyp..data..percpu needs to be page aligned to maintain the same
18+
* alignment for when linking into vmlinux.
19+
*/
20+
. = ALIGN(PAGE_SIZE);
1621
HYP_SECTION_NAME(.data..percpu) : {
1722
PERCPU_INPUT(L1_CACHE_BYTES)
1823
}

arch/arm64/kvm/vgic/vgic-mmio-v3.c

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,23 @@ static unsigned long vgic_mmio_read_v3r_typer(struct kvm_vcpu *vcpu,
273273
return extract_bytes(value, addr & 7, len);
274274
}
275275

276+
static unsigned long vgic_uaccess_read_v3r_typer(struct kvm_vcpu *vcpu,
277+
gpa_t addr, unsigned int len)
278+
{
279+
unsigned long mpidr = kvm_vcpu_get_mpidr_aff(vcpu);
280+
int target_vcpu_id = vcpu->vcpu_id;
281+
u64 value;
282+
283+
value = (u64)(mpidr & GENMASK(23, 0)) << 32;
284+
value |= ((target_vcpu_id & 0xffff) << 8);
285+
286+
if (vgic_has_its(vcpu->kvm))
287+
value |= GICR_TYPER_PLPIS;
288+
289+
/* reporting of the Last bit is not supported for userspace */
290+
return extract_bytes(value, addr & 7, len);
291+
}
292+
276293
static unsigned long vgic_mmio_read_v3r_iidr(struct kvm_vcpu *vcpu,
277294
gpa_t addr, unsigned int len)
278295
{
@@ -593,8 +610,9 @@ static const struct vgic_register_region vgic_v3_rd_registers[] = {
593610
REGISTER_DESC_WITH_LENGTH(GICR_IIDR,
594611
vgic_mmio_read_v3r_iidr, vgic_mmio_write_wi, 4,
595612
VGIC_ACCESS_32bit),
596-
REGISTER_DESC_WITH_LENGTH(GICR_TYPER,
597-
vgic_mmio_read_v3r_typer, vgic_mmio_write_wi, 8,
613+
REGISTER_DESC_WITH_LENGTH_UACCESS(GICR_TYPER,
614+
vgic_mmio_read_v3r_typer, vgic_mmio_write_wi,
615+
vgic_uaccess_read_v3r_typer, vgic_mmio_uaccess_write_wi, 8,
598616
VGIC_ACCESS_64bit | VGIC_ACCESS_32bit),
599617
REGISTER_DESC_WITH_LENGTH(GICR_WAKER,
600618
vgic_mmio_read_raz, vgic_mmio_write_wi, 4,

0 commit comments

Comments
 (0)