From nobody Tue Nov 4 15:22:41 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 1530645608413991.5178469127233; Tue, 3 Jul 2018 12:20:08 -0700 (PDT) Received: from localhost ([::1]:42268 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faQqI-0002Z6-1W for importer@patchew.org; Tue, 03 Jul 2018 15:20:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53704) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1faQpU-0002HE-3P for qemu-devel@nongnu.org; Tue, 03 Jul 2018 15:19:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1faQpQ-000381-U6 for qemu-devel@nongnu.org; Tue, 03 Jul 2018 15:19:12 -0400 Received: from mail-it0-x22e.google.com ([2607:f8b0:4001:c0b::22e]:37649) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1faQpQ-00037v-Nu for qemu-devel@nongnu.org; Tue, 03 Jul 2018 15:19:08 -0400 Received: by mail-it0-x22e.google.com with SMTP id p17-v6so4744682itc.2 for ; Tue, 03 Jul 2018 12:19:08 -0700 (PDT) Received: from computer (CPE1cabc0918a93-CM1cabc0918a90.cpe.net.cable.rogers.com. [99.229.26.117]) by smtp.gmail.com with ESMTPSA id 136-v6sm1198279itm.23.2018.07.03.12.19.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Jul 2018 12:19:07 -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=joMgSVeTjxBp5jln9khNZXmZfCMiho0ntDviZvOv7nM=; b=tPciE8yolU4l5X6CyL4F1RwHRmOadckMOh48OxYcYJ9Atz7DyjeT68jiy5i7ctwL4o 7BtYS2F77Vp389em4FARbH9vwEFysmjwf81RczXoNTxChozxO5Dofqvk02GucFR+0edO B0dhE/Nfte9gctWhCdTs20gvddCDmrX/2HtuI6Cgn2MiPuEzHQGcMtiWciGjc33Sff19 YUeMJzlRjDWLcECWglDBu8J6/NV5EMvhS7wZL2kDFlSwqwrcDYVLtg12BktYXeTaPaNx oG97DKIeJ4AKaHtTqEK1mCi3Hey2hBbRo72rN3Yenvh73hO+WcSoFFezU9DufWW/NNuP ujXg== 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=joMgSVeTjxBp5jln9khNZXmZfCMiho0ntDviZvOv7nM=; b=X/ZgnB0V/yqzF/NtgYQWXQuJ923wHZu2gKWI7JdulOjfJZRis3pNGoxMKy1CDBMSC5 1kWUb4YHOjIR1wXJ+a3TPNiP9ZIdfGUimvBP7y92EMbJC4ke1Hc6XAl1cA9BfPofeivO g1Zl/0B+Tqi23GOKp6X+E+Dj3JaAawsQomE3fkaDr5UWX3WAVfa5jRgk89NIXtflwxxQ sGTWYZTLc7qbkRn3CrpMuLZO/1nJ685EJPkvh2lA/cAfmuE3XaHSfRaqBudAtYKPSzDi j0oT/y6dyCa4X8RC3ijZEzLh0RwICyf+DccUNhDEXfyGD/y4TglaOP1tSquReaO85ZHC DR1Q== X-Gm-Message-State: APt69E0WsQnsWWK/YRjR1FQTzNJybH+PmgaAWq4l/T7cQA5ox1RT26wz 94L+lhMF62ILkeFA9czc7RWpJ8A= X-Google-Smtp-Source: AAOMgpcM3XHh3v0fxkqyG2YpVc4vr7rKQsbIqSnqI5v8H+h2hgwZzDQZX1i8+Fn3Hne91E/rayOdkQ== X-Received: by 2002:a02:6543:: with SMTP id u64-v6mr25460761jab.71.1530645547863; Tue, 03 Jul 2018 12:19:07 -0700 (PDT) Date: Tue, 3 Jul 2018 15:19:04 -0400 From: ryang To: qemu-devel@nongnu.org Message-ID: <20180703191904.GA29474@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:c0b::22e Subject: [Qemu-devel] [PATCH v3] 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 v3: - initialize n_dirs variable util/module.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/util/module.c b/util/module.c index c909737..612f00e 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 =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_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