diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2003-05-14 12:47:22 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2003-05-14 12:47:22 +0000 |
commit | 2d2a195bb7c6632d3b2c18dd480b62e936a7b134 (patch) | |
tree | ff191ff64cb7a59a2c21b5d577a0c477be2dd3d3 | |
parent | bcd7d53eb4d5e71611e1caef94b05f9da6cf101c (diff) | |
download | xen-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.c | 82 | ||||
-rw-r--r-- | xen/common/domain.c | 33 | ||||
-rw-r--r-- | xen/common/network.c | 6 | ||||
-rw-r--r-- | xen/common/schedule.c | 2 | ||||
-rw-r--r-- | xen/drivers/block/xen_block.c | 8 | ||||
-rw-r--r-- | xen/include/asm-i386/processor.h | 2 |
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) |