|
11 | 11 | from drgn.helpers.linux import for_each_page
|
12 | 12 | from drgn.helpers.linux.cpumask import for_each_online_cpu
|
13 | 13 | from drgn.helpers.linux.percpu import per_cpu_ptr
|
14 |
| -from drgn import container_of, FaultError, Object |
| 14 | +from drgn import container_of, FaultError, Object, cast |
15 | 15 |
|
16 | 16 |
|
17 | 17 | DESC = """
|
@@ -69,15 +69,15 @@ def oo_objects(s):
|
69 | 69 |
|
70 | 70 |
|
71 | 71 | def count_partial(n, fn):
|
72 |
| - nr_pages = 0 |
73 |
| - for page in list_for_each_entry('struct page', n.partial.address_of_(), |
74 |
| - 'lru'): |
75 |
| - nr_pages += fn(page) |
76 |
| - return nr_pages |
| 72 | + nr_objs = 0 |
| 73 | + for slab in list_for_each_entry('struct slab', n.partial.address_of_(), |
| 74 | + 'slab_list'): |
| 75 | + nr_objs += fn(slab) |
| 76 | + return nr_objs |
77 | 77 |
|
78 | 78 |
|
79 |
| -def count_free(page): |
80 |
| - return page.objects - page.inuse |
| 79 | +def count_free(slab): |
| 80 | + return slab.objects - slab.inuse |
81 | 81 |
|
82 | 82 |
|
83 | 83 | def slub_get_slabinfo(s, cfg):
|
@@ -145,14 +145,14 @@ def detect_kernel_config():
|
145 | 145 | return cfg
|
146 | 146 |
|
147 | 147 |
|
148 |
| -def for_each_slab_page(prog): |
| 148 | +def for_each_slab(prog): |
149 | 149 | PGSlab = 1 << prog.constant('PG_slab')
|
150 | 150 | PGHead = 1 << prog.constant('PG_head')
|
151 | 151 |
|
152 | 152 | for page in for_each_page(prog):
|
153 | 153 | try:
|
154 | 154 | if page.flags.value_() & PGSlab:
|
155 |
| - yield page |
| 155 | + yield cast('struct slab *', page) |
156 | 156 | except FaultError:
|
157 | 157 | pass
|
158 | 158 |
|
@@ -190,13 +190,13 @@ def main():
|
190 | 190 | 'list'):
|
191 | 191 | obj_cgroups.add(ptr.value_())
|
192 | 192 |
|
193 |
| - # look over all slab pages, belonging to non-root memcgs |
194 |
| - # and look for objects belonging to the given memory cgroup |
195 |
| - for page in for_each_slab_page(prog): |
196 |
| - objcg_vec_raw = page.memcg_data.value_() |
| 193 | + # look over all slab folios and look for objects belonging |
| 194 | + # to the given memory cgroup |
| 195 | + for slab in for_each_slab(prog): |
| 196 | + objcg_vec_raw = slab.memcg_data.value_() |
197 | 197 | if objcg_vec_raw == 0:
|
198 | 198 | continue
|
199 |
| - cache = page.slab_cache |
| 199 | + cache = slab.slab_cache |
200 | 200 | if not cache:
|
201 | 201 | continue
|
202 | 202 | addr = cache.value_()
|
|
0 commit comments