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

Reply via email to