linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* Regression in 3.2.9 for omap-serial (at least)
@ 2012-03-08 10:55 Enrico Scholz
  2012-03-08 11:46 ` Thomas Gleixner
  0 siblings, 1 reply; 6+ messages in thread
From: Enrico Scholz @ 2012-03-08 10:55 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

the commit "genirq: Unmask oneshot irqs when thread was not woken"[1]
breaks at least the omap-serial driver which requests a shared interrupt
as

 --- arch/arm/mach-omap2/serial.c ---
	ret = request_threaded_irq(uart->irq, NULL, omap_uart_interrupt,
				   IRQF_SHARED, "serial idle", (void *)uart);

 --- drivers/tty/serial/omap-serial.c
	retval = request_irq(up->port.irq, serial_omap_irq, up->port.irqflags,
				up->name, up);


(note the missing IRQF_ONESHOT in the first piece of code)


Where previously 

  if (!irqd_irq_disabled(&desc->irq_data) && !(desc->istate & IRQS_ONESHOT))
          unmask_irq(desc);

was checked in kernel/irq/chip.c, now

  if (!irqd_irq_disabled(&desc->irq_data) &&
  	    irqd_irq_masked(&desc->irq_data) && !desc->threads_oneshot)
  		unmask_irq(desc);

will be done.

Because the threaded irq was requested without IRQF_ONESHOT, IRQS_ONESHOT
is not set but 'desc->threads_oneshot' is 1 due to the threaded irq. So,
irq was unmasked with old code but stays masked with the new one.  The new
behavior renders systems unusable because console becomes disfunctional.




Enrico

Footnotes: 
[1]  aa0eb3474beae8f6d9dcc2311dc02bea50cfd7b7

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-03-12 22:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-08 10:55 Regression in 3.2.9 for omap-serial (at least) Enrico Scholz
2012-03-08 11:46 ` Thomas Gleixner
2012-03-08 15:26   ` jean-philippe francois
2012-03-08 19:26     ` Thomas Gleixner
2012-03-09  7:34       ` jean-philippe francois
2012-03-12 22:12         ` Russell King - ARM Linux

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).