/kern_oII/include/linux/pagevec.h

http://omnia2droid.googlecode.com/ · C++ Header · 108 lines · 78 code · 20 blank · 10 comment · 4 complexity · 182b0dff90121eb375b5102ec2a9ad20 MD5 · raw file

  1. /*
  2. * include/linux/pagevec.h
  3. *
  4. * In many places it is efficient to batch an operation up against multiple
  5. * pages. A pagevec is a multipage container which is used for that.
  6. */
  7. #ifndef _LINUX_PAGEVEC_H
  8. #define _LINUX_PAGEVEC_H
  9. /* 14 pointers + two long's align the pagevec structure to a power of two */
  10. #define PAGEVEC_SIZE 14
  11. struct page;
  12. struct address_space;
  13. struct pagevec {
  14. unsigned long nr;
  15. unsigned long cold;
  16. struct page *pages[PAGEVEC_SIZE];
  17. };
  18. void __pagevec_release(struct pagevec *pvec);
  19. void __pagevec_free(struct pagevec *pvec);
  20. void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru);
  21. void pagevec_strip(struct pagevec *pvec);
  22. unsigned pagevec_lookup(struct pagevec *pvec, struct address_space *mapping,
  23. pgoff_t start, unsigned nr_pages);
  24. unsigned pagevec_lookup_tag(struct pagevec *pvec,
  25. struct address_space *mapping, pgoff_t *index, int tag,
  26. unsigned nr_pages);
  27. static inline void pagevec_init(struct pagevec *pvec, int cold)
  28. {
  29. pvec->nr = 0;
  30. pvec->cold = cold;
  31. }
  32. static inline void pagevec_reinit(struct pagevec *pvec)
  33. {
  34. pvec->nr = 0;
  35. }
  36. static inline unsigned pagevec_count(struct pagevec *pvec)
  37. {
  38. return pvec->nr;
  39. }
  40. static inline unsigned pagevec_space(struct pagevec *pvec)
  41. {
  42. return PAGEVEC_SIZE - pvec->nr;
  43. }
  44. /*
  45. * Add a page to a pagevec. Returns the number of slots still available.
  46. */
  47. static inline unsigned pagevec_add(struct pagevec *pvec, struct page *page)
  48. {
  49. pvec->pages[pvec->nr++] = page;
  50. return pagevec_space(pvec);
  51. }
  52. static inline void pagevec_release(struct pagevec *pvec)
  53. {
  54. if (pagevec_count(pvec))
  55. __pagevec_release(pvec);
  56. }
  57. static inline void pagevec_free(struct pagevec *pvec)
  58. {
  59. if (pagevec_count(pvec))
  60. __pagevec_free(pvec);
  61. }
  62. static inline void __pagevec_lru_add_anon(struct pagevec *pvec)
  63. {
  64. ____pagevec_lru_add(pvec, LRU_INACTIVE_ANON);
  65. }
  66. static inline void __pagevec_lru_add_active_anon(struct pagevec *pvec)
  67. {
  68. ____pagevec_lru_add(pvec, LRU_ACTIVE_ANON);
  69. }
  70. static inline void __pagevec_lru_add_file(struct pagevec *pvec)
  71. {
  72. ____pagevec_lru_add(pvec, LRU_INACTIVE_FILE);
  73. }
  74. static inline void __pagevec_lru_add_active_file(struct pagevec *pvec)
  75. {
  76. ____pagevec_lru_add(pvec, LRU_ACTIVE_FILE);
  77. }
  78. static inline void pagevec_lru_add_file(struct pagevec *pvec)
  79. {
  80. if (pagevec_count(pvec))
  81. __pagevec_lru_add_file(pvec);
  82. }
  83. static inline void pagevec_lru_add_anon(struct pagevec *pvec)
  84. {
  85. if (pagevec_count(pvec))
  86. __pagevec_lru_add_anon(pvec);
  87. }
  88. #endif /* _LINUX_PAGEVEC_H */