From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Thu, 30 Aug 2007 10:36:59 +0200 From: "Axel Beierlein" Content-Type: text/plain; format="flowed"; delsp="yes"; charset="utf-8" MIME-Version: 1.0 References: <46D585E2.70902@domain.hid> <46D669C9.6060805@domain.hid> Content-Transfer-Encoding: 8bit Message-ID: In-Reply-To: <46D669C9.6060805@domain.hid> Subject: Re: [Xenomai-help] System hangs in/after rtdm_lock_put_irqrestore List-Id: Help regarding installation and common use of Xenomai List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Xenomai Am 30.08.2007, 08:55 Uhr, schrieb Jan Kiszka : > Axel Beierlein wrote: >> Am 29.08.2007, 16:42 Uhr, schrieb Jan Kiszka : >> >>> Axel Beierlein wrote: >>>> what could it be that an simple rt_dev_open locks up my system when it >>>> calls rtdm_lock_put_irqrestore? >>>> >>>> [...] >>>> if (rtdm_irq_request(&ctx->irq_handle, >>>> MPC5xxx_PSC2_IRQ, >>>> rt_psc_interrupt, >>>> RTDM_IRQTYPE_SHARED | RTDM_IRQTYPE_EDGE, >>>> context->device->proc_name, >>>> ctx)) >>>> { >>>> printk ("psc5200B.c: request_irq() failed\n"); >>>> return -1; >>>> } >>>> >>>> rtdm_irq_enable(&ctx->irq_handle); >>>> >>>> rtdm_lock_get_irqsave(&ctx->lock, lock_ctx); >>>> >>>> ctx->imr_status = MPC5xxx_PSC_IMR_RXRDY; >>>> out_be16(&psc->mpc5xxx_psc_imr, ctx->imr_status); >>> >>> Let me guess: this line arms the related IRQ source at hw level, no? >>> >> >> Yes you are right. This Bit enables the RX_Ready IRQ at hw level. Sorry >> for the little Code fragment but the code relates to your 16550A.c and i >> don´t want to post all the routines at the moment. >> >>>> >>>> rtdm_lock_put_irqrestore(&ctx->lock, lock_ctx); >>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>> Here i get the crash >>> >>> Because it enabled local IRQ delivery again, and the system ends up in >>> an IRQ storm, or some endless loop in the IRQ handler, or some crash >>> related to IRQ handling. Still just guessing... >>> >>> Jan >>> >> >> But how your UART driver handle this Problem? I have check the Irq >> Handler an implement an printk in it to see where it hangs, but it >> doesn´t step into this handler. > > In case you have an IRQ storm or your handler runs in an endless loop, > you won't be able to read that printk even if it's executed - Linux will > have no chance to dump the message. > > Start debugging with shrinking the handler down to a plain "return > RTDM_IRQ_HANDLED" (or even RTDM_IRQ_NONE so that Xenomai disables the > line), then slowly re-enabling and reviewing your code. That has no effect. It doesn´t step into it. I think there is another Problem, cause when i go back to the userspace applikation after i have opened the device the system locks up when i call a funktion like getchar() Just in following dev_open and dev_close is workin for only one time. But when i call the same applikation a second time it locks up in the rt_open routine at rtdm_lock_put_irqrestore. > > Jan > > PS: reply-to-all Ups, wrong button. Now i know why my message doesn´t appear in the mailing list ;-) Axel