OK Chris
On 31/3/2023 3:49 am, Kinsey Moore wrote: > Do not try to alter IRQ server handlers while executing in the IRQ > server thread context. This change avoids a deadlock in CGEM error > condition handling that causes a reinitialization of the driver which > attempts to reinstall the IRQ handler from within the IRQ handler. This > deadlocks inside the IRQ server handler installation code while holding > the lwIP system protection lock thus deadlocking all threads that try to > access lwIP functionality. > --- > rtemslwip/zynqmp/xil_shims.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/rtemslwip/zynqmp/xil_shims.c b/rtemslwip/zynqmp/xil_shims.c > index ec9ed12..2eda0c5 100644 > --- a/rtemslwip/zynqmp/xil_shims.c > +++ b/rtemslwip/zynqmp/xil_shims.c > @@ -27,8 +27,10 @@ > #include "xil_mmu.h" > #include <rtems/rtems/cache.h> > #include <rtems/rtems/intr.h> > +#include <rtems/score/threadimpl.h> > #include <libcpu/mmu-vmsav8-64.h> > #include <stdio.h> > +#include <string.h> > > #define TWO_MB (2*1024*1024) > #define ONE_GB (1024*1024*1024) > @@ -67,6 +69,15 @@ BaseType_t xPortInstallInterruptHandler( > void *pvCallBackRef > ) > { > + char name[10]; > + > + /* Is this running in the context of any interrupt server tasks? */ > + _Thread_Get_name( _Thread_Get_executing(), name, sizeof( name ) ); > + if (strcmp(name, "IRQS") == 0) { > + /* Can't run this from within an IRQ Server thread context */ > + return RTEMS_ILLEGAL_ON_SELF; > + } > + > rtems_status_code sc = rtems_interrupt_server_handler_install( > RTEMS_INTERRUPT_SERVER_DEFAULT, > ucInterruptID, _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel