diff options
Diffstat (limited to 'c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen83xx/ChangeLog | 11 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen83xx/irq/irq_init.c | 31 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/virtex/ChangeLog | 11 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c | 31 |
4 files changed, 54 insertions, 30 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen83xx/ChangeLog b/c/src/lib/libbsp/powerpc/gen83xx/ChangeLog index 10107de47a..fd48f6f955 100644 --- a/c/src/lib/libbsp/powerpc/gen83xx/ChangeLog +++ b/c/src/lib/libbsp/powerpc/gen83xx/ChangeLog @@ -1,3 +1,14 @@ +2007-09-12 Joel Sherrill <joel.sherrill@OARcorp.com> + + PR 1257/bsps + * irq/irq_init.c: Code outside of cpukit should use the public API for + rtems_interrupt_disable/rtems_interrupt_enable. By bypassing the + public API and directly accessing _CPU_ISR_Disable and + _CPU_ISR_Enable, they were bypassing the compiler memory barrier + directive which could lead to problems. This patch also changes the + type of the variable passed into these routines and addresses minor + style issues. + 2007-09-11 Joel Sherrill <joel.sherrill@OARcorp.com> * Makefile.am: Do not include networking drivers if networking is diff --git a/c/src/lib/libbsp/powerpc/gen83xx/irq/irq_init.c b/c/src/lib/libbsp/powerpc/gen83xx/irq/irq_init.c index c930f7bcbf..54f99d2596 100644 --- a/c/src/lib/libbsp/powerpc/gen83xx/irq/irq_init.c +++ b/c/src/lib/libbsp/powerpc/gen83xx/irq/irq_init.c @@ -136,7 +136,8 @@ void _ThreadProcessSignalsFromIrq (BSP_Exception_frame* ctx) ***********************************************************/ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) { - unsigned int level; + rtems_interrupt_level level; + /* * check for valid irq name * if invalid, print error and return 0 @@ -149,12 +150,12 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) /* * disable interrupts */ - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); /* * check, that default handler is installed now */ if (rtemsIrqTbl[irq->name].hdl != BSP_rtems_irq_config->defaultEntry.hdl) { - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); printk("IRQ vector %d already connected\n",irq->name); return 0; } @@ -176,14 +177,14 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) /* * reenable interrupts */ - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } int BSP_get_current_rtems_irq_handler (rtems_irq_connect_data* irq) { - unsigned int level; + rtems_interrupt_level level; /* * check for valid IRQ name @@ -191,18 +192,18 @@ int BSP_get_current_rtems_irq_handler (rtems_irq_connect_data* irq) if (!BSP_IS_VALID_IRQ(irq->name)) { return 0; } - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); /* * return current IRQ entry */ *irq = rtemsIrqTbl[irq->name]; - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) { - unsigned int level; + rtems_interrupt_level level; /* * check for valid IRQ name @@ -210,12 +211,12 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) if (!BSP_IS_VALID_IRQ(irq->name)) { return 0; } - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); /* * check, that specified handler is really connected now */ if (rtemsIrqTbl[irq->name].hdl != irq->hdl) { - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 0; } /* @@ -236,7 +237,7 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) /* * reenable interrupts */ - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } @@ -259,10 +260,10 @@ int BSP_rtems_irq_mngt_get(rtems_irq_global_settings** ret_ptr) */ int BSP_rtems_irq_mngt_set(rtems_irq_global_settings* config) { - int i; - unsigned int level; + int i; + rtems_interrupt_level level; - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); /* * store given configuration */ @@ -302,7 +303,7 @@ int BSP_rtems_irq_mngt_set(rtems_irq_global_settings* config) } } } - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } /********************************************** diff --git a/c/src/lib/libbsp/powerpc/virtex/ChangeLog b/c/src/lib/libbsp/powerpc/virtex/ChangeLog index a03d567a1b..1d3c4e6a37 100644 --- a/c/src/lib/libbsp/powerpc/virtex/ChangeLog +++ b/c/src/lib/libbsp/powerpc/virtex/ChangeLog @@ -1,3 +1,14 @@ +2007-09-12 Joel Sherrill <joel.sherrill@OARcorp.com> + + PR 1257/bsps + * irq/irq_init.c: Code outside of cpukit should use the public API for + rtems_interrupt_disable/rtems_interrupt_enable. By bypassing the + public API and directly accessing _CPU_ISR_Disable and + _CPU_ISR_Enable, they were bypassing the compiler memory barrier + directive which could lead to problems. This patch also changes the + type of the variable passed into these routines and addresses minor + style issues. + 2007-09-11 Joel Sherrill <joel.sherrill@OARcorp.com> * Makefile.am, include/bsp.h: Do not include networking diff --git a/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c b/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c index a3bd21cd31..661c8a8c75 100644 --- a/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c +++ b/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c @@ -143,7 +143,8 @@ void _ThreadProcessSignalsFromIrq (BSP_Exception_frame* ctx) ***********************************************************/ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) { - unsigned int level; + rtems_interrupt_level level; + /* * check for valid irq name * if invalid, print error and return 0 @@ -156,12 +157,12 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) /* * disable interrupts */ - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); /* * check, that default handler is installed now */ if (rtemsIrqTbl[irq->name].hdl != BSP_rtems_irq_config->defaultEntry.hdl) { - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); printk("IRQ vector %d already connected\n",irq->name); return 0; } @@ -183,14 +184,14 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) /* * reenable interrupts */ - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } int BSP_get_current_rtems_irq_handler (rtems_irq_connect_data* irq) { - unsigned int level; + rtems_interrupt_level level; /* * check for valid IRQ name @@ -198,18 +199,18 @@ int BSP_get_current_rtems_irq_handler (rtems_irq_connect_data* irq) if (!BSP_IS_VALID_IRQ(irq->name)) { return 0; } - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); /* * return current IRQ entry */ *irq = rtemsIrqTbl[irq->name]; - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) { - unsigned int level; + rtems_interrupt_level level; /* * check for valid IRQ name @@ -217,12 +218,12 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) if (!BSP_IS_VALID_IRQ(irq->name)) { return 0; } - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); /* * check, that specified handler is really connected now */ if (rtemsIrqTbl[irq->name].hdl != irq->hdl) { - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 0; } /* @@ -243,7 +244,7 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) /* * reenable interrupts */ - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } @@ -266,10 +267,10 @@ int BSP_rtems_irq_mngt_get(rtems_irq_global_settings** ret_ptr) */ int BSP_rtems_irq_mngt_set(rtems_irq_global_settings* config) { - int i; - unsigned int level; + int i; + rtems_interrupt_level level; - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); /* * store given configuration */ @@ -309,7 +310,7 @@ int BSP_rtems_irq_mngt_set(rtems_irq_global_settings* config) } } } - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } /********************************************** |