From: Andy P. <at...@us...> - 2001-09-02 20:50:19
|
Update of /cvsroot/linux-vax/kernel-2.4/arch/vax/mm In directory usw-pr-cvs1:/tmp/cvs-serv32483 Modified Files: init.c pgalloc.c Log Message: Clean up pgalloc.c. init.c zeros empty_zero_page Index: init.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/vax/mm/init.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- init.c 2001/08/20 21:29:07 1.16 +++ init.c 2001/09/02 20:50:16 1.17 @@ -119,7 +119,11 @@ { max_mapnr = num_physpages = max_low_pfn; - /* this will put all low memory onto the freelists */ + /* clear the zero-page */ + memset(empty_zero_page, 0, PAGE_SIZE); + + /* this will put all low memory onto the freelists */ + totalram_pages += free_all_bootmem(); high_memory = (void *) __va((max_low_pfn) * PAGE_SIZE); Index: pgalloc.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/vax/mm/pgalloc.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- pgalloc.c 2001/09/01 12:19:47 1.7 +++ pgalloc.c 2001/09/02 20:50:16 1.8 @@ -175,8 +175,8 @@ } if (!pmdpage) { printk(KERN_ERR "VAXMM: unable to allocate a pmd for pgd (%8p)\n",pgd ); - free_pmd_fast(get_pageaddr_from_pte(pgd->pmd)); - remap_pte_invalidate(pgd->pmd); + free_pmd_fast((pmd_t *)get_pageaddr_from_pte((pte_t *)pgd->pmd)); + remap_pte_invalidate((pmd_t *)pgd->pmd); return NULL; } @@ -217,14 +217,14 @@ } /* This inverts the remapping done in remap_and_clear */ -unsigned long get_pageaddr_from_pte(pte_t *ptep) +pte_t *get_pageaddr_from_pte(pte_t *ptep) { - unsigned long addr; + pte_t *addr; pte_t *s0pte; s0pte = GET_SPTE_VIRT(ptep); - addr = (unsigned long)(((pte_val(*s0pte)&PAGELET_PFN_MASK)<<PAGELET_SHIFT)|PAGE_OFFSET); + addr = (pte_t *)(((pte_val(*s0pte)&PAGELET_PFN_MASK)<<PAGELET_SHIFT)|PAGE_OFFSET); return addr; } @@ -236,8 +236,8 @@ #ifdef VAX_MM_PGALLOC_DEBUG printk(KERN_DEBUG "VAXMM:pmd_free: freeing pmd %p, pmd2 %p\n",pmd,pmdp); #endif - free_pmd_slow(get_pageaddr_from_pte(pmdp)); - free_pmd_slow(get_pageaddr_from_pte(pmd)); + free_pmd_fast((pmd_t *)get_pageaddr_from_pte((pte_t *)pmdp)); + free_pmd_fast((pmd_t *)get_pageaddr_from_pte((pte_t *)pmd)); /* invalidate the S0 ptes that map this */ remap_pte_invalidate(pmd); remap_pte_invalidate(pmdp); @@ -266,7 +266,7 @@ } /* locate the S0 pte that describes the page pointed to by s0addr */ - + s0pte = GET_SPTE_VIRT(s0addr); /* is it already pointing somewhere? */ @@ -276,10 +276,10 @@ } #endif - page_clear(pte_page); + clear_page(pte_page); /* zap the map */ - set_pte(s0pte,__mk_pte(pte_page,__pgprot(_PAGE_VALID|_PAGE_KW))); + set_pte(s0pte,__mk_pte((unsigned long int)pte_page,__pgprot(_PAGE_VALID|_PAGE_KW))); // print_pte(s0pte); flush_tlb_all(); @@ -380,10 +380,10 @@ if (((adjusted_address) >> PAGELET_SHIFT) < (pgdptr->lr)) { /* fill in any bits missing. Perhaps we should do this when we set up the * SPT in init.c just to be consistent */ - if (pmd_val(*pmd)==NULL) { + if (pmd_val(*pmd)==0) { spt_entry = (pmd - (pmd_t *)(pgdptr->pmd))<< (PAGE_SHIFT+7) | PAGE_OFFSET; spte = GET_SPTE_VIRT(spt_entry); - pmd_val(*pmd) = spte; + pmd_val(*pmd) = (unsigned long int)spte; } return pte_offset(pmd, adjusted_address); } @@ -422,7 +422,7 @@ pmd_t *pmdi; long int direction,ii; - pmd_basep = ((unsigned long)pmd & PTE_TASK_MASK); /* base of the pmd */ + pmd_basep = (pmd_t *)((unsigned long)pmd & PTE_TASK_MASK); /* base of the pmd */ #ifdef VAX_MM_PGALLOC_DEBUG printk(KERN_DEBUG "VAXMM:pte_alloc: pmd_basep %8lx, pmd %8lx, pmd_val %8lx, address %8lx, pmd_index %8lx\n",pmd_basep,pmd,pmd_val(*pmd),address,pmd_index(address)); @@ -451,13 +451,13 @@ if (is_p1){ adjusted_address |= 0x40000000; if (adjusted_address <= (PAGE_OFFSET-TASK_STKMAX)) { - printk(KERN_NOTICE "VAXMM: process %p exceeded TASK_STKMAX (%dMB)\n",current,(TASK_STKMAX>>10)); + printk(KERN_NOTICE "VAXMM: process %p exceeded TASK_STKMAX (%dMB) addr %8lx\n",current,(TASK_STKMAX>>20),adjusted_address); goto give_segv; } pte_number = (adjusted_address - 0x40000000) >> PAGE_SHIFT; } else { if (adjusted_address >= (TASK_WSMAX)) { - printk(KERN_NOTICE "VAXMM: process %p exceeded TASK_WSMAX (%dMB)\n",current,(TASK_WSMAX>>10)); + printk(KERN_NOTICE "VAXMM: process %p exceeded TASK_WSMAX (%dMB) addr %8lx\n",current,(TASK_WSMAX>>20),adjusted_address); goto give_segv; } pte_number = (adjusted_address>>PAGE_SHIFT); @@ -490,12 +490,12 @@ /* The s0 address of the current end page in the page table is * current_last_page * 128 ptes/page * 32 bytes/pte_t + base reg */ - s0addr = (((current_last_page)<<7)*BYTES_PER_PTE_T)+pgdp->br; + s0addr = (pmd_t *) ((((current_last_page)<<7)*BYTES_PER_PTE_T)+pgdp->br); direction = -1; pmdi = pmd_basep+(current_last_page); } else { npages = target_page - current_last_page; - s0addr = (((current_last_page + 1)<<7)*BYTES_PER_PTE_T)+pgdp->br; + s0addr = (pmd_t *) ((((current_last_page + 1)<<7)*BYTES_PER_PTE_T)+pgdp->br); direction = 1; pmdi = pmd_basep+(current_last_page + 1); } @@ -559,14 +559,14 @@ { free_pte_fast(get_pageaddr_from_pte(pte)); /* invalidate the S0 pte that maps this */ - remap_pte_invalidate(pte); + remap_pte_invalidate((pmd_t *)pte); } /* This is only ever called from do_pgt_cache, all the unmapping have been done * before the page has been placed on the pgt cache */ void free_pte_slow(pte_t *pte) { - free_page(pte); + free_page((unsigned long int)pte); } void pte_free_kernel(pte_t *pte) @@ -590,7 +590,7 @@ #else pte_t * pte_offset(pmd_t * dir, unsigned long address) { - return (pmd_val(*dir)+(((address>>PAGE_SHIFT)&(PTRS_PER_PTE-1))<<SIZEOF_PTE_LOG2)); + return (pte_t *)(pmd_val(*dir)+(((address>>PAGE_SHIFT)&(PTRS_PER_PTE-1))<<SIZEOF_PTE_LOG2)); } #endif /* get_pte_kernel_slow. allocate a page of PTEs for the S0 pagetable. |