On 07/29, Martin Natano wrote: > Words are more descriptive than numbers. Let's use them! > > This diff removes > > sysctl machdep.lidaction=0 > sysctl machdep.lidaction=1 > sysctl machdep.lidaction=2 > > in favor of the more descriptive > > sysctl machdep.lidaction=none > sysctl machdep.lidaction=suspend > sysctl machdep.lidaction=hibernate > > as requested by deraadt. > > Given that there is a diff for poweroff (which I want to see go in) > floating around on tech@, it might be a good idea to switch now, so > the numbering doesn't get out of hand. > > Of course this means people will have to update their /etc/sysctl.conf > _again_. Sorry for that, I missed the opportunity to do both lidaction > changes in one big swoop. > > Do we want to go there? > > natano > > > Index: etc/etc.amd64/sysctl.conf > =================================================================== > RCS file: /cvs/src/etc/etc.amd64/sysctl.conf,v > retrieving revision 1.7 > diff -u -p -r1.7 sysctl.conf > --- etc/etc.amd64/sysctl.conf 2 Mar 2017 10:38:09 -0000 1.7 > +++ etc/etc.amd64/sysctl.conf 25 Jul 2017 18:40:31 -0000 > @@ -1,3 +1,3 @@ > #machdep.allowaperture=2 # See xf86(4) > #machdep.kbdreset=1 # permit console CTRL-ALT-DEL to do a nice halt > -#machdep.lidaction=0 # 1=suspend, 2=hibernate laptop upon lid closing > +#machdep.lidaction=none # action upon lid closing: none, > suspend or hibernate > Index: etc/etc.i386/sysctl.conf > =================================================================== > RCS file: /cvs/src/etc/etc.i386/sysctl.conf,v > retrieving revision 1.21 > diff -u -p -r1.21 sysctl.conf > --- etc/etc.i386/sysctl.conf 2 Mar 2017 10:38:09 -0000 1.21 > +++ etc/etc.i386/sysctl.conf 25 Jul 2017 18:40:35 -0000 > @@ -1,4 +1,4 @@ > #machdep.allowaperture=2 # See xf86(4) > #machdep.apmhalt=1 # 1=powerdown hack, try if halt -p doesn't work > #machdep.kbdreset=1 # permit console CTRL-ALT-DEL to do a nice halt > -#machdep.lidaction=0 # 1=suspend, 2=hibernate laptop upon lid closing > +#machdep.lidaction=none # action upon lid closing: none, > suspend or hibernate > Index: etc/etc.loongson/sysctl.conf > =================================================================== > RCS file: /cvs/src/etc/etc.loongson/sysctl.conf,v > retrieving revision 1.4 > diff -u -p -r1.4 sysctl.conf > --- etc/etc.loongson/sysctl.conf 2 Mar 2017 10:38:09 -0000 1.4 > +++ etc/etc.loongson/sysctl.conf 25 Jul 2017 18:40:40 -0000 > @@ -1 +1 @@ > -#machdep.lidaction=0 # 1=suspend, 2=hibernate laptop upon lid closing > +#machdep.lidaction=none # action upon lid closing: none, > suspend or hibernate > Index: sys/arch/amd64/amd64/machdep.c > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/amd64/machdep.c,v > retrieving revision 1.231 > diff -u -p -r1.231 machdep.c > --- sys/arch/amd64/amd64/machdep.c 12 Jul 2017 06:26:32 -0000 1.231 > +++ sys/arch/amd64/amd64/machdep.c 25 Jul 2017 19:37:22 -0000 > @@ -264,6 +264,8 @@ void map_tramps(void); > void init_x86_64(paddr_t); > void (*cpuresetfn)(void); > > +int sysctl_cpulidaction(void *, size_t *, void *, size_t); > + > #ifdef APERTURE > int allowaperture = 0; > #endif > @@ -428,7 +430,7 @@ cpu_sysctl(int *name, u_int namelen, voi > extern int amd64_has_xcrypt; > dev_t consdev; > dev_t dev; > - int val, error; > + int error; > > switch (name[0]) { > case CPU_CONSDEV: > @@ -477,15 +479,7 @@ cpu_sysctl(int *name, u_int namelen, voi > case CPU_XCRYPT: > return (sysctl_rdint(oldp, oldlenp, newp, amd64_has_xcrypt)); > case CPU_LIDACTION: > - val = lid_action; > - error = sysctl_int(oldp, oldlenp, newp, newlen, &val); > - if (!error) { > - if (val < 0 || val > 2) > - error = EINVAL; > - else > - lid_action = val; > - } > - return (error); > + return (sysctl_cpulidaction(oldp, oldlenp, newp, newlen)); > #if NPCKBC > 0 && NUKBD > 0 > case CPU_FORCEUKBD: > if (forceukbd) > @@ -500,6 +494,47 @@ cpu_sysctl(int *name, u_int namelen, voi > return (EOPNOTSUPP); > } > /* NOTREACHED */ > +} > + > +int > +sysctl_cpulidaction(void *oldp, size_t *oldlenp, void *newp, size_t newlen) > +{ > + char action[10]; > + int error; > + > + switch (lid_action) { > + case 0: > + default: > + strlcpy(action, "none", sizeof(action)); > + break; > + case 1: > + strlcpy(action, "suspend", sizeof(action)); > + break; > +#ifdef HIBERNATE > + case 2: > + strlcpy(action, "hibernate", sizeof(action)); > + break; > +#endif > + } > + > + error = sysctl_string(oldp, oldlenp, newp, newlen, action, > sizeof(action)); > + if (error) > + return error; > + > + if (newp != NULL) { > + if (strcmp(action, "none") == 0) > + lid_action = 0; > + else if (strcmp(action, "suspend") == 0) > + lid_action = 1; > +#ifdef HIBERNATE > + else if (strcmp(action, "hibernate") == 0) > + lid_action = 2; > +#endif > + else > + return EINVAL; > + } > + > + return 0; > } > > /* > Index: sys/arch/amd64/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/include/cpu.h,v > retrieving revision 1.113 > diff -u -p -r1.113 cpu.h > --- sys/arch/amd64/include/cpu.h 12 Jul 2017 06:26:32 -0000 1.113 > +++ sys/arch/amd64/include/cpu.h 23 Jul 2017 16:22:37 -0000 > @@ -446,7 +446,7 @@ void mp_setperf_init(void); > { "apmhalt", CTLTYPE_INT }, \ > { "xcrypt", CTLTYPE_INT }, \ > { 0, 0 }, \ > - { "lidaction", CTLTYPE_INT }, \ > + { "lidaction", CTLTYPE_STRING }, \ > { "forceukbd", CTLTYPE_INT }, \ > } > > Index: sys/arch/arm/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/arm/include/cpu.h,v > retrieving revision 1.47 > diff -u -p -r1.47 cpu.h > --- sys/arch/arm/include/cpu.h 12 Jul 2017 06:26:32 -0000 1.47 > +++ sys/arch/arm/include/cpu.h 23 Jul 2017 16:22:46 -0000 > @@ -83,7 +83,7 @@ > { 0, 0 }, \ > { "maxspeed", CTLTYPE_INT }, \ > { 0, 0 }, \ > - { "lidaction", CTLTYPE_INT }, \ > + { "lidaction", CTLTYPE_STRING }, \ > } > > #ifdef _KERNEL > Index: sys/arch/i386/i386/machdep.c > =================================================================== > RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v > retrieving revision 1.604 > diff -u -p -r1.604 machdep.c > --- sys/arch/i386/i386/machdep.c 12 Jul 2017 06:26:32 -0000 1.604 > +++ sys/arch/i386/i386/machdep.c 25 Jul 2017 19:34:27 -0000 > @@ -325,6 +325,8 @@ int pentium_cpuspeed(int *); > void cpu_check_vmm_cap(struct cpu_info *); > #endif /* NVMM > 0 */ > > +int sysctl_cpulidaction(void *, size_t *, void *, size_t); > + > static __inline u_char > cyrix_read_reg(u_char reg) > { > @@ -3485,7 +3487,7 @@ cpu_sysctl(int *name, u_int namelen, voi > size_t newlen, struct proc *p) > { > dev_t dev; > - int val, error; > + int error; > > switch (name[0]) { > case CPU_CONSDEV: > @@ -3551,15 +3553,7 @@ cpu_sysctl(int *name, u_int namelen, voi > case CPU_XCRYPT: > return (sysctl_rdint(oldp, oldlenp, newp, i386_has_xcrypt)); > case CPU_LIDACTION: > - val = lid_action; > - error = sysctl_int(oldp, oldlenp, newp, newlen, &val); > - if (!error) { > - if (val < 0 || val > 2) > - error = EINVAL; > - else > - lid_action = val; > - } > - return (error); > + return (sysctl_cpulidaction(oldp, oldlenp, newp, newlen)); > #if NPCKBC > 0 && NUKBD > 0 > case CPU_FORCEUKBD: > if (forceukbd) > @@ -3574,6 +3568,47 @@ cpu_sysctl(int *name, u_int namelen, voi > return (EOPNOTSUPP); > } > /* NOTREACHED */ > +} > + > +int > +sysctl_cpulidaction(void *oldp, size_t *oldlenp, void *newp, size_t newlen) > +{ > + char action[10]; > + int error; > + > + switch (lid_action) { > + case 0: > + default: > + strlcpy(action, "none", sizeof(action)); > + break; > + case 1: > + strlcpy(action, "suspend", sizeof(action)); > + break; > +#ifdef HIBERNATE > + case 2: > + strlcpy(action, "hibernate", sizeof(action)); > + break; > +#endif > + } > + > + error = sysctl_string(oldp, oldlenp, newp, newlen, action, > sizeof(action)); > + if (error) > + return error; > + > + if (newp != NULL) { > + if (strcmp(action, "none") == 0) > + lid_action = 0; > + else if (strcmp(action, "suspend") == 0) > + lid_action = 1; > +#ifdef HIBERNATE > + else if (strcmp(action, "hibernate") == 0) > + lid_action = 2; > +#endif > + else > + return EINVAL; > + } > + > + return 0; > } > > int > Index: sys/arch/i386/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/i386/include/cpu.h,v > retrieving revision 1.156 > diff -u -p -r1.156 cpu.h > --- sys/arch/i386/include/cpu.h 12 Jul 2017 06:26:33 -0000 1.156 > +++ sys/arch/i386/include/cpu.h 23 Jul 2017 16:22:53 -0000 > @@ -546,7 +546,7 @@ int cpu_paenable(void *); > { "sse2", CTLTYPE_INT }, \ > { "xcrypt", CTLTYPE_INT }, \ > { 0, 0 }, \ > - { "lidaction", CTLTYPE_INT }, \ > + { "lidaction", CTLTYPE_STRING }, \ > { "forceukbd", CTLTYPE_INT }, \ > } > > Index: sys/arch/loongson/loongson/machdep.c > =================================================================== > RCS file: /cvs/src/sys/arch/loongson/loongson/machdep.c,v > retrieving revision 1.79 > diff -u -p -r1.79 machdep.c > --- sys/arch/loongson/loongson/machdep.c 12 Jul 2017 06:26:33 -0000 > 1.79 > +++ sys/arch/loongson/loongson/machdep.c 25 Jul 2017 19:33:32 -0000 > @@ -152,6 +152,8 @@ extern void parsepmonbp(void); > const struct platform *loongson_identify(const char *, int); > vaddr_t mips_init(uint64_t, uint64_t, uint64_t, uint64_t, char *); > > +int sysctl_cpulidaction(void *, size_t *, void *, size_t); > + > extern void htb_early_setup(void); > > extern void loongson2e_setup(u_long, u_long); > @@ -1021,26 +1023,57 @@ int > cpu_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, > size_t newlen, struct proc *p) > { > - int val, error; > - > /* All sysctl names at this level are terminal. */ > if (namelen != 1) > return ENOTDIR; /* Overloaded */ > > switch (name[0]) { > case CPU_LIDACTION: > - val = lid_action; > - error = sysctl_int(oldp, oldlenp, newp, newlen, &val); > - if (!error) { > - if (val < 0 || val > 2) > - error = EINVAL; > - else > - lid_action = val; > - } > - return error; > + return (sysctl_cpulidaction(oldp, oldlenp, newp, newlen)); > default: > return EOPNOTSUPP; > } > +} > + > +int > +sysctl_cpulidaction(void *oldp, size_t *oldlenp, void *newp, size_t newlen) > +{ > + char action[10]; > + int error; > + > + switch (lid_action) { > + case 0: > + default: > + strlcpy(action, "none", sizeof(action)); > + break; > + case 1: > + strlcpy(action, "suspend", sizeof(action)); > + break; > +#ifdef HIBERNATE > + case 2: > + strlcpy(action, "hibernate", sizeof(action)); > + break; > +#endif > + } > + > + error = sysctl_string(oldp, oldlenp, newp, newlen, action, > sizeof(action)); > + if (error) > + return error; > + > + if (newp != NULL) { > + if (strcmp(action, "none") == 0) > + lid_action = 0; > + else if (strcmp(action, "suspend") == 0) > + lid_action = 1; > +#ifdef HIBERNATE > + else if (strcmp(action, "hibernate") == 0) > + lid_action = 2; > +#endif > + else > + return EINVAL; > + } > + > + return 0; > } > > int waittime = -1; > Index: sys/arch/mips64/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/mips64/include/cpu.h,v > retrieving revision 1.119 > diff -u -p -r1.119 cpu.h > --- sys/arch/mips64/include/cpu.h 12 Jul 2017 06:26:33 -0000 1.119 > +++ sys/arch/mips64/include/cpu.h 23 Jul 2017 16:23:02 -0000 > @@ -373,7 +373,7 @@ void cp0_calibrate(struct cpu_info *); > { "allowaperture", CTLTYPE_INT }, \ > { 0, 0 }, \ > { 0, 0 }, \ > - { "lidaction", CTLTYPE_INT }, \ > + { "lidaction", CTLTYPE_STRING }, \ > } > > /* > Index: sbin/init/init.c > =================================================================== > RCS file: /cvs/src/sbin/init/init.c,v > retrieving revision 1.65 > diff -u -p -r1.65 init.c > --- sbin/init/init.c 16 Jun 2017 06:46:54 -0000 1.65 > +++ sbin/init/init.c 26 Jul 2017 19:11:02 -0000 > @@ -1327,10 +1327,10 @@ f_nice_death(void) > > #ifdef CPU_LIDACTION > int mib[] = {CTL_MACHDEP, CPU_LIDACTION}; > - int lidaction = 0; > + char lidaction[] = "none"; > > if ((death_howto & RB_POWERDOWN) && > - (sysctl(mib, 2, NULL, NULL, &lidaction, > + (sysctl(mib, 2, NULL, NULL, lidaction, > sizeof(lidaction)) == -1) && (errno != EOPNOTSUPP)) > warning("cannot disable lid action"); > #endif > Index: sbin/reboot/reboot.c > =================================================================== > RCS file: /cvs/src/sbin/reboot/reboot.c,v > retrieving revision 1.37 > diff -u -p -r1.37 reboot.c > --- sbin/reboot/reboot.c 16 Jun 2017 06:46:54 -0000 1.37 > +++ sbin/reboot/reboot.c 26 Jul 2017 19:14:19 -0000 > @@ -116,9 +116,9 @@ main(int argc, char *argv[]) > if (howto & RB_POWERDOWN) { > /* Disable suspending on laptop lid close */ > int mib[] = {CTL_MACHDEP, CPU_LIDACTION}; > - int lidaction = 0; > + char lidaction[] = "none"; > > - if (sysctl(mib, 2, NULL, NULL, &lidaction, > + if (sysctl(mib, 2, NULL, NULL, lidaction, > sizeof(lidaction)) == -1 && errno != EOPNOTSUPP) > warn("sysctl"); > }
Hey Martin, Thanks for the feedback on my patch, I'll rebase my work once this patch has been merged in tree. Thanks, Marco