besides panicing, of course. This is going to involve a lot of help from UVM.
It seems that uvm_fault is not the right place to handle this. Maybe we need a void uvm_page_error(paddr_t pa, int etype); where etype would indicate if this was a memory or cache fault, was the cache line dirty, etc. If uvm_page_error can't "correct" the error, it would panic. Interactions with copyin/copyout will also need to be addressed. Preemptively, we could have a thread force dirty cache lines to memory if they've been in L2 "too long" (thereby reducing the problem to an ECC error on a clean cache line which means you just toss the cache-line contents.) We can also have a thread that reads all of memory (slowly) thereby causing any single bit errors to be corrected before they become double-bit errors. I'm not familiar enough with UVM internals to actually know what to do but I hope someone else reading this is. Comments anyone?
