diff --git a/ggml-metal.m b/ggml-metal.m index 1e7ed6bb8b756d..7045feb05254ee 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -2656,6 +2656,14 @@ ggml_backend_buffer_t ggml_backend_metal_buffer_from_ptr(void * data, size_t siz ctx->n_buffers = 0; const size_t size_page = sysconf(_SC_PAGESIZE); + + // page-align the data ptr + { + void * data_aligned = (void *) ((uintptr_t) data & ~(size_page - 1)); + size += (uintptr_t) data - (uintptr_t) data_aligned; + data = data_aligned; + } + size_t size_aligned = size; if ((size_aligned % size_page) != 0) { size_aligned += (size_page - (size_aligned % size_page));