Changes since April

Clean up of build directories.
Simplifications to capability model.
This commit is contained in:
Bahadir Balban
2010-06-01 15:08:13 +03:00
parent aef14b55ec
commit 6fa4884a5a
450 changed files with 10449 additions and 7383 deletions

View File

@@ -40,31 +40,6 @@
{(c)->type &= ~CAP_RTYPE_MASK; \
(c)->type |= CAP_RTYPE_MASK & rtype;}
/*
* User-defined device-types
* (Kept in the user field)
*/
#define CAP_DEVTYPE_TIMER 1
#define CAP_DEVTYPE_UART 2
#define CAP_DEVTYPE_KEYBOARD 3
#define CAP_DEVTYPE_MOUSE 4
#define CAP_DEVTYPE_CLCD 5
#define CAP_DEVTYPE_OTHER 0xF
#define CAP_DEVTYPE_MASK 0xFFFF
#define CAP_DEVNUM_MASK 0xFFFF0000
#define CAP_DEVNUM_SHIFT 16
#define cap_is_devmem(c) ((c)->attr)
#define cap_set_devtype(c, devtype) \
{(c)->attr &= ~CAP_DEVTYPE_MASK; \
(c)->attr |= CAP_DEVTYPE_MASK & devtype;}
#define cap_set_devnum(c, devnum) \
{(c)->attr &= ~CAP_DEVNUM_MASK; \
(c)->attr |= CAP_DEVNUM_MASK & (devnum << CAP_DEVNUM_SHIFT);}
#define cap_devnum(c) \
(((c)->attr & CAP_DEVNUM_MASK) >> CAP_DEVNUM_SHIFT)
#define cap_devtype(c) ((c)->attr & CAP_DEVTYPE_MASK)
/*
* Access permissions
*/

View File

@@ -8,6 +8,7 @@
#include <l4/api/exregs.h>
#include <l4/api/capability.h>
#include <l4/lib/printk.h>
/*
* Some resources that capabilities possess don't
@@ -21,15 +22,11 @@
struct cap_list {
int ktcb_refs;
int ncaps;
struct link caps;
};
void capability_init(struct capability *cap);
struct capability *capability_create(void);
struct capability *boot_capability_create(void);
static inline void cap_list_init(struct cap_list *clist)
{
@@ -94,14 +91,13 @@ struct task_ids;
/* Capability checking for quantitative capabilities */
int capability_consume(struct capability *cap, int quantity);
int capability_free(struct capability *cap, int quantity);
struct capability *capability_find_by_rtype(struct ktcb *task,
unsigned int rtype);
struct capability *cap_find_by_rtype(struct ktcb *task,
unsigned int rtype);
int cap_count(struct ktcb *task);
struct capability *cap_list_find_by_rtype(struct cap_list *clist,
unsigned int rtype);
struct capability *cap_find_by_capid(l4id_t capid, struct cap_list **clist);
/* Capability checking on system calls */
/* Capability checking on systm calls */
int cap_map_check(struct ktcb *task, unsigned long phys, unsigned long virt,
unsigned long npages, unsigned int flags);
int cap_unmap_check(struct ktcb *task, unsigned long virt,

View File

@@ -19,7 +19,8 @@
#define curcont (current->container)
#define CONFIG_CONTAINER_NAMESIZE 64
#define CONFIG_MAX_CAPS_USED 16
#define CONFIG_MAX_PAGER_CAPS 20
#define CONFIG_MAX_CONT_CAPS 5
#define CONFIG_MAX_PAGERS_USED 1
/* Container macro. No locks needed! */
@@ -33,18 +34,13 @@ struct pager {
unsigned long memsize;
struct cap_list cap_list;
/*
* Section markings,
* We dont care for other types of sections,
* RO will be included inside RX.
*/
unsigned long rw_sections_start;
unsigned long rw_sections_end;
unsigned long rx_sections_start;
unsigned long rx_sections_end;
/* Program header markings of pager's elf */
unsigned long rw_pheader_start;
unsigned long rw_pheader_end;
unsigned long rx_pheader_start;
unsigned long rx_pheader_end;
};
struct container {
l4id_t cid; /* Unique container id */
int npagers; /* # of pagers */
@@ -82,15 +78,11 @@ struct pager_info {
unsigned long start_address;
unsigned long stack_address;
/*
* Section markings,
* We dont care for other types of sections,
* RO will be included inside RX.
*/
unsigned long rw_sections_start;
unsigned long rw_sections_end;
unsigned long rx_sections_start;
unsigned long rx_sections_end;
/* Program header markings of pager's elf */
unsigned long rw_pheader_start;
unsigned long rw_pheader_end;
unsigned long rx_pheader_start;
unsigned long rx_pheader_end;
/* Number of capabilities defined */
int ncaps;
@@ -106,7 +98,7 @@ struct pager_info {
* One or more virtmem caps,
* Zero or more umutex caps,
*/
struct cap_info caps[CONFIG_MAX_CAPS_USED];
struct cap_info caps[CONFIG_MAX_PAGER_CAPS];
};
/*
@@ -116,6 +108,8 @@ struct pager_info {
struct container_info {
char name[CONFIG_CONTAINER_NAMESIZE];
int npagers;
int ncaps;
struct cap_info caps[CONFIG_MAX_CONT_CAPS];
struct pager_info pager[CONFIG_MAX_PAGERS_USED];
};
@@ -128,8 +122,10 @@ struct container *container_create(void);
int container_init_pagers(struct kernel_resources *kres);
struct container *container_alloc_init(void);
int init_containers(struct kernel_resources *kres);
struct container *container_find(struct kernel_resources *kres, l4id_t cid);
struct ktcb *container_find_tcb(struct container *c, l4id_t tid);
#endif /* __CONTAINER_H__ */

View File

@@ -0,0 +1,8 @@
#ifndef __IDLE_H__
#define __IDLE_H__
void setup_idle_task(void);
void containers_setup_idle(void);
#endif

View File

@@ -26,8 +26,25 @@ void platform_irq_disable(int irq);
void print_early(char *str);
void printhex8(unsigned int);
int platform_setup_device_caps(struct kernel_resources *kres);
void platform_test_cpucycles(void);
enum mem_type {
MEM_TYPE_RAM = 0,
MEM_TYPE_DEV = 1,
};
struct platform_mem_range {
unsigned long start;
unsigned long end;
unsigned int type;
};
struct platform_mem_regions {
int nregions;
struct platform_mem_range mem_range[];
};
/* Kernel uses this to initialize physmem capabilities */
extern struct platform_mem_regions platform_mem_regions;
#endif /* __PLATFORM_H__ */

View File

@@ -9,6 +9,7 @@
/* Number of containers defined at compile-time */
#include <l4/generic/capability.h>
#include <l4/generic/space.h>
#include <l4/lib/list.h>
#include <l4/lib/mutex.h>
#include <l4/lib/idpool.h>
@@ -21,11 +22,6 @@ struct boot_resources {
int nspaces;
int npmds;
int nmutex;
/* Kernel resource usage */
int nkpmds;
int nkpgds;
int nkcaps;
};
/* List of containers */
@@ -80,9 +76,6 @@ struct kernel_resources {
struct cap_list devmem_used;
struct cap_list devmem_free;
/* All other caps that belong to the kernel */
struct cap_list non_memory_caps;
struct mem_cache *pgd_cache;
struct mem_cache *pmd_cache;
struct mem_cache *ktcb_cache;
@@ -98,31 +91,25 @@ struct kernel_resources {
/* Global page tables on split page tables */
pgd_global_table_t *pgd_global;
#endif
struct address_space init_space;
};
extern struct kernel_resources kernel_resources;
void free_pgd(void *addr);
void free_pmd(void *addr);
void free_space(void *addr, struct ktcb *task);
void free_ktcb(void *addr, struct ktcb *task);
void free_capability(void *addr);
void free_container(void *addr);
void free_user_mutex(void *addr);
void pgd_free(void *addr);
void pmd_cap_free(void *addr, struct cap_list *clist);
void space_cap_free(void *addr, struct cap_list *clist);
void ktcb_cap_free(void *addr, struct cap_list *clist);
void mutex_cap_free(void *addr);
pgd_table_t *alloc_pgd(void);
pmd_table_t *alloc_pmd(void);
struct address_space *alloc_space(void);
struct ktcb *alloc_ktcb(void);
struct ktcb *alloc_ktcb_use_capability(struct capability *cap);
struct capability *boot_alloc_capability(void);
struct capability *alloc_capability(void);
struct container *alloc_container(void);
struct mutex_queue *alloc_user_mutex(void);
int free_boot_memory(struct kernel_resources *kres);
pgd_table_t *pgd_alloc(void);
pmd_table_t *pmd_cap_alloc(struct cap_list *clist);
struct address_space *space_cap_alloc(struct cap_list *clist);
struct ktcb *ktcb_cap_alloc(struct cap_list *clist);
struct mutex_queue *mutex_cap_alloc(void);
int init_system_resources(struct kernel_resources *kres);
void setup_idle_caps(); /*TODO: Delete this when done with it */
void setup_idle_caps(struct kernel_resources *kres);
#endif /* __RESOURCES_H__ */

View File

@@ -63,17 +63,13 @@ enum sched_flags {
/* Contains per-container scheduling structures */
struct scheduler {
unsigned int flags;
unsigned int task_select_ctr;
unsigned int task_select_counter;
struct runqueue sched_rq[SCHED_RQ_TOTAL];
/* Regular runqueues */
struct runqueue *rq_runnable;
struct runqueue *rq_expired;
/* Real-time runqueues */
struct runqueue *rq_rt_runnable;
struct runqueue *rq_rt_expired;
struct ktcb *idle_task;
/* Total priority of all tasks in container */

View File

@@ -40,7 +40,7 @@
struct address_space {
l4id_t spid;
struct link list;
struct mutex lock;
struct spinlock lock;
pgd_table_t *pgd;
/* Capabilities shared by threads in same space */
@@ -50,13 +50,12 @@ struct address_space {
struct address_space_list {
struct link list;
struct mutex lock;
struct spinlock lock;
int count;
};
struct address_space *address_space_create(struct address_space *orig);
void address_space_delete(struct address_space *space,
struct ktcb *task_accounted);
void address_space_delete(struct address_space *space, struct cap_list *clist);
void address_space_attach(struct ktcb *tcb, struct address_space *space);
struct address_space *address_space_find(l4id_t spid);
void address_space_add(struct address_space *space);

View File

@@ -70,6 +70,12 @@ struct task_ids {
struct container;
#define tcb_pagerid(tcb) ((tcb)->pager->tid)
#define space_is_pager(tcb) \
((tcb)->space->spid == (tcb)->pager->space->spid)
#define thread_is_pager(tcb) ((tcb)->pager == (tcb))
struct ktcb {
/* User context */
task_context_t context;
@@ -91,9 +97,6 @@ struct ktcb {
/* CPU affinity */
int affinity;
/* Other related threads */
l4id_t pagerid;
/* Flags to indicate various task status */
unsigned int flags;
@@ -133,10 +136,10 @@ struct ktcb {
/* Container */
struct container *container;
struct pager *pager;
/* Capability lists */
struct cap_list cap_list; /* Own private capabilities */
/* Other related threads */
struct ktcb *pager;
int nchild;
/* Fields for ipc rendezvous */
struct waitqueue_head wqh_recv;