[unix-pc.sources] mapmem - patch 1

mdapoz@hybrid.uucp (Mark Dapoz) (05/07/90)

This patch fixes a problem with the page device allocation display, it
erroneously displayed allocated pages as free pages and free pages as
allocated pages.  Thanks go to Richard Gumpertz (rhg@CPS.COM) for locating 
and fixing the problems addressed by this patch.

To apply this patch, feed the contents of this article through the following 
command:  "patch -p0 < thisfile"  


*** mapmem.c~	Mon Apr 23 23:52:06 1990
--- mapmem.c	Sun May  6 22:35:49 1990
***************
*** 1,4
! static char sccsid[] = "@(#)$Id: mapmem.c, V1.2.0.0 90/04/23 20:28:32 $";
  
  /*
   * map.c - display kernel allocation map information

--- 1,4 -----
! static char sccsid[] = "@(#)$Id: mapmem.c, V1.2.0.1 90/05/06 22:26:02 $";
  
  /*
   * map.c - display kernel allocation map information
***************
*** 2,8
  
  /*
   * map.c - display kernel allocation map information
!  * Version : 1.2.0.0 - 90/04/23 20:38:32
   * Authors  : Michael J. Young
   * 	      Mark Dapoz (unix-pc version)
   * USmail   : Software Development Technologies, Inc.

--- 2,8 -----
  
  /*
   * map.c - display kernel allocation map information
!  * Version : 1.2.0.1 - 90/05/06 22:26:02
   * Authors  : Michael J. Young
   * 	      Mark Dapoz (unix-pc version)
   * USmail   : Software Development Technologies, Inc.
***************
*** 32,37
   *    Originated.
   * Tue Apr 23 23:27:23 EDT 1990 - M. Dapoz (mdapoz%hybrid@cs.toronto.edu)
   *    Hacked to work with unix-pc (aka 3b1) kernel
   */
  
  #define patch_level 0

--- 32,39 -----
   *    Originated.
   * Tue Apr 23 23:27:23 EDT 1990 - M. Dapoz (mdapoz%hybrid@cs.toronto.edu)
   *    Hacked to work with unix-pc (aka 3b1) kernel
+  * Sun May 06 22:26:02 EDT 1990 - R. Gumpertz (rhg@CPS.COM)
+  *    Fixed problem with display map when displaying page device allocations
   */
  
  #define patch_level 1
***************
*** 34,40
   *    Hacked to work with unix-pc (aka 3b1) kernel
   */
  
! #define patch_level 0
  
  #include <nlist.h>
  #include <stdio.h>

--- 36,42 -----
   *    Fixed problem with display map when displaying page device allocations
   */
  
! #define patch_level 1
  
  #include <nlist.h>
  #include <stdio.h>
***************
*** 148,154
  
  void version (){
  	printf ("\nKernel Allocation Map Display\n");
! 	printf ("Version : 1.2 (unix-pc) - 90/04/23 20:28:32, Patch Level %d\n", patch_level);
  	printf ("%s\n", sccsid);
  }
  

--- 150,156 -----
  
  void version (){
  	printf ("\nKernel Allocation Map Display\n");
! 	printf ("Version : 1.2 (unix-pc) - 90/05/06 22:26:02, Patch Level %d\n", patch_level);
  	printf ("%s\n", sccsid);
  }
  
***************
*** 249,255
  #ifdef UDEBUG
  	printf("updating map page addr=%x symbol=%c\n", addr, symbol);
  #endif
! 	dmap[addr/NBPC] = symbol;
  }
  
  /*

--- 251,258 -----
  #ifdef UDEBUG
  	printf("updating map page addr=%x symbol=%c\n", addr, symbol);
  #endif
! 	if ((addr /= NBPC) < MAX_ENTRIES)
! 	    dmap[addr] = symbol;
  }
  
  /*
***************
*** 254,260
  
  /*
   * interpret_smap : scans through the copy of the swap allocation map and
!  * updates the display map accordingly.  The total number of used blocks in 
   * the map are returned.
   */
  int interpret_smap(dmap, smap)

--- 257,263 -----
  
  /*
   * interpret_smap : scans through the copy of the swap allocation map and
!  * updates the display map accordingly.  The total number of free blocks in 
   * the map are returned.
   */
  int interpret_smap(dmap, smap)
***************
*** 261,267
  char dmap[];
  struct mapent *smap;
  {
! 	int total_used = 0;
  	int raddr;
  	struct mapent *next_smap;
  	struct mapent sentry;

--- 264,270 -----
  char dmap[];
  struct mapent *smap;
  {
! 	int total_free = 0;
  	int raddr;
  	struct mapent *next_smap;
  	struct mapent sentry;
***************
*** 279,285
  	printf("dmap = %x\n", dmap);
  	printf("m_limit = %x\n", sheader.m_limit);
  #endif
! 	memset (dmap, 0, MAX_ENTRIES);
  	for (next_smap=smap+1; next_smap != sheader.m_limit; next_smap++){
  #ifdef DEBUG
  	    printf("smap= %x\n", next_smap);

--- 282,294 -----
  	printf("dmap = %x\n", dmap);
  	printf("m_limit = %x\n", sheader.m_limit);
  #endif
! 	if (knswap < MAX_ENTRIES) {
! 	    memset (dmap, '*', knswap);
! 	    memset (dmap+knswap, 0, MAX_ENTRIES-knswap);
! 	}
! 	else
! 	    memset (dmap, '*', MAX_ENTRIES);
! 
  	for (next_smap=smap+1; next_smap != sheader.m_limit; next_smap++){
  #ifdef DEBUG
  	    printf("smap= %x\n", next_smap);
***************
*** 296,302
  	    printf("m_size = %x\n", sentry.m_size);
  	    printf("m_addr = %x\n", sentry.m_addr);
  #endif
! 	    total_used+=sentry.m_size;
  	    for (raddr=sentry.m_addr*NBPC; sentry.m_size; sentry.m_size--, raddr+=NBPC)
  		update_map_page(dmap, raddr, '*');
  	}

--- 305,311 -----
  	    printf("m_size = %x\n", sentry.m_size);
  	    printf("m_addr = %x\n", sentry.m_addr);
  #endif
! 	    total_free+=sentry.m_size;
  	    for (raddr=sentry.m_addr*NBPC; sentry.m_size; sentry.m_size--, raddr+=NBPC)
  		update_map_page(dmap, raddr, '.');
  	}
***************
*** 298,304
  #endif
  	    total_used+=sentry.m_size;
  	    for (raddr=sentry.m_addr*NBPC; sentry.m_size; sentry.m_size--, raddr+=NBPC)
! 		update_map_page(dmap, raddr, '*');
  	}
  	return total_used;
  }

--- 307,313 -----
  #endif
  	    total_free+=sentry.m_size;
  	    for (raddr=sentry.m_addr*NBPC; sentry.m_size; sentry.m_size--, raddr+=NBPC)
! 		update_map_page(dmap, raddr, '.');
  	}
  	return total_free;
  }
***************
*** 300,306
  	    for (raddr=sentry.m_addr*NBPC; sentry.m_size; sentry.m_size--, raddr+=NBPC)
  		update_map_page(dmap, raddr, '*');
  	}
! 	return total_used;
  }
  
  /*

--- 309,315 -----
  	    for (raddr=sentry.m_addr*NBPC; sentry.m_size; sentry.m_size--, raddr+=NBPC)
  		update_map_page(dmap, raddr, '.');
  	}
! 	return total_free;
  }
  
  /*
***************
*** 377,383
  	    printf("c_page = %x\n", mentry.c_page);
  	    printf("c_free = %x\n", mentry.c_free);
  #endif
! 	    if (mentry.c_free)
  	    	total_free++;
  	    else
  	    	update_map_page(dmap, raddr, symbol[mentry.c_type]);

--- 386,392 -----
  	    printf("c_page = %x\n", mentry.c_page);
  	    printf("c_free = %x\n", mentry.c_free);
  #endif
! 	    if (mentry.c_free) {
  	    	total_free++;
  		update_map_page(dmap, raddr, '.');
  	    }
***************
*** 379,384
  #endif
  	    if (mentry.c_free)
  	    	total_free++;
  	    else
  	    	update_map_page(dmap, raddr, symbol[mentry.c_type]);
  	}

--- 388,395 -----
  #endif
  	    if (mentry.c_free) {
  	    	total_free++;
+ 		update_map_page(dmap, raddr, '.');
+ 	    }
  	    else
  	    	update_map_page(dmap, raddr, symbol[mentry.c_type]);
  	}
***************
*** 525,532
  	time_t tm;
  	boolean done = FALSE;		/* will be nonzero when ready to quit */
  	int mem_or_swap = 0;		/* 0 = display core map, 1 = swap map */
! 	int free = 0;			/* free items in core allocation map */
! 	int used = 0;			/* used items in swap allocation map */
  	char highlight=-1;		/* char to highlight */
  	char chr;
  	int disp_addr=0;

--- 536,542 -----
  	time_t tm;
  	boolean done = FALSE;		/* will be nonzero when ready to quit */
  	int mem_or_swap = 0;		/* 0 = display core map, 1 = swap map */
! 	int free = 0;			/* free items in allocation map */
  	char highlight=-1;		/* char to highlight */
  	char chr;
  	int disp_addr=0;
***************
*** 581,587
  			/*
  			 * update and display swap map
  			 */
! 			used = interpret_smap(dmap, namelist[SWAP_MAP].n_value);
  			standout();
  			mvaddstr (0, 29, "Page Device Allocation");
  			standend();

--- 591,597 -----
  			/*
  			 * update and display swap map
  			 */
! 			free = interpret_smap(dmap, namelist[SWAP_MAP].n_value);
  			standout();
  			mvaddstr (0, 29, "Page Device Allocation");
  			standend();
***************
*** 587,593
  			standend();
  			move (1,0);
  			clrtoeol();
! 			mvprintw (1,  0, "Total page space = %d Blocks (4K), %d Free (%2.1f%%)", knswap, knswap-used, (float)(knswap-used)/knswap*100);
  			move (DISP_ROWS+2,0);
  			clrtoeol();
  			move (DISP_ROWS+3,0);

--- 597,603 -----
  			standend();
  			move (1,0);
  			clrtoeol();
! 			mvprintw (1,  0, "Total page space = %d Blocks (4K), %d Free (%2.1f%%)", knswap, free, (float)free/knswap*100);
  			move (DISP_ROWS+2,0);
  			clrtoeol();
  			move (DISP_ROWS+3,0);
***************
*** 598,604
  			clrtoeol();
  			move (DISP_ROWS+6,0);
  			clrtoeol();
! 			print_map(dmap, '*', disp_addr);
  		}
  
  		/*

--- 608,614 -----
  			clrtoeol();
  			move (DISP_ROWS+6,0);
  			clrtoeol();
! 			print_map(dmap, -1, disp_addr);
  		}
  
  		/*
***************
*** 622,627
  			highlight=chr;
  			break;
  
  		case ' ':	/* display all pages */
  			highlight=-1;
  			break;

--- 632,638 -----
  			highlight=chr;
  			break;
  
+ 		case '*':
  		case ' ':	/* display all pages */
  			highlight=-1;
  			break;
-- 
Managing a software development team 	|   Mark Dapoz  
is a lot like being on the psychiatric	|   mdapoz%hybrid@cs.toronto.edu
ward.  -Mitch Kapor, San Jose Mercury	|   ...uunet!mnetor!hybrid!mdapoz