Skip to content
Snippets Groups Projects
Commit b4e7d77a authored by Laura Marilena Rientsma's avatar Laura Marilena Rientsma
Browse files

moved the rx thread create and stop functions to the init and exit, multiple cards works now

parent 63c3cbed
No related branches found
No related tags found
1 merge request!1Removed vmk180_serial_demo ip core, and use versal_network_device ip instead,...
......@@ -203,7 +203,6 @@ struct flxnet_peer *find_peer_for_netdev(struct net_device *dev) {
return return_peer;
}
// removes the peer from the network
void flxnet_remove_peer(struct flxnet_peer *peer) {
int rv;
......@@ -631,8 +630,8 @@ int send_recv_thread(void *data) {
}
}
if (message_level & NETIF_MSG_INTR)
pr_info("flxnet: wake up worker thread %s\n", __FUNCTION__);
//if (message_level & NETIF_MSG_INTR)
// pr_info("flxnet: wake up worker thread %s\n", __FUNCTION__);
tx_all_packets(peer);
......@@ -663,19 +662,6 @@ int open(struct net_device *dev) {
mutex_lock(&flxnet_mutex);
tx_queue_reset(dev); // clear TX queue
// enable RX side
if (message_level & NETIF_MSG_IFUP)
pr_info("flxnet_dev: initialize RX thread and timer\n");
recv_task = kthread_create(send_recv_thread, NULL, "flxnet RX thread");
if (IS_ERR(recv_task)) {
mutex_unlock(&flxnet_mutex);
pr_err("flxnet_dev: failed to create RX thread in %s\n", __FUNCTION__);
return -1;
}
wake_up_process(recv_task);
mod_timer(&recv_timer, jiffies + msecs_to_jiffies(POLL_PERIOD_MS));
// enable TX side
if (message_level & NETIF_MSG_IFUP)
pr_info("flxnet_dev: start netif queue\n");
......@@ -685,16 +671,9 @@ int open(struct net_device *dev) {
return 0;
}
int stop(struct net_device *dev) {
mutex_lock(&flxnet_mutex);
// disable RX side
if (message_level & NETIF_MSG_IFDOWN)
pr_info("flxnet_dev: stop RX thread\n");
wake_up_interruptible(&recv_queue);
kthread_stop(recv_task);
del_timer_sync(&recv_timer);
// disable TX side
if (message_level & NETIF_MSG_IFDOWN)
pr_info("flxnet_dev: stop netif queue\n");
......@@ -1036,11 +1015,32 @@ int __init flxnet_dev_init(void) {
init_waitqueue_head(&recv_queue);
timer_setup(&recv_timer, recv_timer_function, 0);
INIT_LIST_HEAD(&peer_list);
// enable RX side
if (message_level & NETIF_MSG_IFUP)
pr_info("flxnet_dev: initialize RX thread and timer\n");
recv_task = kthread_create(send_recv_thread, NULL, "flxnet RX thread");
if (IS_ERR(recv_task)) {
pr_err("flxnet_dev: failed to create RX thread in %s\n", __FUNCTION__);
return -1;
}
wake_up_process(recv_task);
mod_timer(&recv_timer, jiffies + msecs_to_jiffies(POLL_PERIOD_MS));
return 0;
}
void __exit flxnet_dev_exit(void) {
pr_info("flxnet_dev: removing %s driver\n", DRV_NAME);
// disable RX side
if (message_level & NETIF_MSG_IFDOWN)
pr_info("flxnet_dev: stop RX thread\n");
wake_up_interruptible(&recv_queue);
kthread_stop(recv_task);
del_timer_sync(&recv_timer);
mutex_destroy(&peer_mutex);
mutex_destroy(&flxnet_mutex);
}
......
......@@ -102,7 +102,6 @@ static void flxnet_pcie_exit(void) {
pr_info("flxnet_pcie: list not empty - deconfiguring PCIe devices\n");
list_for_each_entry_safe(fdev, tmp, &fdev_list, fdev_entry) {
flxnet_remove_peer(fdev->peer);
list_del(&fdev->fdev_entry);
deconfigure_device(fdev);
}
}
......@@ -228,6 +227,7 @@ static void deconfigure_device(struct pcie_flx_serial_device *fdev) {
pci_dev_put(pdev);
pci_disable_device(pdev);
pci_release_region(pdev, bar_idx);
list_del(&fdev->fdev_entry);
kfree(fdev);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment