|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/arm: trap SMC instructions and inject an UND exception
On Thu, 2013-05-02 at 12:01 +0100, Ian Campbell wrote:
> Currently only handles 32 bit guests. The 64-bit exception model is
> considerably different.
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Tested with the following Linux patch...
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 234e339..dbf2d03 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -43,6 +43,7 @@
#include <asm/cacheflush.h>
#include <asm/cachetype.h>
#include <asm/tlbflush.h>
+#include <asm/opcodes-sec.h>
#include <asm/prom.h>
#include <asm/mach/arch.h>
@@ -730,6 +731,43 @@ static int __init meminfo_cmp(const void *_a, const void
*_b)
return cmp < 0 ? -1 : cmp > 0 ? 1 : 0;
}
+static int __initdata test_und_count = 0;
+
+static int __init test_und_handler(struct pt_regs *regs, unsigned int instr)
+{
+ test_und_count++;
+ regs->ARM_pc += 4;
+ return 0;
+}
+
+static struct __initdata undef_hook und_hook = {
+ .instr_mask = 0,
+ .instr_val = 0,
+ .cpsr_mask = MODE_MASK,
+ .cpsr_val = SVC_MODE,
+ .fn = test_und_handler,
+};
+
+static void __init test_und(void)
+{
+ int before = test_und_count;
+
+ register_undef_hook(&und_hook);
+ printk(KERN_INFO "Testing UND instruction... ");
+ asm volatile(".long 0xe7f000f0" : : : "memory");
+ printk(KERN_CONT "%s with count %d\n",
+ (before + 1) == test_und_count ? "success" : "failure",
+ test_und_count);
+
+ printk(KERN_INFO "Testing SMC instruction... ");
+ before = test_und_count;
+ asm volatile(__SMC(0) : : : "memory");
+ printk(KERN_CONT "%s with count %d\n",
+ (before + 1) == test_und_count ? "success" : "failure",
+ test_und_count);
+ unregister_undef_hook(&und_hook);
+}
+
void __init hyp_mode_check(void)
{
#ifdef CONFIG_ARM_VIRT_EXT
@@ -784,6 +822,8 @@ void __init setup_arch(char **cmdline_p)
unflatten_device_tree();
+ test_und();
+
arm_dt_init_cpu_maps();
#ifdef CONFIG_SMP
if (is_smp()) {
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |