Changes in kernel/arch/sparc64/src/smp/sun4u/ipi.c [1b20da0:a35b458] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/smp/sun4u/ipi.c
r1b20da0 ra35b458 97 97 * we explicitly disable preemption. 98 98 */ 99 99 100 100 preemption_disable(); 101 101 102 102 status = asi_u64_read(ASI_INTR_DISPATCH_STATUS, 0); 103 103 if (status & INTR_DISPATCH_STATUS_BUSY) 104 104 panic("Interrupt Dispatch Status busy bit set\n"); 105 105 106 106 assert(!(pstate_read() & PSTATE_IE_BIT)); 107 107 108 108 do { 109 109 set_intr_w_data(func); … … 111 111 (mid << INTR_VEC_DISPATCH_MID_SHIFT) | 112 112 VA_INTR_W_DISPATCH, 0); 113 113 114 114 membar(); 115 115 116 116 do { 117 117 status = asi_u64_read(ASI_INTR_DISPATCH_STATUS, 0); 118 118 } while (status & INTR_DISPATCH_STATUS_BUSY); 119 119 120 120 done = !(status & INTR_DISPATCH_STATUS_NACK); 121 121 if (!done) { … … 128 128 } 129 129 } while (!done); 130 130 131 131 preemption_enable(); 132 132 } … … 147 147 { 148 148 unsigned int i; 149 149 150 150 void (* func)(void); 151 151 152 152 switch (ipi) { 153 153 case IPI_TLB_SHOOTDOWN: … … 158 158 break; 159 159 } 160 160 161 161 /* 162 162 * As long as we don't support hot-plugging … … 165 165 * without locking. 166 166 */ 167 167 168 168 for (i = 0; i < config.cpu_active; i++) { 169 169 if (&cpus[i] == CPU) … … 187 187 { 188 188 assert(&cpus[cpu_id] != CPU); 189 189 190 190 if (ipi == IPI_SMP_CALL) { 191 191 cross_call(cpus[cpu_id].arch.mid, smp_call_ipi_recv);
Note:
See TracChangeset
for help on using the changeset viewer.