When sending cache flushing IPIs, don't try to IPI the triggering CPU
itself; this causes undefined behaviour on UltraSPARCs. In particular, the interrupt packet data words will not necessarily be delivered correctly, which would result in a crash. This bug also caused the cache-flushing work to be done twice on the triggering CPU (when it did not cause crashes). Reviewed by: jake
This commit is contained in:
parent
737d08f31e
commit
a935ed4fae
@ -116,8 +116,8 @@ ipi_dcache_page_inval(vm_offset_t pa)
|
||||
ica = &ipi_cache_args;
|
||||
ica->ica_mask = all_cpus;
|
||||
ica->ica_pa = pa;
|
||||
cpu_ipi_selected(all_cpus, 0, (u_long)tl_ipi_dcache_page_inval,
|
||||
(u_long)ica);
|
||||
cpu_ipi_selected(PCPU_GET(other_cpus), 0,
|
||||
(u_long)tl_ipi_dcache_page_inval, (u_long)ica);
|
||||
return (&ica->ica_mask);
|
||||
}
|
||||
|
||||
@ -131,8 +131,8 @@ ipi_icache_page_inval(vm_offset_t pa)
|
||||
ica = &ipi_cache_args;
|
||||
ica->ica_mask = all_cpus;
|
||||
ica->ica_pa = pa;
|
||||
cpu_ipi_selected(all_cpus, 0, (u_long)tl_ipi_icache_page_inval,
|
||||
(u_long)ica);
|
||||
cpu_ipi_selected(PCPU_GET(other_cpus), 0,
|
||||
(u_long)tl_ipi_icache_page_inval, (u_long)ica);
|
||||
return (&ica->ica_mask);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user