> Date: Thu, 5 Jan 2017 14:05:16 +0100
> From: Patrick Wildt <[email protected]>
>
> Hi,
>
> we don't have SMP, but there are a few things one could start with
> already. For instance allowing the code to work/compile, even though
> not all components are there yet.
>
> This diff allows allocating the idle pcb / kernelstack. Rename of
> idlepcb to idle_pcb to be comparable with amd64.
>
> ok?
Sure.
> diff --git a/sys/arch/arm/arm/cpu.c b/sys/arch/arm/arm/cpu.c
> index 66596231528..91dd49bb00c 100644
> --- a/sys/arch/arm/arm/cpu.c
> +++ b/sys/arch/arm/arm/cpu.c
> @@ -48,6 +48,7 @@
> #include <sys/systm.h>
> #include <sys/malloc.h>
> #include <sys/device.h>
> +#include <sys/user.h>
> #include <sys/proc.h>
> #include <sys/conf.h>
> #include <sys/sched.h>
> @@ -293,24 +294,23 @@ identify_arm_cpu(struct device *dv, struct cpu_info *ci)
>
> #ifdef MULTIPROCESSOR
> int
> -cpu_alloc_idlepcb(struct cpu_info *ci)
> +cpu_alloc_idle_pcb(struct cpu_info *ci)
> {
> vaddr_t uaddr;
> struct pcb *pcb;
> struct trapframe *tf;
> - int error;
>
> /*
> * Generate a kernel stack and PCB (in essence, a u-area) for the
> * new CPU.
> */
> - if (uvm_uarea_alloc(&uaddr)) {
> - error = uvm_fault_wire(kernel_map, uaddr, uaddr + USPACE,
> - VM_FAULT_WIRE, PROT_READ | PROT_WRITE);
> - if (error)
> - return error;
> + uaddr = (vaddr_t)km_alloc(USPACE, &kv_any, &kp_zero, &kd_nowait);
> + if (uaddr == 0) {
> + printf("%s: unable to allocate idle stack\n",
> + __func__);
> + return ENOMEM;
> }
> - ci->ci_idlepcb = pcb = (struct pcb *)uaddr;
> + ci->ci_idle_pcb = pcb = (struct pcb *)uaddr;
>
> /*
> * This code is largely derived from cpu_fork(), with which it
> diff --git a/sys/arch/arm/include/cpu.h b/sys/arch/arm/include/cpu.h
> index f56c12b7d90..aa8360abcfb 100644
> --- a/sys/arch/arm/include/cpu.h
> +++ b/sys/arch/arm/include/cpu.h
> @@ -187,6 +187,7 @@ struct cpu_info {
> u_int32_t ci_randseed;
>
> struct pcb *ci_curpcb;
> + struct pcb *ci_idle_pcb;
>
> u_int32_t ci_arm_cpuid; /* aggregate CPU id */
> u_int32_t ci_arm_cputype; /* CPU type */
> @@ -283,8 +284,8 @@ extern int want_resched; /* resched() was called */
> */
>
> struct device;
> -void cpu_attach (struct device *);
> -int cpu_alloc_idlepcb (struct cpu_info *);
> +void cpu_attach(struct device *);
> +int cpu_alloc_idle_pcb(struct cpu_info *);
>
> /*
> * Random cruft
>
>