Revision history   OpenPOWER Library

 4.4.1.2. PSL Procedure for the Time-Sliced Programming Models

[Note]Note

Each PSL assigned to service the scheduled processes is configured with a unique identifier and the identifier of the next PSL in the list of PSLs servicing the processes. In addition, each PSL is identified as either the first PSL, the last PSL, both first and last PSL (only one PSL servicing the queue), or neither first or last PSL. The PSL ID Register contains the PSL unique identifier and the settings for first and last.

 Operations Performed by the First PSL (PSL_ID[F] = '1')

When the add_element MMIO command is received by the first PSL, the PSL performs any operations necessary and sends the add_element command to the next PSL. The PSL does not start any process with a software state of complete, suspend, or terminate. A process element with the suspend flag set can be added to the PSL queue.

  1. Performs a read of the cache line containing the head_pointer and tail_pointer, such that the cache line is owned by the PSL.

    • The PSL should prevent any other PSL from accessing the cache line until substep 3.

  2. Writes the link to the process element and its status to the PSL queue of processes waiting to be restarted.

    • Writes the added process element link to the memory location pointed to by the head_pointer.

    • Adds 8 to the head_pointer; head_pointer = head_pointer + 8.

    • If the head_pointer is greater than end_of_PSL_queue_area, head_pointer = start_of_PSL_queue_area.

  3.  Releases the protection of the cache line containing the head_pointer and tail_pointer values.

  4. The PSL sets the completion status in the software command/status field to indicate the process has been successfully added.

    • The status field in sw_command_status is set to x'0005' using a caching-inhibited DMA or special memory-update operation that is guaranteed not to corrupt memory if the operation fails. The final value of sw_command_status should be (x'00050005' || first_psl_id || link_of_element_to_add).


loading table of contents...