On 06/06/16 09:40, Peter Zijlstra wrote: > On Mon, Jun 06, 2016 at 03:59:06PM +0000, Chen, Yu C wrote: > >>>> + if (hibernation_in_resume()) >>>> + mwait_ptr = empty_zero_page; >>>> + else >>>> + mwait_ptr = ¤t_thread_info()->flags; >>> >>> Why is this conditional? Is there any case in which the zero page is not >>> also >>> correct? >> I'm thinking of avoid unnecessary wakeup for normal CPU offline, for >> example, >> if one driver uses the zero page and access it. > > Writing to the zero page would be a major fail. >
One implementation of MWAIT is for the waiting processor to claim the line in an exclusive state, which would be highly undesirable for the zero page. I don't actually know if this is done by any real implementation, however. Either way, the problem at hand seems limited to post-hibernation, as for regular CPU offline the page tables will be fully populated, so it seems like it should not be an issue. -hpa