Defines a few stubs and disables some as yet unsupported core features. Early on there''s a couple of unrelated cleanups. Patch against current unstable. #6 and #9 touch common code. Changes since v1: - make PoD stubs proper functions instead of #defines - define need_iommu as 0 instead of littering common code with #if - stub donate_page but leave tmem enabled. - rebased against latest unstable tree Ian.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
xen/arch/arm/kernel.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c
index f2339fa..71a204d 100644
--- a/xen/arch/arm/kernel.c
+++ b/xen/arch/arm/kernel.c
@@ -194,3 +194,12 @@ void kernel_load(struct kernel_info *info)
{
info->load(info);
}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
--
1.7.2.5
Complete the set of cache flush and add processor feature registers. Print the
latter on boot for debug.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
xen/arch/arm/setup.c | 17 +++++++++++++++++
xen/include/asm-arm/cpregs.h | 18 ++++++++++++++++++
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index de7d5f2..ddc2392 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -64,6 +64,20 @@ static void __init init_idle_domain(void)
/* TODO: setup_idle_pagetable(); */
}
+static void processor_id(void)
+{
+ printk("Processor Features: %08x %08x\n",
+ READ_CP32(ID_PFR0), READ_CP32(ID_PFR0));
+ printk("Debug Features: %08x\n", READ_CP32(ID_DFR0));
+ printk("Auxiliary Features: %08x\n", READ_CP32(ID_AFR0));
+ printk("Memory Model Features: %08x %08x %08x %08x\n",
+ READ_CP32(ID_MMFR0), READ_CP32(ID_MMFR1),
+ READ_CP32(ID_MMFR2), READ_CP32(ID_MMFR3));
+ printk("ISA Features: %08x %08x %08x %08x %08x %08x\n",
+ READ_CP32(ID_ISAR0), READ_CP32(ID_ISAR1), READ_CP32(ID_ISAR2),
+ READ_CP32(ID_ISAR3), READ_CP32(ID_ISAR4), READ_CP32(ID_ISAR5));
+}
+
static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size)
{
paddr_t ram_start;
@@ -185,7 +199,10 @@ void __init start_xen(unsigned long boot_phys_offset,
*/
WRITE_CP32(0x80002558, VTCR); isb();
+ processor_id();
+
softirq_init();
+
tasklet_subsys_init();
init_IRQ();
diff --git a/xen/include/asm-arm/cpregs.h b/xen/include/asm-arm/cpregs.h
index 3a4028d..d61ea88 100644
--- a/xen/include/asm-arm/cpregs.h
+++ b/xen/include/asm-arm/cpregs.h
@@ -93,6 +93,18 @@
/* CP15 CR0: CPUID and Cache Type Registers */
#define ID_PFR0 p15,0,c0,c1,0 /* Processor Feature Register 0 */
#define ID_PFR1 p15,0,c0,c1,1 /* Processor Feature Register 1 */
+#define ID_DFR0 p15,0,c0,c1,2 /* Debug Feature Register 0 */
+#define ID_AFR0 p15,0,c0,c1,3 /* Auxiliary Feature Register 0 */
+#define ID_MMFR0 p15,0,c0,c1,4 /* Memory Model Feature Register 0 */
+#define ID_MMFR1 p15,0,c0,c1,5 /* Memory Model Feature Register 1 */
+#define ID_MMFR2 p15,0,c0,c1,6 /* Memory Model Feature Register 2 */
+#define ID_MMFR3 p15,0,c0,c1,7 /* Memory Model Feature Register 3 */
+#define ID_ISAR0 p15,0,c0,c2,0 /* ISA Feature Register 0 */
+#define ID_ISAR1 p15,0,c0,c2,1 /* ISA Feature Register 1 */
+#define ID_ISAR2 p15,0,c0,c2,2 /* ISA Feature Register 2 */
+#define ID_ISAR3 p15,0,c0,c2,3 /* ISA Feature Register 3 */
+#define ID_ISAR4 p15,0,c0,c2,4 /* ISA Feature Register 4 */
+#define ID_ISAR5 p15,0,c0,c2,5 /* ISA Feature Register 5 */
#define CCSIDR p15,1,c0,c0,0 /* Cache Size ID Registers */
#define CLIDR p15,1,c0,c0,1 /* Cache Level ID Register */
#define CSSELR p15,2,c0,c0,0 /* Cache Size Selection Register */
@@ -134,7 +146,11 @@
#define ICIALLUIS p15,0,c7,c1,0 /* Invalidate all instruction caches to
PoU inner shareable */
#define BPIALLIS p15,0,c7,c1,6 /* Invalidate entire branch predictor
array inner shareable */
#define ICIALLU p15,0,c7,c5,0 /* Invalidate all instruction caches to
PoU */
+#define ICIMVAU p15,0,c7,c5,1 /* Invalidate instruction caches by MVA
to PoU */
#define BPIALL p15,0,c7,c5,6 /* Invalidate entire branch predictor
array */
+#define BPIMVA p15,0,c7,c5,7 /* Invalidate MVA from branch predictor
array */
+#define DCIMVAC p15,0,c7,c6,1 /* Invalidate data cache line by MVA to
PoC */
+#define DCISW p15,0,c7,c2,1 /* Invalidate data cache line by
set/way */
#define ATS1CPR p15,0,c7,c8,0 /* Address Translation Stage 1.
Non-Secure Kernel Read */
#define ATS1CPW p15,0,c7,c8,1 /* Address Translation Stage 1.
Non-Secure Kernel Write */
#define ATS1CUR p15,0,c7,c8,2 /* Address Translation Stage 1.
Non-Secure User Read */
@@ -144,6 +160,8 @@
#define ATS12NSOUR p15,0,c7,c8,6 /* Address Translation Stage 1+2
Non-Secure User Read */
#define ATS12NSOUW p15,0,c7,c8,7 /* Address Translation Stage 1+2
Non-Secure User Write */
#define DCCMVAC p15,0,c7,c10,1 /* Clean data or unified cache line by
MVA to PoC */
+#define DCCSW p15,0,c7,c10,2 /* Clean data cache line by set/way */
+#define DCCMVAU p15,0,c7,c11,1 /* Clean data cache line by MVA to PoU
*/
#define DCCISW p15,0,c7,c14,2 /* Clean and invalidate data cache line
by set/way */
#define ATS1HR p15,4,c7,c8,0 /* Address Translation Stage 1 Hyp.
Read */
#define ATS1HW p15,4,c7,c8,1 /* Address Translation Stage 1 Hyp.
Write */
--
1.7.2.5
Probably got de-hard-tabbed at some point. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> --- xen/include/asm-arm/processor.h | 80 +++++++++++++++++++------------------- 1 files changed, 40 insertions(+), 40 deletions(-) diff --git a/xen/include/asm-arm/processor.h b/xen/include/asm-arm/processor.h index 1f85d31..ec6fb48 100644 --- a/xen/include/asm-arm/processor.h +++ b/xen/include/asm-arm/processor.h @@ -17,12 +17,12 @@ #define PSR_MODE_UND 0x1b #define PSR_MODE_SYS 0x1f -#define PSR_THUMB (1<<5) /* Thumb Mode enable */ -#define PSR_FIQ_MASK (1<<6) /* Fast Interrupt mask */ -#define PSR_IRQ_MASK (1<<7) /* Interrupt mask */ -#define PSR_ABT_MASK (1<<8) /* Asynchronous Abort mask */ -#define PSR_BIG_ENDIAN (1<<9) /* Big Endian Mode */ -#define PSR_JAZELLE (1<<24) /* Jazelle Mode */ +#define PSR_THUMB (1<<5) /* Thumb Mode enable */ +#define PSR_FIQ_MASK (1<<6) /* Fast Interrupt mask */ +#define PSR_IRQ_MASK (1<<7) /* Interrupt mask */ +#define PSR_ABT_MASK (1<<8) /* Asynchronous Abort mask */ +#define PSR_BIG_ENDIAN (1<<9) /* Big Endian Mode */ +#define PSR_JAZELLE (1<<24) /* Jazelle Mode */ /* TTBCR Translation Table Base Control Register */ #define TTBCR_N_MASK 0x07 @@ -35,56 +35,56 @@ /* SCTLR System Control Register. */ /* HSCTLR is a subset of this. */ #define SCTLR_TE (1<<30) -#define SCTLR_AFE (1<<29) -#define SCTLR_TRE (1<<28) -#define SCTLR_NMFI (1<<27) +#define SCTLR_AFE (1<<29) +#define SCTLR_TRE (1<<28) +#define SCTLR_NMFI (1<<27) #define SCTLR_EE (1<<25) #define SCTLR_VE (1<<24) -#define SCTLR_U (1<<22) +#define SCTLR_U (1<<22) #define SCTLR_FI (1<<21) -#define SCTLR_WXN (1<<19) +#define SCTLR_WXN (1<<19) #define SCTLR_HA (1<<17) #define SCTLR_RR (1<<14) -#define SCTLR_V (1<<13) -#define SCTLR_I (1<<12) -#define SCTLR_Z (1<<11) +#define SCTLR_V (1<<13) +#define SCTLR_I (1<<12) +#define SCTLR_Z (1<<11) #define SCTLR_SW (1<<10) -#define SCTLR_B (1<<7) -#define SCTLR_C (1<<2) -#define SCTLR_A (1<<1) -#define SCTLR_M (1<<0) +#define SCTLR_B (1<<7) +#define SCTLR_C (1<<2) +#define SCTLR_A (1<<1) +#define SCTLR_M (1<<0) #define SCTLR_BASE 0x00c50078 -#define HSCTLR_BASE 0x30c51878 +#define HSCTLR_BASE 0x30c51878 /* HCR Hyp Configuration Register */ -#define HCR_TGE (1<<27) -#define HCR_TVM (1<<26) +#define HCR_TGE (1<<27) +#define HCR_TVM (1<<26) #define HCR_TTLB (1<<25) -#define HCR_TPU (1<<24) -#define HCR_TPC (1<<23) -#define HCR_TSW (1<<22) -#define HCR_TAC (1<<21) -#define HCR_TIDCP (1<<20) -#define HCR_TSC (1<<19) +#define HCR_TPU (1<<24) +#define HCR_TPC (1<<23) +#define HCR_TSW (1<<22) +#define HCR_TAC (1<<21) +#define HCR_TIDCP (1<<20) +#define HCR_TSC (1<<19) #define HCR_TID3 (1<<18) #define HCR_TID2 (1<<17) #define HCR_TID1 (1<<16) #define HCR_TID0 (1<<15) -#define HCR_TWE (1<<14) -#define HCR_TWI (1<<13) -#define HCR_DC (1<<12) -#define HCR_BSU_MASK (3<<10) -#define HCR_FB (1<<9) -#define HCR_VA (1<<8) -#define HCR_VI (1<<7) -#define HCR_VF (1<<6) -#define HCR_AMO (1<<5) -#define HCR_IMO (1<<4) -#define HCR_FMO (1<<3) -#define HCR_PTW (1<<2) +#define HCR_TWE (1<<14) +#define HCR_TWI (1<<13) +#define HCR_DC (1<<12) +#define HCR_BSU_MASK (3<<10) +#define HCR_FB (1<<9) +#define HCR_VA (1<<8) +#define HCR_VI (1<<7) +#define HCR_VF (1<<6) +#define HCR_AMO (1<<5) +#define HCR_IMO (1<<4) +#define HCR_FMO (1<<3) +#define HCR_PTW (1<<2) #define HCR_SWIO (1<<1) -#define HCR_VM (1<<0) +#define HCR_VM (1<<0) #define HSR_EC_WFI_WFE 0x01 #define HSR_EC_CP15_32 0x03 -- 1.7.2.5
Ian Campbell
2012-Feb-14 14:43 UTC
[PATCH 04/12] arm: remove some unnecessary symbols from dummy.S
Correct the comment on the DUMMY macro. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> --- xen/arch/arm/dummy.S | 8 +------- 1 files changed, 1 insertions(+), 7 deletions(-) diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S index 5bc4f21..fff7d7e 100644 --- a/xen/arch/arm/dummy.S +++ b/xen/arch/arm/dummy.S @@ -1,8 +1,6 @@ -/* Nothing is mapped at 1G, for the moment */ #define DUMMY(x) \ .globl x; \ -x: .word 0xe7f000f0 -/* x: mov r0, #0x40000000 ; str r0, [r0]; b x */ +x: .word 0xe7f000f0 /* Undefined instruction */ #define NOP(x) \ .globl x; \ @@ -35,15 +33,11 @@ DUMMY(get_page); DUMMY(get_page_type); DUMMY(gmfn_to_mfn); DUMMY(gnttab_clear_flag); -DUMMY(gnttab_host_mapping_get_page_type); DUMMY(gnttab_mark_dirty); DUMMY(hypercall_create_continuation); DUMMY(iommu_map_page); DUMMY(iommu_unmap_page); DUMMY(is_iomem_page); -DUMMY(local_event_delivery_enable); -DUMMY(local_events_need_delivery); -DUMMY(machine_to_phys_mapping_valid); DUMMY(max_page); DUMMY(node_online_map); DUMMY(nr_irqs_gsi); -- 1.7.2.5
Ian Campbell
2012-Feb-14 14:43 UTC
[PATCH 05/12] arm: Add stub functions instead of using DUMMY
Adds stubs for arch domctl and sysctl plus vcpu_op and memory_op.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
xen/arch/arm/Makefile | 2 ++
xen/arch/arm/domain.c | 5 +++++
xen/arch/arm/domctl.c | 27 +++++++++++++++++++++++++++
xen/arch/arm/dummy.S | 4 ----
xen/arch/arm/mm.c | 5 +++++
xen/arch/arm/sysctl.c | 29 +++++++++++++++++++++++++++++
6 files changed, 68 insertions(+), 4 deletions(-)
create mode 100644 xen/arch/arm/domctl.c
create mode 100644 xen/arch/arm/sysctl.c
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 168716e..49b64fe 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -4,6 +4,8 @@ obj-y += dummy.o
obj-y += early_printk.o
obj-y += entry.o
obj-y += domain.o
+obj-y += domctl.o
+obj-y += sysctl.o
obj-y += domain_build.o
obj-y += gic.o
obj-y += io.o
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index ada89af..5fe370b 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -255,6 +255,11 @@ void arch_dump_domain_info(struct domain *d)
{
}
+long arch_do_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg)
+{
+ return -ENOSYS;
+}
+
void arch_dump_vcpu_info(struct vcpu *v)
{
}
diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c
new file mode 100644
index 0000000..d957f21
--- /dev/null
+++ b/xen/arch/arm/domctl.c
@@ -0,0 +1,27 @@
+/******************************************************************************
+ * Arch-specific domctl.c
+ *
+ * Copyright (c) 2012, Citrix Systems
+ */
+
+#include <xen/config.h>
+#include <xen/types.h>
+#include <xen/lib.h>
+#include <xen/errno.h>
+#include <public/domctl.h>
+
+long arch_do_domctl(struct xen_domctl *domctl,
+ XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
+{
+ return -ENOSYS;
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S
index fff7d7e..1287e0b 100644
--- a/xen/arch/arm/dummy.S
+++ b/xen/arch/arm/dummy.S
@@ -8,12 +8,8 @@ x: mov pc, lr
DUMMY(alloc_pirq_struct);
DUMMY(alloc_vcpu_guest_context);
-DUMMY(arch_do_domctl);
-DUMMY(arch_do_sysctl);
-DUMMY(arch_do_vcpu_op);
DUMMY(arch_get_info_guest);
DUMMY(arch_get_xen_caps);
-DUMMY(arch_memory_op);
DUMMY(arch_set_info_guest);
DUMMY(arch_vcpu_reset);
DUMMY(create_grant_host_mapping);
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 0d6c0ca..fcab567 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -320,6 +320,11 @@ void arch_dump_shared_mem_info(void)
{
}
+long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
+{
+ return -ENOSYS;
+}
+
/*
* Local variables:
* mode: C
diff --git a/xen/arch/arm/sysctl.c b/xen/arch/arm/sysctl.c
new file mode 100644
index 0000000..50101c7
--- /dev/null
+++ b/xen/arch/arm/sysctl.c
@@ -0,0 +1,29 @@
+/******************************************************************************
+ * Arch-specific sysctl.c
+ *
+ * System management operations. For use by node control stack.
+ *
+ * Copyright (c) 2012, Citrix Systems
+ */
+
+#include <xen/config.h>
+#include <xen/types.h>
+#include <xen/lib.h>
+#include <xen/errno.h>
+#include <public/sysctl.h>
+
+long arch_do_sysctl(struct xen_sysctl *sysctl,
+ XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
+{
+ return -ENOSYS;
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
--
1.7.2.5
Ian Campbell
2012-Feb-14 14:43 UTC
[PATCH 06/12] PM: only include XEN_SYSCTL_{get_pmstat, pm_op} if HAVE_ACPI
These hypercalls are currently ACPI specific and implemented in
xen/drivers/acpi which is not implemented on ARM.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: keir@xen.org
---
xen/Rules.mk | 1 +
xen/arch/arm/dummy.S | 2 --
xen/common/sysctl.c | 2 ++
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 507e9ab..ee54179 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -50,6 +50,7 @@ CFLAGS-$(crash_debug) += -DCRASH_DEBUG
CFLAGS-$(perfc) += -DPERF_COUNTERS
CFLAGS-$(perfc_arrays) += -DPERF_ARRAYS
CFLAGS-$(lock_profile) += -DLOCK_PROFILE
+CFLAGS-$(HAS_ACPI) += -DHAS_ACPI
CFLAGS-$(frame_pointer) += -fno-omit-frame-pointer -DCONFIG_FRAME_POINTER
ifneq ($(max_phys_cpus),)
diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S
index 1287e0b..3bf5226 100644
--- a/xen/arch/arm/dummy.S
+++ b/xen/arch/arm/dummy.S
@@ -16,13 +16,11 @@ DUMMY(create_grant_host_mapping);
DUMMY(__cpu_die);
DUMMY(__cpu_disable);
DUMMY(__cpu_up);
-DUMMY(do_get_pm_info);
DUMMY(domain_get_maximum_gpfn);
DUMMY(domain_relinquish_resources);
DUMMY(domain_set_time_offset);
DUMMY(dom_cow);
DUMMY(donate_page);
-DUMMY(do_pm_op);
DUMMY(flush_tlb_mask);
DUMMY(free_vcpu_guest_context);
DUMMY(get_page);
diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
index f8f7cf8..fef0589 100644
--- a/xen/common/sysctl.c
+++ b/xen/common/sysctl.c
@@ -224,6 +224,7 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
}
break;
+#ifdef HAS_ACPI
case XEN_SYSCTL_get_pmstat:
{
ret = xsm_get_pmstat();
@@ -259,6 +260,7 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
}
}
break;
+#endif
case XEN_SYSCTL_page_offline_op:
{
--
1.7.2.5
Ian Campbell
2012-Feb-14 14:43 UTC
[PATCH 07/12] arm: provide dummy version of steal_page for tmem.
This is how IA64 does it.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
xen/arch/arm/dummy.S | 1 -
xen/arch/arm/mm.c | 6 ++++++
2 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S
index 3bf5226..da0b906 100644
--- a/xen/arch/arm/dummy.S
+++ b/xen/arch/arm/dummy.S
@@ -20,7 +20,6 @@ DUMMY(domain_get_maximum_gpfn);
DUMMY(domain_relinquish_resources);
DUMMY(domain_set_time_offset);
DUMMY(dom_cow);
-DUMMY(donate_page);
DUMMY(flush_tlb_mask);
DUMMY(free_vcpu_guest_context);
DUMMY(get_page);
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index fcab567..2c905ed 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -325,6 +325,12 @@ long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
return -ENOSYS;
}
+int donate_page(struct domain *d, struct page_info *page, unsigned int
memflags)
+{
+ ASSERT(0);
+ return -ENOSYS;
+}
+
/*
* Local variables:
* mode: C
--
1.7.2.5
TBD: correct arch name for this string. Should be "xen-" /
"hvm-" or something
else given the hybrid model we are using on ARM?
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
xen/arch/arm/dummy.S | 1 -
xen/arch/arm/mm.c | 1 +
xen/arch/arm/setup.c | 12 ++++++++++++
3 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S
index da0b906..5010619 100644
--- a/xen/arch/arm/dummy.S
+++ b/xen/arch/arm/dummy.S
@@ -9,7 +9,6 @@ x: mov pc, lr
DUMMY(alloc_pirq_struct);
DUMMY(alloc_vcpu_guest_context);
DUMMY(arch_get_info_guest);
-DUMMY(arch_get_xen_caps);
DUMMY(arch_set_info_guest);
DUMMY(arch_vcpu_reset);
DUMMY(create_grant_host_mapping);
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 2c905ed..0cff726 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -24,6 +24,7 @@
#include <xen/init.h>
#include <xen/mm.h>
#include <xen/preempt.h>
+#include <xen/errno.h>
#include <asm/page.h>
#include <asm/current.h>
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index ddc2392..7762166 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -271,6 +271,18 @@ void __init start_xen(unsigned long boot_phys_offset,
reset_stack_and_jump(init_done);
}
+void arch_get_xen_caps(xen_capabilities_info_t *info)
+{
+ /* Interface name is always xen-3.0-* for Xen-3.x. */
+ int major = 3, minor = 0;
+ char s[32];
+
+ (*info)[0] = ''\0'';
+
+ snprintf(s, sizeof(s), "xen-%d.%d-armv7l ", major, minor);
+ safe_strcat(*info, s);
+}
+
/*
* Local variables:
* mode: C
--
1.7.2.5
Ian Campbell
2012-Feb-14 14:43 UTC
[PATCH 09/12] xen: make need_iommu == 0 if !HAS_PASSTHROUGH
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: keir@xen.org
---
xen/Rules.mk | 1 +
xen/arch/arm/dummy.S | 2 --
xen/include/xen/sched.h | 6 ++++++
3 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/xen/Rules.mk b/xen/Rules.mk
index ee54179..6123835 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -51,6 +51,7 @@ CFLAGS-$(perfc) += -DPERF_COUNTERS
CFLAGS-$(perfc_arrays) += -DPERF_ARRAYS
CFLAGS-$(lock_profile) += -DLOCK_PROFILE
CFLAGS-$(HAS_ACPI) += -DHAS_ACPI
+CFLAGS-$(HAS_PASSTHROUGH) += -DHAS_PASSTHROUGH
CFLAGS-$(frame_pointer) += -fno-omit-frame-pointer -DCONFIG_FRAME_POINTER
ifneq ($(max_phys_cpus),)
diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S
index 5010619..e858613 100644
--- a/xen/arch/arm/dummy.S
+++ b/xen/arch/arm/dummy.S
@@ -27,8 +27,6 @@ DUMMY(gmfn_to_mfn);
DUMMY(gnttab_clear_flag);
DUMMY(gnttab_mark_dirty);
DUMMY(hypercall_create_continuation);
-DUMMY(iommu_map_page);
-DUMMY(iommu_unmap_page);
DUMMY(is_iomem_page);
DUMMY(max_page);
DUMMY(node_online_map);
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 567cd36..3699929 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -266,8 +266,10 @@ struct domain
/* Is this an HVM guest? */
bool_t is_hvm;
+#ifdef HAS_PASSTHROUGH
/* Does this guest need iommu mappings? */
bool_t need_iommu;
+#endif
/* Is this guest fully privileged (aka dom0)? */
bool_t is_privileged;
/* Which guest this guest has privileges on */
@@ -687,7 +689,11 @@ void watchdog_domain_destroy(struct domain *d);
#define is_hvm_vcpu(v) (is_hvm_domain(v->domain))
#define is_pinned_vcpu(v) ((v)->domain->is_pinned || \
cpumask_weight((v)->cpu_affinity) == 1)
+#ifdef HAS_PASSTHROUGH
#define need_iommu(d) ((d)->need_iommu)
+#else
+#define need_iommu(d) (0)
+#endif
void set_vcpu_migration_delay(unsigned int delay);
unsigned int get_vcpu_migration_delay(void);
--
1.7.2.5
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
xen/arch/arm/dummy.S | 2 --
xen/arch/arm/p2m.c | 14 ++++++++++++++
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S
index e858613..67edb35 100644
--- a/xen/arch/arm/dummy.S
+++ b/xen/arch/arm/dummy.S
@@ -31,8 +31,6 @@ DUMMY(is_iomem_page);
DUMMY(max_page);
DUMMY(node_online_map);
DUMMY(nr_irqs_gsi);
-DUMMY(p2m_pod_decrease_reservation);
-DUMMY(guest_physmap_mark_populate_on_demand);
DUMMY(page_get_owner_and_reference);
DUMMY(page_is_ram_type);
DUMMY(per_cpu__cpu_core_mask);
diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
index a1d026d..14614fd 100644
--- a/xen/arch/arm/p2m.c
+++ b/xen/arch/arm/p2m.c
@@ -18,6 +18,20 @@ void p2m_load_VTTBR(struct domain *d)
isb(); /* Ensure update is visible */
}
+int guest_physmap_mark_populate_on_demand(struct domain *d,
+ unsigned long gfn,
+ unsigned int order)
+{
+ return -ENOSYS;
+}
+
+int p2m_pod_decrease_reservation(struct domain *d,
+ xen_pfn_t gpfn,
+ unsigned int order)
+{
+ return -ENOSYS;
+}
+
static int p2m_create_entry(struct domain *d,
lpae_t *entry)
{
--
1.7.2.5
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
xen/arch/arm/dummy.S | 1 -
xen/arch/arm/mm.c | 2 ++
xen/arch/arm/setup.c | 2 ++
3 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S
index 67edb35..295938e 100644
--- a/xen/arch/arm/dummy.S
+++ b/xen/arch/arm/dummy.S
@@ -28,7 +28,6 @@ DUMMY(gnttab_clear_flag);
DUMMY(gnttab_mark_dirty);
DUMMY(hypercall_create_continuation);
DUMMY(is_iomem_page);
-DUMMY(max_page);
DUMMY(node_online_map);
DUMMY(nr_irqs_gsi);
DUMMY(page_get_owner_and_reference);
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 0cff726..a0f39eb 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -43,6 +43,8 @@ unsigned long xenheap_virt_end;
unsigned long frametable_base_mfn;
unsigned long frametable_virt_end;
+unsigned long max_page;
+
/* Map a 4k page in a fixmap entry */
void set_fixmap(unsigned map, unsigned long mfn, unsigned attributes)
{
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index 7762166..4c1d89c 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -32,6 +32,7 @@
#include <xen/softirq.h>
#include <xen/keyhandler.h>
#include <xen/cpu.h>
+#include <xen/pfn.h>
#include <asm/page.h>
#include <asm/current.h>
#include <asm/setup.h>
@@ -141,6 +142,7 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t
dtb_size)
pfn_to_paddr(xenheap_mfn_start + xenheap_pages +
domheap_pages));
setup_frametable_mappings(ram_start, ram_end);
+ max_page = PFN_DOWN(ram_end);
/* Add xenheap memory that was not already added to the boot
allocator. */
--
1.7.2.5
Ian Campbell
2012-Feb-14 14:44 UTC
[PATCH 12/12] arm: Group remaining dummy symbols somewhat according to functionality
Makes it easier to see what needs to be done. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> --- xen/arch/arm/dummy.S | 69 +++++++++++++++++++++++++++++-------------------- 1 files changed, 41 insertions(+), 28 deletions(-) diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S index 295938e..3f2cc4b 100644 --- a/xen/arch/arm/dummy.S +++ b/xen/arch/arm/dummy.S @@ -6,48 +6,61 @@ x: .word 0xe7f000f0 /* Undefined instruction */ .globl x; \ x: mov pc, lr +/* SMP support */ +DUMMY(__cpu_die); +DUMMY(__cpu_disable); +DUMMY(__cpu_up); +DUMMY(per_cpu__cpu_core_mask); +DUMMY(per_cpu__cpu_sibling_mask); +DUMMY(node_online_map); +DUMMY(smp_send_state_dump); +DUMMY(__per_cpu_offset); + +/* PIRQ support */ DUMMY(alloc_pirq_struct); +DUMMY(nr_irqs_gsi); +DUMMY(pirq_guest_bind); +DUMMY(pirq_guest_unbind); +DUMMY(pirq_set_affinity); + +/* VCPU */ DUMMY(alloc_vcpu_guest_context); DUMMY(arch_get_info_guest); DUMMY(arch_set_info_guest); DUMMY(arch_vcpu_reset); +DUMMY(free_vcpu_guest_context); +DUMMY(sync_vcpu_execstate); +NOP(update_vcpu_system_time); +DUMMY(vcpu_mark_events_pending); +DUMMY(vcpu_show_execution_state); + +/* Page Reference & Type Maintenance */ +DUMMY(get_page); +DUMMY(get_page_type); +DUMMY(page_get_owner_and_reference); +DUMMY(put_page); +DUMMY(put_page_type); + +/* Grant Tables */ DUMMY(create_grant_host_mapping); -DUMMY(__cpu_die); -DUMMY(__cpu_disable); -DUMMY(__cpu_up); +DUMMY(gnttab_clear_flag); +DUMMY(gnttab_mark_dirty); +DUMMY(is_iomem_page); +DUMMY(replace_grant_host_mapping); +DUMMY(steal_page); + +/* Page Offlining */ +DUMMY(page_is_ram_type); + +/* Other */ DUMMY(domain_get_maximum_gpfn); DUMMY(domain_relinquish_resources); DUMMY(domain_set_time_offset); DUMMY(dom_cow); DUMMY(flush_tlb_mask); -DUMMY(free_vcpu_guest_context); -DUMMY(get_page); -DUMMY(get_page_type); DUMMY(gmfn_to_mfn); -DUMMY(gnttab_clear_flag); -DUMMY(gnttab_mark_dirty); DUMMY(hypercall_create_continuation); -DUMMY(is_iomem_page); -DUMMY(node_online_map); -DUMMY(nr_irqs_gsi); -DUMMY(page_get_owner_and_reference); -DUMMY(page_is_ram_type); -DUMMY(per_cpu__cpu_core_mask); -DUMMY(per_cpu__cpu_sibling_mask); -DUMMY(__per_cpu_offset); -DUMMY(pirq_guest_bind); -DUMMY(pirq_guest_unbind); -DUMMY(pirq_set_affinity); -DUMMY(put_page); -DUMMY(put_page_type); -DUMMY(replace_grant_host_mapping); DUMMY(send_timer_event); DUMMY(share_xen_page_with_privileged_guests); -DUMMY(smp_send_state_dump); -DUMMY(steal_page); -DUMMY(sync_vcpu_execstate); DUMMY(__udelay); -NOP(update_vcpu_system_time); -DUMMY(vcpu_mark_events_pending); -DUMMY(vcpu_show_execution_state); DUMMY(wallclock_time); -- 1.7.2.5
At 14:43 +0000 on 14 Feb (1329230611), Ian Campbell wrote:> Defines a few stubs and disables some as yet unsupported core features. > > Early on there''s a couple of unrelated cleanups. > > Patch against current unstable. #6 and #9 touch common code.For the ARM parts: Acked-by: Tim Deegan <tim@xen.org>
On Tue, 14 Feb 2012, Ian Campbell wrote:> Defines a few stubs and disables some as yet unsupported core features. > > Early on there''s a couple of unrelated cleanups. > > Patch against current unstable. #6 and #9 touch common code. > > Changes since v1: > - make PoD stubs proper functions instead of #defines > - define need_iommu as 0 instead of littering common code with #if > - stub donate_page but leave tmem enabled. > - rebased against latest unstable treeack
Keir Fraser
2012-Feb-14 18:32 UTC
Re: [PATCH 06/12] PM: only include XEN_SYSCTL_{get_pmstat, pm_op} if HAVE_ACPI
On 14/02/2012 14:43, "Ian Campbell" <ian.campbell@citrix.com> wrote:> These hypercalls are currently ACPI specific and implemented in > xen/drivers/acpi which is not implemented on ARM. > > Signed-off-by: Ian Campbell <ian.campbell@citrix.com>Acked-by: Keir Fraser <keir@xen.org>> Cc: keir@xen.org > --- > xen/Rules.mk | 1 + > xen/arch/arm/dummy.S | 2 -- > xen/common/sysctl.c | 2 ++ > 3 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/xen/Rules.mk b/xen/Rules.mk > index 507e9ab..ee54179 100644 > --- a/xen/Rules.mk > +++ b/xen/Rules.mk > @@ -50,6 +50,7 @@ CFLAGS-$(crash_debug) += -DCRASH_DEBUG > CFLAGS-$(perfc) += -DPERF_COUNTERS > CFLAGS-$(perfc_arrays) += -DPERF_ARRAYS > CFLAGS-$(lock_profile) += -DLOCK_PROFILE > +CFLAGS-$(HAS_ACPI) += -DHAS_ACPI > CFLAGS-$(frame_pointer) += -fno-omit-frame-pointer -DCONFIG_FRAME_POINTER > > ifneq ($(max_phys_cpus),) > diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S > index 1287e0b..3bf5226 100644 > --- a/xen/arch/arm/dummy.S > +++ b/xen/arch/arm/dummy.S > @@ -16,13 +16,11 @@ DUMMY(create_grant_host_mapping); > DUMMY(__cpu_die); > DUMMY(__cpu_disable); > DUMMY(__cpu_up); > -DUMMY(do_get_pm_info); > DUMMY(domain_get_maximum_gpfn); > DUMMY(domain_relinquish_resources); > DUMMY(domain_set_time_offset); > DUMMY(dom_cow); > DUMMY(donate_page); > -DUMMY(do_pm_op); > DUMMY(flush_tlb_mask); > DUMMY(free_vcpu_guest_context); > DUMMY(get_page); > diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c > index f8f7cf8..fef0589 100644 > --- a/xen/common/sysctl.c > +++ b/xen/common/sysctl.c > @@ -224,6 +224,7 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) > } > break; > > +#ifdef HAS_ACPI > case XEN_SYSCTL_get_pmstat: > { > ret = xsm_get_pmstat(); > @@ -259,6 +260,7 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) > } > } > break; > +#endif > > case XEN_SYSCTL_page_offline_op: > {
Keir Fraser
2012-Feb-14 18:33 UTC
Re: [PATCH 09/12] xen: make need_iommu == 0 if !HAS_PASSTHROUGH
On 14/02/2012 14:43, "Ian Campbell" <ian.campbell@citrix.com> wrote:> Signed-off-by: Ian Campbell <ian.campbell@citrix.com>Acked-by: Keir Fraser <keir@xen.org>> Cc: keir@xen.org > --- > xen/Rules.mk | 1 + > xen/arch/arm/dummy.S | 2 -- > xen/include/xen/sched.h | 6 ++++++ > 3 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/xen/Rules.mk b/xen/Rules.mk > index ee54179..6123835 100644 > --- a/xen/Rules.mk > +++ b/xen/Rules.mk > @@ -51,6 +51,7 @@ CFLAGS-$(perfc) += -DPERF_COUNTERS > CFLAGS-$(perfc_arrays) += -DPERF_ARRAYS > CFLAGS-$(lock_profile) += -DLOCK_PROFILE > CFLAGS-$(HAS_ACPI) += -DHAS_ACPI > +CFLAGS-$(HAS_PASSTHROUGH) += -DHAS_PASSTHROUGH > CFLAGS-$(frame_pointer) += -fno-omit-frame-pointer -DCONFIG_FRAME_POINTER > > ifneq ($(max_phys_cpus),) > diff --git a/xen/arch/arm/dummy.S b/xen/arch/arm/dummy.S > index 5010619..e858613 100644 > --- a/xen/arch/arm/dummy.S > +++ b/xen/arch/arm/dummy.S > @@ -27,8 +27,6 @@ DUMMY(gmfn_to_mfn); > DUMMY(gnttab_clear_flag); > DUMMY(gnttab_mark_dirty); > DUMMY(hypercall_create_continuation); > -DUMMY(iommu_map_page); > -DUMMY(iommu_unmap_page); > DUMMY(is_iomem_page); > DUMMY(max_page); > DUMMY(node_online_map); > diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h > index 567cd36..3699929 100644 > --- a/xen/include/xen/sched.h > +++ b/xen/include/xen/sched.h > @@ -266,8 +266,10 @@ struct domain > > /* Is this an HVM guest? */ > bool_t is_hvm; > +#ifdef HAS_PASSTHROUGH > /* Does this guest need iommu mappings? */ > bool_t need_iommu; > +#endif > /* Is this guest fully privileged (aka dom0)? */ > bool_t is_privileged; > /* Which guest this guest has privileges on */ > @@ -687,7 +689,11 @@ void watchdog_domain_destroy(struct domain *d); > #define is_hvm_vcpu(v) (is_hvm_domain(v->domain)) > #define is_pinned_vcpu(v) ((v)->domain->is_pinned || \ > cpumask_weight((v)->cpu_affinity) == 1) > +#ifdef HAS_PASSTHROUGH > #define need_iommu(d) ((d)->need_iommu) > +#else > +#define need_iommu(d) (0) > +#endif > > void set_vcpu_migration_delay(unsigned int delay); > unsigned int get_vcpu_migration_delay(void);
On Tue, 2012-02-14 at 14:43 +0000, Ian Campbell wrote:> Defines a few stubs and disables some as yet unsupported core features. > > Early on there''s a couple of unrelated cleanups. > > Patch against current unstable. #6 and #9 touch common code. > > Changes since v1: > - make PoD stubs proper functions instead of #defines > - define need_iommu as 0 instead of littering common code with #if > - stub donate_page but leave tmem enabled. > - rebased against latest unstable treeCommitted with Acks from Tim & Stefano dfor the ARM bits and Keir for the non-ARM bits. Thanks, Ian.