Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FlightOS
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Armin Luntzer
FlightOS
Commits
456c1de4
Commit
456c1de4
authored
5 years ago
by
Armin Luntzer
Browse files
Options
Downloads
Patches
Plain Diff
SCHED: consider return value for calls to enqueue_task()
parent
9b21d488
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
init/demo.c
+253
-0
253 additions, 0 deletions
init/demo.c
kernel/kthread.c
+1
-1
1 addition, 1 deletion
kernel/kthread.c
kernel/sched/core.c
+3
-1
3 additions, 1 deletion
kernel/sched/core.c
with
257 additions
and
2 deletions
init/demo.c
0 → 100644
+
253
−
0
View file @
456c1de4
/**
* This creates a number processing nodes in a processing network.
* Two special trackers are used for input and output.
*/
#include
<kernel/kernel.h>
#include
<kernel/kmem.h>
#include
<kernel/kthread.h>
#include
<data_proc_task.h>
#include
<data_proc_tracker.h>
#include
<data_proc_net.h>
#define CRIT_LEVEL 10
#define OP_ADD 0x1234
#define OP_SUB 0x1235
#define OP_MUL 0x1236
#define STEPS 3
int
op_output
(
unsigned
long
op_code
,
struct
proc_task
*
t
)
{
ssize_t
i
;
ssize_t
n
;
unsigned
int
*
p
=
NULL
;
n
=
pt_get_nmemb
(
t
);
printk
(
"OUT: op code %d, %d items
\n
"
,
op_code
,
n
);
if
(
!
n
)
goto
exit
;
p
=
(
unsigned
int
*
)
pt_get_data
(
t
);
if
(
!
p
)
goto
exit
;
for
(
i
=
0
;
i
<
n
;
i
++
)
{
printk
(
"
\t
%d
\n
"
,
p
[
i
]);
}
exit:
kfree
(
p
);
/* clean up our data buffer */
pt_destroy
(
t
);
return
PN_TASK_SUCCESS
;
}
int
op_add
(
unsigned
long
op_code
,
struct
proc_task
*
t
)
{
ssize_t
i
;
ssize_t
n
;
unsigned
int
*
p
;
n
=
pt_get_nmemb
(
t
);
if
(
!
n
)
return
PN_TASK_SUCCESS
;
p
=
(
unsigned
int
*
)
pt_get_data
(
t
);
if
(
!
p
)
/* we have elements but data is NULL, error*/
return
PN_TASK_DESTROY
;
printk
(
"ADD: op code %d, %d items
\n
"
,
op_code
,
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
{
p
[
i
]
+=
10
;
}
return
PN_TASK_SUCCESS
;
}
int
op_sub
(
unsigned
long
op_code
,
struct
proc_task
*
t
)
{
ssize_t
i
;
ssize_t
n
;
unsigned
int
*
p
;
n
=
pt_get_nmemb
(
t
);
if
(
!
n
)
return
PN_TASK_SUCCESS
;
p
=
(
unsigned
int
*
)
pt_get_data
(
t
);
if
(
!
p
)
/* we have elements but data is NULL, error*/
return
PN_TASK_DESTROY
;
printk
(
"SUB: op code %d, %d items
\n
"
,
op_code
,
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
{
p
[
i
]
-=
2
;
}
return
PN_TASK_SUCCESS
;
}
int
op_mul
(
unsigned
long
op_code
,
struct
proc_task
*
t
)
{
ssize_t
i
;
ssize_t
n
;
unsigned
int
*
p
;
n
=
pt_get_nmemb
(
t
);
if
(
!
n
)
return
PN_TASK_SUCCESS
;
p
=
(
unsigned
int
*
)
pt_get_data
(
t
);
if
(
!
p
)
/* we have elements but data is NULL, error*/
return
PN_TASK_DESTROY
;
printk
(
"MUL: op code %d, %d items
\n
"
,
op_code
,
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
{
p
[
i
]
*=
3
;
}
return
PN_TASK_SUCCESS
;
}
int
pn_prepare_nodes
(
struct
proc_net
*
pn
)
{
struct
proc_tracker
*
pt
;
/* create and add processing node trackers for the each operation */
pt
=
pt_track_create
(
op_add
,
OP_ADD
,
CRIT_LEVEL
);
BUG_ON
(
!
pt
);
BUG_ON
(
pn_add_node
(
pn
,
pt
));
pt
=
pt_track_create
(
op_sub
,
OP_SUB
,
CRIT_LEVEL
);
BUG_ON
(
!
pt
);
BUG_ON
(
pn_add_node
(
pn
,
pt
));
pt
=
pt_track_create
(
op_mul
,
OP_MUL
,
CRIT_LEVEL
);
BUG_ON
(
!
pt
);
BUG_ON
(
pn_add_node
(
pn
,
pt
));
BUG_ON
(
pn_create_output_node
(
pn
,
op_output
));
return
0
;
}
void
pn_new_input_task
(
struct
proc_net
*
pn
,
size_t
n
)
{
struct
proc_task
*
t
;
static
int
seq
;
int
i
;
unsigned
int
*
data
;
t
=
pt_create
(
NULL
,
0
,
STEPS
,
0
,
seq
++
);
BUG_ON
(
!
t
);
BUG_ON
(
pt_add_step
(
t
,
OP_ADD
,
NULL
));
BUG_ON
(
pt_add_step
(
t
,
OP_SUB
,
NULL
));
BUG_ON
(
pt_add_step
(
t
,
OP_MUL
,
NULL
));
data
=
kzalloc
(
sizeof
(
unsigned
int
)
*
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
data
[
i
]
=
i
;
pt_set_data
(
t
,
data
,
n
*
sizeof
(
unsigned
int
));
pt_set_nmemb
(
t
,
n
);
pn_input_task
(
pn
,
t
);
}
int
demo
(
void
*
p
__attribute__
((
unused
)))
{
struct
proc_net
*
pn
;
printk
(
"DEMO STARTING
\n
"
);
pn
=
pn_create
();
BUG_ON
(
!
pn
);
pn_prepare_nodes
(
pn
);
pn_new_input_task
(
pn
,
5
);
pn_new_input_task
(
pn
,
0
);
pn_new_input_task
(
pn
,
3
);
pn_process_inputs
(
pn
);
while
(
pn_process_next
(
pn
));
pn_process_outputs
(
pn
);
printk
(
"DEMO COMPLETE
\n
"
);
return
0
;
}
void
demo_start
(
void
)
{
struct
task_struct
*
t
;
t
=
kthread_create
(
demo
,
NULL
,
KTHREAD_CPU_AFFINITY_NONE
,
"DEMO"
);
/* allocate 98% of the cpu */
kthread_set_sched_edf
(
t
,
100
*
1000
,
99
*
1000
,
98
*
1000
);
if
(
kthread_wake_up
(
t
)
<
0
)
printk
(
"---- IASW NOT SCHEDULABLE---
\n
"
);
}
This diff is collapsed.
Click to expand it.
kernel/kthread.c
+
1
−
1
View file @
456c1de4
...
@@ -100,7 +100,7 @@ int kthread_wake_up(struct task_struct *task)
...
@@ -100,7 +100,7 @@ int kthread_wake_up(struct task_struct *task)
return
-
EINVAL
;
return
-
EINVAL
;
ret
=
sched_enqueue
(
task
);
ret
=
sched_enqueue
(
task
);
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
flags
=
arch_local_irq_save
();
flags
=
arch_local_irq_save
();
...
...
This diff is collapsed.
Click to expand it.
kernel/sched/core.c
+
3
−
1
View file @
456c1de4
...
@@ -266,7 +266,9 @@ int sched_enqueue(struct task_struct *task)
...
@@ -266,7 +266,9 @@ int sched_enqueue(struct task_struct *task)
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
task
->
sched
->
enqueue_task
(
task
);
ret
=
task
->
sched
->
enqueue_task
(
task
);
if
(
ret
)
return
ret
;
return
0
;
return
0
;
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment