ffaafde16f
* ggml-virtgpu-backend: validate the consistency of the received objects This patch adds consistency checks in the ggml-virtgpu-backend (running on the host side) to ensure that the data received from the guest is consistent (valid pointers, valid sizes and offsets). * ggml-virtgpu-backend: add fallback/skips for optional ggml backend methods ``` 1. bck->iface.synchronize(bck) 2. buft->iface.get_alloc_size(buft, op) 3. buft->iface.get_max_size(buft) ``` these three methods are optional in the GGML interface. `get_max_size` was already properly defaulted, but `backend sychronize` and `butf get_max_size` would have segfaulted the backend if not implemented. * ggml-virtgpu-backend: fix log format missing argument * ggml-virtgpu-backend: improve the abort message * ggml-virtgpu-backend: more safety checks * ggml-virtgpu-backend: new error code * ggml-virtgpu-backend: initialize all the error codes * ggml-virtgpu: add a missing comment generated by the code generator * ggml-virtgpu: add the '[virtgpu]' prefix to the device/buffer names * ggml-virtgpu: apir_device_buffer_from_ptr: improve the error message * ggml-virtgpu: shared: make it match the latest api_remoting.h of Virglrenderer APIR (still unmerged) * ggml-virtgpu: update the code generator to have dispatch_command_name in a host/guest shared file * ggml-virtgpu: REMOTE_CALL: fail if the backend returns an error * docs/backend/VirtGPU.md: indicate that the RAM+VRAM size is limed to 64 GB with libkrun * ggml-virtgpu: turn off clang-format header ordering for some of the files Compilation breaks when ordered alphabetically. * ggml-virtgpu: clang-format * ggml-virtgpu/backend/shared/api_remoting: better comments for the APIR return codes
51 lines
2.2 KiB
C
51 lines
2.2 KiB
C
#pragma once
|
|
|
|
#include "apir_backend.gen.h"
|
|
|
|
#include <stdint.h> // for uintptr_t
|
|
#include <time.h> // for timespec, clock_gettime
|
|
|
|
#define APIR_BACKEND_INITIALIZE_SUCCESS 0
|
|
#define APIR_BACKEND_INITIALIZE_CANNOT_OPEN_BACKEND_LIBRARY 1
|
|
#define APIR_BACKEND_INITIALIZE_CANNOT_OPEN_GGML_LIBRARY 2
|
|
#define APIR_BACKEND_INITIALIZE_MISSING_BACKEND_SYMBOLS 3
|
|
#define APIR_BACKEND_INITIALIZE_MISSING_GGML_SYMBOLS 4
|
|
#define APIR_BACKEND_INITIALIZE_BACKEND_FAILED 5
|
|
#define APIR_BACKEND_INITIALIZE_BACKEND_REG_FAILED 6
|
|
#define APIR_BACKEND_INITIALIZE_ALREADY_INITED 7
|
|
#define APIR_BACKEND_INITIALIZE_NO_DEVICE 8
|
|
#define APIR_BACKEND_INITIALIZE_BACKEND_INIT_FAILED 9
|
|
|
|
// new entries here need to be added to the apir_backend_initialize_error function below
|
|
|
|
#define APIR_BACKEND_FORWARD_INDEX_INVALID 6
|
|
|
|
// 0 is fast, 1 avoids the backend to crash if an unsupported tensor is received
|
|
#define APIR_BACKEND_CHECK_SUPPORTS_OP 0
|
|
|
|
typedef uintptr_t apir_buffer_type_host_handle_t;
|
|
typedef uintptr_t apir_buffer_host_handle_t;
|
|
|
|
static const char * apir_backend_initialize_error(int code) {
|
|
#define APIR_BACKEND_INITIALIZE_ERROR(code_name) \
|
|
do { \
|
|
if (code == code_name) \
|
|
return #code_name; \
|
|
} while (0)
|
|
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_SUCCESS);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_CANNOT_OPEN_BACKEND_LIBRARY);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_CANNOT_OPEN_GGML_LIBRARY);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_MISSING_BACKEND_SYMBOLS);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_MISSING_GGML_SYMBOLS);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_BACKEND_FAILED);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_BACKEND_REG_FAILED);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_ALREADY_INITED);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_NO_DEVICE);
|
|
APIR_BACKEND_INITIALIZE_ERROR(APIR_BACKEND_INITIALIZE_BACKEND_INIT_FAILED);
|
|
|
|
return "Unknown APIR_BACKEND_INITIALIZE error:/";
|
|
|
|
#undef APIR_BACKEND_INITIALIZE_ERROR
|
|
}
|