Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>
To: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: igt-dev@lists.freedesktop.org,
	Alexander Usyskin <alexander.usyskin@intel.com>
Subject: Re: [igt-dev] [PATCH i-g-t 1/2] lib/igt_kmod: Wait for a kmod to finish its probe before unloding it.
Date: Thu, 31 Mar 2022 15:52:56 -0700	[thread overview]
Message-ID: <87v8vthgzb.wl-ashutosh.dixit@intel.com> (raw)
In-Reply-To: <20220330183259.3003663-2-daniele.ceraolospurio@intel.com>

On Wed, 30 Mar 2022 11:32:58 -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.

Can you explain a bit where we see this happening and if any tests fail
because of this? My expectation would be if module A depends on module B,
loading A will cause B to load, but loading B will not cause A to load. So
what is causing these dependent modules to load when we load i915? Is there
e.g. something in /etc/modprobe.d or udev which is causing this to happen?

Currently in IGT we maintain a list of modules depenedent on i915 which we
unload prior to unloading i915. An alternative approach to this patch may
be to maintain a similar list in igt_i915_driver_load() and load dependent
modules after loading i915 as long as they are present on the system. So we
would not need to wait for these dependent modules to complete loading when
we unload i915. Do you think this is feasible?

Thanks.

> To avoid this, if the module load is still in progress, wait for it to
> complete before unloading.

>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> ---
>  lib/igt_kmod.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
>
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index cf7a3b22..d2ac8a56 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;
> @@ -289,6 +295,16 @@ igt_kmod_unload(const char *mod_name, unsigned int flags)
>		goto out;
>	}
>
> +	if (igt_kmod_is_loading(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);
> +			goto out;
> +		}
> +	}
> +
>	err = igt_kmod_unload_r(kmod, flags);
>	if (err < 0) {
>		igt_debug("Could not remove module %s (%s)\n", mod_name,
> --
> 2.25.1
>

  reply	other threads:[~2022-03-31 22:52 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-30 18:32 [igt-dev] [PATCH i-g-t 0/2] Unload mei_gsc before i915 Daniele Ceraolo Spurio
2022-03-30 18:32 ` [igt-dev] [PATCH i-g-t 1/2] lib/igt_kmod: Wait for a kmod to finish its probe before unloding it Daniele Ceraolo Spurio
2022-03-31 22:52   ` Dixit, Ashutosh [this message]
2022-03-31 23:09     ` Ceraolo Spurio, Daniele
2022-04-01  1:18       ` Dixit, Ashutosh
2022-04-01  2:03   ` Dixit, Ashutosh
2022-04-01  2:11     ` Ceraolo Spurio, Daniele
2022-04-01  2:21       ` Dixit, Ashutosh
2022-03-30 18:32 ` [igt-dev] [PATCH i-g-t 2/2] lib/igt_kmod: Unload mei modules before unloading i915 Daniele Ceraolo Spurio
2022-03-31 21:54   ` Dixit, Ashutosh
2022-04-01  1:23     ` Dixit, Ashutosh
2022-04-01  2:04       ` Ceraolo Spurio, Daniele
2022-03-30 18:51 ` [igt-dev] ✗ GitLab.Pipeline: warning for Unload mei_gsc before i915 Patchwork
2022-03-30 19:25 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork
2022-03-30 22:33 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87v8vthgzb.wl-ashutosh.dixit@intel.com \
    --to=ashutosh.dixit@intel.com \
    --cc=alexander.usyskin@intel.com \
    --cc=daniele.ceraolospurio@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox