diff --git kernel/include/mman.h kernel/include/mman.h index e7d3526..3b8b0f3 100644 --- kernel/include/mman.h +++ kernel/include/mman.h @@ -56,6 +56,7 @@ #define MADV_DODUMP 17 #define MADV_HWPOISON 100 #define MADV_SOFT_OFFLINE 101 +#define MADV_SHOW_ATTR 201 /* for TEST */ /* * for mremap() diff --git kernel/syscall.c kernel/syscall.c index 564c103..9e2c56f 100644 --- kernel/syscall.c +++ kernel/syscall.c @@ -4651,6 +4651,14 @@ clear_memory_range_flag(struct vm_range *range, unsigned long arg) } static int +show_memory_range_flag(struct vm_range *range, unsigned long arg) +{ + kprintf("range 0x%lx - 0x%lx attr: 0x%lx\n", + range->start, range->end, range->flag); + return 0; +} + +static int change_attr_process_memory_range(struct process_vm *vm, uintptr_t start, uintptr_t end, int (*change_proc)(struct vm_range *, @@ -4779,6 +4787,7 @@ SYSCALL_DECLARE(madvise) case MADV_REMOVE: case MADV_DONTDUMP: case MADV_DODUMP: + case MADV_SHOW_ATTR: break; case MADV_HWPOISON: @@ -4919,6 +4928,14 @@ SYSCALL_DECLARE(madvise) error = syscall_generic_forwarding(__NR_madvise, ctx); } + if (advice == MADV_SHOW_ATTR) { + error = change_attr_process_memory_range(thread->vm, + start, end, show_memory_range_flag, 0); + if (error) { + goto out; + } + } + error = 0; out: memory_range_write_unlock(thread->vm, &irqflags);