[CRIU] More uffd related questions (Error (page-read.c:128): Missing 7fff408d8000 in parent pagemap)

Adrian Reber adrian at lisas.de
Mon Nov 30 02:57:06 PST 2015


On Mon, Nov 30, 2015 at 01:44:00PM +0300, Pavel Emelyanov wrote:
> On 11/30/2015 01:26 PM, Adrian Reber wrote:
> > On Mon, Nov 30, 2015 at 01:24:30PM +0300, Pavel Emelyanov wrote:
> >>
> >>>> This is mm.img part, while page-read engine deals with pagemap-xxx.img files where
> >>>> triplets of [start len in_parent] sit.
> >>>
> >>> Ah, okay. This is my error. The page I am trying to copy does indeed not
> >>> exist in the pagemap:
> >>>
> >>>         {
> >>>             "vaddr": "0x7f8025f6e000", 
> >>>             "nr_pages": 5
> >>>         }, 
> >>>         {
> >>>             "vaddr": "0x7fff408d9000", 
> >>>             "nr_pages": 3
> >>>         }, 
> >>>         {
> >>>             "vaddr": "0x7fff409c2000", 
> >>>             "nr_pages": 2
> >>>         }
> >>>
> >>> So to decide which pages I have to copy I only have to look at the content
> >>> of pagemap-xxx.img and not mm.img, right? Good to know.
> >>
> >> Yes, the pagemap.img describes the physical memory dumped into the image files.
> > 
> > Going over all vma entries with something like
> > 
> >  list_for_each_entry(vma, vmas, list) {
> > 
> > How do I know if an area has been dumped or not? 
> 
> If it's on restore, then the list is likely got from image, isn't it?

It is during restore, yes. I currently don't understand the difference
between mm.img and pagemap.img. In mm.img I see a couple of pages in

                {
                    "start": "0x7fff408ba000", 
                    "end": "0x7fff408dc000", 
                    "pgoff": 0, 
                    "shmid": 0, 
                    "prot": "PROT_READ | PROT_WRITE", 
                    "flags": "MAP_PRIVATE | MAP_ANON | MAP_GROWSDOWN", 
                    "status": "0x201", 
                    "fd": -1, 
                    "fdflags": "0x0"
                }, 

in pagemap.img it tells me only 5 pages in this range of 22 pages have
actually been dumped:

        {
            "vaddr": "0x7fff408d9000", 
            "nr_pages": 3
        }, 
        {
            "vaddr": "0x7fff409c2000", 
            "nr_pages": 2
        }

I have only a single pages-1.img.

So if I want to loop over all pages how do I know which pages have
actually been dumped? How do I know the difference between the 5 pages
in pagemap.img and the 22 pages in mm.img in that memory area?


		Adrian


More information about the CRIU mailing list