[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] arm: Boot allocator fails with multi node memory
>>> On 16.01.17 at 19:46, <julien.grall@xxxxxxx> wrote: > On 09/01/17 08:40, Jan Beulich wrote: >>>>> On 07.01.17 at 07:05, <vijay.kilari@xxxxxxxxx> wrote: >>> Question: Why this address is not mapped?. If mapped where this va is >>> mapped?. >> >> Well, I think this is the wrong question to ask. Why would it be mapped >> if there's no memory there? >> >>> (XEN) Walking Hypervisor VA 0x847fffffffff on CPU0 via TTBR >>> 0x00000000ffcf8000 >>> (XEN) 0TH[0x108] = 0x0000000000000000 >>> >>> >>> static unsigned long init_node_heap(int node, unsigned long mfn, >>> unsigned long nr, bool_t *use_tail, int >>> d) >>> { >>> #ifdef DIRECTMAP_VIRT_END >>> unsigned long eva = min(DIRECTMAP_VIRT_END, HYPERVISOR_VIRT_END); >>> #endif >>> >>> >>> .... >>> >>> else if ( nr >= needed && >>> (mfn + needed) <= (virt_to_mfn(eva - 1) + 1) && // <=== >>> FAILS here >> >> The assumption here is that a virtual address inside the direct map >> can always be translated, and from your report I'm gaining the >> understanding that this is simply not true on ARM (but the code >> here pre-dates ARM iirc). If that assumption doesn't hold (and >> cannot be made so), apart from adjusting the code here there may >> need to be a full audit of common code to see whether there are\ >> any other such uses. > > On ARM, the function virt_to_mfn uses the hardware to do the address > translation. So if the virtual address is not mapped, it will fail. > > This is different from the assumption made by the code and x86 > behavior. I'd still like to keep the current behavior on ARM as it is > very handy to directly get debug information when the virtual address is > not mapped. Stefano, do you have any opinions? > > Looking at the code pointed out by Vijay. If I understand correctly, > virt_to_mfn(eva) is used to find out the maximum MFN that can be mapped. Right. > On ARM64, all the memory is direct mapped so far, so this check will > always be false. DYM "will always be true"? > This might not be true in the future. Right. But regardless of that we clearly need another arch_*() abstraction here, which (for now) returns constant true on ARM. Or wait - why does ARM have DIRECTMAP_VIRT_END defined? I can't see any use of it outside of page_alloc.c, and there all the problematic code would be compiled out if the symbol wasn't defined. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |