diff options
-rw-r--r-- | virt/kvm/arm/vgic/vgic-its.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c index 6a715a6ec64e..e69ef7d27fde 100644 --- a/virt/kvm/arm/vgic/vgic-its.c +++ b/virt/kvm/arm/vgic/vgic-its.c | |||
@@ -1466,6 +1466,16 @@ static void vgic_mmio_write_its_ctlr(struct kvm *kvm, struct vgic_its *its, | |||
1466 | { | 1466 | { |
1467 | mutex_lock(&its->cmd_lock); | 1467 | mutex_lock(&its->cmd_lock); |
1468 | 1468 | ||
1469 | /* | ||
1470 | * It is UNPREDICTABLE to enable the ITS if any of the CBASER or | ||
1471 | * device/collection BASER are invalid | ||
1472 | */ | ||
1473 | if (!its->enabled && (val & GITS_CTLR_ENABLE) && | ||
1474 | (!(its->baser_device_table & GITS_BASER_VALID) || | ||
1475 | !(its->baser_coll_table & GITS_BASER_VALID) || | ||
1476 | !(its->cbaser & GITS_CBASER_VALID))) | ||
1477 | goto out; | ||
1478 | |||
1469 | its->enabled = !!(val & GITS_CTLR_ENABLE); | 1479 | its->enabled = !!(val & GITS_CTLR_ENABLE); |
1470 | 1480 | ||
1471 | /* | 1481 | /* |
@@ -1474,6 +1484,7 @@ static void vgic_mmio_write_its_ctlr(struct kvm *kvm, struct vgic_its *its, | |||
1474 | */ | 1484 | */ |
1475 | vgic_its_process_commands(kvm, its); | 1485 | vgic_its_process_commands(kvm, its); |
1476 | 1486 | ||
1487 | out: | ||
1477 | mutex_unlock(&its->cmd_lock); | 1488 | mutex_unlock(&its->cmd_lock); |
1478 | } | 1489 | } |
1479 | 1490 | ||