Commit 675774ad authored by SeongJae Park's avatar SeongJae Park Committed by Andrew Morton
Browse files

selftests/damon/sysfs.py: merge DAMON status dumping into commitment assertion

For each test case, sysfs.py makes changes to DAMON, dumps DAMON internal
status and asserts the expectation is met.  The dumping part should be the
same for all cases, so it is duplicated for each test case.  Which means
it is easy to make mistakes.  Actually a few of those duplicates are not
turning DAMON off in case of the dumping failure.  It makes following
selftests that need to turn DAMON on fails with -EBUSY.  Merge the status
dumping into commitment assertion with proper dumping failure handling, to
deduplicate and avoid the unnecessary following tests failures.

Link: https://lkml.kernel.org/r/20251112154114.66053-8-sj@kernel.org


Signed-off-by: default avatarSeongJae Park <sj@kernel.org>
Cc: Bill Wendling <morbo@google.com>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Cc: David Gow <davidgow@google.com>
Cc: David Hildenbrand <david@kernel.org>
Cc: Hugh Dickins <hughd@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Justin Stitt <justinstitt@google.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Miguel Ojeda <ojeda@kernel.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 10e8c7ba
Loading
Loading
Loading
Loading
+13 −30
Original line number Diff line number Diff line
@@ -185,7 +185,15 @@ def assert_ctx_committed(ctx, dump):
    assert_monitoring_targets_committed(ctx.targets, dump['adaptive_targets'])
    assert_schemes_committed(ctx.schemes, dump['schemes'])

def assert_ctxs_committed(ctxs, dump):
def assert_ctxs_committed(kdamonds):
    status, err = dump_damon_status_dict(kdamonds.kdamonds[0].pid)
    if err is not None:
        print(err)
        kdamonds.stop()
        exit(1)

    ctxs = kdamonds.kdamonds[0].contexts
    dump = status['contexts']
    assert_true(len(ctxs) == len(dump), 'ctxs length', dump)
    for idx, ctx in enumerate(ctxs):
        assert_ctx_committed(ctx, dump[idx])
@@ -202,13 +210,7 @@ def main():
        print('kdamond start failed: %s' % err)
        exit(1)

    status, err = dump_damon_status_dict(kdamonds.kdamonds[0].pid)
    if err is not None:
        print(err)
        kdamonds.stop()
        exit(1)

    assert_ctxs_committed(kdamonds.kdamonds[0].contexts, status['contexts'])
    assert_ctxs_committed(kdamonds)

    context = _damon_sysfs.DamonCtx(
            monitoring_attrs=_damon_sysfs.DamonAttrs(
@@ -256,12 +258,7 @@ def main():
    kdamonds.kdamonds[0].contexts = [context]
    kdamonds.kdamonds[0].commit()

    status, err = dump_damon_status_dict(kdamonds.kdamonds[0].pid)
    if err is not None:
        print(err)
        exit(1)

    assert_ctxs_committed(kdamonds.kdamonds[0].contexts, status['contexts'])
    assert_ctxs_committed(kdamonds)

    # test online commitment of minimum context.
    context = _damon_sysfs.DamonCtx()
@@ -270,12 +267,7 @@ def main():
    kdamonds.kdamonds[0].contexts = [context]
    kdamonds.kdamonds[0].commit()

    status, err = dump_damon_status_dict(kdamonds.kdamonds[0].pid)
    if err is not None:
        print(err)
        exit(1)

    assert_ctxs_committed(kdamonds.kdamonds[0].contexts, status['contexts'])
    assert_ctxs_committed(kdamonds)

    kdamonds.stop()

@@ -303,17 +295,8 @@ def main():
        exit(1)
    kdamonds.kdamonds[0].contexts[0].targets[1].obsolete = True
    kdamonds.kdamonds[0].commit()

    status, err = dump_damon_status_dict(kdamonds.kdamonds[0].pid)
    if err is not None:
        print(err)
        kdamonds.stop()
        exit(1)

    del kdamonds.kdamonds[0].contexts[0].targets[1]

    assert_ctxs_committed(kdamonds.kdamonds[0].contexts, status['contexts'])

    assert_ctxs_committed(kdamonds)
    kdamonds.stop()

if __name__ == '__main__':