Commit a9919646 authored by David S. Miller's avatar David S. Miller

sparc32: Kill trap table freeing code.

Normally, srmmu uses different trap table register values to allow
determination of the cpu we're on.  All of the trap tables have
identical content, they just sit at different offsets from the first
trap table, and the offset shifted down and masked out determines
the cpu we are on.

The code tries to free them up when they aren't actually used
(don't have all 4 cpus, we're on sun4d, etc.) but that causes
problems.

For one thing it triggers false positives in the DMA debugging
code.  And fixing that up while preserving this relative offset
thing isn't trivial.

So just kill the freeing code, it costs us at most 3 pages, big
deal...
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e2c6cbd9
...@@ -162,9 +162,6 @@ extern void cpu_panic(void); ...@@ -162,9 +162,6 @@ extern void cpu_panic(void);
*/ */
extern struct linux_prom_registers smp_penguin_ctable; extern struct linux_prom_registers smp_penguin_ctable;
extern unsigned long trapbase_cpu1[];
extern unsigned long trapbase_cpu2[];
extern unsigned long trapbase_cpu3[];
void __init smp4d_boot_cpus(void) void __init smp4d_boot_cpus(void)
{ {
...@@ -235,25 +232,6 @@ void __init smp4d_smp_done(void) ...@@ -235,25 +232,6 @@ void __init smp4d_smp_done(void)
*prev = first; *prev = first;
local_flush_cache_all(); local_flush_cache_all();
/* Free unneeded trap tables */
ClearPageReserved(virt_to_page(trapbase_cpu1));
init_page_count(virt_to_page(trapbase_cpu1));
free_page((unsigned long)trapbase_cpu1);
totalram_pages++;
num_physpages++;
ClearPageReserved(virt_to_page(trapbase_cpu2));
init_page_count(virt_to_page(trapbase_cpu2));
free_page((unsigned long)trapbase_cpu2);
totalram_pages++;
num_physpages++;
ClearPageReserved(virt_to_page(trapbase_cpu3));
init_page_count(virt_to_page(trapbase_cpu3));
free_page((unsigned long)trapbase_cpu3);
totalram_pages++;
num_physpages++;
/* Ok, they are spinning and ready to go. */ /* Ok, they are spinning and ready to go. */
smp_processors_ready = 1; smp_processors_ready = 1;
sun4d_distribute_irqs(); sun4d_distribute_irqs();
......
...@@ -121,9 +121,6 @@ void __cpuinit smp4m_callin(void) ...@@ -121,9 +121,6 @@ void __cpuinit smp4m_callin(void)
*/ */
extern struct linux_prom_registers smp_penguin_ctable; extern struct linux_prom_registers smp_penguin_ctable;
extern unsigned long trapbase_cpu1[];
extern unsigned long trapbase_cpu2[];
extern unsigned long trapbase_cpu3[];
void __init smp4m_boot_cpus(void) void __init smp4m_boot_cpus(void)
{ {
...@@ -193,29 +190,6 @@ void __init smp4m_smp_done(void) ...@@ -193,29 +190,6 @@ void __init smp4m_smp_done(void)
*prev = first; *prev = first;
local_flush_cache_all(); local_flush_cache_all();
/* Free unneeded trap tables */
if (!cpu_isset(1, cpu_present_map)) {
ClearPageReserved(virt_to_page(trapbase_cpu1));
init_page_count(virt_to_page(trapbase_cpu1));
free_page((unsigned long)trapbase_cpu1);
totalram_pages++;
num_physpages++;
}
if (!cpu_isset(2, cpu_present_map)) {
ClearPageReserved(virt_to_page(trapbase_cpu2));
init_page_count(virt_to_page(trapbase_cpu2));
free_page((unsigned long)trapbase_cpu2);
totalram_pages++;
num_physpages++;
}
if (!cpu_isset(3, cpu_present_map)) {
ClearPageReserved(virt_to_page(trapbase_cpu3));
init_page_count(virt_to_page(trapbase_cpu3));
free_page((unsigned long)trapbase_cpu3);
totalram_pages++;
num_physpages++;
}
/* Ok, they are spinning and ready to go. */ /* Ok, they are spinning and ready to go. */
} }
......
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