2009-03-27 05:15:59

by Siddhartha Chhabra

[permalink] [raw]
Subject: Copy-on-write


When the kernel does a COW, say from a "src" to a "dest" page, does it need
to map the "src" and "dest" page to its address space or the kernel can
directly initiate the read from "src" and write to "dest" page ?

Thanks,
SC
--
View this message in context: http://www.nabble.com/Copy-on-write-tp22736146p22736146.html
Sent from the linux-kernel mailing list archive at Nabble.com.


2009-03-27 05:35:34

by Bryan Donlan

[permalink] [raw]
Subject: Re: Copy-on-write

On Fri, Mar 27, 2009 at 1:15 AM, sidc7 <[email protected]> wrote:
>
> When the kernel does a COW, say from a "src" to a "dest" page, does it need
> to map the "src" and "dest" page to its address space or the kernel can
> directly initiate the read from "src" and write to "dest" page ?

If the source and destination pages are not in high memory (exactly
where this boundary is depends on your architecture) they do not need
to be mapped before copying. See cow_user_page in mm/memory.c,
copy_user_highpage in include/linux/highmem.h and kmap_atomic in
arch/x86/mm/highmem_32.c (as well as implementations for other
architectures)

Note that on 64-bit platforms, generally there will be no high memory,
and so remappings will never be needed to carry out a COW.

2009-03-27 06:43:21

by Siddhartha Chhabra

[permalink] [raw]
Subject: Re: Copy-on-write


> If the source and destination pages are not in high memory (exactly
> where this boundary is depends on your architecture) they do not need
> to be mapped before copying. See cow_user_page in mm/memory.c,
> copy_user_highpage in include/linux/highmem.h and kmap_atomic in
> arch/x86/mm/highmem_32.c (as well as implementations for other
> architectures)

> Note that on 64-bit platforms, generally there will be no high memory,
> and so remappings will never be needed to carry out a COW.

Thanks for the quick reply. In general if the kernel wishes to read any
arbitrary page mapped to an application's address space, will the kernel
cause a page fault on that page, since the page is currently not in its
address space and the kernel is wishing to read from this page?

Thanks

--
View this message in context: http://www.nabble.com/Copy-on-write-tp22736146p22736728.html
Sent from the linux-kernel mailing list archive at Nabble.com.