Lines Matching +full:1 +full:v
63 GUEST_SYNC(1);
78 struct vm_gic v;
80 v.gic_dev_type = gic_dev_type;
81 v.vm = vm_create_with_vcpus(nr_vcpus, guest_code, vcpus);
82 v.gic_fd = kvm_create_device(v.vm, gic_dev_type);
84 return v;
89 struct vm_gic v;
91 v.gic_dev_type = gic_dev_type;
92 v.vm = vm_create_barebones();
93 v.gic_fd = kvm_create_device(v.vm, gic_dev_type);
95 return v;
99 static void vm_gic_destroy(struct vm_gic *v)
101 close(v->gic_fd);
102 kvm_vm_free(v->vm);
143 static void subtest_dist_rdist(struct vm_gic *v)
150 rdist = VGIC_DEV_IS_V3(v->gic_dev_type) ? gic_v3_redist_region
152 dist = VGIC_DEV_IS_V3(v->gic_dev_type) ? gic_v3_dist_region
156 kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, dist.attr);
158 kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, rdist.attr);
161 ret = __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, -1);
166 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
171 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
177 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
181 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
187 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
194 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
199 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
203 ret = __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
208 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
219 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
224 static void subtest_v3_redist_regions(struct vm_gic *v)
229 ret = __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
234 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
239 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
243 addr = REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 1);
244 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
249 addr = REDIST_REGION_ATTR_ADDR(2, 0x201000, 0, 1);
250 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
255 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
258 addr = REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 1);
259 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
263 addr = REDIST_REGION_ATTR_ADDR(1, 0x210000, 0, 2);
264 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
269 addr = REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 2);
270 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
272 TEST_ASSERT(ret && errno == EINVAL, "register redist region with index not +1");
274 addr = REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 1);
275 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
278 addr = REDIST_REGION_ATTR_ADDR(1, max_phys_size, 0, 2);
279 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
286 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
292 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
300 * region 1 @ 0x240000 1 redist
306 ret = __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
310 addr = REDIST_REGION_ATTR_ADDR(0, 0, 0, 1);
311 expected_addr = REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 1);
312 ret = __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
314 TEST_ASSERT(!ret && addr == expected_addr, "read characteristics of region #1");
317 ret = __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
322 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
325 addr = REDIST_REGION_ATTR_ADDR(1, 0x260000, 0, 2);
326 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
338 struct vm_gic v;
341 v = vm_gic_create_with_vcpus(gic_dev_type, 1, vcpus);
343 subtest_dist_rdist(&v);
346 for (i = 1; i < NR_VCPUS; ++i)
347 vcpus[i] = vm_vcpu_add(v.vm, i, guest_code);
350 TEST_ASSERT(ret == -EINVAL, "dist/rdist overlap detected on 1st vcpu run");
352 vm_gic_destroy(&v);
359 struct vm_gic v;
362 v = vm_gic_create_with_vcpus(gic_dev_type, NR_VCPUS, vcpus);
364 subtest_dist_rdist(&v);
367 TEST_ASSERT(ret == -EINVAL, "dist/rdist overlap detected on 1st vcpu run");
369 vm_gic_destroy(&v);
380 struct vm_gic v;
384 v = vm_gic_create_barebones(KVM_DEV_TYPE_ARM_VGIC_V2);
385 subtest_dist_rdist(&v);
387 ret = __kvm_has_device_attr(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CPU_REGS,
392 ret = __kvm_device_attr_get(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CPU_REGS,
397 ret = __kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CPU_REGS,
403 vm_gic_destroy(&v);
410 struct vm_gic v;
414 v = vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus);
415 subtest_v3_redist_regions(&v);
416 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
421 vm_gic_destroy(&v);
425 v = vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus);
426 subtest_v3_redist_regions(&v);
428 addr = REDIST_REGION_ATTR_ADDR(1, 0x280000, 0, 2);
429 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
435 vm_gic_destroy(&v);
439 v = vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus);
440 subtest_v3_redist_regions(&v);
442 ret = __kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
447 addr = REDIST_REGION_ATTR_ADDR(1, 0x280000, 0, 2);
448 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
451 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
457 vm_gic_destroy(&v);
462 struct vm_gic v;
466 v.vm = vm_create(NR_VCPUS);
467 (void)vm_vcpu_add(v.vm, 0, guest_code);
469 v.gic_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3);
471 (void)vm_vcpu_add(v.vm, 3, guest_code);
473 v3_redist_reg_get_errno(v.gic_fd, 1, GICR_TYPER, EINVAL,
476 (void)vm_vcpu_add(v.vm, 1, guest_code);
478 v3_redist_reg_get_errno(v.gic_fd, 1, GICR_TYPER, EBUSY,
481 (void)vm_vcpu_add(v.vm, 2, guest_code);
483 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
487 v3_redist_reg_get(v.gic_fd, i, GICR_TYPER, i * 0x100,
492 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
496 v3_redist_reg_get(v.gic_fd, 0, GICR_TYPER, 0x0, "read typer of rdist #0");
497 v3_redist_reg_get(v.gic_fd, 3, GICR_TYPER, 0x310, "read typer of rdist #1");
499 addr = REDIST_REGION_ATTR_ADDR(10, 0x100000, 0, 1);
500 ret = __kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
504 v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, 0x100,
505 "no redist region attached to vcpu #1 yet, last cannot be returned");
506 v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, 0x200,
509 addr = REDIST_REGION_ATTR_ADDR(10, 0x20000, 0, 1);
510 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
513 v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, 0x100, "read typer of rdist #1");
514 v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, 0x210,
515 "read typer of rdist #1, last properly returned");
517 vm_gic_destroy(&v);
523 struct vm_gic v;
526 v.vm = vm_create(nr_vcpus);
528 vm_vcpu_add(v.vm, vcpuids[i], guest_code);
530 v.gic_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3);
532 return v;
537 * rdist regions #1 and #2 are contiguous
540 * rdist region #1 @0x240000 2 rdist capacity
543 * rdists: 1, 2
547 uint32_t vcpuids[] = { 0, 3, 5, 4, 1, 2 };
548 struct vm_gic v;
551 v = vm_gic_v3_create_with_vcpuids(ARRAY_SIZE(vcpuids), vcpuids);
553 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
557 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
560 addr = REDIST_REGION_ATTR_ADDR(2, 0x240000, 0, 1);
561 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
565 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
568 v3_redist_reg_get(v.gic_fd, 0, GICR_TYPER, 0x000, "read typer of rdist #0");
569 v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, 0x100, "read typer of rdist #1");
570 v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, 0x200, "read typer of rdist #2");
571 v3_redist_reg_get(v.gic_fd, 3, GICR_TYPER, 0x310, "read typer of rdist #3");
572 v3_redist_reg_get(v.gic_fd, 5, GICR_TYPER, 0x500, "read typer of rdist #5");
573 v3_redist_reg_get(v.gic_fd, 4, GICR_TYPER, 0x410, "read typer of rdist #4");
575 vm_gic_destroy(&v);
581 uint32_t vcpuids[] = { 0, 3, 5, 4, 1, 2 };
582 struct vm_gic v;
585 v = vm_gic_v3_create_with_vcpuids(ARRAY_SIZE(vcpuids), vcpuids);
587 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
591 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
594 v3_redist_reg_get(v.gic_fd, 0, GICR_TYPER, 0x000, "read typer of rdist #0");
595 v3_redist_reg_get(v.gic_fd, 3, GICR_TYPER, 0x300, "read typer of rdist #1");
596 v3_redist_reg_get(v.gic_fd, 5, GICR_TYPER, 0x500, "read typer of rdist #2");
597 v3_redist_reg_get(v.gic_fd, 1, GICR_TYPER, 0x100, "read typer of rdist #3");
598 v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, 0x210, "read typer of rdist #3");
600 vm_gic_destroy(&v);
607 struct vm_gic v;
611 v = vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, 1, vcpus);
613 /* Set space for 3 redists, we have 1 vcpu, so this succeeds. */
615 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
619 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
623 for (i = 1; i < NR_VCPUS; ++i)
624 vcpus[i] = vm_vcpu_add(v.vm, i, guest_code);
626 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
632 "redist base+size above PA range detected on 1st vcpu run");
634 vm_gic_destroy(&v);
640 struct vm_gic v;
644 v = vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus);
645 its_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_ITS);
676 vm_gic_destroy(&v);
723 struct vm_gic v;
727 v.vm = vm_create_with_vcpus(NR_VCPUS, guest_code, vcpus);
730 ret = __kvm_test_create_device(v.vm, 0);
734 ret = __kvm_test_create_device(v.vm, gic_dev_type);
737 v.gic_fd = kvm_create_device(v.vm, gic_dev_type);
739 ret = __kvm_create_device(v.vm, gic_dev_type);
746 if (!__kvm_test_create_device(v.vm, other)) {
747 ret = __kvm_create_device(v.vm, other);
752 vm_gic_destroy(&v);
838 * ICC_APnR{1,2,3}_EL1 are examples of such non-sense, and
839 * ICH_APnR{1,2,3}_EL2 do follow suit for consistency.
868 pri = FIELD_GET(ICC_CTLR_EL1_PRI_BITS_MASK, val) + 1;
907 pri = FIELD_GET(ICH_VTR_EL2_PRIbits, val) + 1;
947 vm = vm_create(1);
1000 max_phys_size = 1ULL << pa_bits;