From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Linux-Arch <linux-arch@vger.kernel.org>,
linux-ntb@googlegroups.com,
linux-crypto <linux-crypto@vger.kernel.org>,
"Arnd Bergmann" <arnd@arndb.de>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Horia Geantă" <horia.geanta@nxp.com>,
"Stephen Bates" <sbates@raithlin.com>,
"Benjamin Herrenschmidt" <benh@kernel.crashing.org>,
"Paul Mackerras" <paulus@samba.org>,
"Michael Ellerman" <mpe@ellerman.id.au>,
"Suresh Warrier" <warrier@linux.vnet.ibm.com>,
"Nicholas Piggin" <npiggin@gmail.com>
Subject: Re: [PATCH v5 3/6] iomap: introduce io{read|write}64_{lo_hi|hi_lo}
Date: Mon, 31 Jul 2017 19:10:59 +0300 [thread overview]
Message-ID: <CAHp75Ve619EE9ePy2zj+MjS7-MW3u_k2BQ5kc9iFBMYYQ9nMWQ@mail.gmail.com> (raw)
In-Reply-To: <5c52d908-3b77-c5c6-99a7-1164d878ac95@deltatee.com>
On Mon, Jul 31, 2017 at 6:55 PM, Logan Gunthorpe <logang@deltatee.com> wrote:
> On 30/07/17 10:03 AM, Andy Shevchenko wrote:
>> On Thu, Jul 27, 2017 at 2:19 AM, Logan Gunthorpe <logang@deltatee.com> 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.
Okay
> 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.
Not okay.
Some drivers (hardware) would like to have non-atomic MMIO accesses
when readq() defined
> 3) The arch has ioread64 defined so the atomic operation is used.
Not okay. Same reason as above.
In case of readq() / writeq() it's defined by the order of inclusion:
1)
include <...non-atomic...>
include <linux/io.h>
Always non-atomic will be used.
2)
include <linux/io.h>
include <...non-atomic...>
Auto switch like you described.
I don't like above solution, since it's fragile, but few drivers depend on that.
If you wish to do it always like 2) perhaps we need to split accessors
to ones for fixed bus width and ones for atomic/non-atomic cases.
OTOH, it would be done by introducing
memcpyXX_fromio()
memcpyXX_toio()
memsetXX_io()
Where XX = 64, 32, 16, 8.
Note, that ioreadXX_rep() is not the same as above.
P.S. I have done a table of comparison between IO accessors in Linux
kernel and it looks hell out of being consistent.
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2017-07-31 16:10 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-26 23:19 [PATCH v5 0/6] make io{read|write}64 globally usable Logan Gunthorpe
2017-07-26 23:19 ` Logan Gunthorpe
2017-07-26 23:19 ` [PATCH v5 1/6] powerpc: io.h: move iomap.h include so that it can use readq/writeq defs Logan Gunthorpe
2017-07-26 23:19 ` Logan Gunthorpe
2017-07-26 23:19 ` [PATCH v5 2/6] powerpc: iomap.c: introduce io{read|write}64_{lo_hi|hi_lo} Logan Gunthorpe
2017-07-26 23:19 ` Logan Gunthorpe
2017-07-26 23:19 ` [PATCH v5 3/6] iomap: " Logan Gunthorpe
2017-07-30 16:03 ` Andy Shevchenko
2017-07-30 16:03 ` Andy Shevchenko
2017-07-31 15:55 ` Logan Gunthorpe
2017-07-31 15:55 ` Logan Gunthorpe
2017-07-31 16:10 ` Andy Shevchenko [this message]
2017-07-31 16:10 ` Andy Shevchenko
2017-07-31 16:31 ` Logan Gunthorpe
2017-07-31 16:31 ` Logan Gunthorpe
2017-07-31 17:58 ` Andy Shevchenko
2017-07-31 17:58 ` Andy Shevchenko
2017-07-31 18:00 ` Logan Gunthorpe
2017-07-31 18:00 ` Logan Gunthorpe
2017-07-31 18:03 ` Andy Shevchenko
2017-07-31 18:03 ` Andy Shevchenko
2017-07-31 18:04 ` Logan Gunthorpe
2017-07-31 18:04 ` Logan Gunthorpe
2017-07-31 18:11 ` Andy Shevchenko
2017-07-31 18:11 ` Andy Shevchenko
2017-07-26 23:19 ` [PATCH v5 4/6] io-64-nonatomic: add io{read|write}64[be]{_lo_hi|_hi_lo} macros Logan Gunthorpe
2017-07-26 23:19 ` [PATCH v5 5/6] ntb: ntb_hw_intel: use io-64-nonatomic instead of in-driver hacks Logan Gunthorpe
2017-08-01 17:47 ` Jon Mason
2017-08-01 17:47 ` Jon Mason
2017-07-26 23:19 ` [PATCH v5 6/6] crypto: caam: cleanup CONFIG_64BIT ifdefs when using io{read|write}64 Logan Gunthorpe
2017-07-26 23:19 ` Logan Gunthorpe
2017-07-31 10:29 ` [PATCH v5 0/6] make io{read|write}64 globally usable Horia Geantă
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAHp75Ve619EE9ePy2zj+MjS7-MW3u_k2BQ5kc9iFBMYYQ9nMWQ@mail.gmail.com \
--to=andy.shevchenko@gmail.com \
--cc=arnd@arndb.de \
--cc=benh@kernel.crashing.org \
--cc=gregkh@linuxfoundation.org \
--cc=horia.geanta@nxp.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-ntb@googlegroups.com \
--cc=logang@deltatee.com \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=paulus@samba.org \
--cc=sbates@raithlin.com \
--cc=warrier@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).