aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/sun4v_ivec.S
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2007-10-12 05:59:40 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-14 00:53:15 -0400
commita650d3839e7a68321e5b76264398a63019b0928b (patch)
treee0500c57687c57bc22d0100b74485033a5738dbf /arch/sparc64/kernel/sun4v_ivec.S
parentd060db63fd38a8a75f666576ef9999c28cdc31cf (diff)
[SPARC64]: Make IVEC pointers 64-bit.
Currently we chain IVEC entries using 32-bit "pointers" because we know that the ivector_table is in the main kernel image, thus below 4GB. This uses proper 64-bit pointers instead. Whilst this bloats up the kernel image size, this sets the infrastructure necessary to significantly shrink the kernel size by using physical addresses and dynamically allocating the ivector table. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/sun4v_ivec.S')
-rw-r--r--arch/sparc64/kernel/sun4v_ivec.S8
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/sparc64/kernel/sun4v_ivec.S b/arch/sparc64/kernel/sun4v_ivec.S
index 574bc248bca6..e3e9d4c1574b 100644
--- a/arch/sparc64/kernel/sun4v_ivec.S
+++ b/arch/sparc64/kernel/sun4v_ivec.S
@@ -101,14 +101,14 @@ sun4v_dev_mondo:
101 101
102 /* Get &ivector_table[IVEC] into %g4. */ 102 /* Get &ivector_table[IVEC] into %g4. */
103 sethi %hi(ivector_table), %g4 103 sethi %hi(ivector_table), %g4
104 sllx %g3, 3, %g3 104 sllx %g3, 4, %g3
105 or %g4, %lo(ivector_table), %g4 105 or %g4, %lo(ivector_table), %g4
106 add %g4, %g3, %g4 106 add %g4, %g3, %g4
107 107
108 /* Insert ivector_table[] entry into __irq_work[] queue. */ 108 /* Insert ivector_table[] entry into __irq_work[] queue. */
109 lduw [%g1], %g2 /* g2 = irq_work(cpu) */ 109 ldx [%g1], %g2 /* g2 = irq_work(cpu) */
110 stw %g2, [%g4 + 0x00] /* bucket->irq_chain = g2 */ 110 stx %g2, [%g4 + 0x00] /* bucket->irq_chain = g2 */
111 stw %g4, [%g1] /* irq_work(cpu) = bucket */ 111 stx %g4, [%g1] /* irq_work(cpu) = bucket */
112 112
113 /* Signal the interrupt by setting (1 << pil) in %softint. */ 113 /* Signal the interrupt by setting (1 << pil) in %softint. */
114 wr %g0, 1 << PIL_DEVICE_IRQ, %set_softint 114 wr %g0, 1 << PIL_DEVICE_IRQ, %set_softint