Skip to content

Commit 53aceea

Browse files
committed
op: add copy_buf_guest
1 parent dd5b440 commit 53aceea

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/portal/portal_mem.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,3 +360,23 @@ void handle_op_read_ptr_array(portal_region *mem_region)
360360
mem_region->header.size = buf_offset;
361361
mem_region->header.op = HYPER_RESP_READ_OK;
362362
}
363+
364+
void handle_op_copy_buf_guest(portal_region *mem_region)
365+
{
366+
region_header *req = &mem_region->header;
367+
void * data = PORTAL_DATA(mem_region);
368+
void * buf;
369+
int copy_size = min(req->size, sizeof(mem_region->raw));
370+
igloo_pr_debug("igloo: Handling COPY_BUF_GUEST for size %lu\n", req->size);
371+
372+
buf = kzalloc(req->size, GFP_KERNEL);
373+
if (!buf) {
374+
igloo_pr_debug("igloo: kzalloc failed for size %lu\n", req->size);
375+
mem_region->header.op = HYPER_RESP_READ_FAIL;
376+
return;
377+
}
378+
memcpy(buf, data, copy_size);
379+
380+
mem_region->header.size = (unsigned long)buf;
381+
mem_region->header.op = HYPER_RESP_READ_NUM;
382+
}

src/portal/portal_op_list.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@
2222
X(ffi_exec, FFI_EXEC) \
2323
X(kallsyms_lookup, KALLSYMS_LOOKUP) \
2424
X(tramp_generate, TRAMP_GENERATE) \
25-
X(hyperfs_add_hyperfile, HYPERFS_ADD_HYPERFILE)
25+
X(hyperfs_add_hyperfile, HYPERFS_ADD_HYPERFILE) \
26+
X(copy_buf_guest, COPY_BUF_GUEST)

0 commit comments

Comments
 (0)