On 2020-10-15 3:40 a.m., Borislav Petkov wrote:
On Wed, Oct 14, 2020 at 08:21:57PM -0700, Ankur Arora wrote:
Also, if we did extend clear_page() to take the page-size as parameter
we still might not have enough information (ex. a 4K or a 2MB page that
clear_page() sees could be part of a GUP of a much larger extent) to
decide whether to go uncached or not.
clear_page* assumes 4K. All of the lowlevel asm variants do. So adding
the size there won't bring you a whole lot.
So you'd need to devise this whole thing differently. Perhaps have a
clear_pages() helper which decides based on size what to do: uncached
clearing or the clear_page() as is now in a loop.
I think that'll work well for GB pages, where the clear_pages() helper
has enough information to make a decision.
But, unless I'm missing something, I'm not sure how that would work for
say, a 1GB mm_populate() using 4K pages. The clear_page() (or clear_pages())
in that case would only see the 4K size.
But let me think about this more (and look at the callsites as you suggest.)
Looking at the callsites would give you a better idea I'd say.
Thanks, yeah that's a good idea. Let me go do that.
Ankur
Thx.