------- Comment #3 from wuzhangjin at gmail dot com  2009-11-25 01:08 -------
(In reply to comment #2)
> (In reply to comment #1)
> > Can you provide the preprocessed source?
> > 
> 
> Sorry, the preprocessed source is too big, I can not paste it as comment, 
> where
> can i attach it?
> 

Here is the function relative part:

static int try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
    enum ttu_flags flags)
{
 struct mm_struct *mm = vma->vm_mm;
 unsigned long address;
 pte_t *pte;
 pte_t pteval;
 spinlock_t *ptl;
 int ret = 1;

 address = vma_address(page, vma);
 if (address == -14)
  goto out;

 pte = page_check_address(page, mm, address, &ptl, 0);
 if (!pte)
  goto out;






 if (!(flags & TTU_IGNORE_MLOCK)) {
  if (vma->vm_flags & 0x00002000) {
   ret = 3;
   goto out_unmap;
  }
 }
 if (!(flags & TTU_IGNORE_ACCESS)) {
  if (({ int __young; __young = ({ pte_t __pte = *(pte); int r = 1; if
(!pte_young(__pte)) r = 0; else set_pte((pte), pte_mkold(__pte)); r; }); if
(__young) local_flush_tlb_page(vma, address); __young; })) {
   ret = 2;
   goto out_unmap;
  }
   }


 flush_cache_page(vma, address, ({ struct page *__pg = (page); int __sec =
page_to_section(__pg); (unsigned long)(__pg -
__section_mem_map_addr(__nr_to_section(__sec))); }));
 pteval = ({ pte_t __pte; __pte = ({ pte_t __pte = *(pte);
pte_clear(((vma)->vm_mm), (address), (pte)); __pte; });
local_flush_tlb_page(vma, address); __pte; });


 if (pte_dirty(pteval))
  set_page_dirty(page);


 do { unsigned long _rss = (((mm)->_file_rss) + ((mm)->_anon_rss)); if
((mm)->hiwater_rss < _rss) (mm)->hiwater_rss = _rss; } while (0);

 if (PageHWPoison(page) && !(flags & TTU_IGNORE_HWPOISON)) {
  if (PageAnon(page))
   (mm)->_anon_rss--;
  else
   (mm)->_file_rss--;
  set_pte(pte, swp_entry_to_pte(make_hwpoison_entry(page)))
                                                ;
 } else if (PageAnon(page)) {
  swp_entry_t entry = { .val = ((page)->private) };

  if (PageSwapCache(page)) {




   swap_duplicate(entry);
   if (list_empty(&mm->mmlist)) {
    do { do { do { (__current_thread_info->preempt_count) += (1); } while (0);
__asm__ __volatile__("": : :"memory"); } while (0); (void)0;
(void)(&mmlist_lock); } while (0);
    if (list_empty(&mm->mmlist))
     list_add(&mm->mmlist, &init_mm.mmlist);
    do { do { do { __asm__ __volatile__("": : :"memory"); do {
(__current_thread_info->preempt_count) -= (1); } while (0); } while (0);
__asm__ __volatile__("": : :"memory"); do { if
(__builtin_expect(!!(test_ti_thread_flag(__current_thread_info, 2)), 0))
preempt_schedule(); } while (0); } while (0); (void)0; (void)(&mmlist_lock); }
while (0);
   }
   (mm)->_anon_rss--;
  } else if (0) {





   __BUG_ON((unsigned long)(((flags) & TTU_ACTION_MASK) != TTU_MIGRATION));
   entry = swp_entry(0, 0);
  }
  set_pte(pte, swp_entry_to_pte(entry));
  __BUG_ON((unsigned long)(pte_file(*pte)));
 } else if (0 && (((flags) & TTU_ACTION_MASK) == TTU_MIGRATION)) {

  swp_entry_t entry;
  entry = swp_entry(0, 0);
  set_pte(pte, swp_entry_to_pte(entry));
 } else
  (mm)->_file_rss--;


 page_remove_rmap(page);
 put_page(page);

out_unmap:
 do { do { do { do { __asm__ __volatile__("": : :"memory"); do {
(__current_thread_info->preempt_count) -= (1); } while (0); } while (0);
__asm__ __volatile__("": : :"memory"); do { if
(__builtin_expect(!!(test_ti_thread_flag(__current_thread_info, 2)), 0))
preempt_schedule(); } while (0); } while (0); (void)0; (void)(ptl); } while
(0); ((void)(pte)); } while (0);
out:
 return ret;
}


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42164

Reply via email to