On 06/27/2018 09:47 AM, Emilio G. Cota wrote: >>> - if (p2) { >>> + if (p2 && p2 != p) { >>> page_unlock(p2); >> >> ... so that you need no change here. >> Otherwise it looks good. > > I did that initially. However, note that if we do that then > the second page is not added to the list of pages for this > TB (via tb_page_add), which breaks the provided test case. > > page_lock_pair(&p, phys_pc, &p2, phys_page2, 1); > tb_page_add(p, tb, 0, phys_pc & TARGET_PAGE_MASK); > if (p2) { > tb_page_add(p2, tb, 1, phys_page2); > } else { > tb->page_addr[1] = -1; > } > > Regardless of whether p1 and p2 point to the same physical page, > the fact that the TB goes across two virtual pages should be > preserved, and in this case tb_page_add must be called twice.
Hmm. Ok. Queued. r~