[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 1/6] x86/PVH: improve Dom0 memory size calculation
On 29.09.2021 15:13, Jan Beulich wrote: > @@ -337,53 +336,65 @@ unsigned long __init dom0_compute_nr_pag > avail -= d->max_vcpus - 1; > > /* Reserve memory for iommu_dom0_init() (rough estimate). */ > - if ( is_iommu_enabled(d) ) > + if ( is_iommu_enabled(d) && !iommu_hwdom_passthrough ) > { > unsigned int s; > > for ( s = 9; s < BITS_PER_LONG; s += 9 ) > - avail -= max_pdx >> s; > + iommu_pages += max_pdx >> s; > + > + avail -= iommu_pages; > + } > + > + nr_pages = get_memsize(&dom0_size, avail); > + > + /* > + * If allocation isn't specified, reserve 1/16th of available memory for > + * things like DMA buffers. This reservation is clamped to a maximum of > + * 128MB. > + */ > + if ( !nr_pages ) > + { > + nr_pages = avail - (pv_shim ? pv_shim_mem(avail) > + : min(avail / 16, 128UL << (20 - PAGE_SHIFT))); > + if ( paging_mode_enabled(d) ) > + /* > + * Temporary workaround message until internal (paging) memory > + * accounting required to build a pvh dom0 is improved. > + */ > + printk("WARNING: PVH dom0 without dom0_mem set is still > unstable. " > + "If you get crashes during boot, try adding a dom0_mem > parameter\n"); > } > > - need_paging = is_hvm_domain(d) && > - (!iommu_use_hap_pt(d) || !paging_mode_hap(d)); > - for ( ; ; need_paging = false ) > + if ( paging_mode_enabled(d) || opt_dom0_shadow ) > { > - nr_pages = get_memsize(&dom0_size, avail); > - min_pages = get_memsize(&dom0_min_size, avail); > - max_pages = get_memsize(&dom0_max_size, avail); > + unsigned long cpu_pages; > > /* > - * If allocation isn't specified, reserve 1/16th of available memory > - * for things like DMA buffers. This reservation is clamped to a > - * maximum of 128MB. > + * Clamp according to min/max limits and available memory > + * (preliminary). > */ > - if ( !nr_pages ) > - { > - nr_pages = avail - (pv_shim ? pv_shim_mem(avail) > - : min(avail / 16, 128UL << (20 - > PAGE_SHIFT))); Just FYI that I've noticed only now that moving this only up is not enough; the same also ... > - if ( is_hvm_domain(d) && !need_paging ) > - /* > - * Temporary workaround message until internal (paging) > memory > - * accounting required to build a pvh dom0 is improved. > - */ > - printk("WARNING: PVH dom0 without dom0_mem set is still > unstable. " > - "If you get crashes during boot, try adding a > dom0_mem parameter\n"); > - } > - > - > - /* Clamp according to min/max limits and available memory. */ > - nr_pages = max(nr_pages, min_pages); > - nr_pages = min(nr_pages, max_pages); > + nr_pages = max(nr_pages, get_memsize(&dom0_min_size, avail)); > + nr_pages = min(nr_pages, get_memsize(&dom0_max_size, avail)); > nr_pages = min(nr_pages, avail); > > - if ( !need_paging ) > - break; > + cpu_pages = dom0_paging_pages(d, nr_pages); > > - /* Reserve memory for shadow or HAP. */ > - avail -= dom0_paging_pages(d, nr_pages); > + if ( !iommu_use_hap_pt(d) ) > + avail -= cpu_pages; > + else if ( cpu_pages > iommu_pages ) > + avail -= cpu_pages - iommu_pages; > } > > + nr_pages = get_memsize(&dom0_size, avail); ... is needed here, or else things won't work e.g. without any "dom0_mem=". I'll introduce a helper function ... Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |