On Wed, May 13, 2020 at 12:48:54PM -0700, Linus Torvalds wrote:
Looking at the current users of "probe_kernel_read()", it looks like
it's almost mostly things that just want a single byte or word.
It's not 100% that: we definitely do several things that want the
"copy" semantics vs the "get" semantics: on the x86 side we have
CALL_INSN_SIZE and MAX_INSN_SIZE, and the ldttss_desc.
But the bulk of them do seem to be a single value.
I don't know if performance really matters here, but to me the whole
"most users seem to want to read a single value" is what makes me
think that maybe that should be the primary model, rather than have
the copy model be the primary one and then we implement the single
value case (badly) with a copy.
It probably doesn't matter that much. I certainly wouldn't hold this
series up over it - it can be a future thing.
I can make the get_kernel_nofault implementation suck a little less :)
Note that the arch helper (we could call it unsafe_get_kernel_nofault)
we still need to have a pagefault_disable / pagefault_enable pair
around the calls. So maybe keep the get_kernel_nofault interface
as-is (without the goto label), and prepare the arch helpers for
being used similar to unsafe_get_user once all architectures are
converted. And I can throw in a few patches to convert callers
from the copy semantics to the get semantics.