diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index c2df92b9a3..659b9556d0 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -363,6 +363,12 @@ int Process::sys$madvise(void* address, size_t size, int advice) vmobject.set_was_purged(false); return was_purged ? 1 : 0; } + if (advice & MADV_GET_VOLATILE) { + if (!region->vmobject().is_purgeable()) + return -EPERM; + auto& vmobject = static_cast(region->vmobject()); + return vmobject.is_volatile() ? 0 : 1; + } return -EINVAL; } diff --git a/Kernel/UnixTypes.h b/Kernel/UnixTypes.h index 28b984f3fa..68563257ae 100644 --- a/Kernel/UnixTypes.h +++ b/Kernel/UnixTypes.h @@ -36,6 +36,7 @@ #define MADV_SET_VOLATILE 0x100 #define MADV_SET_NONVOLATILE 0x200 +#define MADV_GET_VOLATILE 0x400 #define F_DUPFD 0 #define F_GETFD 1 diff --git a/Libraries/LibC/mman.h b/Libraries/LibC/mman.h index b594166312..ca937b23b4 100644 --- a/Libraries/LibC/mman.h +++ b/Libraries/LibC/mman.h @@ -20,6 +20,7 @@ #define MADV_SET_VOLATILE 0x100 #define MADV_SET_NONVOLATILE 0x200 +#define MADV_GET_VOLATILE 0x400 __BEGIN_DECLS