|
Lines 106-112
Link Here
|
| 106 |
static int hard_error_issued = FALSE; |
106 |
static int hard_error_issued = FALSE; |
| 107 |
static atomic_t resetting_ctrl = ATOMIC_INIT (0); |
107 |
static atomic_t resetting_ctrl = ATOMIC_INIT (0); |
| 108 |
static struct work_struct closing_work; |
108 |
static struct work_struct closing_work; |
| 109 |
static void closing_worker (void *); |
109 |
static void closing_worker (struct work_struct *); |
| 110 |
static atomic_t closing_worker_running = ATOMIC_INIT (0); |
110 |
static atomic_t closing_worker_running = ATOMIC_INIT (0); |
| 111 |
static void (* close_func) (void *) = NULL; |
111 |
static void (* close_func) (void *) = NULL; |
| 112 |
static void * close_data = NULL; |
112 |
static void * close_data = NULL; |
|
Lines 341-348
Link Here
|
| 341 |
|
341 |
|
| 342 |
/*---------------------------------------------------------------------------*\ |
342 |
/*---------------------------------------------------------------------------*\ |
| 343 |
\*---------------------------------------------------------------------------*/ |
343 |
\*---------------------------------------------------------------------------*/ |
| 344 |
static void closing_worker (void * ctx) { |
344 |
static void closing_worker (struct work_struct *work) { |
| 345 |
card_p card = (card_p) ctx; |
345 |
card_p card = capi_card; |
| 346 |
|
346 |
|
| 347 |
DECLARE_WAIT_QUEUE_HEAD(close_wait); |
347 |
DECLARE_WAIT_QUEUE_HEAD(close_wait); |
| 348 |
|
348 |
|
|
Lines 434-440
Link Here
|
| 434 |
close_func = func; |
434 |
close_func = func; |
| 435 |
close_data = data; |
435 |
close_data = data; |
| 436 |
|
436 |
|
| 437 |
INIT_WORK (&closing_work, closing_worker, capi_card); |
437 |
INIT_WORK (&closing_work, closing_worker); |
| 438 |
schedule_work (&closing_work); |
438 |
schedule_work (&closing_work); |
| 439 |
LOG("Worker scheduled.\n"); |
439 |
LOG("Worker scheduled.\n"); |
| 440 |
} /* start_closing_worker */ |
440 |
} /* start_closing_worker */ |