On Thu, Jul 12, 2018 at 09:37:41AM +0200, Daniel Vetter wrote: > On Thu, Jul 12, 2018 at 8:56 AM, Takashi Iwai <tiwai@xxxxxxx> wrote: > > On Thu, 12 Jul 2018 08:54:34 +0200, > > Daniel Vetter wrote: > >> > >> On Thu, Jul 12, 2018 at 09:29:01AM +0800, Feng Tang wrote: > >> > On Tue, Jun 26, 2018 at 10:29:16AM +0800, Feng Tang wrote: > >> > > On Mon, Jun 25, 2018 at 05:36:32PM +0200, Daniel Vetter wrote: > >> > > >> > > Hi Daneil/Jani/Takashi, > >> > > > >> > > When I was testing this patch from Takashi, I further checked the kernel > >> > > module code, and found that: we may need NOT to add any new codes to > >> > > prepare for i915's async probe feature! > >> > > > >> > > Say when i915 module is being loader due to HDA's request_module() call, > >> > > in the callchain, do_init_module() has such code: > >> > > > >> > > if (!mod->async_probe_requested && (current->flags & PF_USED_ASYNC)) > >> > > async_synchronize_full(); > >> > > > >> > > This will garantee the asynced probe is done before it returns. > >> > > > >> > > I have just tested and this seems to be enough. If I am not wrong, then > >> > > we can take the i915 async patch directly. What do you think? > >> > > >> > Ping for comments, thanks! > >> > >> Ram (who's working on the hdcp2 code) just learned the hard way that if > >> i915 registration gets delayed then audio fails to load. So if you want to > >> make i915 fully async, then you _must_ fix the audio load stuff. > > > > Does my component completion patch help for that scenario? > > Hm, must have missed it. Do you have a patchwork link? > > Also adding Ram so he can test this out. Here is Iwai's patch that I found in my inbox: ----- --- a/sound/hda/hdac_i915.c +++ b/sound/hda/hdac_i915.c @@ -23,6 +23,7 @@ #include <sound/hda_register.h> static struct i915_audio_component *hdac_acomp; +static DECLARE_COMPLETION(acomp_bound); /** * snd_hdac_set_codec_wakeup - Enable / disable HDMI/DP codec wakeup @@ -284,6 +285,7 @@ static int hdac_component_master_bind(struct device *dev) goto out_unbind; } + complete_all(&acomp_bound); return 0; out_unbind: @@ -382,11 +384,8 @@ int snd_hdac_i915_init(struct hdac_bus *bus) if (ret < 0) goto out_err; - /* - * Atm, we don't support deferring the component binding, so make sure - * i915 is loaded and that the binding successfully completes. - */ request_module("i915"); + wait_for_completion_timeout(&acomp_bound, 10000); /* 10s timeout */ if (!acomp->ops) { ret = -ENODEV; _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx