Commit 10397e40 authored by David S. Miller's avatar David S. Miller

[SPARC64]: Allocate ivector_table dynamically.

Shrinks kernel by 16K compared to before the IVEC physical
address changes.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent eb2d8d60
...@@ -64,7 +64,7 @@ struct ino_bucket { ...@@ -64,7 +64,7 @@ struct ino_bucket {
}; };
#define NUM_IVECS (IMAP_INR + 1) #define NUM_IVECS (IMAP_INR + 1)
struct ino_bucket ivector_table[NUM_IVECS] __attribute__ ((aligned (SMP_CACHE_BYTES))); struct ino_bucket *ivector_table;
unsigned long ivector_table_pa; unsigned long ivector_table_pa;
#define __irq_ino(irq) \ #define __irq_ino(irq) \
...@@ -928,22 +928,22 @@ static struct irqaction timer_irq_action = { ...@@ -928,22 +928,22 @@ static struct irqaction timer_irq_action = {
.name = "timer", .name = "timer",
}; };
/* XXX Belongs in a common location. XXX */
static unsigned long kimage_addr_to_ra(void *p)
{
unsigned long val = (unsigned long) p;
return kern_base + (val - KERNBASE);
}
/* Only invoked on boot processor. */ /* Only invoked on boot processor. */
void __init init_IRQ(void) void __init init_IRQ(void)
{ {
unsigned long size;
map_prom_timers(); map_prom_timers();
kill_prom_timer(); kill_prom_timer();
memset(&ivector_table[0], 0, sizeof(ivector_table));
ivector_table_pa = kimage_addr_to_ra(&ivector_table[0]); size = sizeof(struct ino_bucket) * NUM_IVECS;
ivector_table = alloc_bootmem_low(size);
if (!ivector_table) {
prom_printf("Fatal error, cannot allocate ivector_table\n");
prom_halt();
}
ivector_table_pa = __pa(ivector_table);
if (tlb_type == hypervisor) if (tlb_type == hypervisor)
sun4v_init_mondo_queues(); sun4v_init_mondo_queues();
......
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