> 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 > >