Thread (31 messages) 31 messages, 3 authors, 2017-05-25

Re: [PATCH v6 net-next 17/17] net: qualcomm: add QCA7000 UART driver

From: Stefan Wahren <hidden>
Date: 2017-05-24 09:07:27
Also in: linux-serial, lkml, netdev

Am 23.05.2017 um 23:01 schrieb Lino Sanfilippo:
On 23.05.2017 21:38, Stefan Wahren wrote:
quoted
quoted
Lino Sanfilippo [off-list ref] hat am 23. Mai 2017 um 20:16 geschrieben:

I suggest to avoid this possible race by first unregistering the netdevice and then 
calling cancel_work_sync().
What makes you sure that's safe to unregister the netdev while the tx work queue is possibly active?
unregister_netdevice() calls netdev_close() if the interface is still up. netdev_close() calls flush_work()
so the unregistration is delayed until the tx work function is finished. Furthermore both close() and
tx work are synchronized by means of the qca->lock which also guarantees that unregister_netdevice() wont
be finished until the tx work is done.
Thanks for the explanation. I suspect there could be the same race
between serdev_device_close() and the tx work queue.

So i would propose a variant of your original suggestion:

unregister_netdev(qca->net_dev);

/* Flush any pending characters in the driver. */
serdev_device_close(serdev);
cancel_work_sync(&qca->tx_work);

Since we have the same pattern in the error path of the probe function,
the same applies there.

Stefan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help