Date: Wed, 5 Aug 2020 19:40:50 +0200 From: Mateusz Guzik <mjguzik@gmail.com> To: Don Lewis <truckman@freebsd.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r363891 - head/sys/kern Message-ID: <CAGudoHHNGp5f9fVLeRT-LRnP8L3NT%2B=hjpKUFucdQk81RBvUcQ@mail.gmail.com> In-Reply-To: <tkrat.62900c56fff65422@FreeBSD.org> References: <202008050924.0759Oc3H010909@repo.freebsd.org> <tkrat.62900c56fff65422@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
That's fine, then the arch does not have avoidably increased alignment. On 8/5/20, Don Lewis <truckman@freebsd.org> wrote: > On 5 Aug, Mateusz Guzik wrote: >> Author: mjg >> Date: Wed Aug 5 09:24:38 2020 >> New Revision: 363891 >> URL: https://svnweb.freebsd.org/changeset/base/363891 >> >> Log: >> cache: reduce zone alignment to 8 bytes >> >> It used to be sizeof of the given struct to accomodate for 32 bit mips >> doing 64 bit loads, but the same can be achieved with requireing just >> 64 bit alignment. >> >> While here reorder struct namecache so that most commonly used fields >> are closer. >> >> Modified: >> head/sys/kern/vfs_cache.c >> >> Modified: head/sys/kern/vfs_cache.c >> ============================================================================== >> --- head/sys/kern/vfs_cache.c Wed Aug 5 09:24:00 2020 (r363890) >> +++ head/sys/kern/vfs_cache.c Wed Aug 5 09:24:38 2020 (r363891) >> @@ -122,9 +122,9 @@ _Static_assert(sizeof(struct negstate) <= >> sizeof(struc >> "the state must fit in a union with a pointer without growing it"); >> >> struct namecache { >> - CK_LIST_ENTRY(namecache) nc_hash;/* hash chain */ >> LIST_ENTRY(namecache) nc_src; /* source vnode list */ >> TAILQ_ENTRY(namecache) nc_dst; /* destination vnode list */ >> + CK_LIST_ENTRY(namecache) nc_hash;/* hash chain */ >> struct vnode *nc_dvp; /* vnode of parent of name */ >> union { >> struct vnode *nu_vp; /* vnode the name refers to */ >> @@ -142,6 +142,8 @@ struct namecache { >> * to be stored. The nc_dotdottime field is used when a cache entry is >> mapping >> * both a non-dotdot directory name plus dotdot for the directory's >> * parent. >> + * >> + * See below for alignment requirement. >> */ >> struct namecache_ts { >> struct timespec nc_time; /* timespec provided by fs */ >> @@ -150,6 +152,14 @@ struct namecache_ts { >> struct namecache nc_nc; >> }; >> >> +/* >> + * At least mips n32 performs 64-bit accesses to timespec as found >> + * in namecache_ts and requires them to be aligned. Since others >> + * may be in the same spot suffer a little bit and enforce the >> + * alignment for everyone. Note this is a nop for 64-bit platforms. >> + */ >> +#define CACHE_ZONE_ALIGNMENT UMA_ALIGNOF(time_t) > > time_t is only 32 bits on i386 > > -- Mateusz Guzik <mjguzik gmail.com>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGudoHHNGp5f9fVLeRT-LRnP8L3NT%2B=hjpKUFucdQk81RBvUcQ>