[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <46CE70C8.2030005@vmware.com>
Date: Thu, 23 Aug 2007 22:46:48 -0700
From: Zachary Amsden <zach@...are.com>
To: Linus Torvalds <torvalds@...l.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Andrew Morton <akpm@...l.org>,
Jeremy Fitzhardinge <jeremy@...p.org>,
Chris Wright <chrisw@...s-sol.org>, stable@...nel.org,
Rusty Russell <rusty@...tcorp.com.au>,
Virtualization Mailing List <virtualization@...ts.osdl.org>,
Andi Kleen <ak@...e.de>
Subject: [PATCH] Fix preemptible lazy mode bug
I recently sent off a fix for lazy vmalloc faults which can happen under
paravirt when lazy mode is enabled. Unfortunately, I jumped the gun a
bit on fixing this. I neglected to notice that since the new call to
flush the MMU update queue is called from the page fault handler, it can
be pre-empted. Both VMI and Xen use per-cpu variables to track lazy
mode state, as all previous calls to set, disable, or flush lazy mode
happened from a non-preemptable state.
I have no idea how to convincingly produce the problem, as generating a
kernel pre-emption at the required point is, um, difficult, but it is
most certainly a real possibility, and potentially more likely than the
bug I fixed originally.
Rusty, you may have to modify lguest code if you use lazy mode and rely
on per-cpu variables during the callout for paravirt_ops.set_lazy_mode.
I have tested as best as I can, and am trying to write a suite destined
for LTP which will help catch and debug these issues.
Zach
View attachment "i386-paravirt-preempt-fix.patch" of type "text/x-patch" (2257 bytes)
Powered by blists - more mailing lists