home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!cs.utexas.edu!torn!cunews!revcan!software.mitel.com!sharman!sharman
- From: sharman@Software.Mitel.COM (Richard Sharman)
- Newsgroups: comp.os.linux
- Subject: a patch for free in the ps-0.97 package
- Message-ID: <SHARMAN.92Aug16012235@sharman.Software.Mitel.COM>
- Date: 16 Aug 92 05:22:35 GMT
- Sender: sharman@Software.Mitel.COM
- Organization: Mitel. Kanata (Ontario). Canada.
- Lines: 81
-
- 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 ============================
-