Messages in this thread | | | Date | Fri, 2 Mar 2012 14:11:34 +0900 | From | Takuya Yoshikawa <> | Subject | Re: [PATCH 2/4] KVM: Avoid checking huge page mappings in get_dirty_log() |
| |
Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp> wrote:
> Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp> wrote: > > > + while (mask) { > > + rmapp = &slot->rmap[gfn_offset + __ffs(mask)]; > > + __rmap_write_protect(kvm, rmapp, PT_PAGE_TABLE_LEVEL); > > > > - return write_protected; > > + /* clear the first set bit */ > > + mask &= mask - 1; > > + } > > } > > while (mask) { > fsbit = __ffs(mask); > gfn_offset += fsbit; > mask >>= fsbit + 1; > > rmapp = &slot->rmap[gfn_offset]; > __rmap_write_protect(kvm, rmapp, PT_PAGE_TABLE_LEVEL); > } > > Seems to be better: BSF friendly.
I was wrong.
"and < shift" and bsf did not show any difference for this kind of loop on my box. So we should keep the original implementation.
Takuya
| |