template <typename Op, typename TargetType>

class PiOperation

Defined at line 32 of file ../../zircon/kernel/kernel/scheduler_pi.cc

fwd decl of a helper class used to implement various PI operations. See

//zircon/kernel/kernel/scheduler_pi.cc to see how it is used.

Protected Members

TargetType & target_

Protected Methods

void PiOperation<Op, TargetType> (TargetType & target)

Defined at line 34 of file ../../zircon/kernel/kernel/scheduler_pi.cc

void AssertEpDirtyState (const Thread & thread, SchedulerState::ProfileDirtyFlag expected)

Defined at line 36 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedTime & GetStartTime (Thread & thread)

Defined at line 41 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedTime & GetFinishTime (Thread & thread)

Defined at line 45 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration & GetTimeSliceNs (Thread & thread)

Defined at line 49 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration & GetTimeSliceUsedNs (Thread & thread)

Defined at line 53 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedTime GetStartTime (const Thread & thread)

Defined at line 57 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedTime GetFinishTime (const Thread & thread)

Defined at line 61 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration GetTimeSliceNs (const Thread & thread)

Defined at line 65 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration GetTimeSliceUsedNs (const Thread & thread)

Defined at line 69 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration GetRemainingTimeSliceNs (const Thread & thread)

Defined at line 73 of file ../../zircon/kernel/kernel/scheduler_pi.cc

void AssertEpDirtyState (const OwnedWaitQueue & owq, SchedulerState::ProfileDirtyFlag expected)

OwnedWaitQueues do not need to bother to track the dirty or clean state of

their implied effective profile. They have no base profile (only inherited

values) which gets turned into an effective profile by the

EffectiveProfileHeper (see below) during a PI interaction. We can get away

with this because OWQs:

1) Cannot exist in any collections where their position is determined by effective profile

(otherwise we would need to remove and re-insert the node in the collection during an

update).

2) Cannot contribute to a scheduler's bookkeeping (because OWQs are not things which get

scheduled).

Defined at line 89 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedTime & GetStartTime (OwnedWaitQueue & owq)

Defined at line 93 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedTime & GetFinishTime (OwnedWaitQueue & owq)

Defined at line 97 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration & GetTimeSliceNs (OwnedWaitQueue & owq)

Defined at line 101 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration & GetTimeSliceUsedNs (OwnedWaitQueue & owq)

Defined at line 105 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedTime GetStartTime (const OwnedWaitQueue & owq)

Defined at line 109 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedTime GetFinishTime (const OwnedWaitQueue & owq)

Defined at line 113 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration GetTimeSliceNs (const OwnedWaitQueue & owq)

Defined at line 117 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration GetTimeSliceUsedNs (const OwnedWaitQueue & owq)

Defined at line 121 of file ../../zircon/kernel/kernel/scheduler_pi.cc

SchedDuration GetRemainingTimeSliceNs (const OwnedWaitQueue & owq)

Defined at line 125 of file ../../zircon/kernel/kernel/scheduler_pi.cc

void HandlePiInteractionCommon ()

Handle all of the common tasks associated with each of the possible PI

interactions. The outline of this is:

1) If the target is an active thread (meaning either running or runnable),

we need to:

1.1) Enter the scheduler's queue lock.

1.2) If the thread is active, but not actually running, remove the target

thread from its scheduler's run queue if it is in the queue.

1.3) Now update the thread's effective profile.

1.4) Apply any changes in the thread's effective profile to its scheduler's

bookkeeping.

1.5) Update the dynamic parameters of the thread.

1.6) Either re-insert the thread into its scheduler's run queue (if it was

READY AND in the queue) or adjust its schedulers preemption time (if it

was RUNNING).

1.7) Trigger a reschedule of the the thread's CPU.

2) If the target is either an OwnedWaitQueue, or a thread which is not

active:

2.1) Recompute the target's effective profile, adjust the target's position

in it's wait queue if the target is a thread which is currently

blocked in a wait queue.

2.2) Recompute the target's dynamic scheduler parameters.

Defined at line 682 of file ../../zircon/kernel/kernel/scheduler_pi.cc