On Fri 01 Jun 16:32 PDT 2018, Srinivas Kandagatla wrote: > @@ -1380,11 +1380,13 @@ static void qcom_smd_edge_release(struct device *dev) > { > struct qcom_smd_channel *channel; > struct qcom_smd_edge *edge = to_smd_edge(dev); > + struct list_head *this, *tmp; > > - list_for_each_entry(channel, &edge->channels, list) { > - SET_RX_CHANNEL_INFO(channel, state, SMD_CHANNEL_CLOSED); > - SET_RX_CHANNEL_INFO(channel, head, 0); > - SET_RX_CHANNEL_INFO(channel, tail, 0); > + list_for_each_safe(this, tmp, &edge->channels) { > + channel = list_entry(this, struct qcom_smd_channel, list); Is there a reason not to use list_for_each_entry_safe()? > + list_del(&channel->list); > + kfree(channel->name); > + kfree(channel); Regards, Bjorn