1f08c3bdfSopenharmony_ci#!/usr/bin/env python3
2f08c3bdfSopenharmony_ci''' This Python script validates sched domain information in dmesg
3f08c3bdfSopenharmony_ci    with information in sysfs topology
4f08c3bdfSopenharmony_ci'''
5f08c3bdfSopenharmony_ci
6f08c3bdfSopenharmony_ciimport os
7f08c3bdfSopenharmony_ciimport sys
8f08c3bdfSopenharmony_cifrom pm_sched_mc import *
9f08c3bdfSopenharmony_cifrom optparse import OptionParser
10f08c3bdfSopenharmony_ci
11f08c3bdfSopenharmony_ci__author__ = "Poornima Nayak <mpnayak@linux.vnet.ibm.com>"
12f08c3bdfSopenharmony_ci
13f08c3bdfSopenharmony_ciclass Usage(Exception):
14f08c3bdfSopenharmony_ci    def __init__(self, msg):
15f08c3bdfSopenharmony_ci        self.msg = msg
16f08c3bdfSopenharmony_ci
17f08c3bdfSopenharmony_cidef main(argv=None):
18f08c3bdfSopenharmony_ci    if argv is None:
19f08c3bdfSopenharmony_ci        argv = sys.argv
20f08c3bdfSopenharmony_ci
21f08c3bdfSopenharmony_ci    usage = "-w"
22f08c3bdfSopenharmony_ci    parser = OptionParser(usage)
23f08c3bdfSopenharmony_ci    parser.add_option("-c", "--mc_level", dest="mc_level", default=-1,
24f08c3bdfSopenharmony_ci        help="Sched mc power saving value 0/1/2")
25f08c3bdfSopenharmony_ci    parser.add_option("-t", "--smt_level", dest="smt_level", default=-1,
26f08c3bdfSopenharmony_ci        help="Sched smt power saving value 0/1/2")
27f08c3bdfSopenharmony_ci    (options, args) = parser.parse_args()
28f08c3bdfSopenharmony_ci
29f08c3bdfSopenharmony_ci    try:
30f08c3bdfSopenharmony_ci        clear_dmesg()
31f08c3bdfSopenharmony_ci        count_num_cpu()
32f08c3bdfSopenharmony_ci        map_cpuid_pkgid()
33f08c3bdfSopenharmony_ci
34f08c3bdfSopenharmony_ci        if is_hyper_threaded() and int(options.smt_level) >= 0:
35f08c3bdfSopenharmony_ci            set_sched_smt_power(options.smt_level)
36f08c3bdfSopenharmony_ci
37f08c3bdfSopenharmony_ci        if int(options.mc_level) >= 0:
38f08c3bdfSopenharmony_ci            set_sched_mc_power(options.mc_level)
39f08c3bdfSopenharmony_ci        if int(options.smt_level) >= 0 or int(options.mc_level) >= 0:
40f08c3bdfSopenharmony_ci            status = verify_sched_domain_dmesg(options.mc_level, options.smt_level)
41f08c3bdfSopenharmony_ci            reset_schedmc()
42f08c3bdfSopenharmony_ci            if is_hyper_threaded():
43f08c3bdfSopenharmony_ci                reset_schedsmt()
44f08c3bdfSopenharmony_ci                return(status)
45f08c3bdfSopenharmony_ci        else:
46f08c3bdfSopenharmony_ci            print("INFO: Invalid arguments given")
47f08c3bdfSopenharmony_ci            return 1
48f08c3bdfSopenharmony_ci    except Exception as details:
49f08c3bdfSopenharmony_ci        print("INFO: sched domain test failed: ", details)
50f08c3bdfSopenharmony_ci        return(1)
51f08c3bdfSopenharmony_ci
52f08c3bdfSopenharmony_ci# Run test based on the command line arguments
53f08c3bdfSopenharmony_ciif __name__ == "__main__":
54f08c3bdfSopenharmony_ci    sys.exit(main())
55