only set 'bpf.progs_loaded' property on eBPF capable devices...
... which also means waitForProgsLoaded() has to be a no-op on pre-bpf devices.
This is more consistent: it's weird to have bpf.progs_loaded set on a 4.4 device.
Test: builds, atest
Bug: 150040815
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Iddabcf56c187ea518dd2e4d8db451b2f6902aa8e
diff --git a/bpfloader/BpfLoader.cpp b/bpfloader/BpfLoader.cpp
index 5390fb4..9e348e5 100644
--- a/bpfloader/BpfLoader.cpp
+++ b/bpfloader/BpfLoader.cpp
@@ -72,10 +72,10 @@
}
int main() {
- if (android::bpf::isBpfSupported()) {
- // Load all ELF objects, create programs and maps, and pin them
- loadAllElfObjects();
- }
+ if (!android::bpf::isBpfSupported()) return 0;
+
+ // Load all ELF objects, create programs and maps, and pin them
+ loadAllElfObjects();
if (android::base::SetProperty("bpf.progs_loaded", "1") == false) {
ALOGE("Failed to set bpf.progs_loaded property\n");
diff --git a/libbpf_android/Loader.cpp b/libbpf_android/Loader.cpp
index f808dc6..4244eb7 100644
--- a/libbpf_android/Loader.cpp
+++ b/libbpf_android/Loader.cpp
@@ -650,6 +650,8 @@
}
void waitForProgsLoaded() {
+ if (!android::bpf::isBpfSupported()) return;
+
while (!android::base::WaitForProperty("bpf.progs_loaded", "1", std::chrono::seconds(5))) {
ALOGW("Waited 5s for bpf.progs_loaded, still waiting...");
}