From: Thomas Gleixner <tglx@linutronix.de>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>, "H. Peter Anvin" <hpa@zytor.com>,
Andrew Morton <akpm@linux-foundation.org>,
Suresh Siddha <suresh.b.siddha@intel.com>,
Eric Biederman <ebiederm@xmission.com>,
LKML <linux-kernel@vger.kernel.org>, Julia Lawall <julia@diku.dk>
Subject: Re: [PATCH 06/12] genericirq: make irq_chip related function to take desc
Date: Thu, 4 Mar 2010 15:31:14 +0100 (CET) [thread overview]
Message-ID: <alpine.LFD.2.00.1003041142460.2014@localhost.localdomain> (raw)
In-Reply-To: <1267697339-5491-7-git-send-email-yinghai@kernel.org>
On Thu, 4 Mar 2010, Yinghai Lu wrote:
> /*
> * Fixup enable/disable function pointers
> */
> void irq_chip_set_defaults(struct irq_chip *chip)
> {
> + if (!chip->desc_enable)
> + chip->desc_enable = default_enable_desc;
> + if (!chip->desc_disable)
> + chip->desc_disable = default_disable_desc;
> + if (!chip->desc_startup)
> + chip->desc_startup = default_startup_desc;
This will break all irq_chips which implement enable, disable or
startup. so the check needs to be:
if (!chip->enable && !chip->desc_enable)
> + /*
> + * We use chip->disable, when the user provided its own. When
> + * we have default_disable set for chip->disable, then we need
> + * to use default_shutdown, otherwise the irq line is not
> + * disabled on free_irq():
> + */
> + if (!chip->desc_shutdown)
> + chip->desc_shutdown = chip->desc_disable != default_disable_desc ?
> + chip->desc_disable : default_shutdown_desc;
> + if (!chip->desc_end)
> + chip->desc_end = dummy_irq_chip.desc_end;
Same here.
> @@ -295,10 +295,14 @@ void clear_kstat_irqs(struct irq_desc *desc)
> static void ack_bad(unsigned int irq)
Why do we keep that function around ?
> {
> struct irq_desc *desc = irq_to_desc(irq);
> -
> - print_irq_desc(irq, desc);
> + print_irq_desc(desc);
> ack_bad_irq(irq);
> }
> /*
> * Generic no controller implementation
> @@ -323,6 +334,13 @@ struct irq_chip no_irq_chip = {
> .disable = noop,
> .ack = ack_bad,
> .end = noop,
We can remove the old ones right away, can't we ?
> diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c
Yinghai, thanks for doing that. It's halfways reviewable now, but if
we go that way it needs to be split further, really.
But to be honest I have to say that the code churn of that patch
scares me. I expected it to be less horrible.
So I started twisting my brain around a fully automated method of
solving this conversion problem with almost zero risk. It just occured
to me that Julia might be able to help and whip up semantic patch
rules for doing the conversion automagically on a flag day. That would
be one rule and one resulting patch for each of the chip->functions.
So the task would be:
In include/linux/irq.h
struct irq_chip {
const char *name;
- unsigned int startup(unsigned int irq);
+ unsigned int startup(struct irq_desc *desc);
Then finding all irq_chip implementations which set that function
pointer and fix up the function e.g.:
arch/x86/kernel/apic/io_apic.c:
static struct irq_chip ioapic_chip __read_mostly = {
.name = "IO-APIC",
.startup = startup_ioapic_irq,
-->
-static unsigned int startup_ioapic_irq(unsigned int irq)
+static unsigned int startup_ioapic_irq(struct irq_desc *desc)
{
+ unsigned int irq = desc->irq;
int was_pending = 0;
unsigned long flags;
struct irq_cfg *cfg;
raw_spin_lock_irqsave(&ioapic_lock, flags);
...
To make it simple, we just can put that right after the opening
bracket of the function.
The code which uses the chip functions needs to be changed:
- desc->chip->fun(irq);
+ desc->chip->fun(desc);
That's mostly in kernel/irq/* but there are some users in arch/*
lowlevel irq handling code as well.
I have not yet checked whether some place set's the function pointers
in the code rather than doing it in the struct definition statically,
but the vast majority should be static initializers.
Julia, can this be done with the semantic patcher magic or are you
already running away screaming ?
Thanks,
tglx
next prev parent reply other threads:[~2010-03-04 14:34 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-04 10:08 [PATCH 0/12] irq related: make function to take irq_desc pointer instead of irq Yinghai Lu
2010-03-04 10:08 ` [PATCH 01/12] x86: fix out of order of gsi - full Yinghai Lu
2010-03-04 10:08 ` [PATCH 02/12] x86: set nr_irqs_gsi only in probe_nr_irqs_gsi Yinghai Lu
2010-03-04 10:08 ` [PATCH 03/12] x86: kill smpboot_hooks.h Yinghai Lu
2010-03-04 10:08 ` [PATCH 04/12] x86: use vector_desc instead of vector_irq Yinghai Lu
2010-03-04 10:08 ` [PATCH 05/12] genericirq: make irq_chip to have member with irq_desc pointer Yinghai Lu
2010-03-04 10:08 ` [PATCH 06/12] genericirq: make irq_chip related function to take desc Yinghai Lu
2010-03-04 14:31 ` Thomas Gleixner [this message]
2010-03-04 18:56 ` Yinghai Lu
2010-03-04 19:08 ` Thomas Gleixner
2010-03-04 19:20 ` Yinghai Lu
2010-03-05 7:47 ` Julia Lawall
2010-03-21 4:18 ` Eric W. Biederman
2010-03-21 11:03 ` Julia Lawall
2010-03-21 13:11 ` [PATCH] irq: Start the transition of irq_chip methods taking a desc Eric W. Biederman
2010-03-21 14:43 ` Thomas Gleixner
2010-03-21 18:50 ` Yinghai Lu
2010-03-22 0:32 ` Eric W. Biederman
2010-03-21 13:49 ` [PATCH 06/12] genericirq: make irq_chip related function to take desc Eric W. Biederman
2010-03-21 14:19 ` Julia Lawall
2010-03-21 16:29 ` Julia Lawall
2010-03-21 11:08 ` Julia Lawall
2010-03-21 11:43 ` Eric W. Biederman
2010-03-21 19:16 ` Julia Lawall
2010-03-21 19:35 ` Julia Lawall
2010-03-21 19:36 ` Julia Lawall
2010-03-22 0:36 ` Eric W. Biederman
2010-03-04 19:18 ` Yinghai Lu
2010-03-04 10:08 ` [PATCH 07/12] genericirq: make hpet_msi/ht/msi/dmar_msi " Yinghai Lu
2010-03-04 10:08 ` [PATCH 08/12] x86: make irq_chip to use desc_mask instead of mask Yinghai Lu
2010-03-04 15:10 ` [PATCH 08/12] x86: make irq_chip to use desc_mask instead of maskn Thomas Gleixner
2010-03-04 10:08 ` [PATCH 09/12] x86: irq_chip to use desc_mask instead of mask part 2 Yinghai Lu
2010-03-04 10:08 ` [PATCH 10/12] genericirq: add set_irq_desc_chip/data Yinghai Lu
2010-03-04 10:08 ` [PATCH 11/12] x86/iommu/dmar: update iommu/inter_remapping to use desc Yinghai Lu
2010-03-04 10:08 ` [PATCH 12/12] x86: remove arch_probe_nr_irqs Yinghai Lu
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=alpine.LFD.2.00.1003041142460.2014@localhost.localdomain \
--to=tglx@linutronix.de \
--cc=akpm@linux-foundation.org \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=julia@diku.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=suresh.b.siddha@intel.com \
--cc=yinghai@kernel.org \
/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
all inboxes | Powered by JetHome®