From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [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
WARNING: multiple messages have this Message-ID (diff)
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:19 UTC|newest]
Thread overview: 75+ 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 ` Arnd Bergmann
2012-10-09 15:22 ` Arnd Bergmann
2012-10-09 15:22 ` [PATCH 1/9] ARM: kprobes: make more tests conditional Arnd Bergmann
2012-10-09 15:22 ` Arnd Bergmann
2012-10-09 15:22 ` [PATCH 2/9] ARM: export set_irq_flags Arnd Bergmann
2012-10-09 15:22 ` Arnd Bergmann
2012-10-09 16:20 ` Thomas Gleixner
2012-10-09 16:20 ` Thomas Gleixner
2012-10-10 6:42 ` Linus Walleij
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 ` Arnd Bergmann
2012-10-09 15:22 ` [PATCH 4/9] ARM: export default read_current_timer Arnd Bergmann
2012-10-09 15:22 ` Arnd Bergmann
2012-10-09 15:40 ` Jonathan Austin
2012-10-09 15:40 ` Jonathan Austin
2012-10-09 16:06 ` Russell King - ARM Linux
2012-10-09 16:06 ` Russell King - ARM Linux
2012-10-18 8:43 ` Alexander Holler
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:22 ` Arnd Bergmann
2012-10-09 15:35 ` [Xen-devel] " Ian Campbell
2012-10-09 15:35 ` Ian Campbell
2012-10-09 15:39 ` Arnd Bergmann
2012-10-09 15:39 ` Arnd Bergmann
2012-10-09 16:10 ` Ian Campbell
2012-10-09 16:10 ` Ian Campbell
2012-10-09 18:19 ` Arnd Bergmann [this message]
2012-10-09 18:19 ` Arnd Bergmann
2012-10-10 9:46 ` Ian Campbell
2012-10-10 9:46 ` Ian Campbell
2012-10-10 11:07 ` Arnd Bergmann
2012-10-10 11:07 ` Arnd Bergmann
2012-10-09 19:24 ` Dan Magenheimer
2012-10-10 7:53 ` Ian Campbell
2012-10-10 14:51 ` Stefano Stabellini
2012-10-09 15:37 ` Stefano Stabellini
2012-10-09 15:37 ` Stefano Stabellini
2012-10-09 18:21 ` Arnd Bergmann
2012-10-09 18:21 ` Arnd Bergmann
2012-10-10 7:54 ` [Xen-devel] " Ian Campbell
2012-10-10 7:54 ` Ian Campbell
2012-10-10 14:47 ` Stefano Stabellini
2012-10-10 14:47 ` Stefano Stabellini
2012-10-10 14:53 ` Ian Campbell
2012-10-10 14:53 ` Ian Campbell
2012-10-10 16:01 ` Stefano Stabellini
2012-10-10 16:01 ` Stefano Stabellini
2012-10-09 16:04 ` Russell King - ARM Linux
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 15:23 ` Arnd Bergmann
2012-10-09 17:27 ` Dave Martin
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 ` Arnd Bergmann
2012-10-09 15:23 ` [PATCH 8/9] ARM: binfmt_flat: unused variable 'persistent' Arnd Bergmann
2012-10-09 15:23 ` Arnd Bergmann
2012-10-09 15:23 ` [PATCH 9/9] ARM: warnings in arch/arm/include/asm/uaccess.h Arnd Bergmann
2012-10-09 15:23 ` Arnd Bergmann
2012-10-09 16:08 ` [GIT PULL 0/9] ARM architecture fixes for 3.7 Russell King - ARM Linux
2012-10-09 16:08 ` Russell King - ARM Linux
2012-10-09 17:06 ` Stefano Stabellini
2012-10-09 17:06 ` Stefano Stabellini
2012-10-09 17:06 ` Stefano Stabellini
2012-10-09 18:40 ` Arnd Bergmann
2012-10-09 18:40 ` Arnd Bergmann
2012-10-10 14:58 ` Stefano Stabellini
2012-10-10 14:58 ` Stefano Stabellini
2012-10-10 14:58 ` Stefano Stabellini
2012-10-12 13:20 ` Will Deacon
2012-10-12 13:20 ` Will Deacon
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=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.