From: Vladimir Murzin <vladimir.murzin@arm.com>
To: Marc Zyngier <marc.zyngier@arm.com>, kvmarm@lists.cs.columbia.edu
Cc: andre.przywara@arm.com, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 7/8] ARM: Move system register accessors to asm/cp15.h
Date: Mon, 12 Sep 2016 10:42:22 +0100 [thread overview]
Message-ID: <57D6787E.1050804@arm.com> (raw)
In-Reply-To: <57D2EBE4.4060107@arm.com>
On 09/09/16 18:05, Marc Zyngier wrote:
> On 08/09/16 17:06, Vladimir Murzin wrote:
>> Headers linux/irqchip/arm-gic.v3.h and arch/arm/include/asm/kvm_hyp.h
>> are included in virt/kvm/arm/hyp/vgic-v3-sr.c and both define macros
>> called __ACCESS_CP15 and __ACCESS_CP15_64 which obviously creates a
>> conflict. These macros were introduced independently for GIC and KVM
>> and, in fact, do the same thing.
>>
>> As an option we could add prefixes to KVM and GIC version of macros so
>> they won't clash, but it'd introduce code duplication. Alternatively,
>> we could keep macro in, say, GIC header and include it in KVM one (or
>> vice versa), but such dependency would not look nicer.
>>
>> So we follow arm64 way (it handles this via sysreg.h) and move only
>> single set of macros to asm/cp15.h
>>
>> Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
>> ---
>> arch/arm/include/asm/arch_gicv3.h | 27 +++++++++++----------------
>> arch/arm/include/asm/cp15.h | 15 +++++++++++++++
>> arch/arm/include/asm/kvm_hyp.h | 15 +--------------
>> 3 files changed, 27 insertions(+), 30 deletions(-)
>>
>> diff --git a/arch/arm/include/asm/arch_gicv3.h b/arch/arm/include/asm/arch_gicv3.h
>> index e08d151..af25c32 100644
>> --- a/arch/arm/include/asm/arch_gicv3.h
>> +++ b/arch/arm/include/asm/arch_gicv3.h
>> @@ -22,9 +22,7 @@
>>
>> #include <linux/io.h>
>> #include <asm/barrier.h>
>> -
>> -#define __ACCESS_CP15(CRn, Op1, CRm, Op2) p15, Op1, %0, CRn, CRm, Op2
>> -#define __ACCESS_CP15_64(Op1, CRm) p15, Op1, %Q0, %R0, CRm
>> +#include <asm/cp15.h>
>>
>> #define ICC_EOIR1 __ACCESS_CP15(c12, 0, c12, 1)
>> #define ICC_DIR __ACCESS_CP15(c12, 0, c11, 1)
>> @@ -102,58 +100,55 @@
>>
>> static inline void gic_write_eoir(u32 irq)
>> {
>> - asm volatile("mcr " __stringify(ICC_EOIR1) : : "r" (irq));
>> + write_sysreg(irq, ICC_EOIR1);
>> isb();
>> }
>>
>> static inline void gic_write_dir(u32 val)
>> {
>> - asm volatile("mcr " __stringify(ICC_DIR) : : "r" (val));
>> + write_sysreg(val, ICC_DIR);
>> isb();
>> }
>>
>> static inline u32 gic_read_iar(void)
>> {
>> - u32 irqstat;
>> + u32 irqstat = read_sysreg(ICC_IAR1);
>>
>> - asm volatile("mrc " __stringify(ICC_IAR1) : "=r" (irqstat));
>> dsb(sy);
>> +
>> return irqstat;
>> }
>>
>> static inline void gic_write_pmr(u32 val)
>> {
>> - asm volatile("mcr " __stringify(ICC_PMR) : : "r" (val));
>> + write_sysreg(val, ICC_PMR);
>> }
>>
>> static inline void gic_write_ctlr(u32 val)
>> {
>> - asm volatile("mcr " __stringify(ICC_CTLR) : : "r" (val));
>> + write_sysreg(val, ICC_CTLR);
>> isb();
>> }
>>
>> static inline void gic_write_grpen1(u32 val)
>> {
>> - asm volatile("mcr " __stringify(ICC_IGRPEN1) : : "r" (val));
>> + write_sysreg(val, ICC_IGRPEN1);
>> isb();
>> }
>>
>> static inline void gic_write_sgi1r(u64 val)
>> {
>> - asm volatile("mcrr " __stringify(ICC_SGI1R) : : "r" (val));
>> + write_sysreg(val, ICC_SGI1R);
>> }
>>
>> static inline u32 gic_read_sre(void)
>> {
>> - u32 val;
>> -
>> - asm volatile("mrc " __stringify(ICC_SRE) : "=r" (val));
>> - return val;
>> + return read_sysreg(ICC_SRE);
>> }
>>
>> static inline void gic_write_sre(u32 val)
>> {
>> - asm volatile("mcr " __stringify(ICC_SRE) : : "r" (val));
>> + write_sysreg(val, ICC_SRE);
>> isb();
>> }
>>
>> diff --git a/arch/arm/include/asm/cp15.h b/arch/arm/include/asm/cp15.h
>> index c3f1152..f661732 100644
>> --- a/arch/arm/include/asm/cp15.h
>> +++ b/arch/arm/include/asm/cp15.h
>> @@ -47,6 +47,21 @@
>> #define vectors_high() (0)
>> #endif
>>
>> +#define __ACCESS_CP15(CRn, Op1, CRm, Op2) \
>> + "mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
>> +#define __ACCESS_CP15_64(Op1, CRm) \
>> + "mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
>> +
>> +#define __read_sysreg(r, w, c, t) ({ \
>> + t __val; \
>> + asm volatile(r " " c : "=r" (__val)); \
>> + __val; \
>> +})
>> +#define read_sysreg(...) __read_sysreg(__VA_ARGS__)
>> +
>> +#define __write_sysreg(v, r, w, c, t) asm volatile(w " " c : : "r" ((t)(v)))
>> +#define write_sysreg(v, ...) __write_sysreg(v, __VA_ARGS__)
>> +
>
> Shouldn't that be placed after the #ifdef below?
>
>> #ifdef CONFIG_CPU_CP15
>>
>> extern unsigned long cr_alignment; /* defined in entry-armv.S */
>> diff --git a/arch/arm/include/asm/kvm_hyp.h b/arch/arm/include/asm/kvm_hyp.h
>> index bd9434e..0b475d2 100644
>> --- a/arch/arm/include/asm/kvm_hyp.h
>> +++ b/arch/arm/include/asm/kvm_hyp.h
>> @@ -20,26 +20,13 @@
>>
>> #include <linux/compiler.h>
>> #include <linux/kvm_host.h>
>> +#include <asm/cp15.h>
>> #include <asm/kvm_mmu.h>
>> #include <asm/vfp.h>
>>
>> -#define __ACCESS_CP15(CRn, Op1, CRm, Op2) \
>> - "mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
>> -#define __ACCESS_CP15_64(Op1, CRm) \
>> - "mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
>> #define __ACCESS_VFP(CRn) \
>> "mrc", "mcr", __stringify(p10, 7, %0, CRn, cr0, 0), u32
>>
>> -#define __write_sysreg(v, r, w, c, t) asm volatile(w " " c : : "r" ((t)(v)))
>> -#define write_sysreg(v, ...) __write_sysreg(v, __VA_ARGS__)
>> -
>> -#define __read_sysreg(r, w, c, t) ({ \
>> - t __val; \
>> - asm volatile(r " " c : "=r" (__val)); \
>> - __val; \
>> -})
>> -#define read_sysreg(...) __read_sysreg(__VA_ARGS__)
>> -
>> #define write_special(v, r) \
>> asm volatile("msr " __stringify(r) ", %0" : : "r" (v))
>> #define read_special(r) ({ \
>>
>
> Could you please cc RMK on this, given that this touches a core arch/arm
> file?
Ok. I'll cc/to him with the next re-spin.
Cheers
Vladimir
>
> Thanks,
>
> M.
>
next prev parent reply other threads:[~2016-09-12 9:33 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-08 16:06 [PATCH v3 0/8] ARM: KVM: Support for vgic-v3 Vladimir Murzin
2016-09-08 16:06 ` [PATCH v3 1/8] arm64: KVM: Use static keys for selecting the GIC backend Vladimir Murzin
2016-09-09 9:19 ` Marc Zyngier
2016-09-09 9:33 ` Vladimir Murzin
2016-09-09 13:45 ` Vladimir Murzin
2016-09-09 14:17 ` Marc Zyngier
2016-09-09 15:14 ` Vladimir Murzin
2016-09-09 15:25 ` Marc Zyngier
2016-09-09 16:18 ` Vladimir Murzin
2016-09-09 17:06 ` Marc Zyngier
2016-09-08 16:06 ` [PATCH v3 2/8] arm64: KVM: Move GIC accessors to arch_gicv3.h Vladimir Murzin
2016-09-09 16:32 ` Marc Zyngier
2016-09-12 9:18 ` Vladimir Murzin
2016-09-08 16:06 ` [PATCH v3 3/8] arm64: KVM: Move vgic-v3 save/restore to virt/kvm/arm/hyp Vladimir Murzin
2016-09-09 16:33 ` Marc Zyngier
2016-09-12 9:18 ` Vladimir Murzin
2016-09-08 16:06 ` [PATCH v3 4/8] KVM: arm64: vgic-its: Introduce config option to guard ITS specific code Vladimir Murzin
2016-09-09 16:46 ` Marc Zyngier
2016-09-12 9:23 ` Vladimir Murzin
2016-09-08 16:06 ` [PATCH v3 5/8] KVM: arm: vgic: Support 64-bit data manipulation on 32-bit host systems Vladimir Murzin
2016-09-09 16:55 ` Marc Zyngier
2016-09-12 9:25 ` Vladimir Murzin
2016-09-08 16:06 ` [PATCH v3 6/8] ARM: Change MPIDR_AFFINITY_LEVEL to ignore Aff3 Vladimir Murzin
2016-09-09 16:59 ` Marc Zyngier
2016-09-12 9:39 ` Vladimir Murzin
2016-09-12 9:48 ` Marc Zyngier
2016-09-12 9:51 ` Vladimir Murzin
2016-09-08 16:06 ` [PATCH v3 7/8] ARM: Move system register accessors to asm/cp15.h Vladimir Murzin
2016-09-09 17:05 ` Marc Zyngier
2016-09-12 9:42 ` Vladimir Murzin [this message]
2016-09-12 9:44 ` Vladimir Murzin
2016-09-08 16:06 ` [PATCH v3 8/8] ARM: KVM: Support vgic-v3 Vladimir Murzin
2016-09-09 16:45 ` Marc Zyngier
2016-09-12 9:23 ` Vladimir Murzin
2016-09-09 7:58 ` [PATCH v3 0/8] ARM: KVM: Support for vgic-v3 Vladimir Murzin
2016-09-09 11:26 ` Christoffer Dall
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=57D6787E.1050804@arm.com \
--to=vladimir.murzin@arm.com \
--cc=andre.przywara@arm.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=marc.zyngier@arm.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