From nobody Tue Nov 4 15:16:30 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 1530625394429290.894314163932; Tue, 3 Jul 2018 06:43:14 -0700 (PDT) Received: from localhost ([::1]:40624 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faLaL-0004X5-Ow for importer@patchew.org; Tue, 03 Jul 2018 09:43:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33278) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faLWE-0001C7-5M for qemu-devel@nongnu.org; Tue, 03 Jul 2018 09:38:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1faLWA-0001bW-50 for qemu-devel@nongnu.org; Tue, 03 Jul 2018 09:38:58 -0400 Received: from mail-io0-x232.google.com ([2607:f8b0:4001:c06::232]:40436) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1faLW9-0001bI-V4 for qemu-devel@nongnu.org; Tue, 03 Jul 2018 09:38:54 -0400 Received: by mail-io0-x232.google.com with SMTP id t135-v6so1732962iof.7 for ; Tue, 03 Jul 2018 06:38:53 -0700 (PDT) Received: from computer (CPE1cabc0918a93-CM1cabc0918a90.cpe.net.cable.rogers.com. [99.229.26.117]) by smtp.gmail.com with ESMTPSA id r200-v6sm604602ita.24.2018.07.03.06.38.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Jul 2018 06:38:52 -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=Fe1P/xlDg15ykxvuWltiEy7GSN+xK9tQXAoHP7AUdls=; b=SsIOXrdvzJw2odezL3TsINBh1YdMxRlK5yZNSjQ4nlkMPuC0XXmd+PLFuodeZpWvFW eIYlvxUFtQCsAHK2DZETtqYJAy17mgauwiGRTdptOg73zVJ7Z09xHqIPRYPeaeoVAVzp pqEVr/FmrxuJoZMpjVA7ETcThWiR1Gb7M15cc2jM8g1LwCQVRpNkVu4mDD8iRNsLL+30 V9+4mGsjX7MSlkihxjtRExQ/9oAHQUKPZWhbFTXia5UJ7nzDB/IDv7x3KJFUMKicXOhy 2U+OToLCsHLoNZOJ9zEEkLwuQlNc75CPqEUKUJ0dEBhj0HYR+I5666I7DS/I3xh6XvWx Az6A== 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=Fe1P/xlDg15ykxvuWltiEy7GSN+xK9tQXAoHP7AUdls=; b=dRi1bxSkyLwX7RMn50A/0gi8Vh1xXE9Ii1UmEIo9+TNPhyr1HO1QVNdYWq5MT9j80f Dru65TPf8OzZqiHxOZ5ASUmaFF3/1AfbVEXEYmcVz/7E8c5y+/f2COOFgyPbdnXuCK3i 12NnqGjzWFEESAlkU+hgil/qhf4wH8QPFlCBiojxAMDZVHAiVSHPN4pnw9IvmpBRrvnV wbEFcyF66QCSNkQoCYzjC3xkCGS/mF2pcXpL2ozL+TKkd1BWCWImR0JHaFJiQgrNuXng gIOjbkiYYQqfi/19A7R48r0JFLj4pnZK1dq/E6v8AJi0UdOxSMFmJKjVtA4tz7wCUTMl OdIg== X-Gm-Message-State: APt69E2JMYyEQg/r8fGc7Uz9yZBJ1YNa/weDPbpDArbQQ5cn8cgtJFwi aYarXlSekwsSiJh8dvv2P1DDaB0= X-Google-Smtp-Source: AAOMgpdaKO7g5qS3z/Yj7xISgB23O6SaWrqwm60YfmL9Q+6XugvHaL4DtgCpvZPp4zZvPUft3EaeRw== X-Received: by 2002:a6b:244:: with SMTP id 65-v6mr16560989ioc.174.1530625133144; Tue, 03 Jul 2018 06:38:53 -0700 (PDT) Date: Tue, 3 Jul 2018 09:38:49 -0400 From: ryang To: qemu-devel@nongnu.org Message-ID: <20180703133849.GA11719@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::232 Subject: [Qemu-devel] [PATCH v2] module: Use QEMU_MODULE_PATH 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_PATH=3D~/.local/var/pmbootstrap/chroot_native/usr/lib/qemu/ [1] https://postmarketos.org/ Signed-off-by: ryang --- v2: - fix checkpatch errors util/module.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/util/module.c b/util/module.c index c909737..9dab700 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]; + char *search_path; + char *dirs[4]; char *module_name; - int i =3D 0; + int i =3D 0, n_dirs; 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_path =3D getenv("QEMU_MODULE_PATH"); + if (search_path !=3D NULL) { + dirs[n_dirs++] =3D g_strdup_printf("%s", search_path); + } + 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