From: NIIBE Y. <gn...@m1...> - 2002-05-22 07:35:46
|
Changes from mainline. Ummm... I have backlog... 2002-05-07 NIIBE Yutaka <gn...@m1...> * include/asm-sh/pgtable.h (mk_pte_phys): Removed. * AGAINST-2.5.14: New file. * AGAINST-2.5.13: Removed. * Makefile: Version 2.5.14. * arch/sh/mm/cache-sh4.c, arch/sh/mm/fault.c, arch/sh/mm/init.c, arch/sh/mm/ioremap.c, drivers/pci/pci.ids, include/asm-sh/pgalloc.h, init/do_mounts.c, mm/memory.c: Incorporate changes in 2.5.14. Index: arch/sh/mm/cache-sh4.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/cache-sh4.c,v retrieving revision 1.13 diff -u -3 -p -r1.13 cache-sh4.c --- arch/sh/mm/cache-sh4.c 25 Apr 2002 07:21:04 -0000 1.13 +++ arch/sh/mm/cache-sh4.c 22 May 2002 07:31:01 -0000 @@ -435,7 +435,7 @@ void clear_user_page(void *to, unsigned pte_t entry; unsigned long flags; - entry = mk_pte_phys(phys_addr, pgprot); + entry = pfn_pte(phys_addr >> PAGE_SHIFT, pgprot); down(&p3map_sem[(address & CACHE_ALIAS)>>12]); set_pte(pte, entry); save_and_cli(flags); @@ -474,7 +474,7 @@ void copy_user_page(void *to, void *from pte_t entry; unsigned long flags; - entry = mk_pte_phys(phys_addr, pgprot); + entry = pfn_pte(phys_addr >> PAGE_SHIFT, pgprot); down(&p3map_sem[(address & CACHE_ALIAS)>>12]); set_pte(pte, entry); save_and_cli(flags); Index: arch/sh/mm/fault.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/fault.c,v retrieving revision 1.6 diff -u -3 -p -r1.6 fault.c --- arch/sh/mm/fault.c 12 Apr 2002 04:26:28 -0000 1.6 +++ arch/sh/mm/fault.c 22 May 2002 07:31:01 -0000 @@ -291,6 +291,7 @@ void update_mmu_cache(struct vm_area_str unsigned long vpn; #if defined(__SH4__) struct page *page; + unsigned long pfn; unsigned long ptea; #endif @@ -299,11 +300,14 @@ void update_mmu_cache(struct vm_area_str return; #if defined(__SH4__) - page = pte_page(pte); - if (VALID_PAGE(page) && !test_bit(PG_mapped, &page->flags)) { - unsigned long phys = pte_val(pte) & PTE_PHYS_MASK; - __flush_wback_region((void *)P1SEGADDR(phys), PAGE_SIZE); - __set_bit(PG_mapped, &page->flags); + pfn = pte_pfn(pte); + if (pfn_valid(pfn)) { + page = pfn_to_page(pfn); + if (!test_bit(PG_mapped, &page->flags)) { + unsigned long phys = pte_val(pte) & PTE_PHYS_MASK; + __flush_wback_region((void *)P1SEGADDR(phys), PAGE_SIZE); + __set_bit(PG_mapped, &page->flags); + } } #endif Index: arch/sh/mm/init.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/init.c,v retrieving revision 1.3 diff -u -3 -p -r1.3 init.c --- arch/sh/mm/init.c 1 May 2002 06:18:01 -0000 1.3 +++ arch/sh/mm/init.c 22 May 2002 07:31:01 -0000 @@ -49,9 +49,6 @@ pg_data_t discontig_page_data[NR_NODES]; bootmem_data_t discontig_node_bdata[NR_NODES]; #endif -static unsigned long totalram_pages; -static unsigned long totalhigh_pages; - void show_mem(void) { int i, total = 0, reserved = 0; @@ -204,18 +201,6 @@ void free_initrd_mem(unsigned long start printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10); } #endif - -void si_meminfo(struct sysinfo *val) -{ - val->totalram = totalram_pages; - val->sharedram = 0; - val->freeram = nr_free_pages(); - val->bufferram = atomic_read(&buffermem_pages); - val->totalhigh = totalhigh_pages; - val->freehigh = nr_free_highpages(); - val->mem_unit = PAGE_SIZE; - return; -} pgd_t *pgd_alloc(struct mm_struct *mm) { Index: arch/sh/mm/ioremap.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/ioremap.c,v retrieving revision 1.3 diff -u -3 -p -r1.3 ioremap.c --- arch/sh/mm/ioremap.c 12 Apr 2002 04:26:28 -0000 1.3 +++ arch/sh/mm/ioremap.c 22 May 2002 07:31:01 -0000 @@ -19,6 +19,7 @@ static inline void remap_area_pte(pte_t unsigned long size, unsigned long phys_addr, unsigned long flags) { unsigned long end; + unsigned long pfn; pgprot_t pgprot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD | flags); @@ -29,14 +30,15 @@ static inline void remap_area_pte(pte_t end = PMD_SIZE; if (address >= end) BUG(); + pfn = phys_addr >> PAGE_SHIFT; do { if (!pte_none(*pte)) { printk("remap_area_pte: page already exists\n"); BUG(); } - set_pte(pte, mk_pte_phys(phys_addr, pgprot)); + set_pte(pte, pfn_pte(pfn, pgprot)); address += PAGE_SIZE; - phys_addr += PAGE_SIZE; + pfn++; pte++; } while (address && (address < end)); } Index: drivers/pci/pci.ids =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/pci/pci.ids,v retrieving revision 1.11 diff -u -3 -p -r1.11 pci.ids --- drivers/pci/pci.ids 6 May 2002 00:50:02 -0000 1.11 +++ drivers/pci/pci.ids 22 May 2002 07:31:02 -0000 @@ -5090,22 +5090,35 @@ 11d4 0048 SoundMAX Integrated Digital Audio 2426 82801AB AC'97 Modem 2428 82801AB PCI Bridge - 2440 82820 820 (Camino 2) Chipset ISA Bridge (ICH2) - 2442 82820 820 (Camino 2) Chipset USB (Hub A) - 2443 82820 820 (Camino 2) Chipset SMBus - 2444 82820 820 (Camino 2) Chipset USB (Hub B) - 2445 82820 820 (Camino 2) Chipset AC'97 Audio Controller - 2446 82820 820 (Camino 2) Chipset AC'97 Modem Controller - 2448 82820 820 (Camino 2) Chipset PCI (-M) - 2449 82820 (ICH2) Chipset Ethernet Controller - 244a 82820 820 (Camino 2) Chipset IDE U100 (-M) - 244b 82820 820 (Camino 2) Chipset IDE U100 - 244c 82820 820 (Camino 2) Chipset ISA Bridge (ICH2-M) - 244e 82820 820 (Camino 2) Chipset PCI - 245b 82801E C-ICH IDE - 2485 AC'97 Audio Controller - 248a 82801CAM ICH3-M IDE - 248b 82801CA ICH3 IDE + 2440 82801BA ISA Bridge (LPC) + 2442 82801BA/BAM USB (Hub #1) + 2443 82801BA/BAM SMBus + 2444 82801BA/BAM USB (Hub #2) + 2445 82801BA/BAM AC'97 Audio + 2446 82801BA/BAM AC'97 Modem + 2448 82801BAM/CAM PCI Bridge + 2449 82801BA/BAM/CA/CAM Ethernet Controller + 244a 82801BAM IDE U100 + 244b 82801BA IDE U100 + 244c 82801BAM ISA Bridge (LPC) + 244e 82801BA/CA PCI Bridge + 2450 82801E ISA Bridge (LPC) + 2452 82801E USB + 2453 82801E SMBus + 2459 82801E Ethernet Controller 0 + 245b 82801E IDE U100 + 245d 82801E Ethernet Controller 1 + 245e 82801E PCI Bridge + 2480 82801CA ISA Bridge (LPC) + 2482 82801CA/CAM USB (Hub #1) + 2483 82801CA/CAM SMBus + 2484 82801CA/CAM USB (Hub #2) + 2485 82801CA/CAM AC'97 Audio + 2486 82801CA/CAM AC'97 Modem + 2487 82801CA/CAM USB (Hub #3) + 248a 82801CAM IDE U100 + 248b 82801CA IDE U100 + 248c 82801CAM ISA Bridge (LPC) 24cb 82801DB ICH4 IDE 2500 82820 820 (Camino) Chipset Host Bridge (MCH) 1043 801c P3C-2000 system chipset Index: include/asm-sh/pgalloc.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgalloc.h,v retrieving revision 1.7 diff -u -3 -p -r1.7 pgalloc.h --- include/asm-sh/pgalloc.h 12 Apr 2002 04:26:29 -0000 1.7 +++ include/asm-sh/pgalloc.h 22 May 2002 07:31:02 -0000 @@ -59,9 +59,14 @@ static inline pte_t ptep_get_and_clear(p pte_clear(ptep); if (!pte_not_present(pte)) { - struct page *page = pte_page(pte); - if (VALID_PAGE(page) && - (!page->mapping || list_empty(&page->mapping->i_mmap_shared))) __clear_bit(PG_mapped, &page->flags); + struct page *page; + unsigned long pfn = pte_pfn(pte); + if (pfn_valid(pfn)) { + page = pfn_to_page(page); + if (!page->mapping + || list_empty(&page->mapping->i_mmap_shared)) + __clear_bit(PG_mapped, &page->flags); + } } return pte; } Index: include/asm-sh/pgtable.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgtable.h,v retrieving revision 1.8 diff -u -3 -p -r1.8 pgtable.h --- include/asm-sh/pgtable.h 12 Apr 2002 04:26:29 -0000 1.8 +++ include/asm-sh/pgtable.h 22 May 2002 07:31:02 -0000 @@ -193,10 +193,6 @@ static inline pgprot_t pgprot_noncached( __pte; \ }) -/* This takes a physical page address that is used by the remapping functions */ -#define mk_pte_phys(physpage, pgprot) \ -({ pte_t __pte; set_pte(&__pte, __pte(physpage + pgprot_val(pgprot))); __pte; }) - static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) { set_pte(&pte, __pte((pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot))); return pte; } Index: init/do_mounts.c =================================================================== RCS file: /cvsroot/linuxsh/linux/init/do_mounts.c,v retrieving revision 1.4 diff -u -3 -p -r1.4 do_mounts.c --- init/do_mounts.c 4 Apr 2002 09:03:56 -0000 1.4 +++ init/do_mounts.c 22 May 2002 07:31:02 -0000 @@ -375,7 +375,7 @@ static void __init change_floppy(char *f va_start(args, fmt); vsprintf(buf, fmt, args); va_end(args); - fd = open("/dev/root", O_RDWR, 0); + fd = open("/dev/root", O_RDWR | O_NDELAY, 0); if (fd >= 0) { sys_ioctl(fd, FDEJECT, 0); close(fd); @@ -792,7 +792,7 @@ static void __init handle_initrd(void) error = sys_ioctl(fd, BLKFLSBUF, 0); close(fd); } - printk(error ? "okay\n" : "failed\n"); + printk(!error ? "okay\n" : "failed\n"); } #endif } Index: mm/memory.c =================================================================== RCS file: /cvsroot/linuxsh/linux/mm/memory.c,v retrieving revision 1.12 diff -u -3 -p -r1.12 memory.c --- mm/memory.c 1 May 2002 06:18:01 -0000 1.12 +++ mm/memory.c 22 May 2002 07:31:02 -0000 @@ -76,8 +76,12 @@ mem_map_t * mem_map; */ void __free_pte(pte_t pte) { - struct page *page = pte_page(pte); - if ((!VALID_PAGE(page)) || PageReserved(page)) + struct page *page; + unsigned long pfn = pte_pfn(pte); + if (!pfn_valid(pfn)) + return; + page = pfn_to_page(pfn); + if (PageReserved(page)) return; if (pte_dirty(pte)) set_page_dirty(page); @@ -269,6 +273,7 @@ skip_copy_pte_range: address = (address do { pte_t pte = *src_pte; struct page *ptepage; + unsigned long pfn; /* copy_one_pte */ @@ -278,9 +283,11 @@ skip_copy_pte_range: address = (address swap_duplicate(pte_to_swp_entry(pte)); goto cont_copy_pte_range; } - ptepage = pte_page(pte); - if ((!VALID_PAGE(ptepage)) || - PageReserved(ptepage)) + pfn = pte_pfn(pte); + if (!pfn_valid(pfn)) + goto cont_copy_pte_range; + ptepage = pfn_to_page(pfn); + if (PageReserved(ptepage)) goto cont_copy_pte_range; /* If it's a COW mapping, write protect it both in the parent and the child */ @@ -356,9 +363,13 @@ static inline int zap_pte_range(mmu_gath if (pte_none(pte)) continue; if (pte_present(pte)) { - struct page *page = pte_page(pte); - if (VALID_PAGE(page) && !PageReserved(page)) - freed ++; + struct page *page; + unsigned long pfn = pte_pfn(pte); + if (pfn_valid(pfn)) { + page = pfn_to_page(pfn); + if (!PageReserved(page)) + freed++; + } /* This will eventually call __free_pte on the pte. */ tlb_remove_page(tlb, ptep, address + offset); } else { @@ -451,6 +462,7 @@ static struct page * follow_page(struct pgd_t *pgd; pmd_t *pmd; pte_t *ptep, pte; + unsigned long pfn; pgd = pgd_offset(mm, address); if (pgd_none(*pgd) || pgd_bad(*pgd)) @@ -472,8 +484,11 @@ static struct page * follow_page(struct preempt_enable(); if (pte_present(pte)) { if (!write || - (pte_write(pte) && pte_dirty(pte))) - return pte_page(pte); + (pte_write(pte) && pte_dirty(pte))) { + pfn = pte_pfn(pte); + if (pfn_valid(pfn)) + return pfn_to_page(pfn); + } } out: @@ -488,8 +503,6 @@ out: static inline struct page * get_page_map(struct page *page) { - if (!VALID_PAGE(page)) - return 0; return page; } @@ -853,22 +866,21 @@ static inline void remap_pte_range(pte_t unsigned long phys_addr, pgprot_t prot) { unsigned long end; + unsigned long pfn; address &= ~PMD_MASK; end = address + size; if (end > PMD_SIZE) end = PMD_SIZE; + pfn = phys_addr >> PAGE_SHIFT; do { - struct page *page; - pte_t oldpage; - oldpage = ptep_get_and_clear(pte); - - page = virt_to_page(__va(phys_addr)); - if ((!VALID_PAGE(page)) || PageReserved(page)) - set_pte(pte, mk_pte_phys(phys_addr, prot)); + pte_t oldpage = ptep_get_and_clear(pte); + + if (!pfn_valid(pfn) || PageReserved(pfn_to_page(pfn))) + set_pte(pte, pfn_pte(pfn, prot)); forget_pte(oldpage); address += PAGE_SIZE; - phys_addr += PAGE_SIZE; + pfn++; pte++; } while (address && (address < end)); } @@ -979,10 +991,11 @@ static int do_wp_page(struct mm_struct * unsigned long address, pte_t *page_table, pmd_t *pmd, pte_t pte) { struct page *old_page, *new_page; + unsigned long pfn = pte_pfn(pte); - old_page = pte_page(pte); - if (!VALID_PAGE(old_page)) + if (!pfn_valid(pfn)) goto bad_wp_page; + old_page = pfn_to_page(pfn); if (!TestSetPageLocked(old_page)) { int reuse = can_share_swap_page(old_page); @@ -1033,7 +1046,7 @@ static int do_wp_page(struct mm_struct * bad_wp_page: pte_unmap(page_table); spin_unlock(&mm->page_table_lock); - printk("do_wp_page: bogus page at address %08lx (page 0x%lx)\n",address,(unsigned long)old_page); + printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n", address); return -1; no_mem: page_cache_release(old_page); |