Skip to content

Commit

Permalink
[PATCH] libertas: remove thread.h and make kthread usage clearer
Browse files Browse the repository at this point in the history
Remove the thread.h abstractions and opencode kthread stuff
to make it clearer.

Signed-off-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Dan Williams authored and David S. Miller committed Oct 10, 2007
1 parent 2ca10e6 commit fe33615
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 89 deletions.
4 changes: 2 additions & 2 deletions drivers/net/wireless/libertas/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1134,7 +1134,7 @@ int libertas_prepare_and_send_command(wlan_private * priv,
lbs_deb_cmd("PREP_CMD: No free cmdnode\n");

/* Wake up main thread to execute next command */
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);
ret = -1;
goto done;
}
Expand Down Expand Up @@ -1402,7 +1402,7 @@ int libertas_prepare_and_send_command(wlan_private * priv,

libertas_queue_cmd(adapter, cmdnode, 1);
adapter->nr_cmd_pending++;
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

if (wait_option & CMD_OPTION_WAITFORRSP) {
lbs_deb_cmd("PREP_CMD: Wait for CMD response\n");
Expand Down
26 changes: 13 additions & 13 deletions drivers/net/wireless/libertas/debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ static ssize_t libertas_lowrssi_read(struct file *file, char __user *userbuf,
event->action = cpu_to_le16(CMD_ACT_GET);
pcmdptr->size = cpu_to_le16(sizeof(*event) + S_DS_GEN);
libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -496,7 +496,7 @@ static u16 libertas_get_events_bitmap(wlan_private *priv)
event->action = cpu_to_le16(CMD_ACT_GET);
pcmdptr->size = cpu_to_le16(sizeof(*event) + S_DS_GEN);
libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -575,7 +575,7 @@ static ssize_t libertas_lowrssi_write(struct file *file,
event->events = cpu_to_le16(event_bitmap);

libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -628,7 +628,7 @@ static ssize_t libertas_lowsnr_read(struct file *file, char __user *userbuf,
event->action = cpu_to_le16(CMD_ACT_GET);
pcmdptr->size = cpu_to_le16(sizeof(*event) + S_DS_GEN);
libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -727,7 +727,7 @@ static ssize_t libertas_lowsnr_write(struct file *file,
event->events = cpu_to_le16(event_bitmap);

libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -781,7 +781,7 @@ static ssize_t libertas_failcount_read(struct file *file, char __user *userbuf,
event->action = cpu_to_le16(CMD_ACT_GET);
pcmdptr->size = cpu_to_le16(sizeof(*event) + S_DS_GEN);
libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -879,7 +879,7 @@ static ssize_t libertas_failcount_write(struct file *file,
event->events = cpu_to_le16(event_bitmap);

libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -932,7 +932,7 @@ static ssize_t libertas_bcnmiss_read(struct file *file, char __user *userbuf,
event->action = cpu_to_le16(CMD_ACT_GET);
pcmdptr->size = cpu_to_le16(sizeof(*event) + S_DS_GEN);
libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -1029,7 +1029,7 @@ static ssize_t libertas_bcnmiss_write(struct file *file,
event->events = cpu_to_le16(event_bitmap);

libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -1082,7 +1082,7 @@ static ssize_t libertas_highrssi_read(struct file *file, char __user *userbuf,
event->action = cpu_to_le16(CMD_ACT_GET);
pcmdptr->size = cpu_to_le16(sizeof(*event) + S_DS_GEN);
libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -1181,7 +1181,7 @@ static ssize_t libertas_highrssi_write(struct file *file,
event->events = cpu_to_le16(event_bitmap);

libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -1232,7 +1232,7 @@ static ssize_t libertas_highsnr_read(struct file *file, char __user *userbuf,
event->action = cpu_to_le16(CMD_ACT_GET);
pcmdptr->size = cpu_to_le16(sizeof(*event) + S_DS_GEN);
libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down Expand Up @@ -1331,7 +1331,7 @@ static ssize_t libertas_highsnr_write(struct file *file,
event->events = cpu_to_le16(event_bitmap);

libertas_queue_cmd(adapter, pcmdnode, 1);
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

/* Sleep until response is generated by FW */
wait_event_interruptible(pcmdnode->cmdwait_q,
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/wireless/libertas/dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

#include "defs.h"
#include "scan.h"
#include "thread.h"

extern struct ethtool_ops libertas_ethtool_ops;

Expand Down Expand Up @@ -146,7 +145,8 @@ struct _wlan_private {
struct device *hotplug_device;

/** thread to service interrupts */
struct wlan_thread mainthread;
struct task_struct *main_thread;
wait_queue_head_t waitq;

struct delayed_work assoc_work;
struct workqueue_struct *assoc_thread;
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/libertas/fw.c
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ static void command_timer_fn(unsigned long data)
lbs_deb_fw("re-sending same command because of timeout\n");
libertas_queue_cmd(adapter, ptempnode, 0);

wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

return;
}
2 changes: 1 addition & 1 deletion drivers/net/wireless/libertas/if_usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ static void if_usb_write_bulk_callback(struct urb *urb)
priv->dnld_sent = DNLD_RES_RECEIVED;
/* Wake main thread if commands are pending */
if (!adapter->cur_cmd)
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);
if ((adapter->connect_status == LIBERTAS_CONNECTED)) {
netif_wake_queue(dev);
netif_wake_queue(priv->mesh_dev);
Expand Down
36 changes: 18 additions & 18 deletions drivers/net/wireless/libertas/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <linux/etherdevice.h>
#include <linux/netdevice.h>
#include <linux/if_arp.h>
#include <linux/kthread.h>

#include <net/iw_handler.h>
#include <net/ieee80211.h>
Expand Down Expand Up @@ -438,7 +439,7 @@ static void wlan_tx_timeout(struct net_device *dev)
priv->adapter->eventcause = 0x01000000;
libertas_send_tx_feedback(priv);
} else
wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);
} else if (priv->adapter->connect_status == LIBERTAS_CONNECTED) {
netif_wake_queue(priv->dev);
netif_wake_queue(priv->mesh_dev);
Expand Down Expand Up @@ -599,28 +600,25 @@ static void wlan_set_multicast_list(struct net_device *dev)
* @param data A pointer to wlan_thread structure
* @return 0
*/
static int wlan_service_main_thread(void *data)
static int libertas_thread(void *data)
{
struct wlan_thread *thread = data;
wlan_private *priv = thread->priv;
struct net_device *dev = data;
wlan_private *priv = dev->priv;
wlan_adapter *adapter = priv->adapter;
wait_queue_t wait;
u8 ireg = 0;

lbs_deb_enter(LBS_DEB_THREAD);

wlan_activate_thread(thread);

init_waitqueue_entry(&wait, current);

set_freezable();
for (;;) {
lbs_deb_thread( "main-thread 111: intcounter=%d "
"currenttxskb=%p dnld_sent=%d\n",
adapter->intcounter,
adapter->currenttxskb, priv->dnld_sent);

add_wait_queue(&thread->waitq, &wait);
add_wait_queue(&priv->waitq, &wait);
set_current_state(TASK_INTERRUPTIBLE);
spin_lock_irq(&adapter->driver_lock);
if ((adapter->psstate == PS_STATE_SLEEP) ||
Expand All @@ -643,7 +641,7 @@ static int wlan_service_main_thread(void *data)
adapter->currenttxskb, priv->dnld_sent);

set_current_state(TASK_RUNNING);
remove_wait_queue(&thread->waitq, &wait);
remove_wait_queue(&priv->waitq, &wait);
try_to_freeze();

lbs_deb_thread("main-thread 333: intcounter=%d currenttxskb=%p "
Expand Down Expand Up @@ -758,7 +756,6 @@ static int wlan_service_main_thread(void *data)
del_timer(&adapter->command_timer);
adapter->nr_cmd_pending = 0;
wake_up_all(&adapter->cmd_pending);
wlan_deactivate_thread(thread);

lbs_deb_leave(LBS_DEB_THREAD);
return 0;
Expand Down Expand Up @@ -841,10 +838,13 @@ int libertas_activate_card(wlan_private *priv, char *fw_name)

lbs_deb_enter(LBS_DEB_MAIN);

lbs_deb_thread("Starting kthread...\n");
priv->mainthread.priv = priv;
wlan_create_thread(wlan_service_main_thread,
&priv->mainthread, "wlan_main_service");
lbs_deb_thread("Starting main thread...\n");
init_waitqueue_head(&priv->waitq);
priv->main_thread = kthread_run(libertas_thread, dev, "libertas_main");
if (IS_ERR(priv->main_thread)) {
lbs_deb_thread("Error creating main thread.\n");
goto done;
}

priv->assoc_thread =
create_singlethread_workqueue("libertas_assoc");
Expand Down Expand Up @@ -884,8 +884,8 @@ int libertas_activate_card(wlan_private *priv, char *fw_name)
err_registerdev:
destroy_workqueue(priv->assoc_thread);
/* Stop the thread servicing the interrupts */
wake_up_interruptible(&priv->mainthread.waitq);
wlan_terminate_thread(&priv->mainthread);
wake_up_interruptible(&priv->waitq);
kthread_stop(priv->main_thread);
done:
lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret);
return ret;
Expand Down Expand Up @@ -1017,7 +1017,7 @@ int libertas_remove_card(wlan_private *priv)
adapter->surpriseremoved = 1;

/* Stop the thread servicing the interrupts */
wlan_terminate_thread(&priv->mainthread);
kthread_stop(priv->main_thread);

libertas_debugfs_remove_one(priv);

Expand Down Expand Up @@ -1151,7 +1151,7 @@ void libertas_interrupt(struct net_device *dev)
netif_wake_queue(priv->mesh_dev);
}

wake_up_interruptible(&priv->mainthread.waitq);
wake_up_interruptible(&priv->waitq);

lbs_deb_leave(LBS_DEB_THREAD);
}
Expand Down
52 changes: 0 additions & 52 deletions drivers/net/wireless/libertas/thread.h

This file was deleted.

0 comments on commit fe33615

Please sign in to comment.