Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion ggml/src/ggml-metal/ggml-metal-device.m
Original file line number Diff line number Diff line change
Expand Up @@ -817,6 +817,7 @@ bool ggml_metal_device_supports_op(ggml_metal_device_t dev, const struct ggml_te

// if false, the Metal buffer data is allocated in private GPU memory and is not shared with the host
bool is_shared;
bool owned;

// multiple buffers are used only to avoid the maximum buffer size limitation when using mmap
int n_buffers;
Expand Down Expand Up @@ -949,6 +950,7 @@ ggml_metal_buffer_t ggml_metal_buffer_init(ggml_metal_device_t dev, size_t size,
if (shared) {
res->all_data = ggml_metal_host_malloc(size_aligned);
res->is_shared = true;
res->owned = true;
} else {
// dummy, non-NULL value - we'll populate this after creating the Metal buffer below
res->all_data = (void *) 0x000000400ULL;
Expand Down Expand Up @@ -1007,6 +1009,7 @@ ggml_metal_buffer_t ggml_metal_buffer_map(ggml_metal_device_t dev, void * ptr, s
res->all_size = size;

res->is_shared = true;
res->owned = false;

res->n_buffers = 0;

Expand Down Expand Up @@ -1100,7 +1103,7 @@ void ggml_metal_buffer_free(ggml_metal_buffer_t buf) {

ggml_metal_buffer_rset_free(buf);

if (buf->is_shared) {
if (buf->is_shared && buf->owned) {
#if TARGET_OS_OSX
vm_deallocate((vm_map_t)mach_task_self(), (vm_address_t)buf->all_data, buf->all_size);
#else
Expand Down
Loading