RE: Request_irq fails for IRQ2
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2011-10-09 07:11:51
On Tue, 2011-10-04 at 13:55 +0000, smitha.vanga@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.