From: sharman@Software.Mitel.COM (Richard Sharman) Subject: a patch for free in the ps-0.97 package Date: 16 Aug 1992 05:22:35 GMT
When I compiled and ran the latest `free' from the ps-0.97 package,
I got the following errors:
symbol '_paging_pages' not found
trying to read invalid address
The following patches seem to agree with the figures I get
with shift scroll lock. [If I run the -p option, and
stop the program and do a shift scroll lock, the numbers agree.]
(The changed code is essentially a copy of that in mm/memory.c.)
*** origs/free.c Sun Aug 16 00:28:18 1992
--- free.c Sun Aug 16 00:42:57 1992
***************
*** 120,146 ****
show_memory()
{
unsigned char *memmap;
! unsigned used=0, freepg=0, shared=0;
! int i, pages, paging_pages;
pages = (get_kword(k_addr("_high_memory")) -
get_kword(k_addr("_low_memory"))) >> 12;
! paging_pages = get_kword(k_addr("_paging_pages"));
memmap = (unsigned char *) xmalloc(pages);
! kmemread(memmap, get_kword(k_addr("_mem_map")), pages);
! for (i = 0; i < paging_pages; ++i)
! switch (memmap[i]) {
! case 0: ++freepg; break;
! case USED: break;
! default: shared += memmap[i] - 1;
! case 1: ++used;
! }
! printf("memory: %10d %10d %10d %10d\n",
! freepg + used << pg_shift,
! used << pg_shift,
freepg << pg_shift,
shared << pg_shift);
}
show_swap()
--- 120,156 ----
show_memory()
{
unsigned char *memmap;
! unsigned used=0, freepg=0, shared=0, total = 0 ;
! int i, pages ;
! unsigned long mem_map_adr ;
! int nr_free_pages ;
+ mem_map_adr = get_kword(k_addr("_mem_map")) ;
pages = (get_kword(k_addr("_high_memory")) -
get_kword(k_addr("_low_memory"))) >> 12;
!
memmap = (unsigned char *) xmalloc(pages);
! nr_free_pages = get_kword(k_addr("_nr_free_pages")) ;
! kmemread(memmap, mem_map_adr, pages);
! for (i = 0; i < pages; ++i) {
! total++ ;
! if (!memmap[i])
! freepg++ ;
! else
! shared += memmap[i] - 1;
! }
!
! printf("memory: %10d %10d %10d %10d",
! total << pg_shift,
! (total - (freepg + shared)) << pg_shift ,
freepg << pg_shift,
shared << pg_shift);
+ /* print nr_free_pages only if different */
+ if (nr_free_pages != freepg ) {
+ printf(" nr_free_pages = %d", nr_free_pages) ;
+ }
+ printf("\n") ;
}
show_swap()
==================== end of cdiff ============================