Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > Actually, I think the right model is to get rid of that horrendous > .copy_mc field entirely. > > We only have one single place that uses it - that nasty core dumping > code. And that code is *not* performance critical. > > And not only isn't it performance-critical, it already does all the > core dumping one page at a time because it doesn't want to write pages > that were never mapped into user space. > > So what we can do is > > (a) make the core dumping code *copy* the page to a good location > with copy_mc_to_kernel() first > > (b) remove this horrendous .copy_mc crap entirely from iov_iter > > This is slightly complicated by the fact that copy_mc_to_kernel() may > not even exist, and architectures that don't have it don't want the > silly extra copy. So we need to abstract the "copy to temporary page" > code a bit. But that's probably a good thing anyway in that it forces > us to have nice interfaces. > > End result: something like the attached. > > AGAIN: THIS IS ENTIRELY UNTESTED. > > But hey, so was clearly all the .copy_mc code too that this removes, so... I like it:-) I've tested it by SIGQUIT'ing a number of processes and using gdb to examine the coredumps - which seems to work - at least without the production of any MCEs. I'm not sure how I could test it with MCEs. Feel free to add: Reviewed-by: David Howells <dhowells@xxxxxxxxxx> Tested-by: David Howells <dhowells@xxxxxxxxxx> That said, I wonder if: #ifdef copy_mc_to_kernel should be: #ifdef CONFIG_ARCH_HAS_COPY_MC and whether it's possible to find out dynamically if MCEs can occur at all. David