P_ONLINE(2) | System Calls | P_ONLINE(2) |
p_online - return or change processor operational status
#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, P_NOINTR, P_FAULTED, P_SPARE, and P_FORCED. P_DISABLED is only supported in the P_ALL_SIBLINGS mode.
When flag is P_STATUS, no processor status change occurs, but the current processor status is returned.
The P_ONLINE, P_OFFLINE, P_NOINTR, P_FAULTED, and P_SPARE values for flag refer to valid processor states. The P_ONLINE, P_OFFLINE, P_SPARE, and P_FAULTED processor states can be combined with the P_FORCED flag.
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.
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.
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.
A processor in the P_SPARE state is not allowed to process LWPs. In many respects, the P_SPARE state is similar to the P_OFFLINE state, but describes a processor that is available for reactivation by management tools without administrator intervention.
A processor in the P_FAULTED state is not allowed to process LWPs. In many respects, the P_FAULTED state is similar to the P_OFFLINE state, but describes a processor that has been diagnosed as faulty. The privileged caller can change the state of the processor from P_FAULTED to any of the other states, but since the processor might generate additional errors, electing to reactivate such a processor should be carefully considered.
A processor in the P_DISABLED state is not allowed to process LWPs. In many respects, the P_DISABLED state is similar to the P_OFFLINE state, but describes a processor explicitly disabled for general use.
Forced processor state transition can be requested if a new processor state is specified with the bitwise-inclusive OR of the special P_FORCED flag. Forcing transition of a processor to the P_OFFLINE, P_SPARE, or P_FAULTED state revokes processor bindings for all threads that were previously bound to that processor with processor_bind(2). There is no guarantee that a forced processor state transition always succeeds.
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 maximum possible processorid value can be determined by calling sysconf(_SC_CPUID_MAX). The list of valid processor numbers can be determined by calling p_online() with processorid values from 0 to the maximum returned by sysconf(_SC_CPUID_MAX). The EINVAL error is returned for invalid processor numbers. See EXAMPLES below.
The special value P_ALL_SIBLINGS can be specified instead of a processorid. In this case, the operation applies to all but one of the SMT siblings on each CPU core. The only state transition supported is P_DISABLED. The operation is only considered successful if all candidate siblings could be disabled. Individual CPUs disabled in this manner can transition to P_ONLINE only in combination with the P_FORCED flag, and only if they were disabled via this system call.
On successful completion, the value returned is the previous state of the processor, P_ONLINE, P_OFFLINE, P_NOINTR, P_FAULTED, P_SPARE, or P_POWEROFF. Otherwise, −1 is returned, the CPU state remains unchanged, and errno is set to indicate the error.
The p_online() function will fail if:
EBUSY
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.
EINVAL
The caller is in a non-global zone, the pools facility is active, and the processor is not a member of the zone's pool's processor set.
ENOTSUP
EPERM
Example 1 List the legal processor numbers.
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 <unistd.h> #include <errno.h> int main() {
processorid_t i, cpuid_max;
cpuid_max = sysconf(_SC_CPUID_MAX);
for (i = 0; i <= cpuid_max; i++) {
if (p_online(i, P_STATUS) != -1)
printf("processor %d present\n", i);
}
return (0); }
See attributes(7) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
MT-Level | MT-Safe |
processor_bind(2), processor_info(2), pset_create(2), sysconf(3C), attributes(7), privileges(7), pooladm(8), psradm(8), psrinfo(8), zoneadm(8)
April 25, 2019 | OmniOS |