|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Xen 4.6.0-rc1 build with lock_profile=y crash_debug=y, frame_pointer=y and domain.c:241: error: negative width in bit-field â<anonymous>â
On Tue, Aug 25, 2015 at 03:52:15PM -0400, Konrad Rzeszutek Wilk wrote:
> On Tue, Aug 25, 2015 at 06:41:06PM +0100, Andrew Cooper wrote:
> > On 25/08/15 18:09, Konrad Rzeszutek Wilk wrote:
> > > On Tue, Aug 25, 2015 at 05:48:58PM +0100, Andrew Cooper wrote:
> > >> On 25/08/15 17:43, Konrad Rzeszutek Wilk wrote:
> > >>> I am troubleshooting an locking issue and figured I would enable extra
> > >>> options.
> > >>>
> > >>> But now I am hitting this build issue:
> > >>>
> > >>> domain.c:241: error: negative width in bit-field â<anonymous>â
> > >>>
> > >>> Which is:
> > >>>
> > >>> 229 struct domain *alloc_domain_struct(void)
> > >>> 230 {
> > >>> 231 struct domain *d;
> > >>> ...
> > >>> 241 BUILD_BUG_ON(sizeof(*d) > PAGE_SIZE);
> > >>>
> > >>> Thoughts?
> > >> That is to catch the case where sizeof struct domain exceeds PAGE_SIZE.
> > >>
> > >> The logic behind this was to prevent needing order 1 allocations for
> > >> domains or vcpus, and therefore allocation failures in heavily memory
> > >> fragmented situations.
> > >>
> > >> It means we will probably need to find some other areas of struct domain
> > >> to shrink, or move out into a separate xmalloc().
> > >>
> > >> For straight debugging, it is acceptable to drop the BUILD_BUG_ON(). If
> > >> we can't drop the size of struct domain, we might want to move to using
> > >> vmalloc() instead.
> > > It is big. pahole says:
> > >
> > > /* size: 4352, cachelines: 68, members: 74 */
> > > /* sum members: 4238, holes: 9, sum holes: 34 */
> > > /* padding: 80 */
> > > /* paddings: 1, sum paddings: 4 */
> >
> > So by rearranging to reduce padding, it would easily fit ;p
> >
> > >
> > > Would this patch be OK then:
> > > diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
> > > index 045f6ff..cc9ce0b 100644
> > > --- a/xen/arch/x86/domain.c
> > > +++ b/xen/arch/x86/domain.c
> > > @@ -238,7 +238,9 @@ struct domain *alloc_domain_struct(void)
> > > if ( unlikely(!bits) )
> > > bits = _domain_struct_bits();
> > >
> > > +#ifndef LOCK_PROFILE
> > > BUILD_BUG_ON(sizeof(*d) > PAGE_SIZE);
> > > +#endif
> > > d = alloc_xenheap_pages(0, MEMF_bits(bits));
> > > if ( d != NULL )
> > > clear_page(d);
> > >
> > > (not compile tested nor runtime tested)
> >
> > Either remove it locally for debugging, or use something like
I forgot to mention that by removing it locally Xen ends up halting at:
(XEN) Detected 3292.657 MHz processor.
..
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |