[igt-dev] [PATCH i-g-t v2 1/2] lib/igt_kmod: Wait for a kmod to finish its probe before unloding it.
Dixit, Ashutosh
ashutosh.dixit at intel.com
Fri Apr 1 20:12:19 UTC 2022
On Fri, 01 Apr 2022 11:22:28 -0700, Daniele Ceraolo Spurio wrote:
>
> Modprobing i915 can result in other dependent modules being loaded
> automatically as a follow up. This means that by the time the i915
> load function returns these modules may still be going through their
> init, so if we try to immediately unload i915 again we will fail with
> an -EBUSY. To avoid this, if the module load is still in progress, wait
> for it to complete before unloading.
>
> v2: move the wait to igt_kmod_unload_r (Ashutosh)
Reviewed-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> Cc: Ashutosh Dixit <ashutosh.dixit at intel.com>
> ---
> lib/igt_kmod.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index cf7a3b22..0e3ca9b3 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -143,6 +143,12 @@ out:
> return ret;
> }
>
> +static bool
> +igt_kmod_is_loading(struct kmod_module *kmod)
> +{
> + return kmod_module_get_initstate(kmod) == KMOD_MODULE_COMING;
> +}
> +
> static int modprobe(struct kmod_module *kmod, const char *options)
> {
> unsigned int flags;
> @@ -261,6 +267,17 @@ static int igt_kmod_unload_r(struct kmod_module *kmod, unsigned int flags)
> if (err < 0)
> return err;
>
> + if (igt_kmod_is_loading(kmod)) {
> + const char *mod_name = kmod_module_get_name(kmod);
> + igt_debug("%s still initializing\n", mod_name);
> + err = igt_wait(!igt_kmod_is_loading(kmod), 10000, 100);
> + if (err < 0) {
> + igt_debug("%s failed to complete init within the timeout\n",
> + mod_name);
> + return err;
> + }
> + }
> +
> return kmod_module_remove_module(kmod, flags);
> }
>
> --
> 2.25.1
>
More information about the igt-dev
mailing list