blob: 640c82a01de38d07f03b5217e81ea2113af9ad11 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors
// Copyright (c) 2008-2015 Travis Geiselbrecht
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#pragma once
#include <kernel/thread.h>
#include <list.h>
#include <stdbool.h>
#include <zircon/compiler.h>
/* scheduler interface, used internally by thread.c */
/* not intended to be used by regular kernel code */
void sched_init_early(void);
void sched_init_thread(thread_t* t, int priority);
void sched_block(void);
void sched_yield(void);
void sched_preempt(void);
void sched_reschedule(void);
void sched_resched_internal(void);
void sched_unblock_idle(thread_t* t);
void sched_migrate(thread_t* t);
/* set the inheirited priority of a thread and return if the caller should locally reschedule.
* pri should be < MAX_PRIORITY, negative values disable priority inheiritance
*/
void sched_inheirit_priority(thread_t* t, int pri, bool* local_resched);
/* return true if the thread was placed on the current cpu's run queue */
/* this usually means the caller should locally reschedule soon */
bool sched_unblock(thread_t* t) __WARN_UNUSED_RESULT;
bool sched_unblock_list(struct list_node* list) __WARN_UNUSED_RESULT;
void sched_transition_off_cpu(cpu_num_t old_cpu);