[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4] module: Use QEMU_MODULE_DIR as a search path
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH v4] module: Use QEMU_MODULE_DIR as a search path |
Date: |
Mon, 20 Aug 2018 15:06:47 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
On 04/07/2018 20:10, ryang wrote:
> 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=~/.local/var/pmbootstrap/chroot_native/usr/lib/qemu/
>
> [1] https://postmarketos.org/
>
Queued, thanks.
Paolo
> Signed-off-by: ryang <address@hidden>
> ---
>
> 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
> *lib_name)
> #ifdef CONFIG_MODULES
> char *fname = NULL;
> char *exec_dir;
> - char *dirs[3];
> + const char *search_dir;
> + char *dirs[4];
> char *module_name;
> - int i = 0;
> + int i = 0, n_dirs = 0;
> int ret;
> static GHashTable *loaded_modules;
>
> @@ -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);
>
> exec_dir = qemu_get_exec_dir();
> - dirs[i++] = g_strdup_printf("%s", CONFIG_QEMU_MODDIR);
> - dirs[i++] = g_strdup_printf("%s/..", exec_dir ? : "");
> - dirs[i++] = g_strdup_printf("%s", exec_dir ? : "");
> - assert(i == ARRAY_SIZE(dirs));
> + search_dir = getenv("QEMU_MODULE_DIR");
> + if (search_dir != NULL) {
> + dirs[n_dirs++] = g_strdup_printf("%s", search_dir);
> + }
> + dirs[n_dirs++] = g_strdup_printf("%s", CONFIG_QEMU_MODDIR);
> + dirs[n_dirs++] = g_strdup_printf("%s/..", exec_dir ? : "");
> + dirs[n_dirs++] = g_strdup_printf("%s", exec_dir ? : "");
> + assert(n_dirs <= ARRAY_SIZE(dirs));
> +
> g_free(exec_dir);
> exec_dir = NULL;
>
> - for (i = 0; i < ARRAY_SIZE(dirs); i++) {
> + for (i = 0; i < n_dirs; i++) {
> fname = g_strdup_printf("%s/%s%s",
> dirs[i], module_name, HOST_DSOSUF);
> ret = module_load_file(fname);
> @@ -205,7 +211,7 @@ void module_load_one(const char *prefix, const char
> *lib_name)
> }
> }
>
> - for (i = 0; i < ARRAY_SIZE(dirs); i++) {
> + for (i = 0; i < n_dirs; i++) {
> g_free(dirs[i]);
> }
>
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v4] module: Use QEMU_MODULE_DIR as a search path,
Paolo Bonzini <=