74785e79db
arch_vm_aspace_swap(). * The x86 implementation does now maintain a bit mask per vm_translation_map_arch_info indicating on which CPUs the address space is active. This allows flush_tmap() to avoid ICI for user address spaces when the team isn't currently running on any other CPU. In this context ICI is relatively expensive, particularly since we map most pages via vm_map_page() and therefore invoke flush_tmap() pretty much for every single page. This optimization speeds up a "hello world" compilation about 20% on my machine (KDEBUG turned off, freshly booted), but interestingly it has virtually no effect on the "-j2" haiku build time. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27912 a95241bf-73f2-0310-859d-f6bbb57e9c96
33 lines
917 B
C
33 lines
917 B
C
/*
|
|
** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
|
** Distributed under the terms of the OpenBeOS License.
|
|
*/
|
|
#ifndef _KERNEL_ARCH_x86_VM_TRANSLATION_MAP_H
|
|
#define _KERNEL_ARCH_x86_VM_TRANSLATION_MAP_H
|
|
|
|
|
|
#include <arch/vm_translation_map.h>
|
|
|
|
|
|
#define PAGE_INVALIDATE_CACHE_SIZE 64
|
|
|
|
struct page_directory_entry;
|
|
|
|
typedef struct vm_translation_map_arch_info {
|
|
struct page_directory_entry *pgdir_virt;
|
|
struct page_directory_entry *pgdir_phys;
|
|
vint32 active_on_cpus;
|
|
// mask indicating on which CPUs the map is currently used
|
|
int num_invalidate_pages;
|
|
addr_t pages_to_invalidate[PAGE_INVALIDATE_CACHE_SIZE];
|
|
} vm_translation_map_arch_info;
|
|
|
|
|
|
// quick function to return the physical pgdir of a mapping, needed for a context switch
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
#endif
|
|
void *i386_translation_map_get_pgdir(vm_translation_map *map);
|
|
|
|
#endif /* _KERNEL_ARCH_x86_VM_TRANSLATION_MAP_H */
|