Changeset 25

Show
Ignore:
Timestamp:
01/05/06 10:25:50 (6 years ago)
Author:
dkaplan1
Message:

Fixed bug with marking pages as reserved. Now only mark pages as reserved during the length of remap_page_range (which fails if PageReserved? is false), and preserve old setting. Old code would cause occasional bug checks in mm/rmap.c:343

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • arch/i386/kernel/callgate.c

    r24 r25  
    111111        return tsk->currentaddr; 
    112112    } 
     113    if (!tsk->ring) 
     114        return current; 
    113115    tsk->currentaddr=(struct task_struct*) map_struct(tsk, sizeof(*tsk)+PAGE_SIZE, tsk->ring, &tsk->origcurrentaddr); 
    114116    tsk->currentmapped=1; 
     
    449451    struct vm_area_struct *vma; 
    450452    unsigned long addr=0; 
     453    int res1, res2; 
    451454    if (!kernel_struct || !size) 
    452455        return -EINVAL; 
     
    465468     
    466469    vma->vm_mm=&init_mm; 
    467 //    SetPageReserved(pfn_to_page(__pa(kernel_struct) >> PAGE_SHIFT)); 
    468  
    469 //    SetPageReserved(pfn_to_page((__pa(kernel_struct) >> PAGE_SHIFT) + 1)); 
     470    res1=PageReserved(pfn_to_page(__pa(kernel_struct) >> PAGE_SHIFT)); 
     471    res2=PageReserved(pfn_to_page(__pa(kernel_struct) >> PAGE_SHIFT)+1); 
     472    if (!res1) 
     473            SetPageReserved(pfn_to_page(__pa(kernel_struct) >> PAGE_SHIFT)); 
     474    if (!res2)     
     475            SetPageReserved(pfn_to_page((__pa(kernel_struct) >> PAGE_SHIFT) + 1)); 
    470476    remap_page_range(vma, addr, __pa(kernel_struct), size, PAGE_KERNEL); 
     477    if (!res1)     
     478        ClearPageReserved(pfn_to_page(__pa(kernel_struct) >> PAGE_SHIFT)); 
     479    if (!res2) 
     480        ClearPageReserved(pfn_to_page((__pa(kernel_struct) >> PAGE_SHIFT) + 1)); 
    471481    addr+=(unsigned long) kernel_struct & (PAGE_SIZE -1); 
    472482     
  • .version

    r24 r25  
    1 294 
     1297