get fproc table. don't print size as that doesn't say much in VM mode.
this restores ps.
This commit is contained in:
		
							parent
							
								
									e4e3995fb0
								
							
						
					
					
						commit
						8beff61807
					
				| @ -112,9 +112,6 @@ size_t n_ttyinfo;		/* Number of tty info slots */ | |||||||
| 
 | 
 | ||||||
| /* Number of tasks and processes and addresses of the main process tables. */ | /* Number of tasks and processes and addresses of the main process tables. */ | ||||||
| int nr_tasks, nr_procs;		 | int nr_tasks, nr_procs;		 | ||||||
| #if 0 |  | ||||||
| vir_bytes proc_addr, mproc_addr, fproc_addr;	 |  | ||||||
| #endif |  | ||||||
| extern int errno; | extern int errno; | ||||||
| 
 | 
 | ||||||
| /* Process tables of the kernel, MM, and FS. */ | /* Process tables of the kernel, MM, and FS. */ | ||||||
| @ -217,7 +214,12 @@ Dev_t dev_nr; | |||||||
| char *taskname(p_nr) | char *taskname(p_nr) | ||||||
| int p_nr; | int p_nr; | ||||||
| { | { | ||||||
|   return ps_proc[_ENDPOINT_P(p_nr) + nr_tasks].p_name; |   int n; | ||||||
|  |   n = _ENDPOINT_P(p_nr) + nr_tasks; | ||||||
|  |   if(n < 0 || n >= nr_tasks + nr_procs) { | ||||||
|  | 	return "OUTOFRANGE"; | ||||||
|  |   } | ||||||
|  |   return ps_proc[n].p_name; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Prrecv prints the RECV field for process with pstat buffer pointer bufp.
 | /* Prrecv prints the RECV field for process with pstat buffer pointer bufp.
 | ||||||
| @ -241,7 +243,7 @@ struct pstat *bufp; | |||||||
| 	else if (bufp->ps_mflags & WAITING) | 	else if (bufp->ps_mflags & WAITING) | ||||||
| 		blkstr = "wait"; | 		blkstr = "wait"; | ||||||
| 	else if (bufp->ps_mflags & SIGSUSPENDED) | 	else if (bufp->ps_mflags & SIGSUSPENDED) | ||||||
| 		blkstr = "ssusp"; | 		blkstr = "sigsusp"; | ||||||
|   } else if (bufp->ps_recv == FS_PROC_NR) { |   } else if (bufp->ps_recv == FS_PROC_NR) { | ||||||
| 	if (-bufp->ps_ftask == XPIPE) | 	if (-bufp->ps_ftask == XPIPE) | ||||||
| 		blkstr = "pipe"; | 		blkstr = "pipe"; | ||||||
| @ -325,14 +327,8 @@ char *argv[]; | |||||||
|   if ((memfd = open(MEM_PATH, O_RDONLY)) == -1) err(MEM_PATH); |   if ((memfd = open(MEM_PATH, O_RDONLY)) == -1) err(MEM_PATH); | ||||||
|   if (gettynames() == -1) err("Can't get tty names"); |   if (gettynames() == -1) err("Can't get tty names"); | ||||||
| 
 | 
 | ||||||
| #if 0 |  | ||||||
|   getsysinfo(PM_PROC_NR, SI_PROC_ADDR, &mproc_addr); |  | ||||||
|   getsysinfo(FS_PROC_NR, SI_PROC_ADDR, &fproc_addr); |  | ||||||
| #endif |  | ||||||
|   getsysinfo(PM_PROC_NR, SI_KINFO, &kinfo); |   getsysinfo(PM_PROC_NR, SI_KINFO, &kinfo); | ||||||
| #if 0 | 
 | ||||||
|   proc_addr = kinfo.proc_addr; |  | ||||||
| #endif |  | ||||||
|   nr_tasks = kinfo.nr_tasks;	 |   nr_tasks = kinfo.nr_tasks;	 | ||||||
|   nr_procs = kinfo.nr_procs; |   nr_procs = kinfo.nr_procs; | ||||||
| 
 | 
 | ||||||
| @ -343,36 +339,20 @@ char *argv[]; | |||||||
|   if (ps_proc == NULL || ps_mproc == NULL || ps_fproc == NULL) |   if (ps_proc == NULL || ps_mproc == NULL || ps_fproc == NULL) | ||||||
| 	err("Out of memory"); | 	err("Out of memory"); | ||||||
| 
 | 
 | ||||||
| #if 0 |  | ||||||
|   /* Get kernel process table */ |  | ||||||
|   if (addrread(kmemfd, (phys_clicks) 0, |  | ||||||
| 		proc_addr, (char *) ps_proc, |  | ||||||
| 		(nr_tasks + nr_procs) * sizeof(ps_proc[0])) |  | ||||||
| 			!= (nr_tasks + nr_procs) * sizeof(ps_proc[0])) |  | ||||||
| 	err("Can't get kernel proc table from /dev/kmem"); |  | ||||||
| 
 |  | ||||||
|   /* Get mm/fs process tables */ |  | ||||||
|   if (addrread(memfd, ps_proc[nr_tasks + PM_PROC_NR].p_memmap[D].mem_phys, |  | ||||||
| 		mproc_addr, (char *) ps_mproc, |  | ||||||
| 		nr_procs * sizeof(ps_mproc[0])) |  | ||||||
| 			!= nr_procs * sizeof(ps_mproc[0])) |  | ||||||
| 	err("Can't get mm proc table from /dev/mem"); |  | ||||||
|   if (addrread(memfd, ps_proc[nr_tasks + FS_PROC_NR].p_memmap[D].mem_phys, |  | ||||||
| 		fproc_addr, (char *) ps_fproc, |  | ||||||
| 		nr_procs * sizeof(ps_fproc[0])) |  | ||||||
| 			!= nr_procs * sizeof(ps_fproc[0])) |  | ||||||
| 	err("Can't get fs proc table from /dev/mem"); |  | ||||||
| #else |  | ||||||
| 	if(getsysinfo(PM_PROC_NR, SI_KPROC_TAB, ps_proc) < 0) { | 	if(getsysinfo(PM_PROC_NR, SI_KPROC_TAB, ps_proc) < 0) { | ||||||
| 		fprintf(stderr, "getsysinfo() for SI_KPROC_TAB failed.\n"); | 		fprintf(stderr, "getsysinfo() for SI_KPROC_TAB failed.\n"); | ||||||
| 		exit(1); | 		exit(1); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if(getsysinfo(PM_PROC_NR, SI_PROC_TAB, ps_mproc) < 0) { | 	if(getsysinfo(PM_PROC_NR, SI_PROC_TAB, ps_mproc) < 0) { | ||||||
| 		fprintf(stderr, "getsysinfo() for SI_PROC_TAB failed.\n"); | 		fprintf(stderr, "getsysinfo() for PM SI_PROC_TAB failed.\n"); | ||||||
|  | 		exit(1); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if(getsysinfo(VFS_PROC_NR, SI_PROC_TAB, ps_fproc) < 0) { | ||||||
|  | 		fprintf(stderr, "getsysinfo() for VFS SI_PROC_TAB failed.\n"); | ||||||
| 		exit(1); | 		exit(1); | ||||||
| 	} | 	} | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
|   /* We need to know where INIT hangs out. */ |   /* We need to know where INIT hangs out. */ | ||||||
|   for (i = FS_PROC_NR; i < nr_procs; i++) { |   for (i = FS_PROC_NR; i < nr_procs; i++) { | ||||||
| @ -407,9 +387,13 @@ char *argv[]; | |||||||
| 			       buf.ps_flags, buf.ps_state, | 			       buf.ps_flags, buf.ps_state, | ||||||
| 			       buf.ps_euid, pid, buf.ps_ppid,  | 			       buf.ps_euid, pid, buf.ps_ppid,  | ||||||
| 			       buf.ps_pgrp, | 			       buf.ps_pgrp, | ||||||
|  | #if 0 | ||||||
| 			       off_to_k((buf.ps_tsize | 			       off_to_k((buf.ps_tsize | ||||||
| 					 + buf.ps_stack - buf.ps_data | 					 + buf.ps_stack - buf.ps_data | ||||||
| 					 + buf.ps_ssize)), | 					 + buf.ps_ssize)), | ||||||
|  | #else | ||||||
|  | 				0, | ||||||
|  | #endif | ||||||
| 			       (buf.ps_flags & RECEIVING ? | 			       (buf.ps_flags & RECEIVING ? | ||||||
| 				prrecv(&buf) : | 				prrecv(&buf) : | ||||||
| 				""), | 				""), | ||||||
| @ -496,22 +480,21 @@ int endpoints; | |||||||
| { | { | ||||||
|   int p_ki = p_nr + nr_tasks;	/* kernel proc index */ |   int p_ki = p_nr + nr_tasks;	/* kernel proc index */ | ||||||
| 
 | 
 | ||||||
|   if (p_nr < -nr_tasks || p_nr >= nr_procs) return -1; |   if (p_nr < -nr_tasks || p_nr >= nr_procs) { | ||||||
|  | 	fprintf(stderr, "pstat: %d out of range\n", p_nr); | ||||||
|  | 	return -1; | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   if ((ps_proc[p_ki].p_rts_flags == SLOT_FREE) |   if ((ps_proc[p_ki].p_rts_flags == SLOT_FREE) | ||||||
|   				&& !(ps_mproc[p_nr].mp_flags & IN_USE)) |   				&& !(ps_mproc[p_nr].mp_flags & IN_USE)) { | ||||||
| 	return -1; | 	return -1; | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   bufp->ps_flags = ps_proc[p_ki].p_rts_flags; |   bufp->ps_flags = ps_proc[p_ki].p_rts_flags; | ||||||
| 
 | 
 | ||||||
|   if (p_nr >= low_user) { |   if (p_nr >= low_user) { | ||||||
| #if 0 |  | ||||||
| 	bufp->ps_dev = ps_fproc[p_nr].fp_tty; | 	bufp->ps_dev = ps_fproc[p_nr].fp_tty; | ||||||
| 	bufp->ps_ftask = ps_fproc[p_nr].fp_task; | 	bufp->ps_ftask = ps_fproc[p_nr].fp_task; | ||||||
| #else |  | ||||||
| 	bufp->ps_dev = 0; |  | ||||||
| 	bufp->ps_ftask = 0; |  | ||||||
| #endif |  | ||||||
|   } else { |   } else { | ||||||
| 	bufp->ps_dev = 0; | 	bufp->ps_dev = 0; | ||||||
| 	bufp->ps_ftask = 0; | 	bufp->ps_ftask = 0; | ||||||
| @ -542,11 +525,9 @@ int endpoints; | |||||||
| 		bufp->ps_state = T_STATE;	/* stopped (traced) */ | 		bufp->ps_state = T_STATE;	/* stopped (traced) */ | ||||||
| 	else if (ps_proc[p_ki].p_rts_flags == 0) | 	else if (ps_proc[p_ki].p_rts_flags == 0) | ||||||
| 		bufp->ps_state = R_STATE;	/* in run-queue */ | 		bufp->ps_state = R_STATE;	/* in run-queue */ | ||||||
| #if 0 |  | ||||||
| 	else if (ps_mproc[p_nr].mp_flags & (WAITING | PAUSED | SIGSUSPENDED) || | 	else if (ps_mproc[p_nr].mp_flags & (WAITING | PAUSED | SIGSUSPENDED) || | ||||||
| 		 ps_fproc[p_nr].fp_suspended == SUSPENDED) | 		 ps_fproc[p_nr].fp_suspended == SUSPENDED) | ||||||
| 		bufp->ps_state = S_STATE;	/* sleeping */ | 		bufp->ps_state = S_STATE;	/* sleeping */ | ||||||
| #endif |  | ||||||
| 	else | 	else | ||||||
| 		bufp->ps_state = W_STATE;	/* a short wait */ | 		bufp->ps_state = W_STATE;	/* a short wait */ | ||||||
|   } else {			/* tasks are simple */ |   } else {			/* tasks are simple */ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Ben Gras
						Ben Gras