• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2024 Google LLC
2#
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import os
7import subprocess
8import sys
9import time
10
11ADB = sys.argv[1]
12cpu = int(sys.argv[2])
13value = int(sys.argv[3])
14
15log = subprocess.check_output([ADB, 'root']).decode('utf-8')
16# check for message like 'adbd cannot run as root in production builds'
17print(log)
18if 'cannot' in log:
19  raise Exception('adb root failed')
20
21# If we try to echo 1 to an already online cpu, adb returns exit code 1.
22# So, check the value before trying to write it.
23prior_status = subprocess.check_output([ADB, 'shell', 'cat '
24    '/sys/devices/system/cpu/cpu%d/online' % cpu]).decode('utf-8').strip()
25if prior_status == str(value):
26  print('CPU %d online already %d' % (cpu, value))
27  sys.exit()
28
29subprocess.check_call([ADB, 'shell', 'echo %s > '
30    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])
31actual_status = subprocess.check_output([ADB, 'shell', 'cat '
32    '/sys/devices/system/cpu/cpu%d/online' % cpu]).decode('utf-8').strip()
33if actual_status != str(value):
34  raise Exception('(actual, expected) (%s, %d)' % (actual_status, value))
35