mm/damon/tests/core-kunit.h
Source file repositories/reference/linux-study-clean/mm/damon/tests/core-kunit.h
File Facts
- System
- Linux kernel
- Corpus path
mm/damon/tests/core-kunit.h- Extension
.h- Size
- 41524 bytes
- Lines
- 1504
- Domain
- Core OS
- Bucket
- Memory Management
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
kunit/test.h
Detected Declarations
function damon_test_regionsfunction nr_damon_targetsfunction damon_test_targetfunction kdamond_reset_aggregatedfunction damon_for_each_regionfunction damon_test_split_atfunction damon_test_merge_twofunction damon_for_each_regionfunction damon_test_merge_regions_offunction damon_test_split_regions_offunction damon_test_ops_registrationfunction damon_test_set_regions_forfunction damon_test_set_regionsfunction damon_test_nr_accesses_to_accesses_bpfunction damon_test_update_monitoring_resultfunction damon_test_set_attrsfunction damon_test_moving_sumfunction damos_test_new_filterfunction damos_test_commit_quota_goal_forfunction damos_test_commit_quota_goalfunction damos_test_commit_quota_goal_forfunction damos_test_commit_quota_goals_forfunction damos_test_commit_quota_goalsfunction damos_test_commit_quotafunction damos_test_help_dests_setupfunction damos_test_help_dests_freefunction damos_test_commit_dests_forfunction damos_test_commit_destsfunction damos_test_commit_filter_forfunction damos_test_commit_filterfunction damos_test_commit_filter_forfunction damos_test_help_initailize_schemefunction damos_test_commit_forfunction damos_test_commit_pageoutfunction damos_test_commit_migrate_hotfunction damon_test_commit_target_regions_forfunction damon_test_commit_target_regionsfunction damon_test_commit_ctxfunction damos_test_filter_outfunction damon_test_feed_loop_next_inputfunction damon_test_set_filters_default_rejectfunction damon_test_apply_min_nr_regions_forfunction damon_test_apply_min_nr_regionsfunction damon_test_is_last_region
Annotated Snippet
if (!t) {
damon_destroy_ctx(ctx);
kunit_skip(test, "target alloc fail");
}
damon_add_target(ctx, t);
}
it = 0;
damon_for_each_target(t, ctx) {
for (ir = 0; ir < 3; ir++) {
r = damon_new_region(saddr[it][ir], eaddr[it][ir]);
if (!r) {
damon_destroy_ctx(ctx);
kunit_skip(test, "region alloc fail");
}
r->nr_accesses = accesses[it][ir];
r->nr_accesses_bp = accesses[it][ir] * 10000;
damon_add_region(r, t);
}
it++;
}
kdamond_reset_aggregated(ctx);
it = 0;
damon_for_each_target(t, ctx) {
ir = 0;
/* '->nr_accesses' should be zeroed */
damon_for_each_region(r, t) {
KUNIT_EXPECT_EQ(test, 0u, r->nr_accesses);
ir++;
}
/* regions should be preserved */
KUNIT_EXPECT_EQ(test, 3, ir);
it++;
}
/* targets also should be preserved */
KUNIT_EXPECT_EQ(test, 3, it);
damon_destroy_ctx(ctx);
}
static void damon_test_split_at(struct kunit *test)
{
struct damon_target *t;
struct damon_region *r, *r_new;
t = damon_new_target();
if (!t)
kunit_skip(test, "target alloc fail");
r = damon_new_region(0, 100);
if (!r) {
damon_free_target(t);
kunit_skip(test, "region alloc fail");
}
r->nr_accesses_bp = 420000;
r->nr_accesses = 42;
r->last_nr_accesses = 15;
r->age = 10;
damon_add_region(r, t);
damon_split_region_at(t, r, 25);
KUNIT_EXPECT_EQ(test, r->ar.start, 0ul);
KUNIT_EXPECT_EQ(test, r->ar.end, 25ul);
r_new = damon_next_region(r);
KUNIT_EXPECT_EQ(test, r_new->ar.start, 25ul);
KUNIT_EXPECT_EQ(test, r_new->ar.end, 100ul);
KUNIT_EXPECT_EQ(test, r->nr_accesses_bp, r_new->nr_accesses_bp);
KUNIT_EXPECT_EQ(test, r->nr_accesses, r_new->nr_accesses);
KUNIT_EXPECT_EQ(test, r->last_nr_accesses, r_new->last_nr_accesses);
KUNIT_EXPECT_EQ(test, r->age, r_new->age);
damon_free_target(t);
}
static void damon_test_merge_two(struct kunit *test)
{
struct damon_target *t;
struct damon_region *r, *r2, *r3;
int i;
t = damon_new_target();
if (!t)
kunit_skip(test, "target alloc fail");
r = damon_new_region(0, 100);
if (!r) {
damon_free_target(t);
kunit_skip(test, "region alloc fail");
}
r->nr_accesses = 10;
r->nr_accesses_bp = 100000;
Annotation
- Immediate include surface: `kunit/test.h`.
- Detected declarations: `function damon_test_regions`, `function nr_damon_targets`, `function damon_test_target`, `function kdamond_reset_aggregated`, `function damon_for_each_region`, `function damon_test_split_at`, `function damon_test_merge_two`, `function damon_for_each_region`, `function damon_test_merge_regions_of`, `function damon_test_split_regions_of`.
- Atlas domain: Core OS / Memory Management.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.