The Pedigree Project 0.1
ProcessorThreadAllocator.cc
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#include "pedigree/kernel/process/PerProcessorScheduler.h"
21#include "pedigree/kernel/process/ProcessorThreadAllocator.h"
22#include "pedigree/kernel/process/Scheduler.h"
23#include "pedigree/kernel/process/Thread.h"
24#include "pedigree/kernel/process/ThreadToCoreAllocationAlgorithm.h"
25#include "pedigree/kernel/utilities/new"
26
27ProcessorThreadAllocator ProcessorThreadAllocator::m_Instance;
28
29ProcessorThreadAllocator::ProcessorThreadAllocator() : m_pAlgorithm(0) {}
30
31ProcessorThreadAllocator::~ProcessorThreadAllocator() {
32 delete m_pAlgorithm;
33}
34
36 void* pParam, bool bUsermode, void* pStack) {
37 PerProcessorScheduler* pSchedule = m_pAlgorithm->allocateThread(pThread);
38 Scheduler::instance().addThread(pThread, *pSchedule);
39 pSchedule->addThread(pThread, pStartFunction, pParam, bUsermode, pStack);
40}
41
42void ProcessorThreadAllocator::addThread(Thread* pThread, SyscallState& state) {
43 PerProcessorScheduler* pSchedule = m_pAlgorithm->allocateThread(pThread);
44 Scheduler::instance().addThread(pThread, *pSchedule);
45 pSchedule->addThread(pThread, state);
46}
47
void addThread(Thread *pThread, Thread::ThreadStartFunc pStartFunction, void *pParam, bool bUsermode, void *pStack)
void addThread(Thread *pThread, Thread::ThreadStartFunc pStartFunction, void *pParam, bool bUsermode, void *pStack)
void threadRemoved(Thread *pThread)
static Scheduler & instance()
Definition Scheduler.h:96
void addThread(Thread *pThread, PerProcessorScheduler &PPSched)
Definition Scheduler.cc:140
int(* ThreadStartFunc)(void *)
Definition Thread.h:187