view driver/critical.c @ 0:42f240cc4bc6

From: 太田 篤志 <atoc@namikilab.tuat.ac.jp>
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Sep 2009 13:44:18 +0900
parents
children
line wrap: on
line source

/**
 * critical.c
 * SPE プロセスマネージャ spe_manager
 * クリティカルセクションに関する変数や関数など
 */

#include <linux/module.h>      // カーネルモジュール全般
#include <linux/semaphore.h>
#include <linux/spinlock.h>

#include "critical.h"


static struct semaphore semaphore_for_spe_pid;        // SPE プロセス ID 用のセマフォ
static struct semaphore semaphore_for_process_list;   // プロセスリスト更新用のセマフォ
static spinlock_t       spinlock_for_process_list;    // 同スピンロック



//================================================================================================ initialize_critical()
/**
 * initialize_critical
 * クリティカルセクションに関する変数の初期化
 *
 * @return void
 */
void initialize_critical(void)
{
	init_MUTEX(&semaphore_for_spe_pid);
	init_MUTEX(&semaphore_for_process_list);
	spin_lock_init(&spinlock_for_process_list);
}


//========================================================================================== get_semaphore_for_spe_pid()
/**
 * get_semaphore_for_spe_pid
 * SPE プロセス ID 番号用のセマフォを取得する
 *
 * Note: 単なるセマフォ変数の getter であり、ロックを行うわけではない。
 *
 * @return struct semaphore *
 */
struct semaphore *get_semaphore_for_spe_pid(void)
{
	return &semaphore_for_spe_pid;
}


//===================================================================================== get_semaphore_for_process_list()
/**
 * get_semaphore_for_process_list
 * プロセスリスト更新用のセマフォを取得する
 *
 * Note: 単なるセマフォ変数の getter であり、ロックを行うわけではない。
 *
 * @return struct semaphore *
 */
struct semaphore *get_semaphore_for_process_list(void)
{
	return &semaphore_for_process_list;
}


//====================================================================================== get_spinlock_for_process_list()
/**
 * get_spinlock_for_process_list
 * プロセスリスト更新用のスピンロックを取得する
 *
 * Note: 単なるスピンロック変数の getter であり、ロックを行うわけではない。
 *
 * @return spinlock_t *
 */
spinlock_t *get_spinlock_for_process_list(void)
{
	return &spinlock_for_process_list;
}