On Sat, Dec 17, 2022 at 11:48 AM Richard Henderson < richard.hender...@linaro.org> wrote:
> Make bsd-user match linux-user in not marking host pages > as reserved. This isn't especially effective anyway, as > it doesn't take into account any heap memory that qemu > may allocate after startup. > > Cc: Warner Losh <i...@bsdimp.com> > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > > I started to simply fix up this code to match my user-only interval-tree > patch set, as L1_MAP_ADDR_SPACE_BITS gets removed from translate-all.c, > but then I decided to remove it all. > I think this is fine. We already do a translation for addresses so marking this as 'reserved' doesn't help that much. We need to map memory into a contiguous guess-address-space, but the underlying host memory needn't be contiguous at all. I've not yet tested this, but would like to. What's your timeline on getting this done? Warner > r~ > > --- > accel/tcg/translate-all.c | 65 --------------------------------------- > 1 file changed, 65 deletions(-) > > diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c > index b964ea44d7..48e9d70b4e 100644 > --- a/accel/tcg/translate-all.c > +++ b/accel/tcg/translate-all.c > @@ -354,71 +354,6 @@ void page_init(void) > { > page_size_init(); > page_table_config_init(); > - > -#if defined(CONFIG_BSD) && defined(CONFIG_USER_ONLY) > - { > -#ifdef HAVE_KINFO_GETVMMAP > - struct kinfo_vmentry *freep; > - int i, cnt; > - > - freep = kinfo_getvmmap(getpid(), &cnt); > - if (freep) { > - mmap_lock(); > - for (i = 0; i < cnt; i++) { > - unsigned long startaddr, endaddr; > - > - startaddr = freep[i].kve_start; > - endaddr = freep[i].kve_end; > - if (h2g_valid(startaddr)) { > - startaddr = h2g(startaddr) & TARGET_PAGE_MASK; > - > - if (h2g_valid(endaddr)) { > - endaddr = h2g(endaddr); > - page_set_flags(startaddr, endaddr, PAGE_RESERVED); > - } else { > -#if TARGET_ABI_BITS <= L1_MAP_ADDR_SPACE_BITS > - endaddr = ~0ul; > - page_set_flags(startaddr, endaddr, PAGE_RESERVED); > -#endif > - } > - } > - } > - free(freep); > - mmap_unlock(); > - } > -#else > - FILE *f; > - > - last_brk = (unsigned long)sbrk(0); > - > - f = fopen("/compat/linux/proc/self/maps", "r"); > - if (f) { > - mmap_lock(); > - > - do { > - unsigned long startaddr, endaddr; > - int n; > - > - n = fscanf(f, "%lx-%lx %*[^\n]\n", &startaddr, &endaddr); > - > - if (n == 2 && h2g_valid(startaddr)) { > - startaddr = h2g(startaddr) & TARGET_PAGE_MASK; > - > - if (h2g_valid(endaddr)) { > - endaddr = h2g(endaddr); > - } else { > - endaddr = ~0ul; > - } > - page_set_flags(startaddr, endaddr, PAGE_RESERVED); > - } > - } while (!feof(f)); > - > - fclose(f); > - mmap_unlock(); > - } > -#endif > - } > -#endif > } > > PageDesc *page_find_alloc(tb_page_addr_t index, bool alloc) > -- > 2.34.1 > >