Date: Wed, 3 Jun 2009 21:06:05 +0100 (BST) From: Robert Watson <rwatson@FreeBSD.org> To: Eygene Ryabinkin <rea-fbsd@codelabs.ru> Cc: current@freebsd.org, marius@freebsd.org, sparc64@freebsd.org, FreeBSD Tinderbox <tinderbox@freebsd.org>, kmacy@freebsd.org Subject: Re: [head tinderbox] failure on sparc64/sun4v Message-ID: <alpine.BSF.2.00.0906032104100.74158@fledge.watson.org> In-Reply-To: <rPuoszoUcXlrNmrZFDbbbNJuZzs@XX1fo6zQUfC4h0jjRC6IBz3oNH4> References: <20090602222445.2F6017302F@freebsd-current.sentex.ca> <mqQn8SFFPOY77oNsI7n1tk5O7LE@10Ilc7MfiXA2JVIRVQpZfk7cTQ4> <rPuoszoUcXlrNmrZFDbbbNJuZzs@XX1fo6zQUfC4h0jjRC6IBz3oNH4>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 3 Jun 2009, Eygene Ryabinkin wrote: >> This seems to be related to the recent NETISR changes, namely, the >> addition of the pc_netisr member to the struct pcpu: >> http://svn.freebsd.org/viewvc/base/head/sys/sys/pcpu.h?r1=187679&r2=193219&diff_format=u >> >> I am not sure how large (void *) is on sun4v, but it seems to me >> that it is 4 bytes long, so PCPU_MD_FIELDS_PAD inside sun4v/include/pcpu.h > ^^^^^^^^^^^^ > Sorry, eight bytes long: wrote 4, but really meant 8 ;)) > >> should be compensated for this change. Something like >> ----- >> #ifdef KTR >> #define PCPU_MD_FIELDS_PAD (3 - (PCPU_NAME_LEN + 7) / 8) >> #else >> #define PCPU_MD_FIELDS_PAD 3 >> #endif >> ----- >> though I am not very sure about KTR's case. > > KTR's case seems to be wrong for PCPU_NAME_LEN larger than 24 bytes. Just > now we won't be able to reach this with the current definition for > PCPU_NAME_LEN, but some day (N - (PCPU_NAME_LEN + 7)/8) can become negative > and that's bad. > > The attached patch should fix this (although I have no sun4v to test on, so > take it with a grain of salt). > > By the way, having looked at sys/sys/pcpu.h, I see that there are parts of > 'struct pcpu' that depend on the KTR_PERCPU being defined and they are never > compensated with padding in PCPU_MD_FIELDS for sun4v. Is KTR_PERCPU > constant for sun4v (inexisting or defined everytime) or I am missing > something? Is there a reason not just to use __aligned(64) or the like on the first entry of the MD PCPU structure for sun4v to avoid future MI pcpu changes from causing similar discomfort for the MD pcpu parts? Also, do we know why these alignment/sizing requirements exist for struct pcpu on sun4v but not other platforms? If this is about packing pcpu structures into properly aligned cache lines, again __aligned() might be the right approach to take... Robert N M Watson Computer Laboratory University of Cambridge
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.0906032104100.74158>