From: Michael Tremer Date: Wed, 15 Mar 2023 18:29:42 +0000 (+0000) Subject: jail: Enable all QEMU CPU features by default X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=aac86bd34231069f2f386b3c597bab1e74804bf1;p=people%2Fstevee%2Fpakfire.git jail: Enable all QEMU CPU features by default When we are emulating a different architecture, QEMU by default emulates a very basic processor which might not be able to emulate for example SIMD instructions. Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/arch.c b/src/libpakfire/arch.c index eabf953c..68076e5e 100644 --- a/src/libpakfire/arch.c +++ b/src/libpakfire/arch.c @@ -248,7 +248,7 @@ int pakfire_arch_is_compatible(const char* name, const char* compatible_arch) { return 0; } -static int pakfire_arch_supported_by_host(const char* name) { +int pakfire_arch_supported_by_host(const char* name) { if (!name) { errno = EINVAL; return 1; diff --git a/src/libpakfire/include/pakfire/arch.h b/src/libpakfire/include/pakfire/arch.h index 268c1b68..84ff0387 100644 --- a/src/libpakfire/include/pakfire/arch.h +++ b/src/libpakfire/include/pakfire/arch.h @@ -40,6 +40,7 @@ int __pakfire_arch_buildtarget(char* buffer, size_t length, const char* arch, co const char* pakfire_arch_platform(const char* name); int pakfire_arch_is_compatible(const char* name, const char* compatible_arch); +int pakfire_arch_supported_by_host(const char* name); char* pakfire_arch_find_interpreter(const char* name); #endif diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index 9cb34733..c81c169a 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -253,6 +253,8 @@ PAKFIRE_EXPORT int pakfire_jail_create(struct pakfire_jail** jail, struct pakfire* pakfire, int flags) { int r; + const char* arch = pakfire_get_arch(pakfire); + // Allocate a new jail struct pakfire_jail* j = calloc(1, sizeof(*j)); if (!j) @@ -279,6 +281,13 @@ PAKFIRE_EXPORT int pakfire_jail_create(struct pakfire_jail** jail, goto ERROR; } + // Enable all CPU features that CPU has to offer + if (!pakfire_arch_supported_by_host(arch)) { + r = pakfire_jail_set_env(j, "QEMU_CPU", "max"); + if (r) + goto ERROR; + } + // Set container UUID r = pakfire_jail_set_env(j, "container_uuid", pakfire_jail_uuid(j)); if (r)