aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/xen/softirq.h
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-04-15 10:19:58 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-04-15 10:19:58 +0100
commita29af79e4ecf404bbd084b7b39cf139b963982ea (patch)
tree220366dfa75fcc2ed737c19a733c1dd14f8809a1 /xen/include/xen/softirq.h
parent8a7a02ee55bfd1861ae79d191215c8ccd79c3d78 (diff)
downloadxen-a29af79e4ecf404bbd084b7b39cf139b963982ea.tar.gz
xen-a29af79e4ecf404bbd084b7b39cf139b963982ea.tar.bz2
xen-a29af79e4ecf404bbd084b7b39cf139b963982ea.zip
Change tasklet implementation so that tasklet_kill() does not have to
busy-wait for softirq work to start. This reduces the possibility of deadlocks, but the implementation is now less efficient. For the current few users of tasklets this does not matter. Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/include/xen/softirq.h')
-rw-r--r--xen/include/xen/softirq.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/xen/include/xen/softirq.h b/xen/include/xen/softirq.h
index dbf4606261..4fa7a39b0c 100644
--- a/xen/include/xen/softirq.h
+++ b/xen/include/xen/softirq.h
@@ -59,7 +59,7 @@ static inline void raise_softirq(unsigned int nr)
*/
struct tasklet
{
- struct tasklet *next;
+ struct list_head list;
bool_t is_scheduled;
bool_t is_running;
void (*func)(unsigned long);
@@ -67,7 +67,7 @@ struct tasklet
};
#define DECLARE_TASKLET(name, func, data) \
- struct tasklet name = { NULL, 0, 0, func, data }
+ struct tasklet name = { LIST_HEAD_INIT(name.list), 0, 0, func, data }
void tasklet_schedule(struct tasklet *t);
void tasklet_kill(struct tasklet *t);