[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 1/2] xmalloc: remove struct xmem_pool init_region
> -----Original Message----- > From: Jan Beulich <JBeulich@xxxxxxxx> > Sent: 05 July 2019 13:54 > To: Paul Durrant <Paul.Durrant@xxxxxxxxxx> > Cc: JulienGrall <julien.grall@xxxxxxx>; Andrew Cooper > <Andrew.Cooper3@xxxxxxxxxx>; George Dunlap > <George.Dunlap@xxxxxxxxxx>; Ian Jackson <Ian.Jackson@xxxxxxxxxx>; Stefano > Stabellini > <sstabellini@xxxxxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx; KonradRzeszutek Wilk > <konrad.wilk@xxxxxxxxxx>; Tim (Xen.org) <tim@xxxxxxx>; WeiLiu <wl@xxxxxxx> > Subject: Re: [PATCH v2 1/2] xmalloc: remove struct xmem_pool init_region > > On 05.07.2019 14:18, Paul Durrant wrote: > >> From: Jan Beulich <JBeulich@xxxxxxxx> > >> Sent: 05 July 2019 13:12 > >> > >> On 05.07.2019 11:02, Paul Durrant wrote: > >>> @@ -352,13 +343,6 @@ void xmem_pool_destroy(struct xmem_pool *pool) > >>> if ( pool == NULL ) > >>> return; > >>> > >>> - /* User is destroying without ever allocating from this pool */ > >>> - if ( xmem_pool_get_used_size(pool) == BHDR_OVERHEAD ) > >>> - { > >>> - ASSERT(!pool->init_region); > >>> - pool->used_size -= BHDR_OVERHEAD; > >>> - } > >> > >> I can see that the ASSERT() can (and needs to) go away. But I > >> don't think you've changed anything elsewhere that would also > >> allow the entire if() to go away. > > > > I think so. AFAICT the size check against BHDR_OVERHEAD is entirely > > to avoid reporting presence of the init_region as a leak. I.e. in > > the presence of an init_region, the used_size would never drop > > below BHDR_OVERHEAD. Without an init_region, used_size should drop > > all the way (back) to 0 when the last xfree() is done. > > But the old code asserted that there was _no_ init region, and then > reduced pool->used_size. Oh yes, I was completely blind to that '!' as it only made sense to me the other way round. > And the state of the pool when there is no > init region doesn't change with your patch. If anything this if() > was bogus altogether, which I think was the case now that I've > looked more closely at how / when ->used_size gets updated. Yes, I think it was indeed totally bogus. > I would > have wanted to check the original code (which ours was cloned from) > to see whether they've changed this piece at some time, but the site > doesn't seem to be properly working (anymore). The code is over a decade old according to the boilerplate at the top so probably not surprising. > > Do you agree that ->used_size could equal BHDR_OVERHEAD only when > there's exactly one region, and when that one region has no > outstanding allocations? Yes, hence me getting fooled into thinking this was because because init_region was not freed. > Seeing the region removal in > xmem_pool_free() I also can't seem to see how the init region > would have been excluded from getting freed here, at which point > asserting whether there is (ever was) one looks even more fishy. > > Actually there's a perhaps telling comment in xmem_pool_create(): > > /* always obtain init_region lazily now to ensure it is get_mem'd > * in the same "context" as all other regions */ > > This suggests to me that originally the init region was set up right > here, at which point that assertion would have made sense. And there > we go - I'm not at all surprised that this stems from 6009f4ddb2 > ('Transcendent memory ("tmem") for Xen'), with no mention at all in > the commit message as to why the allocator needed to be changed. Oh... another casualty. > > IOW - as long as you agree with the analysis, and as long as a > reference to the above commit rendering stale that entire if() gets > added to the description (which may still be reasonable to do while > committing): > > Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Thanks. If you want me to re-work the comment then let me know, otherwise I'm totally happy for you to do it on commit. Paul > > Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |