Hi, Robert, There is another minor problem. in dt_init_action: + if (_32pae_l3 || c_curr_accessed) + action |= a_present; + /* else make present when accessed */ + if (c_curr_rw) + action |= a_rw; According to your comments, the following snippet may be more correct: + if (_32pae_l3 || c_curr_accessed) + action |= a_present; + /* else make present when accessed */ + if (c_curr_rw && !_32_pae_l3) + action |= a_rw; The doc said we should retain R/W be zero for pae_l3_pte in legacy mode. If returned a_rw, resync_spte will set _PAGE_RW for the corresponding spte. _______________________________________________________ Best Regards, hanzhu Robert Phillips дµÀ: > Yes, that's true. If the caller supplied a bogus PFN (one larger than ram > size), we'd crash. > BTW, we are avoiding use of grant table transfers because they fragment PSE > pages. > -- rsp > > > On 6/30/06, zhu wrote: >> >> I'm afraid it could trigger some certain problems only when you open l2 >> PSE flag and use grant table to transfer pages between domains. I'm not >> very sure about it. :-) >> >> _______________________________________________________ >> Best Regards, >> hanzhu >> >> >> Robert Phillips $B> > Hi Han, >> > You are right again. I have not seen this cause a problem but we'll >> > certainly fix it. >> > -- rsp >> > >> > On 6/29/06, zhu wrote: >> >> >> >> Hi, Robert, >> >> I found out another confusing code snippet: >> >> in void xi_invl_mfn(struct domain *d, unsigned long mfn) >> >> if (ext && pfn < ext->large_page_aligned_size) >> >> >> >> According to the code, it should be >> >> if (ext && (pfn>>SPT_ENTRIES_ORDER) < >> ext->large_page_aligned_size) >> >> >> >> If I made any mistake, please point it out. >> >> _______________________________________________________ >> >> Best Regards, >> >> hanzhu >> >> >> > >> > >> > > >