Request_irq fails for IRQ2
Benjamin Herrenschmidt
benh at kernel.crashing.org
Sun Oct 9 18:11:43 EST 2011
On Tue, 2011-10-04 at 13:55 +0000, smitha.vanga at wipro.com wrote:
>
> Hi Scoot,
>
> When I try to use a atomic varaible in my ISR I see a kernel crash .
> with mesage BUG: scheduling while atomic:
>
>
>
> Below is the code :
> My ISR
>
> irqreturn_t cpld_irq_handler(int irq, void * dev_id, struct pt_regs
> *regs)
>
> {
>
> wake_up(&cpld_intr_wait);
>
> atomic_inc(&cpld_intr_data); /* incrementing this will indicate the
> poll() that the interrupt is occured */
>
> return 0;
>
> }
This is of course completely racy, you should do the increment -before-
you wake up. I suppose you aren't SMP at the moment but even then, if
you ever switch for example to threaded interrupts or use RT it will
potentially break.
>
> DRIVER_INIT
> static int __init gpio_init(void)
> {
> int ret = 0;
> int virq;
>
>
> atomic_set(&cpld_intr_data, 0); /* initialize
> the Interrupt indicator */
> init_waitqueue_head(&cpld_intr_wait); /* Initialize
> the wait queue */
>
> virq = irq_create_mapping(NULL, CPLD1_INTERRUPT);
See comments earlier about using the device-tree here.
>
> if ((ret = request_irq(virq,cpld_irq_handler, 0, GPIO_CHAR_PATH,
> NULL))!=0)
> {
> printk(KERN_ERR "gpio_init: Could not grab IRQ line for CPLD ret
> = %d\n",ret);
> goto err1;
> }
>
>
> if((s_nGPIOMajor = register_chrdev(MPC8247_DEVICE_MAJOR_NUM,
> GPIO_CHAR_PATH, &gpio_fops))<0)
> {
> GPIO_DBG2("GPIO_DRIVER : unable to get major %d\n",
> s_nGPIOMajor);
> return s_nGPIOMajor;
>
> }else{
> GPIO_DBG2("GPIO_DRIVER : major = %x\n", s_nGPIOMajor
> );
> }
coding style FAIL
> return 0;
>
> }
I don't see anything that does your scheduling while atomic here,
probably a bug in your poll implementation but it's not here.
Oh and stop sending that crap:
> Regards,
> Smitha
>
> Please do not print this email unless it is absolutely necessary.
>
> The information contained in this electronic message and any
> attachments to this message are intended for the exclusive use of the
> addressee(s) and may contain proprietary, confidential or privileged
> information. If you are not the intended recipient, you should not
> disseminate, distribute or copy this e-mail. Please notify the sender
> immediately and destroy all copies of this message and any
> attachments.
>
> WARNING: Computer viruses can be transmitted via email. The recipient
> should check this email and any attachments for the presence of
> viruses. The company accepts no liability for any damage caused by any
> virus transmitted by this email.
It's a complete nonsense on a public mailing list
Ben.
More information about the Linuxppc-dev
mailing list