Re: [PATCH 6/7] x86, mm: setup page table from top-down

From: Stefano Stabellini
Date: Wed Oct 10 2012 - 13:26:14 EST


On Wed, 10 Oct 2012, Yinghai Lu wrote:
> On Wed, Oct 10, 2012 at 9:38 AM, Stefano Stabellini
> <stefano.stabellini@xxxxxxxxxxxxx> wrote:
> >> - if (pfn >= pgt_buf_top)
> >> - panic("alloc_low_page: ran out of memory");
> >> + if ((pgt_buf_end + 1) >= pgt_buf_top) {
> >> + unsigned long ret;
> >> + if (min_pfn_mapped >= max_pfn_mapped)
> >> + panic("alloc_low_page: ran out of memory");
> >> + ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
> >> + max_pfn_mapped << PAGE_SHIFT,
> >> + PAGE_SIZE, PAGE_SIZE);
> >> + if (!ret)
> >> + panic("alloc_low_page: can not alloc memory");
> >> + memblock_reserve(ret, PAGE_SIZE);
> >> + pfn = ret >> PAGE_SHIFT;
> >
> > This cannot be right: you are allocating another page to be used as
> > pagetable page, outside the range pgt_buf_start-pgt_buf_top.
> >
> > When that page is going to be hooked into the live pagetable, the kernel
> > is going to panic on Xen because the page wasn't marked RO.
> >
> > If you want to do that you need to tell the Xen subsystem of the new
> > page. pagetable_reserve is not the right call, we need a new one (see
> > past emails).
>
> ok, will change that interface and call in from alloc_low_page.
>
> how about the pages from BRK, do we need to call xen hooks to mark it as RO?
>

It doesn't matter whether they come from BRK or other memory: Xen
assumes that all the pagetable pages come from
pgt_buf_start-pgt_buf_top, so if you are going to use another range you
need to tell Xen about it.

Alternatively, you can follow Peter's suggestion and replace the current
hooks with a new one with a more precise and well defined semantic.
Something along the lines of "this pagetable page is about to be hooked
into the live pagetable". Xen would use the hook to mark it RO.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/