提交 e7de965e 编写于 作者: S Simon Fels

cmds: add cpu whitelist for features check

Not all CPUs can be detected with their correct feature set. For example
does cpu_features not work well enough when the support does not support
AVX (see https://github.com/google/cpu_features/issues/4). To mitigate
this we maintain a list of whitelisted CPU models.
上级 24bd4f69
......@@ -21,6 +21,18 @@
#include "cpu_features_macros.h"
#include "cpuinfo_x86.h"
namespace {
std::vector<std::string> cpu_whitelist = {
// QEMU does not necessarily expose correctly that it supports SSE and friends even
// when started with `-cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic`
"QEMU",
// Intel Core i7 M620 does not support AVX which causes cpu_features to not
// detect SSE and friends correctly
"M 620",
};
} // namespace
anbox::cmds::CheckFeatures::CheckFeatures()
: CommandWithFlagsAndAction{
cli::Name{"check-features"}, cli::Usage{"check-features"},
......@@ -41,9 +53,18 @@ anbox::cmds::CheckFeatures::CheckFeatures()
char brand_string[49];
cpu_features::FillX86BrandString(brand_string);
const auto is_qemu = utils::string_starts_with(brand_string, "QEMU");
std::string brand(brand_string);
// Check if we have a CPU which's features we can't detect correctly
auto is_whitelisted = false;
for (const auto &entry : cpu_whitelist) {
if (brand.find(entry) != std::string::npos) {
is_whitelisted = true;
break;
}
}
if (missing_features.size() > 0 && !is_qemu) {
if (missing_features.size() > 0 && !is_whitelisted) {
std::cerr << "The CPU of your computer (" << brand_string << ") does not support all" << std::endl
<< "features Anbox requires." << std::endl
<< "It is missing support for the following features: ";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册