On Mon, Feb 08, 2010 at 11:40:50AM +0900, Masao Uebayashi wrote: > I'm adding another list of vm_physseg for device pages. It's a list or array > of physical address segments. They're frequently accessed by VM to lookup > a physical address from a page metadata (vm_page) or vice versa. > > Those lists are rarely updated. When a framebuffer or memory-mappable audio > device are attached / detached. (For RAM segments, they're updated when we'll > support memory hot-plug. :) > > The update process is very rare, and expected. Administrators carefully > connects a device when the machine is not running some important task. So > what I need here is to protect such a data adding no run-time performance > loss. > > Do we have any standard way to do this? > > If not, what I'm thinking is like: > > - a sub-system queries the kernel if it's a good time to do this > - if yes, pass a call-back and data > - the kernel asks all other CPUs to stop tasks and wait in some safe code > point > - other CPUs tells back that they're waiting > - if all CPUs have stopped, the kernel runs the passed callback & data > - in the callback, update array > > Protected data should be an array of pointers to objects, not an array of > objects, so that already referenced objects are not affected by the lookup > array.
please make any changes to uvm on a separate branch, as and when you decide how best to do it, and then the branch can be merged when it's ready. thanks, alistair