Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752449AbdGaP4P (ORCPT ); Mon, 31 Jul 2017 11:56:15 -0400 Received: from ale.deltatee.com ([207.54.116.67]:56211 "EHLO ale.deltatee.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752063AbdGaP4L (ORCPT ); Mon, 31 Jul 2017 11:56:11 -0400 To: Andy Shevchenko Cc: "linux-kernel@vger.kernel.org" , Linux-Arch , linux-ntb@googlegroups.com, linux-crypto , Arnd Bergmann , Greg Kroah-Hartman , =?UTF-8?Q?Horia_Geant=c4=83?= , Stephen Bates , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Suresh Warrier , Nicholas Piggin References: <20170726231917.6073-1-logang@deltatee.com> <20170726231917.6073-4-logang@deltatee.com> From: Logan Gunthorpe Message-ID: <5c52d908-3b77-c5c6-99a7-1164d878ac95@deltatee.com> Date: Mon, 31 Jul 2017 09:55:45 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 172.16.1.162 X-SA-Exim-Rcpt-To: npiggin@gmail.com, warrier@linux.vnet.ibm.com, mpe@ellerman.id.au, paulus@samba.org, benh@kernel.crashing.org, sbates@raithlin.com, horia.geanta@nxp.com, gregkh@linuxfoundation.org, arnd@arndb.de, linux-crypto@vger.kernel.org, linux-ntb@googlegroups.com, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, andy.shevchenko@gmail.com X-SA-Exim-Mail-From: logang@deltatee.com Subject: Re: [PATCH v5 3/6] iomap: introduce io{read|write}64_{lo_hi|hi_lo} X-SA-Exim-Version: 4.2.1 (built Mon, 26 Dec 2011 16:24:06 +0000) X-SA-Exim-Scanned: Yes (on ale.deltatee.com) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1626 Lines: 45 On 30/07/17 10:03 AM, Andy Shevchenko wrote: > On Thu, Jul 27, 2017 at 2:19 AM, Logan Gunthorpe wrote: >> In order to provide non-atomic functions for io{read|write}64 that will >> use readq and writeq when appropriate. We define a number of variants >> of these functions in the generic iomap that will do non-atomic >> operations on pio but atomic operations on mmio. >> >> These functions are only defined if readq and writeq are defined. If >> they are not, then the wrappers that always use non-atomic operations >> from include/linux/io-64-nonatomic*.h will be used. > > Don't you see here a slight problem? > > In some cases we want to substitute atomic in favour of non-atomic > when both are defined. > So, please don't do this "smartly". I'm not sure what you mean here. The driver should use ioread64 and include an io-64-nonatomic header. Then there are three cases: 1) The arch has no atomic 64 bit io operations defined. In this case it uses the non-atomic inline function in the io-64-nonatomic header. 2) The arch uses CONFIG_GENERIC_IOMAP and has readq defined, but not ioread64 defined (likely because pio can't do atomic 64 bit operations but mmio can). In this case we need to use the ioread64_xx functions defined in iomap.c which do atomic mmio and non-atomic pio. 3) The arch has ioread64 defined so the atomic operation is used. >> +u64 ioread64_lo_hi(void __iomem *addr) >> +{ >> + IO_COND(addr, return pio_read64_lo_hi(port), return readq(addr)); >> + return 0xffffffffffffffffLL; >> +} > > U missed u. I'll fix this in the next revision. Thanks, Logan