Lines Matching refs:args

23  * Stores the user specified args; it's passed to the guest and to every test
78 struct kvm_inject_args *args);
127 #define for_each_supported_inject_fn(args, t, f) \
129 if ((args)->kvm_supports_irqfd || (f)->cmd != KVM_INJECT_IRQFD)
131 #define for_each_supported_activate_fn(args, t, f) \
132 for_each_supported_inject_fn((args), (t), (f))
194 struct kvm_inject_args args = {
201 GUEST_SYNC(&args);
231 static void reset_priorities(struct test_args *args)
235 for (i = 0; i < args->nr_irqs; i++)
244 static void test_inject_fail(struct test_args *args,
256 static void guest_inject(struct test_args *args,
285 reset_priorities(args);
294 static void guest_restore_active(struct test_args *args,
329 if (args->eoi_split)
362 static void test_inject_preemption(struct test_args *args,
387 if (args->level_sensitive)
395 if (args->eoi_split)
406 reset_priorities(args);
409 static void test_injection(struct test_args *args, struct kvm_inject_desc *f)
411 uint32_t nr_irqs = args->nr_irqs;
414 guest_inject(args, MIN_SGI, 1, f->cmd);
415 guest_inject(args, 0, 16, f->cmd);
419 guest_inject(args, MIN_PPI, 1, f->cmd);
422 guest_inject(args, MIN_SPI, 1, f->cmd);
423 guest_inject(args, nr_irqs - 1, 1, f->cmd);
424 guest_inject(args, MIN_SPI, nr_irqs - MIN_SPI, f->cmd);
428 static void test_injection_failure(struct test_args *args,
431 uint32_t bad_intid[] = { args->nr_irqs, 1020, 1024, 1120, 5120, ~0U, };
435 test_inject_fail(args, bad_intid[i], f->cmd);
438 static void test_preemption(struct test_args *args, struct kvm_inject_desc *f)
447 test_inject_preemption(args, MIN_SGI, 4, f->cmd);
450 test_inject_preemption(args, MIN_PPI, 4, f->cmd);
453 test_inject_preemption(args, MIN_SPI, 4, f->cmd);
456 static void test_restore_active(struct test_args *args, struct kvm_inject_desc *f)
460 guest_restore_active(args, MIN_SGI, 4, f->cmd);
463 guest_restore_active(args, MIN_PPI, 4, f->cmd);
466 guest_restore_active(args, MIN_SPI, 4, f->cmd);
469 static void guest_code(struct test_args *args)
471 uint32_t i, nr_irqs = args->nr_irqs;
472 bool level_sensitive = args->level_sensitive;
483 gic_set_eoi_split(args->eoi_split);
485 reset_priorities(args);
494 for_each_supported_inject_fn(args, inject_fns, f) {
495 test_injection(args, f);
496 test_preemption(args, f);
497 test_injection_failure(args, f);
504 for_each_supported_activate_fn(args, set_active_fns, f)
505 test_restore_active(args, f);
715 struct kvm_inject_args *args)
720 kvm_args_gva = uc->args[1];
722 memcpy(args, kvm_args_hva, sizeof(struct kvm_inject_args));
725 static void print_args(struct test_args *args)
728 args->nr_irqs, args->level_sensitive,
729 args->eoi_split);
741 struct test_args args = {
749 print_args(&args);
756 /* Setup the guest args page (so it gets the args). */
758 memcpy(addr_gva2hva(vm, args_gva), &args, sizeof(args));
765 guest_irq_handlers[args.eoi_split][args.level_sensitive]);
773 run_guest_cmd(vcpu, gic_fd, &inject_args, &args);