On Tue, Apr 9, 2024 at 12:35 PM David Hildenbrand <david@xxxxxxxxxx> wrote: > > On 09.04.24 20:31, James Houghton wrote: > > Ah, I didn't see this in my inbox, sorry David! > > No worries :) > > > > > On Thu, Apr 4, 2024 at 11:52 AM David Hildenbrand <david@xxxxxxxxxx> wrote: > >> > >> On 02.04.24 01:29, James Houghton wrote: > >>> diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h > >>> index f349e08a9dfe..daaa9db625d3 100644 > >>> --- a/include/linux/mmu_notifier.h > >>> +++ b/include/linux/mmu_notifier.h > >>> @@ -61,6 +61,10 @@ enum mmu_notifier_event { > >>> > >>> #define MMU_NOTIFIER_RANGE_BLOCKABLE (1 << 0) > >>> > >>> +#define MMU_NOTIFIER_YOUNG (1 << 0) > >>> +#define MMU_NOTIFIER_YOUNG_BITMAP_UNRELIABLE (1 << 1) > >> > >> Especially this one really deserves some documentation :) > > > > Yes, will do. Something like > > > > MMU_NOTIFIER_YOUNG_BITMAP_UNRELIABLE indicates that the passed-in > > bitmap either (1) does not accurately represent the age of the pages > > (in the case of test_young), or (2) was not able to be used to > > completely clear the age/access bit (in the case of clear_young). > > Make sense. I do wonder what the expected reaction from the caller is :) In this series the caller doesn't actually care (matching what Yu had in his v2[1]). test_spte_young() probably ought to return false if it finds MMU_NOTIFIER_YOUNG_BITMAP_UNRELIABLE (and I'll do this in v4 if no one objects), but it doesn't have to. The bitmap will never say that a page is young when it was actually not, only the other way around. > > > > >> > >>> +#define MMU_NOTIFIER_YOUNG_FAST (1 << 2) > >> > >> And that one as well. > > > > Something like > > > > Indicates that (1) passing a bitmap ({test,clear}_young_bitmap) > > would have been supported for this address range. > > > > The name MMU_NOTIFIER_YOUNG_FAST really comes from the fact that KVM > > is able to harvest the access bit "fast" (so for x86, locklessly, and > > for arm64, with the KVM MMU read lock), "fast" enough that using a > > bitmap to do look-around is probably a good idea. > > Is that really the right way to communicate that ("would have been > supported") -- wouldn't we want to sense support differently? What I have now seems fine to me. It would be a little nicer to have a way to query for bitmap support and make sure that the answer will not be stale by the time we call the bitmap notifiers, but the complexity to make that work seems unnecessary for dealing with such an uncommon scenario. Maybe the right thing to do is just to have KVM always return the same answer. So instead of checking if the shadow root is allocated, we could check something else (I'm not sure what exactly yet though...). [1]: https://lore.kernel.org/kvmarm/20230526234435.662652-11-yuzhao@xxxxxxxxxx/