yes, flush page twice cause system slow in some CPU.<br>Meanwhile, set_memory_uc/wc doesn't only do flush page cache, but also change page table attribute, so your solution seems to have some problem.<br><br><div class="gmail_quote">
2012/3/20 Konrad Rzeszutek Wilk <span dir="ltr"><<a href="mailto:konrad.wilk@oracle.com">konrad.wilk@oracle.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Tue, Mar 20, 2012 at 10:15:02AM +0800, Scott Fang wrote:<br>
> Can I do the optimization like:<br>
><br>
> if (ttm->caching_state == tt_cached)<br>
> - drm_clflush_pages(ttm->pages, ttm->num_pages);<br>
> + for (i = 0; i < ttm->num_pages; ++i)<br>
> + if (PageHighMem(ttm->pages[i]))<br>
> + drm_clflush_pages(&ttm->pages[i], 1);<br>
><br>
> only do flush cache when high memory and leave the linear memory flush in<br>
> function set_memory_uc/wc?<br>
<br>
</div>So what are you trying to solve? I mean one way to fix this<br>
is to do:<br>
<div class="im">><br>
> 2012/3/20 Jerome Glisse <<a href="mailto:j.glisse@gmail.com">j.glisse@gmail.com</a>><br>
><br>
> > On Mon, 2012-03-19 at 23:11 +0800, Scott Fang wrote:<br>
> > > In function ttm_tt_set_caching<br>
> > > ,,,,,,,<br>
> > ><br>
> > > if (ttm->caching_state == tt_cached)<br>
> > > drm_clflush_pages(ttm->pages, ttm->num_pages);<br>
</div> goto out;<br>
<div class="im">> > ><br>
> > > for (i = 0; i < ttm->num_pages; ++i) {<br>
> > > cur_page = ttm->pages[i];<br>
> > > if (likely(cur_page != NULL)) {<br>
> > > ret = ttm_tt_set_page_caching(cur_page,<br>
> > > ttm->caching_state,<br>
> > > c_state);<br>
> > > if (unlikely(ret != 0))<br>
> > > goto out_err;<br>
> > > }<br>
> > > }<br>
> ><br>
</div>out:<br>
<div class="im">> > > ttm->caching_state = c_state;<br>
> > ><br>
> > > return 0;<br>
<br>
</div>Is the problem with calling page change twice making the machine slow?<br>
</blockquote></div><br>