Dne 30. 09. 20 v 11:39 Takashi Iwai napsal(a): > On Wed, 30 Sep 2020 11:28:59 +0200, > Jaroslav Kysela wrote: >> >> Dne 30. 09. 20 v 11:21 Takashi Iwai napsal(a): >>> On Wed, 30 Sep 2020 09:19:50 +0200, >>> Jaroslav Kysela wrote: >>>> >>>> Dne 30. 09. 20 v 7:51 Hui Wang napsal(a): >>>>> If the caller of enable_callback_mst() passes a cb func, the callee >>>>> function will malloc memory and link this cb func to the list >>>>> unconditionally. This will introduce problem if caller is in the >>>>> hda_codec_ops.init() since the init() will be repeatedly called in the >>>>> codec rt_resume(). >>>>> >>>>> So far, the patch_hdmi.c and patch_ca0132.c call enable_callback_mst() >>>>> in the hda_codec_ops.init(). >>>> >>>> Won't be better to handle this double invocation at the callback call time? I >>>> believe that some refcounting and pointing to one allocated callback structure >>>> for all instances is better. >>> >>> IMO, Hui's fix is correct in this case; otherwise it'll result in >>> endless number of allocations at each time the runtime resume is >>> performed. So I'm going to take it as is. >> >> I meant to allocate the structure only once with refcounting and multiple >> invocation protection. In the proposed change, you lose the >> bindings. > > AFAIUC, it won't lose any functionality. > snd_hda_jack_detect_enable_callback() would chain the callback > function if a jack object has been already created, and this > additional check will just prevent the doubly registration of the very > same callback when called multiple times. Ok, I see, the lookup is codec / nid / dev_id so in this case the multiple callback assignments are really not desired. Thanks for the explanation. Jaroslav -- Jaroslav Kysela <perex@xxxxxxxx> Linux Sound Maintainer; ALSA Project; Red Hat, Inc.