• Uwe Kleine-König's avatar
    generic irqs: handle failure of irqchip->set_type in setup_irq · 82736f4d
    Uwe Kleine-König authored
    set_type returns an int indicating success or failure, but up to now
    setup_irq ignores that.
    
    In my case this resulted in a machine hang:
    
    gpio-keys requested IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, but
    arm/ns9xxx can only trigger on one direction so set_type didn't touch
    the configuration which happens do default to a level sensitiveness and
    returned -EINVAL.  setup_irq ignored that and unmasked the irq.  This
    resulted in an endless triggering of the gpio-key interrupt service
    routine which effectively killed the machine.
    
    With this patch applied setup_irq propagates the error to the caller.
    
    Note that before in the case
    
    	chip && !chip->set_type && !chip->name
    
    a NULL pointer was feed to printk.  This is fixed, too.
    Signed-off-by: default avatarUwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    82736f4d
manage.c 15.7 KB