LCOV - code coverage report
Current view: top level - include/linux - page_idle.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 4 6 66.7 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _LINUX_MM_PAGE_IDLE_H
       3             : #define _LINUX_MM_PAGE_IDLE_H
       4             : 
       5             : #include <linux/bitops.h>
       6             : #include <linux/page-flags.h>
       7             : #include <linux/page_ext.h>
       8             : 
       9             : #ifdef CONFIG_IDLE_PAGE_TRACKING
      10             : 
      11             : #ifdef CONFIG_64BIT
      12             : static inline bool page_is_young(struct page *page)
      13             : {
      14             :         return PageYoung(page);
      15             : }
      16             : 
      17             : static inline void set_page_young(struct page *page)
      18             : {
      19             :         SetPageYoung(page);
      20             : }
      21             : 
      22             : static inline bool test_and_clear_page_young(struct page *page)
      23             : {
      24             :         return TestClearPageYoung(page);
      25             : }
      26             : 
      27             : static inline bool page_is_idle(struct page *page)
      28             : {
      29             :         return PageIdle(page);
      30             : }
      31             : 
      32             : static inline void set_page_idle(struct page *page)
      33             : {
      34             :         SetPageIdle(page);
      35             : }
      36             : 
      37             : static inline void clear_page_idle(struct page *page)
      38             : {
      39             :         ClearPageIdle(page);
      40             : }
      41             : #else /* !CONFIG_64BIT */
      42             : /*
      43             :  * If there is not enough space to store Idle and Young bits in page flags, use
      44             :  * page ext flags instead.
      45             :  */
      46             : extern struct page_ext_operations page_idle_ops;
      47             : 
      48             : static inline bool page_is_young(struct page *page)
      49             : {
      50             :         struct page_ext *page_ext = lookup_page_ext(page);
      51             : 
      52             :         if (unlikely(!page_ext))
      53             :                 return false;
      54             : 
      55             :         return test_bit(PAGE_EXT_YOUNG, &page_ext->flags);
      56             : }
      57             : 
      58             : static inline void set_page_young(struct page *page)
      59             : {
      60             :         struct page_ext *page_ext = lookup_page_ext(page);
      61             : 
      62             :         if (unlikely(!page_ext))
      63             :                 return;
      64             : 
      65             :         set_bit(PAGE_EXT_YOUNG, &page_ext->flags);
      66             : }
      67             : 
      68             : static inline bool test_and_clear_page_young(struct page *page)
      69             : {
      70             :         struct page_ext *page_ext = lookup_page_ext(page);
      71             : 
      72             :         if (unlikely(!page_ext))
      73             :                 return false;
      74             : 
      75             :         return test_and_clear_bit(PAGE_EXT_YOUNG, &page_ext->flags);
      76             : }
      77             : 
      78             : static inline bool page_is_idle(struct page *page)
      79             : {
      80             :         struct page_ext *page_ext = lookup_page_ext(page);
      81             : 
      82             :         if (unlikely(!page_ext))
      83             :                 return false;
      84             : 
      85             :         return test_bit(PAGE_EXT_IDLE, &page_ext->flags);
      86             : }
      87             : 
      88             : static inline void set_page_idle(struct page *page)
      89             : {
      90             :         struct page_ext *page_ext = lookup_page_ext(page);
      91             : 
      92             :         if (unlikely(!page_ext))
      93             :                 return;
      94             : 
      95             :         set_bit(PAGE_EXT_IDLE, &page_ext->flags);
      96             : }
      97             : 
      98             : static inline void clear_page_idle(struct page *page)
      99             : {
     100             :         struct page_ext *page_ext = lookup_page_ext(page);
     101             : 
     102             :         if (unlikely(!page_ext))
     103             :                 return;
     104             : 
     105             :         clear_bit(PAGE_EXT_IDLE, &page_ext->flags);
     106             : }
     107             : #endif /* CONFIG_64BIT */
     108             : 
     109             : #else /* !CONFIG_IDLE_PAGE_TRACKING */
     110             : 
     111           6 : static inline bool page_is_young(struct page *page)
     112             : {
     113           6 :         return false;
     114             : }
     115             : 
     116             : static inline void set_page_young(struct page *page)
     117             : {
     118             : }
     119             : 
     120           0 : static inline bool test_and_clear_page_young(struct page *page)
     121             : {
     122           0 :         return false;
     123             : }
     124             : 
     125      779774 : static inline bool page_is_idle(struct page *page)
     126             : {
     127      779774 :         return false;
     128             : }
     129             : 
     130             : static inline void set_page_idle(struct page *page)
     131             : {
     132             : }
     133             : 
     134             : static inline void clear_page_idle(struct page *page)
     135             : {
     136             : }
     137             : 
     138             : #endif /* CONFIG_IDLE_PAGE_TRACKING */
     139             : 
     140             : #endif /* _LINUX_MM_PAGE_IDLE_H */

Generated by: LCOV version 1.14