Ongoing work for adding per-thread UTCB structures.

Added setting of utcb address to l4_thread_control.
This is going to be moved to exchange_registers() since we need to pass
both the utcb physical and virtual address and exregs fits such context
modification better than thread_control.
This commit is contained in:
Bahadir Balban
2009-04-29 16:53:04 +03:00
parent 54a9b2901d
commit 7a81db8782
35 changed files with 424 additions and 72 deletions

View File

@@ -11,9 +11,8 @@
#include INC_GLUE(context.h)
#include <l4/types.h>
enum exregs_flags {
EXREGS_SET_PAGER = 1,
};
#define EXREGS_SET_PAGER 1
#define EXREGS_SET_UTCB 2
/* Structure passed by userspace pagers for exchanging registers */
struct exregs_data {
@@ -21,6 +20,8 @@ struct exregs_data {
u32 valid_vect;
u32 flags;
l4id_t pagerid;
unsigned long utcb_phys;
unsigned long utcb_virt;
};

View File

@@ -68,6 +68,8 @@ struct kip {
u32 arch_syscall2;
u32 arch_syscall3;
u32 utcb;
struct kernel_desc kdesc;
} __attribute__((__packed__));

View File

@@ -1,7 +1,7 @@
#ifndef __THREAD_H__
#define __THREAD_H__
#define THREAD_CREATE_MASK 0x00F0
#define THREAD_CREATE_MASK 0x0030
/* Create new thread and new space */
#define THREAD_NEW_SPACE 0x0010
@@ -12,7 +12,11 @@
/* Create new thread, use given space */
#define THREAD_SAME_SPACE 0x0030
/* Shared UTCB, New UTCB, No UTCB */
#define THREAD_UTCB_MASK 0x00C0
#define THREAD_UTCB_NEW 0x0040
#define THREAD_UTCB_SAME 0x0080
#define THREAD_UTCB_NONE 0x00C0
#define THREAD_ACTION_MASK 0x000F

View File

@@ -70,7 +70,10 @@ struct ktcb {
u32 ts_need_resched; /* Scheduling flag */
enum task_state state;
struct list_head task_list; /* Global task list. */
struct utcb *utcb; /* Reference to task's utcb area */
/* UTCB related, see utcb.txt in docs */
unsigned long utcb_virt; /* Virtual ref to task's utcb area */
unsigned long utcb_phys; /* Physical ref to task's utcb area */
/* Thread times */
u32 kernel_time; /* Ticks spent in kernel */

View File

@@ -43,7 +43,7 @@
#define USER_KIP_PAGE 0xFF000000
/* ARM-specific offset in KIP that tells the address of UTCB page */
#define UTCB_KIP_OFFSET 0xFF0
#define UTCB_KIP_OFFSET 0x50
#define IO_AREA0_VADDR (IO_AREA_START + (ARM_SECTION_SIZE*0))
#define IO_AREA1_VADDR (IO_AREA_START + (ARM_SECTION_SIZE*1))

View File

@@ -6,6 +6,7 @@
#ifndef __GLUE_ARM_MESSAGE_H__
#define __GLUE_ARM_MESSAGE_H__
#define MR_REST 56
#define MR_TOTAL 6
#define MR_TAG 0 /* Contains the purpose of message */
#define MR_SENDER 1 /* For anythread receivers to discover sender */