Message ID | 112888486.mQgaWiH0PI@wuerfel (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tuesday 16 February 2016 17:59:04 Arnd Bergmann wrote: > --- a/sound/pci/hda/hda_jack.c > +++ b/sound/pci/hda/hda_jack.c > @@ -403,8 +403,10 @@ int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, > > jack->phantom_jack = !!phantom_jack; > jack->type = type; > - jack->jack->private_data = jack; > - jack->jack->private_free = hda_free_jack_priv; > + if (IS_ENABLED(CONFIG_SND_JACK)) { > + jack->jack->private_data = jack; > + jack->jack->private_free = hda_free_jack_priv; > + } > state = snd_hda_jack_detect(codec, nid); > snd_jack_report(jack->jack, state ? jack->type : 0); > Or another idea: if we pass private_{data,free} into snd_jack_new() as arguments, the snd_jack structure can become private to sound/core/jack.c, so we can be sure to never hit this bug again. Arnd
diff --git a/sound/pci/hda/hda_jack.c b/sound/pci/hda/hda_jack.c index a33234e04d4f..2f72b3c09d92 100644 --- a/sound/pci/hda/hda_jack.c +++ b/sound/pci/hda/hda_jack.c @@ -403,8 +403,10 @@ int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, jack->phantom_jack = !!phantom_jack; jack->type = type; - jack->jack->private_data = jack; - jack->jack->private_free = hda_free_jack_priv; + if (IS_ENABLED(CONFIG_SND_JACK)) { + jack->jack->private_data = jack; + jack->jack->private_free = hda_free_jack_priv; + } state = snd_hda_jack_detect(codec, nid); snd_jack_report(jack->jack, state ? jack->type : 0); diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index f4443b5fbf6e..e9a0f67c92ca 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -2532,8 +2532,10 @@ static int add_hdmi_jack_kctl(struct hda_codec *codec, return err; spec->pcm_rec[pcm_idx].jack = jack; - jack->private_data = &spec->pcm_rec[pcm_idx]; - jack->private_free = free_hdmi_jack_priv; + if (IS_ENABLED(CONFIG_SND_JACK)) { + jack->private_data = &spec->pcm_rec[pcm_idx]; + jack->private_free = free_hdmi_jack_priv; + } return 0; }