Hi Mukesh, >> Unless I'm mistaken, there are two things I can see happening with the >> old code: if we hit the IRQ_NONE path enough, we'll report a "nobody >> cared" error (see __report_bad_irq) and disable the interrupt, or for >> the -1 case, we'll immediately log a "bogus return value" error (and, it >> looks like a "no thread function available" error too, from >> warn_no_thread). > > bogus return value" error will not come as > > action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD) > i.e > 0/-1 <= 3 (true)
Well, no. irqreturn_t is an enum, and is being treated as an unsigned value (the signed/unsigned behaviour of an enum is implementation-defined), and: 0xffffffff > 3 so we will *probably* see the bogus return value warning here (based on some brief experimentation with gcc), but that does depend on the compiler. I've submitted a patch to make that comparison more obvious and explicit: https://marc.info/?l=linux-kernel&m=148721917302673 Cheers, Jeremy