Skip to content

Commit

Permalink
ALSA: hda: Simplify snd_hdac_refresh_widgets()
Browse files Browse the repository at this point in the history
Along with the recent fix for the races of snd_hdac_refresh_widgets()
it turned out that the instantiation of widgets sysfs at
snd_hdac_sysfs_reinit() could cause a race.  The race itself was
already covered later by extending the mutex protection range, the
commit 9848237 ("ALSA: hda: Fix widget_mutex incomplete
protection"), but this also indicated that the call of *_reinit() is
basically superfluous, as the widgets shall be created sooner or later
from snd_hdac_device_register().

This patch removes the redundant call of snd_hdac_sysfs_reinit() at
first.  By this removal, the sysfs argument itself in
snd_hdac_refresh_widgets() becomes superfluous, too, because the only
case sysfs=false is always with codec->widgets=NULL.  So, we drop this
redundant argument as well.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
tiwai committed Jul 5, 2019
1 parent 3450121 commit 774a075
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 12 deletions.
2 changes: 1 addition & 1 deletion include/sound/hdaudio.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ void snd_hdac_device_unregister(struct hdac_device *codec);
int snd_hdac_device_set_chip_name(struct hdac_device *codec, const char *name);
int snd_hdac_codec_modalias(struct hdac_device *hdac, char *buf, size_t size);

int snd_hdac_refresh_widgets(struct hdac_device *codec, bool sysfs);
int snd_hdac_refresh_widgets(struct hdac_device *codec);

unsigned int snd_hdac_make_cmd(struct hdac_device *codec, hda_nid_t nid,
unsigned int verb, unsigned int parm);
Expand Down
13 changes: 5 additions & 8 deletions sound/hda/hdac_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,

fg = codec->afg ? codec->afg : codec->mfg;

err = snd_hdac_refresh_widgets(codec, false);
err = snd_hdac_refresh_widgets(codec);
if (err < 0)
goto error;

Expand Down Expand Up @@ -394,9 +394,8 @@ static void setup_fg_nodes(struct hdac_device *codec)
/**
* snd_hdac_refresh_widgets - Reset the widget start/end nodes
* @codec: the codec object
* @sysfs: re-initialize sysfs tree, too
*/
int snd_hdac_refresh_widgets(struct hdac_device *codec, bool sysfs)
int snd_hdac_refresh_widgets(struct hdac_device *codec)
{
hda_nid_t start_nid;
int nums, err = 0;
Expand All @@ -414,11 +413,9 @@ int snd_hdac_refresh_widgets(struct hdac_device *codec, bool sysfs)
goto unlock;
}

if (sysfs) {
err = hda_widget_sysfs_reinit(codec, start_nid, nums);
if (err < 0)
goto unlock;
}
err = hda_widget_sysfs_reinit(codec, start_nid, nums);
if (err < 0)
goto unlock;

codec->num_nodes = nums;
codec->start_nid = start_nid;
Expand Down
2 changes: 1 addition & 1 deletion sound/hda/hdac_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ int hda_widget_sysfs_reinit(struct hdac_device *codec,
int i;

if (!codec->widgets)
return hda_widget_sysfs_init(codec);
return 0;

tree = kmemdup(codec->widgets, sizeof(*tree), GFP_KERNEL);
if (!tree)
Expand Down
2 changes: 1 addition & 1 deletion sound/pci/hda/hda_codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1016,7 +1016,7 @@ int snd_hda_codec_update_widgets(struct hda_codec *codec)
hda_nid_t fg;
int err;

err = snd_hdac_refresh_widgets(&codec->core, true);
err = snd_hdac_refresh_widgets(&codec->core);
if (err < 0)
return err;

Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/hdac_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -2043,7 +2043,7 @@ static int hdac_hdmi_dev_probe(struct hdac_device *hdev)
"Failed in parse and map nid with err: %d\n", ret);
return ret;
}
snd_hdac_refresh_widgets(hdev, true);
snd_hdac_refresh_widgets(hdev);

/* ASoC specific initialization */
ret = devm_snd_soc_register_component(&hdev->dev, &hdmi_hda_codec,
Expand Down

0 comments on commit 774a075

Please sign in to comment.