/* Called after mce notification in process context. This code is allowed to sleep. Call the high level VM handler to process any corrupted pages. Assume that the work queue code only calls this one at a time per CPU. Note we don't disable preemption, so this code might run on the wrong CPU. In this case the event is picked up by the scheduled work queue. This is merely a fast path to expedite processing in some common cases.  */
void mce_notify_process(void)
/* Called after mce notification in process context. This code is allowed to sleep. Call the high level VM handler to process any corrupted pages. Assume that the work queue code only calls this one at a time per CPU. Note we don't disable preemption, so this code might run on the wrong CPU. In this case the event is picked up by the scheduled work queue. This is merely a fast path to expedite processing in some common cases.  */
void mce_notify_process(void)
{
	unsigned long pfn;
	mce_notify_irq();
	while (mce_ring_get(&pfn))
		memory_failure(pfn, MCE_VECTOR);
}