linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: smitha.vanga@wipro.com
Cc: scottwood@freescale.com, linuxppc-dev@lists.ozlabs.org
Subject: RE: Request_irq fails for IRQ2
Date: Sun, 09 Oct 2011 09:11:43 +0200	[thread overview]
Message-ID: <1318144303.29415.364.camel@pasglop> (raw)
In-Reply-To: <40631E9A2581F14BA60888C87A76A1FE0147A1@HYD-MKD-MBX4.wipro.com>

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.

  reply	other threads:[~2011-10-09  7:11 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-03 14:27 Request_irq fails for IRQ2 smitha.vanga
2011-10-03 17:24 ` Scott Wood
2011-10-04  6:15   ` smitha.vanga
2011-10-04 11:21   ` smitha.vanga
2011-10-04 15:30     ` Scott Wood
2011-10-09  7:07     ` Benjamin Herrenschmidt
2011-10-04 13:55   ` smitha.vanga
2011-10-09  7:11     ` Benjamin Herrenschmidt [this message]
2011-10-04  9:25 ` Vijay Nikam
  -- strict thread matches above, loose matches on Subject: below --
2011-08-26 20:08 Kernel boot up Scott Wood
2011-10-03 12:31 ` Request_irq fails for IRQ2 smitha.vanga

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1318144303.29415.364.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=scottwood@freescale.com \
    --cc=smitha.vanga@wipro.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).