Parcourir la source

Kernel: Add MADV_GET_VOLATILE for checking the volatile flag

Sometimes you might want to know if a purgeable region is volatile.
Andreas Kling il y a 5 ans
Parent
commit
487f9b373b
3 fichiers modifiés avec 8 ajouts et 0 suppressions
  1. 6 0
      Kernel/Process.cpp
  2. 1 0
      Kernel/UnixTypes.h
  3. 1 0
      Libraries/LibC/mman.h

+ 6 - 0
Kernel/Process.cpp

@@ -363,6 +363,12 @@ int Process::sys$madvise(void* address, size_t size, int advice)
         vmobject.set_was_purged(false);
         vmobject.set_was_purged(false);
         return was_purged ? 1 : 0;
         return was_purged ? 1 : 0;
     }
     }
+    if (advice & MADV_GET_VOLATILE) {
+        if (!region->vmobject().is_purgeable())
+            return -EPERM;
+        auto& vmobject = static_cast<PurgeableVMObject&>(region->vmobject());
+        return vmobject.is_volatile() ? 0 : 1;
+    }
     return -EINVAL;
     return -EINVAL;
 }
 }
 
 

+ 1 - 0
Kernel/UnixTypes.h

@@ -36,6 +36,7 @@
 
 
 #define MADV_SET_VOLATILE 0x100
 #define MADV_SET_VOLATILE 0x100
 #define MADV_SET_NONVOLATILE 0x200
 #define MADV_SET_NONVOLATILE 0x200
+#define MADV_GET_VOLATILE 0x400
 
 
 #define F_DUPFD 0
 #define F_DUPFD 0
 #define F_GETFD 1
 #define F_GETFD 1

+ 1 - 0
Libraries/LibC/mman.h

@@ -20,6 +20,7 @@
 
 
 #define MADV_SET_VOLATILE 0x100
 #define MADV_SET_VOLATILE 0x100
 #define MADV_SET_NONVOLATILE 0x200
 #define MADV_SET_NONVOLATILE 0x200
+#define MADV_GET_VOLATILE 0x400
 
 
 __BEGIN_DECLS
 __BEGIN_DECLS