aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-05-14 12:47:22 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-05-14 12:47:22 +0000
commit2d2a195bb7c6632d3b2c18dd480b62e936a7b134 (patch)
treeff191ff64cb7a59a2c21b5d577a0c477be2dd3d3
parentbcd7d53eb4d5e71611e1caef94b05f9da6cf101c (diff)
downloadxen-2d2a195bb7c6632d3b2c18dd480b62e936a7b134.tar.gz
xen-2d2a195bb7c6632d3b2c18dd480b62e936a7b134.tar.bz2
xen-2d2a195bb7c6632d3b2c18dd480b62e936a7b134.zip
bitkeeper revision 1.227 (3ec23adaE9CVdAKPJKPvT1rqaIUvLA)
processor.h, xen_block.c, schedule.c, network.c, domain.c, dom0_ops.c: Renamed free_task_struct to the more descriptive put_task_struct. Fixed several places where put_task_struct isn't called after 'find_domain_by_id'.
-rw-r--r--xen/common/dom0_ops.c82
-rw-r--r--xen/common/domain.c33
-rw-r--r--xen/common/network.c6
-rw-r--r--xen/common/schedule.c2
-rw-r--r--xen/drivers/block/xen_block.c8
-rw-r--r--xen/include/asm-i386/processor.h2
6 files changed, 67 insertions, 66 deletions
diff --git a/xen/common/dom0_ops.c b/xen/common/dom0_ops.c
index 52f8b4b1cd..89872251f7 100644
--- a/xen/common/dom0_ops.c
+++ b/xen/common/dom0_ops.c
@@ -31,7 +31,7 @@ static unsigned int get_domnr(void)
domnr = (domnr+1) & ((1<<20)-1);
if ( (p = find_domain_by_id(domnr)) == NULL )
return domnr;
- free_task_struct(p);
+ put_task_struct(p);
}
return 0;
@@ -79,10 +79,9 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
case DOM0_BUILDDOMAIN:
{
struct task_struct * p = find_domain_by_id(op.u.meminfo.domain);
- if ( (ret = final_setup_guestos(p, &op.u.meminfo)) != 0 )
- break;
- ret = p->domain;
- free_task_struct(p);
+ if ( (ret = final_setup_guestos(p, &op.u.meminfo)) == 0 )
+ ret = p->domain;
+ put_task_struct(p);
}
break;
@@ -90,18 +89,19 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
{
struct task_struct * p = find_domain_by_id(op.u.meminfo.domain);
ret = -EINVAL;
- if ( (p == NULL) || !(p->flags & PF_CONSTRUCTED) )
- break;
- wake_up(p);
- reschedule(p);
- ret = p->domain;
- free_task_struct(p);
+ if ( (p != NULL) && (p->flags & PF_CONSTRUCTED) )
+ {
+ wake_up(p);
+ reschedule(p);
+ ret = p->domain;
+ }
+ put_task_struct(p);
}
break;
case DOM0_STOPDOMAIN:
{
- ret = stop_other_domain (op.u.meminfo.domain);
+ ret = stop_other_domain (op.u.meminfo.domain);
}
break;
@@ -123,8 +123,8 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
goto exit_create;
if (op.u.newdomain.name[0]) {
- strncpy (p -> name, op.u.newdomain.name, MAX_DOMAIN_NAME);
- p -> name[MAX_DOMAIN_NAME - 1] = 0;
+ strncpy (p -> name, op.u.newdomain.name, MAX_DOMAIN_NAME);
+ p -> name[MAX_DOMAIN_NAME - 1] = 0;
}
ret = alloc_new_dom_mem(p, op.u.newdomain.memory_kb);
@@ -180,7 +180,6 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
unsigned long warpl = op.u.adjustdom.warpl;
unsigned long warpu = op.u.adjustdom.warpu;
-
if ( dom == IDLE_DOMAIN_ID )
{
ret = -EPERM;
@@ -211,34 +210,35 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
case DOM0_GETDOMAININFO:
{
- struct task_struct *p;
- u_long flags;
-
- p = idle0_task.next_task;
- read_lock_irqsave (&tasklist_lock, flags);
- do {
- if ((!is_idle_task (p)) && (p -> domain >= op.u.getdominfo.domain)) {
- break;
- }
- } while ((p = p -> next_task) != &idle0_task);
+ struct task_struct *p;
+ u_long flags;
+
+ p = idle0_task.next_task;
+ read_lock_irqsave (&tasklist_lock, flags);
+ do {
+ if ((!is_idle_task (p)) && (p -> domain >= op.u.getdominfo.domain))
+ break;
+ } while ((p = p -> next_task) != &idle0_task);
- if (p == &idle0_task) {
ret = -ESRCH;
- } else {
- op.u.getdominfo.domain = p -> domain;
- strcpy (op.u.getdominfo.name, p -> name);
- op.u.getdominfo.processor = p -> processor;
- op.u.getdominfo.has_cpu = p -> has_cpu;
- op.u.getdominfo.state = p -> state;
- op.u.getdominfo.hyp_events = p -> hyp_events;
- op.u.getdominfo.mcu_advance = p -> mcu_advance;
- op.u.getdominfo.pg_head = list_entry(p->pg_head.next,
- struct pfn_info, list) - frame_table;
- op.u.getdominfo.tot_pages = p -> tot_pages;
- }
- read_unlock_irqrestore (&tasklist_lock, flags);
- copy_to_user(u_dom0_op, &op, sizeof(op));
- break;
+ if ( p != &idle0_task )
+ {
+ op.u.getdominfo.domain = p->domain;
+ strcpy (op.u.getdominfo.name, p->name);
+ op.u.getdominfo.processor = p->processor;
+ op.u.getdominfo.has_cpu = p->has_cpu;
+ op.u.getdominfo.state = p->state;
+ op.u.getdominfo.hyp_events = p->hyp_events;
+ op.u.getdominfo.mcu_advance = p->mcu_advance;
+ op.u.getdominfo.pg_head =
+ list_entry(p->pg_head.next, struct pfn_info, list) -
+ frame_table;
+ op.u.getdominfo.tot_pages = p->tot_pages;
+ }
+
+ read_unlock_irqrestore(&tasklist_lock, flags);
+ copy_to_user(u_dom0_op, &op, sizeof(op));
+ break;
}
default:
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 3a83aa4d10..7938c2734b 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -139,7 +139,7 @@ void __kill_domain(struct task_struct *p)
}
else
{
- free_task_struct(p);
+ put_task_struct(p);
}
}
@@ -173,32 +173,33 @@ long kill_other_domain(unsigned int dom, int force)
guest_event_notify(cpu_mask);
}
- free_task_struct(p);
+ put_task_struct(p);
return 0;
}
void stop_domain(void)
{
- current -> state = TASK_SUSPENDED;
- clear_bit(_HYP_EVENT_STOP, &(current->hyp_events));
- schedule ();
+ current -> state = TASK_SUSPENDED;
+ clear_bit(_HYP_EVENT_STOP, &(current->hyp_events));
+ schedule ();
}
long stop_other_domain(unsigned int dom)
{
- unsigned long cpu_mask;
- struct task_struct *p;
-
- p = find_domain_by_id (dom);
- if ( p == NULL) return -ESRCH;
-
- if ( p -> state != TASK_SUSPENDED )
+ unsigned long cpu_mask;
+ struct task_struct *p;
+
+ p = find_domain_by_id (dom);
+ if ( p == NULL) return -ESRCH;
+
+ if ( p->state != TASK_SUSPENDED )
{
- cpu_mask = mark_hyp_event(p, _HYP_EVENT_STOP);
- hyp_event_notify(cpu_mask);
+ cpu_mask = mark_hyp_event(p, _HYP_EVENT_STOP);
+ hyp_event_notify(cpu_mask);
}
-
- return 0;
+
+ put_task_struct(p);
+ return 0;
}
unsigned int alloc_new_dom_mem(struct task_struct *p, unsigned int kbytes)
diff --git a/xen/common/network.c b/xen/common/network.c
index a2ef951936..242f6ccadf 100644
--- a/xen/common/network.c
+++ b/xen/common/network.c
@@ -149,7 +149,7 @@ net_vif_t *create_net_vif(int domain)
if ( new_vif != NULL )
kmem_cache_free(net_vif_cache, new_vif);
if ( p != NULL )
- free_task_struct(p);
+ put_task_struct(p);
return NULL;
}
@@ -190,7 +190,7 @@ void destroy_net_vif(net_vif_t *vif)
spin_unlock_irqrestore(&p->page_lock, flags);
kmem_cache_free(net_vif_cache, vif);
- free_task_struct(p);
+ put_task_struct(p);
}
void unlink_net_vif(net_vif_t *vif)
@@ -232,7 +232,7 @@ void vif_query(vif_query_t *vq)
copy_to_user(vq->buf, buf, strlen(buf) + 1);
- free_task_struct(p);
+ put_task_struct(p);
}
/* ----[ Net Rule Functions ]-----------------------------------------------*/
diff --git a/xen/common/schedule.c b/xen/common/schedule.c
index 6536bf1ba5..900728175f 100644
--- a/xen/common/schedule.c
+++ b/xen/common/schedule.c
@@ -477,7 +477,7 @@ asmlinkage void schedule(void)
prev->policy &= ~SCHED_YIELD;
if ( prev->state == TASK_DYING )
- free_task_struct(prev);
+ put_task_struct(prev);
same_process:
/* update the domains notion of time */
diff --git a/xen/drivers/block/xen_block.c b/xen/drivers/block/xen_block.c
index aedbe3abcd..07738f98bf 100644
--- a/xen/drivers/block/xen_block.c
+++ b/xen/drivers/block/xen_block.c
@@ -129,7 +129,7 @@ static void remove_from_blkdev_list(struct task_struct *p)
{
list_del(&p->blkdev_list);
p->blkdev_list.next = NULL;
- free_task_struct(p);
+ put_task_struct(p);
}
spin_unlock_irqrestore(&io_schedule_list_lock, flags);
}
@@ -169,7 +169,7 @@ static void io_schedule(unsigned long unused)
remove_from_blkdev_list(p);
if ( do_block_io_op_domain(p, BATCH_PER_DOMAIN) )
add_to_blkdev_list_tail(p);
- free_task_struct(p);
+ put_task_struct(p);
}
/* Push the batch through to disc. */
@@ -219,7 +219,7 @@ static void end_block_io_op(struct buffer_head *bh, int uptodate)
{
make_response(pending_req->domain, pending_req->id,
pending_req->operation, pending_req->status);
- free_task_struct(pending_req->domain);
+ put_task_struct(pending_req->domain);
spin_lock_irqsave(&pend_prod_lock, flags);
pending_ring[pending_prod] = pending_req - pending_reqs;
PENDREQ_IDX_INC(pending_prod);
@@ -768,7 +768,7 @@ void unlink_blkdev_info(struct task_struct *p)
{
list_del(&p->blkdev_list);
p->blkdev_list.next = (void *)0xdeadbeef; /* prevent reinsertion */
- free_task_struct(p);
+ put_task_struct(p);
}
spin_unlock_irqrestore(&io_schedule_list_lock, flags);
}
diff --git a/xen/include/asm-i386/processor.h b/xen/include/asm-i386/processor.h
index 7a1afac68a..80ec83e745 100644
--- a/xen/include/asm-i386/processor.h
+++ b/xen/include/asm-i386/processor.h
@@ -432,7 +432,7 @@ unsigned long get_wchan(struct task_struct *p);
#define THREAD_SIZE (2*PAGE_SIZE)
#define alloc_task_struct() \
((struct task_struct *) __get_free_pages(GFP_KERNEL,1))
-#define free_task_struct(_p) \
+#define put_task_struct(_p) \
if ( atomic_dec_and_test(&(_p)->refcnt) ) release_task(_p)
#define get_task_struct(_p) \
atomic_inc(&(_p)->refcnt)