Lines Matching +full:3 +full:v

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,
244 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
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,
259 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
264 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
270 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
275 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
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,
306 ret = __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
312 ret = __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
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,
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);
347 vcpus[i] = vm_vcpu_add(v.vm, i, guest_code);
349 ret = run_vcpu(vcpus[3]);
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);
366 ret = run_vcpu(vcpus[3]);
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,
419 ret = run_vcpu(vcpus[3]);
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);
429 kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
432 ret = run_vcpu(vcpus[3]);
435 vm_gic_destroy(&v);
437 /* step 3 */
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,
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,
454 ret = run_vcpu(vcpus[3]);
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,
495 /* The 2 first rdists should be put there (vcpu 0 and 3) */
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");
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,
506 v3_redist_reg_get(v.gic_fd, 2, GICR_TYPER, 0x200,
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,
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;
539 * rdists: 0, 3 (Last)
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,
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. */
614 addr = max_phys_size - (3 * 2 * 0x10000);
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,
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,
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);
766 (sys_reg_CRm(r) << 3) | \
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.