#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);
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))
* 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);
#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)