| Submitter | Eric Miao |
|---|---|
| Date | May 21, 2011, 5:17 a.m. |
| Message ID | <BANLkTin8tX_kfG_R6To+ktNbOW+B93LiqQ@mail.gmail.com> |
| Download | mbox |
| Permalink | /patch/96682/ |
| State | New |
| Headers | show |
Pull-request
git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git develComments
I've just spotted this:
+asmlinkage void __exception_irq_entry icip_handle_irq(struct pt_regs *regs)
+{
+ uint32_t icip, icmr, mask;
+
+ do {
+ icip = __raw_readl(IRQ_BASE + ICIP);
+ icmr = __raw_readl(IRQ_BASE + ICMR);
+ mask = icip & icmr;
+
+ if (mask == 0)
+ break;
+
+ asm_do_IRQ(fls(mask) - 1, regs);
+ } while (1);
+}
This is bad news. A function marked as __exception is expected to be
called from the assembly code. The above is fine, but it then goes on
to call asm_do_IRQ() which is also marked __exception.
This means the unwinder will attempt to dump the saved pt_regs register
state for both asm_do_IRQ() and icip_handle_irq(), resulting in one of
them being garbage.
So I think this needs some thought.
Second point - can't the USB changes go via the USB people? Have USB
people seen the patch?
On Wed, May 25, 2011 at 7:19 AM, Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > I've just spotted this: > > +asmlinkage void __exception_irq_entry icip_handle_irq(struct pt_regs *regs) > +{ > + uint32_t icip, icmr, mask; > + > + do { > + icip = __raw_readl(IRQ_BASE + ICIP); > + icmr = __raw_readl(IRQ_BASE + ICMR); > + mask = icip & icmr; > + > + if (mask == 0) > + break; > + > + asm_do_IRQ(fls(mask) - 1, regs); > + } while (1); > +} > > This is bad news. A function marked as __exception is expected to be > called from the assembly code. The above is fine, but it then goes on > to call asm_do_IRQ() which is also marked __exception. > > This means the unwinder will attempt to dump the saved pt_regs register > state for both asm_do_IRQ() and icip_handle_irq(), resulting in one of > them being garbage. > > So I think this needs some thought. Indeed. Do you have any suggestion? Or maybe we can merge this first, and get it fixed later. There is pxa955 irq handling code waiting for this feature though. > > Second point - can't the USB changes go via the USB people? Have USB > people seen the patch? > I asked for Ack but actually no one cared. One change affects only the Lubbock boards, which is fine to go from my POV. The other though, indeed made a bit changes to pxa25x_udc.c.
The following changes since commit 693d92a1bbc9e42681c42ed190bd42b636ca876f: Linux 2.6.39-rc7 (2011-05-09 19:33:54 -0700) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git devel Dmitry Eremin-Solenikov (6): ARM: pxa/balloon3: drop udc_is_connected ARM: pxa/mioa701: drop udc_is_connected ARM: pxa/stargate2: drop udc_is_connected ARM: pxa25x_udc: separate lubbock handling to lubbock-usb transceiver ARM: pxa/lubbock: switch to using lubbock_usb_xceiv transceiver ARM: pxa: drop handling of udc_is_connected Eric Miao (7): ARM: pxa/saarb: make use of pxa3xx_map_io() 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 (1): ARM: pxa: add clk_set_rate() Igor Grinberg (4): ARM: pxa/cm-x300: fix V3020 RTC functionality ARM: pxa/cm-x300: GPIO cleanup ARM: pxa/cm-x300: minor style cleanup ARM: pxa/cm-x300: update cm_x300_defconfig arch/arm/Kconfig | 2 + arch/arm/configs/cm_x300_defconfig | 18 +-- arch/arm/include/asm/mach/udc_pxa2xx.h | 1 - arch/arm/mach-mmp/clock.c | 15 +++ arch/arm/mach-mmp/clock.h | 1 + arch/arm/mach-pxa/balloon3.c | 7 +- 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 | 59 +++++----- 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 | 18 +-- arch/arm/mach-pxa/magician.c | 1 + arch/arm/mach-pxa/mainstone.c | 1 + arch/arm/mach-pxa/mioa701.c | 12 +- 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 | 3 +- arch/arm/mach-pxa/spitz.c | 3 + arch/arm/mach-pxa/stargate2.c | 8 +- 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 | 1 + arch/arm/mach-pxa/zeus.c | 4 +- arch/arm/mach-pxa/zylonite.c | 3 +- drivers/usb/gadget/pxa25x_udc.c | 87 ++------------ drivers/usb/otg/Kconfig | 8 ++ drivers/usb/otg/Makefile | 1 + drivers/usb/otg/lubbock-usb.c | 178 ++++++++++++++++++++++++++++ 72 files changed, 435 insertions(+), 228 deletions(-) create mode 100644 arch/arm/mach-pxa/include/mach/pxa3xx.h delete mode 100644 arch/arm/mach-pxa/include/mach/regs-intc.h create mode 100644 drivers/usb/otg/lubbock-usb.c