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-23 19:38:32
Also in: linux-serial, lkml, netdev

Lino Sanfilippo [off-list ref] hat am 23. Mai 2017 um 20:16 geschrieben:


Hi,

On 23.05.2017 15:12, Stefan Wahren wrote:

quoted
+}
+
+static void qca_uart_remove(struct serdev_device *serdev)
+{
+	struct qcauart *qca = serdev_device_get_drvdata(serdev);
+
+	netif_carrier_off(qca->net_dev);
+	cancel_work_sync(&qca->tx_work);
+	unregister_netdev(qca->net_dev);
Note that it is still possible that the tx work is queued right after cancel_work_sync()
returned and before the net device is unregistered (and thus the check for the net device
being up at the beginning of the tx work function is passed and the function is executed).
Even if the carrier is off? Since i see this pattern in some drivers, can you please point me to a reference like a thread or something else?
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?
Regards,
Lino 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help