On Fri, Sep 08, 2017 at 12:53:47AM -0700, Christoph Hellwig wrote:
+/*
+ * Lookup the page table entry for a virtual address and return a pointer to
+ * the entry. Based on x86 tree.
+ */
+static pte_t *lookup_address(unsigned long addr)
Seems like this should be moved to common arm64 mm code and used by
kernel_page_present.
Sounds good, I'll include something like the patch below in the next
series.
Unfortunately, adding an implementation of lookup_address seems to be
slightly more complicated than necessary, because of the xen piece. We
have to define lookup_address() with the level parameter, but it's not
obvious to me to name the page levels. So for now I've just left it as
a WARN() if someone supplies it.
It seems like xen still does need this to be defined, because if I
define it without level:
drivers/xen/xenbus/xenbus_client.c: In function âxenbus_unmap_ring_vfree_pvâ:
drivers/xen/xenbus/xenbus_client.c:760:4: error: too many arguments to function âlookup_addressâ
lookup_address(addr, &level)).maddr;
^~~~~~~~~~~~~~
In file included from ./arch/arm64/include/asm/page.h:37:0,
from ./include/linux/mmzone.h:20,
from ./include/linux/gfp.h:5,
from ./include/linux/mm.h:9,
from drivers/xen/xenbus/xenbus_client.c:33:
./arch/arm64/include/asm/pgtable-types.h:67:15: note: declared here
extern pte_t *lookup_address(unsigned long addr);
^~~~~~~~~~~~~~
I've cc-d the xen folks, maybe they can suggest a way to untangle it?
Alternatively, if someone can suggest a good naming scheme for the
page levels, I can just do that.