> Date: Tue, 3 May 2016 12:17:03 +0200 (CEST)
> From: Mark Kettenis <[email protected]>
> 
> > Date: Tue, 3 May 2016 01:57:53 -0700
> > From: Mike Larkin <[email protected]>
> > 
> > On Tue, May 03, 2016 at 03:59:33PM +0800, Ray Lai wrote:
> > > This commit broke resume on my x200:
> > > 
> > > https://marc.info/?l=openbsd-cvs&m=146194866402207&w=2
> > > 
> > > > CVSROOT:        /cvs
> > > > Module name:    src
> > > > Changes by:     [email protected]    2016/04/29 10:49:53
> > > > 
> > > > Modified files:
> > > >         sys/arch/amd64/amd64: cpu.c 
> > > >         sys/arch/i386/i386: cpu.c 
> > > >         sys/arch/sparc64/sparc64: cpu.c 
> > > > 
> > > > Log message:
> > > > Call sched_init_cpu() just before booting secondary CPUs.
> > > > 
> > > > This prevent the scheduler from scheduling tasks to CPUs not beeing able
> > > > to execute them during the boot process.
> > > > 
> > > > ok visa@, kettenis@
> > > 
> > 
> > Thank you for identifying the commit. As subsequently reported,
> > kettenis has temporarily reverted this until we can find a better way.
> 
> I think this is a better way to fix things.

Oh, I only tested this on sparc64.  Probably should get tested on some
i386/amd64 laptops as well to see if they still suspend/resume.

Index: sys/kern/kern_sched.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_sched.c,v
retrieving revision 1.42
diff -u -p -r1.42 kern_sched.c
--- sys/kern/kern_sched.c       17 Mar 2016 13:18:47 -0000      1.42
+++ sys/kern/kern_sched.c       3 May 2016 10:14:52 -0000
@@ -97,7 +97,13 @@ sched_init_cpu(struct cpu_info *ci)
         * structures.
         */
        cpuset_init_cpu(ci);
-       cpuset_add(&sched_all_cpus, ci);
+
+       /* 
+        * Delay scheduling processes onto the secondary CPUs until
+        * they're actually running.
+        */
+       if (CPU_IS_PRIMARY(ci))
+               cpuset_add(&sched_all_cpus, ci);
 }
 
 void
Index: sys/kern/init_main.c
===================================================================
RCS file: /cvs/src/sys/kern/init_main.c,v
retrieving revision 1.249
diff -u -p -r1.249 init_main.c
--- sys/kern/init_main.c        19 Mar 2016 12:04:15 -0000      1.249
+++ sys/kern/init_main.c        3 May 2016 10:14:52 -0000
@@ -534,6 +534,7 @@ main(void *framep)
 #if defined(MULTIPROCESSOR)
        /* Boot the secondary processors. */
        cpu_boot_secondary_processors();
+       sched_start_secondary_cpus();
 #endif
 
        config_process_deferred_mountroot();

Reply via email to