From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH 1/6] ALSA: hda: use list macro for parsing on cleanup Date: Tue, 15 Mar 2016 11:00:53 +0100 Message-ID: References: <1458035836-1843-1-git-send-email-vinod.koul@intel.com> <1458035836-1843-2-git-send-email-vinod.koul@intel.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id E096B265817 for ; Tue, 15 Mar 2016 11:00:54 +0100 (CET) In-Reply-To: <1458035836-1843-2-git-send-email-vinod.koul@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Vinod Koul Cc: liam.r.girdwood@linux.intel.com, patches.audio@intel.com, alsa-devel@alsa-project.org, broonie@kernel.org, Jeeja KP List-Id: alsa-devel@alsa-project.org On Tue, 15 Mar 2016 10:57:11 +0100, Vinod Koul wrote: > > It is always better to use list_for_each_entry_safe() while doing > cleanup. So use this instead of open coding this in list in > snd_hdac_stream_free_all() > > Signed-off-by: Jeeja KP > Signed-off-by: Vinod Koul While this change is fine, we shouldn't trust blindly list_for_each_safe() as always safe. It assumes that the list removal is done only for the current item. But it's not always true. The loop in the current code is one of standard idiom in such a case. In anyway, take my ack when Mark applies it: Acked-by: Takashi Iwai Takashi > --- > sound/hda/ext/hdac_ext_stream.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/sound/hda/ext/hdac_ext_stream.c b/sound/hda/ext/hdac_ext_stream.c > index 023cc4cad5c1..626f3bb24c55 100644 > --- a/sound/hda/ext/hdac_ext_stream.c > +++ b/sound/hda/ext/hdac_ext_stream.c > @@ -104,12 +104,11 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_init_all); > */ > void snd_hdac_stream_free_all(struct hdac_ext_bus *ebus) > { > - struct hdac_stream *s; > + struct hdac_stream *s, *_s; > struct hdac_ext_stream *stream; > struct hdac_bus *bus = ebus_to_hbus(ebus); > > - while (!list_empty(&bus->stream_list)) { > - s = list_first_entry(&bus->stream_list, struct hdac_stream, list); > + list_for_each_entry_safe(s, _s, &bus->stream_list, list) { > stream = stream_to_hdac_ext_stream(s); > snd_hdac_ext_stream_decouple(ebus, stream, false); > list_del(&s->list); > -- > 1.9.1 >