From: shc_work@mail.ru (Alexander Shiyan)
To: linux-arm-kernel@lists.infradead.org
Subject: Re[2]: [PATCH 10/10] ARM: FIQ: Get rid of init_FIQ()
Date: Fri, 23 Nov 2012 10:27:51 +0400 [thread overview]
Message-ID: <1353652071.755665772@f76.mail.ru> (raw)
In-Reply-To: <20121123055328.GA21566@lizard>
> On Fri, Nov 23, 2012 at 07:40:30AM +0400, Alexander Shiyan wrote:
> [...]
> > > static unsigned long no_fiq_insn;
> > > +static int got_no_fiq_insn;
> > > @@ -78,11 +79,14 @@ void show_fiq_list(struct seq_file *p, int prec)
> > >
> > > void set_fiq_handler(void *start, unsigned int length)
> > > {
> > > -#if defined(CONFIG_CPU_USE_DOMAINS)
> > > - memcpy((void *)0xffff001c, start, length);
> > > -#else
> > > - memcpy(vectors_page + 0x1c, start, length);
> > > + unsigned long *addr = (void *)0xffff001c;
> > > +
> > > +#ifndef CONFIG_CPU_USE_DOMAINS
> > > + addr = vectors_page + 0x1c;
> > > #endif
> > > + if (!cmpxchg(&got_no_fiq_insn, 0, 1))
> > > + no_fiq_insn = *addr;
> > > + memcpy(addr, start, length);
> > > flush_icache_range(0xffff001c, 0xffff001c + length);
> > > if (!vectors_high())
> > > flush_icache_range(0x1c, 0x1c + length);
> > > @@ -126,8 +130,3 @@ EXPORT_SYMBOL(__set_fiq_regs); /* defined in fiqasm.S */
> > > -
> > > -void __init init_FIQ(void)
> > > -{
> > > - no_fiq_insn = *(unsigned long *)0xffff001c;
> >
> > it seems that this is wrong. In this case we have an uninitialized variable and
> > sequential call claim_fiq and release_fiq could be fatal. FIXME please.
>
> Um... I don't think I understand, can you please elaborate?
OK, I'll try to explain it.
At the end of the release_fiq function we have a call fiq_op. For the default
handler - is a fiq_def_op function, and we call this function with the option
"relinquish = 0", i.e. we want to restore old fiq_handler. But if we do not call
set_fiq_handler never before, we will have an uninitialized no_fiq_insn variable.
---
WARNING: multiple messages have this Message-ID (diff)
From: "Alexander Shiyan" <shc_work@mail.ru>
To: "Anton Vorontsov" <anton.vorontsov@linaro.org>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
linaro-kernel@lists.linaro.org,
"Russell King" <linux@arm.linux.org.uk>,
patches@linaro.org, linux-kernel@vger.kernel.org,
"John Stultz" <john.stultz@linaro.org>,
"Jason Wessel" <jason.wessel@windriver.com>,
kernel-team@android.com, linux-arm-kernel@lists.infradead.org
Subject: Re[2]: [PATCH 10/10] ARM: FIQ: Get rid of init_FIQ()
Date: Fri, 23 Nov 2012 10:27:51 +0400 [thread overview]
Message-ID: <1353652071.755665772@f76.mail.ru> (raw)
In-Reply-To: <20121123055328.GA21566@lizard>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=utf-8, Size: 1793 bytes --]
> On Fri, Nov 23, 2012 at 07:40:30AM +0400, Alexander Shiyan wrote:
> [...]
> > > static unsigned long no_fiq_insn;
> > > +static int got_no_fiq_insn;
> > > @@ -78,11 +79,14 @@ void show_fiq_list(struct seq_file *p, int prec)
> > >
> > > void set_fiq_handler(void *start, unsigned int length)
> > > {
> > > -#if defined(CONFIG_CPU_USE_DOMAINS)
> > > - memcpy((void *)0xffff001c, start, length);
> > > -#else
> > > - memcpy(vectors_page + 0x1c, start, length);
> > > + unsigned long *addr = (void *)0xffff001c;
> > > +
> > > +#ifndef CONFIG_CPU_USE_DOMAINS
> > > + addr = vectors_page + 0x1c;
> > > #endif
> > > + if (!cmpxchg(&got_no_fiq_insn, 0, 1))
> > > + no_fiq_insn = *addr;
> > > + memcpy(addr, start, length);
> > > flush_icache_range(0xffff001c, 0xffff001c + length);
> > > if (!vectors_high())
> > > flush_icache_range(0x1c, 0x1c + length);
> > > @@ -126,8 +130,3 @@ EXPORT_SYMBOL(__set_fiq_regs); /* defined in fiqasm.S */
> > > -
> > > -void __init init_FIQ(void)
> > > -{
> > > - no_fiq_insn = *(unsigned long *)0xffff001c;
> >
> > it seems that this is wrong. In this case we have an uninitialized variable and
> > sequential call claim_fiq and release_fiq could be fatal. FIXME please.
>
> Um... I don't think I understand, can you please elaborate?
OK, I'll try to explain it.
At the end of the release_fiq function we have a call fiq_op. For the default
handler - is a fiq_def_op function, and we call this function with the option
"relinquish = 0", i.e. we want to restore old fiq_handler. But if we do not call
set_fiq_handler never before, we will have an uninitialized no_fiq_insn variable.
---
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
next prev parent reply other threads:[~2012-11-23 6:27 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-23 0:38 [PATCH resend 0/10] Get rid of FIQ_START/enable/disable_fiq() + some FIQ cleanups Anton Vorontsov
2012-11-23 0:38 ` Anton Vorontsov
2012-11-23 0:49 ` [PATCH 01/10] ARM: mach-rpc: Don't register FIQs with genirq Anton Vorontsov
2012-11-23 0:49 ` Anton Vorontsov
2012-11-23 0:49 ` [PATCH 02/10] ARM: plat-s3c24xx: Don't use FIQ_START Anton Vorontsov
2012-11-23 0:49 ` Anton Vorontsov
2012-11-23 0:49 ` [PATCH 03/10] [media] mx1_camera: Don't use {en,dis}able_fiq() calls Anton Vorontsov
2012-11-23 0:49 ` Anton Vorontsov
2012-11-23 0:49 ` [PATCH 04/10] ASoC: imx: " Anton Vorontsov
2012-11-23 0:49 ` Anton Vorontsov
2012-11-23 0:49 ` [PATCH 05/10] ARM: FIQ: Remove enable_fiq() and disable_fiq() calls Anton Vorontsov
2012-11-23 0:49 ` Anton Vorontsov
2012-11-23 0:49 ` [PATCH 06/10] ARM: FIQ: Remove FIQ_START Anton Vorontsov
2012-11-23 0:49 ` Anton Vorontsov
2012-11-23 0:50 ` [PATCH 07/10] ARM: FIQ: Should include asm/mach/irq.h Anton Vorontsov
2012-11-23 0:50 ` Anton Vorontsov
2012-11-23 0:50 ` [PATCH 08/10] ARM: FIQ: Implement !CONFIG_FIQ stubs Anton Vorontsov
2012-11-23 0:50 ` Anton Vorontsov
2012-11-23 0:50 ` [PATCH 09/10] ARM: FIQ: Make show_fiq_list() return void Anton Vorontsov
2012-11-23 0:50 ` Anton Vorontsov
2012-11-23 0:50 ` [PATCH 10/10] ARM: FIQ: Get rid of init_FIQ() Anton Vorontsov
2012-11-23 0:50 ` Anton Vorontsov
2012-11-23 3:40 ` Alexander Shiyan
2012-11-23 3:40 ` Alexander Shiyan
2012-11-23 5:53 ` Anton Vorontsov
2012-11-23 5:53 ` Anton Vorontsov
2012-11-23 6:27 ` Alexander Shiyan [this message]
2012-11-23 6:27 ` Re[2]: " Alexander Shiyan
2012-11-23 6:50 ` Anton Vorontsov
2012-11-23 6:50 ` Anton Vorontsov
2012-11-23 7:36 ` Re[2]: " Alexander Shiyan
2012-11-23 7:36 ` Alexander Shiyan
2012-11-23 7:51 ` Anton Vorontsov
2012-11-23 7:51 ` Anton Vorontsov
2012-11-27 9:05 ` Anton Vorontsov
2012-11-27 9:05 ` Anton Vorontsov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1353652071.755665772@f76.mail.ru \
--to=shc_work@mail.ru \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.