0001
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);
0012 int (*store)(unsigned, pgoff_t, struct page *);
0013 int (*load)(unsigned, pgoff_t, struct page *);
0014 void (*invalidate_page)(unsigned, pgoff_t);
0015 void (*invalidate_area)(unsigned);
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
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