hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/include/linux/vmstat.h
....@@ -8,6 +8,7 @@
88 #include <linux/vm_event_item.h>
99 #include <linux/atomic.h>
1010 #include <linux/static_key.h>
11
+#include <linux/mmdebug.h>
1112
1213 extern int sysctl_stat_interval;
1314
....@@ -16,8 +17,8 @@
1617 #define DISABLE_NUMA_STAT 0
1718 extern int sysctl_vm_numa_stat;
1819 DECLARE_STATIC_KEY_TRUE(vm_numa_stat_key);
19
-extern int sysctl_vm_numa_stat_handler(struct ctl_table *table,
20
- int write, void __user *buffer, size_t *length, loff_t *ppos);
20
+int sysctl_vm_numa_stat_handler(struct ctl_table *table, int write,
21
+ void *buffer, size_t *length, loff_t *ppos);
2122 #endif
2223
2324 struct reclaim_stat {
....@@ -26,9 +27,17 @@
2627 unsigned nr_congested;
2728 unsigned nr_writeback;
2829 unsigned nr_immediate;
29
- unsigned nr_activate;
30
+ unsigned nr_pageout;
31
+ unsigned nr_activate[ANON_AND_FILE];
3032 unsigned nr_ref_keep;
3133 unsigned nr_unmap_fail;
34
+ unsigned nr_lazyfree_fail;
35
+};
36
+
37
+enum writeback_stat_item {
38
+ NR_DIRTY_THRESHOLD,
39
+ NR_DIRTY_BG_THRESHOLD,
40
+ NR_VM_WRITEBACK_STAT_ITEMS,
3241 };
3342
3443 #ifdef CONFIG_VM_EVENT_COUNTERS
....@@ -184,7 +193,8 @@
184193 return x;
185194 }
186195
187
-static inline unsigned long global_node_page_state(enum node_stat_item item)
196
+static inline
197
+unsigned long global_node_page_state_pages(enum node_stat_item item)
188198 {
189199 long x = atomic_long_read(&vm_node_stat[item]);
190200 #ifdef CONFIG_SMP
....@@ -192,6 +202,13 @@
192202 x = 0;
193203 #endif
194204 return x;
205
+}
206
+
207
+static inline unsigned long global_node_page_state(enum node_stat_item item)
208
+{
209
+ VM_WARN_ON_ONCE(vmstat_item_in_bytes(item));
210
+
211
+ return global_node_page_state_pages(item);
195212 }
196213
197214 static inline unsigned long zone_page_state(struct zone *zone,
....@@ -234,15 +251,13 @@
234251 extern unsigned long sum_zone_numa_state(int node, enum numa_stat_item item);
235252 extern unsigned long node_page_state(struct pglist_data *pgdat,
236253 enum node_stat_item item);
254
+extern unsigned long node_page_state_pages(struct pglist_data *pgdat,
255
+ enum node_stat_item item);
237256 #else
238257 #define sum_zone_node_page_state(node, item) global_zone_page_state(item)
239258 #define node_page_state(node, item) global_node_page_state(item)
259
+#define node_page_state_pages(node, item) global_node_page_state_pages(item)
240260 #endif /* CONFIG_NUMA */
241
-
242
-#define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d)
243
-#define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d))
244
-#define add_node_page_state(__p, __i, __d) mod_node_page_state(__p, __i, __d)
245
-#define sub_node_page_state(__p, __i, __d) mod_node_page_state(__p, __i, -(__d))
246261
247262 #ifdef CONFIG_SMP
248263 void __mod_zone_page_state(struct zone *, enum zone_stat_item item, long);
....@@ -273,8 +288,8 @@
273288 void refresh_zone_stat_thresholds(void);
274289
275290 struct ctl_table;
276
-int vmstat_refresh(struct ctl_table *, int write,
277
- void __user *buffer, size_t *lenp, loff_t *ppos);
291
+int vmstat_refresh(struct ctl_table *, int write, void *buffer, size_t *lenp,
292
+ loff_t *ppos);
278293
279294 void drain_zonestat(struct zone *zone, struct per_cpu_pageset *);
280295
....@@ -297,6 +312,11 @@
297312 static inline void __mod_node_page_state(struct pglist_data *pgdat,
298313 enum node_stat_item item, int delta)
299314 {
315
+ if (vmstat_item_in_bytes(item)) {
316
+ VM_WARN_ON_ONCE(delta & (PAGE_SIZE - 1));
317
+ delta >>= PAGE_SHIFT;
318
+ }
319
+
300320 node_page_state_add(delta, pgdat, item);
301321 }
302322
....@@ -386,4 +406,48 @@
386406
387407 extern const char * const vmstat_text[];
388408
409
+static inline const char *zone_stat_name(enum zone_stat_item item)
410
+{
411
+ return vmstat_text[item];
412
+}
413
+
414
+#ifdef CONFIG_NUMA
415
+static inline const char *numa_stat_name(enum numa_stat_item item)
416
+{
417
+ return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
418
+ item];
419
+}
420
+#endif /* CONFIG_NUMA */
421
+
422
+static inline const char *node_stat_name(enum node_stat_item item)
423
+{
424
+ return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
425
+ NR_VM_NUMA_STAT_ITEMS +
426
+ item];
427
+}
428
+
429
+static inline const char *lru_list_name(enum lru_list lru)
430
+{
431
+ return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
432
+}
433
+
434
+static inline const char *writeback_stat_name(enum writeback_stat_item item)
435
+{
436
+ return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
437
+ NR_VM_NUMA_STAT_ITEMS +
438
+ NR_VM_NODE_STAT_ITEMS +
439
+ item];
440
+}
441
+
442
+#if defined(CONFIG_VM_EVENT_COUNTERS) || defined(CONFIG_MEMCG)
443
+static inline const char *vm_event_name(enum vm_event_item item)
444
+{
445
+ return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
446
+ NR_VM_NUMA_STAT_ITEMS +
447
+ NR_VM_NODE_STAT_ITEMS +
448
+ NR_VM_WRITEBACK_STAT_ITEMS +
449
+ item];
450
+}
451
+#endif /* CONFIG_VM_EVENT_COUNTERS || CONFIG_MEMCG */
452
+
389453 #endif /* _LINUX_VMSTAT_H */