| 
									
										
										
										
											2019-04-22 18:04:46 -03:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * QTest accelerator code | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright IBM, Corp. 2011 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Authors: | 
					
						
							|  |  |  |  *  Anthony Liguori   <aliguori@us.ibm.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This work is licensed under the terms of the GNU GPL, version 2 or later. | 
					
						
							|  |  |  |  * See the COPYING file in the top-level directory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "qemu/osdep.h"
 | 
					
						
							| 
									
										
										
										
											2020-07-07 10:21:10 +02:00
										 |  |  | #include "qemu/rcu.h"
 | 
					
						
							| 
									
										
										
										
											2019-04-22 18:04:46 -03:00
										 |  |  | #include "qapi/error.h"
 | 
					
						
							|  |  |  | #include "qemu/module.h"
 | 
					
						
							|  |  |  | #include "qemu/option.h"
 | 
					
						
							|  |  |  | #include "qemu/config-file.h"
 | 
					
						
							| 
									
										
										
										
											2021-02-04 17:39:24 +01:00
										 |  |  | #include "qemu/accel.h"
 | 
					
						
							| 
									
										
										
										
											2019-04-22 18:04:46 -03:00
										 |  |  | #include "sysemu/qtest.h"
 | 
					
						
							|  |  |  | #include "sysemu/cpus.h"
 | 
					
						
							| 
									
										
										
										
											2020-07-07 10:21:10 +02:00
										 |  |  | #include "qemu/guest-random.h"
 | 
					
						
							|  |  |  | #include "qemu/main-loop.h"
 | 
					
						
							|  |  |  | #include "hw/core/cpu.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-20 16:22:15 +01:00
										 |  |  | static int64_t qtest_clock_counter; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int64_t qtest_get_virtual_clock(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qatomic_read_i64(&qtest_clock_counter); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void qtest_set_virtual_clock(int64_t count) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qatomic_set_i64(&qtest_clock_counter, count); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-22 18:04:46 -03:00
										 |  |  | static int qtest_init_accel(MachineState *ms) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void qtest_accel_class_init(ObjectClass *oc, void *data) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     AccelClass *ac = ACCEL_CLASS(oc); | 
					
						
							|  |  |  |     ac->name = "QTest"; | 
					
						
							|  |  |  |     ac->init_machine = qtest_init_accel; | 
					
						
							|  |  |  |     ac->allowed = &qtest_allowed; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define TYPE_QTEST_ACCEL ACCEL_CLASS_NAME("qtest")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static const TypeInfo qtest_accel_type = { | 
					
						
							|  |  |  |     .name = TYPE_QTEST_ACCEL, | 
					
						
							|  |  |  |     .parent = TYPE_ACCEL, | 
					
						
							|  |  |  |     .class_init = qtest_accel_class_init, | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2021-06-24 12:38:28 +02:00
										 |  |  | module_obj(TYPE_QTEST_ACCEL); | 
					
						
							| 
									
										
										
										
											2019-04-22 18:04:46 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-04 17:39:25 +01:00
										 |  |  | static void qtest_accel_ops_class_init(ObjectClass *oc, void *data) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     AccelOpsClass *ops = ACCEL_OPS_CLASS(oc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ops->create_vcpu_thread = dummy_start_vcpu_thread; | 
					
						
							|  |  |  |     ops->get_virtual_clock = qtest_get_virtual_clock; | 
					
						
							| 
									
										
										
										
											2024-06-20 16:22:13 +01:00
										 |  |  |     ops->set_virtual_clock = qtest_set_virtual_clock; | 
					
						
							| 
									
										
										
										
											2021-02-04 17:39:25 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static const TypeInfo qtest_accel_ops_type = { | 
					
						
							|  |  |  |     .name = ACCEL_OPS_NAME("qtest"), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .parent = TYPE_ACCEL_OPS, | 
					
						
							|  |  |  |     .class_init = qtest_accel_ops_class_init, | 
					
						
							|  |  |  |     .abstract = true, | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2021-06-24 12:38:28 +02:00
										 |  |  | module_obj(ACCEL_OPS_NAME("qtest")); | 
					
						
							| 
									
										
										
										
											2021-02-04 17:39:25 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-22 18:04:46 -03:00
										 |  |  | static void qtest_type_init(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     type_register_static(&qtest_accel_type); | 
					
						
							| 
									
										
										
										
											2021-02-04 17:39:25 +01:00
										 |  |  |     type_register_static(&qtest_accel_ops_type); | 
					
						
							| 
									
										
										
										
											2019-04-22 18:04:46 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type_init(qtest_type_init); |