> Date: Thu, 5 Jan 2017 14:05:16 +0100
> From: Patrick Wildt <patr...@blueri.se>
> 
> 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
> 
> 

Reply via email to