> >> To generate a diff of this commit: > >> cvs rdiff -u -r1.42 -r1.42.16.1 src/sys/uvm/uvm_pglist.c > > > >> /* > >> * Test both the ending and starting pages to see if = > they are > >> * both free. If the ending and starting pages are = > same page, > >> * we only test one of them. If the pages aren't free, = > there > >> * is no reason to continue this iteration so advance = > to the > >> * next address and try again. > >> */ > >> if (VM_PAGE_IS_FREE(&pgs[end - 1]) == 0 > >> || end - 1 == tryidx + skip > >> || VM_PAGE_IS_FREE(&pgs[tryidx + skip]) == 0) { > >> try += roundup(num, align); > >> skip = 0; > >> continue; > >> } > > > > I guess this part can be improved and/or fixed as below. > > I initially did something like that but realized it didn't really buy me > anything since the compiler will actually do something like that > anyways.
Ah, you're missing my point. Let me rephrase again. 1) If `VM_PAGE_IS_FREE(&pgs[end - 1]) == 0' is false and `end - 1 == tryidx + skip' is true, above code skips the region but actually we found the enough space. 2) If `VM_PAGE_IS_FREE(&pgs[end - 1]) == 0' is false and `end - 1 == tryidx + skip' is false but `VM_PAGE_IS_FREE(&pgs[tryidx + skip]) == 0' is true, it is better to advance the `try' by roundup(skip + 1, align) instead of roundup(num, align). enami.