Date: Tue, 5 Oct 2010 14:35:38 +0200 From: Svatopluk Kraus <onwahe@gmail.com> To: Matthew Fleming <mdf356@gmail.com> Cc: freebsd-current@freebsd.org Subject: Re: CACHE_LINE_SIZE too small, so struct vpglocks size alignment doesn't work Message-ID: <AANLkTinmLWc_kseWyT%2BN4t%2BwoKi8WVV2oBJ-zJRvRDB1@mail.gmail.com> In-Reply-To: <AANLkTikhwwOCsEiynN2ZFMSHx2OvwEJFyKYRwc0PzXPo@mail.gmail.com> References: <AANLkTinuourO3Y6vM_xc_fLZTtLKbW0EFfahgY1%2BDjS2@mail.gmail.com> <AANLkTikhwwOCsEiynN2ZFMSHx2OvwEJFyKYRwc0PzXPo@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Oct 1, 2010 at 4:01 PM, Matthew Fleming <mdf356@gmail.com> wrote: > On Fri, Oct 1, 2010 at 1:00 PM, Svatopluk Kraus <onwahe@gmail.com> wrote: >> Hallo, >> >> =A0a size of 'struct vpglocks' is padded to CACHE_LINE_SIZE size in >> 'sys/vm/vm_page.h' >> header file. I work on a 'coldfire' port where CACHE_LINE_SIZE is 16 byt= es and >> sizeof(struct mtx) is 20 bytes thus size alignment doesn't work. >> >> =A0I solved it somehow, but I like to learn how to solve it in spirit >> of FreeBSD. >> There are a couple of possibilities: >> >> A1. Do nothing for small CACHE_LINE_SIZE. >> A2. Pad to multiple of CACHE_LINE_SIZE. >> >> B1. use #if with CACHE_LINE_SIZE >> B2. use #if with __coldfire__ >> >> When I use B1 solution I need to known sizeof(struct mtx) value in >> preprocessing time. >> So, is it correct to use something like 'assym.s' magic >> (sys/i386/i386/genassym.c) >> in MI code? Or has someone another suggestion? > > What about padding to CACHE_LINE_SIZE - (sizeof(struct vpglocks) & > (CACHE_LINE_SIZE-1)) ? > > Some compilers will complain about 0-sized arrays, but gcc isn't one of t= hem. > > Cheers, > matthew Thanks for your nice suggestion. Probably, CACHE_LINE_SIZE size is a multiple of 2 at all times, so your solution is applicable. BTW, I use gcc 4.5.1 and when a structure is aligned to a value, then a sizeof of the structure is padded to the value too implicitly. So no explicit padding is needed. Cheers, Svata
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTinmLWc_kseWyT%2BN4t%2BwoKi8WVV2oBJ-zJRvRDB1>