From nobody Tue Nov 4 18:49:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1530728450119811.7914304741886; Wed, 4 Jul 2018 11:20:50 -0700 (PDT) Received: from localhost ([::1]:48705 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1famOT-0007lg-Mk for importer@patchew.org; Wed, 04 Jul 2018 14:20:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38338) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1famEO-0008GX-6w for qemu-devel@nongnu.org; Wed, 04 Jul 2018 14:10:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1famEI-0004kJ-VH for qemu-devel@nongnu.org; Wed, 04 Jul 2018 14:10:19 -0400 Received: from mail-io0-x242.google.com ([2607:f8b0:4001:c06::242]:38277) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1famEI-0004jF-OA for qemu-devel@nongnu.org; Wed, 04 Jul 2018 14:10:14 -0400 Received: by mail-io0-x242.google.com with SMTP id v26-v6so5542840iog.5 for ; Wed, 04 Jul 2018 11:10:14 -0700 (PDT) Received: from computer (CPE1cabc0918a93-CM1cabc0918a90.cpe.net.cable.rogers.com. [99.229.26.117]) by smtp.gmail.com with ESMTPSA id h81-v6sm43598ith.2.2018.07.04.11.10.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 Jul 2018 11:10:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:mime-version:content-disposition :user-agent; bh=+cSNqW5IJU8lDNoZnUQy1wTXFLL8KS50LrILXFcuPg0=; b=jQ3MEhA/g8zcl09jLZOYDz9KcAqmtBNQp4rejqVrU1sZw4Q/EJiqDeuOZE7YKtExQF E3PbQUykYiS+v7nl7t2tCjpOGFqYLtyXapOTrjynO4+7NksYwFQR0LgyAqXrTiOb8M1y piNF1Wk0ojNZUD0huSXjApg4WO0ywWBjaBlTaJSj0KP+QUT6NmQx64Z2bNrtEJ/ytwmO ItU9yspe23q3xrlqV54KbuGSgndpRvtZlgMmc7BRuGvCJaIMK/6SeGi2x20KbcWMfWWW +vZqWkEaAxwDuXZGBoTClKAvyp8nUvbfNQEcfODAZ+KrEwUcYyUj9NXY14pH+Y/svFqh EFIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition:user-agent; bh=+cSNqW5IJU8lDNoZnUQy1wTXFLL8KS50LrILXFcuPg0=; b=aS2V1mxj0rri3EWDg4Rmy8up0nBtyIOVpbA7qSVKAeySL/cOolPkWRxdGrCwqj/2tw aX82jWyz9z2kp3AbR/fvTsSvtKSKte2NvNiro2+KngnHMTg5RI4hswKi2M7jg1hBoDvO 5YlaGlIgGGyDUj/NGqgwdUY95TOyXqHBRXEOQ3VeYKJkjo3lsbyI9BjmWvP5dXz5QykQ W0SLZySeNkONXloQPleJfyZO0XgZxdlMMqIrj8KXx1EwWVO90+lofdCHecFPWpACDnIH LtIqHnHDUO3m7ULNaLh8F7XoQh7MgdZUlNzfKua34qMQwLe6cZHsR5lMeGxDt8UIHeFF obaw== X-Gm-Message-State: APt69E3nhzXx9TAmsEp0j95SgMXPhNscZnjuYVg6rEkN+G10luZcZUcE L8FuQEpMX3fUUSaml2kuRKZ3YTc= X-Google-Smtp-Source: AAOMgpcu9F9L3vtUUTSsJB2sm+GpKqF+2/Er9nAC/AquACUjKSzE9Ma7yCLJkNY7HAc7FH5leDa9fg== X-Received: by 2002:a6b:c409:: with SMTP id y9-v6mr2481375ioa.77.1530727813583; Wed, 04 Jul 2018 11:10:13 -0700 (PDT) Date: Wed, 4 Jul 2018 14:10:10 -0400 From: ryang To: qemu-devel@nongnu.org Message-ID: <20180704181010.GA918@computer> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4001:c06::242 Subject: [Qemu-devel] [PATCH v4] module: Use QEMU_MODULE_DIR as a search path X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Fam Zheng Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The current paths for modules are CONFIG_QEMU_MODDIR and paths relative to the executable. Qemu and its modules can be installed and executed in paths that are different from these search paths. This change allows a search path to be specified by environment variable. An example usage for this is postmarketOS[1]. This is a build environment for Alpine Linux. It sets up Alpine Linux in a chroot environment. Alpine's Qemu packages are installed in the chroot. The Alpine Linux Qemu package is used to test compiled Alpine Linux system images. This way there isn't a reliance on the which ever version of Qemu the host system / distro provides. postmarketOS executes Qemu on host system outside of the chroot The Qemu module search path needs to point to the location of the chroot relative to the host system. e.g. The root of the Alpine Linux chroot is: ~/.local/var/pmbootstrap/chroot_native/ Alpine's Qemu is installed at ~/.local/var/pmbootstrap/chroot_native/usr/bin/ The Qemu module search path needs to be: QEMU_MODULE_DIR=3D~/.local/var/pmbootstrap/chroot_native/usr/lib/qemu/ [1] https://postmarketos.org/ Signed-off-by: ryang Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Fam Zheng --- v2: - fix checkpatch errors v3: - initialize n_dirs variable v4: - change env variable suffix from _PATH to _DIR - renamed search_path to search_dir and make it const util/module.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/util/module.c b/util/module.c index c909737..1259dd3 100644 --- a/util/module.c +++ b/util/module.c @@ -162,9 +162,10 @@ void module_load_one(const char *prefix, const char *l= ib_name) #ifdef CONFIG_MODULES char *fname =3D NULL; char *exec_dir; - char *dirs[3]; + const char *search_dir; + char *dirs[4]; char *module_name; - int i =3D 0; + int i =3D 0, n_dirs =3D 0; int ret; static GHashTable *loaded_modules; =20 @@ -186,14 +187,19 @@ void module_load_one(const char *prefix, const char *= lib_name) g_hash_table_insert(loaded_modules, module_name, module_name); =20 exec_dir =3D qemu_get_exec_dir(); - dirs[i++] =3D g_strdup_printf("%s", CONFIG_QEMU_MODDIR); - dirs[i++] =3D g_strdup_printf("%s/..", exec_dir ? : ""); - dirs[i++] =3D g_strdup_printf("%s", exec_dir ? : ""); - assert(i =3D=3D ARRAY_SIZE(dirs)); + search_dir =3D getenv("QEMU_MODULE_DIR"); + if (search_dir !=3D NULL) { + dirs[n_dirs++] =3D g_strdup_printf("%s", search_dir); + } + dirs[n_dirs++] =3D g_strdup_printf("%s", CONFIG_QEMU_MODDIR); + dirs[n_dirs++] =3D g_strdup_printf("%s/..", exec_dir ? : ""); + dirs[n_dirs++] =3D g_strdup_printf("%s", exec_dir ? : ""); + assert(n_dirs <=3D ARRAY_SIZE(dirs)); + g_free(exec_dir); exec_dir =3D NULL; =20 - for (i =3D 0; i < ARRAY_SIZE(dirs); i++) { + for (i =3D 0; i < n_dirs; i++) { fname =3D g_strdup_printf("%s/%s%s", dirs[i], module_name, HOST_DSOSUF); ret =3D module_load_file(fname); @@ -205,7 +211,7 @@ void module_load_one(const char *prefix, const char *li= b_name) } } =20 - for (i =3D 0; i < ARRAY_SIZE(dirs); i++) { + for (i =3D 0; i < n_dirs; i++) { g_free(dirs[i]); } =20 --=20 2.7.4