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