forked from Imagelibrary/rtems
2008-05-14 Till Straumann <strauman@slac.stanford.edu>
* new-exceptions/bspsupport/irq.c: moved malloc/free outside of irq-protected critical section.
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2008-05-14 Till Straumann <strauman@slac.stanford.edu>
|
||||||
|
|
||||||
|
* new-exceptions/bspsupport/irq.c: moved malloc/free
|
||||||
|
outside of irq-protected critical section.
|
||||||
|
|
||||||
2008-04-24 Joel Sherrill <joel.sherrill@OARcorp.com>
|
2008-04-24 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||||
|
|
||||||
* mpc8260/console-generic/console-generic.c,
|
* mpc8260/console-generic/console-generic.c,
|
||||||
|
|||||||
@@ -86,16 +86,18 @@ int BSP_install_rtems_shared_irq_handler (const rtems_irq_connect_data* irq)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* pre-allocate memory outside of critical section */
|
||||||
|
vchain = (rtems_irq_connect_data*)malloc(sizeof(rtems_irq_connect_data));
|
||||||
|
|
||||||
rtems_interrupt_disable(level);
|
rtems_interrupt_disable(level);
|
||||||
|
|
||||||
if ( (int)rtems_hdl_tbl[irq->name].next_handler == -1 ) {
|
if ( (int)rtems_hdl_tbl[irq->name].next_handler == -1 ) {
|
||||||
rtems_interrupt_enable(level);
|
rtems_interrupt_enable(level);
|
||||||
printk("IRQ vector %d already connected to an unshared handler\n",irq->name);
|
printk("IRQ vector %d already connected to an unshared handler\n",irq->name);
|
||||||
|
free(vchain);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vchain = (rtems_irq_connect_data*)malloc(sizeof(rtems_irq_connect_data));
|
|
||||||
|
|
||||||
/* save off topmost handler */
|
/* save off topmost handler */
|
||||||
vchain[0]= rtems_hdl_tbl[irq->name];
|
vchain[0]= rtems_hdl_tbl[irq->name];
|
||||||
|
|
||||||
@@ -267,7 +269,6 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq)
|
|||||||
vchain = vchain->next_handler;
|
vchain = vchain->next_handler;
|
||||||
rtems_hdl_tbl[irq->name]= *vchain;
|
rtems_hdl_tbl[irq->name]= *vchain;
|
||||||
}
|
}
|
||||||
free(vchain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only disable at PIC if we removed the last handler */
|
/* Only disable at PIC if we removed the last handler */
|
||||||
@@ -282,6 +283,8 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq)
|
|||||||
|
|
||||||
rtems_interrupt_enable(level);
|
rtems_interrupt_enable(level);
|
||||||
|
|
||||||
|
free(vchain);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user