/trunk/kernel/genarch/src/mm/asid_fifo.c |
---|
63,9 → 63,9 |
{ |
int i; |
#if (!FIFO_STATIC) |
#if (!FIFO_STATIC) |
fifo_create(free_asids); |
#endif |
#endif |
for (i = 0; i < ASIDS_ALLOCABLE; i++) { |
fifo_push(free_asids, ASID_START + i); |
/trunk/kernel/generic/include/mm/page.h |
---|
66,6 → 66,12 |
#define PAGE_GLOBAL (1<<PAGE_GLOBAL_SHIFT) |
/** |
* Macro for computing page color. |
*/ |
#define PAGE_COLOR(va) (((va) >> PAGE_WIDTH) & ((1 << PAGE_COLOR_BITS) - 1)) |
/** Page fault access type. */ |
enum pf_access { |
PF_ACCESS_READ, |
/trunk/kernel/generic/src/mm/as.c |
---|
550,12 → 550,13 |
* @param dst_base Target base address. |
* @param dst_flags_mask Destination address space area flags mask. |
* |
* @return Zero on success or ENOENT if there is no such task or |
* if there is no such address space area, |
* EPERM if there was a problem in accepting the area or |
* ENOMEM if there was a problem in allocating destination |
* address space area. ENOTSUP is returned if an attempt |
* to share non-anonymous address space area is detected. |
* @return Zero on success or ENOENT if there is no such task or if there is no |
* such address space area, EPERM if there was a problem in accepting the area |
* or ENOMEM if there was a problem in allocating destination address space |
* area. ENOTSUP is returned if the address space area backend does not support |
* sharing. It can be also returned if the architecture uses virtually indexed |
* caches and the source and destination areas start at pages with different |
* page colors. |
*/ |
int as_area_share(as_t *src_as, uintptr_t src_base, size_t acc_size, |
as_t *dst_as, uintptr_t dst_base, int dst_flags_mask) |
580,6 → 581,20 |
return ENOENT; |
} |
#if 0 /* disable the check for now */ |
#ifdef CONFIG_VIRT_IDX_CACHE |
if (PAGE_COLOR(src_area->base) != PAGE_COLOR(dst_base)) { |
/* |
* Refuse to create illegal address alias. |
*/ |
mutex_unlock(&src_area->lock); |
mutex_unlock(&src_as->lock); |
interrupts_restore(ipl); |
return ENOTSUP; |
} |
#endif /* CONFIG_VIRT_IDX_CACHE */ |
#endif |
if (!src_area->backend || !src_area->backend->share) { |
/* |
* There is no backend or the backend does not |
/trunk/kernel/arch/sparc64/include/mm/page.h |
---|
40,6 → 40,8 |
#define PAGE_WIDTH FRAME_WIDTH |
#define PAGE_SIZE FRAME_SIZE |
#define PAGE_COLOR_BITS 1 /**< 14 - 13; 2^14 == 16K == alias boundary. */ |
#ifdef KERNEL |
#ifndef __ASM__ |
/trunk/kernel/arch/ia64/include/mm/page.h |
---|
41,11 → 41,12 |
#define PAGE_SIZE FRAME_SIZE |
#define PAGE_WIDTH FRAME_WIDTH |
#define PAGE_COLOR_BITS 0 /* dummy */ |
#ifdef KERNEL |
/** Bit width of the TLB-locked portion of kernel address space. */ |
#define KERNEL_PAGE_WIDTH 28 /* 256M */ |
#define KERNEL_PAGE_WIDTH 28 /* 256M */ |
#define PPN_SHIFT 12 |
64,7 → 65,7 |
#define KA2PA(x) ((uintptr_t) (x-(VRN_KERNEL<<VRN_SHIFT))) |
#define PA2KA(x) ((uintptr_t) (x+(VRN_KERNEL<<VRN_SHIFT))) |
#define VHPT_WIDTH 20 /* 1M */ |
#define VHPT_WIDTH 20 /* 1M */ |
#define VHPT_SIZE (1 << VHPT_WIDTH) |
#define PTA_BASE_SHIFT 15 |
/trunk/kernel/arch/ppc32/include/mm/page.h |
---|
40,6 → 40,8 |
#define PAGE_WIDTH FRAME_WIDTH |
#define PAGE_SIZE FRAME_SIZE |
#define PAGE_COLOR_BITS 0 /* dummy */ |
#ifdef KERNEL |
#ifndef __ASM__ |
/trunk/kernel/arch/ia32xen/include/mm/page.h |
---|
40,6 → 40,8 |
#define PAGE_WIDTH FRAME_WIDTH |
#define PAGE_SIZE FRAME_SIZE |
#define PAGE_COLOR_BITS 0 /* dummy */ |
#ifdef KERNEL |
#ifndef __ASM__ |
/trunk/kernel/arch/amd64/include/mm/page.h |
---|
52,6 → 52,8 |
#define PAGE_WIDTH FRAME_WIDTH |
#define PAGE_SIZE FRAME_SIZE |
#define PAGE_COLOR_BITS 0 /* dummy */ |
#ifdef KERNEL |
#ifndef __ASM__ |
/trunk/kernel/arch/ppc64/include/mm/page.h |
---|
40,6 → 40,8 |
#define PAGE_WIDTH FRAME_WIDTH |
#define PAGE_SIZE FRAME_SIZE |
#define PAGE_COLOR_BITS 0 /* dummy */ |
#ifdef KERNEL |
#ifndef __ASM__ |
/trunk/kernel/arch/mips32/include/mm/page.h |
---|
40,6 → 40,8 |
#define PAGE_WIDTH FRAME_WIDTH |
#define PAGE_SIZE FRAME_SIZE |
#define PAGE_COLOR_BITS 0 /* dummy */ |
#ifndef __ASM__ |
# define KA2PA(x) (((uintptr_t) (x)) - 0x80000000) |
# define PA2KA(x) (((uintptr_t) (x)) + 0x80000000) |
/trunk/kernel/arch/ia32/include/mm/page.h |
---|
40,6 → 40,8 |
#define PAGE_WIDTH FRAME_WIDTH |
#define PAGE_SIZE FRAME_SIZE |
#define PAGE_COLOR_BITS 0 /* dummy */ |
#ifdef KERNEL |
#ifndef __ASM__ |