migration: Introduce interface query-migrationthreads
Introduce interface query-migrationthreads. The interface is used to query information about migration threads and returns with migration thread's name and its id. Introduce threadinfo.c to manage threads with migration. Signed-off-by: Jiang Jiacheng <jiangjiacheng@huawei.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
		
				
					committed by
					
						 Juan Quintela
						Juan Quintela
					
				
			
			
				
	
			
			
			
						parent
						
							ebfc578715
						
					
				
				
					commit
					671326201d
				
			| @@ -26,6 +26,7 @@ softmmu_ss.add(files( | ||||
|   'savevm.c', | ||||
|   'socket.c', | ||||
|   'tls.c', | ||||
|   'threadinfo.c', | ||||
| ), gnutls) | ||||
|  | ||||
| softmmu_ss.add(when: rdma, if_true: files('rdma.c')) | ||||
|   | ||||
							
								
								
									
										51
									
								
								migration/threadinfo.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								migration/threadinfo.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| /* | ||||
|  *  Migration Threads info | ||||
|  * | ||||
|  *  Copyright (c) 2022 HUAWEI TECHNOLOGIES CO., LTD. | ||||
|  * | ||||
|  *  Authors: | ||||
|  *  Jiang Jiacheng <jiangjiacheng@huawei.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 "threadinfo.h" | ||||
|  | ||||
| static QLIST_HEAD(, MigrationThread) migration_threads; | ||||
|  | ||||
| MigrationThread *MigrationThreadAdd(const char *name, int thread_id) | ||||
| { | ||||
|     MigrationThread *thread =  g_new0(MigrationThread, 1); | ||||
|     thread->name = name; | ||||
|     thread->thread_id = thread_id; | ||||
|  | ||||
|     QLIST_INSERT_HEAD(&migration_threads, thread, node); | ||||
|  | ||||
|     return thread; | ||||
| } | ||||
|  | ||||
| void MigrationThreadDel(MigrationThread *thread) | ||||
| { | ||||
|     if (thread) { | ||||
|         QLIST_REMOVE(thread, node); | ||||
|         g_free(thread); | ||||
|     } | ||||
| } | ||||
|  | ||||
| MigrationThreadInfoList *qmp_query_migrationthreads(Error **errp) | ||||
| { | ||||
|     MigrationThreadInfoList *head = NULL; | ||||
|     MigrationThreadInfoList **tail = &head; | ||||
|     MigrationThread *thread = NULL; | ||||
|  | ||||
|     QLIST_FOREACH(thread, &migration_threads, node) { | ||||
|         MigrationThreadInfo *info = g_new0(MigrationThreadInfo, 1); | ||||
|         info->name = g_strdup(thread->name); | ||||
|         info->thread_id = thread->thread_id; | ||||
|  | ||||
|         QAPI_LIST_APPEND(tail, info); | ||||
|     } | ||||
|  | ||||
|     return head; | ||||
| } | ||||
							
								
								
									
										28
									
								
								migration/threadinfo.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								migration/threadinfo.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| /* | ||||
|  *  Migration Threads info | ||||
|  * | ||||
|  *  Copyright (c) 2022 HUAWEI TECHNOLOGIES CO., LTD. | ||||
|  * | ||||
|  *  Authors: | ||||
|  *  Jiang Jiacheng <jiangjiacheng@huawei.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/queue.h" | ||||
| #include "qemu/osdep.h" | ||||
| #include "qapi/error.h" | ||||
| #include "qapi/qapi-commands-migration.h" | ||||
|  | ||||
| typedef struct MigrationThread MigrationThread; | ||||
|  | ||||
| struct MigrationThread { | ||||
|     const char *name; /* the name of migration thread */ | ||||
|     int thread_id; /* ID of the underlying host thread */ | ||||
|     QLIST_ENTRY(MigrationThread) node; | ||||
| }; | ||||
|  | ||||
| MigrationThread *MigrationThreadAdd(const char *name, int thread_id); | ||||
|  | ||||
| void MigrationThreadDel(MigrationThread *info); | ||||
| @@ -1958,6 +1958,35 @@ | ||||
| { 'command': 'query-vcpu-dirty-limit', | ||||
|   'returns': [ 'DirtyLimitInfo' ] } | ||||
|  | ||||
| ## | ||||
| # @MigrationThreadInfo: | ||||
| # | ||||
| # Information about migrationthreads | ||||
| # | ||||
| # @name: the name of migration thread | ||||
| # | ||||
| # @thread-id: ID of the underlying host thread | ||||
| # | ||||
| # Since: 7.2 | ||||
| ## | ||||
| { 'struct': 'MigrationThreadInfo', | ||||
|   'data': {'name': 'str', | ||||
|            'thread-id': 'int'} } | ||||
|  | ||||
| ## | ||||
| # @query-migrationthreads: | ||||
| # | ||||
| # Returns information of migration threads | ||||
| # | ||||
| # data: migration thread name | ||||
| # | ||||
| # returns: information about migration threads | ||||
| # | ||||
| # Since: 7.2 | ||||
| ## | ||||
| { 'command': 'query-migrationthreads', | ||||
|   'returns': ['MigrationThreadInfo'] } | ||||
|  | ||||
| ## | ||||
| # @snapshot-save: | ||||
| # | ||||
|   | ||||
		Reference in New Issue
	
	Block a user