----- Original Message ----- > At 07/12/2018 09:08 PM, Dave Anderson wrote: > > > > > > ----- Original Message ----- > >> > >> > >> At 07/12/2018 02:23 AM, Dave Anderson wrote: > >>> > >>> > >>> ----- Original Message ----- > >>>> > >>>> > >>>> ----- Original Message ----- > >>>>> Hi Dave, > >>>>> > >>>>> At 07/11/2018 03:33 AM, Dave Anderson wrote: > >>>>>> > >>>>>> The final phase of support would be making this work: > >>>>>> > >>>>>> static int > >>>>>> x86_64_task_uses_5level(struct task_context *tc) > >>>>>> { > >>>>>> return FALSE; > >>>>>> } > >>>>>> > >>>>>> Have you had a chance to look at how that can be done? > >>>>>> > >>>>> > >>>>> I have no idea to check if 5level paging is used in User-space. > >>>>> > >>>>> You gave me some methods, and I have try: > >>>>> > >>>>> -The MAP_FIXED flag > >>>>> -check if the contents of the page directory or p4d is 'flods' > >>>> > >>>> It would be most helpful if you can compare two tasks, one with 5-level > >>>> and one without, and see if there's anything obviously different. > >>>> (I don't know what "flods" means) > >>> > >>> Ah, sorry, you mean if the top-level page directory folds back into > >>> itself. > >>> > >>> So yes, I wonder if it would be obvious enough by checking whether the > >>> top-level pgd folds back into itself, and if so, 4-levels of page tables > >>> are in use? But if that were the case, it seems that the 5-level > >>> translation > >>> code would work on both types of user-space tasks. I just don't > >>> understand > >>> how it's supposed to work. > >>> > >> > >> OK, let me try to clarify if the the 5-level translation code would work > >> on both types of user-space tasks at first. ;-) > >> > > Hi Dave, > > As we all know, the kernel with CONFIG_X86_5LEVEL=y can run both in the > 4-level page table and 5-level page table. It's configured by: > > - no5lvl in cmdline > - the machine supports 5-level paging > - CPUID leaf 7 is supported > - the leaf has the feature bit set > > then, Kernel using the __pgtable_l5_enabled to record the last result. > > In the Documentation/x86/x86_64/5level-paging.txt: > > ... > To mitigate this, we are not going to allocate virtual address space > above 47-bit by default. > > But userspace can ask for allocation from full address space by > specifying hint address (with or without MAP_FIXED) above 47-bits. > ... > > IMO, the document only tell us that some user tasks can't using the > address above 47-bits, this doesn't effect the paging level. > > So, I think we don't need to add check for user tasks, in other word, > All user tasks must using 5-level paging if __pgtable_l5_enabled = 1. > Correct? That make sense, and sounds good to me! > > BTW, I will try to ask Kirill about it and will cc you. OK? ;-) OK thanks, Dave > >> Thank you so much for you kind explanation! > >> > >> dou. > > > > Hi Dou, > > > > That leads me to this question: can you confirm that this crash patch > > works with a kernel that is configured with CONFIG_X86_5LEVEL, but either: > > > > (1) the kernel was booted with "no5lvl", or > > (2) the host hardware does not have the X86_CR4_LA57 bit set > > > > I tested the two cases with the following patch, 'vm -p' and 'kmem -v' > shows OK. > > ---------------------------8<------------------------------------------ > > Author: Dou Liyang <douly.fnst@xxxxxxxxxxxxxx> > Date: Fri Jul 13 10:43:26 2018 +0800 > > x86_64: Remove the unused x86_64_task_uses_5level() > > diff --git a/x86_64.c b/x86_64.c > index b07d6f2..96f685b 100644 > --- a/x86_64.c > +++ b/x86_64.c > @@ -24,7 +24,6 @@ static int x86_64_uvtop(struct task_context *, ulong, > physaddr_t *, int); > static int x86_64_uvtop_level4(struct task_context *, ulong, > physaddr_t *, int); > static int x86_64_uvtop_level4_xen_wpt(struct task_context *, ulong, > physaddr_t *, int); > static int x86_64_uvtop_level4_rhel4_xen_wpt(struct task_context *, > ulong, physaddr_t *, int); > -static int x86_64_task_uses_5level(struct task_context *); > static ulong x86_64_vmalloc_start(void); > static int x86_64_is_task_addr(ulong); > static int x86_64_verify_symbol(const char *, ulong, char); > @@ -341,6 +340,7 @@ x86_64_init(int when) > if (l5_enabled) > machdep->flags |= VM_5LEVEL; > } > + > if (machdep->flags & VM_5LEVEL) { > machdep->machspec->userspace_top = > USERSPACE_TOP_5LEVEL; > machdep->machspec->page_offset = > PAGE_OFFSET_5LEVEL; > @@ -361,7 +361,6 @@ x86_64_init(int when) > machdep->uvtop = x86_64_uvtop_level4; /* > 5-level is optional per-task */ > machdep->kvbase = (ulong)PAGE_OFFSET; > machdep->identity_map_base = (ulong)PAGE_OFFSET; > - > } > > /* > @@ -1915,7 +1914,7 @@ x86_64_uvtop_level4(struct task_context *tc, ulong > uvaddr, physaddr_t *paddr, in > goto no_upage; > > /* If the VM is in 5-level page table */ > - if (machdep->flags & VM_5LEVEL && x86_64_task_uses_5level(tc)) { > + if (machdep->flags & VM_5LEVEL) { > ulong p4d_pte; > /* > * p4d = p4d_offset(pgd, address); > @@ -1986,12 +1985,6 @@ no_upage: > return FALSE; > } > > -static int > -x86_64_task_uses_5level(struct task_context *tc) > -{ > - return FALSE; > -} > - > static int > x86_64_uvtop_level4_xen_wpt(struct task_context *tc, ulong uvaddr, > physaddr_t *paddr, int verbose) > { > > > > Thanks, > > Dave > > > > > > > > > > > > > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility