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
....@@ -54,9 +63,7 @@
5463 */
5564 static inline void __count_vm_event(enum vm_event_item item)
5665 {
57
- preempt_disable_rt();
5866 raw_cpu_inc(vm_event_states.event[item]);
59
- preempt_enable_rt();
6067 }
6168
6269 static inline void count_vm_event(enum vm_event_item item)
....@@ -66,9 +73,7 @@
6673
6774 static inline void __count_vm_events(enum vm_event_item item, long delta)
6875 {
69
- preempt_disable_rt();
7076 raw_cpu_add(vm_event_states.event[item], delta);
71
- preempt_enable_rt();
7277 }
7378
7479 static inline void count_vm_events(enum vm_event_item item, long delta)
....@@ -188,7 +193,8 @@
188193 return x;
189194 }
190195
191
-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)
192198 {
193199 long x = atomic_long_read(&vm_node_stat[item]);
194200 #ifdef CONFIG_SMP
....@@ -196,6 +202,13 @@
196202 x = 0;
197203 #endif
198204 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);
199212 }
200213
201214 static inline unsigned long zone_page_state(struct zone *zone,
....@@ -238,15 +251,13 @@
238251 extern unsigned long sum_zone_numa_state(int node, enum numa_stat_item item);
239252 extern unsigned long node_page_state(struct pglist_data *pgdat,
240253 enum node_stat_item item);
254
+extern unsigned long node_page_state_pages(struct pglist_data *pgdat,
255
+ enum node_stat_item item);
241256 #else
242257 #define sum_zone_node_page_state(node, item) global_zone_page_state(item)
243258 #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)
244260 #endif /* CONFIG_NUMA */
245
-
246
-#define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d)
247
-#define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d))
248
-#define add_node_page_state(__p, __i, __d) mod_node_page_state(__p, __i, __d)
249
-#define sub_node_page_state(__p, __i, __d) mod_node_page_state(__p, __i, -(__d))
250261
251262 #ifdef CONFIG_SMP
252263 void __mod_zone_page_state(struct zone *, enum zone_stat_item item, long);
....@@ -277,8 +288,8 @@
277288 void refresh_zone_stat_thresholds(void);
278289
279290 struct ctl_table;
280
-int vmstat_refresh(struct ctl_table *, int write,
281
- 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);
282293
283294 void drain_zonestat(struct zone *zone, struct per_cpu_pageset *);
284295
....@@ -301,6 +312,11 @@
301312 static inline void __mod_node_page_state(struct pglist_data *pgdat,
302313 enum node_stat_item item, int delta)
303314 {
315
+ if (vmstat_item_in_bytes(item)) {
316
+ VM_WARN_ON_ONCE(delta & (PAGE_SIZE - 1));
317
+ delta >>= PAGE_SHIFT;
318
+ }
319
+
304320 node_page_state_add(delta, pgdat, item);
305321 }
306322
....@@ -390,4 +406,48 @@
390406
391407 extern const char * const vmstat_text[];
392408
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
+
393453 #endif /* _LINUX_VMSTAT_H */