PATCH: make usage of set_intr_mask() sane
Jayachandran C.
c.jayachandran at gmail.com
Tue Sep 14 05:33:54 UTC 2010
On Tue, Sep 14, 2010 at 7:37 AM, Neel Natu <neelnatu at gmail.com> wrote:
> Hi,
>
> This patch changes the meaning of the 'mask' argument to
> 'set_intr_mask(mask)' to exactly match the meaning of the IM0..7 bits
> in the CP0 status register.
>
> The way we have it set up right now is exactly the opposite for no
> good reason IMHO.
>
> Please review and let me know if there are any objections.
This is something I thought about doing with the last patch - so I
would like to see this go in.
But I think the reason probably is that on MIPS setting interrupt mask
bit to 1 enables the interrupt, instead of masking (disabling) it.
JC.
> best
> Neel
>
> Index: sys/mips/sibyte/sb_machdep.c
> ===================================================================
> --- sys/mips/sibyte/sb_machdep.c (revision 212587)
> +++ sys/mips/sibyte/sb_machdep.c (working copy)
> @@ -370,7 +370,7 @@
> */
> clock_int_mask = hard_int_mask(5);
> ipi_int_mask = hard_int_mask(platform_ipi_intrnum());
> - set_intr_mask(MIPS_SR_INT_MASK & ~(ipi_int_mask | clock_int_mask));
> + set_intr_mask(ipi_int_mask | clock_int_mask);
> }
>
> int
> Index: sys/mips/include/cpufunc.h
> ===================================================================
> --- sys/mips/include/cpufunc.h (revision 212587)
> +++ sys/mips/include/cpufunc.h (working copy)
> @@ -272,7 +272,7 @@
> uint32_t ostatus;
>
> ostatus = mips_rd_status();
> - mask = (ostatus & ~MIPS_SR_INT_MASK) | (~mask & MIPS_SR_INT_MASK);
> + mask = (ostatus & ~MIPS_SR_INT_MASK) | (mask & MIPS_SR_INT_MASK);
> mips_wr_status(mask);
> return (ostatus);
> }
> Index: sys/mips/cavium/octeon_mp.c
> ===================================================================
> --- sys/mips/cavium/octeon_mp.c (revision 212587)
> +++ sys/mips/cavium/octeon_mp.c (working copy)
> @@ -96,7 +96,7 @@
> */
> clock_int_mask = hard_int_mask(5);
> ipi_int_mask = hard_int_mask(platform_ipi_intrnum());
> - set_intr_mask(MIPS_SR_INT_MASK & ~(ipi_int_mask | clock_int_mask));
> + set_intr_mask(ipi_int_mask | clock_int_mask);
>
> mips_wbflush();
> }
> Index: sys/mips/mips/machdep.c
> ===================================================================
> --- sys/mips/mips/machdep.c (revision 212587)
> +++ sys/mips/mips/machdep.c (working copy)
> @@ -356,7 +356,7 @@
> * Mask all interrupts. Each interrupt will be enabled
> * when handler is installed for it
> */
> - set_intr_mask(MIPS_SR_INT_MASK);
> + set_intr_mask(0);
>
> /* Clear BEV in SR so we start handling our own exceptions */
> mips_wr_status(mips_rd_status() & ~MIPS_SR_BEV);
> Index: sys/mips/mips/trap.c
> ===================================================================
> --- sys/mips/mips/trap.c (revision 212587)
> +++ sys/mips/mips/trap.c (working copy)
> @@ -304,7 +304,7 @@
> * return to userland.
> */
> if (trapframe->sr & MIPS_SR_INT_IE) {
> - set_intr_mask(~(trapframe->sr & MIPS_SR_INT_MASK));
> + set_intr_mask(trapframe->sr & MIPS_SR_INT_MASK);
> intr_enable();
> } else {
> intr_disable();
> _______________________________________________
> freebsd-mips at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-mips
> To unsubscribe, send any mail to "freebsd-mips-unsubscribe at freebsd.org"
>
More information about the freebsd-mips
mailing list