Skip to content

Commit 2ceea8a

Browse files
authored
Merge pull request #240 from prashanthswami/use-cluster-cpus
Use cluster_cpus_list to detect clusters for ARM
2 parents 05332fd + eb966b3 commit 2ceea8a

File tree

7 files changed

+2222
-1
lines changed

7 files changed

+2222
-1
lines changed

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,11 @@ IF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_MOCK_TESTS)
747747
TARGET_LINK_LIBRARIES(pixel-2-xl-test PRIVATE cpuinfo_mock gtest)
748748
ADD_TEST(NAME pixel-2-xl-test COMMAND pixel-2-xl-test)
749749

750+
ADD_EXECUTABLE(pixel-8-test test/mock/pixel-8.cc)
751+
TARGET_INCLUDE_DIRECTORIES(pixel-8-test BEFORE PRIVATE test/mock)
752+
TARGET_LINK_LIBRARIES(pixel-8-test PRIVATE cpuinfo_mock gtest)
753+
ADD_TEST(NAME pixel-8-test COMMAND pixel-8-test)
754+
750755
ADD_EXECUTABLE(xiaomi-mi-5c-test test/mock/xiaomi-mi-5c.cc)
751756
TARGET_INCLUDE_DIRECTORIES(xiaomi-mi-5c-test BEFORE PRIVATE test/mock)
752757
TARGET_LINK_LIBRARIES(xiaomi-mi-5c-test PRIVATE cpuinfo_mock gtest)

scripts/android-arm64-mock.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ adb push build/android/arm64-v8a/pixel-c-test /data/local/tmp/pixel-c-test
3636
adb push build/android/arm64-v8a/pixel-xl-test /data/local/tmp/pixel-xl-test
3737
adb push build/android/arm64-v8a/pixel-test /data/local/tmp/pixel-test
3838
adb push build/android/arm64-v8a/pixel-2-xl-test /data/local/tmp/pixel-2-xl-test
39+
adb push build/android/arm64-v8a/pixel-8-test /data/local/tmp/pixel-8-test
3940
adb push build/android/arm64-v8a/xiaomi-mi-5c-test /data/local/tmp/xiaomi-mi-5c-test
4041
adb push build/android/arm64-v8a/xiaomi-redmi-note-3-test /data/local/tmp/xiaomi-redmi-note-3-test
4142
adb push build/android/arm64-v8a/xiaomi-redmi-note-4-test /data/local/tmp/xiaomi-redmi-note-4-test
@@ -75,6 +76,7 @@ adb shell "/data/local/tmp/pixel-c-test --gtest_color=yes"
7576
adb shell "/data/local/tmp/pixel-xl-test --gtest_color=yes"
7677
adb shell "/data/local/tmp/pixel-test --gtest_color=yes"
7778
adb shell "/data/local/tmp/pixel-2-xl-test --gtest_color=yes"
79+
adb shell "/data/local/tmp/pixel-8-test --gtest_color=yes"
7880
adb shell "/data/local/tmp/xiaomi-mi-5c-test --gtest_color=yes"
7981
adb shell "/data/local/tmp/xiaomi-redmi-note-3-test --gtest_color=yes"
8082
adb shell "/data/local/tmp/xiaomi-redmi-note-4-test --gtest_color=yes"

scripts/android-armv7-mock.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ adb push build/android/armeabi-v7a/pixel-c-test /data/local/tmp/pixel-c-test
7070
adb push build/android/armeabi-v7a/pixel-xl-test /data/local/tmp/pixel-xl-test
7171
adb push build/android/armeabi-v7a/pixel-test /data/local/tmp/pixel-test
7272
adb push build/android/armeabi-v7a/pixel-2-xl-test /data/local/tmp/pixel-2-xl-test
73+
adb push build/android/armeabi-v7a/pixel-8-test /data/local/tmp/pixel-8-test
7374
adb push build/android/armeabi-v7a/xiaomi-mi-5c-test /data/local/tmp/xiaomi-mi-5c-test
7475
adb push build/android/armeabi-v7a/xiaomi-redmi-2a-test /data/local/tmp/xiaomi-redmi-2a-test
7576
adb push build/android/armeabi-v7a/xiaomi-redmi-note-3-test /data/local/tmp/xiaomi-redmi-note-3-test
@@ -145,6 +146,7 @@ adb shell "/data/local/tmp/pixel-c-test --gtest_color=yes"
145146
adb shell "/data/local/tmp/pixel-xl-test --gtest_color=yes"
146147
adb shell "/data/local/tmp/pixel-test --gtest_color=yes"
147148
adb shell "/data/local/tmp/pixel-2-xl-test --gtest_color=yes"
149+
adb shell "/data/local/tmp/pixel-8-test --gtest_color=yes"
148150
adb shell "/data/local/tmp/xiaomi-mi-5c-test --gtest_color=yes"
149151
adb shell "/data/local/tmp/xiaomi-redmi-2a-test --gtest_color=yes"
150152
adb shell "/data/local/tmp/xiaomi-redmi-note-3-test --gtest_color=yes"

src/arm/linux/init.c

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,18 +333,52 @@ void cpuinfo_arm_linux_init(void) {
333333
}
334334

335335
/* Propagate topology group IDs among siblings */
336+
bool detected_core_siblings_list_node = false;
337+
bool detected_cluster_cpus_list_node = false;
336338
for (uint32_t i = 0; i < arm_linux_processors_count; i++) {
337339
if (!bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) {
338340
continue;
339341
}
340342

341-
if (arm_linux_processors[i].flags & CPUINFO_LINUX_FLAG_PACKAGE_ID) {
343+
if (!bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_PACKAGE_ID)) {
344+
continue;
345+
}
346+
347+
/* Use the cluster_cpus_list topology node if available. If not
348+
* found, cache the result to avoid repeatedly attempting to
349+
* read the non-existent paths.
350+
* */
351+
if (!detected_core_siblings_list_node && !detected_cluster_cpus_list_node) {
352+
if (cpuinfo_linux_detect_cluster_cpus(
353+
arm_linux_processors_count,
354+
i,
355+
(cpuinfo_siblings_callback)cluster_siblings_parser,
356+
arm_linux_processors)) {
357+
detected_cluster_cpus_list_node = true;
358+
continue;
359+
} else {
360+
detected_core_siblings_list_node = true;
361+
}
362+
}
363+
364+
/* The cached result above will guarantee only one of the blocks
365+
* below will execute, with a bias towards cluster_cpus_list.
366+
**/
367+
if (detected_core_siblings_list_node) {
342368
cpuinfo_linux_detect_core_siblings(
343369
arm_linux_processors_count,
344370
i,
345371
(cpuinfo_siblings_callback)cluster_siblings_parser,
346372
arm_linux_processors);
347373
}
374+
375+
if (detected_cluster_cpus_list_node) {
376+
cpuinfo_linux_detect_cluster_cpus(
377+
arm_linux_processors_count,
378+
i,
379+
(cpuinfo_siblings_callback)cluster_siblings_parser,
380+
arm_linux_processors);
381+
}
348382
}
349383

350384
/* Propagate all cluster IDs */

0 commit comments

Comments
 (0)