git: 62e6ca0f07e4 - main - ps(1): clean up after swapout removal
Date: Sat, 09 Nov 2024 17:25:12 UTC
The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=62e6ca0f07e448da27cb2cc8165e749e7fdfcd7e commit 62e6ca0f07e448da27cb2cc8165e749e7fdfcd7e Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2024-11-09 01:37:07 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2024-11-09 17:22:42 +0000 ps(1): clean up after swapout removal The process flag P_INMEM is always set. Eliminate all checks for the bit. Also eliminate LAZY_PS define and code covered by it: we do not have an u-area for long time, and it cannot be swapped out. Also eliminate setting controlled by the '-f' switch, but accept it for backward compatibility. The 'W' process secondary state (swapped out) is impossible, stop calculating it. Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D47492 --- bin/ps/Makefile | 7 ------- bin/ps/print.c | 6 +----- bin/ps/ps.1 | 9 +-------- bin/ps/ps.c | 41 ++++++++--------------------------------- 4 files changed, 10 insertions(+), 53 deletions(-) diff --git a/bin/ps/Makefile b/bin/ps/Makefile index a25b6a796ed0..71973b34dd24 100644 --- a/bin/ps/Makefile +++ b/bin/ps/Makefile @@ -2,13 +2,6 @@ PACKAGE=runtime PROG= ps SRCS= fmt.c keyword.c nlist.c print.c ps.c -# -# To support "lazy" ps for non root/wheel users -# add -DLAZY_PS to the cflags. This helps -# keep ps from being an unnecessary load -# on large systems. -# -CFLAGS+=-DLAZY_PS LIBADD= m kvm jail xo .include <bsd.prog.mk> diff --git a/bin/ps/print.c b/bin/ps/print.c index a3423d8b3956..59631fb66a10 100644 --- a/bin/ps/print.c +++ b/bin/ps/print.c @@ -253,8 +253,6 @@ state(KINFO *k, VARENT *ve __unused) *cp = '?'; } cp++; - if (!(flag & P_INMEM)) - *cp++ = 'W'; if (k->ki_p->ki_nice < NZERO || k->ki_p->ki_pri.pri_class == PRI_REALTIME) *cp++ = '<'; else if (k->ki_p->ki_nice > NZERO || k->ki_p->ki_pri.pri_class == PRI_IDLE) @@ -633,7 +631,7 @@ getpcpu(const KINFO *k) #define fxtofl(fixpt) ((double)(fixpt) / fscale) /* XXX - I don't like this */ - if (k->ki_p->ki_swtime == 0 || (k->ki_p->ki_flag & P_INMEM) == 0) + if (k->ki_p->ki_swtime == 0) return (0.0); if (rawcpu) return (100.0 * fxtofl(k->ki_p->ki_pctcpu)); @@ -661,8 +659,6 @@ getpmem(KINFO *k) if (failure) return (0.0); - if ((k->ki_p->ki_flag & P_INMEM) == 0) - return (0.0); /* XXX want pmap ptpages, segtab, etc. (per architecture) */ /* XXX don't have info about shared */ fracmem = ((double)k->ki_p->ki_rssize) / mempages; diff --git a/bin/ps/ps.1 b/bin/ps/ps.1 index 828239fd2ba9..8ece5b1bbfad 100644 --- a/bin/ps/ps.1 +++ b/bin/ps/ps.1 @@ -159,9 +159,6 @@ does not imply but works well with it. .It Fl e Display the environment as well. -.It Fl f -Show command-line and environment information about swapped out processes. -This option is honored only if the UID of the user is 0. .It Fl G Display information about processes which are running with the specified real group IDs. @@ -358,9 +355,7 @@ the include file .It Dv "P_TOTAL_STOP" Ta No "0x02000000" Ta "Stopped for system suspend" .It Dv "P_INEXEC" Ta No "0x04000000" Ta Process is in Xr execve 2 .It Dv "P_STATCHILD" Ta No "0x08000000" Ta "Child process stopped or exited" -.It Dv "P_INMEM" Ta No "0x10000000" Ta "Loaded into memory" -.It Dv "P_SWAPPINGOUT" Ta No "0x20000000" Ta "Process is being swapped out" -.It Dv "P_SWAPPINGIN" Ta No "0x40000000" Ta "Process is being swapped in" +.It Dv "P_INMEM" Ta No "0x10000000" Ta "Always set, unused" .It Dv "P_PPTRACE" Ta No "0x80000000" Ta "Vforked child issued ptrace(PT_TRACEME)" .El .It Cm flags2 @@ -491,8 +486,6 @@ The process is a session leader. The process' parent is suspended during a .Xr vfork 2 , waiting for the process to exec or exit. -.It Li W -The process is swapped out. .It Li X The process is being traced or debugged. .El diff --git a/bin/ps/ps.c b/bin/ps/ps.c index b0af2bdf37ca..49c69bb76084 100644 --- a/bin/ps/ps.c +++ b/bin/ps/ps.c @@ -68,14 +68,6 @@ #define W_SEP " \t" /* "Whitespace" list separators */ #define T_SEP "," /* "Terminate-element" list separators */ -#ifdef LAZY_PS -#define DEF_UREAD 0 -#define OPT_LAZY_f "f" -#else -#define DEF_UREAD 1 /* Always do the more-expensive read. */ -#define OPT_LAZY_f /* I.e., the `-f' option is not added. */ -#endif - /* * isdigit takes an `int', but expects values in the range of unsigned char. * This wrapper ensures that values from a 'char' end up in the correct range. @@ -92,7 +84,6 @@ int showthreads; /* will threads be shown? */ struct velisthead varlist = STAILQ_HEAD_INITIALIZER(varlist); -static int forceuread = DEF_UREAD; /* Do extra work to get u-area. */ static kvm_t *kd; static int needcomm; /* -o "command" */ static int needenv; /* -e */ @@ -154,7 +145,7 @@ static char vfmt[] = "pid,state,time,sl,re,pagein,vsz,rss,lim,tsiz," "%cpu,%mem,command"; static char Zfmt[] = "label"; -#define PS_ARGS "AaCcD:de" OPT_LAZY_f "G:gHhjJ:LlM:mN:O:o:p:rSTt:U:uvwXxZ" +#define PS_ARGS "AaCcD:defG:gHhjJ:LlM:mN:O:o:p:rSTt:U:uvwXxZ" int main(int argc, char *argv[]) @@ -272,12 +263,9 @@ main(int argc, char *argv[]) case 'e': /* XXX set ufmt */ needenv = 1; break; -#ifdef LAZY_PS case 'f': - if (getuid() == 0 || getgid() == 0) - forceuread = 1; + /* compat */ break; -#endif case 'G': add_list(&gidlist, optarg); xkeep_implied = 1; @@ -1276,31 +1264,21 @@ fmt(char **(*fn)(kvm_t *, const struct kinfo_proc *, int), KINFO *ki, return (s); } -#define UREADOK(ki) (forceuread || (ki->ki_p->ki_flag & P_INMEM)) - static void saveuser(KINFO *ki) { char tdname[COMMLEN + 1]; char *argsp; - if (ki->ki_p->ki_flag & P_INMEM) { - /* - * The u-area might be swapped out, and we can't get - * at it because we have a crashdump and no swap. - * If it's here fill in these fields, otherwise, just - * leave them 0. - */ - ki->ki_valid = 1; - } else - ki->ki_valid = 0; + ki->ki_valid = 1; + /* * save arguments if needed */ if (needcomm) { if (ki->ki_p->ki_stat == SZOMB) { ki->ki_args = strdup("<defunct>"); - } else if (UREADOK(ki) || (ki->ki_p->ki_args != NULL)) { + } else if (ki->ki_p->ki_args != NULL) { (void)snprintf(tdname, sizeof(tdname), "%s%s", ki->ki_p->ki_tdname, ki->ki_p->ki_moretdname); ki->ki_args = fmt(kvm_getargv, ki, @@ -1315,11 +1293,8 @@ saveuser(KINFO *ki) ki->ki_args = NULL; } if (needenv) { - if (UREADOK(ki)) - ki->ki_env = fmt(kvm_getenvv, ki, - (char *)NULL, (char *)NULL, 0); - else - ki->ki_env = strdup("()"); + ki->ki_env = fmt(kvm_getenvv, ki, (char *)NULL, + (char *)NULL, 0); if (ki->ki_env == NULL) xo_errx(1, "malloc failed"); } else { @@ -1479,7 +1454,7 @@ pidmax_init(void) static void __dead2 usage(void) { -#define SINGLE_OPTS "[-aCcde" OPT_LAZY_f "HhjlmrSTuvwXxZ]" +#define SINGLE_OPTS "[-aCcdeHhjlmrSTuvwXxZ]" xo_error("%s\n%s\n%s\n%s\n%s\n", "usage: ps [--libxo] " SINGLE_OPTS " [-O fmt | -o fmt]",