Commit 326b98ef authored by Pete Zaitcev's avatar Pete Zaitcev Committed by David S. Miller

[SPARC]: Trap table alignment for Hyperspace (Keith Weselowsky).

parent 6b373781
...@@ -148,6 +148,9 @@ extern unsigned long fix_kmap_end; ...@@ -148,6 +148,9 @@ extern unsigned long fix_kmap_end;
/* 1 bit <=> 256 bytes of nocache <=> 64 PTEs */ /* 1 bit <=> 256 bytes of nocache <=> 64 PTEs */
#define SRMMU_NOCACHE_BITMAP_SHIFT (PAGE_SHIFT - 4) #define SRMMU_NOCACHE_BITMAP_SHIFT (PAGE_SHIFT - 4)
/* The context table is a nocache user with the biggest alignment needs. */
#define SRMMU_NOCACHE_ALIGN_MAX (sizeof(ctxd_t)*SRMMU_MAX_CONTEXTS)
void *srmmu_nocache_pool; void *srmmu_nocache_pool;
void *srmmu_nocache_bitmap; void *srmmu_nocache_bitmap;
static struct bit_map srmmu_nocache_map; static struct bit_map srmmu_nocache_map;
...@@ -320,6 +323,10 @@ static unsigned long __srmmu_get_nocache(int size, int align) ...@@ -320,6 +323,10 @@ static unsigned long __srmmu_get_nocache(int size, int align)
printk("Size 0x%x unaligned int nocache request\n", size); printk("Size 0x%x unaligned int nocache request\n", size);
size += SRMMU_NOCACHE_BITMAP_SHIFT-1; size += SRMMU_NOCACHE_BITMAP_SHIFT-1;
} }
if (align > SRMMU_NOCACHE_ALIGN_MAX) {
BUG();
return 0;
}
offset = bit_map_string_get(&srmmu_nocache_map, offset = bit_map_string_get(&srmmu_nocache_map,
size >> SRMMU_NOCACHE_BITMAP_SHIFT, size >> SRMMU_NOCACHE_BITMAP_SHIFT,
...@@ -425,7 +432,8 @@ void srmmu_nocache_init(void) ...@@ -425,7 +432,8 @@ void srmmu_nocache_init(void)
bitmap_bits = srmmu_nocache_size >> SRMMU_NOCACHE_BITMAP_SHIFT; bitmap_bits = srmmu_nocache_size >> SRMMU_NOCACHE_BITMAP_SHIFT;
srmmu_nocache_pool = __alloc_bootmem(srmmu_nocache_size, PAGE_SIZE, 0UL); srmmu_nocache_pool = __alloc_bootmem(srmmu_nocache_size,
SRMMU_NOCACHE_ALIGN_MAX, 0UL);
memset(srmmu_nocache_pool, 0, srmmu_nocache_size); memset(srmmu_nocache_pool, 0, srmmu_nocache_size);
srmmu_nocache_bitmap = __alloc_bootmem(bitmap_bits >> 3, SMP_CACHE_BYTES, 0UL); srmmu_nocache_bitmap = __alloc_bootmem(bitmap_bits >> 3, SMP_CACHE_BYTES, 0UL);
......
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
#include <asm/thread_info.h> /* TI_UWINMASK for WINDOW_FLUSH */ #include <asm/thread_info.h> /* TI_UWINMASK for WINDOW_FLUSH */
#endif #endif
/* Number of contexts is implementation-dependent; 64k is the most we support */
#define SRMMU_MAX_CONTEXTS 65536
/* PMD_SHIFT determines the size of the area a second-level page table entry can map */ /* PMD_SHIFT determines the size of the area a second-level page table entry can map */
#define SRMMU_PMD_SHIFT 18 #define SRMMU_PMD_SHIFT 18
#define SRMMU_PMD_SIZE (1UL << SRMMU_PMD_SHIFT) #define SRMMU_PMD_SIZE (1UL << SRMMU_PMD_SHIFT)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment