From: Arnd Bergmann <arnd@arndb.de>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>,
Jeremy Fitzhardinge <jeremy@goop.org>,
"xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [Xen-devel] [PATCH 5/9] ARM: Xen: fix initial build problems:
Date: Tue, 9 Oct 2012 18:19:34 +0000 [thread overview]
Message-ID: <201210091819.34310.arnd@arndb.de> (raw)
In-Reply-To: <1349799035.21847.222.camel@zakaz.uk.xensource.com>
On Tuesday 09 October 2012, Ian Campbell wrote:
> On Tue, 2012-10-09 at 16:39 +0100, Arnd Bergmann wrote:
> > On Tuesday 09 October 2012, Ian Campbell wrote:
> > > > * The tmem hypercall is not available on ARM
> > > >
> > > > * ARMv6 does not support cmpxchg on 16-bit words that are used in the
> > >
> > > missing the end of this sentence?
> >
> > Right, I meant to say
> >
> > * ARMv6 does not support cmpxchg on 16-bit words that are used in the
> > Xen grant table code, so we must ensure that Xen support is only built
> > on ARMv7-only kernels not combined ARMv6/v7 kernels.
> >
> > This should be fixed differently in the future.
>
> Is this is a build time failure because gcc/gas/etc refuses to generate
> these instructions if it is configured for v6?
>
> I ask because if it is only a runtime issue then we can reason that if
> we are running Xen specific grant table code, then we must be running on
> Xen and therefore must necessarily be running on a v7 (because Xen only
> support v7+virt extensions) even if the kernel happens to be capable of
> running on v6 too.
The underlying reason of course is that ARMv6 doesn't have those
instructions. The symptom you see is a link error because gcc emits
a reference to the (intentionally missing) __bad_cmpxchg() function
from
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
unsigned long new, int size)
{
unsigned long oldval, res;
switch (size) {
#ifndef CONFIG_CPU_V6 /* min ARCH >= ARMv6K */
case 1:
...
break;
case 2:
...
break;
#endif
case 4:
...
break;
default:
__bad_cmpxchg(ptr, size);
oldval = 0;
}
return oldval;
}
The possible solutions I can see for this are:
* change the grant table format to use 32 bits for the flags on ARM
* change the code to always cmpxchg the entire 32 bit word including the flags.
* implement your own cmpxchg wrapper that may be implemented using a spinlock
rather than cmpxchg if ARMv6 is enabled.
Arnd
next prev parent reply other threads:[~2012-10-09 18:20 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-09 15:22 [GIT PULL 0/9] ARM architecture fixes for 3.7 Arnd Bergmann
2012-10-09 15:22 ` [PATCH 1/9] ARM: kprobes: make more tests conditional Arnd Bergmann
2012-10-09 15:22 ` [PATCH 2/9] ARM: export set_irq_flags Arnd Bergmann
2012-10-09 16:20 ` Thomas Gleixner
2012-10-10 6:42 ` Linus Walleij
2012-10-09 15:22 ` [PATCH 3/9] ARM: Fix another build warning in arch/arm/mm/alignment.c Arnd Bergmann
2012-10-09 15:22 ` [PATCH 4/9] ARM: export default read_current_timer Arnd Bergmann
2012-10-09 15:40 ` Jonathan Austin
2012-10-09 16:06 ` Russell King - ARM Linux
2012-10-18 8:43 ` Alexander Holler
2012-10-09 15:22 ` [PATCH 5/9] ARM: Xen: fix initial build problems: Arnd Bergmann
2012-10-09 15:35 ` [Xen-devel] " Ian Campbell
2012-10-09 15:39 ` Arnd Bergmann
2012-10-09 16:10 ` Ian Campbell
2012-10-09 18:19 ` Arnd Bergmann [this message]
2012-10-10 9:46 ` Ian Campbell
2012-10-10 11:07 ` Arnd Bergmann
2012-10-09 15:37 ` Stefano Stabellini
2012-10-09 18:21 ` Arnd Bergmann
2012-10-10 7:54 ` [Xen-devel] " Ian Campbell
2012-10-10 14:47 ` Stefano Stabellini
2012-10-10 14:53 ` Ian Campbell
2012-10-10 16:01 ` Stefano Stabellini
2012-10-09 16:04 ` Russell King - ARM Linux
2012-10-09 15:23 ` [PATCH 6/9] ARM: pass -marm to gcc by default for both C and assembler Arnd Bergmann
2012-10-09 17:27 ` Dave Martin
2012-10-09 15:23 ` [PATCH 7/9] ARM: be really quiet when building with 'make -s' Arnd Bergmann
2012-10-09 15:23 ` [PATCH 8/9] ARM: binfmt_flat: unused variable 'persistent' Arnd Bergmann
2012-10-09 15:23 ` [PATCH 9/9] ARM: warnings in arch/arm/include/asm/uaccess.h Arnd Bergmann
2012-10-09 16:08 ` [GIT PULL 0/9] ARM architecture fixes for 3.7 Russell King - ARM Linux
2012-10-09 17:06 ` Stefano Stabellini
2012-10-09 18:40 ` Arnd Bergmann
2012-10-10 14:58 ` Stefano Stabellini
2012-10-12 13:20 ` Will Deacon
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=201210091819.34310.arnd@arndb.de \
--to=arnd@arndb.de \
--cc=Ian.Campbell@citrix.com \
--cc=Stefano.Stabellini@eu.citrix.com \
--cc=jeremy@goop.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rmk+kernel@arm.linux.org.uk \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox