Starts a previously created kernel-only thread.
#include <sys/thread.h>
int kthread_start ( tid, i_func, i_data_addr, i_data_len, i_stackaddr,
i_sigmask)
tid_t tid;
int (*i_func) (void *);
void *i_data_addr;
size_t i_data_len;
void *i_stackaddr;
sigset_t *i_sigmask;
Item | Description |
---|---|
tid | Specifies the kernel-only thread to start. |
i_func | Points to the entry-point routine of the kernel-only thread. |
i_data_addr | Points to data that will be passed to the entry-point routine. |
i_data_len | Specifies the length of the data chunk. |
i_stackaddr | Specifies the stack's base address for the kernel-only thread. |
i_sigmask | Specifies the set of signal to block from delivery when the new kernel-only thread begins execution. |
The kthread_start kernel service starts the kernel-only thread specified by the tid parameter. The thread must have been previously created with the thread_create kernel service, and its state must be TSIDL.
This kernel service initializes and schedules the thread for the processor. Its state is changed to TSRUN. The thread is initialized so that it begins executing at the entry point specified by the i_func parameter, and that the signals specified by the i_sigmask parameter are blocked from delivery.
The thread's entry point gets one parameter, a pointer to a chunk of data that is copied to the base of the thread's stack. The i_data_addr and i_data_len parameters specify the location and quantity of data to copy. The format of the data must be agreed upon by the initializing and initialized thread.
The thread's stack's base address is specified by the i_stackaddr parameter. If a value of zero is specified, the kernel will allocate the memory for the stack (96K). This memory will be reclaimed by the system when the thread terminates. If a non-zero value is specified, then the caller should allocate the backing memory for the stack. Since stacks grow from high addresses to lower addresses, the i_stackaddr parameter specifies the highest address for the thread's stack.
The thread will be automatically terminated when it returns from the entry point routine. If it is the last thread in the process, then the process will be exited.
The kthread_start kernel service can be called from the process environment only.
The kthread_start kernel service returns one of the following values:
Item | Description |
---|---|
0 | Indicates a successful start. |
ESRCH | Indicates that the tid parameter is not valid. |