Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 220269
b: refs/heads/master
c: 860708d
h: refs/heads/master
i:
  220267: 5979064
v: v3
  • Loading branch information
Jason Cooper authored and Greg Kroah-Hartman committed Oct 10, 2010
1 parent e9ff6d3 commit d885eef
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 839fad996bf0eba85c0c6aa67ba8d89d051b6749
refs/heads/master: 860708d9c8259e087f39505995d4d54b2e499fb9
29 changes: 17 additions & 12 deletions trunk/drivers/staging/brcm80211/brcmfmac/dhd_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/kthread.h>
#include <linux/slab.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
Expand Down Expand Up @@ -239,9 +240,8 @@ typedef struct dhd_info {
/* Thread based operation */
bool threads_only;
struct semaphore sdsem;
long watchdog_pid;
struct task_struct *watchdog_tsk;
struct semaphore watchdog_sem;
struct completion watchdog_exited;
long dpc_pid;
struct semaphore dpc_sem;
struct completion dpc_exited;
Expand Down Expand Up @@ -1306,10 +1306,10 @@ static int dhd_watchdog_thread(void *data)
}
#endif /* DHD_SCHED */

DAEMONIZE("dhd_watchdog");

/* Run until signal received */
while (1) {
if (kthread_should_stop())
break;
if (down_interruptible(&dhd->watchdog_sem) == 0) {
if (dhd->pub.dongle_reset == FALSE) {
WAKE_LOCK(&dhd->pub, WAKE_LOCK_WATCHDOG);
Expand All @@ -1324,14 +1324,14 @@ static int dhd_watchdog_thread(void *data)
}

WAKE_LOCK_DESTROY(&dhd->pub, WAKE_LOCK_WATCHDOG);
complete_and_exit(&dhd->watchdog_exited, 0);
return 0;
}

static void dhd_watchdog(unsigned long data)
{
dhd_info_t *dhd = (dhd_info_t *) data;

if (dhd->watchdog_pid >= 0) {
if (dhd->watchdog_tsk) {
up(&dhd->watchdog_sem);

/* Reschedule the watchdog */
Expand Down Expand Up @@ -2004,10 +2004,15 @@ dhd_pub_t *dhd_attach(osl_t *osh, struct dhd_bus *bus, uint bus_hdrlen)
if (dhd_dpc_prio >= 0) {
/* Initialize watchdog thread */
sema_init(&dhd->watchdog_sem, 0);
init_completion(&dhd->watchdog_exited);
dhd->watchdog_pid = kernel_thread(dhd_watchdog_thread, dhd, 0);
dhd->watchdog_tsk = kthread_run(dhd_watchdog_thread, dhd,
"dhd_watchdog");
if (IS_ERR(dhd->watchdog_tsk)) {
printk(KERN_WARNING
"dhd_watchdog thread failed to start\n");
dhd->watchdog_tsk = NULL;
}
} else {
dhd->watchdog_pid = -1;
dhd->watchdog_tsk = NULL;
}

/* Set up the bottom half handler */
Expand Down Expand Up @@ -2334,9 +2339,9 @@ void dhd_detach(dhd_pub_t *dhdp)
unregister_netdev(ifp->net);
}

if (dhd->watchdog_pid >= 0) {
KILL_PROC(dhd->watchdog_pid, SIGTERM);
wait_for_completion(&dhd->watchdog_exited);
if (dhd->watchdog_tsk) {
kthread_stop(dhd->watchdog_tsk);
dhd->watchdog_tsk = NULL;
}

if (dhd->dpc_pid >= 0) {
Expand Down

0 comments on commit d885eef

Please sign in to comment.