public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: "Uwe Kleine-König" <Uwe.Kleine-Koenig@digi.com>
Cc: <linux-kernel@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH] handle failure of irqchip->set_type in setup_irq
Date: Wed, 2 Jul 2008 02:49:26 -0700	[thread overview]
Message-ID: <20080702024926.59488cc7.akpm@linux-foundation.org> (raw)
In-Reply-To: <20080702091757.GA1144@digi.com>

On Wed, 2 Jul 2008 11:17:57 +0200 Uwe Kleine-K__nig <Uwe.Kleine-Koenig@digi.com> wrote:

> Hello,
> 
> [extending the Cc: list]
> 
> Uwe Kleine-K__nig wrote:
> > set_type returns an int but currently setup_irq ignores that.
> > 
> > To save me from undoing some changes setting the IRQ_NO_BALANCING bit in
> > desc->flags, setting IRQ_PER_CPU in desc->status and adding the new
> > action to desc is only done after set_type succeeded.
> > 
> > Signed-off-by: Uwe Kleine-K__nig <Uwe.Kleine-Koenig@digi.com>
> > ---
> > Hello,
> > 
> > in my case set_type returns an error because gpio-key tries to use
> > IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING and my irq-chip can only do
> > one of these.
> 
> up to now I didn't get any response for this patch.  It addresses a real
> problem for my platform so I really like to have a fix in.
> 
> In mmotm of 2008-07-01-21-57 kernel/irq/manage.c is touched[1],
> too, but git was able to automerge the change correctly when applying it
> on top of mmotm.
> 
> For your convenience you can find the patch again at the end of this
> mail.
> 
> Andrew:  Do you can take this patch into mm?
> 

>From a brief squint the patch seems to be reasonable.  But the
changelog is a bit mangled.  Perhaps you could have another go when
resending it.  Explan more clearly under what circumststances your
->set_type() implementation can fail and why you require the core code
to handle this.

Perhaps we want a dump_stack() on the error path so we can see who
goofed.  Or a print_symbol() of desc->chip->set_type.  Or perhaps not.

Did you check that all the current ->set_type() implementations are
returning zero?


> 
> [1] kernel/irq/manage.c is modified by linux-next patch.  The relevant
>     commit is:
> 	1840475... genirq: Expose default irq affinity mask (take 3)
> 
> 
> > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
> > index 46d6611..bc990a1 100644
> > --- a/kernel/irq/manage.c
> > +++ b/kernel/irq/manage.c
> > @@ -281,6 +281,7 @@ int setup_irq(unsigned int irq, struct irqaction *new)
> >  	const char *old_name = NULL;
> >  	unsigned long flags;
> >  	int shared = 0;
> > +	int ret;
> >  
> >  	if (irq >= NR_IRQS)
> >  		return -EINVAL;
> > @@ -338,26 +339,23 @@ int setup_irq(unsigned int irq, struct irqaction *new)
> >  		shared = 1;
> >  	}
> >  
> > -	*p = new;
> > -
> > -	/* Exclude IRQ from balancing */
> > -	if (new->flags & IRQF_NOBALANCING)
> > -		desc->status |= IRQ_NO_BALANCING;
> > -
> >  	if (!shared) {
> >  		irq_chip_set_defaults(desc->chip);
> >  
> > -#if defined(CONFIG_IRQ_PER_CPU)
> > -		if (new->flags & IRQF_PERCPU)
> > -			desc->status |= IRQ_PER_CPU;
> > -#endif
> > -
> >  		/* Setup the type (level, edge polarity) if configured: */
> >  		if (new->flags & IRQF_TRIGGER_MASK) {
> > -			if (desc->chip && desc->chip->set_type)
> > -				desc->chip->set_type(irq,
> > +			if (desc->chip && desc->chip->set_type) {
> > +				ret = desc->chip->set_type(irq,
> >  						new->flags & IRQF_TRIGGER_MASK);
> > -			else
> > +				if (ret) {
> > +					pr_err("setting flow type for irq %u "
> > +							"failed\n", irq);
> > +					spin_unlock_irqrestore(&desc->lock,
> > +							flags);
> > +					return ret;
> > +				}
> > +
> > +			} else
> >  				/*
> >  				 * IRQF_TRIGGER_* but the PIC does not support
> >  				 * multiple flow-types?
> > @@ -369,6 +367,11 @@ int setup_irq(unsigned int irq, struct irqaction *new)
> >  		} else
> >  			compat_irq_chip_set_default_handler(desc);
> >  
> > +#if defined(CONFIG_IRQ_PER_CPU)
> > +		if (new->flags & IRQF_PERCPU)
> > +			desc->status |= IRQ_PER_CPU;
> > +#endif
> > +
> >  		desc->status &= ~(IRQ_AUTODETECT | IRQ_WAITING |
> >  				  IRQ_INPROGRESS | IRQ_SPURIOUS_DISABLED);
> >  
> > @@ -383,6 +386,13 @@ int setup_irq(unsigned int irq, struct irqaction *new)
> >  			/* Undo nested disables: */
> >  			desc->depth = 1;
> >  	}
> > +
> > +	*p = new;
> > +
> > +	/* Exclude IRQ from balancing */
> > +	if (new->flags & IRQF_NOBALANCING)
> > +		desc->status |= IRQ_NO_BALANCING;
> > +
> >  	/* Reset broken irq detection when installing new handler */
> >  	desc->irq_count = 0;
> >  	desc->irqs_unhandled = 0;


  reply	other threads:[~2008-07-02  9:50 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-25 13:11 [PATCH] handle failure of irqchip->set_type in setup_irq Uwe Kleine-König
2008-07-02  9:17 ` Uwe Kleine-König
2008-07-02  9:49   ` Andrew Morton [this message]
2008-07-02 10:09     ` Uwe Kleine-König
2008-07-04 10:46 ` [PATCH v2] " Uwe Kleine-König
2008-07-04 17:17   ` Andrew Morton
2008-07-04 18:43     ` Uwe Kleine-König
2008-07-04 19:08       ` Andrew Morton
2008-07-09 13:13         ` Uwe Kleine-König
2008-07-09 21:52           ` Andrew Morton
2008-07-10  8:23             ` Uwe Kleine-König
2008-07-10  8:28               ` Andrew Morton
     [not found]   ` <20080704111540.ddffd241.akpm@linux-foundation.org>
     [not found]     ` <alpine.LFD.1.10.0807041147450.2815@woody.linux-foundation.org>
     [not found]       ` <alpine.LFD.1.10.0807041250220.2815@woody.linux-foundation.org>
     [not found]         ` <20080704132716.f1e12554.akpm@linux-foundation.org>
     [not found]           ` <20080704204252.GM14894@parisc-linux.org>
2008-07-04 22:01             ` the printk problem Andrew Morton
2008-07-05  2:03               ` Matthew Wilcox
2008-07-22 10:05                 ` [PATCH] Make u64 long long on all architectures (was: the printk problem) Andrew Morton
2008-07-22 10:36                   ` Michael Ellerman
2008-07-22 10:53                     ` Andrew Morton
2008-07-22 11:36                     ` Benjamin Herrenschmidt
2008-07-22 11:35                   ` Benjamin Herrenschmidt
2008-07-05 10:20               ` the printk problem Denys Vlasenko
2008-07-05 11:33               ` Jan Engelhardt
2008-07-05 12:52                 ` Vegard Nossum
2008-07-05 13:24                   ` Jan Engelhardt
2008-07-05 13:50                     ` Vegard Nossum
2008-07-05 14:07                       ` Jan Engelhardt
2008-07-05 17:56                   ` Linus Torvalds
2008-07-05 18:40                     ` Jan Engelhardt
2008-07-05 18:44                       ` Linus Torvalds
2008-07-05 18:41                     ` Vegard Nossum
2008-07-05 18:52                       ` Matthew Wilcox
2008-07-06  0:02                         ` Pekka Enberg
2008-07-06  5:17                           ` Randy Dunlap
     [not found]         ` <1215212420.8970.8.camel@pasglop>
     [not found]           ` <alpine.LFD.1.10.0807041622270.2815@woody.linux-foundation.org>
     [not found]             ` <alpine.LFD.1.10.0807051523180.2847@woody.linux-foundation.org>
     [not found]               ` <20080706052741.GA18928@elte.hu>
2008-07-06  5:37                 ` Linus Torvalds
2008-07-06  5:53                   ` Ingo Molnar
2008-07-06  6:13                     ` Ingo Molnar

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=20080702024926.59488cc7.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=Uwe.Kleine-Koenig@digi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    /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