NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | EXAMPLES | ATTRIBUTES | SUMMARY OF TRUSTED SOLARIS CHANGES | SEE ALSO
#include <sys/types.h> #include <sys/processor.h>int p_online(processorid_t processorid, int flag);
The p_online() function changes or returns the operational status of processors. The state of the processor specified by the processorid argument is changed to the state represented by the flag argument.
Legal values for flag are P_STATUS, P_ONLINE, P_OFFLINE, and P_NOINTR.
When flag is P_STATUS, no processor status change occurs, but the current processor status is returned.
The P_ONLINE, P_OFFLINE, and P_NOINTR values for flag refer to valid processor states. A processor in the P_ONLINE state is allowed to process LWPs (lightweight processes) and perform
system activities. The processor is also interruptible by I/O devices attached to the system. The PRIV_SYS_CONFIG
privilege is required.
A processor in the P_OFFLINE state is not allowed to process LWPs. The processor is as inactive as possible. If the hardware supports such a feature, the processor is not interruptible by attached I/O devices.The PRIV_SYS_CONFIG
privilege is required.
A processor in the P_NOINTR state is allowed to process LWPs, but it is not interruptible by attached I/O devices. Typically, interrupts, when they occur are routed to other processors in the system. Not all systems support putting a processor into the P_NOINTR state. It is not permitted to put all the processors of a system into the P_NOINTR state. At least one processor must always be available to service system clock interrupts.
Processor numbers are integers, greater than or equal to 0, and are defined by the hardware platform. Processor numbers are not necessarily contiguous, but "not too sparse." Processor numbers should always be printed in decimal.
The number of processors present can be determined by calling sysconf(_SC_NPROCESSORS_CONF). The list of valid processor numbers can be determined by calling p_online() with processorid values starting at 0 until all processors have been found. The EINVAL error is returned for invalid processor numbers. See EXAMPLES below.
On successful completion, the value returned is the previous state of the processor, P_ONLINE, P_OFFLINE, P_NOINTR, or P_POWEROFF. Otherwise, -1 is returned and errno is set to indicate the error.
The p_online() function will fail if:
The calling process does not have the PRIV_SYS_CONFIG
privilege.
A non-existent processor ID was specified or flag was invalid.
The flag was P_OFFLINE and the specified processor is the only on-line processor, there are currently LWPs bound to the processor, or the processor performs some essential function that cannot be performed by another processor.
The flag was P_NOINTR and the specified processor is the only interruptible processor in the system, or it handles interrupts that cannot be handled by another processor.
The specified processor is powered off and cannot be powered on because some platform-specific resource is not available.
The specified processor is powered off, and the platform does not support power on of individual processors.
The following code sample will list the legal processor numbers:
#include <sys/unistd.h> #include <sys/processor.h> #include <sys/types.h> #include <stdio.h> #include <errno.h> int main() { processorid_t i; int status; int n = sysconf(_SC_NPROCESSORS_ONLN); for (i = 0; n > 0; i++) { status = p_online(i, P_STATUS); if (status == -1 && errno == EINVAL) continue; printf("processor %d present\n", i); n--; } return (0); }
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
MT-Level | MT-Safe |
The calling process must have the PRIV_SYS_CONFIG
privilege in order to perform the P_ONLINE and P_OFFLINE operations.
NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | EXAMPLES | ATTRIBUTES | SUMMARY OF TRUSTED SOLARIS CHANGES | SEE ALSO