diff mbox series

[V1,1/5] selftests: kvm: move common startup logic to kvm_util.c

Message ID 20220903012849.938069-2-vannapurve@google.com (mailing list archive)
State New
Headers show
Series Execute hypercalls from guests according to cpu type | expand

Commit Message

Vishal Annapurve Sept. 3, 2022, 1:28 a.m. UTC
Consolidate common startup logic in one place by implementing a single main
function for all selftests within kvm_util.c.

This allows moving logic like:
	/* Tell stdout not to buffer its content */
        setbuf(stdout, NULL);
to a single file for all selftests.

This will also allow any required setup at entry in future to be done in
common main function.

More context is discussed at:
https://lore.kernel.org/lkml/Ywa9T+jKUpaHLu%2Fl@google.com/

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Vishal Annapurve <vannapurve@google.com>
---
 tools/testing/selftests/kvm/aarch64/arch_timer.c       |  5 +----
 tools/testing/selftests/kvm/aarch64/debug-exceptions.c |  2 +-
 tools/testing/selftests/kvm/aarch64/get-reg-list.c     |  2 +-
 tools/testing/selftests/kvm/aarch64/hypercalls.c       |  4 +---
 tools/testing/selftests/kvm/aarch64/psci_test.c        |  2 +-
 .../testing/selftests/kvm/aarch64/vcpu_width_config.c  |  2 +-
 tools/testing/selftests/kvm/aarch64/vgic_init.c        |  2 +-
 tools/testing/selftests/kvm/aarch64/vgic_irq.c         |  5 +----
 .../testing/selftests/kvm/access_tracking_perf_test.c  |  4 +---
 tools/testing/selftests/kvm/demand_paging_test.c       |  7 ++-----
 tools/testing/selftests/kvm/dirty_log_perf_test.c      |  4 +---
 tools/testing/selftests/kvm/dirty_log_test.c           |  4 +---
 tools/testing/selftests/kvm/hardware_disable_test.c    |  2 +-
 tools/testing/selftests/kvm/include/kvm_util_base.h    |  5 +++++
 tools/testing/selftests/kvm/kvm_binary_stats_test.c    |  3 +--
 tools/testing/selftests/kvm/kvm_create_max_vcpus.c     |  4 +---
 tools/testing/selftests/kvm/kvm_page_table_test.c      |  4 +---
 tools/testing/selftests/kvm/lib/kvm_util.c             | 10 ++++++++++
 tools/testing/selftests/kvm/lib/sparsebit.c            |  2 +-
 tools/testing/selftests/kvm/max_guest_memory_test.c    |  2 +-
 .../selftests/kvm/memslot_modification_stress_test.c   |  4 +---
 tools/testing/selftests/kvm/memslot_perf_test.c        |  9 ++-------
 tools/testing/selftests/kvm/rseq_test.c                |  7 +------
 tools/testing/selftests/kvm/s390x/memop.c              |  4 +---
 tools/testing/selftests/kvm/s390x/resets.c             |  4 +---
 tools/testing/selftests/kvm/s390x/sync_regs_test.c     |  5 +----
 tools/testing/selftests/kvm/s390x/tprot.c              |  2 +-
 tools/testing/selftests/kvm/set_memory_region_test.c   |  7 +------
 tools/testing/selftests/kvm/steal_time.c               |  4 +---
 .../testing/selftests/kvm/system_counter_offset_test.c |  2 +-
 tools/testing/selftests/kvm/x86_64/amx_test.c          |  2 +-
 tools/testing/selftests/kvm/x86_64/cpuid_test.c        |  2 +-
 .../testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c |  6 +-----
 tools/testing/selftests/kvm/x86_64/debug_regs.c        |  4 +---
 .../testing/selftests/kvm/x86_64/emulator_error_test.c |  7 +------
 tools/testing/selftests/kvm/x86_64/evmcs_test.c        |  2 +-
 .../testing/selftests/kvm/x86_64/fix_hypercall_test.c  |  2 +-
 .../selftests/kvm/x86_64/get_msr_index_features.c      |  2 +-
 tools/testing/selftests/kvm/x86_64/hyperv_clock.c      |  2 +-
 tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c      |  7 +------
 tools/testing/selftests/kvm/x86_64/hyperv_features.c   |  2 +-
 tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c   |  2 +-
 tools/testing/selftests/kvm/x86_64/kvm_clock_test.c    |  2 +-
 tools/testing/selftests/kvm/x86_64/kvm_pv_test.c       |  2 +-
 .../testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c |  3 +--
 tools/testing/selftests/kvm/x86_64/mmio_warning_test.c |  4 +---
 .../testing/selftests/kvm/x86_64/monitor_mwait_test.c  |  3 +--
 .../testing/selftests/kvm/x86_64/nx_huge_pages_test.c  |  4 +---
 .../testing/selftests/kvm/x86_64/platform_info_test.c  |  7 +------
 .../selftests/kvm/x86_64/pmu_event_filter_test.c       |  7 +------
 tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c   |  2 +-
 tools/testing/selftests/kvm/x86_64/set_sregs_test.c    |  7 +------
 tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c |  3 +--
 tools/testing/selftests/kvm/x86_64/smm_test.c          |  2 +-
 tools/testing/selftests/kvm/x86_64/state_test.c        |  2 +-
 tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c  |  3 +--
 .../selftests/kvm/x86_64/svm_nested_soft_inject_test.c |  7 +------
 tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c   |  3 +--
 tools/testing/selftests/kvm/x86_64/sync_regs_test.c    |  7 +------
 .../selftests/kvm/x86_64/triple_fault_event_test.c     |  2 +-
 tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c     |  4 +---
 tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c  |  3 +--
 .../testing/selftests/kvm/x86_64/ucna_injection_test.c |  2 +-
 tools/testing/selftests/kvm/x86_64/userspace_io_test.c |  6 +-----
 .../selftests/kvm/x86_64/userspace_msr_exit_test.c     |  7 +------
 .../selftests/kvm/x86_64/vmx_apic_access_test.c        |  3 +--
 .../selftests/kvm/x86_64/vmx_close_while_nested_test.c |  2 +-
 .../testing/selftests/kvm/x86_64/vmx_dirty_log_test.c  |  2 +-
 .../x86_64/vmx_exception_with_invalid_guest_state.c    |  2 +-
 .../kvm/x86_64/vmx_invalid_nested_guest_state.c        |  2 +-
 tools/testing/selftests/kvm/x86_64/vmx_msrs_test.c     |  2 +-
 .../selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c |  3 +--
 tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c |  2 +-
 .../selftests/kvm/x86_64/vmx_preemption_timer_test.c   |  2 +-
 .../selftests/kvm/x86_64/vmx_set_nested_state_test.c   |  3 +--
 .../testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c |  3 +--
 tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c    |  4 +---
 tools/testing/selftests/kvm/x86_64/xapic_state_test.c  |  2 +-
 tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c   |  3 +--
 tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c   |  3 +--
 tools/testing/selftests/kvm/x86_64/xss_msr_test.c      |  2 +-
 81 files changed, 96 insertions(+), 199 deletions(-)

Comments

David Matlack Sept. 8, 2022, 9:09 p.m. UTC | #1
On Sat, Sep 03, 2022 at 01:28:45AM +0000, Vishal Annapurve wrote:
[...]
> --- a/tools/testing/selftests/kvm/demand_paging_test.c
> +++ b/tools/testing/selftests/kvm/demand_paging_test.c
> @@ -393,7 +393,7 @@ static void help(char *name)
>  	exit(0);
>  }
>  
> -int main(int argc, char *argv[])
> +void __main(int argc, char *argv[])
>  {
>  	int max_vcpus = kvm_check_cap(KVM_CAP_MAX_VCPUS);
>  	struct test_params p = {
> @@ -447,18 +447,15 @@ int main(int argc, char *argv[])
>  	}
>  
>  	for_each_guest_mode(run_test, &p);
> -
> -	return 0;
>  }
>  
>  #else /* __NR_userfaultfd */
>  
>  #warning "missing __NR_userfaultfd definition"
>  
> -int main(void)
> +void __main(int argc, char *argv[])
>  {
>  	print_skip("__NR_userfaultfd must be present for userfaultfd test");
> -	return KSFT_SKIP;

exit(KSFT_SKIP) to preserve the test behavior.
Vishal Annapurve Sept. 14, 2022, 7:09 p.m. UTC | #2
On Thu, Sep 8, 2022 at 2:09 PM David Matlack <dmatlack@google.com> wrote:
>
...
> >       print_skip("__NR_userfaultfd must be present for userfaultfd test");
> > -     return KSFT_SKIP;
>
> exit(KSFT_SKIP) to preserve the test behavior.

Ack, though this change should go away in the next series with common
selftest init using constructor attribute.

Regards,
Vishal
diff mbox series

Patch

diff --git a/tools/testing/selftests/kvm/aarch64/arch_timer.c b/tools/testing/selftests/kvm/aarch64/arch_timer.c
index 574eb73f0e90..ecb2e7011b1c 100644
--- a/tools/testing/selftests/kvm/aarch64/arch_timer.c
+++ b/tools/testing/selftests/kvm/aarch64/arch_timer.c
@@ -458,13 +458,10 @@  static bool parse_args(int argc, char *argv[])
 	return false;
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vm *vm;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	if (!parse_args(argc, argv))
 		exit(KSFT_SKIP);
 
diff --git a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
index 2ee35cf9801e..f0aafa9a7cfc 100644
--- a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
+++ b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
@@ -246,7 +246,7 @@  static int debug_version(struct kvm_vcpu *vcpu)
 	return id_aa64dfr0 & 0xf;
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/aarch64/get-reg-list.c b/tools/testing/selftests/kvm/aarch64/get-reg-list.c
index d287dd2cac0a..abae4f44638d 100644
--- a/tools/testing/selftests/kvm/aarch64/get-reg-list.c
+++ b/tools/testing/selftests/kvm/aarch64/get-reg-list.c
@@ -596,7 +596,7 @@  static struct vcpu_config *parse_config(const char *config)
 	return c;
 }
 
-int main(int ac, char **av)
+void __main(int argc, char *argv[])
 {
 	struct vcpu_config *c, *sel = NULL;
 	int i, ret = 0;
diff --git a/tools/testing/selftests/kvm/aarch64/hypercalls.c b/tools/testing/selftests/kvm/aarch64/hypercalls.c
index a39da3fe4952..afa6843c7efa 100644
--- a/tools/testing/selftests/kvm/aarch64/hypercalls.c
+++ b/tools/testing/selftests/kvm/aarch64/hypercalls.c
@@ -304,10 +304,8 @@  static void test_run(void)
 	kvm_vm_free(vm);
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
-	setbuf(stdout, NULL);
-
 	test_run();
 	return 0;
 }
diff --git a/tools/testing/selftests/kvm/aarch64/psci_test.c b/tools/testing/selftests/kvm/aarch64/psci_test.c
index f7621f6e938e..4bdbe22d44aa 100644
--- a/tools/testing/selftests/kvm/aarch64/psci_test.c
+++ b/tools/testing/selftests/kvm/aarch64/psci_test.c
@@ -189,7 +189,7 @@  static void host_test_system_suspend(void)
 	kvm_vm_free(vm);
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_ARM_SYSTEM_SUSPEND));
 
diff --git a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c
index 80b74c6f152b..ec9485bbb307 100644
--- a/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c
+++ b/tools/testing/selftests/kvm/aarch64/vcpu_width_config.c
@@ -76,7 +76,7 @@  static int add_2vcpus_init_2vcpus(struct kvm_vcpu_init *init0,
  * The other is running KVM_CREATE_VCPU and KVM_ARM_VCPU_INIT for a vCPU,
  * and then run those commands for another vCPU.
  */
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu_init init0, init1;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/aarch64/vgic_init.c b/tools/testing/selftests/kvm/aarch64/vgic_init.c
index e05ecb31823f..3ae1b51ad80b 100644
--- a/tools/testing/selftests/kvm/aarch64/vgic_init.c
+++ b/tools/testing/selftests/kvm/aarch64/vgic_init.c
@@ -687,7 +687,7 @@  void run_tests(uint32_t gic_dev_type)
 	}
 }
 
-int main(int ac, char **av)
+void __main(int argc, char *argv[])
 {
 	int ret;
 	int pa_bits;
diff --git a/tools/testing/selftests/kvm/aarch64/vgic_irq.c b/tools/testing/selftests/kvm/aarch64/vgic_irq.c
index 17417220a083..66943323d6da 100644
--- a/tools/testing/selftests/kvm/aarch64/vgic_irq.c
+++ b/tools/testing/selftests/kvm/aarch64/vgic_irq.c
@@ -810,7 +810,7 @@  static void help(const char *name)
 	exit(1);
 }
 
-int main(int argc, char **argv)
+void __main(int argc, char *argv[])
 {
 	uint32_t nr_irqs = 64;
 	bool default_args = true;
@@ -818,9 +818,6 @@  int main(int argc, char **argv)
 	int opt;
 	bool eoi_split = false;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	while ((opt = getopt(argc, argv, "hn:e:l:")) != -1) {
 		switch (opt) {
 		case 'n':
diff --git a/tools/testing/selftests/kvm/access_tracking_perf_test.c b/tools/testing/selftests/kvm/access_tracking_perf_test.c
index 1c2749b1481a..3548fc537d8c 100644
--- a/tools/testing/selftests/kvm/access_tracking_perf_test.c
+++ b/tools/testing/selftests/kvm/access_tracking_perf_test.c
@@ -340,7 +340,7 @@  static void help(char *name)
 	exit(0);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct test_params params = {
 		.backing_src = DEFAULT_VM_MEM_SRC,
@@ -382,6 +382,4 @@  int main(int argc, char *argv[])
 	close(page_idle_fd);
 
 	for_each_guest_mode(run_test, &params);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/demand_paging_test.c b/tools/testing/selftests/kvm/demand_paging_test.c
index 779ae54f89c4..dca61fb5c77b 100644
--- a/tools/testing/selftests/kvm/demand_paging_test.c
+++ b/tools/testing/selftests/kvm/demand_paging_test.c
@@ -393,7 +393,7 @@  static void help(char *name)
 	exit(0);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int max_vcpus = kvm_check_cap(KVM_CAP_MAX_VCPUS);
 	struct test_params p = {
@@ -447,18 +447,15 @@  int main(int argc, char *argv[])
 	}
 
 	for_each_guest_mode(run_test, &p);
-
-	return 0;
 }
 
 #else /* __NR_userfaultfd */
 
 #warning "missing __NR_userfaultfd definition"
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	print_skip("__NR_userfaultfd must be present for userfaultfd test");
-	return KSFT_SKIP;
 }
 
 #endif /* __NR_userfaultfd */
diff --git a/tools/testing/selftests/kvm/dirty_log_perf_test.c b/tools/testing/selftests/kvm/dirty_log_perf_test.c
index f99e39a672d3..87fb7e2cb033 100644
--- a/tools/testing/selftests/kvm/dirty_log_perf_test.c
+++ b/tools/testing/selftests/kvm/dirty_log_perf_test.c
@@ -387,7 +387,7 @@  static void help(char *name)
 	exit(0);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int max_vcpus = kvm_check_cap(KVM_CAP_MAX_VCPUS);
 	struct test_params p = {
@@ -460,6 +460,4 @@  int main(int argc, char *argv[])
 	pr_info("Test iterations: %"PRIu64"\n",	p.iterations);
 
 	for_each_guest_mode(run_test, &p);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/dirty_log_test.c b/tools/testing/selftests/kvm/dirty_log_test.c
index 9c883c94d478..1268741654d8 100644
--- a/tools/testing/selftests/kvm/dirty_log_test.c
+++ b/tools/testing/selftests/kvm/dirty_log_test.c
@@ -838,7 +838,7 @@  static void help(char *name)
 	exit(0);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct test_params p = {
 		.iterations = TEST_HOST_LOOP_N,
@@ -920,6 +920,4 @@  int main(int argc, char *argv[])
 		host_log_mode = host_log_mode_option;
 		for_each_guest_mode(run_test, &p);
 	}
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/hardware_disable_test.c b/tools/testing/selftests/kvm/hardware_disable_test.c
index f5d59b9934f1..919d943e640c 100644
--- a/tools/testing/selftests/kvm/hardware_disable_test.c
+++ b/tools/testing/selftests/kvm/hardware_disable_test.c
@@ -151,7 +151,7 @@  void wait_for_child_setup(pid_t pid)
 	}
 }
 
-int main(int argc, char **argv)
+void __main(int argc, char *argv[])
 {
 	uint32_t i;
 	int s, r;
diff --git a/tools/testing/selftests/kvm/include/kvm_util_base.h b/tools/testing/selftests/kvm/include/kvm_util_base.h
index 24fde97f6121..9e521d1c8afe 100644
--- a/tools/testing/selftests/kvm/include/kvm_util_base.h
+++ b/tools/testing/selftests/kvm/include/kvm_util_base.h
@@ -834,4 +834,9 @@  static inline int __vm_disable_nx_huge_pages(struct kvm_vm *vm)
 	return __vm_enable_cap(vm, KVM_CAP_VM_DISABLE_NX_HUGE_PAGES, 0);
 }
 
+/*
+ * API to be implemented by all the selftests.
+ */
+void __main(int argc, char *argv[]);
+
 #endif /* SELFTEST_KVM_UTIL_BASE_H */
diff --git a/tools/testing/selftests/kvm/kvm_binary_stats_test.c b/tools/testing/selftests/kvm/kvm_binary_stats_test.c
index 0b45ac593387..8ba284006e27 100644
--- a/tools/testing/selftests/kvm/kvm_binary_stats_test.c
+++ b/tools/testing/selftests/kvm/kvm_binary_stats_test.c
@@ -204,7 +204,7 @@  static void vcpu_stats_test(struct kvm_vcpu *vcpu)
  * created for testing.
  */
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int i, j;
 	struct kvm_vcpu **vcpus;
@@ -250,5 +250,4 @@  int main(int argc, char *argv[])
 	for (i = 0; i < max_vm; ++i)
 		kvm_vm_free(vms[i]);
 	free(vms);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c
index 31b3cb24b9a7..d3843606bfbc 100644
--- a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c
+++ b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c
@@ -37,7 +37,7 @@  void test_vcpu_creation(int first_vcpu_id, int num_vcpus)
 	kvm_vm_free(vm);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int kvm_max_vcpu_id = kvm_check_cap(KVM_CAP_MAX_VCPU_ID);
 	int kvm_max_vcpus = kvm_check_cap(KVM_CAP_MAX_VCPUS);
@@ -89,6 +89,4 @@  int main(int argc, char *argv[])
 	if (kvm_max_vcpu_id > kvm_max_vcpus)
 		test_vcpu_creation(
 			kvm_max_vcpu_id - kvm_max_vcpus, kvm_max_vcpus);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/kvm_page_table_test.c b/tools/testing/selftests/kvm/kvm_page_table_test.c
index f42c6ac6d71d..895de52fea97 100644
--- a/tools/testing/selftests/kvm/kvm_page_table_test.c
+++ b/tools/testing/selftests/kvm/kvm_page_table_test.c
@@ -438,7 +438,7 @@  static void help(char *name)
 	puts("");
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int max_vcpus = kvm_check_cap(KVM_CAP_MAX_VCPUS);
 	struct test_params p = {
@@ -476,6 +476,4 @@  int main(int argc, char *argv[])
 	}
 
 	for_each_guest_mode(run_test, &p);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
index 9889fe0d8919..2e611a021c6e 100644
--- a/tools/testing/selftests/kvm/lib/kvm_util.c
+++ b/tools/testing/selftests/kvm/lib/kvm_util.c
@@ -1979,3 +1979,13 @@  void __vm_get_stat(struct kvm_vm *vm, const char *stat_name, uint64_t *data,
 		break;
 	}
 }
+
+int main(int argc, char *argv[])
+{
+	/* Tell stdout not to buffer its content */
+	setbuf(stdout, NULL);
+
+	__main(argc, argv);
+
+	return 0;
+}
diff --git a/tools/testing/selftests/kvm/lib/sparsebit.c b/tools/testing/selftests/kvm/lib/sparsebit.c
index 50e0cf41a7dd..6c76507dfc9e 100644
--- a/tools/testing/selftests/kvm/lib/sparsebit.c
+++ b/tools/testing/selftests/kvm/lib/sparsebit.c
@@ -2071,7 +2071,7 @@  uint64_t get64(void)
 	return (x << 8) | get8();
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	s = sparsebit_alloc();
 	for (;;) {
diff --git a/tools/testing/selftests/kvm/max_guest_memory_test.c b/tools/testing/selftests/kvm/max_guest_memory_test.c
index 9a6e4f3ad6b5..72753dadf277 100644
--- a/tools/testing/selftests/kvm/max_guest_memory_test.c
+++ b/tools/testing/selftests/kvm/max_guest_memory_test.c
@@ -153,7 +153,7 @@  static void calc_default_nr_vcpus(void)
 	TEST_ASSERT(nr_vcpus > 0, "Uh, no CPUs?");
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	/*
 	 * Skip the first 4gb and slot0.  slot0 maps <1gb and is used to back
diff --git a/tools/testing/selftests/kvm/memslot_modification_stress_test.c b/tools/testing/selftests/kvm/memslot_modification_stress_test.c
index 6ee7e1dde404..e656c680596f 100644
--- a/tools/testing/selftests/kvm/memslot_modification_stress_test.c
+++ b/tools/testing/selftests/kvm/memslot_modification_stress_test.c
@@ -139,7 +139,7 @@  static void help(char *name)
 	exit(0);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int max_vcpus = kvm_check_cap(KVM_CAP_MAX_VCPUS);
 	int opt;
@@ -185,6 +185,4 @@  int main(int argc, char *argv[])
 	}
 
 	for_each_guest_mode(run_test, &p);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/memslot_perf_test.c b/tools/testing/selftests/kvm/memslot_perf_test.c
index 44995446d942..f5d630729930 100644
--- a/tools/testing/selftests/kvm/memslot_perf_test.c
+++ b/tools/testing/selftests/kvm/memslot_perf_test.c
@@ -995,7 +995,7 @@  static bool test_loop(const struct test_data *data,
 	return true;
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct test_args targs = {
 		.tfirst = 0,
@@ -1007,11 +1007,8 @@  int main(int argc, char *argv[])
 	struct test_result rbestslottime;
 	int tctr;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	if (!parse_args(argc, argv, &targs))
-		return -1;
+		exit(-1);
 
 	rbestslottime.slottimens = 0;
 	for (tctr = targs.tfirst; tctr <= targs.tlast; tctr++) {
@@ -1042,6 +1039,4 @@  int main(int argc, char *argv[])
 		pr_info("Best slot setup time for the whole test area was %ld.%.9lds\n",
 			rbestslottime.slot_runtime.tv_sec,
 			rbestslottime.slot_runtime.tv_nsec);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/rseq_test.c b/tools/testing/selftests/kvm/rseq_test.c
index fac248a43666..2803bc82b37a 100644
--- a/tools/testing/selftests/kvm/rseq_test.c
+++ b/tools/testing/selftests/kvm/rseq_test.c
@@ -198,16 +198,13 @@  static void calc_min_max_cpu(void)
 		       "Only one usable CPU, task migration not possible");
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int r, i, snapshot;
 	struct kvm_vm *vm;
 	struct kvm_vcpu *vcpu;
 	u32 cpu, rseq_cpu;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	r = sched_getaffinity(0, sizeof(possible_mask), &possible_mask);
 	TEST_ASSERT(!r, "sched_getaffinity failed, errno = %d (%s)", errno,
 		    strerror(errno));
@@ -277,6 +274,4 @@  int main(int argc, char *argv[])
 	kvm_vm_free(vm);
 
 	rseq_unregister_current_thread();
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/s390x/memop.c b/tools/testing/selftests/kvm/s390x/memop.c
index 9113696d5178..ffa2119a9c24 100644
--- a/tools/testing/selftests/kvm/s390x/memop.c
+++ b/tools/testing/selftests/kvm/s390x/memop.c
@@ -754,14 +754,12 @@  struct testdef {
 	},
 };
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int extension_cap, idx;
 
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_S390_MEM_OP));
 
-	setbuf(stdout, NULL);	/* Tell stdout not to buffer its content */
-
 	ksft_print_header();
 
 	ksft_set_plan(ARRAY_SIZE(testlist));
diff --git a/tools/testing/selftests/kvm/s390x/resets.c b/tools/testing/selftests/kvm/s390x/resets.c
index 19486084eb30..517016169dd7 100644
--- a/tools/testing/selftests/kvm/s390x/resets.c
+++ b/tools/testing/selftests/kvm/s390x/resets.c
@@ -291,13 +291,11 @@  struct testdef {
 	{ "clear", test_clear, true },
 };
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	bool has_s390_vcpu_resets = kvm_check_cap(KVM_CAP_S390_VCPU_RESETS);
 	int idx;
 
-	setbuf(stdout, NULL);	/* Tell stdout not to buffer its content */
-
 	ksft_print_header();
 	ksft_set_plan(ARRAY_SIZE(testlist));
 
diff --git a/tools/testing/selftests/kvm/s390x/sync_regs_test.c b/tools/testing/selftests/kvm/s390x/sync_regs_test.c
index 3fdb6e2598eb..3590159f7849 100644
--- a/tools/testing/selftests/kvm/s390x/sync_regs_test.c
+++ b/tools/testing/selftests/kvm/s390x/sync_regs_test.c
@@ -223,7 +223,7 @@  struct testdef {
 	{ "clear kvm_dirty_regs bits", test_clear_kvm_dirty_regs_bits },
 };
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
@@ -231,9 +231,6 @@  int main(int argc, char *argv[])
 
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_SYNC_REGS));
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	ksft_print_header();
 
 	ksft_set_plan(ARRAY_SIZE(testlist));
diff --git a/tools/testing/selftests/kvm/s390x/tprot.c b/tools/testing/selftests/kvm/s390x/tprot.c
index a9a0b76e5fa4..893eae876906 100644
--- a/tools/testing/selftests/kvm/s390x/tprot.c
+++ b/tools/testing/selftests/kvm/s390x/tprot.c
@@ -201,7 +201,7 @@  static void guest_code(void)
 	ksft_test_result_pass("" #stage "\n");	\
 })
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/set_memory_region_test.c b/tools/testing/selftests/kvm/set_memory_region_test.c
index 0d55f508d595..5af62d6eb4dc 100644
--- a/tools/testing/selftests/kvm/set_memory_region_test.c
+++ b/tools/testing/selftests/kvm/set_memory_region_test.c
@@ -386,15 +386,12 @@  static void test_add_max_memory_regions(void)
 	kvm_vm_free(vm);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 #ifdef __x86_64__
 	int i, loops;
 #endif
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 #ifdef __x86_64__
 	/*
 	 * FIXME: the zero-memslot test fails on aarch64 and s390x because
@@ -419,6 +416,4 @@  int main(int argc, char *argv[])
 	for (i = 0; i < loops; i++)
 		test_delete_memory_region();
 #endif
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/steal_time.c b/tools/testing/selftests/kvm/steal_time.c
index db8967f1a17b..7037d2a08b26 100644
--- a/tools/testing/selftests/kvm/steal_time.c
+++ b/tools/testing/selftests/kvm/steal_time.c
@@ -239,7 +239,7 @@  static void run_vcpu(struct kvm_vcpu *vcpu)
 	}
 }
 
-int main(int ac, char **av)
+void __main(int ac, char *av[])
 {
 	struct kvm_vcpu *vcpus[NR_VCPUS];
 	struct kvm_vm *vm;
@@ -317,6 +317,4 @@  int main(int ac, char **av)
 			steal_time_dump(vm, i);
 		}
 	}
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/system_counter_offset_test.c b/tools/testing/selftests/kvm/system_counter_offset_test.c
index 1c274933912b..bc0a1a652f74 100644
--- a/tools/testing/selftests/kvm/system_counter_offset_test.c
+++ b/tools/testing/selftests/kvm/system_counter_offset_test.c
@@ -114,7 +114,7 @@  static void enter_guest(struct kvm_vcpu *vcpu)
 	}
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/x86_64/amx_test.c b/tools/testing/selftests/kvm/x86_64/amx_test.c
index dadcbad10a1d..fb4b64d2e68e 100644
--- a/tools/testing/selftests/kvm/x86_64/amx_test.c
+++ b/tools/testing/selftests/kvm/x86_64/amx_test.c
@@ -294,7 +294,7 @@  void guest_nm_handler(struct ex_regs *regs)
 	GUEST_SYNC(9);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_regs regs1, regs2;
 	struct kvm_vcpu *vcpu;
diff --git a/tools/testing/selftests/kvm/x86_64/cpuid_test.c b/tools/testing/selftests/kvm/x86_64/cpuid_test.c
index a6aeee2e62e4..41d27705adee 100644
--- a/tools/testing/selftests/kvm/x86_64/cpuid_test.c
+++ b/tools/testing/selftests/kvm/x86_64/cpuid_test.c
@@ -172,7 +172,7 @@  static void set_cpuid_after_run(struct kvm_vcpu *vcpu)
 	ent->eax = eax;
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	vm_vaddr_t cpuid_gva;
diff --git a/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c b/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c
index 4208487652f8..b5d967a6134f 100644
--- a/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c
+++ b/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test.c
@@ -47,7 +47,7 @@  static void guest_code(void)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_run *run;
@@ -57,9 +57,6 @@  int main(int argc, char *argv[])
 
 	TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_XSAVE));
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	vm = vm_create_with_one_vcpu(&vcpu, guest_code);
 	run = vcpu->run;
 
@@ -90,5 +87,4 @@  int main(int argc, char *argv[])
 
 done:
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/debug_regs.c b/tools/testing/selftests/kvm/x86_64/debug_regs.c
index 7ef99c3359a0..40fe07a4f911 100644
--- a/tools/testing/selftests/kvm/x86_64/debug_regs.c
+++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c
@@ -75,7 +75,7 @@  static void vcpu_skip_insn(struct kvm_vcpu *vcpu, int insn_len)
 	vcpu_regs_set(vcpu, &regs);
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_guest_debug debug;
 	unsigned long long target_dr6, target_rip;
@@ -209,6 +209,4 @@  int main(void)
 	TEST_ASSERT(cmd == UCALL_DONE, "UCALL_DONE");
 
 	kvm_vm_free(vm);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c b/tools/testing/selftests/kvm/x86_64/emulator_error_test.c
index 236e11755ba6..6c967f36bbd3 100644
--- a/tools/testing/selftests/kvm/x86_64/emulator_error_test.c
+++ b/tools/testing/selftests/kvm/x86_64/emulator_error_test.c
@@ -148,7 +148,7 @@  static uint64_t process_ucall(struct kvm_vcpu *vcpu)
 	return uc.cmd;
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
@@ -156,9 +156,6 @@  int main(int argc, char *argv[])
 	uint64_t *hva;
 	int rc;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_SMALLER_MAXPHYADDR));
 
 	vm = vm_create_with_one_vcpu(&vcpu, guest_code);
@@ -188,6 +185,4 @@  int main(int argc, char *argv[])
 	TEST_ASSERT(process_ucall(vcpu) == UCALL_DONE, "Expected UCALL_DONE");
 
 	kvm_vm_free(vm);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/evmcs_test.c b/tools/testing/selftests/kvm/x86_64/evmcs_test.c
index 99bc202243d2..24e02b22e94b 100644
--- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c
+++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c
@@ -196,7 +196,7 @@  static struct kvm_vcpu *save_restore_vm(struct kvm_vm *vm,
 	return vcpu;
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t vmx_pages_gva = 0;
 
diff --git a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c
index b1905d280ef5..d85a0be5d106 100644
--- a/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c
+++ b/tools/testing/selftests/kvm/x86_64/fix_hypercall_test.c
@@ -154,7 +154,7 @@  static void test_fix_hypercall_disabled(void)
 	enter_guest(vcpu);
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	TEST_REQUIRE(kvm_check_cap(KVM_CAP_DISABLE_QUIRKS2) & KVM_X86_QUIRK_FIX_HYPERCALL_INSN);
 
diff --git a/tools/testing/selftests/kvm/x86_64/get_msr_index_features.c b/tools/testing/selftests/kvm/x86_64/get_msr_index_features.c
index d09b3cbcadc6..04c67a250947 100644
--- a/tools/testing/selftests/kvm/x86_64/get_msr_index_features.c
+++ b/tools/testing/selftests/kvm/x86_64/get_msr_index_features.c
@@ -15,7 +15,7 @@ 
 #include "kvm_util.h"
 #include "processor.h"
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	const struct kvm_msr_list *feature_list;
 	int i;
diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_clock.c b/tools/testing/selftests/kvm/x86_64/hyperv_clock.c
index d576bc8ce823..cece1814098e 100644
--- a/tools/testing/selftests/kvm/x86_64/hyperv_clock.c
+++ b/tools/testing/selftests/kvm/x86_64/hyperv_clock.c
@@ -203,7 +203,7 @@  static void host_check_tsc_msr_rdtsc(struct kvm_vcpu *vcpu)
 		    (t2 - t1) * 100, (r2 - r1) * 1000000000 / tsc_freq);
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c
index e804eb08dff9..506450541fa8 100644
--- a/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c
+++ b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c
@@ -128,15 +128,12 @@  void test_hv_cpuid_e2big(struct kvm_vm *vm, struct kvm_vcpu *vcpu)
 		    " it should have: %d %d", !vcpu ? "KVM" : "vCPU", ret, errno);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vm *vm;
 	const struct kvm_cpuid2 *hv_cpuid_entries;
 	struct kvm_vcpu *vcpu;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_HYPERV_CPUID));
 
 	vm = vm_create_with_one_vcpu(&vcpu, guest_code);
@@ -172,6 +169,4 @@  int main(int argc, char *argv[])
 
 out:
 	kvm_vm_free(vm);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_features.c b/tools/testing/selftests/kvm/x86_64/hyperv_features.c
index 79ab0152d281..c6960281fb85 100644
--- a/tools/testing/selftests/kvm/x86_64/hyperv_features.c
+++ b/tools/testing/selftests/kvm/x86_64/hyperv_features.c
@@ -632,7 +632,7 @@  static void guest_test_hcalls_access(void)
 	}
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	pr_info("Testing access to Hyper-V specific MSRs\n");
 	guest_test_msrs_access();
diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c b/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c
index a380ad7bb9b3..f54e6f3e8431 100644
--- a/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c
+++ b/tools/testing/selftests/kvm/x86_64/hyperv_svm_test.c
@@ -117,7 +117,7 @@  static void __attribute__((__flatten__)) guest_code(struct svm_test_data *svm)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t nested_gva = 0;
 
diff --git a/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c b/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c
index 813ce282cf56..f94e77ecb6a9 100644
--- a/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c
+++ b/tools/testing/selftests/kvm/x86_64/kvm_clock_test.c
@@ -171,7 +171,7 @@  static void check_clocksource(void)
 	fclose(fp);
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	vm_vaddr_t pvti_gva;
diff --git a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c b/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c
index 619655c1a1f3..014ae6dd1482 100644
--- a/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c
+++ b/tools/testing/selftests/kvm/x86_64/kvm_pv_test.c
@@ -136,7 +136,7 @@  static void enter_guest(struct kvm_vcpu *vcpu)
 	}
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c b/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c
index 3cc4b86832fe..8dbb7a48703b 100644
--- a/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c
+++ b/tools/testing/selftests/kvm/x86_64/max_vcpuid_cap_test.c
@@ -11,7 +11,7 @@ 
 
 #define MAX_VCPU_ID	2
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vm *vm;
 	int ret;
@@ -40,5 +40,4 @@  int main(int argc, char *argv[])
 	TEST_ASSERT(ret < 0, "Creating vCPU with ID > MAX_VCPU_ID should fail");
 
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
index fb02581953a3..03684a188a81 100644
--- a/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
+++ b/tools/testing/selftests/kvm/x86_64/mmio_warning_test.c
@@ -89,7 +89,7 @@  int get_warnings_count(void)
 	return warnings;
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	int warnings_before, warnings_after;
 
@@ -116,6 +116,4 @@  int main(void)
 	warnings_after = get_warnings_count();
 	TEST_ASSERT(warnings_before == warnings_after,
 		   "Warnings found in kernel.  Run 'dmesg' to inspect them.");
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/monitor_mwait_test.c b/tools/testing/selftests/kvm/x86_64/monitor_mwait_test.c
index 016070cad36e..cb631d934452 100644
--- a/tools/testing/selftests/kvm/x86_64/monitor_mwait_test.c
+++ b/tools/testing/selftests/kvm/x86_64/monitor_mwait_test.c
@@ -60,7 +60,7 @@  static void guest_code(void)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	uint64_t disabled_quirks;
 	struct kvm_vcpu *vcpu;
@@ -127,5 +127,4 @@  int main(int argc, char *argv[])
 
 done:
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c b/tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c
index cc6421716400..3a6756a3eda8 100644
--- a/tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c
+++ b/tools/testing/selftests/kvm/x86_64/nx_huge_pages_test.c
@@ -225,7 +225,7 @@  static void help(char *name)
 	exit(0);
 }
 
-int main(int argc, char **argv)
+void __main(int argc, char *argv[])
 {
 	int reclaim_period_ms = 0, token = 0, opt;
 	bool reboot_permissions = false;
@@ -263,7 +263,5 @@  int main(int argc, char **argv)
 
 	run_test(reclaim_period_ms, false, reboot_permissions);
 	run_test(reclaim_period_ms, true, reboot_permissions);
-
-	return 0;
 }
 
diff --git a/tools/testing/selftests/kvm/x86_64/platform_info_test.c b/tools/testing/selftests/kvm/x86_64/platform_info_test.c
index 76417c7d687b..e32e7bc32d3f 100644
--- a/tools/testing/selftests/kvm/x86_64/platform_info_test.c
+++ b/tools/testing/selftests/kvm/x86_64/platform_info_test.c
@@ -66,15 +66,12 @@  static void test_msr_platform_info_disabled(struct kvm_vcpu *vcpu)
 			exit_reason_str(run->exit_reason));
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
 	uint64_t msr_platform_info;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_MSR_PLATFORM_INFO));
 
 	vm = vm_create_with_one_vcpu(&vcpu, guest_code);
@@ -87,6 +84,4 @@  int main(int argc, char *argv[])
 	vcpu_set_msr(vcpu, MSR_PLATFORM_INFO, msr_platform_info);
 
 	kvm_vm_free(vm);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c
index ea4e259a1e2e..80f58ef7ace4 100644
--- a/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c
+++ b/tools/testing/selftests/kvm/x86_64/pmu_event_filter_test.c
@@ -441,15 +441,12 @@  static bool use_amd_pmu(void)
 		 is_zen3(entry->eax));
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	void (*guest_code)(void);
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_PMU_EVENT_FILTER));
 
 	TEST_REQUIRE(use_intel_pmu() || use_amd_pmu());
@@ -474,6 +471,4 @@  int main(int argc, char *argv[])
 	kvm_vm_free(vm);
 
 	test_pmu_config_disable(guest_code);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c
index b25d7556b638..4cc460efb2a4 100644
--- a/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c
+++ b/tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c
@@ -119,7 +119,7 @@  static void check_set_bsp_busy(void)
 	kvm_vm_free(vm);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_SET_BOOT_CPU_ID));
 
diff --git a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c b/tools/testing/selftests/kvm/x86_64/set_sregs_test.c
index 2bb08bf2125d..a414535d46b2 100644
--- a/tools/testing/selftests/kvm/x86_64/set_sregs_test.c
+++ b/tools/testing/selftests/kvm/x86_64/set_sregs_test.c
@@ -74,7 +74,7 @@  static uint64_t calc_supported_cr4_feature_bits(void)
 	return cr4;
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_sregs sregs;
 	struct kvm_vcpu *vcpu;
@@ -82,9 +82,6 @@  int main(int argc, char *argv[])
 	uint64_t cr4;
 	int rc;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	/*
 	 * Create a dummy VM, specifically to avoid doing KVM_SET_CPUID2, and
 	 * use it to verify all supported CR4 bits can be set prior to defining
@@ -132,6 +129,4 @@  int main(int argc, char *argv[])
 		    sregs.apic_base);
 
 	kvm_vm_free(vm);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c
index c7ef97561038..5e7a16a68200 100644
--- a/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c
+++ b/tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c
@@ -393,7 +393,7 @@  static void test_sev_move_copy(void)
 	kvm_vm_free(sev_vm);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM));
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_VM_COPY_ENC_CONTEXT_FROM));
@@ -417,5 +417,4 @@  int main(int argc, char *argv[])
 			test_sev_mirror(/* es= */ true);
 		test_sev_mirror_parameters();
 	}
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/smm_test.c b/tools/testing/selftests/kvm/x86_64/smm_test.c
index 1f136a81858e..5f8ebe7795c1 100644
--- a/tools/testing/selftests/kvm/x86_64/smm_test.c
+++ b/tools/testing/selftests/kvm/x86_64/smm_test.c
@@ -126,7 +126,7 @@  void inject_smi(struct kvm_vcpu *vcpu)
 	vcpu_events_set(vcpu, &events);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t nested_gva = 0;
 
diff --git a/tools/testing/selftests/kvm/x86_64/state_test.c b/tools/testing/selftests/kvm/x86_64/state_test.c
index ea578971fb9f..3d42c18d4c5f 100644
--- a/tools/testing/selftests/kvm/x86_64/state_test.c
+++ b/tools/testing/selftests/kvm/x86_64/state_test.c
@@ -151,7 +151,7 @@  static void __attribute__((__flatten__)) guest_code(void *arg)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t nested_gva = 0;
 
diff --git a/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c b/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c
index 4a07ba227b99..bd546610e913 100644
--- a/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c
+++ b/tools/testing/selftests/kvm/x86_64/svm_int_ctl_test.c
@@ -82,7 +82,7 @@  static void l1_guest_code(struct svm_test_data *svm)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_run *run;
@@ -123,5 +123,4 @@  int main(int argc, char *argv[])
 	}
 done:
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c
index e637d7736012..a990ff4df5aa 100644
--- a/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c
+++ b/tools/testing/selftests/kvm/x86_64/svm_nested_soft_inject_test.c
@@ -192,11 +192,8 @@  static void run_test(bool is_nmi)
 	kvm_vm_free(vm);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_SVM));
 
 	TEST_ASSERT(kvm_cpu_has(X86_FEATURE_NRIPS),
@@ -206,6 +203,4 @@  int main(int argc, char *argv[])
 
 	run_test(false);
 	run_test(true);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c b/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c
index c3ac45df7483..95ddc2bff332 100644
--- a/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c
+++ b/tools/testing/selftests/kvm/x86_64/svm_vmcall_test.c
@@ -33,7 +33,7 @@  static void l1_guest_code(struct svm_test_data *svm)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	vm_vaddr_t svm_gva;
@@ -70,5 +70,4 @@  int main(int argc, char *argv[])
 	}
 done:
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c b/tools/testing/selftests/kvm/x86_64/sync_regs_test.c
index 9b6db0b0b13e..cb9eed58031b 100644
--- a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c
+++ b/tools/testing/selftests/kvm/x86_64/sync_regs_test.c
@@ -80,7 +80,7 @@  static void compare_vcpu_events(struct kvm_vcpu_events *left,
 #define TEST_SYNC_FIELDS   (KVM_SYNC_X86_REGS|KVM_SYNC_X86_SREGS|KVM_SYNC_X86_EVENTS)
 #define INVALID_SYNC_FIELD 0x80000000
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
@@ -90,9 +90,6 @@  int main(int argc, char *argv[])
 	struct kvm_vcpu_events events;
 	int rv, cap;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	cap = kvm_check_cap(KVM_CAP_SYNC_REGS);
 	TEST_REQUIRE((cap & TEST_SYNC_FIELDS) == TEST_SYNC_FIELDS);
 	TEST_REQUIRE(!(cap & INVALID_SYNC_FIELD));
@@ -235,6 +232,4 @@  int main(int argc, char *argv[])
 		    regs.rbx);
 
 	kvm_vm_free(vm);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c
index 70b44f0b52fe..d92e1426650b 100644
--- a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c
+++ b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c
@@ -38,7 +38,7 @@  void l1_guest_code(struct vmx_pages *vmx)
 	GUEST_DONE();
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_run *run;
diff --git a/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c b/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c
index 22d366c697f7..8647453df134 100644
--- a/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c
+++ b/tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c
@@ -86,7 +86,7 @@  static void run_vcpu(struct kvm_vcpu *vcpu, int stage)
 	}
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
@@ -148,6 +148,4 @@  int main(void)
 	ASSERT_EQ(rounded_host_rdmsr(MSR_IA32_TSC_ADJUST), val - HOST_ADJUST);
 
 	kvm_vm_free(vm);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c
index 47139aab7408..143881fd223c 100644
--- a/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c
+++ b/tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c
@@ -91,7 +91,7 @@  static void *run_vcpu(void *_cpu_nr)
 	return (void *)failures;
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	TEST_REQUIRE(kvm_has_cap(KVM_CAP_VM_TSC_CONTROL));
 
@@ -114,5 +114,4 @@  int main(int argc, char *argv[])
 	TEST_ASSERT(!failures, "TSC sync failed");
 	pthread_spin_destroy(&create_lock);
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/ucna_injection_test.c b/tools/testing/selftests/kvm/x86_64/ucna_injection_test.c
index a897c7fd8abe..1f466aa6eb26 100644
--- a/tools/testing/selftests/kvm/x86_64/ucna_injection_test.c
+++ b/tools/testing/selftests/kvm/x86_64/ucna_injection_test.c
@@ -275,7 +275,7 @@  static struct kvm_vcpu *create_vcpu_with_mce_cap(struct kvm_vm *vm, uint32_t vcp
 	return vcpu;
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct thread_params params;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/x86_64/userspace_io_test.c b/tools/testing/selftests/kvm/x86_64/userspace_io_test.c
index 7316521428f8..7bdf6ac4c2b8 100644
--- a/tools/testing/selftests/kvm/x86_64/userspace_io_test.c
+++ b/tools/testing/selftests/kvm/x86_64/userspace_io_test.c
@@ -48,7 +48,7 @@  static void guest_code(void)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_regs regs;
@@ -56,9 +56,6 @@  int main(int argc, char *argv[])
 	struct kvm_vm *vm;
 	struct ucall uc;
 
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	vm = vm_create_with_one_vcpu(&vcpu, guest_code);
 	run = vcpu->run;
 
@@ -104,5 +101,4 @@  int main(int argc, char *argv[])
 	}
 
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c b/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c
index a4f06370a245..7bdd2b6872d9 100644
--- a/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c
+++ b/tools/testing/selftests/kvm/x86_64/userspace_msr_exit_test.c
@@ -733,16 +733,11 @@  static void test_msr_permission_bitmap(void)
 	kvm_vm_free(vm);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
-	/* Tell stdout not to buffer its content */
-	setbuf(stdout, NULL);
-
 	test_msr_filter_allow();
 
 	test_msr_filter_deny();
 
 	test_msr_permission_bitmap();
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c b/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c
index 5abecf06329e..2d503dce0481 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c
@@ -69,7 +69,7 @@  static void l1_guest_code(struct vmx_pages *vmx_pages, unsigned long high_gpa)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	unsigned long apic_access_addr = ~0ul;
 	vm_vaddr_t vmx_pages_gva;
@@ -127,5 +127,4 @@  int main(int argc, char *argv[])
 		}
 	}
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c b/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c
index d79651b02740..bfaf9efe1fe8 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test.c
@@ -45,7 +45,7 @@  static void l1_guest_code(struct vmx_pages *vmx_pages)
 	GUEST_ASSERT(0);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t vmx_pages_gva;
 	struct kvm_vcpu *vcpu;
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c b/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c
index 2d8c23d639f7..5ab735bcf8ab 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test.c
@@ -64,7 +64,7 @@  void l1_guest_code(struct vmx_pages *vmx)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t vmx_pages_gva = 0;
 	struct vmx_pages *vmx;
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_guest_state.c b/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_guest_state.c
index 2641b286b4ed..81ff187a5325 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_guest_state.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_exception_with_invalid_guest_state.c
@@ -106,7 +106,7 @@  static void sigalrm_handler(int sig)
 	}
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c b/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c
index 6bfb4bb471ca..ae11ec5402bd 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_invalid_nested_guest_state.c
@@ -50,7 +50,7 @@  static void l1_guest_code(struct vmx_pages *vmx_pages)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t vmx_pages_gva;
 	struct kvm_sregs sregs;
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_msrs_test.c b/tools/testing/selftests/kvm/x86_64/vmx_msrs_test.c
index 322d561b4260..ed34a09a2eeb 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_msrs_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_msrs_test.c
@@ -67,7 +67,7 @@  static void vmx_save_restore_msrs_test(struct kvm_vcpu *vcpu)
 	vmx_fixed1_msr_test(vcpu, MSR_IA32_VMX_VMFUNC, -1ull);
 }
 
-int main(void)
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c b/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c
index 465a9434d61c..e3887e08666c 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c
@@ -137,7 +137,7 @@  static void stable_tsc_check_supported(void)
 	exit(KSFT_SKIP);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vcpu *vcpu;
 	struct kvm_vm *vm;
@@ -227,5 +227,4 @@  int main(int argc, char *argv[])
 
 done:
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c b/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c
index 069589c52f41..fded1964251b 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_pmu_caps_test.c
@@ -51,7 +51,7 @@  static void guest_code(void)
 	wrmsr(MSR_IA32_PERF_CAPABILITIES, PMU_CAP_LBR_FMT);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	const struct kvm_cpuid_entry2 *entry_a_0;
 	struct kvm_vm *vm;
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c b/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c
index 0efdc05969a5..629b9c4bd6e4 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c
@@ -151,7 +151,7 @@  void guest_code(struct vmx_pages *vmx_pages)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t vmx_pages_gva = 0;
 
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c
index 41ea7028a1f8..4c1cd8910922 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c
@@ -243,7 +243,7 @@  void test_vmx_nested_state(struct kvm_vcpu *vcpu)
 	free(state);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct kvm_vm *vm;
 	struct kvm_nested_state state;
@@ -296,5 +296,4 @@  int main(int argc, char *argv[])
 	test_vmx_nested_state(vcpu);
 
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c b/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c
index 5943187e8594..da9628db7ee6 100644
--- a/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c
+++ b/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test.c
@@ -122,7 +122,7 @@  static void report(int64_t val)
 		val, val / TSC_ADJUST_VALUE, val % TSC_ADJUST_VALUE);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	vm_vaddr_t vmx_pages_gva;
 	struct kvm_vcpu *vcpu;
@@ -161,5 +161,4 @@  int main(int argc, char *argv[])
 
 done:
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c b/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c
index 3d272d7f961e..fd0d5fbdeae2 100644
--- a/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c
+++ b/tools/testing/selftests/kvm/x86_64/xapic_ipi_test.c
@@ -391,7 +391,7 @@  void get_cmdline_args(int argc, char *argv[], int *run_secs,
 	}
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	int r;
 	int wait_secs;
@@ -490,6 +490,4 @@  int main(int argc, char *argv[])
 		data->migrations_attempted, data->migrations_completed);
 
 	kvm_vm_free(vm);
-
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c b/tools/testing/selftests/kvm/x86_64/xapic_state_test.c
index 6f7a5ef66718..750a3cb90b24 100644
--- a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c
+++ b/tools/testing/selftests/kvm/x86_64/xapic_state_test.c
@@ -130,7 +130,7 @@  static void test_icr(struct xapic_vcpu *x)
 	__test_icr(x, -1ull & ~APIC_DM_FIXED_MASK);
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct xapic_vcpu x = {
 		.vcpu = NULL,
diff --git a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c b/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c
index 8a5cb800f50e..f003c8cc2812 100644
--- a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c
+++ b/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c
@@ -352,7 +352,7 @@  static void handle_alrm(int sig)
 	TEST_FAIL("IRQ delivery timed out");
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	struct timespec min_ts, max_ts, vm_ts;
 	struct kvm_vm *vm;
@@ -876,5 +876,4 @@  int main(int argc, char *argv[])
 			    "runstate times don't add up");
 	}
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c b/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c
index 88914d48c65e..b17f36bd41cc 100644
--- a/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c
+++ b/tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c
@@ -78,7 +78,7 @@  static void guest_code(void)
 	GUEST_DONE();
 }
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	unsigned int xen_caps;
 	struct kvm_vcpu *vcpu;
@@ -141,5 +141,4 @@  int main(int argc, char *argv[])
 	}
 done:
 	kvm_vm_free(vm);
-	return 0;
 }
diff --git a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c b/tools/testing/selftests/kvm/x86_64/xss_msr_test.c
index e0ddf47362e7..86cf86361637 100644
--- a/tools/testing/selftests/kvm/x86_64/xss_msr_test.c
+++ b/tools/testing/selftests/kvm/x86_64/xss_msr_test.c
@@ -14,7 +14,7 @@ 
 
 #define MSR_BITS      64
 
-int main(int argc, char *argv[])
+void __main(int argc, char *argv[])
 {
 	bool xss_in_msr_list;
 	struct kvm_vm *vm;