tuxonice_pageflags.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * kernel/power/tuxonice_pageflags.h
  3. *
  4. * Copyright (C) 2004-2014 Nigel Cunningham (nigel at tuxonice net)
  5. *
  6. * This file is released under the GPLv2.
  7. */
  8. #ifndef KERNEL_POWER_TUXONICE_PAGEFLAGS_H
  9. #define KERNEL_POWER_TUXONICE_PAGEFLAGS_H
  10. struct memory_bitmap;
  11. void memory_bm_clear(struct memory_bitmap *bm);
  12. int mem_bm_set_bit_check(struct memory_bitmap *bm, int index, unsigned long pfn);
  13. void memory_bm_set_bit(struct memory_bitmap *bm, int index, unsigned long pfn);
  14. unsigned long memory_bm_next_pfn(struct memory_bitmap *bm, int index);
  15. unsigned long memory_bm_next_pfn_index(struct memory_bitmap *bm, int index);
  16. void memory_bm_position_reset(struct memory_bitmap *bm);
  17. int toi_alloc_bitmap(struct memory_bitmap **bm);
  18. void toi_free_bitmap(struct memory_bitmap **bm);
  19. void memory_bm_clear(struct memory_bitmap *bm);
  20. void memory_bm_clear_bit(struct memory_bitmap *bm, int index, unsigned long pfn);
  21. void memory_bm_set_bit(struct memory_bitmap *bm, int index, unsigned long pfn);
  22. int memory_bm_test_bit(struct memory_bitmap *bm, int index, unsigned long pfn);
  23. int memory_bm_test_bit_index(struct memory_bitmap *bm, int index, unsigned long pfn);
  24. void memory_bm_clear_bit_index(struct memory_bitmap *bm, int index, unsigned long pfn);
  25. struct toi_module_ops;
  26. int memory_bm_write(struct memory_bitmap *bm, int (*rw_chunk)
  27. (int rw, struct toi_module_ops *owner, char *buffer, int buffer_size));
  28. int memory_bm_read(struct memory_bitmap *bm, int (*rw_chunk)
  29. (int rw, struct toi_module_ops *owner, char *buffer, int buffer_size));
  30. int memory_bm_space_needed(struct memory_bitmap *bm);
  31. extern struct memory_bitmap *pageset1_map;
  32. extern struct memory_bitmap *pageset1_copy_map;
  33. extern struct memory_bitmap *pageset2_map;
  34. extern struct memory_bitmap *page_resave_map;
  35. extern struct memory_bitmap *io_map;
  36. extern struct memory_bitmap *nosave_map;
  37. extern struct memory_bitmap *free_map;
  38. extern struct memory_bitmap *compare_map;
  39. #define PagePageset1(page) \
  40. (pageset1_map && memory_bm_test_bit(pageset1_map, smp_processor_id(), page_to_pfn(page)))
  41. #define SetPagePageset1(page) \
  42. (memory_bm_set_bit(pageset1_map, smp_processor_id(), page_to_pfn(page)))
  43. #define ClearPagePageset1(page) \
  44. (memory_bm_clear_bit(pageset1_map, smp_processor_id(), page_to_pfn(page)))
  45. #define PagePageset1Copy(page) \
  46. (memory_bm_test_bit(pageset1_copy_map, smp_processor_id(), page_to_pfn(page)))
  47. #define SetPagePageset1Copy(page) \
  48. (memory_bm_set_bit(pageset1_copy_map, smp_processor_id(), page_to_pfn(page)))
  49. #define ClearPagePageset1Copy(page) \
  50. (memory_bm_clear_bit(pageset1_copy_map, smp_processor_id(), page_to_pfn(page)))
  51. #define PagePageset2(page) \
  52. (memory_bm_test_bit(pageset2_map, smp_processor_id(), page_to_pfn(page)))
  53. #define SetPagePageset2(page) \
  54. (memory_bm_set_bit(pageset2_map, smp_processor_id(), page_to_pfn(page)))
  55. #define ClearPagePageset2(page) \
  56. (memory_bm_clear_bit(pageset2_map, smp_processor_id(), page_to_pfn(page)))
  57. #define PageWasRW(page) \
  58. (memory_bm_test_bit(pageset2_map, smp_processor_id(), page_to_pfn(page)))
  59. #define SetPageWasRW(page) \
  60. (memory_bm_set_bit(pageset2_map, smp_processor_id(), page_to_pfn(page)))
  61. #define ClearPageWasRW(page) \
  62. (memory_bm_clear_bit(pageset2_map, smp_processor_id(), page_to_pfn(page)))
  63. #define PageResave(page) (page_resave_map ? \
  64. memory_bm_test_bit(page_resave_map, smp_processor_id(), page_to_pfn(page)) : 0)
  65. #define SetPageResave(page) \
  66. (memory_bm_set_bit(page_resave_map, smp_processor_id(), page_to_pfn(page)))
  67. #define ClearPageResave(page) \
  68. (memory_bm_clear_bit(page_resave_map, smp_processor_id(), page_to_pfn(page)))
  69. #define PageNosave(page) (nosave_map ? \
  70. memory_bm_test_bit(nosave_map, smp_processor_id(), page_to_pfn(page)) : 0)
  71. #define SetPageNosave(page) \
  72. (mem_bm_set_bit_check(nosave_map, smp_processor_id(), page_to_pfn(page)))
  73. #define ClearPageNosave(page) \
  74. (memory_bm_clear_bit(nosave_map, smp_processor_id(), page_to_pfn(page)))
  75. #define PageNosaveFree(page) (free_map ? \
  76. memory_bm_test_bit(free_map, smp_processor_id(), page_to_pfn(page)) : 0)
  77. #define SetPageNosaveFree(page) \
  78. (memory_bm_set_bit(free_map, smp_processor_id(), page_to_pfn(page)))
  79. #define ClearPageNosaveFree(page) \
  80. (memory_bm_clear_bit(free_map, smp_processor_id(), page_to_pfn(page)))
  81. #define PageCompareChanged(page) (compare_map ? \
  82. memory_bm_test_bit(compare_map, smp_processor_id(), page_to_pfn(page)) : 0)
  83. #define SetPageCompareChanged(page) \
  84. (memory_bm_set_bit(compare_map, smp_processor_id(), page_to_pfn(page)))
  85. #define ClearPageCompareChanged(page) \
  86. (memory_bm_clear_bit(compare_map, smp_processor_id(), page_to_pfn(page)))
  87. extern void save_pageflags(struct memory_bitmap *pagemap);
  88. extern int load_pageflags(struct memory_bitmap *pagemap);
  89. extern int toi_pageflags_space_needed(void);
  90. #endif