Commit 2f7ee7c6 authored by David S. Miller's avatar David S. Miller Committed by David S. Miller

[SPARC64]: Increase swapper_tsb size to 32K.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a8b900d8
...@@ -484,16 +484,16 @@ sparc64_boot_end: ...@@ -484,16 +484,16 @@ sparc64_boot_end:
/* /*
* The following skip makes sure the trap table in ttable.S is aligned * The following skip makes sure the trap table in ttable.S is aligned
* on a 32K boundary as required by the v9 specs for TBA register. * on a 32K boundary as required by the v9 specs for TBA register.
*
* We align to a 32K boundary, then we have the 32K kernel TSB,
* then the 32K aligned trap table.
*/ */
1: 1:
.skip 0x4000 + _start - 1b .skip 0x4000 + _start - 1b
#ifdef CONFIG_SBUS .globl swapper_tsb
/* This is just a hack to fool make depend config.h discovering swapper_tsb:
strategy: As the .S files below need config.h, but .skip (32 * 1024)
make depend does not find it for them, we include config.h
in head.S */
#endif
! 0x0000000000408000 ! 0x0000000000408000
......
...@@ -43,9 +43,6 @@ SECTIONS ...@@ -43,9 +43,6 @@ SECTIONS
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(8192);
swapper_tsb = .;
. += 8192;
. = ALIGN(8192); . = ALIGN(8192);
__init_begin = .; __init_begin = .;
.init.text : { .init.text : {
......
...@@ -12,14 +12,6 @@ ...@@ -12,14 +12,6 @@
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/tsb.h> #include <asm/tsb.h>
/* We use an 8K TSB for the whole kernel, this allows to
* handle about 4MB of modules and vmalloc mappings without
* incurring many hash conflicts.
*/
#define KERNEL_TSB_SIZE_BYTES 8192
#define KERNEL_TSB_NENTRIES \
(KERNEL_TSB_SIZE_BYTES / sizeof(struct tsb))
extern struct tsb swapper_tsb[KERNEL_TSB_NENTRIES]; extern struct tsb swapper_tsb[KERNEL_TSB_NENTRIES];
static inline unsigned long tsb_hash(unsigned long vaddr, unsigned long nentries) static inline unsigned long tsb_hash(unsigned long vaddr, unsigned long nentries)
......
...@@ -143,6 +143,14 @@ ...@@ -143,6 +143,14 @@
add REG1, (3 * 8), REG1; \ add REG1, (3 * 8), REG1; \
99: 99:
/* We use a 32K TSB for the whole kernel, this allows to
* handle about 16MB of modules and vmalloc mappings without
* incurring many hash conflicts.
*/
#define KERNEL_TSB_SIZE_BYTES (32 * 1024)
#define KERNEL_TSB_NENTRIES \
(KERNEL_TSB_SIZE_BYTES / 16)
/* Do a kernel TSB lookup at tl>0 on VADDR+TAG, branch to OK_LABEL /* Do a kernel TSB lookup at tl>0 on VADDR+TAG, branch to OK_LABEL
* on TSB hit. REG1, REG2, REG3, and REG4 are used as temporaries * on TSB hit. REG1, REG2, REG3, and REG4 are used as temporaries
* and the found TTE will be left in REG1. REG3 and REG4 must * and the found TTE will be left in REG1. REG3 and REG4 must
...@@ -150,12 +158,11 @@ ...@@ -150,12 +158,11 @@
* *
* VADDR and TAG will be preserved and not clobbered by this macro. * VADDR and TAG will be preserved and not clobbered by this macro.
*/ */
/* XXX non-8K base page size support... */
#define KERN_TSB_LOOKUP_TL1(VADDR, TAG, REG1, REG2, REG3, REG4, OK_LABEL) \ #define KERN_TSB_LOOKUP_TL1(VADDR, TAG, REG1, REG2, REG3, REG4, OK_LABEL) \
sethi %hi(swapper_tsb), REG1; \ sethi %hi(swapper_tsb), REG1; \
or REG1, %lo(swapper_tsb), REG1; \ or REG1, %lo(swapper_tsb), REG1; \
srlx VADDR, 13, REG2; \ srlx VADDR, PAGE_SHIFT, REG2; \
and REG2, (512 - 1), REG2; \ and REG2, (KERNEL_TSB_NENTRIES - 1), REG2; \
sllx REG2, 4, REG2; \ sllx REG2, 4, REG2; \
add REG1, REG2, REG2; \ add REG1, REG2, REG2; \
ldda [REG2] ASI_NUCLEUS_QUAD_LDD, REG3; \ ldda [REG2] ASI_NUCLEUS_QUAD_LDD, REG3; \
......
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