Hello Eric, On Mon, Jul 01, 2019 at 05:54:41PM +0200, Eric Dumazet wrote: > On 7/1/19 8:12 AM, Willem de Bruijn wrote: > > On Mon, Jul 1, 2019 at 6:05 AM Antoine Tenart > > <antoine.ten...@bootlin.com> wrote: > >> > >> void ocelot_deinit(struct ocelot *ocelot) > >> { > >> + struct ocelot_port *port; > >> + struct ocelot_skb *entry; > >> + struct list_head *pos; > >> + int i; > >> + > >> destroy_workqueue(ocelot->stats_queue); > >> mutex_destroy(&ocelot->stats_lock); > >> ocelot_ace_deinit(); > >> + > >> + for (i = 0; i < ocelot->num_phys_ports; i++) { > >> + port = ocelot->ports[i]; > >> + > >> + list_for_each(pos, &port->skbs) { > >> + entry = list_entry(pos, struct ocelot_skb, head); > >> + > >> + list_del(pos); > > > > list_for_each_safe > > Also entry->skb seems to be leaked ? > > dev_kfree_skb_any(entry->skb) seems to be needed
That's right, thanks for spotting this! Thanks, Antoine -- Antoine Ténart, Bootlin Embedded Linux and Kernel engineering https://bootlin.com