From owner-freebsd-mips@freebsd.org Mon Dec 10 18:09:14 2018 Return-Path: Delivered-To: freebsd-mips@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3A176132ED67 for ; Mon, 10 Dec 2018 18:09:14 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-qk1-x72f.google.com (mail-qk1-x72f.google.com [IPv6:2607:f8b0:4864:20::72f]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 81D3F85F45 for ; Mon, 10 Dec 2018 18:09:13 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-qk1-x72f.google.com with SMTP id r71so7020042qkr.10 for ; Mon, 10 Dec 2018 10:09:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=izASmEXcZkNRUhllPPiM6/u2lmPYtoqraqz9/U0eU4s=; b=i8MFgj7Rqggs7kYltyhZjwuso1lca7aU1UJdiJ9KYzv91V0i+6LkC3njvf0dAgdpD0 18tPoV7g43B2jQdujtLh7n2/9u1kjaVh5czhMhfu76njcrKya6vqLMZC6qAPm2XrnO36 HWOfPxN5unLCK1mYLO6k9aceYxNdtwCcD9MQM3VWUq2sVU+8W/5P2LROJ5rQiKvndToG dMtp+O9v3RWBtuDuFnA8gyXuXhFkcgViBj01tfVv3M4KWGZAWllzvhSUGNKPlNPN7fXx 2Z0Q+cNjb3gSLvHuPtRu6Ah+LCxGMUudwzeH2bI2Hlk1ID1vKSPciz2DbZuK4S4XJoei BVVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=izASmEXcZkNRUhllPPiM6/u2lmPYtoqraqz9/U0eU4s=; b=O6ogCFsYDoMxRnZSdYgZxx9JICVascatl6ZbBYIBVh3ATt4jVTyZTKErENZsR3CcrB J7lAReai1vYTEBHJEa1JJPG8riSQgn+vYuacZmX2Nr5nhBVXZvLQTnwenLxR+p5lVveD wKHnDpSSrABfJ7ATcrcQLgSmBUS1sgZ5e8gGOVDjuiFmKj4hbBKBInEBDFUvKrXBtxiL t8hhGS+D6+OD+4IWBKeXfS564DT+9eFimlYDiTM4x0iXe+wbGI+Tq+N//wIf+BiqAFZ2 yPvtrNDkH8reeCXKmGzR1mFZ/DaLdnPj42/IthvsJAT62WBOCcebAKJxVI/rlxeEPKYm +TYg== X-Gm-Message-State: AA+aEWZGWrRYxd77qK8Ge56DCYGIoxdXsPkNld+HlPA3NqldpVTeaqzi Vmw9Bp6f2RJcqI2HTOmb3JF5DRkzgsWuQWSWtQt9jG42J1w= X-Google-Smtp-Source: AFSGD/U6a2qU8cGPAjWx+ALw6RedlgfdDcVrgBu8hRk2wFOhQgC5os8BZi0ol/CZFRh6fZhGyLRmKkOSGWAcaMiIBtA= X-Received: by 2002:a37:6c05:: with SMTP id h5mr11997029qkc.175.1544465352722; Mon, 10 Dec 2018 10:09:12 -0800 (PST) MIME-Version: 1.0 References: <201812101338.wBADcE5A026483@repo.freebsd.org> In-Reply-To: <201812101338.wBADcE5A026483@repo.freebsd.org> From: Warner Losh Date: Mon, 10 Dec 2018 11:09:01 -0700 Message-ID: Subject: Re: svn commit: r341787 - in head/sys: arm/include mips/include powerpc/include To: Hans Petter Selasky Cc: "freebsd-mips@freebsd.org" X-Rspamd-Queue-Id: 81D3F85F45 X-Spamd-Result: default: False [-5.47 / 15.00]; ARC_NA(0.00)[]; TO_DN_EQ_ADDR_SOME(0.00)[]; R_DKIM_ALLOW(-0.20)[bsdimp-com.20150623.gappssmtp.com]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; NEURAL_HAM_SHORT(-0.98)[-0.978,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; PREVIOUSLY_DELIVERED(0.00)[freebsd-mips@freebsd.org]; DMARC_NA(0.00)[bsdimp.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; MX_GOOD(-0.01)[cached: ALT1.aspmx.l.google.com]; RCPT_COUNT_TWO(0.00)[2]; RCVD_IN_DNSWL_NONE(0.00)[f.2.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.4.6.8.4.0.b.8.f.7.0.6.2.list.dnswl.org : 127.0.5.0]; DKIM_TRACE(0.00)[bsdimp-com.20150623.gappssmtp.com:+]; R_SPF_NA(0.00)[]; FORGED_SENDER(0.30)[imp@bsdimp.com,wlosh@bsdimp.com]; RCVD_TLS_LAST(0.00)[]; IP_SCORE(-2.49)[ip: (-9.56), ipnet: 2607:f8b0::/32(-1.50), asn: 15169(-1.28), country: US(-0.09)]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; FROM_NEQ_ENVFROM(0.00)[imp@bsdimp.com,wlosh@bsdimp.com]; RCVD_COUNT_TWO(0.00)[2] X-Rspamd-Server: mx1.freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Dec 2018 18:09:14 -0000 [[ redirected to mips mailing list ]] This doesn't quite do all platforms, see below, but 32-bit mips is omitted. On Mon, Dec 10, 2018 at 6:38 AM Hans Petter Selasky wrote: > Author: hselasky > Date: Mon Dec 10 13:38:13 2018 > New Revision: 341787 > URL: https://svnweb.freebsd.org/changeset/base/341787 > > Log: > Implement atomic_swap_xxx() for all platforms. > > +#if defined(__mips_n64) || defined(__mips_n32) > +static __inline uint64_t > +atomic_swap_64(volatile uint64_t *ptr, const uint64_t value) > 32-bit MIPS still lacks this. It will need to be implemented in assembler. Since we don't support SMP on mips-32 (or could easily move to not supporting it if we have kernels that purport to support it), it would be implemented as save status0; clear interrupts; do the swap; restore status0. If we actually do have SMP 32-mips, then it's much harder. Warner > +{ > + uint64_t retval; > + > + retval = *ptr; > + > + while (!atomic_fcmpset_64(ptr, &retval, value)) > + ; > + return (retval); > +} > +#endif > + > +static __inline unsigned long > +atomic_swap_long(volatile unsigned long *ptr, const unsigned long value) > +{ > + unsigned long retval; > + > + retval = *ptr; > + > + while (!atomic_fcmpset_32((volatile uint32_t *)ptr, > + (uint32_t *)&retval, value)) > + ; > + return (retval); > +} > + > +static __inline uintptr_t > +atomic_swap_ptr(volatile uintptr_t *ptr, const uintptr_t value) > +{ > + uintptr_t retval; > + > + retval = *ptr; > + > + while (!atomic_fcmpset_32((volatile uint32_t *)ptr, > + (uint32_t *)&retval, value)) > + ; > + return (retval); > +} > + > #endif /* ! _MACHINE_ATOMIC_H_ */ > > Modified: head/sys/powerpc/include/atomic.h > > ============================================================================== > --- head/sys/powerpc/include/atomic.h Mon Dec 10 09:45:57 2018 > (r341786) > +++ head/sys/powerpc/include/atomic.h Mon Dec 10 13:38:13 2018 > (r341787) > @@ -852,6 +852,9 @@ atomic_swap_64(volatile u_long *p, u_long v) > #define atomic_fetchadd_64 atomic_fetchadd_long > #define atomic_swap_long atomic_swap_64 > #define atomic_swap_ptr atomic_swap_64 > +#else > +#define atomic_swap_long(p,v) atomic_swap_32((volatile u_int > *)(p), v) > +#define atomic_swap_ptr(p,v) atomic_swap_32((volatile u_int > *)(p), v) > #endif > > #undef __ATOMIC_REL > >