On Tue, 9 Aug 2022 10:14:12 -0400 Felix Kuehling <felix.kuehling@xxxxxxx> wrote: > Am 2022-08-09 um 08:31 schrieb Matthew Wilcox: > > On Mon, Aug 08, 2022 at 10:42:24PM -0600, Alex Williamson wrote: > >> The below referenced commit makes the same error as 1c563432588d ("mm: fix > >> is_pinnable_page against a cma page"), re-interpreting the logic to exclude > >> pinning of the zero page, which breaks device assignment with vfio. If two people made the same error then surely that's a sign that we need a comment which explains things to the next visitor. > > Perhaps we need to admit we're not as good at boolean logic as we think > > we are. > > > > if (is_device_coherent_page(page)) > > return false; > > if (is_zone_movable_page(page)) > > return false; > > return is_zero_pfn(page_to_pfn(page)); > > > > (or whatever the right logic is ... I just woke up and I'm having > > trouble parsing it). > > This implies an assumption that zero-page is never device-coherent or > moveable, which is probably true, but not part of the original > condition. A more formally correct rewrite would be: > > if (is_zero_pfn(page_to_pfn(page))) > return true; > if (is_device_coherent_page(page)) > return false; > return !is_zone_moveable_page(page); > Yes please, vastly better. And a nice thing about this layout is that it leaves places where we can add a nice little comment against each clause of the test, to explain why we're performing each one.