Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _LINUX_FRONTSWAP_H
0003 #define _LINUX_FRONTSWAP_H
0004 
0005 #include <linux/swap.h>
0006 #include <linux/mm.h>
0007 #include <linux/bitops.h>
0008 #include <linux/jump_label.h>
0009 
0010 struct frontswap_ops {
0011     void (*init)(unsigned); /* this swap type was just swapon'ed */
0012     int (*store)(unsigned, pgoff_t, struct page *); /* store a page */
0013     int (*load)(unsigned, pgoff_t, struct page *); /* load a page */
0014     void (*invalidate_page)(unsigned, pgoff_t); /* page no longer needed */
0015     void (*invalidate_area)(unsigned); /* swap type just swapoff'ed */
0016 };
0017 
0018 int frontswap_register_ops(const struct frontswap_ops *ops);
0019 
0020 extern void frontswap_init(unsigned type, unsigned long *map);
0021 extern int __frontswap_store(struct page *page);
0022 extern int __frontswap_load(struct page *page);
0023 extern void __frontswap_invalidate_page(unsigned, pgoff_t);
0024 extern void __frontswap_invalidate_area(unsigned);
0025 
0026 #ifdef CONFIG_FRONTSWAP
0027 extern struct static_key_false frontswap_enabled_key;
0028 
0029 static inline bool frontswap_enabled(void)
0030 {
0031     return static_branch_unlikely(&frontswap_enabled_key);
0032 }
0033 
0034 static inline void frontswap_map_set(struct swap_info_struct *p,
0035                      unsigned long *map)
0036 {
0037     p->frontswap_map = map;
0038 }
0039 
0040 static inline unsigned long *frontswap_map_get(struct swap_info_struct *p)
0041 {
0042     return p->frontswap_map;
0043 }
0044 #else
0045 /* all inline routines become no-ops and all externs are ignored */
0046 
0047 static inline bool frontswap_enabled(void)
0048 {
0049     return false;
0050 }
0051 
0052 static inline void frontswap_map_set(struct swap_info_struct *p,
0053                      unsigned long *map)
0054 {
0055 }
0056 
0057 static inline unsigned long *frontswap_map_get(struct swap_info_struct *p)
0058 {
0059     return NULL;
0060 }
0061 #endif
0062 
0063 static inline int frontswap_store(struct page *page)
0064 {
0065     if (frontswap_enabled())
0066         return __frontswap_store(page);
0067 
0068     return -1;
0069 }
0070 
0071 static inline int frontswap_load(struct page *page)
0072 {
0073     if (frontswap_enabled())
0074         return __frontswap_load(page);
0075 
0076     return -1;
0077 }
0078 
0079 static inline void frontswap_invalidate_page(unsigned type, pgoff_t offset)
0080 {
0081     if (frontswap_enabled())
0082         __frontswap_invalidate_page(type, offset);
0083 }
0084 
0085 static inline void frontswap_invalidate_area(unsigned type)
0086 {
0087     if (frontswap_enabled())
0088         __frontswap_invalidate_area(type);
0089 }
0090 
0091 #endif /* _LINUX_FRONTSWAP_H */