* [GIT PULL] pxa: features for next
@ 2011-07-11 7:27 Eric Miao
2011-07-11 7:41 ` Russell King - ARM Linux
2011-07-11 21:19 ` Arnd Bergmann
0 siblings, 2 replies; 14+ messages in thread
From: Eric Miao @ 2011-07-11 7:27 UTC (permalink / raw)
To: linux-arm-kernel
The following changes since commit fe0d42203cb5616eeff68b14576a0f7e2dd56625:
Linux 3.0-rc6 (2011-07-04 15:56:24 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git devel
Eric Miao (6):
ARM: pxa: enable AUTO_ZRELADDR
ARM: pxa: add common header file for pxa3xx
ARM: pxa: avoid accessing interrupt registers directly
ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
ARM: pxa: move declarations from generic.h to <soc>.h
ARM: pxa: enable MULTI_IRQ_HANDLER for all boards
Haojian Zhuang (2):
ARM: pxa: add clk_set_rate()
ARM: mmp/dkb: enable max7312 gpio expander
Tanmay Upadhyay (3):
ARM: pxa168: Add support for UART3
ARM: pxa168: Add support for Ethernet
ARM: pxa168: Add board support for gplugD
Vasily Khoruzhick (1):
ARM: pxa/z2: add poweroff function
arch/arm/Kconfig | 2 +
arch/arm/mach-mmp/Kconfig | 7 +
arch/arm/mach-mmp/Makefile | 1 +
arch/arm/mach-mmp/clock.c | 15 ++
arch/arm/mach-mmp/clock.h | 1 +
arch/arm/mach-mmp/gplugd.c | 189 +++++++++++++++++++++++++++
arch/arm/mach-mmp/include/mach/mfp-gplugd.h | 52 ++++++++
arch/arm/mach-mmp/include/mach/mfp-pxa168.h | 19 +++
arch/arm/mach-mmp/include/mach/pxa168.h | 8 +
arch/arm/mach-mmp/include/mach/regs-apmu.h | 1 +
arch/arm/mach-mmp/pxa168.c | 6 +
arch/arm/mach-mmp/ttc_dkb.c | 31 +++++-
arch/arm/mach-pxa/balloon3.c | 1 +
arch/arm/mach-pxa/capc7117.c | 1 +
arch/arm/mach-pxa/clock.c | 15 ++
arch/arm/mach-pxa/clock.h | 1 +
arch/arm/mach-pxa/cm-x2xx.c | 5 +-
arch/arm/mach-pxa/cm-x300.c | 1 +
arch/arm/mach-pxa/colibri-pxa270.c | 2 +
arch/arm/mach-pxa/colibri-pxa300.c | 1 +
arch/arm/mach-pxa/colibri-pxa320.c | 4 +-
arch/arm/mach-pxa/corgi.c | 3 +
arch/arm/mach-pxa/csb726.c | 4 +-
arch/arm/mach-pxa/em-x270.c | 2 +
arch/arm/mach-pxa/eseries.c | 6 +
arch/arm/mach-pxa/ezx.c | 6 +
arch/arm/mach-pxa/generic.h | 13 --
arch/arm/mach-pxa/gumstix.c | 1 +
arch/arm/mach-pxa/h5000.c | 2 +
arch/arm/mach-pxa/himalaya.c | 4 +-
arch/arm/mach-pxa/hx4700.c | 1 +
arch/arm/mach-pxa/icontrol.c | 1 +
arch/arm/mach-pxa/idp.c | 1 +
arch/arm/mach-pxa/include/mach/irqs.h | 12 ++
arch/arm/mach-pxa/include/mach/pxa25x.h | 9 ++
arch/arm/mach-pxa/include/mach/pxa27x.h | 5 +
arch/arm/mach-pxa/include/mach/pxa300.h | 3 +-
arch/arm/mach-pxa/include/mach/pxa320.h | 3 +-
arch/arm/mach-pxa/include/mach/pxa3xx.h | 14 ++
arch/arm/mach-pxa/include/mach/pxa930.h | 3 +-
arch/arm/mach-pxa/include/mach/regs-intc.h | 30 -----
arch/arm/mach-pxa/irq.c | 36 +++++-
arch/arm/mach-pxa/littleton.c | 1 +
arch/arm/mach-pxa/lpd270.c | 1 +
arch/arm/mach-pxa/lubbock.c | 1 +
arch/arm/mach-pxa/magician.c | 1 +
arch/arm/mach-pxa/mainstone.c | 1 +
arch/arm/mach-pxa/mioa701.c | 1 +
arch/arm/mach-pxa/mp900.c | 1 +
arch/arm/mach-pxa/palmld.c | 1 +
arch/arm/mach-pxa/palmt5.c | 1 +
arch/arm/mach-pxa/palmtc.c | 4 +-
arch/arm/mach-pxa/palmte2.c | 3 +-
arch/arm/mach-pxa/palmtreo.c | 2 +
arch/arm/mach-pxa/palmtx.c | 1 +
arch/arm/mach-pxa/palmz72.c | 1 +
arch/arm/mach-pxa/pcm027.c | 1 +
arch/arm/mach-pxa/poodle.c | 1 +
arch/arm/mach-pxa/pxa3xx.c | 5 +-
arch/arm/mach-pxa/pxa95x.c | 1 -
arch/arm/mach-pxa/raumfeld.c | 8 +-
arch/arm/mach-pxa/saar.c | 1 +
arch/arm/mach-pxa/saarb.c | 1 +
arch/arm/mach-pxa/spitz.c | 3 +
arch/arm/mach-pxa/stargate2.c | 2 +
arch/arm/mach-pxa/tavorevb.c | 1 +
arch/arm/mach-pxa/tavorevb3.c | 1 +
arch/arm/mach-pxa/tosa.c | 1 +
arch/arm/mach-pxa/trizeps4.c | 2 +
arch/arm/mach-pxa/viper.c | 1 +
arch/arm/mach-pxa/vpac270.c | 1 +
arch/arm/mach-pxa/xcep.c | 4 +-
arch/arm/mach-pxa/z2.c | 18 +++
arch/arm/mach-pxa/zeus.c | 4 +-
arch/arm/mach-pxa/zylonite.c | 3 +-
75 files changed, 526 insertions(+), 75 deletions(-)
create mode 100644 arch/arm/mach-mmp/gplugd.c
create mode 100644 arch/arm/mach-mmp/include/mach/mfp-gplugd.h
create mode 100644 arch/arm/mach-pxa/include/mach/pxa3xx.h
delete mode 100644 arch/arm/mach-pxa/include/mach/regs-intc.h
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 7:27 [GIT PULL] pxa: features for next Eric Miao
@ 2011-07-11 7:41 ` Russell King - ARM Linux
2011-07-11 7:44 ` Eric Miao
2011-07-11 21:19 ` Arnd Bergmann
1 sibling, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux @ 2011-07-11 7:41 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
> ARM: pxa: avoid accessing interrupt registers directly
> ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
What happened about the __exception issue with asm_do_IRQ?
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 7:41 ` Russell King - ARM Linux
@ 2011-07-11 7:44 ` Eric Miao
2011-07-11 7:46 ` Russell King - ARM Linux
0 siblings, 1 reply; 14+ messages in thread
From: Eric Miao @ 2011-07-11 7:44 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 3:41 PM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
>> ? ? ? ARM: pxa: avoid accessing interrupt registers directly
>> ? ? ? ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
>
> What happened about the __exception issue with asm_do_IRQ?
>
I just removed the __exception from the C handler.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 7:44 ` Eric Miao
@ 2011-07-11 7:46 ` Russell King - ARM Linux
2011-07-11 7:47 ` Eric Miao
0 siblings, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux @ 2011-07-11 7:46 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 03:44:54PM +0800, Eric Miao wrote:
> On Mon, Jul 11, 2011 at 3:41 PM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
> > On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
> >> ? ? ? ARM: pxa: avoid accessing interrupt registers directly
> >> ? ? ? ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
> >
> > What happened about the __exception issue with asm_do_IRQ?
> >
>
> I just removed the __exception from the C handler.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 7:46 ` Russell King - ARM Linux
@ 2011-07-11 7:47 ` Eric Miao
2011-07-11 7:52 ` Russell King - ARM Linux
0 siblings, 1 reply; 14+ messages in thread
From: Eric Miao @ 2011-07-11 7:47 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 3:46 PM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Mon, Jul 11, 2011 at 03:44:54PM +0800, Eric Miao wrote:
>> On Mon, Jul 11, 2011 at 3:41 PM, Russell King - ARM Linux
>> <linux@arm.linux.org.uk> wrote:
>> > On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
>> >> ? ? ? ARM: pxa: avoid accessing interrupt registers directly
>> >> ? ? ? ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
>> >
>> > What happened about the __exception issue with asm_do_IRQ?
>> >
>>
>> I just removed the __exception from the C handler.
>
> From asm_do_IRQ ?
>
No. From icip_handle_irq() and ichp_handle_irq(). Thought the ability to
unwind asm_do_IRQ() is more important.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 7:47 ` Eric Miao
@ 2011-07-11 7:52 ` Russell King - ARM Linux
2011-07-11 8:31 ` Eric Miao
0 siblings, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux @ 2011-07-11 7:52 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 03:47:27PM +0800, Eric Miao wrote:
> On Mon, Jul 11, 2011 at 3:46 PM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
> > On Mon, Jul 11, 2011 at 03:44:54PM +0800, Eric Miao wrote:
> >> On Mon, Jul 11, 2011 at 3:41 PM, Russell King - ARM Linux
> >> <linux@arm.linux.org.uk> wrote:
> >> > On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
> >> >> ? ? ? ARM: pxa: avoid accessing interrupt registers directly
> >> >> ? ? ? ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
> >> >
> >> > What happened about the __exception issue with asm_do_IRQ?
> >> >
> >>
> >> I just removed the __exception from the C handler.
> >
> > From asm_do_IRQ ?
> >
>
> No. From icip_handle_irq() and ichp_handle_irq(). Thought the ability to
> unwind asm_do_IRQ() is more important.
Which means you didn't understand my objection when I reviewed your patch.
The __exception annotation on a function causes this to happen:
[<c002406c>] (asm_do_IRQ+0x6c/0x8c) from [<c0024b84>] (__irq_svc+0x44/0xcc)
Exception stack(0xc3897c78 to 0xc3897cc0)
7c60: 4022d320 4022e000
7c80: 08000075 00001000 c32273c0 c03ce1c0 c2b49b78 4022d000 c2b420b4 00000001
7ca0: 00000000 c3897cfc 00000000 c3897cc0 c00afc54 c002edd8 00000013 ffffffff
Where that stack dump represents the pt_regs for the exception which
happened. Any function found in while unwinding will cause this to
be printed.
If you insert a C function between the IRQ assembly and asm_do_IRQ, the
dump you get from asm_do_IRQ will be the stack for your function, not
the pt_regs. That makes the feature useless.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 7:52 ` Russell King - ARM Linux
@ 2011-07-11 8:31 ` Eric Miao
2011-07-11 8:40 ` Russell King - ARM Linux
0 siblings, 1 reply; 14+ messages in thread
From: Eric Miao @ 2011-07-11 8:31 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 3:52 PM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Mon, Jul 11, 2011 at 03:47:27PM +0800, Eric Miao wrote:
>> On Mon, Jul 11, 2011 at 3:46 PM, Russell King - ARM Linux
>> <linux@arm.linux.org.uk> wrote:
>> > On Mon, Jul 11, 2011 at 03:44:54PM +0800, Eric Miao wrote:
>> >> On Mon, Jul 11, 2011 at 3:41 PM, Russell King - ARM Linux
>> >> <linux@arm.linux.org.uk> wrote:
>> >> > On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
>> >> >> ? ? ? ARM: pxa: avoid accessing interrupt registers directly
>> >> >> ? ? ? ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
>> >> >
>> >> > What happened about the __exception issue with asm_do_IRQ?
>> >> >
>> >>
>> >> I just removed the __exception from the C handler.
>> >
>> > From asm_do_IRQ ?
>> >
>>
>> No. From icip_handle_irq() and ichp_handle_irq(). Thought the ability to
>> unwind asm_do_IRQ() is more important.
>
> Which means you didn't understand my objection when I reviewed your patch.
>
> The __exception annotation on a function causes this to happen:
>
> [<c002406c>] (asm_do_IRQ+0x6c/0x8c) from [<c0024b84>] (__irq_svc+0x44/0xcc)
> Exception stack(0xc3897c78 to 0xc3897cc0)
> 7c60: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4022d320 4022e000
> 7c80: 08000075 00001000 c32273c0 c03ce1c0 c2b49b78 4022d000 c2b420b4 00000001
> 7ca0: 00000000 c3897cfc 00000000 c3897cc0 c00afc54 c002edd8 00000013 ffffffff
>
> Where that stack dump represents the pt_regs for the exception which
> happened. ?Any function found in while unwinding will cause this to
> be printed.
>
> If you insert a C function between the IRQ assembly and asm_do_IRQ, the
> dump you get from asm_do_IRQ will be the stack for your function, not
> the pt_regs. ?That makes the feature useless.
>
Sorry for my stupidity, but I think I still don't get it quite correctly.
When both functions are prefixed with __exception_irq_entry, if
unwind works correctly, both stacks will be dumped, how would
the asm_do_IRQ will be stack for the function inserted?
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 8:31 ` Eric Miao
@ 2011-07-11 8:40 ` Russell King - ARM Linux
2011-07-11 10:07 ` Eric Miao
0 siblings, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux @ 2011-07-11 8:40 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 04:31:04PM +0800, Eric Miao wrote:
> On Mon, Jul 11, 2011 at 3:52 PM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
> > On Mon, Jul 11, 2011 at 03:47:27PM +0800, Eric Miao wrote:
> >> On Mon, Jul 11, 2011 at 3:46 PM, Russell King - ARM Linux
> >> <linux@arm.linux.org.uk> wrote:
> >> > On Mon, Jul 11, 2011 at 03:44:54PM +0800, Eric Miao wrote:
> >> >> On Mon, Jul 11, 2011 at 3:41 PM, Russell King - ARM Linux
> >> >> <linux@arm.linux.org.uk> wrote:
> >> >> > On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
> >> >> >> ? ? ? ARM: pxa: avoid accessing interrupt registers directly
> >> >> >> ? ? ? ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
> >> >> >
> >> >> > What happened about the __exception issue with asm_do_IRQ?
> >> >> >
> >> >>
> >> >> I just removed the __exception from the C handler.
> >> >
> >> > From asm_do_IRQ ?
> >> >
> >>
> >> No. From icip_handle_irq() and ichp_handle_irq(). Thought the ability to
> >> unwind asm_do_IRQ() is more important.
> >
> > Which means you didn't understand my objection when I reviewed your patch.
> >
> > The __exception annotation on a function causes this to happen:
> >
> > [<c002406c>] (asm_do_IRQ+0x6c/0x8c) from [<c0024b84>] (__irq_svc+0x44/0xcc)
> > Exception stack(0xc3897c78 to 0xc3897cc0)
> > 7c60: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4022d320 4022e000
> > 7c80: 08000075 00001000 c32273c0 c03ce1c0 c2b49b78 4022d000 c2b420b4 00000001
> > 7ca0: 00000000 c3897cfc 00000000 c3897cc0 c00afc54 c002edd8 00000013 ffffffff
> >
> > Where that stack dump represents the pt_regs for the exception which
> > happened. ?Any function found in while unwinding will cause this to
> > be printed.
> >
> > If you insert a C function between the IRQ assembly and asm_do_IRQ, the
> > dump you get from asm_do_IRQ will be the stack for your function, not
> > the pt_regs. ?That makes the feature useless.
> >
>
> Sorry for my stupidity, but I think I still don't get it quite correctly.
> When both functions are prefixed with __exception_irq_entry, if
> unwind works correctly, both stacks will be dumped, how would
> the asm_do_IRQ will be stack for the function inserted?
When __irq_svc - or any of the other exception handling assembly code -
calls the C code, the stack pointer will be pointing at the pt_regs
structure.
All the entry points into C code from the exception handling code are
marked with __exception or __exception_irq_enter to indicate that they
are one of the functions which has pt_regs above them.
Normally, when you've entered asm_do_IRQ() you will have this stack
layout (higher address towards top):
pt_regs
asm_do_IRQ frame
If you insert a C function between the exception assembly code and
asm_do_IRQ, you end up with this stack layout instead:
pt_regs
your function frame
asm_do_IRQ frame
This means when we unwind, we'll get to asm_do_IRQ, and rather than
dumping out the pt_regs, we'll dump out your functions stack frame
instead, because that's what is above the asm_do_IRQ stack frame
rather than the expected pt_regs structure.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 8:40 ` Russell King - ARM Linux
@ 2011-07-11 10:07 ` Eric Miao
2011-07-11 10:17 ` Eric Miao
2011-07-11 10:22 ` Russell King - ARM Linux
0 siblings, 2 replies; 14+ messages in thread
From: Eric Miao @ 2011-07-11 10:07 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 4:40 PM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Mon, Jul 11, 2011 at 04:31:04PM +0800, Eric Miao wrote:
>> On Mon, Jul 11, 2011 at 3:52 PM, Russell King - ARM Linux
>> <linux@arm.linux.org.uk> wrote:
>> > On Mon, Jul 11, 2011 at 03:47:27PM +0800, Eric Miao wrote:
>> >> On Mon, Jul 11, 2011 at 3:46 PM, Russell King - ARM Linux
>> >> <linux@arm.linux.org.uk> wrote:
>> >> > On Mon, Jul 11, 2011 at 03:44:54PM +0800, Eric Miao wrote:
>> >> >> On Mon, Jul 11, 2011 at 3:41 PM, Russell King - ARM Linux
>> >> >> <linux@arm.linux.org.uk> wrote:
>> >> >> > On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
>> >> >> >> ? ? ? ARM: pxa: avoid accessing interrupt registers directly
>> >> >> >> ? ? ? ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
>> >> >> >
>> >> >> > What happened about the __exception issue with asm_do_IRQ?
>> >> >> >
>> >> >>
>> >> >> I just removed the __exception from the C handler.
>> >> >
>> >> > From asm_do_IRQ ?
>> >> >
>> >>
>> >> No. From icip_handle_irq() and ichp_handle_irq(). Thought the ability to
>> >> unwind asm_do_IRQ() is more important.
>> >
>> > Which means you didn't understand my objection when I reviewed your patch.
>> >
>> > The __exception annotation on a function causes this to happen:
>> >
>> > [<c002406c>] (asm_do_IRQ+0x6c/0x8c) from [<c0024b84>] (__irq_svc+0x44/0xcc)
>> > Exception stack(0xc3897c78 to 0xc3897cc0)
>> > 7c60: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4022d320 4022e000
>> > 7c80: 08000075 00001000 c32273c0 c03ce1c0 c2b49b78 4022d000 c2b420b4 00000001
>> > 7ca0: 00000000 c3897cfc 00000000 c3897cc0 c00afc54 c002edd8 00000013 ffffffff
>> >
>> > Where that stack dump represents the pt_regs for the exception which
>> > happened. ?Any function found in while unwinding will cause this to
>> > be printed.
>> >
>> > If you insert a C function between the IRQ assembly and asm_do_IRQ, the
>> > dump you get from asm_do_IRQ will be the stack for your function, not
>> > the pt_regs. ?That makes the feature useless.
>> >
>>
>> Sorry for my stupidity, but I think I still don't get it quite correctly.
>> When both functions are prefixed with __exception_irq_entry, if
>> unwind works correctly, both stacks will be dumped, how would
>> the asm_do_IRQ will be stack for the function inserted?
>
> When __irq_svc - or any of the other exception handling assembly code -
> calls the C code, the stack pointer will be pointing at the pt_regs
> structure.
>
> All the entry points into C code from the exception handling code are
> marked with __exception or __exception_irq_enter to indicate that they
> are one of the functions which has pt_regs above them.
>
> Normally, when you've entered asm_do_IRQ() you will have this stack
> layout (higher address towards top):
>
> ? ? ? ?pt_regs
> ? ? ? ?asm_do_IRQ frame
>
> If you insert a C function between the exception assembly code and
> asm_do_IRQ, you end up with this stack layout instead:
>
> ? ? ? ?pt_regs
> ? ? ? ?your function frame
> ? ? ? ?asm_do_IRQ frame
>
> This means when we unwind, we'll get to asm_do_IRQ, and rather than
> dumping out the pt_regs, we'll dump out your functions stack frame
> instead, because that's what is above the asm_do_IRQ stack frame
> rather than the expected pt_regs structure.
>
Ah now I see the problem. So it's actually in dump_backtrace_entry(),
where the if (in_exception_text(where)) dump_mem(...) has this
assumption.
One way to solve this from my humble opinion is to mandate
__exception for the C function (stack version) of handle_arch_irq,
and when MULTI_IRQ defined, remove __exception from asm_do_IRQ(),
so the assumption in dump_backtrace_entry() still holds true.
Or do we have a gcc extension to tell the compiler a simple function
doesn't need to use the stack?
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 10:07 ` Eric Miao
@ 2011-07-11 10:17 ` Eric Miao
2011-07-11 10:22 ` Russell King - ARM Linux
1 sibling, 0 replies; 14+ messages in thread
From: Eric Miao @ 2011-07-11 10:17 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 6:07 PM, Eric Miao <eric.y.miao@gmail.com> wrote:
> On Mon, Jul 11, 2011 at 4:40 PM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
>> On Mon, Jul 11, 2011 at 04:31:04PM +0800, Eric Miao wrote:
>>> On Mon, Jul 11, 2011 at 3:52 PM, Russell King - ARM Linux
>>> <linux@arm.linux.org.uk> wrote:
>>> > On Mon, Jul 11, 2011 at 03:47:27PM +0800, Eric Miao wrote:
>>> >> On Mon, Jul 11, 2011 at 3:46 PM, Russell King - ARM Linux
>>> >> <linux@arm.linux.org.uk> wrote:
>>> >> > On Mon, Jul 11, 2011 at 03:44:54PM +0800, Eric Miao wrote:
>>> >> >> On Mon, Jul 11, 2011 at 3:41 PM, Russell King - ARM Linux
>>> >> >> <linux@arm.linux.org.uk> wrote:
>>> >> >> > On Mon, Jul 11, 2011 at 03:27:15PM +0800, Eric Miao wrote:
>>> >> >> >> ? ? ? ARM: pxa: avoid accessing interrupt registers directly
>>> >> >> >> ? ? ? ARM: pxa: introduce {icip,ichp}_handle_irq() to prepare MULTI_IRQ_HANDLER
>>> >> >> >
>>> >> >> > What happened about the __exception issue with asm_do_IRQ?
>>> >> >> >
>>> >> >>
>>> >> >> I just removed the __exception from the C handler.
>>> >> >
>>> >> > From asm_do_IRQ ?
>>> >> >
>>> >>
>>> >> No. From icip_handle_irq() and ichp_handle_irq(). Thought the ability to
>>> >> unwind asm_do_IRQ() is more important.
>>> >
>>> > Which means you didn't understand my objection when I reviewed your patch.
>>> >
>>> > The __exception annotation on a function causes this to happen:
>>> >
>>> > [<c002406c>] (asm_do_IRQ+0x6c/0x8c) from [<c0024b84>] (__irq_svc+0x44/0xcc)
>>> > Exception stack(0xc3897c78 to 0xc3897cc0)
>>> > 7c60: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4022d320 4022e000
>>> > 7c80: 08000075 00001000 c32273c0 c03ce1c0 c2b49b78 4022d000 c2b420b4 00000001
>>> > 7ca0: 00000000 c3897cfc 00000000 c3897cc0 c00afc54 c002edd8 00000013 ffffffff
>>> >
>>> > Where that stack dump represents the pt_regs for the exception which
>>> > happened. ?Any function found in while unwinding will cause this to
>>> > be printed.
>>> >
>>> > If you insert a C function between the IRQ assembly and asm_do_IRQ, the
>>> > dump you get from asm_do_IRQ will be the stack for your function, not
>>> > the pt_regs. ?That makes the feature useless.
>>> >
>>>
>>> Sorry for my stupidity, but I think I still don't get it quite correctly.
>>> When both functions are prefixed with __exception_irq_entry, if
>>> unwind works correctly, both stacks will be dumped, how would
>>> the asm_do_IRQ will be stack for the function inserted?
>>
>> When __irq_svc - or any of the other exception handling assembly code -
>> calls the C code, the stack pointer will be pointing at the pt_regs
>> structure.
>>
>> All the entry points into C code from the exception handling code are
>> marked with __exception or __exception_irq_enter to indicate that they
>> are one of the functions which has pt_regs above them.
>>
>> Normally, when you've entered asm_do_IRQ() you will have this stack
>> layout (higher address towards top):
>>
>> ? ? ? ?pt_regs
>> ? ? ? ?asm_do_IRQ frame
>>
>> If you insert a C function between the exception assembly code and
>> asm_do_IRQ, you end up with this stack layout instead:
>>
>> ? ? ? ?pt_regs
>> ? ? ? ?your function frame
>> ? ? ? ?asm_do_IRQ frame
>>
>> This means when we unwind, we'll get to asm_do_IRQ, and rather than
>> dumping out the pt_regs, we'll dump out your functions stack frame
>> instead, because that's what is above the asm_do_IRQ stack frame
>> rather than the expected pt_regs structure.
>>
>
> Ah now I see the problem. So it's actually in dump_backtrace_entry(),
> where the if (in_exception_text(where)) dump_mem(...) has this
> assumption.
>
> One way to solve this from my humble opinion is to mandate
> __exception for the C function (stack version) of handle_arch_irq,
> and when MULTI_IRQ defined, remove __exception from asm_do_IRQ(),
> so the assumption in dump_backtrace_entry() still holds true.
>
> Or do we have a gcc extension to tell the compiler a simple function
> doesn't need to use the stack?
>
Hi Russell,
How about something like below, it's not clever at all though:
diff --git a/arch/arm/include/asm/mach/irq.h b/arch/arm/include/asm/mach/irq.h
index febe495..09a4856 100644
--- a/arch/arm/include/asm/mach/irq.h
+++ b/arch/arm/include/asm/mach/irq.h
@@ -25,6 +25,16 @@ extern void (*handle_arch_irq)(struct pt_regs *);
#endif
/*
+ * do not dump exception stack when MULTI_IRQ_HANDLER is defined, as
+ * the stack will be dumped for function (*handle_arch_irq)().
+ */
+#ifdef CONFIG_MULTI_IRQ_HANDLER
+#define __multi_irq_entry
+#else
+#define __multi_irq_entry __exception_irq_entry
+#endif
+
+/*
* This is for easy migration, but should be changed in the source
*/
#define do_bad_IRQ(irq,desc) \
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index 83bbad0..7d32fd5 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -71,7 +71,7 @@ int arch_show_interrupts(struct seq_file *p, int prec)
* come via this function. Instead, they should provide their
* own 'handler'
*/
-asmlinkage void __exception_irq_entry
+asmlinkage void __multi_irq_entry
asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
{
struct pt_regs *old_regs = set_irq_regs(regs);
diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c
index 2d079f4..d9cab3b 100644
--- a/arch/arm/mach-pxa/irq.c
+++ b/arch/arm/mach-pxa/irq.c
@@ -129,7 +129,7 @@ static struct irq_chip pxa_low_gpio_chip = {
.irq_set_type = pxa_set_low_gpio_type,
};
-asmlinkage void icip_handle_irq(struct pt_regs *regs)
+asmlinkage void __exception_irq_entry icip_handle_irq(struct pt_regs *regs)
{
uint32_t icip, icmr, mask;
@@ -145,7 +145,7 @@ asmlinkage void icip_handle_irq(struct pt_regs *regs)
} while (1);
}
-asmlinkage void ichp_handle_irq(struct pt_regs *regs)
+asmlinkage void __exception_irq_entry ichp_handle_irq(struct pt_regs *regs)
{
uint32_t ichp;
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 10:07 ` Eric Miao
2011-07-11 10:17 ` Eric Miao
@ 2011-07-11 10:22 ` Russell King - ARM Linux
1 sibling, 0 replies; 14+ messages in thread
From: Russell King - ARM Linux @ 2011-07-11 10:22 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jul 11, 2011 at 06:07:56PM +0800, Eric Miao wrote:
> Ah now I see the problem. So it's actually in dump_backtrace_entry(),
> where the if (in_exception_text(where)) dump_mem(...) has this
> assumption.
>
> One way to solve this from my humble opinion is to mandate
> __exception for the C function (stack version) of handle_arch_irq,
> and when MULTI_IRQ defined, remove __exception from asm_do_IRQ(),
> so the assumption in dump_backtrace_entry() still holds true.
>
> Or do we have a gcc extension to tell the compiler a simple function
> doesn't need to use the stack?
Or we could rename asm_do_IRQ() to handle_arch_irq() without the
__exception tag, and recreate asm_do_IRQ() with the tag, which just calls
handle_arch_irq().
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 7:27 [GIT PULL] pxa: features for next Eric Miao
2011-07-11 7:41 ` Russell King - ARM Linux
@ 2011-07-11 21:19 ` Arnd Bergmann
2011-07-12 12:03 ` Eric Miao
1 sibling, 1 reply; 14+ messages in thread
From: Arnd Bergmann @ 2011-07-11 21:19 UTC (permalink / raw)
To: linux-arm-kernel
On Monday 11 July 2011, Eric Miao wrote:
> The following changes since commit fe0d42203cb5616eeff68b14576a0f7e2dd56625:
>
> Linux 3.0-rc6 (2011-07-04 15:56:24 -0700)
>
> are available in the git repository at:
> git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git devel
I'll wait for the next version on this one, until you fixed the problem
pointed out by Russell, ok?
Arnd
^ permalink raw reply [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-11 21:19 ` Arnd Bergmann
@ 2011-07-12 12:03 ` Eric Miao
2011-07-12 15:23 ` Arnd Bergmann
0 siblings, 1 reply; 14+ messages in thread
From: Eric Miao @ 2011-07-12 12:03 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, Jul 12, 2011 at 5:19 AM, Arnd Bergmann <arnd.bergmann@linaro.org> wrote:
> On Monday 11 July 2011, Eric Miao wrote:
>> The following changes since commit fe0d42203cb5616eeff68b14576a0f7e2dd56625:
>>
>> ? Linux 3.0-rc6 (2011-07-04 15:56:24 -0700)
>>
>> are available in the git repository at:
>> ? git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git devel
>
> I'll wait for the next version on this one, until you fixed the problem
> pointed out by Russell, ok?
>
Hi Arnd,
I'm OK with that.
And Russell kindly provided a better fix, and I've merged and rebased
the whole series. Please consider re-pull (just pushed, sync to git.k.o
is in still in progress I guess).
I posted the patch as below, with the name changed to handle_IRQ for
non-exception stack dump use (as the original handle_irq_event conflicts
with the one in kernel/irq/).
commit a4841e39f7ca85ee2a40803ebac6221c6d8822c0
Author: Russell King - ARM Linux <linux@arm.linux.org.uk>
Date: Mon Jul 11 22:25:43 2011 +0100
ARM: introduce handle_IRQ() not to dump exception stack
On Mon, Jul 11, 2011 at 3:52 PM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
...
> The __exception annotation on a function causes this to happen:
>
> [<c002406c>] (asm_do_IRQ+0x6c/0x8c) from [<c0024b84>]
> (__irq_svc+0x44/0xcc)
> Exception stack(0xc3897c78 to 0xc3897cc0)
> 7c60:
4022d320 4022e000
> 7c80: 08000075 00001000 c32273c0 c03ce1c0 c2b49b78 4022d000
c2b420b4 00000001
> 7ca0: 00000000 c3897cfc 00000000 c3897cc0 c00afc54 c002edd8
00000013 ffffffff
>
> Where that stack dump represents the pt_regs for the exception which
> happened. Any function found in while unwinding will cause this to
> be printed.
>
> If you insert a C function between the IRQ assembly and asm_do_IRQ,
> the
> dump you get from asm_do_IRQ will be the stack for your function,
> not
> the pt_regs. That makes the feature useless.
>
When __irq_svc - or any of the other exception handling assembly code -
calls the C code, the stack pointer will be pointing at the pt_regs
structure.
All the entry points into C code from the exception handling code are
marked with __exception or __exception_irq_enter to indicate that they
are one of the functions which has pt_regs above them.
Normally, when you've entered asm_do_IRQ() you will have this stack
layout (higher address towards top):
pt_regs
asm_do_IRQ frame
If you insert a C function between the exception assembly code and
asm_do_IRQ, you end up with this stack layout instead:
pt_regs
your function frame
asm_do_IRQ frame
This means when we unwind, we'll get to asm_do_IRQ, and rather than
dumping out the pt_regs, we'll dump out your functions stack frame
instead, because that's what is above the asm_do_IRQ stack frame
rather than the expected pt_regs structure.
The fix is to introduce handle_IRQ() for no exception stack dump, so
it can be called with MULTI_IRQ_HANDLER is selected and a C function
is between the assembly code and the actual IRQ handling code.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
diff --git a/arch/arm/include/asm/irq.h b/arch/arm/include/asm/irq.h
index 2721a58..5a526af 100644
--- a/arch/arm/include/asm/irq.h
+++ b/arch/arm/include/asm/irq.h
@@ -23,6 +23,7 @@ struct pt_regs;
extern void migrate_irqs(void);
extern void asm_do_IRQ(unsigned int, struct pt_regs *);
+void handle_IRQ(unsigned int, struct pt_regs *);
void init_IRQ(void);
#endif
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index 83bbad0..dbc1f41 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -67,12 +67,12 @@ int arch_show_interrupts(struct seq_file *p, int prec)
}
/*
- * do_IRQ handles all hardware IRQ's. Decoded IRQs should not
- * come via this function. Instead, they should provide their
- * own 'handler'
+ * handle_IRQ handles all hardware IRQ's. Decoded IRQs should
+ * not come via this function. Instead, they should provide their
+ * own 'handler'. Used by platform code implementing C-based 1st
+ * level decoding.
*/
-asmlinkage void __exception_irq_entry
-asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
+void handle_IRQ(unsigned int irq, struct pt_regs *regs)
{
struct pt_regs *old_regs = set_irq_regs(regs);
@@ -97,6 +97,15 @@ asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
set_irq_regs(old_regs);
}
+/*
+ * asm_do_IRQ is the interface to be used from assembly code.
+ */
+asmlinkage void __exception_irq_entry
+asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
+{
+ handle_IRQ(irq, regs);
+}
+
void set_irq_flags(unsigned int irq, unsigned int iflags)
{
unsigned long clr = 0, set = IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN;
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [GIT PULL] pxa: features for next
2011-07-12 12:03 ` Eric Miao
@ 2011-07-12 15:23 ` Arnd Bergmann
0 siblings, 0 replies; 14+ messages in thread
From: Arnd Bergmann @ 2011-07-12 15:23 UTC (permalink / raw)
To: linux-arm-kernel
On Tuesday 12 July 2011, Eric Miao wrote:
> And Russell kindly provided a better fix, and I've merged and rebased
> the whole series. Please consider re-pull (just pushed, sync to git.k.o
> is in still in progress I guess).
>
> I posted the patch as below, with the name changed to handle_IRQ for
> non-exception stack dump use (as the original handle_irq_event conflicts
> with the one in kernel/irq/).
Ok, pulled. Thanks,
Arnd
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2011-07-12 15:23 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-11 7:27 [GIT PULL] pxa: features for next Eric Miao
2011-07-11 7:41 ` Russell King - ARM Linux
2011-07-11 7:44 ` Eric Miao
2011-07-11 7:46 ` Russell King - ARM Linux
2011-07-11 7:47 ` Eric Miao
2011-07-11 7:52 ` Russell King - ARM Linux
2011-07-11 8:31 ` Eric Miao
2011-07-11 8:40 ` Russell King - ARM Linux
2011-07-11 10:07 ` Eric Miao
2011-07-11 10:17 ` Eric Miao
2011-07-11 10:22 ` Russell King - ARM Linux
2011-07-11 21:19 ` Arnd Bergmann
2011-07-12 12:03 ` Eric Miao
2011-07-12 15:23 ` Arnd Bergmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).