[process] Make it safe to call process_add() multiple times
This commit is contained in:
parent
46073f1239
commit
04878ef745
|
@ -37,11 +37,18 @@ static LIST_HEAD ( run_queue );
|
||||||
* Add process to process list
|
* Add process to process list
|
||||||
*
|
*
|
||||||
* @v process Process
|
* @v process Process
|
||||||
|
*
|
||||||
|
* It is safe to call process_add() multiple times; further calls will
|
||||||
|
* have no effect.
|
||||||
*/
|
*/
|
||||||
void process_add ( struct process *process ) {
|
void process_add ( struct process *process ) {
|
||||||
|
if ( list_empty ( &process->list ) ) {
|
||||||
DBGC ( process, "PROCESS %p starting\n", process );
|
DBGC ( process, "PROCESS %p starting\n", process );
|
||||||
ref_get ( process->refcnt );
|
ref_get ( process->refcnt );
|
||||||
list_add_tail ( &process->list, &run_queue );
|
list_add_tail ( &process->list, &run_queue );
|
||||||
|
} else {
|
||||||
|
DBGC ( process, "PROCESS %p already started\n", process );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -47,6 +47,7 @@ static inline __attribute__ (( always_inline )) void
|
||||||
process_init_stopped ( struct process *process,
|
process_init_stopped ( struct process *process,
|
||||||
void ( * step ) ( struct process *process ),
|
void ( * step ) ( struct process *process ),
|
||||||
struct refcnt *refcnt ) {
|
struct refcnt *refcnt ) {
|
||||||
|
INIT_LIST_HEAD ( &process->list );
|
||||||
process->step = step;
|
process->step = step;
|
||||||
process->refcnt = refcnt;
|
process->refcnt = refcnt;
|
||||||
}
|
}
|
||||||
|
|
|
@ -802,6 +802,7 @@ static void ib_step ( struct process *process __unused ) {
|
||||||
|
|
||||||
/** Infiniband event queue process */
|
/** Infiniband event queue process */
|
||||||
struct process ib_process __permanent_process = {
|
struct process ib_process __permanent_process = {
|
||||||
|
.list = LIST_HEAD_INIT ( ib_process.list ),
|
||||||
.step = ib_step,
|
.step = ib_step,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -625,5 +625,6 @@ static void net_step ( struct process *process __unused ) {
|
||||||
|
|
||||||
/** Networking stack process */
|
/** Networking stack process */
|
||||||
struct process net_process __permanent_process = {
|
struct process net_process __permanent_process = {
|
||||||
|
.list = LIST_HEAD_INIT ( net_process.list ),
|
||||||
.step = net_step,
|
.step = net_step,
|
||||||
};
|
};
|
||||||
|
|
|
@ -187,5 +187,6 @@ static void retry_step ( struct process *process __unused ) {
|
||||||
|
|
||||||
/** Retry timer process */
|
/** Retry timer process */
|
||||||
struct process retry_process __permanent_process = {
|
struct process retry_process __permanent_process = {
|
||||||
|
.list = LIST_HEAD_INIT ( retry_process.list ),
|
||||||
.step = retry_step,
|
.step = retry_step,
|
||||||
};
|
};
|
||||||
|
|
Reference in New Issue