Skip site navigation (1)Skip section navigation (2)
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>