blob: a15b558114828559af413b593c62c70cbab43dfc [file] [log] [blame]
/*
*
* (C) COPYRIGHT 2010 ARM Limited. All rights reserved.
*
* This program is free software and is provided to you under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation, and any use by you of this program is subject to the terms
* of such GNU licence.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you can access it online at
* http://www.gnu.org/licenses/gpl-2.0.html.
*
* SPDX-License-Identifier: GPL-2.0
*
*/
digraph policy_objects_diagram {
rankdir=LR;
size="12,8";
compound=true;
node [ shape = box ];
subgraph cluster_policy_queues {
low_queue [ shape=record label = "LowP | {<ql>ctx_lo | ... | <qm>ctx_i | ... | <qr>ctx_hi}" ];
queues_middle_sep [ label="" shape=plaintext width=0 height=0 ];
rt_queue [ shape=record label = "RT | {<ql>ctx_lo | ... | <qm>ctx_j | ... | <qr>ctx_hi}" ];
label = "Policy's Queue(s)";
}
call_enqueue [ shape=plaintext label="enqueue_ctx()" ];
{
rank=same;
ordering=out;
call_dequeue [ shape=plaintext label="dequeue_head_ctx()\n+ runpool_add_ctx()" ];
call_ctxfinish [ shape=plaintext label="runpool_remove_ctx()" ];
call_ctxdone [ shape=plaintext label="don't requeue;\n/* ctx has no more jobs */" ];
}
subgraph cluster_runpool {
as0 [ width=2 height = 0.25 label="AS0: Job_1, ..., Job_n" ];
as1 [ width=2 height = 0.25 label="AS1: Job_1, ..., Job_m" ];
as2 [ width=2 height = 0.25 label="AS2: Job_1, ..., Job_p" ];
as3 [ width=2 height = 0.25 label="AS3: Job_1, ..., Job_q" ];
label = "Policy's Run Pool";
}
{
rank=same;
call_jdequeue [ shape=plaintext label="dequeue_job()" ];
sstop_dotfixup [ shape=plaintext label="" width=0 height=0 ];
}
{
rank=same;
ordering=out;
sstop [ shape=ellipse label="SS-Timer expires" ]
jobslots [ shape=record label="Jobslots: | <0>js[0] | <1>js[1] | <2>js[2]" ];
irq [ label="IRQ" shape=ellipse ];
job_finish [ shape=plaintext label="don't requeue;\n/* job done */" ];
}
hstop [ shape=ellipse label="HS-Timer expires" ]
/*
* Edges
*/
call_enqueue -> queues_middle_sep [ lhead=cluster_policy_queues ];
low_queue:qr -> call_dequeue:w;
rt_queue:qr -> call_dequeue:w;
call_dequeue -> as1 [lhead=cluster_runpool];
as1->call_jdequeue [ltail=cluster_runpool];
call_jdequeue->jobslots:0;
call_jdequeue->sstop_dotfixup [ arrowhead=none];
sstop_dotfixup->sstop [label="Spawn SS-Timer"];
sstop->jobslots [label="SoftStop"];
sstop->hstop [label="Spawn HS-Timer"];
hstop->jobslots:ne [label="HardStop"];
as3->call_ctxfinish:ne [ ltail=cluster_runpool ];
call_ctxfinish:sw->rt_queue:qm [ lhead=cluster_policy_queues label="enqueue_ctx()\n/* ctx still has jobs */" ];
call_ctxfinish->call_ctxdone [constraint=false];
call_ctxdone->call_enqueue [weight=0.1 labeldistance=20.0 labelangle=0.0 taillabel="Job submitted to the ctx" style=dotted constraint=false];
{
jobslots->irq [constraint=false];
irq->job_finish [constraint=false];
}
irq->as2 [lhead=cluster_runpool label="requeue_job()\n/* timeslice expired */" ];
}