@@ -2405,17 +2405,30 @@ struct llama_context * llama_init_from_file(
2405
2405
// this allocates all Metal resources and memory buffers
2406
2406
ctx->ctx_metal = ggml_metal_init ();
2407
2407
2408
+ void *data_ptr = NULL ;
2409
+ size_t data_size = 0 ;
2408
2410
if (params.use_mmap ) {
2409
- ggml_metal_add_buffer (ctx-> ctx_metal , " data " , ctx->model .mapping ->addr , ctx-> model . mapping -> size ) ;
2410
- ggml_metal_add_buffer (ctx-> ctx_metal , " eval " , ctx->buf_compute . addr , ctx-> buf_compute . size ) ;
2411
+ data_ptr = ctx->model .mapping ->addr ;
2412
+ data_size= ctx->model . mapping -> size ;
2411
2413
} else {
2412
- ggml_metal_add_buffer (ctx-> ctx_metal , " data " , ggml_get_mem_buffer (ctx->model .ctx ), ggml_get_mem_size (ctx-> model . ctx ) );
2413
- ggml_metal_add_buffer (ctx->ctx_metal , " eval " , ctx-> buf_compute . addr , ctx-> buf_compute . size );
2414
+ data_ptr = ggml_get_mem_buffer (ctx->model .ctx );
2415
+ data_size= ggml_get_mem_size (ctx->model . ctx );
2414
2416
}
2415
2417
2416
- ggml_metal_add_buffer (ctx->ctx_metal , " kv" , ctx->model .kv_self .buf .addr , ctx->model .kv_self .buf .size );
2417
- ggml_metal_add_buffer (ctx->ctx_metal , " scr0" , ctx->buf_scratch [0 ].addr , ctx->buf_scratch [0 ].size );
2418
- ggml_metal_add_buffer (ctx->ctx_metal , " scr1" , ctx->buf_scratch [1 ].addr , ctx->buf_scratch [1 ].size );
2418
+ #define LLAMA_METAL_CHECK_BUF (result ) \
2419
+ if (!(result)) { \
2420
+ fprintf (stderr, " %s: failed to add buffer\n " , __func__); \
2421
+ llama_free (ctx); \
2422
+ return NULL ; \
2423
+ }
2424
+
2425
+ LLAMA_METAL_CHECK_BUF (ggml_metal_add_buffer (ctx->ctx_metal , " data" , data_ptr, data_size));
2426
+ LLAMA_METAL_CHECK_BUF (ggml_metal_add_buffer (ctx->ctx_metal , " eval" , ctx->buf_compute .addr , ctx->buf_compute .size ));
2427
+
2428
+ LLAMA_METAL_CHECK_BUF (ggml_metal_add_buffer (ctx->ctx_metal , " kv" , ctx->model .kv_self .buf .addr , ctx->model .kv_self .buf .size ));
2429
+ LLAMA_METAL_CHECK_BUF (ggml_metal_add_buffer (ctx->ctx_metal , " scr0" , ctx->buf_scratch [0 ].addr , ctx->buf_scratch [0 ].size ));
2430
+ LLAMA_METAL_CHECK_BUF (ggml_metal_add_buffer (ctx->ctx_metal , " scr1" , ctx->buf_scratch [1 ].addr , ctx->buf_scratch [1 ].size ));
2431
+ #undef LLAMA_METAL_CHECK_BUF
2419
2432
}
2420
2433
#endif
2421
2434
0 commit comments