Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 May 2016 17:35:06 +0000
From:      "Bjoern A. Zeeb" <bzeeb-lists@lists.zabbadoz.net>
To:        Ian Lepore <ian@freebsd.org>
Cc:        Nathan Whitehorn <nwhitehorn@freebsd.org>, Justin Hibbits <chmeeedalf@gmail.com>, Scott Long <scottl@freebsd.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r300154 - head/sys/net
Message-ID:  <1EED3540-DCCF-40D2-91BA-CE0AA54C5D08@lists.zabbadoz.net>
In-Reply-To: <1463592737.1180.294.camel@freebsd.org>
References:  <201605181545.u4IFjCKD030751@repo.freebsd.org> <20160518105033.1eae7432@zhabar.knownspace> <759d085c-a485-c2ed-5d70-26eb4d27cdc2@freebsd.org> <1463592737.1180.294.camel@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

> On 18 May 2016, at 17:32 , Ian Lepore <ian@freebsd.org> wrote:
>=20
> On Wed, 2016-05-18 at 10:14 -0700, Nathan Whitehorn wrote:
>>=20
>> On 05/18/16 08:50, Justin Hibbits wrote:
>>> On Wed, 18 May 2016 15:45:12 +0000 (UTC)
>>> Scott Long <scottl@FreeBSD.org> wrote:
>>>=20
>>>> Author: scottl
>>>> Date: Wed May 18 15:45:12 2016
>>>> New Revision: 300154
>>>> URL: https://svnweb.freebsd.org/changeset/base/300154
>>>>=20
>>>> Log:
>>>>   Activate the NO_64BIT_ATOMICS code for mips and powerpc
>>>>=20
>>>> Modified:
>>>>   head/sys/net/mp_ring.c
>>>>=20
>>>> Modified: head/sys/net/mp_ring.c
>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>>> --- head/sys/net/mp_ring.c	Wed May 18 15:44:45 2016
>>>> (r300153) +++ head/sys/net/mp_ring.c	Wed May 18 15:45:12
>>>> 2016	(r300154) @@ -37,15 +37,17 @@ __FBSDID("$FreeBSD$");
>>>>  #include <sys/malloc.h>
>>>>  #include <machine/cpu.h>
>>>>=20
>>>> -
>>>> -
>>>> -#include <net/mp_ring.h>
>>>> +#if defined(__powerpc__) || defined(__mips__)
>>>> +#define NO_64BIT_ATOMICS
>>>> +#endif
>>>>=20
>>>>  #if defined(__i386__)
>>>>  #define atomic_cmpset_acq_64 atomic_cmpset_64
>>>>  #define atomic_cmpset_rel_64 atomic_cmpset_64
>>>>  #endif
>>>>=20
>>>> +#include <net/mp_ring.h>
>>>> +
>>>>  union ring_state {
>>>>  	struct {
>>>>  		uint16_t pidx_head;
>>>>=20
>>> powerpc64 defines both __powerpc__ and __powerpc64__, so you're
>>> killing
>>> atomics on powerpc64 with this.
>>>=20
>>> - Justin
>>>=20
>>=20
>> Don't all of our 64-bit platforms have 64-bit atomics? So you could
>> just=20
>> #if defined(__LP64__) || defined(__i386__) ||=20
>> defined(__whatever_the_thing_is_for_mips_n32__)
>> -Nathan
>>=20
>=20
> It may be more complicated than that, though.  armv6 can do 64-bit
> atomics even tho it's 32-bit.  armv4, also 32-bit, can do 64-bit
> atomics in the kernel but not in userland.
>=20
> Maybe machine/atomic.h needs a #define that says whether 64-bit ops =
are
> available in the current compilation unit.  (And likewise for other =
bit
> sizes if we have arches that have other limitations.)


Question because I didn=E2=80=99t follow the details, but how was this =
solved for the COUNTERS framework?


/bz=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1EED3540-DCCF-40D2-91BA-CE0AA54C5D08>