diff --git a/net/neuron/channel/ch_haven_recv.c b/net/neuron/channel/ch_haven_recv.c index 1422491b9bde..2359343fa009 100644 --- a/net/neuron/channel/ch_haven_recv.c +++ b/net/neuron/channel/ch_haven_recv.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/* Copyright (c) 2020 The Linux Foundation. All rights reserved. */ +/* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. */ #include #include @@ -479,6 +479,7 @@ static int channel_hh_probe(struct neuron_channel *cdev) if (!priv) return -ENOMEM; priv->dev = cdev; + init_waitqueue_head(&priv->wait_q); ret = of_property_read_u32(node, "haven-label", &priv->haven_label); if (ret) { @@ -507,8 +508,6 @@ static int channel_hh_probe(struct neuron_channel *cdev) dev_err(dev, "failed to get haven rx dbl %d\n", ret); goto fail_rx_dbl; } - - init_waitqueue_head(&priv->wait_q); /* Start the thread for syncing with the sender. */ priv->sync_thread = kthread_run(channel_sync_thread, priv, "recv_sync_thread"); diff --git a/net/neuron/channel/ch_haven_send.c b/net/neuron/channel/ch_haven_send.c index 37ab21e15495..d0bd569b789b 100644 --- a/net/neuron/channel/ch_haven_send.c +++ b/net/neuron/channel/ch_haven_send.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/* Copyright (c) 2020 The Linux Foundation. All rights reserved. */ +/* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. */ #include #include @@ -464,6 +464,7 @@ static int channel_hh_probe(struct neuron_channel *cdev) if (!priv) return -ENOMEM; priv->dev = cdev; + init_waitqueue_head(&priv->wait_q); ret = of_property_read_u32(node, "haven-label", &priv->haven_label); if (ret) { @@ -490,8 +491,6 @@ static int channel_hh_probe(struct neuron_channel *cdev) dev_err(dev, "failed to get haven rx dbl %d\n", ret); goto fail_rx_dbl; } - - init_waitqueue_head(&priv->wait_q); /* Start the thread for syncing with the receiver. */ priv->sync_thread = kthread_run(channel_sync_thread, priv, "send_sync_thread"); diff --git a/net/qrtr/haven.c b/net/qrtr/haven.c index 8065eb404865..b37e779c7e7f 100644 --- a/net/qrtr/haven.c +++ b/net/qrtr/haven.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/* Copyright (c) 2020, The Linux Foundation. All rights reserved. */ +/* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "%s: " fmt, __func__ @@ -603,6 +603,11 @@ static int qrtr_haven_probe(struct platform_device *pdev) } INIT_WORK(&qdev->work, qrtr_haven_retry_work); + qdev->ep.xmit = qrtr_haven_send; + ret = qrtr_endpoint_register(&qdev->ep, QRTR_EP_NET_ID_AUTO, false); + if (ret) + goto register_fail; + qdev->rx_dbl = hh_dbl_rx_register(dbl_label, qrtr_haven_cb, qdev); if (IS_ERR_OR_NULL(qdev->rx_dbl)) { ret = PTR_ERR(qdev->rx_dbl); @@ -610,19 +615,14 @@ static int qrtr_haven_probe(struct platform_device *pdev) goto fail_rx_dbl; } - qdev->ep.xmit = qrtr_haven_send; - ret = qrtr_endpoint_register(&qdev->ep, QRTR_EP_NET_ID_AUTO, false); - if (ret) - goto register_fail; - if (haven_rx_avail(&qdev->rx_pipe)) qrtr_haven_read(qdev); return 0; -register_fail: - hh_dbl_rx_unregister(qdev->rx_dbl); fail_rx_dbl: + qrtr_endpoint_unregister(&qdev->ep); +register_fail: cancel_work_sync(&qdev->work); hh_dbl_tx_unregister(qdev->tx_dbl);