* Re: BootX
From: Benjamin Herrenschmidt @ 2011-01-22 2:31 UTC (permalink / raw)
To: kevin diggs; +Cc: linuxppc-dev
In-Reply-To: <AANLkTikitgJYiALMRmtKQTs_eYgzGbZpeMkpg2M478cj@mail.gmail.com>
On Fri, 2011-01-21 at 20:03 -0600, kevin diggs wrote:
> Hi,
>
> The link:
>
> http://www.shiner.info/?files/Yellow%20Dog%20Linux%204/quik
>
> to download the latest source does not seem to have anything useful???
Ah right. 2.0e is still there tho. Try to have a look at what's in
distros like debian or genpoo..
Cheers,
Ben.
> kevin
>
> On Fri, Jan 21, 2011 at 7:50 PM, Benjamin Herrenschmidt
> <benh@kernel.crashing.org> wrote:
> > On Fri, 2011-01-21 at 19:48 -0600, kevin diggs wrote:
> >> Hi,
> >>
> >> This would require quik, right? I went to penguinppc.org and tried to
> >> get the latest BootX and quik but the links are dead. Do you know
> >> where the latest versions are?
> >
> > That link still works:
> >
> > Oops... typing FAIL :-)
> >
> > I meant:
> >
> > http://penguinppc.org/bootloaders/quik/
> >
> > However, it's possible that distros like debian have done more changes to it.
> >
> > Another option is to netboot a zImage directly, which works if it's not
> > too big.
> >
> > Cheers,
> > Ben.
> >
> >> kevin
> >>
> >> On Fri, Jan 21, 2011 at 3:21 PM, Benjamin Herrenschmidt
> >> <benh@kernel.crashing.org> wrote:
> >> > On Fri, 2011-01-21 at 13:26 -0600, kevin diggs wrote:
> >> >> Hi,
> >> >>
> >> >> Anyone familiar with BootX? Could my problems with the 8600 be related
> >> >> to some interaction with BootX?
> >> >
> >> > It's possible. Have you tried using OF booting instead ? The 8600 should
> >> > be cable to boot off SCSI or netboot COFF images.
> >> >
> >> > Cheers,
> >> > Ben.
> >> >
> >> >
> >
> >
> >
> >
^ permalink raw reply
* Re: elf section .text.unlikely
From: kevin diggs @ 2011-01-22 2:31 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <AANLkTimbZh5KCD2tT3rE5prhOBV9D_-QVdLyu0usmvMw@mail.gmail.com>
For what it is worth, this section contains dump_stack, panic, and printk
Thanks!
kevin
On Fri, Jan 21, 2011 at 7:40 PM, kevin diggs <diggskevin38@gmail.com> wrote:
> Hi,
>
> I am trying to get a PowerMac 8600 to boot past 2.6.28.
>
> I can boot 2.6.28 compiled with either 3.3.3 or 3.4.6. I can't get
> 2.6.28 to boot using 4.3.5. The 4.3.5 vmlinux has a section
> '.text.unlikely' that the 3.4.6 version does not. Anyone know what
> this might be?
>
> kevin
>
^ permalink raw reply
* Re: BootX
From: kevin diggs @ 2011-01-22 2:03 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1295661056.2148.334.camel@pasglop>
Hi,
The link:
http://www.shiner.info/?files/Yellow%20Dog%20Linux%204/quik
to download the latest source does not seem to have anything useful???
kevin
On Fri, Jan 21, 2011 at 7:50 PM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Fri, 2011-01-21 at 19:48 -0600, kevin diggs wrote:
>> Hi,
>>
>> This would require quik, right? I went to penguinppc.org and tried to
>> get the latest BootX and quik but the links are dead. Do you know
>> where the latest versions are?
>
> That link still works:
>
> Oops... typing FAIL :-)
>
> I meant:
>
> http://penguinppc.org/bootloaders/quik/
>
> However, it's possible that distros like debian have done more changes to it.
>
> Another option is to netboot a zImage directly, which works if it's not
> too big.
>
> Cheers,
> Ben.
>
>> kevin
>>
>> On Fri, Jan 21, 2011 at 3:21 PM, Benjamin Herrenschmidt
>> <benh@kernel.crashing.org> wrote:
>> > On Fri, 2011-01-21 at 13:26 -0600, kevin diggs wrote:
>> >> Hi,
>> >>
>> >> Anyone familiar with BootX? Could my problems with the 8600 be related
>> >> to some interaction with BootX?
>> >
>> > It's possible. Have you tried using OF booting instead ? The 8600 should
>> > be cable to boot off SCSI or netboot COFF images.
>> >
>> > Cheers,
>> > Ben.
>> >
>> >
>
>
>
>
^ permalink raw reply
* Re: BootX
From: Benjamin Herrenschmidt @ 2011-01-22 1:50 UTC (permalink / raw)
To: kevin diggs; +Cc: linuxppc-dev
In-Reply-To: <AANLkTi=CVNC-UjdCyByyey_VnPHGtujuH01tquSQyqRm@mail.gmail.com>
On Fri, 2011-01-21 at 19:48 -0600, kevin diggs wrote:
> Hi,
>
> This would require quik, right? I went to penguinppc.org and tried to
> get the latest BootX and quik but the links are dead. Do you know
> where the latest versions are?
That link still works:
Oops... typing FAIL :-)
I meant:
http://penguinppc.org/bootloaders/quik/
However, it's possible that distros like debian have done more changes to it.
Another option is to netboot a zImage directly, which works if it's not
too big.
Cheers,
Ben.
> kevin
>
> On Fri, Jan 21, 2011 at 3:21 PM, Benjamin Herrenschmidt
> <benh@kernel.crashing.org> wrote:
> > On Fri, 2011-01-21 at 13:26 -0600, kevin diggs wrote:
> >> Hi,
> >>
> >> Anyone familiar with BootX? Could my problems with the 8600 be related
> >> to some interaction with BootX?
> >
> > It's possible. Have you tried using OF booting instead ? The 8600 should
> > be cable to boot off SCSI or netboot COFF images.
> >
> > Cheers,
> > Ben.
> >
> >
^ permalink raw reply
* Re: BootX
From: Benjamin Herrenschmidt @ 2011-01-22 1:49 UTC (permalink / raw)
To: kevin diggs; +Cc: linuxppc-dev
In-Reply-To: <AANLkTi=CVNC-UjdCyByyey_VnPHGtujuH01tquSQyqRm@mail.gmail.com>
On Fri, 2011-01-21 at 19:48 -0600, kevin diggs wrote:
> Hi,
>
> This would require quik, right? I went to penguinppc.org and tried to
> get the latest BootX and quik but the links are dead. Do you know
> where the latest versions are?
That link still works:
> kevin
>
> On Fri, Jan 21, 2011 at 3:21 PM, Benjamin Herrenschmidt
> <benh@kernel.crashing.org> wrote:
> > On Fri, 2011-01-21 at 13:26 -0600, kevin diggs wrote:
> >> Hi,
> >>
> >> Anyone familiar with BootX? Could my problems with the 8600 be related
> >> to some interaction with BootX?
> >
> > It's possible. Have you tried using OF booting instead ? The 8600 should
> > be cable to boot off SCSI or netboot COFF images.
> >
> > Cheers,
> > Ben.
> >
> >
^ permalink raw reply
* Re: BootX
From: kevin diggs @ 2011-01-22 1:48 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1295644908.2148.309.camel@pasglop>
Hi,
This would require quik, right? I went to penguinppc.org and tried to
get the latest BootX and quik but the links are dead. Do you know
where the latest versions are?
kevin
On Fri, Jan 21, 2011 at 3:21 PM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Fri, 2011-01-21 at 13:26 -0600, kevin diggs wrote:
>> Hi,
>>
>> Anyone familiar with BootX? Could my problems with the 8600 be related
>> to some interaction with BootX?
>
> It's possible. Have you tried using OF booting instead ? The 8600 should
> be cable to boot off SCSI or netboot COFF images.
>
> Cheers,
> Ben.
>
>
^ permalink raw reply
* elf section .text.unlikely
From: kevin diggs @ 2011-01-22 1:40 UTC (permalink / raw)
To: linuxppc-dev
Hi,
I am trying to get a PowerMac 8600 to boot past 2.6.28.
I can boot 2.6.28 compiled with either 3.3.3 or 3.4.6. I can't get
2.6.28 to boot using 4.3.5. The 4.3.5 vmlinux has a section
'.text.unlikely' that the 3.4.6 version does not. Anyone know what
this might be?
kevin
^ permalink raw reply
* Re: BootX
From: Benjamin Herrenschmidt @ 2011-01-21 21:21 UTC (permalink / raw)
To: kevin diggs; +Cc: linuxppc-dev
In-Reply-To: <AANLkTikAVgH9-UQfrjoAJSemet5p_PxhxCdot8cChQu3@mail.gmail.com>
On Fri, 2011-01-21 at 13:26 -0600, kevin diggs wrote:
> Hi,
>
> Anyone familiar with BootX? Could my problems with the 8600 be related
> to some interaction with BootX?
It's possible. Have you tried using OF booting instead ? The 8600 should
be cable to boot off SCSI or netboot COFF images.
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH] powerpc: Fix some 6xx/7xxx CPU setup functions
From: Benjamin Herrenschmidt @ 2011-01-21 21:16 UTC (permalink / raw)
To: kevin diggs; +Cc: linuxppc-dev
In-Reply-To: <AANLkTikd14Kw02nzde19FsR9JUGA=c-xzVVXpkGLoUjf@mail.gmail.com>
On Fri, 2011-01-21 at 12:15 -0600, kevin diggs wrote:
> I have a GigE (PowerMac 3,4?) with an upgrade card that has a pair of
> 7455s on it and an 8600 with a 750GX cpu card. I can probably test
> this on the GigE. It is running 2.6.36. Is that recent enough? The
> 8600 is not cooperating.
>
> The GigE is running 2.6.36 compiled with 4.3.5 built from sources. It
> seems to run fine.
The bug would have caused the kernel to allow enabling of "nap" mode
when idle on machines where this is buggy and can cause loss of cache
coherency among others. I really don't remember off hand which specific
machines may or may not have been affected. But I'd like at least people
to verify that my patches to "fix" that aren't causing a regression for
people like you who don't seem to have problems :-)
The bug was introduced a while back in 2005.
Cheers,
Ben.
^ permalink raw reply
* Setting GPIO to trigger interrupt on mpc85xx
From: Kenny Ho @ 2011-01-21 20:47 UTC (permalink / raw)
To: linuxppc-dev
[-- Attachment #1: Type: text/plain, Size: 3207 bytes --]
Hi,
I am working on the fsl P1020rdb kit with the 2.6.32 linux kernel that
came with the kit and I am trying to get an GPIO to trigger an
interrupt. I am fairly new and have been stumbling for quite a bit with
no success so I am hoping some of you experts out there can give me some
pointers.
**What I have tried so far**:
I am implementing the interrupt setup on my custom GPIO module during
its init. I started following the information available in Linux Device
Drivers, Third Edition but it turns out to be out of date or
incompatible with the ppc platform. (The device tree, the hwirq to virq
mapping... even though the number turns out to be the same for GPIO,
etc.)
Initially I was only calling request_irq but I got ENOSYS. That was
solved by calling irq_create_mapping but then the module init was stuck
at the request_irq (with the isr continuously being called.) That was
resolved when I ended up using the device tree by calling
irq_of_parse_and_map and using set_irq_handler before calling
request_irq. Now the module successfully init and I can see the isr
entry in /proc/interrupt but when I physically toggle my GPIO pin, the
handler set by set_irq_handler was being called continuously (and then
crash) while the isr set by request_irq was never called.
Another thing I don't understand is that the /proc/interrupt entry say
the gpio interrupt is OpenPIC Level when the GPIO interrupt is suppose
to be edge only (either falling only or both.) My dts interrupt entry
for the GPIO is <47 2>, which should indicates edge trigger right?
**My questions**:
What are the relationship between set_irq_handler, set_irq_type and
request_irq? Are the first two supposed to be a replacement of the 3rd
or are they suppose to be used concurrently?
What are the differences between the handler set by set_irq_handler and
the isr set by request_irq? Which one is called first? Or should only
one of them get set at all time?
(I was reading
http://www.kernel.org/pub/linux/kernel/people/tglx/armirq/DocBook/index.
html but I am still very confused.)
Which signals are those IRQ type referring to? Are they referring to
the triggering signal (GPIO in my case) or the PIC signal to the cpu
core?
What are the things I need to do in the IRQ handler/isr to terminate an
interrupt? I know I need to clear the event register (which is GPIER in
my case) which I have done but that didn't stop the handler from getting
call again. Must I also disable the interrupt? For the isr set by
request_irq, I also return IRQ_HANDLED... is that sufficient?
For the handler set by set_irq_handler, do I need to call other handler?
I noticed there are generic_handle_irq and handle_(level/edge,
etc)_irq... am I suppose to call those to terminate an interrupt? I
also noticed there are eoi() and end() in desc->chip. (I assume those
are for the PIC)... am I suppose to call those as well?
As you can see... I am very much confused and have lots of questions.
Any help from you folks is much appreciated.
Regards,
Kenny Ho
[-- Attachment #2: Type: text/html, Size: 9192 bytes --]
^ permalink raw reply
* BootX
From: kevin diggs @ 2011-01-21 19:26 UTC (permalink / raw)
To: linuxppc-dev
Hi,
Anyone familiar with BootX? Could my problems with the 8600 be related
to some interaction with BootX?
kevin
^ permalink raw reply
* Re: [PATCH] powerpc: Fix some 6xx/7xxx CPU setup functions
From: kevin diggs @ 2011-01-21 18:15 UTC (permalink / raw)
To: Benjamin Herrenschmidt, linuxppc-dev
In-Reply-To: <1295591723.2148.281.camel@pasglop>
On Fri, Jan 21, 2011 at 12:35 AM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> Some of those functions try to adjust the CPU features, for example
> to remove NAP support on some revisions. However, they seem to use
> r5 as an index into the CPU table entry, which might have been right
> a long time ago but no longer is. r4 is the right register to use.
Can you quantify 'a long time ago'? Is this compiler dependent?
>
> This probably caused some off behaviours on some PowerMac variants
> using 750cx or 7455 processor revisions.
what about a 750gx?
>
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> ---
>
> Can somebody with one of these PowerMacs test this ? I only managed to
> find a 7448 which not directly affected...
>
I have a GigE (PowerMac 3,4?) with an upgrade card that has a pair of
7455s on it and an 8600 with a 750GX cpu card. I can probably test
this on the GigE. It is running 2.6.36. Is that recent enough? The
8600 is not cooperating.
The GigE is running 2.6.36 compiled with 4.3.5 built from sources. It
seems to run fine.
_______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
>
^ permalink raw reply
* Re: [PATCH] Globally s/struct irq_host/struct irq_domain/
From: Jon Loeliger @ 2011-01-21 18:02 UTC (permalink / raw)
To: Grant Likely; +Cc: devicetree-discuss, linuxppc-dev
In-Reply-To: <AANLkTi=bHV9XJoUT_ki1Eziq5fM3DekrOLoFuNzGGv91@mail.gmail.com>
>
> I always reserve the right to change my mind. }:->
Naturally!
> Sorry about that,
No problem. The thought back then was that we'd hit the "global"
piece and then we'd buy the time to hit the local pieces as we could.
> but I actually applied the patch this morning with the thought that
> I'd get Linus to pick it up late to avoid collisions in linux-next.
Makes sense.
> However, when I actually looked at the result I realized that at the
> very least, the irq_host_ops, the #defines, and the irq_*_host
> functions absolutely have to be renamed at the same time. Not
> necessarily in the same patch, but definitely at the same time.
Will do!
jdl
^ permalink raw reply
* Re: [PATCH] Globally s/struct irq_host/struct irq_domain/
From: Grant Likely @ 2011-01-21 17:28 UTC (permalink / raw)
To: Jon Loeliger; +Cc: devicetree-discuss, linuxppc-dev
In-Reply-To: <E1PgKdi-0005fc-J5@jdl.com>
On Fri, Jan 21, 2011 at 10:19 AM, Jon Loeliger <jdl@jdl.com> wrote:
>>
>> For this to make sense, it really needs to also rename irq_host_ops
>> structure, the IRQ_HOST_MAP* #defines, and the irq_*_host functions.
>> It also /should/ adjust the users of irq_domain to rename function
>> local variables and structure members. =A0Otherwise there will be an
>> even worse mismatch in naming.
>
> Happy to do so, but last time we talked about this, we decided
> not to do *that* aspect of the rename with this patch, and that
> we'd get to it later with follow on patches once this step was done.
I always reserve the right to change my mind. }:-> Sorry about that,
but I actually applied the patch this morning with the thought that
I'd get Linus to pick it up late to avoid collisions in linux-next.
However, when I actually looked at the result I realized that at the
very least, the irq_host_ops, the #defines, and the irq_*_host
functions absolutely have to be renamed at the same time. Not
necessarily in the same patch, but definitely at the same time.
g.
--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
^ permalink raw reply
* Re: [PATCH] Globally s/struct irq_host/struct irq_domain/
From: Jon Loeliger @ 2011-01-21 17:19 UTC (permalink / raw)
To: Grant Likely; +Cc: devicetree-discuss, linuxppc-dev
In-Reply-To: <20110121171314.GD7477@angua.secretlab.ca>
>
> For this to make sense, it really needs to also rename irq_host_ops
> structure, the IRQ_HOST_MAP* #defines, and the irq_*_host functions.
> It also /should/ adjust the users of irq_domain to rename function
> local variables and structure members. Otherwise there will be an
> even worse mismatch in naming.
Happy to do so, but last time we talked about this, we decided
not to do *that* aspect of the rename with this patch, and that
we'd get to it later with follow on patches once this step was done.
Your call; just let me know.
jdl
^ permalink raw reply
* Re: [PATCH] Globally s/struct irq_host/struct irq_domain/
From: Grant Likely @ 2011-01-21 17:13 UTC (permalink / raw)
To: Jon Loeliger; +Cc: devicetree-discuss, linuxppc-dev
In-Reply-To: <E1Pd18R-0002d3-US@jdl.com>
On Wed, Jan 12, 2011 at 07:53:11AM -0600, Jon Loeliger wrote:
> From: Jon Loeliger <jdl@jdl.com>
>
> Just rename the irq_host structure as irq_domain to lessen the
> confusion around the word "host". Updated a few comments and
> error messages to use "irq_domain" when refering to the structure.
>
> Suggested by Ben Herrenschmidt on the device-tree mailing list.
>
> Signed-off-by: Jon Loeliger <jdl@jdl.com>
For this to make sense, it really needs to also rename irq_host_ops
structure, the IRQ_HOST_MAP* #defines, and the irq_*_host functions.
It also /should/ adjust the users of irq_domain to rename function
local variables and structure members. Otherwise there will be an
even worse mismatch in naming.
g.
> ---
>
> Version 2 - Rebased to current top of Linus', v2.6.37-5668-g4162cf6.
>
>
> arch/microblaze/include/asm/irq.h | 4 +-
> arch/microblaze/kernel/irq.c | 2 +-
> arch/powerpc/include/asm/i8259.h | 2 +-
> arch/powerpc/include/asm/irq.h | 40 +++++++++++-----------
> arch/powerpc/include/asm/mpic.h | 2 +-
> arch/powerpc/kernel/irq.c | 40 +++++++++++-----------
> arch/powerpc/platforms/512x/mpc5121_ads_cpld.c | 6 ++--
> arch/powerpc/platforms/52xx/media5200.c | 6 ++--
> arch/powerpc/platforms/52xx/mpc52xx_gpt.c | 8 ++--
> arch/powerpc/platforms/52xx/mpc52xx_pic.c | 6 ++--
> arch/powerpc/platforms/82xx/pq2ads-pci-pic.c | 8 ++--
> arch/powerpc/platforms/85xx/socrates_fpga_pic.c | 8 ++--
> arch/powerpc/platforms/86xx/gef_pic.c | 8 ++--
> arch/powerpc/platforms/cell/axon_msi.c | 10 +++---
> arch/powerpc/platforms/cell/beat_interrupt.c | 12 +++---
> arch/powerpc/platforms/cell/interrupt.c | 10 +++---
> arch/powerpc/platforms/cell/spider-pic.c | 6 ++--
> arch/powerpc/platforms/embedded6xx/flipper-pic.c | 14 ++++----
> arch/powerpc/platforms/embedded6xx/hlwd-pic.c | 18 +++++-----
> arch/powerpc/platforms/iseries/irq.c | 6 ++--
> arch/powerpc/platforms/powermac/pic.c | 8 ++--
> arch/powerpc/platforms/ps3/interrupt.c | 8 ++--
> arch/powerpc/platforms/pseries/xics.c | 8 ++--
> arch/powerpc/sysdev/cpm1.c | 4 +-
> arch/powerpc/sysdev/cpm2_pic.c | 6 ++--
> arch/powerpc/sysdev/fsl_msi.c | 2 +-
> arch/powerpc/sysdev/fsl_msi.h | 2 +-
> arch/powerpc/sysdev/i8259.c | 12 +++---
> arch/powerpc/sysdev/ipic.c | 6 ++--
> arch/powerpc/sysdev/ipic.h | 2 +-
> arch/powerpc/sysdev/mpc8xx_pic.c | 6 ++--
> arch/powerpc/sysdev/mpc8xxx_gpio.c | 6 ++--
> arch/powerpc/sysdev/mpic.c | 6 ++--
> arch/powerpc/sysdev/mv64x60_pic.c | 4 +-
> arch/powerpc/sysdev/qe_lib/qe_ic.c | 6 ++--
> arch/powerpc/sysdev/qe_lib/qe_ic.h | 2 +-
> arch/powerpc/sysdev/tsi108_pci.c | 6 ++--
> arch/powerpc/sysdev/uic.c | 6 ++--
> arch/powerpc/sysdev/xilinx_intc.c | 12 +++---
> 39 files changed, 164 insertions(+), 164 deletions(-)
>
> diff --git a/arch/microblaze/include/asm/irq.h b/arch/microblaze/include/asm/irq.h
> index ec5583d..8ef92dd 100644
> --- a/arch/microblaze/include/asm/irq.h
> +++ b/arch/microblaze/include/asm/irq.h
> @@ -36,7 +36,7 @@ static inline void irq_dispose_mapping(unsigned int virq)
> return;
> }
>
> -struct irq_host;
> +struct irq_domain;
>
> /**
> * irq_create_mapping - Map a hardware interrupt into linux virq space
> @@ -48,7 +48,7 @@ struct irq_host;
> * If the sense/trigger is to be specified, set_irq_type() should be called
> * on the number returned from that call.
> */
> -extern unsigned int irq_create_mapping(struct irq_host *host,
> +extern unsigned int irq_create_mapping(struct irq_domain *host,
> irq_hw_number_t hwirq);
>
> #endif /* _ASM_MICROBLAZE_IRQ_H */
> diff --git a/arch/microblaze/kernel/irq.c b/arch/microblaze/kernel/irq.c
> index a9345fb..059bb11 100644
> --- a/arch/microblaze/kernel/irq.c
> +++ b/arch/microblaze/kernel/irq.c
> @@ -89,7 +89,7 @@ skip:
>
> /* MS: There is no any advance mapping mechanism. We are using simple 32bit
> intc without any cascades or any connection that's why mapping is 1:1 */
> -unsigned int irq_create_mapping(struct irq_host *host, irq_hw_number_t hwirq)
> +unsigned int irq_create_mapping(struct irq_domain *host, irq_hw_number_t hwirq)
> {
> return hwirq;
> }
> diff --git a/arch/powerpc/include/asm/i8259.h b/arch/powerpc/include/asm/i8259.h
> index 105ade2..c3fdfbd 100644
> --- a/arch/powerpc/include/asm/i8259.h
> +++ b/arch/powerpc/include/asm/i8259.h
> @@ -6,7 +6,7 @@
>
> extern void i8259_init(struct device_node *node, unsigned long intack_addr);
> extern unsigned int i8259_irq(void);
> -extern struct irq_host *i8259_get_host(void);
> +extern struct irq_domain *i8259_get_host(void);
>
> #endif /* __KERNEL__ */
> #endif /* _ASM_POWERPC_I8259_H */
> diff --git a/arch/powerpc/include/asm/irq.h b/arch/powerpc/include/asm/irq.h
> index 67ab5fb..3e25340 100644
> --- a/arch/powerpc/include/asm/irq.h
> +++ b/arch/powerpc/include/asm/irq.h
> @@ -66,7 +66,7 @@ typedef unsigned long irq_hw_number_t;
> * by some sort of arch-specific void * "token" used to identify interrupt
> * controllers.
> */
> -struct irq_host;
> +struct irq_domain;
> struct radix_tree_root;
>
> /* Functions below are provided by the host and called whenever a new mapping
> @@ -78,18 +78,18 @@ struct irq_host_ops {
> /* Match an interrupt controller device node to a host, returns
> * 1 on a match
> */
> - int (*match)(struct irq_host *h, struct device_node *node);
> + int (*match)(struct irq_domain *h, struct device_node *node);
>
> /* Create or update a mapping between a virtual irq number and a hw
> * irq number. This is called only once for a given mapping.
> */
> - int (*map)(struct irq_host *h, unsigned int virq, irq_hw_number_t hw);
> + int (*map)(struct irq_domain *h, unsigned int virq, irq_hw_number_t hw);
>
> /* Dispose of such a mapping */
> - void (*unmap)(struct irq_host *h, unsigned int virq);
> + void (*unmap)(struct irq_domain *h, unsigned int virq);
>
> /* Update of such a mapping */
> - void (*remap)(struct irq_host *h, unsigned int virq, irq_hw_number_t hw);
> + void (*remap)(struct irq_domain *h, unsigned int virq, irq_hw_number_t hw);
>
> /* Translate device-tree interrupt specifier from raw format coming
> * from the firmware to a irq_hw_number_t (interrupt line number) and
> @@ -99,12 +99,12 @@ struct irq_host_ops {
> * the type (which amount to keeping whatever default value the
> * interrupt controller has for that line)
> */
> - int (*xlate)(struct irq_host *h, struct device_node *ctrler,
> + int (*xlate)(struct irq_domain *h, struct device_node *ctrler,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_type);
> };
>
> -struct irq_host {
> +struct irq_domain {
> struct list_head link;
>
> /* type of reverse mapping technique */
> @@ -135,7 +135,7 @@ struct irq_host {
> */
> struct irq_map_entry {
> irq_hw_number_t hwirq;
> - struct irq_host *host;
> + struct irq_domain *host;
> };
>
> extern struct irq_map_entry irq_map[NR_IRQS];
> @@ -143,14 +143,14 @@ extern struct irq_map_entry irq_map[NR_IRQS];
> extern irq_hw_number_t virq_to_hw(unsigned int virq);
>
> /**
> - * irq_alloc_host - Allocate a new irq_host data structure
> + * irq_alloc_host - Allocate a new irq_domain data structure
> * @of_node: optional device-tree node of the interrupt controller
> * @revmap_type: type of reverse mapping to use
> * @revmap_arg: for IRQ_HOST_MAP_LINEAR linear only: size of the map
> * @ops: map/unmap host callbacks
> * @inval_irq: provide a hw number in that host space that is always invalid
> *
> - * Allocates and initialize and irq_host structure. Note that in the case of
> + * Allocates and initialize and irq_domain structure. Note that in the case of
> * IRQ_HOST_MAP_LEGACY, the map() callback will be called before this returns
> * for all legacy interrupts except 0 (which is always the invalid irq for
> * a legacy controller). For a IRQ_HOST_MAP_LINEAR, the map is allocated by
> @@ -158,7 +158,7 @@ extern irq_hw_number_t virq_to_hw(unsigned int virq);
> * later during boot automatically (the reverse mapping will use the slow path
> * until that happens).
> */
> -extern struct irq_host *irq_alloc_host(struct device_node *of_node,
> +extern struct irq_domain *irq_alloc_host(struct device_node *of_node,
> unsigned int revmap_type,
> unsigned int revmap_arg,
> struct irq_host_ops *ops,
> @@ -169,7 +169,7 @@ extern struct irq_host *irq_alloc_host(struct device_node *of_node,
> * irq_find_host - Locates a host for a given device node
> * @node: device-tree node of the interrupt controller
> */
> -extern struct irq_host *irq_find_host(struct device_node *node);
> +extern struct irq_domain *irq_find_host(struct device_node *node);
>
>
> /**
> @@ -181,7 +181,7 @@ extern struct irq_host *irq_find_host(struct device_node *node);
> * platforms that want to manipulate a few hard coded interrupt numbers that
> * aren't properly represented in the device-tree.
> */
> -extern void irq_set_default_host(struct irq_host *host);
> +extern void irq_set_default_host(struct irq_domain *host);
>
>
> /**
> @@ -204,7 +204,7 @@ extern void irq_set_virq_count(unsigned int count);
> * If the sense/trigger is to be specified, set_irq_type() should be called
> * on the number returned from that call.
> */
> -extern unsigned int irq_create_mapping(struct irq_host *host,
> +extern unsigned int irq_create_mapping(struct irq_domain *host,
> irq_hw_number_t hwirq);
>
>
> @@ -223,7 +223,7 @@ extern void irq_dispose_mapping(unsigned int virq);
> * irq controller implementation directly calls the appropriate low level
> * mapping function.
> */
> -extern unsigned int irq_find_mapping(struct irq_host *host,
> +extern unsigned int irq_find_mapping(struct irq_domain *host,
> irq_hw_number_t hwirq);
>
> /**
> @@ -234,7 +234,7 @@ extern unsigned int irq_find_mapping(struct irq_host *host,
> * interrupt numbers they generate. In such a case it's simplest to use
> * the linux virq as the hardware interrupt number.
> */
> -extern unsigned int irq_create_direct_mapping(struct irq_host *host);
> +extern unsigned int irq_create_direct_mapping(struct irq_domain *host);
>
> /**
> * irq_radix_revmap_insert - Insert a hw irq to linux virq number mapping.
> @@ -245,7 +245,7 @@ extern unsigned int irq_create_direct_mapping(struct irq_host *host);
> * This is for use by irq controllers that use a radix tree reverse
> * mapping for fast lookup.
> */
> -extern void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
> +extern void irq_radix_revmap_insert(struct irq_domain *host, unsigned int virq,
> irq_hw_number_t hwirq);
>
> /**
> @@ -256,7 +256,7 @@ extern void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
> * This is a fast path, for use by irq controller code that uses radix tree
> * revmaps
> */
> -extern unsigned int irq_radix_revmap_lookup(struct irq_host *host,
> +extern unsigned int irq_radix_revmap_lookup(struct irq_domain *host,
> irq_hw_number_t hwirq);
>
> /**
> @@ -269,7 +269,7 @@ extern unsigned int irq_radix_revmap_lookup(struct irq_host *host,
> * yet and will create the revmap entry with appropriate locking
> */
>
> -extern unsigned int irq_linear_revmap(struct irq_host *host,
> +extern unsigned int irq_linear_revmap(struct irq_domain *host,
> irq_hw_number_t hwirq);
>
>
> @@ -284,7 +284,7 @@ extern unsigned int irq_linear_revmap(struct irq_host *host,
> * and that can be used by some irq controllers implementations for things
> * like allocating ranges of numbers for MSIs. The revmaps are left untouched.
> */
> -extern unsigned int irq_alloc_virt(struct irq_host *host,
> +extern unsigned int irq_alloc_virt(struct irq_domain *host,
> unsigned int count,
> unsigned int hint);
>
> diff --git a/arch/powerpc/include/asm/mpic.h b/arch/powerpc/include/asm/mpic.h
> index e000cce..18d07da 100644
> --- a/arch/powerpc/include/asm/mpic.h
> +++ b/arch/powerpc/include/asm/mpic.h
> @@ -253,7 +253,7 @@ struct mpic_irq_save {
> struct mpic
> {
> /* The remapper for this MPIC */
> - struct irq_host *irqhost;
> + struct irq_domain *irqhost;
>
> /* The "linux" controller struct */
> struct irq_chip hc_irq;
> diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
> index ce557f6..e890cc4 100644
> --- a/arch/powerpc/kernel/irq.c
> +++ b/arch/powerpc/kernel/irq.c
> @@ -533,7 +533,7 @@ static unsigned int revmap_trees_allocated;
> static DEFINE_MUTEX(revmap_trees_mutex);
> struct irq_map_entry irq_map[NR_IRQS];
> static unsigned int irq_virq_count = NR_IRQS;
> -static struct irq_host *irq_default_host;
> +static struct irq_domain *irq_default_host;
>
> irq_hw_number_t virq_to_hw(unsigned int virq)
> {
> @@ -541,19 +541,19 @@ irq_hw_number_t virq_to_hw(unsigned int virq)
> }
> EXPORT_SYMBOL_GPL(virq_to_hw);
>
> -static int default_irq_host_match(struct irq_host *h, struct device_node *np)
> +static int default_irq_host_match(struct irq_domain *h, struct device_node *np)
> {
> return h->of_node != NULL && h->of_node == np;
> }
>
> -struct irq_host *irq_alloc_host(struct device_node *of_node,
> +struct irq_domain *irq_alloc_host(struct device_node *of_node,
> unsigned int revmap_type,
> unsigned int revmap_arg,
> struct irq_host_ops *ops,
> irq_hw_number_t inval_irq)
> {
> - struct irq_host *host;
> - unsigned int size = sizeof(struct irq_host);
> + struct irq_domain *host;
> + unsigned int size = sizeof(struct irq_domain);
> unsigned int i;
> unsigned int *rmap;
> unsigned long flags;
> @@ -638,9 +638,9 @@ struct irq_host *irq_alloc_host(struct device_node *of_node,
> return host;
> }
>
> -struct irq_host *irq_find_host(struct device_node *node)
> +struct irq_domain *irq_find_host(struct device_node *node)
> {
> - struct irq_host *h, *found = NULL;
> + struct irq_domain *h, *found = NULL;
> unsigned long flags;
>
> /* We might want to match the legacy controller last since
> @@ -659,7 +659,7 @@ struct irq_host *irq_find_host(struct device_node *node)
> }
> EXPORT_SYMBOL_GPL(irq_find_host);
>
> -void irq_set_default_host(struct irq_host *host)
> +void irq_set_default_host(struct irq_domain *host)
> {
> pr_debug("irq: Default host set to @0x%p\n", host);
>
> @@ -675,7 +675,7 @@ void irq_set_virq_count(unsigned int count)
> irq_virq_count = count;
> }
>
> -static int irq_setup_virq(struct irq_host *host, unsigned int virq,
> +static int irq_setup_virq(struct irq_domain *host, unsigned int virq,
> irq_hw_number_t hwirq)
> {
> struct irq_desc *desc;
> @@ -706,7 +706,7 @@ error:
> return -1;
> }
>
> -unsigned int irq_create_direct_mapping(struct irq_host *host)
> +unsigned int irq_create_direct_mapping(struct irq_domain *host)
> {
> unsigned int virq;
>
> @@ -730,7 +730,7 @@ unsigned int irq_create_direct_mapping(struct irq_host *host)
> return virq;
> }
>
> -unsigned int irq_create_mapping(struct irq_host *host,
> +unsigned int irq_create_mapping(struct irq_domain *host,
> irq_hw_number_t hwirq)
> {
> unsigned int virq, hint;
> @@ -789,7 +789,7 @@ EXPORT_SYMBOL_GPL(irq_create_mapping);
> unsigned int irq_create_of_mapping(struct device_node *controller,
> const u32 *intspec, unsigned int intsize)
> {
> - struct irq_host *host;
> + struct irq_domain *host;
> irq_hw_number_t hwirq;
> unsigned int type = IRQ_TYPE_NONE;
> unsigned int virq;
> @@ -828,7 +828,7 @@ EXPORT_SYMBOL_GPL(irq_create_of_mapping);
>
> void irq_dispose_mapping(unsigned int virq)
> {
> - struct irq_host *host;
> + struct irq_domain *host;
> irq_hw_number_t hwirq;
>
> if (virq == NO_IRQ)
> @@ -887,7 +887,7 @@ void irq_dispose_mapping(unsigned int virq)
> }
> EXPORT_SYMBOL_GPL(irq_dispose_mapping);
>
> -unsigned int irq_find_mapping(struct irq_host *host,
> +unsigned int irq_find_mapping(struct irq_domain *host,
> irq_hw_number_t hwirq)
> {
> unsigned int i;
> @@ -920,7 +920,7 @@ unsigned int irq_find_mapping(struct irq_host *host,
> EXPORT_SYMBOL_GPL(irq_find_mapping);
>
>
> -unsigned int irq_radix_revmap_lookup(struct irq_host *host,
> +unsigned int irq_radix_revmap_lookup(struct irq_domain *host,
> irq_hw_number_t hwirq)
> {
> struct irq_map_entry *ptr;
> @@ -955,7 +955,7 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
> return virq;
> }
>
> -void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
> +void irq_radix_revmap_insert(struct irq_domain *host, unsigned int virq,
> irq_hw_number_t hwirq)
> {
>
> @@ -978,7 +978,7 @@ void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
> }
> }
>
> -unsigned int irq_linear_revmap(struct irq_host *host,
> +unsigned int irq_linear_revmap(struct irq_domain *host,
> irq_hw_number_t hwirq)
> {
> unsigned int *revmap;
> @@ -1001,7 +1001,7 @@ unsigned int irq_linear_revmap(struct irq_host *host,
> return revmap[hwirq];
> }
>
> -unsigned int irq_alloc_virt(struct irq_host *host,
> +unsigned int irq_alloc_virt(struct irq_domain *host,
> unsigned int count,
> unsigned int hint)
> {
> @@ -1058,7 +1058,7 @@ void irq_free_virt(unsigned int virq, unsigned int count)
>
> raw_spin_lock_irqsave(&irq_big_lock, flags);
> for (i = virq; i < (virq + count); i++) {
> - struct irq_host *host;
> + struct irq_domain *host;
>
> if (i < NUM_ISA_INTERRUPTS ||
> (virq + count) > irq_virq_count)
> @@ -1095,7 +1095,7 @@ int arch_init_chip_data(struct irq_desc *desc, int node)
> /* We need to create the radix trees late */
> static int irq_late_init(void)
> {
> - struct irq_host *h;
> + struct irq_domain *h;
> unsigned int i;
>
> /*
> diff --git a/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c b/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
> index 4ecf4cf..32e784e 100644
> --- a/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
> +++ b/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
> @@ -21,7 +21,7 @@
> #include <asm/prom.h>
>
> static struct device_node *cpld_pic_node;
> -static struct irq_host *cpld_pic_host;
> +static struct irq_domain *cpld_pic_host;
>
> /*
> * Bits to ignore in the misc_status register
> @@ -123,13 +123,13 @@ cpld_pic_cascade(unsigned int irq, struct irq_desc *desc)
> }
>
> static int
> -cpld_pic_host_match(struct irq_host *h, struct device_node *node)
> +cpld_pic_host_match(struct irq_domain *h, struct device_node *node)
> {
> return cpld_pic_node == node;
> }
>
> static int
> -cpld_pic_host_map(struct irq_host *h, unsigned int virq,
> +cpld_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> irq_to_desc(virq)->status |= IRQ_LEVEL;
> diff --git a/arch/powerpc/platforms/52xx/media5200.c b/arch/powerpc/platforms/52xx/media5200.c
> index 2c7780c..f10ae9d 100644
> --- a/arch/powerpc/platforms/52xx/media5200.c
> +++ b/arch/powerpc/platforms/52xx/media5200.c
> @@ -45,7 +45,7 @@ static struct of_device_id mpc5200_gpio_ids[] __initdata = {
> struct media5200_irq {
> void __iomem *regs;
> spinlock_t lock;
> - struct irq_host *irqhost;
> + struct irq_domain *irqhost;
> };
> struct media5200_irq media5200_irq;
>
> @@ -111,7 +111,7 @@ void media5200_irq_cascade(unsigned int virq, struct irq_desc *desc)
> raw_spin_unlock(&desc->lock);
> }
>
> -static int media5200_irq_map(struct irq_host *h, unsigned int virq,
> +static int media5200_irq_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct irq_desc *desc = irq_to_desc(virq);
> @@ -126,7 +126,7 @@ static int media5200_irq_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int media5200_irq_xlate(struct irq_host *h, struct device_node *ct,
> +static int media5200_irq_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq,
> unsigned int *out_flags)
> diff --git a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c
> index e0d703c..fb0c795 100644
> --- a/arch/powerpc/platforms/52xx/mpc52xx_gpt.c
> +++ b/arch/powerpc/platforms/52xx/mpc52xx_gpt.c
> @@ -80,7 +80,7 @@ MODULE_LICENSE("GPL");
> * @regs: virtual address of GPT registers
> * @lock: spinlock to coordinate between different functions.
> * @gc: gpio_chip instance structure; used when GPIO is enabled
> - * @irqhost: Pointer to irq_host instance; used when IRQ mode is supported
> + * @irqhost: Pointer to irq_domain instance; used when IRQ mode is supported
> * @wdt_mode: only relevant for gpt0: bit 0 (MPC52xx_GPT_CAN_WDT) indicates
> * if the gpt may be used as wdt, bit 1 (MPC52xx_GPT_IS_WDT) indicates
> * if the timer is actively used as wdt which blocks gpt functions
> @@ -90,7 +90,7 @@ struct mpc52xx_gpt_priv {
> struct device *dev;
> struct mpc52xx_gpt __iomem *regs;
> spinlock_t lock;
> - struct irq_host *irqhost;
> + struct irq_domain *irqhost;
> u32 ipb_freq;
> u8 wdt_mode;
>
> @@ -203,7 +203,7 @@ void mpc52xx_gpt_irq_cascade(unsigned int virq, struct irq_desc *desc)
> }
> }
>
> -static int mpc52xx_gpt_irq_map(struct irq_host *h, unsigned int virq,
> +static int mpc52xx_gpt_irq_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct mpc52xx_gpt_priv *gpt = h->host_data;
> @@ -215,7 +215,7 @@ static int mpc52xx_gpt_irq_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int mpc52xx_gpt_irq_xlate(struct irq_host *h, struct device_node *ct,
> +static int mpc52xx_gpt_irq_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq,
> unsigned int *out_flags)
> diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pic.c b/arch/powerpc/platforms/52xx/mpc52xx_pic.c
> index 4bf4bf7..7d83308 100644
> --- a/arch/powerpc/platforms/52xx/mpc52xx_pic.c
> +++ b/arch/powerpc/platforms/52xx/mpc52xx_pic.c
> @@ -132,7 +132,7 @@ static struct of_device_id mpc52xx_sdma_ids[] __initdata = {
>
> static struct mpc52xx_intr __iomem *intr;
> static struct mpc52xx_sdma __iomem *sdma;
> -static struct irq_host *mpc52xx_irqhost = NULL;
> +static struct irq_domain *mpc52xx_irqhost = NULL;
>
> static unsigned char mpc52xx_map_senses[4] = {
> IRQ_TYPE_LEVEL_HIGH,
> @@ -354,7 +354,7 @@ static int mpc52xx_is_extirq(int l1, int l2)
> /**
> * mpc52xx_irqhost_xlate - translate virq# from device tree interrupts property
> */
> -static int mpc52xx_irqhost_xlate(struct irq_host *h, struct device_node *ct,
> +static int mpc52xx_irqhost_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq,
> unsigned int *out_flags)
> @@ -388,7 +388,7 @@ static int mpc52xx_irqhost_xlate(struct irq_host *h, struct device_node *ct,
> /**
> * mpc52xx_irqhost_map - Hook to map from virq to an irq_chip structure
> */
> -static int mpc52xx_irqhost_map(struct irq_host *h, unsigned int virq,
> +static int mpc52xx_irqhost_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t irq)
> {
> int l1irq;
> diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
> index 5a55d87..47b8d5d 100644
> --- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
> +++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
> @@ -29,7 +29,7 @@ static DEFINE_RAW_SPINLOCK(pci_pic_lock);
>
> struct pq2ads_pci_pic {
> struct device_node *node;
> - struct irq_host *host;
> + struct irq_domain *host;
>
> struct {
> u32 stat;
> @@ -104,7 +104,7 @@ static void pq2ads_pci_irq_demux(unsigned int irq, struct irq_desc *desc)
> }
> }
>
> -static int pci_pic_host_map(struct irq_host *h, unsigned int virq,
> +static int pci_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> irq_to_desc(virq)->status |= IRQ_LEVEL;
> @@ -113,7 +113,7 @@ static int pci_pic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static void pci_host_unmap(struct irq_host *h, unsigned int virq)
> +static void pci_host_unmap(struct irq_domain *h, unsigned int virq)
> {
> /* remove chip and handler */
> set_irq_chip_data(virq, NULL);
> @@ -128,7 +128,7 @@ static struct irq_host_ops pci_pic_host_ops = {
> int __init pq2ads_pci_init_irq(void)
> {
> struct pq2ads_pci_pic *priv;
> - struct irq_host *host;
> + struct irq_domain *host;
> struct device_node *np;
> int ret = -ENODEV;
> int irq;
> diff --git a/arch/powerpc/platforms/85xx/socrates_fpga_pic.c b/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
> index d48527f..fe51afe 100644
> --- a/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
> +++ b/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
> @@ -53,7 +53,7 @@ static struct socrates_fpga_irq_info fpga_irqs[SOCRATES_FPGA_NUM_IRQS] = {
> static DEFINE_RAW_SPINLOCK(socrates_fpga_pic_lock);
>
> static void __iomem *socrates_fpga_pic_iobase;
> -static struct irq_host *socrates_fpga_pic_irq_host;
> +static struct irq_domain *socrates_fpga_pic_irq_host;
> static unsigned int socrates_fpga_irqs[3];
>
> static inline uint32_t socrates_fpga_pic_read(int reg)
> @@ -241,7 +241,7 @@ static struct irq_chip socrates_fpga_pic_chip = {
> .set_type = socrates_fpga_pic_set_type,
> };
>
> -static int socrates_fpga_pic_host_map(struct irq_host *h, unsigned int virq,
> +static int socrates_fpga_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hwirq)
> {
> /* All interrupts are LEVEL sensitive */
> @@ -252,7 +252,7 @@ static int socrates_fpga_pic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int socrates_fpga_pic_host_xlate(struct irq_host *h,
> +static int socrates_fpga_pic_host_xlate(struct irq_domain *h,
> struct device_node *ct, const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
> {
> @@ -293,7 +293,7 @@ void socrates_fpga_pic_init(struct device_node *pic)
> unsigned long flags;
> int i;
>
> - /* Setup an irq_host structure */
> + /* Setup an irq_domain structure */
> socrates_fpga_pic_irq_host = irq_alloc_host(pic, IRQ_HOST_MAP_LINEAR,
> SOCRATES_FPGA_NUM_IRQS, &socrates_fpga_pic_host_ops,
> SOCRATES_FPGA_NUM_IRQS);
> diff --git a/arch/powerpc/platforms/86xx/gef_pic.c b/arch/powerpc/platforms/86xx/gef_pic.c
> index 6df9e25..fed34ab 100644
> --- a/arch/powerpc/platforms/86xx/gef_pic.c
> +++ b/arch/powerpc/platforms/86xx/gef_pic.c
> @@ -52,7 +52,7 @@
> static DEFINE_RAW_SPINLOCK(gef_pic_lock);
>
> static void __iomem *gef_pic_irq_reg_base;
> -static struct irq_host *gef_pic_irq_host;
> +static struct irq_domain *gef_pic_irq_host;
> static int gef_pic_cascade_irq;
>
> /*
> @@ -159,7 +159,7 @@ static struct irq_chip gef_pic_chip = {
> /* When an interrupt is being configured, this call allows some flexibilty
> * in deciding which irq_chip structure is used
> */
> -static int gef_pic_host_map(struct irq_host *h, unsigned int virq,
> +static int gef_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hwirq)
> {
> /* All interrupts are LEVEL sensitive */
> @@ -169,7 +169,7 @@ static int gef_pic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int gef_pic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int gef_pic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
> {
> @@ -217,7 +217,7 @@ void __init gef_pic_init(struct device_node *np)
> return;
> }
>
> - /* Setup an irq_host structure */
> + /* Setup an irq_domain structure */
> gef_pic_irq_host = irq_alloc_host(np, IRQ_HOST_MAP_LINEAR,
> GEF_PIC_NUM_IRQS,
> &gef_pic_host_ops, NO_IRQ);
> diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c
> index e3e379c..5f88607 100644
> --- a/arch/powerpc/platforms/cell/axon_msi.c
> +++ b/arch/powerpc/platforms/cell/axon_msi.c
> @@ -66,7 +66,7 @@
>
>
> struct axon_msic {
> - struct irq_host *irq_host;
> + struct irq_domain *irq_host;
> __le32 *fifo_virt;
> dma_addr_t fifo_phys;
> dcr_host_t dcr_host;
> @@ -150,7 +150,7 @@ static void axon_msi_cascade(unsigned int irq, struct irq_desc *desc)
>
> static struct axon_msic *find_msi_translator(struct pci_dev *dev)
> {
> - struct irq_host *irq_host;
> + struct irq_domain *irq_host;
> struct device_node *dn, *tmp;
> const phandle *ph;
> struct axon_msic *msic = NULL;
> @@ -184,7 +184,7 @@ static struct axon_msic *find_msi_translator(struct pci_dev *dev)
>
> irq_host = irq_find_host(dn);
> if (!irq_host) {
> - dev_dbg(&dev->dev, "axon_msi: no irq_host found for node %s\n",
> + dev_dbg(&dev->dev, "axon_msi: no irq_domain found for node %s\n",
> dn->full_name);
> goto out_error;
> }
> @@ -316,7 +316,7 @@ static struct irq_chip msic_irq_chip = {
> .name = "AXON-MSI",
> };
>
> -static int msic_host_map(struct irq_host *h, unsigned int virq,
> +static int msic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> set_irq_chip_and_handler(virq, &msic_irq_chip, handle_simple_irq);
> @@ -395,7 +395,7 @@ static int axon_msi_probe(struct platform_device *device,
> msic->irq_host = irq_alloc_host(dn, IRQ_HOST_MAP_NOMAP,
> NR_IRQS, &msic_host_ops, 0);
> if (!msic->irq_host) {
> - printk(KERN_ERR "axon_msi: couldn't allocate irq_host for %s\n",
> + printk(KERN_ERR "axon_msi: couldn't allocate irq_domain for %s\n",
> dn->full_name);
> goto out_free_fifo;
> }
> diff --git a/arch/powerpc/platforms/cell/beat_interrupt.c b/arch/powerpc/platforms/cell/beat_interrupt.c
> index 682af97..179430d 100644
> --- a/arch/powerpc/platforms/cell/beat_interrupt.c
> +++ b/arch/powerpc/platforms/cell/beat_interrupt.c
> @@ -34,7 +34,7 @@ static DEFINE_RAW_SPINLOCK(beatic_irq_mask_lock);
> static uint64_t beatic_irq_mask_enable[(MAX_IRQS+255)/64];
> static uint64_t beatic_irq_mask_ack[(MAX_IRQS+255)/64];
>
> -static struct irq_host *beatic_host;
> +static struct irq_domain *beatic_host;
>
> /*
> * In this implementation, "virq" == "IRQ plug number",
> @@ -122,7 +122,7 @@ static struct irq_chip beatic_pic = {
> *
> * Note that the number (virq) is already assigned at upper layer.
> */
> -static void beatic_pic_host_unmap(struct irq_host *h, unsigned int virq)
> +static void beatic_pic_host_unmap(struct irq_domain *h, unsigned int virq)
> {
> beat_destruct_irq_plug(virq);
> }
> @@ -133,7 +133,7 @@ static void beatic_pic_host_unmap(struct irq_host *h, unsigned int virq)
> *
> * Note that the number (virq) is already assigned at upper layer.
> */
> -static int beatic_pic_host_map(struct irq_host *h, unsigned int virq,
> +static int beatic_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct irq_desc *desc = irq_to_desc(virq);
> @@ -152,7 +152,7 @@ static int beatic_pic_host_map(struct irq_host *h, unsigned int virq,
> * Update binding hardware IRQ number (hw) and Virtuql
> * IRQ number (virq). This is called only once for a given mapping.
> */
> -static void beatic_pic_host_remap(struct irq_host *h, unsigned int virq,
> +static void beatic_pic_host_remap(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> beat_construct_and_connect_irq_plug(virq, hw);
> @@ -165,7 +165,7 @@ static void beatic_pic_host_remap(struct irq_host *h, unsigned int virq,
> * Called from irq_create_of_mapping() only.
> * Note: We have only 1 entry to translate.
> */
> -static int beatic_pic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int beatic_pic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq,
> unsigned int *out_flags)
> @@ -177,7 +177,7 @@ static int beatic_pic_host_xlate(struct irq_host *h, struct device_node *ct,
> return 0;
> }
>
> -static int beatic_pic_host_match(struct irq_host *h, struct device_node *np)
> +static int beatic_pic_host_match(struct irq_domain *h, struct device_node *np)
> {
> /* Match all */
> return 1;
> diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
> index 10eb1a4..2cfb3ee 100644
> --- a/arch/powerpc/platforms/cell/interrupt.c
> +++ b/arch/powerpc/platforms/cell/interrupt.c
> @@ -56,7 +56,7 @@ struct iic {
>
> static DEFINE_PER_CPU(struct iic, cpu_iic);
> #define IIC_NODE_COUNT 2
> -static struct irq_host *iic_host;
> +static struct irq_domain *iic_host;
>
> /* Convert between "pending" bits and hw irq number */
> static irq_hw_number_t iic_pending_to_hwnum(struct cbe_iic_pending_bits bits)
> @@ -184,7 +184,7 @@ void iic_cause_IPI(int cpu, int mesg)
> out_be64(&per_cpu(cpu_iic, cpu).regs->generate, (0xf - mesg) << 4);
> }
>
> -struct irq_host *iic_get_irq_host(int node)
> +struct irq_domain *iic_get_irq_host(int node)
> {
> return iic_host;
> }
> @@ -227,7 +227,7 @@ void iic_request_IPIs(void)
> #endif /* CONFIG_SMP */
>
>
> -static int iic_host_match(struct irq_host *h, struct device_node *node)
> +static int iic_host_match(struct irq_domain *h, struct device_node *node)
> {
> return of_device_is_compatible(node,
> "IBM,CBEA-Internal-Interrupt-Controller");
> @@ -279,7 +279,7 @@ out_eoi:
> raw_spin_unlock(&desc->lock);
> }
>
> -static int iic_host_map(struct irq_host *h, unsigned int virq,
> +static int iic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> switch (hw & IIC_IRQ_TYPE_MASK) {
> @@ -296,7 +296,7 @@ static int iic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int iic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int iic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
>
> diff --git a/arch/powerpc/platforms/cell/spider-pic.c b/arch/powerpc/platforms/cell/spider-pic.c
> index 3f2e557..0d3dcba 100644
> --- a/arch/powerpc/platforms/cell/spider-pic.c
> +++ b/arch/powerpc/platforms/cell/spider-pic.c
> @@ -62,7 +62,7 @@ enum {
> #define SPIDER_IRQ_INVALID 63
>
> struct spider_pic {
> - struct irq_host *host;
> + struct irq_domain *host;
> void __iomem *regs;
> unsigned int node_id;
> };
> @@ -175,7 +175,7 @@ static struct irq_chip spider_pic = {
> .set_type = spider_set_irq_type,
> };
>
> -static int spider_host_map(struct irq_host *h, unsigned int virq,
> +static int spider_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> set_irq_chip_and_handler(virq, &spider_pic, handle_level_irq);
> @@ -186,7 +186,7 @@ static int spider_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int spider_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int spider_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
>
> diff --git a/arch/powerpc/platforms/embedded6xx/flipper-pic.c b/arch/powerpc/platforms/embedded6xx/flipper-pic.c
> index c278bd3..80021c3 100644
> --- a/arch/powerpc/platforms/embedded6xx/flipper-pic.c
> +++ b/arch/powerpc/platforms/embedded6xx/flipper-pic.c
> @@ -96,9 +96,9 @@ static struct irq_chip flipper_pic = {
> *
> */
>
> -static struct irq_host *flipper_irq_host;
> +static struct irq_domain *flipper_irq_host;
>
> -static int flipper_pic_map(struct irq_host *h, unsigned int virq,
> +static int flipper_pic_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hwirq)
> {
> set_irq_chip_data(virq, h->host_data);
> @@ -107,13 +107,13 @@ static int flipper_pic_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static void flipper_pic_unmap(struct irq_host *h, unsigned int irq)
> +static void flipper_pic_unmap(struct irq_domain *h, unsigned int irq)
> {
> set_irq_chip_data(irq, NULL);
> set_irq_chip(irq, NULL);
> }
>
> -static int flipper_pic_match(struct irq_host *h, struct device_node *np)
> +static int flipper_pic_match(struct irq_domain *h, struct device_node *np)
> {
> return 1;
> }
> @@ -137,10 +137,10 @@ static void __flipper_quiesce(void __iomem *io_base)
> out_be32(io_base + FLIPPER_ICR, 0xffffffff);
> }
>
> -struct irq_host * __init flipper_pic_init(struct device_node *np)
> +struct irq_domain * __init flipper_pic_init(struct device_node *np)
> {
> struct device_node *pi;
> - struct irq_host *irq_host = NULL;
> + struct irq_domain *irq_host = NULL;
> struct resource res;
> void __iomem *io_base;
> int retval;
> @@ -169,7 +169,7 @@ struct irq_host * __init flipper_pic_init(struct device_node *np)
> irq_host = irq_alloc_host(np, IRQ_HOST_MAP_LINEAR, FLIPPER_NR_IRQS,
> &flipper_irq_host_ops, -1);
> if (!irq_host) {
> - pr_err("failed to allocate irq_host\n");
> + pr_err("failed to allocate irq_domain\n");
> return NULL;
> }
>
> diff --git a/arch/powerpc/platforms/embedded6xx/hlwd-pic.c b/arch/powerpc/platforms/embedded6xx/hlwd-pic.c
> index a771f91..a41ab12 100644
> --- a/arch/powerpc/platforms/embedded6xx/hlwd-pic.c
> +++ b/arch/powerpc/platforms/embedded6xx/hlwd-pic.c
> @@ -89,9 +89,9 @@ static struct irq_chip hlwd_pic = {
> *
> */
>
> -static struct irq_host *hlwd_irq_host;
> +static struct irq_domain *hlwd_irq_host;
>
> -static int hlwd_pic_map(struct irq_host *h, unsigned int virq,
> +static int hlwd_pic_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hwirq)
> {
> set_irq_chip_data(virq, h->host_data);
> @@ -100,7 +100,7 @@ static int hlwd_pic_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static void hlwd_pic_unmap(struct irq_host *h, unsigned int irq)
> +static void hlwd_pic_unmap(struct irq_domain *h, unsigned int irq)
> {
> set_irq_chip_data(irq, NULL);
> set_irq_chip(irq, NULL);
> @@ -111,7 +111,7 @@ static struct irq_host_ops hlwd_irq_host_ops = {
> .unmap = hlwd_pic_unmap,
> };
>
> -static unsigned int __hlwd_pic_get_irq(struct irq_host *h)
> +static unsigned int __hlwd_pic_get_irq(struct irq_domain *h)
> {
> void __iomem *io_base = h->host_data;
> int irq;
> @@ -129,7 +129,7 @@ static unsigned int __hlwd_pic_get_irq(struct irq_host *h)
> static void hlwd_pic_irq_cascade(unsigned int cascade_virq,
> struct irq_desc *desc)
> {
> - struct irq_host *irq_host = get_irq_data(cascade_virq);
> + struct irq_domain *irq_host = get_irq_data(cascade_virq);
> unsigned int virq;
>
> raw_spin_lock(&desc->lock);
> @@ -161,9 +161,9 @@ static void __hlwd_quiesce(void __iomem *io_base)
> out_be32(io_base + HW_BROADWAY_ICR, 0xffffffff);
> }
>
> -struct irq_host *hlwd_pic_init(struct device_node *np)
> +struct irq_domain *hlwd_pic_init(struct device_node *np)
> {
> - struct irq_host *irq_host;
> + struct irq_domain *irq_host;
> struct resource res;
> void __iomem *io_base;
> int retval;
> @@ -186,7 +186,7 @@ struct irq_host *hlwd_pic_init(struct device_node *np)
> irq_host = irq_alloc_host(np, IRQ_HOST_MAP_LINEAR, HLWD_NR_IRQS,
> &hlwd_irq_host_ops, -1);
> if (!irq_host) {
> - pr_err("failed to allocate irq_host\n");
> + pr_err("failed to allocate irq_domain\n");
> return NULL;
> }
> irq_host->host_data = io_base;
> @@ -206,7 +206,7 @@ unsigned int hlwd_pic_get_irq(void)
>
> void hlwd_pic_probe(void)
> {
> - struct irq_host *host;
> + struct irq_domain *host;
> struct device_node *np;
> const u32 *interrupts;
> int cascade_virq;
> diff --git a/arch/powerpc/platforms/iseries/irq.c b/arch/powerpc/platforms/iseries/irq.c
> index ba446bf..948af76 100644
> --- a/arch/powerpc/platforms/iseries/irq.c
> +++ b/arch/powerpc/platforms/iseries/irq.c
> @@ -338,7 +338,7 @@ unsigned int iSeries_get_irq(void)
>
> #ifdef CONFIG_PCI
>
> -static int iseries_irq_host_map(struct irq_host *h, unsigned int virq,
> +static int iseries_irq_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> set_irq_chip_and_handler(virq, &iseries_pic, handle_fasteoi_irq);
> @@ -346,7 +346,7 @@ static int iseries_irq_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int iseries_irq_host_match(struct irq_host *h, struct device_node *np)
> +static int iseries_irq_host_match(struct irq_domain *h, struct device_node *np)
> {
> /* Match all */
> return 1;
> @@ -364,7 +364,7 @@ static struct irq_host_ops iseries_irq_host_ops = {
> void __init iSeries_init_IRQ(void)
> {
> /* Register PCI event handler and open an event path */
> - struct irq_host *host;
> + struct irq_domain *host;
> int ret;
>
> /*
> diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
> index 890d5f7..db69f2b 100644
> --- a/arch/powerpc/platforms/powermac/pic.c
> +++ b/arch/powerpc/platforms/powermac/pic.c
> @@ -67,7 +67,7 @@ static DEFINE_RAW_SPINLOCK(pmac_pic_lock);
> static unsigned long ppc_lost_interrupts[NR_MASK_WORDS];
> static unsigned long ppc_cached_irq_mask[NR_MASK_WORDS];
> static int pmac_irq_cascade = -1;
> -static struct irq_host *pmac_pic_host;
> +static struct irq_domain *pmac_pic_host;
>
> static void __pmac_retrigger(unsigned int irq_nr)
> {
> @@ -280,13 +280,13 @@ static struct irqaction gatwick_cascade_action = {
> .name = "cascade",
> };
>
> -static int pmac_pic_host_match(struct irq_host *h, struct device_node *node)
> +static int pmac_pic_host_match(struct irq_domain *h, struct device_node *node)
> {
> /* We match all, we don't always have a node anyway */
> return 1;
> }
>
> -static int pmac_pic_host_map(struct irq_host *h, unsigned int virq,
> +static int pmac_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct irq_desc *desc = irq_to_desc(virq);
> @@ -306,7 +306,7 @@ static int pmac_pic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int pmac_pic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int pmac_pic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq,
> unsigned int *out_flags)
> diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c
> index 59d9712..71fec2e 100644
> --- a/arch/powerpc/platforms/ps3/interrupt.c
> +++ b/arch/powerpc/platforms/ps3/interrupt.c
> @@ -659,12 +659,12 @@ static void __maybe_unused _dump_mask(struct ps3_private *pd,
> static void dump_bmp(struct ps3_private* pd) {};
> #endif /* defined(DEBUG) */
>
> -static void ps3_host_unmap(struct irq_host *h, unsigned int virq)
> +static void ps3_host_unmap(struct irq_domain *h, unsigned int virq)
> {
> set_irq_chip_data(virq, NULL);
> }
>
> -static int ps3_host_map(struct irq_host *h, unsigned int virq,
> +static int ps3_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hwirq)
> {
> pr_debug("%s:%d: hwirq %lu, virq %u\n", __func__, __LINE__, hwirq,
> @@ -675,7 +675,7 @@ static int ps3_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int ps3_host_match(struct irq_host *h, struct device_node *np)
> +static int ps3_host_match(struct irq_domain *h, struct device_node *np)
> {
> /* Match all */
> return 1;
> @@ -733,7 +733,7 @@ void __init ps3_init_IRQ(void)
> {
> int result;
> unsigned cpu;
> - struct irq_host *host;
> + struct irq_domain *host;
>
> host = irq_alloc_host(NULL, IRQ_HOST_MAP_NOMAP, 0, &ps3_host_ops,
> PS3_INVALID_OUTLET);
> diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
> index 7b96e5a..d9006d7 100644
> --- a/arch/powerpc/platforms/pseries/xics.c
> +++ b/arch/powerpc/platforms/pseries/xics.c
> @@ -33,7 +33,7 @@
> #include "xics.h"
> #include "plpar_wrappers.h"
>
> -static struct irq_host *xics_host;
> +static struct irq_domain *xics_host;
>
> #define XICS_IPI 2
> #define XICS_IRQ_SPURIOUS 0
> @@ -452,7 +452,7 @@ static struct irq_chip xics_pic_lpar = {
> /* Points to the irq_chip we're actually using */
> static struct irq_chip *xics_irq_chip;
>
> -static int xics_host_match(struct irq_host *h, struct device_node *node)
> +static int xics_host_match(struct irq_domain *h, struct device_node *node)
> {
> /* IBM machines have interrupt parents of various funky types for things
> * like vdevices, events, etc... The trick we use here is to match
> @@ -461,7 +461,7 @@ static int xics_host_match(struct irq_host *h, struct device_node *node)
> return !of_device_is_compatible(node, "chrp,iic");
> }
>
> -static int xics_host_map(struct irq_host *h, unsigned int virq,
> +static int xics_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> pr_devel("xics: map virq %d, hwirq 0x%lx\n", virq, hw);
> @@ -474,7 +474,7 @@ static int xics_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int xics_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int xics_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
>
> diff --git a/arch/powerpc/sysdev/cpm1.c b/arch/powerpc/sysdev/cpm1.c
> index 0085212..2f78da2 100644
> --- a/arch/powerpc/sysdev/cpm1.c
> +++ b/arch/powerpc/sysdev/cpm1.c
> @@ -54,7 +54,7 @@ cpm8xx_t __iomem *cpmp; /* Pointer to comm processor space */
> immap_t __iomem *mpc8xx_immr;
> static cpic8xx_t __iomem *cpic_reg;
>
> -static struct irq_host *cpm_pic_host;
> +static struct irq_domain *cpm_pic_host;
>
> static void cpm_mask_irq(unsigned int irq)
> {
> @@ -98,7 +98,7 @@ int cpm_get_irq(void)
> return irq_linear_revmap(cpm_pic_host, cpm_vec);
> }
>
> -static int cpm_pic_host_map(struct irq_host *h, unsigned int virq,
> +static int cpm_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> pr_debug("cpm_pic_host_map(%d, 0x%lx)\n", virq, hw);
> diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c
> index fcea4ff..4e18a8b 100644
> --- a/arch/powerpc/sysdev/cpm2_pic.c
> +++ b/arch/powerpc/sysdev/cpm2_pic.c
> @@ -50,7 +50,7 @@
>
> static intctl_cpm2_t __iomem *cpm2_intctl;
>
> -static struct irq_host *cpm2_pic_host;
> +static struct irq_domain *cpm2_pic_host;
> #define NR_MASK_WORDS ((NR_IRQS + 31) / 32)
> static unsigned long ppc_cached_irq_mask[NR_MASK_WORDS];
>
> @@ -221,7 +221,7 @@ unsigned int cpm2_get_irq(void)
> return irq_linear_revmap(cpm2_pic_host, irq);
> }
>
> -static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq,
> +static int cpm2_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> pr_debug("cpm2_pic_host_map(%d, 0x%lx)\n", virq, hw);
> @@ -231,7 +231,7 @@ static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int cpm2_pic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int cpm2_pic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
> {
> diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
> index 108d76f..977c5e9 100644
> --- a/arch/powerpc/sysdev/fsl_msi.c
> +++ b/arch/powerpc/sysdev/fsl_msi.c
> @@ -58,7 +58,7 @@ static struct irq_chip fsl_msi_chip = {
> .name = "FSL-MSI",
> };
>
> -static int fsl_msi_host_map(struct irq_host *h, unsigned int virq,
> +static int fsl_msi_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct fsl_msi *msi_data = h->host_data;
> diff --git a/arch/powerpc/sysdev/fsl_msi.h b/arch/powerpc/sysdev/fsl_msi.h
> index 624580c..3852988 100644
> --- a/arch/powerpc/sysdev/fsl_msi.h
> +++ b/arch/powerpc/sysdev/fsl_msi.h
> @@ -24,7 +24,7 @@
> #define FSL_PIC_IP_IPIC 0x00000002
>
> struct fsl_msi {
> - struct irq_host *irqhost;
> + struct irq_domain *irqhost;
>
> unsigned long cascade_irq;
>
> diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c
> index 6323e70..ccb2892 100644
> --- a/arch/powerpc/sysdev/i8259.c
> +++ b/arch/powerpc/sysdev/i8259.c
> @@ -25,7 +25,7 @@ static unsigned char cached_8259[2] = { 0xff, 0xff };
>
> static DEFINE_RAW_SPINLOCK(i8259_lock);
>
> -static struct irq_host *i8259_host;
> +static struct irq_domain *i8259_host;
>
> /*
> * Acknowledge the IRQ using either the PCI host bridge's interrupt
> @@ -163,12 +163,12 @@ static struct resource pic_edgectrl_iores = {
> .flags = IORESOURCE_BUSY,
> };
>
> -static int i8259_host_match(struct irq_host *h, struct device_node *node)
> +static int i8259_host_match(struct irq_domain *h, struct device_node *node)
> {
> return h->of_node == NULL || h->of_node == node;
> }
>
> -static int i8259_host_map(struct irq_host *h, unsigned int virq,
> +static int i8259_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> pr_debug("i8259_host_map(%d, 0x%lx)\n", virq, hw);
> @@ -185,7 +185,7 @@ static int i8259_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static void i8259_host_unmap(struct irq_host *h, unsigned int virq)
> +static void i8259_host_unmap(struct irq_domain *h, unsigned int virq)
> {
> /* Make sure irq is masked in hardware */
> i8259_mask_irq(virq);
> @@ -197,7 +197,7 @@ static void i8259_host_unmap(struct irq_host *h, unsigned int virq)
> synchronize_irq(virq);
> }
>
> -static int i8259_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int i8259_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
> {
> @@ -224,7 +224,7 @@ static struct irq_host_ops i8259_host_ops = {
> .xlate = i8259_host_xlate,
> };
>
> -struct irq_host *i8259_get_host(void)
> +struct irq_domain *i8259_get_host(void)
> {
> return i8259_host;
> }
> diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
> index d7b9b9c..ac0bd54 100644
> --- a/arch/powerpc/sysdev/ipic.c
> +++ b/arch/powerpc/sysdev/ipic.c
> @@ -676,13 +676,13 @@ static struct irq_chip ipic_edge_irq_chip = {
> .set_type = ipic_set_irq_type,
> };
>
> -static int ipic_host_match(struct irq_host *h, struct device_node *node)
> +static int ipic_host_match(struct irq_domain *h, struct device_node *node)
> {
> /* Exact match, unless ipic node is NULL */
> return h->of_node == NULL || h->of_node == node;
> }
>
> -static int ipic_host_map(struct irq_host *h, unsigned int virq,
> +static int ipic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct ipic *ipic = h->host_data;
> @@ -696,7 +696,7 @@ static int ipic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int ipic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int ipic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
>
> diff --git a/arch/powerpc/sysdev/ipic.h b/arch/powerpc/sysdev/ipic.h
> index 9391c57..fe31a00 100644
> --- a/arch/powerpc/sysdev/ipic.h
> +++ b/arch/powerpc/sysdev/ipic.h
> @@ -43,7 +43,7 @@ struct ipic {
> volatile u32 __iomem *regs;
>
> /* The remapper for this IPIC */
> - struct irq_host *irqhost;
> + struct irq_domain *irqhost;
> };
>
> struct ipic_info {
> diff --git a/arch/powerpc/sysdev/mpc8xx_pic.c b/arch/powerpc/sysdev/mpc8xx_pic.c
> index 8c27d26..f4bf039 100644
> --- a/arch/powerpc/sysdev/mpc8xx_pic.c
> +++ b/arch/powerpc/sysdev/mpc8xx_pic.c
> @@ -18,7 +18,7 @@
>
> extern int cpm_get_irq(struct pt_regs *regs);
>
> -static struct irq_host *mpc8xx_pic_host;
> +static struct irq_domain *mpc8xx_pic_host;
> #define NR_MASK_WORDS ((NR_IRQS + 31) / 32)
> static unsigned long ppc_cached_irq_mask[NR_MASK_WORDS];
> static sysconf8xx_t __iomem *siu_reg;
> @@ -118,7 +118,7 @@ unsigned int mpc8xx_get_irq(void)
>
> }
>
> -static int mpc8xx_pic_host_map(struct irq_host *h, unsigned int virq,
> +static int mpc8xx_pic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> pr_debug("mpc8xx_pic_host_map(%d, 0x%lx)\n", virq, hw);
> @@ -129,7 +129,7 @@ static int mpc8xx_pic_host_map(struct irq_host *h, unsigned int virq,
> }
>
>
> -static int mpc8xx_pic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int mpc8xx_pic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
> {
> diff --git a/arch/powerpc/sysdev/mpc8xxx_gpio.c b/arch/powerpc/sysdev/mpc8xxx_gpio.c
> index c48cd81..7fa32f1 100644
> --- a/arch/powerpc/sysdev/mpc8xxx_gpio.c
> +++ b/arch/powerpc/sysdev/mpc8xxx_gpio.c
> @@ -37,7 +37,7 @@ struct mpc8xxx_gpio_chip {
> * open drain mode safely
> */
> u32 data;
> - struct irq_host *irq;
> + struct irq_domain *irq;
> void *of_dev_id_data;
> };
>
> @@ -270,7 +270,7 @@ static struct irq_chip mpc8xxx_irq_chip = {
> .set_type = mpc8xxx_irq_set_type,
> };
>
> -static int mpc8xxx_gpio_irq_map(struct irq_host *h, unsigned int virq,
> +static int mpc8xxx_gpio_irq_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct mpc8xxx_gpio_chip *mpc8xxx_gc = h->host_data;
> @@ -285,7 +285,7 @@ static int mpc8xxx_gpio_irq_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int mpc8xxx_gpio_irq_xlate(struct irq_host *h, struct device_node *ct,
> +static int mpc8xxx_gpio_irq_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq,
> unsigned int *out_flags)
> diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
> index 7c13426..a52e257 100644
> --- a/arch/powerpc/sysdev/mpic.c
> +++ b/arch/powerpc/sysdev/mpic.c
> @@ -931,13 +931,13 @@ static struct irq_chip mpic_irq_ht_chip = {
> #endif /* CONFIG_MPIC_U3_HT_IRQS */
>
>
> -static int mpic_host_match(struct irq_host *h, struct device_node *node)
> +static int mpic_host_match(struct irq_domain *h, struct device_node *node)
> {
> /* Exact match, unless mpic node is NULL */
> return h->of_node == NULL || h->of_node == node;
> }
>
> -static int mpic_host_map(struct irq_host *h, unsigned int virq,
> +static int mpic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct mpic *mpic = h->host_data;
> @@ -987,7 +987,7 @@ static int mpic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int mpic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int mpic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
>
> diff --git a/arch/powerpc/sysdev/mv64x60_pic.c b/arch/powerpc/sysdev/mv64x60_pic.c
> index 485b924..33fbc90 100644
> --- a/arch/powerpc/sysdev/mv64x60_pic.c
> +++ b/arch/powerpc/sysdev/mv64x60_pic.c
> @@ -70,7 +70,7 @@ static u32 mv64x60_cached_low_mask;
> static u32 mv64x60_cached_high_mask = MV64X60_HIGH_GPP_GROUPS;
> static u32 mv64x60_cached_gpp_mask;
>
> -static struct irq_host *mv64x60_irq_host;
> +static struct irq_domain *mv64x60_irq_host;
>
> /*
> * mv64x60_chip_low functions
> @@ -208,7 +208,7 @@ static struct irq_chip *mv64x60_chips[] = {
> [MV64x60_LEVEL1_GPP] = &mv64x60_chip_gpp,
> };
>
> -static int mv64x60_host_map(struct irq_host *h, unsigned int virq,
> +static int mv64x60_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hwirq)
> {
> int level1;
> diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c
> index 541ba98..f28fd8f 100644
> --- a/arch/powerpc/sysdev/qe_lib/qe_ic.c
> +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c
> @@ -243,13 +243,13 @@ static struct irq_chip qe_ic_irq_chip = {
> .mask_ack = qe_ic_mask_irq,
> };
>
> -static int qe_ic_host_match(struct irq_host *h, struct device_node *node)
> +static int qe_ic_host_match(struct irq_domain *h, struct device_node *node)
> {
> /* Exact match, unless qe_ic node is NULL */
> return h->of_node == NULL || h->of_node == node;
> }
>
> -static int qe_ic_host_map(struct irq_host *h, unsigned int virq,
> +static int qe_ic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct qe_ic *qe_ic = h->host_data;
> @@ -270,7 +270,7 @@ static int qe_ic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int qe_ic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int qe_ic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 * intspec, unsigned int intsize,
> irq_hw_number_t * out_hwirq,
> unsigned int *out_flags)
> diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.h b/arch/powerpc/sysdev/qe_lib/qe_ic.h
> index c1361d0..c327872 100644
> --- a/arch/powerpc/sysdev/qe_lib/qe_ic.h
> +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.h
> @@ -79,7 +79,7 @@ struct qe_ic {
> volatile u32 __iomem *regs;
>
> /* The remapper for this QEIC */
> - struct irq_host *irqhost;
> + struct irq_domain *irqhost;
>
> /* The "linux" controller struct */
> struct irq_chip hc_irq;
> diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c
> index 0ab9281..7a9b37a 100644
> --- a/arch/powerpc/sysdev/tsi108_pci.c
> +++ b/arch/powerpc/sysdev/tsi108_pci.c
> @@ -51,7 +51,7 @@
> u32 tsi108_pci_cfg_base;
> static u32 tsi108_pci_cfg_phys;
> u32 tsi108_csr_vir_base;
> -static struct irq_host *pci_irq_host;
> +static struct irq_domain *pci_irq_host;
>
> extern u32 get_vir_csrbase(void);
> extern u32 tsi108_read_reg(u32 reg_offset);
> @@ -382,7 +382,7 @@ static struct irq_chip tsi108_pci_irq = {
> .unmask = tsi108_pci_irq_enable,
> };
>
> -static int pci_irq_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int pci_irq_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_flags)
> {
> @@ -391,7 +391,7 @@ static int pci_irq_host_xlate(struct irq_host *h, struct device_node *ct,
> return 0;
> }
>
> -static int pci_irq_host_map(struct irq_host *h, unsigned int virq,
> +static int pci_irq_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> { unsigned int irq;
> DBG("%s(%d, 0x%lx)\n", __func__, virq, hw);
> diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
> index 0038fb7..3c835f5 100644
> --- a/arch/powerpc/sysdev/uic.c
> +++ b/arch/powerpc/sysdev/uic.c
> @@ -52,7 +52,7 @@ struct uic {
> spinlock_t lock;
>
> /* The remapper for this UIC */
> - struct irq_host *irqhost;
> + struct irq_domain *irqhost;
> };
>
> static void uic_unmask_irq(unsigned int virq)
> @@ -185,7 +185,7 @@ static struct irq_chip uic_irq_chip = {
> .set_type = uic_set_irq_type,
> };
>
> -static int uic_host_map(struct irq_host *h, unsigned int virq,
> +static int uic_host_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t hw)
> {
> struct uic *uic = h->host_data;
> @@ -201,7 +201,7 @@ static int uic_host_map(struct irq_host *h, unsigned int virq,
> return 0;
> }
>
> -static int uic_host_xlate(struct irq_host *h, struct device_node *ct,
> +static int uic_host_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq, unsigned int *out_type)
>
> diff --git a/arch/powerpc/sysdev/xilinx_intc.c b/arch/powerpc/sysdev/xilinx_intc.c
> index 1e0ccfa..f6d18cb 100644
> --- a/arch/powerpc/sysdev/xilinx_intc.c
> +++ b/arch/powerpc/sysdev/xilinx_intc.c
> @@ -40,7 +40,7 @@
> #define XINTC_IVR 24 /* Interrupt Vector */
> #define XINTC_MER 28 /* Master Enable */
>
> -static struct irq_host *master_irqhost;
> +static struct irq_domain *master_irqhost;
>
> #define XILINX_INTC_MAXIRQS (32)
>
> @@ -147,7 +147,7 @@ static struct irq_chip xilinx_intc_edge_irqchip = {
> /**
> * xilinx_intc_xlate - translate virq# from device tree interrupts property
> */
> -static int xilinx_intc_xlate(struct irq_host *h, struct device_node *ct,
> +static int xilinx_intc_xlate(struct irq_domain *h, struct device_node *ct,
> const u32 *intspec, unsigned int intsize,
> irq_hw_number_t *out_hwirq,
> unsigned int *out_flags)
> @@ -167,7 +167,7 @@ static int xilinx_intc_xlate(struct irq_host *h, struct device_node *ct,
>
> return 0;
> }
> -static int xilinx_intc_map(struct irq_host *h, unsigned int virq,
> +static int xilinx_intc_map(struct irq_domain *h, unsigned int virq,
> irq_hw_number_t irq)
> {
> set_irq_chip_data(virq, h->host_data);
> @@ -188,10 +188,10 @@ static struct irq_host_ops xilinx_intc_ops = {
> .xlate = xilinx_intc_xlate,
> };
>
> -struct irq_host * __init
> +struct irq_domain * __init
> xilinx_intc_init(struct device_node *np)
> {
> - struct irq_host * irq;
> + struct irq_domain * irq;
> void * regs;
>
> /* Find and map the intc registers */
> @@ -206,7 +206,7 @@ xilinx_intc_init(struct device_node *np)
> out_be32(regs + XINTC_IAR, ~(u32) 0); /* Acknowledge pending irqs */
> out_be32(regs + XINTC_MER, 0x3UL); /* Turn on the Master Enable. */
>
> - /* Allocate and initialize an irq_host structure. */
> + /* Allocate and initialize an irq_domain structure. */
> irq = irq_alloc_host(np, IRQ_HOST_MAP_LINEAR, XILINX_INTC_MAXIRQS,
> &xilinx_intc_ops, -1);
> if (!irq)
> --
> 1.7.0.4
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
^ permalink raw reply
* fsl-esdhc on P2020 weird endianess behavior
From: Elie De Brauwer @ 2011-01-21 16:22 UTC (permalink / raw)
To: linuxppc-dev
Hello list,
I have a P2020 processor on a custom board which uses the embedded
fsl-esdhc controller. Hardware-wise this is functional and in u-boot
everything seems to behave (mmc part 0 gives the correct partition table
and ext2ls/fatls are capable of reading the contents of the sd card).
However as soon as I start Linux (2.6.36), I get all sorts of unwanted
behavior. Linux is unable to detect the partition layout (but if I do a
hexdump of the MBR, I see the endianness is swapped (last 4 bytes are aa
55 00 00). Also when I try to obtain the card registers they show the
same behavior:
# cat ./devices/soc.0/ff72e000.sdhci/mmc_host/mmc0/mmc0:0001/scr
0000b50200000000
While for comparison the same value on my (x86) laptop gives:
edb@lapedb:/sys/devices/pci0000:00/0000:00:1e.0/0000:15:00.2/mmc_host/mmc0/mmc0:0001$
cat scr
02b5000000000000
In my config I have the following set:
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
CONFIG_MMC_SDHCI_BIG_ENDIAN_32BIT_BYTE_SWAPPER=y
# CONFIG_MMC_SDHCI_PCI is not set
CONFIG_MMC_SDHCI_OF=y
CONFIG_MMC_SDHCI_OF_ESDHC=y
any pointers are welcome.
gr
E.
--
Elie De Brauwer
^ permalink raw reply
* [patch 2/2] powerpc: Use new irq allocator
From: Thomas Gleixner @ 2011-01-21 16:12 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <20110121142848.050196552@linutronix.de>
Use the new functions and free the descriptor when the virq is
destroyed.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/powerpc/kernel/irq.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
Index: linux-2.6-tip/arch/powerpc/kernel/irq.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/kernel/irq.c
+++ linux-2.6-tip/arch/powerpc/kernel/irq.c
@@ -678,16 +678,15 @@ void irq_set_virq_count(unsigned int cou
static int irq_setup_virq(struct irq_host *host, unsigned int virq,
irq_hw_number_t hwirq)
{
- struct irq_desc *desc;
+ int res;
- desc = irq_to_desc_alloc_node(virq, 0);
- if (!desc) {
+ res = irq_alloc_desc_at(virq, 0);
+ if (res != virq) {
pr_debug("irq: -> allocating desc failed\n");
goto error;
}
- /* Clear IRQ_NOREQUEST flag */
- desc->status &= ~IRQ_NOREQUEST;
+ irq_clear_status_flags(virq, IRQ_NOREQUEST);
/* map it */
smp_wmb();
@@ -696,11 +695,13 @@ static int irq_setup_virq(struct irq_hos
if (host->ops->map(host, virq, hwirq)) {
pr_debug("irq: -> mapping failed, freeing\n");
- goto error;
+ goto errdesc;
}
return 0;
+errdesc:
+ irq_free_descs(virq, 1);
error:
irq_free_virt(virq, 1);
return -1;
@@ -879,9 +880,9 @@ void irq_dispose_mapping(unsigned int vi
smp_mb();
irq_map[virq].hwirq = host->inval_irq;
- /* Set some flags */
- irq_to_desc(virq)->status |= IRQ_NOREQUEST;
+ irq_set_status_flags(virq, IRQ_NOREQUEST);
+ irq_free_descs(virq, 1);
/* Free it */
irq_free_virt(virq, 1);
}
^ permalink raw reply
* [patch 0/2] Sparse irq cleanup - Resend
From: Thomas Gleixner @ 2011-01-21 16:12 UTC (permalink / raw)
To: linuxppc-dev
The following series cleans up the left overs of the old sparse irq
code.
Thanks,
tglx
^ permalink raw reply
* [patch 1/2] powerpc: Use ARCH_IRQ_INIT_FLAGS
From: Thomas Gleixner @ 2011-01-21 16:12 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <20110121142848.050196552@linutronix.de>
Define the ARCH_IRQ_INIT_FLAGS instead of fixing it up in a loop.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/powerpc/include/asm/hw_irq.h | 2 ++
arch/powerpc/kernel/irq.c | 15 ---------------
2 files changed, 2 insertions(+), 15 deletions(-)
Index: linux-2.6-tip/arch/powerpc/include/asm/hw_irq.h
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/include/asm/hw_irq.h
+++ linux-2.6-tip/arch/powerpc/include/asm/hw_irq.h
@@ -141,6 +141,8 @@ static inline bool arch_irqs_disabled(vo
#endif /* CONFIG_PPC64 */
+#define ARCH_IRQ_INIT_FLAGS IRQ_NOREQUEST
+
/*
* interrupt-retrigger: should we handle this via lost interrupts and IPIs
* or should we not care like we do now ? --BenH.
Index: linux-2.6-tip/arch/powerpc/kernel/irq.c
===================================================================
--- linux-2.6-tip.orig/arch/powerpc/kernel/irq.c
+++ linux-2.6-tip/arch/powerpc/kernel/irq.c
@@ -1074,21 +1074,6 @@ void irq_free_virt(unsigned int virq, un
int arch_early_irq_init(void)
{
- struct irq_desc *desc;
- int i;
-
- for (i = 0; i < NR_IRQS; i++) {
- desc = irq_to_desc(i);
- if (desc)
- desc->status |= IRQ_NOREQUEST;
- }
-
- return 0;
-}
-
-int arch_init_chip_data(struct irq_desc *desc, int node)
-{
- desc->status |= IRQ_NOREQUEST;
return 0;
}
^ permalink raw reply
* Re: [PATCH] powerpc: Fix some 6xx/7xxx CPU setup functions
From: Benjamin Herrenschmidt @ 2011-01-21 10:00 UTC (permalink / raw)
To: Andreas Schwab; +Cc: linuxppc-dev
In-Reply-To: <m31v4660zb.fsf@redhat.com>
On Fri, 2011-01-21 at 10:48 +0100, Andreas Schwab wrote:
> Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
>
> > In absence of good testing I would appreciate a close inspection of the patch
> > by different pairs of eyes :-)
>
> Looks good to me. That broke apparently in 400d221 ("ppc32: make
> cur_cpu_spec a single pointer instead of an array"), which changed the
> calling convention in call_setup_cpu.
Nice, >5 years ago and it's not even my fault :-) Thanks for the
review !
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH] powerpc: Pass the right cpu_spec to ->setup_cpu() on 64-bit
From: Andreas Schwab @ 2011-01-21 9:52 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1295591763.2148.282.camel__24783.9240976193$1295591799$gmane$org@pasglop>
You may also want to remove the misleading sentence about PTRRELOC in
the preceding comment, since both s and t were already passed through it
anyway.
Andreas.
--
Andreas Schwab, schwab@redhat.com
GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84 5EC7 45C6 250E 6F00 984E
"And now for something completely different."
^ permalink raw reply
* Re: [PATCH] powerpc: Fix some 6xx/7xxx CPU setup functions
From: Andreas Schwab @ 2011-01-21 9:48 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1295591723.2148.281.camel__36384.4125684865$1295591768$gmane$org@pasglop>
Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
> In absence of good testing I would appreciate a close inspection of the patch
> by different pairs of eyes :-)
Looks good to me. That broke apparently in 400d221 ("ppc32: make
cur_cpu_spec a single pointer instead of an array"), which changed the
calling convention in call_setup_cpu.
Andreas.
--
Andreas Schwab, schwab@redhat.com
GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84 5EC7 45C6 250E 6F00 984E
"And now for something completely different."
^ permalink raw reply
* Re: [PATCH] change acquire/release_console_sem() to console_lock/unlock()
From: Andrew Morton @ 2011-01-21 8:23 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: linux-fbdev, Greg KH, Lars-Peter Clausen, James Hogan,
David Airlie, Daniel Vetter, linux-omap, Jesse Barnes,
James E.J. Bottomley, David S. Miller, Paul Mackerras,
Liam Girdwood, Kyle McMartin, Jiri Slaby, Thomas Gleixner,
Caglar Akyuz, devel, Alberto Panizzo, Phil Edworthy, xen-devel,
Russell King, Kuninori Morimoto, Wu Zhangjin,
Florian Tobias Schandinat, Lionel Debroux, Helge Deller,
Kay Sievers, James Morris, Kevin Hilman, Tony Lindgren,
Ben Skeggs, Andres Salomon, Julia Lawall, Dave Airlie, Kees Cook,
Francisco Jerez, Abhijeet Dharmapurikar, Marcin Slusarz,
cbe-oss-dev, linuxppc-dev, Ondrej Zary, Denys Vlasenko,
Konrad Rzeszutek Wilk, linux-kernel, Namhyung Kim, Rusty Russell,
Werner Fink, linux-geode, torbenh, Jean Delvare, Magnus Damm,
Jeremy Fitzhardinge, dri-devel, Daniel Mack, Nicolas Pitre,
Dan Williams, virtualization, Ingo Molnar, linux-arm-kernel,
Thomas Gleixner, Daniel Walker, Linus Walleij, linux-parisc,
Geoff Levand, Jiri Kosina, Mark Brown, Jerome Glisse,
Ralf Baechle, Alexey Dobriyan, Guy Martin, Ondrej Zajicek,
Paul Mundt, Arnd Bergmann, Takashi Iwai, Jason Wessel,
Alex Deucher, Tejun Heo, Antonino Daplas, Guennadi Liakhovetski,
Marcin Kościelnicki, David Brown
In-Reply-To: <AANLkTinN2+pNGk1hwrcMhH5qDNZK=Egrw7P6c-cdJTmH@mail.gmail.com>
On Fri, 21 Jan 2011 09:10:06 +0100 Geert Uytterhoeven <geert@linux-m68k.org> wrote:
> include/linux/mutex.h:
>
> /*
> * NOTE: mutex_trylock() follows the spin_trylock() convention,
> * not the down_trylock() convention!
> *
> * Returns 1 if the mutex has been acquired successfully, and 0 on contention.
> */
> extern int mutex_trylock(struct mutex *lock);
>
> So that's why the return value was inverted (when treating it as a boolean).
> I can understand that.
>
> However:
>
> +/**
> + * console_trylock - try to lock the console system for exclusive use.
> + *
> + * Tried to acquire a lock which guarantees that the caller has
> + * exclusive access to the console system and the console_drivers list.
> + *
> + * returns -1 on success, and 0 on failure to acquire the lock.
> + */
> +int console_trylock(void)
>
> So this one returns -1 on success, not 1? Why?
Yup. All callers just test for non-zero, so...
--- a/kernel/printk.c~change-acquire-release_console_sem-to-console_lock-unlock-fix-2
+++ a/kernel/printk.c
@@ -1058,7 +1058,7 @@ EXPORT_SYMBOL(console_lock);
* Tried to acquire a lock which guarantees that the caller has
* exclusive access to the console system and the console_drivers list.
*
- * returns -1 on success, and 0 on failure to acquire the lock.
+ * returns 1 on success, and 0 on failure to acquire the lock.
*/
int console_trylock(void)
{
@@ -1070,7 +1070,7 @@ int console_trylock(void)
}
console_locked = 1;
console_may_schedule = 0;
- return -1;
+ return 1;
}
EXPORT_SYMBOL(console_trylock);
_
^ permalink raw reply
* Re: [PATCH] change acquire/release_console_sem() to console_lock/unlock()
From: Geert Uytterhoeven @ 2011-01-21 8:10 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-fbdev, Greg KH, Lars-Peter Clausen, James Hogan,
David Airlie, Daniel Vetter, linux-omap, Jesse Barnes,
James E.J. Bottomley, David S. Miller, Paul Mackerras,
Liam Girdwood, Kyle McMartin, Jiri Slaby, Thomas Gleixner,
Caglar Akyuz, devel, Alberto Panizzo, Phil Edworthy, xen-devel,
Russell King, Kuninori Morimoto, Wu Zhangjin,
Florian Tobias Schandinat, Lionel Debroux, Helge Deller,
Kay Sievers, James Morris, Kevin Hilman, Tony Lindgren,
Ben Skeggs, Andres Salomon, Julia Lawall, Dave Airlie, Kees Cook,
Francisco Jerez, Abhijeet Dharmapurikar, Marcin Slusarz,
cbe-oss-dev, linuxppc-dev, Ondrej Zary, Denys Vlasenko,
Konrad Rzeszutek Wilk, linux-kernel, Namhyung Kim, Rusty Russell,
Werner Fink, linux-geode, torbenh, Jean Delvare, Magnus Damm,
Jeremy Fitzhardinge, dri-devel, Daniel Mack, Nicolas Pitre,
Dan Williams, virtualization, Ingo Molnar, linux-arm-kernel,
Thomas Gleixner, Daniel Walker, Linus Walleij, linux-parisc,
Geoff Levand, Jiri Kosina, Mark Brown, Jerome Glisse,
Ralf Baechle, Alexey Dobriyan, Guy Martin, Ondrej Zajicek,
Paul Mundt, Arnd Bergmann, Takashi Iwai, Jason Wessel,
Alex Deucher, Tejun Heo, Antonino Daplas, Guennadi Liakhovetski,
Marcin Kościelnicki, David Brown
In-Reply-To: <20110120123507.ac89c034.akpm@linux-foundation.org>
On Thu, Jan 20, 2011 at 21:35, Andrew Morton <akpm@linux-foundation.org> wr=
ote:
> On Thu, 20 Jan 2011 17:55:02 +0100
> torbenh <torbenh@gmx.de> wrote:
>
>> On Thu, Jan 20, 2011 at 08:34:48AM -0800, Greg KH wrote:
>> > On Thu, Jan 20, 2011 at 04:58:13PM +0100, Torben Hohn wrote:
>> > > the -rt patches change the console_semaphore to console_mutex.
>> > > so a quite large chunk of the patches changes all
>> > > acquire/release_console_sem() to acquire/release_console_mutex()
>> >
>> > Why not just change the functionality of the existing function to be a
>> > mutex in the rt patches, instead of having to rename it everywhere?
>>
>> i hope that Thomas already did this in his upcoming -rt series.
>>
>> >
>> > > this commit makes things use more neutral function names
>> > > which dont make implications about the underlying lock.
>> > >
>> > > the only real change is the return value of console_trylock
>> > > which is inverted from try_acquire_console_sem()
>> > >
>> > > Signed-off-by: Torben Hohn <torbenh@gmx.de>
>> > > CC: Thomas Gleixner <tglx@tglx.de>
>> >
>> > I don't mind this rename, but is it really going to help anything out?
>> > What's the odds of the -rt portion of this patch ever making it to
>> > mainline?
>>
>> the -rt portion only changes the semaphore to a mutex.
>> since the console_sem is used with mutex semantics, i dont see any
>> reason, not to merge that portion too.
>>
>> i am just trying to shrink the -rt patch to make it more maintanable :)
>>
>
> Yeah, I think it's a better name and if we can indeed switch that
> semaphore to a mutex then that's a good thing to do.
include/linux/mutex.h:
/*
* NOTE: mutex_trylock() follows the spin_trylock() convention,
* not the down_trylock() convention!
*
* Returns 1 if the mutex has been acquired successfully, and 0 on contenti=
on.
*/
extern int mutex_trylock(struct mutex *lock);
So that's why the return value was inverted (when treating it as a boolean)=
.
I can understand that.
However:
+/**
+ * console_trylock - try to lock the console system for exclusive use.
+ *
+ * Tried to acquire a lock which guarantees that the caller has
+ * exclusive access to the console system and the console_drivers list.
+ *
+ * returns -1 on success, and 0 on failure to acquire the lock.
+ */
+int console_trylock(void)
So this one returns -1 on success, not 1? Why?
Gr{oetje,eeting}s,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k=
.org
In personal conversations with technical people, I call myself a hacker. Bu=
t
when I'm talking to journalists I just say "programmer" or something like t=
hat.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0=C2=A0 -- Linus Torvalds
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox