• Takashi Iwai's avatar
    ALSA: hda: Avoid racy recreation of widget kobjects · 9780ded3
    Takashi Iwai authored
    The refresh of HD-audio widget sysfs kobjects via
    snd_hdac_refresh_widget_sysfs() is slightly racy.
    The driver recreates the whole tree from scratch after deleting the
    whole.  When CONFIG_DEBUG_KOBJECT_RELEASE option is used, kobject
    release doesn't happen immediately but delayed, while the re-creation
    of the same named kobject happens soon after invoking kobject_put().
    This may end up with the conflicts of duplicated kobjects, as found in
    the bug report below.
    
    In this patch, we take another approach to refresh the tree: instead
    of recreating the whole tree, just add the new nodes and delete the
    non-existing nodes.  Since the refresh happens only once at
    initialization, no longer race would happen.
    
    Along with the code change, merge snd_hdac_refresh_widget_sysfs() with
    the existing snd_hdac_refresh_widgets() with an additional bool flag
    for simplifying the code.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=197307Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    9780ded3
hdac_device.c 26.4 KB