OSDN Git Service

libpagemap: add page flags for new kernels
[android-x86/system-extras.git] / libpagemap / include / pagemap / pagemap.h
index 3ee8d72..2e3688f 100644 (file)
@@ -105,6 +105,24 @@ int pm_kernel_flags(pm_kernel_t *ker, unsigned long pfn, uint64_t *flags_out);
 #define PM_PAGE_RECLAIM    (1 <<  9)
 #define PM_PAGE_BUDDY      (1 << 10)
 
+/* for kernels >= 2.6.31 */
+#define PM_PAGE_MMAP          (1 << 11)
+#define PM_PAGE_ANON          (1 << 12)
+#define PM_PAGE_SWAPCACHE     (1 << 13)
+#define PM_PAGE_SWAPBACKED    (1 << 14)
+#define PM_PAGE_COMPOUND_HEAD (1 << 15)
+#define PM_PAGE_COMPOUND_TAIL (1 << 16)
+#define PM_PAGE_HUGE          (1 << 17)
+#define PM_PAGE_UNEVICTABLE   (1 << 18)
+#define PM_PAGE_HWPOISON      (1 << 19)
+#define PM_PAGE_NOPAGE        (1 << 20)
+
+/* for kernels >= 2.6.32 */
+#define KPF_KSM               (1 << 21)
+
+/* for kernels >= 3.4 */
+#define KPF_THP               (1 << 22)
+
 /* Destroy a pm_kernel_t. */
 int pm_kernel_destroy(pm_kernel_t *ker);
 
@@ -129,10 +147,10 @@ int pm_process_pagemap_range(pm_process_t *proc,
                              unsigned long low, unsigned long hi,
                              uint64_t **range_out, size_t *len);
 
-#define _BITS(x, offset, bits) (((x) >> offset) & ((1LL << ((bits) + 1)) - 1))
+#define _BITS(x, offset, bits) (((x) >> offset) & ((1LL << (bits)) - 1))
 
 #define PM_PAGEMAP_PRESENT(x)     (_BITS(x, 63, 1))
-#define PM_PAGEMAP_SWAPPED(x)     (!_BITS(x, 62, 1))
+#define PM_PAGEMAP_SWAPPED(x)     (_BITS(x, 62, 1))
 #define PM_PAGEMAP_SHIFT(x)       (_BITS(x, 55, 6))
 #define PM_PAGEMAP_PFN(x)         (_BITS(x, 0, 55))
 #define PM_PAGEMAP_SWAP_OFFSET(x) (_BITS(x, 5, 50))
@@ -142,7 +160,7 @@ int pm_process_pagemap_range(pm_process_t *proc,
  * Returns an array of pointers to pm_map_t through *maps.
  * The array should be freed by the caller, but the maps should not be 
  * modified or destroyed. */
-int pm_process_maps(pm_process_t *proc, pm_map_t ***maps_out, int *len);
+int pm_process_maps(pm_process_t *proc, pm_map_t ***maps_out, size_t *len);
 
 /* Destroy a pm_process_t. */
 int pm_process_destroy(pm_process_t *proc);
@@ -153,6 +171,7 @@ int pm_process_destroy(pm_process_t *proc);
 #define PM_MAP_READ  1
 #define PM_MAP_WRITE 2
 #define PM_MAP_EXEC  4
+#define PM_MAP_PERMISSIONS (PM_MAP_READ | PM_MAP_WRITE | PM_MAP_EXEC)
 #define pm_map_start(map)  ((map)->start)
 #define pm_map_end(map)    ((map)->end)
 #define pm_map_offset(map) ((map)->offset)