2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-22 18:07:57 +00:00
criu/plugins/amdgpu/amdgpu_socket_utils.h

54 lines
1.6 KiB
C
Raw Normal View History

#ifndef __KFD_PLUGIN_AMDGPU_SOCKET_UTILS_H__
#define __KFD_PLUGIN_AMDGPU_SOCKET_UTILS_H__
typedef struct {
int id;
int fd_write_num; /* The number of buffer objects to be restored. */
int entry_num; /* The number of restore commands.*/
int gpu_num;
} parallel_restore_cmd_head;
typedef struct {
int gpu_id;
int minor;
} parallel_gpu_info;
typedef struct {
int gpu_id;
int write_id;
uint64_t read_offset;
uint64_t write_offset;
uint64_t size;
} parallel_restore_entry;
typedef struct {
parallel_restore_cmd_head cmd_head;
int *fds_write;
parallel_gpu_info *gpu_ids;
parallel_restore_entry *entries;
} parallel_restore_cmd;
/*
* For parallel_restore, a background thread in the main CRIU process is used to restore the GPU
* buffer object. However, initially, the ownership of these buffer objects and the metadata for
* restoration are all with the target process. Therefore, we introduce a series of functions to
* help the target process send these tasks to the main CRIU process.
*/
int init_parallel_restore_cmd(int num, int id, int gpu_num, parallel_restore_cmd *restore_cmd);
void free_parallel_restore_cmd(parallel_restore_cmd *restore_cmd);
int install_parallel_sock(void);
int send_parallel_restore_cmd(parallel_restore_cmd *restore_cmd);
int recv_parallel_restore_cmd(parallel_restore_cmd *restore_cmd);
void parallel_restore_bo_add(int dmabuf_fd, int gpu_id, uint64_t size, uint64_t offset,
parallel_restore_cmd *restore_cmd);
void parallel_restore_gpu_id_add(int gpu_id, int minor, parallel_restore_cmd *restore_cmd);
int close_parallel_restore_server(void);
#endif