[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190613135825.GG13533@google.com>
Date: Thu, 13 Jun 2019 08:58:25 -0500
From: Bjorn Helgaas <helgaas@...nel.org>
To: John Garry <john.garry@...wei.com>
Cc: lorenzo.pieralisi@....com, arnd@...db.de,
linux-pci@...r.kernel.org, rjw@...ysocki.net,
linux-arm-kernel@...ts.infradead.org, will.deacon@....com,
wangkefeng.wang@...wei.com, linuxarm@...wei.com,
andriy.shevchenko@...ux.intel.com, linux-kernel@...r.kernel.org,
catalin.marinas@....com
Subject: Re: [PATCH v4 1/3] lib: logic_pio: Use logical PIO low-level
accessors for !CONFIG_INDIRECT_PIO
On Tue, Jun 11, 2019 at 10:12:52PM +0800, John Garry wrote:
Another thought here:
> if (addr < MMIO_UPPER_LIMIT) { \
> ret = read##bw(PCI_IOBASE + addr); \
> } else if (addr >= MMIO_UPPER_LIMIT && addr < IO_SPACE_LIMIT) { \
> - struct logic_pio_hwaddr *entry = find_io_range(addr); \
> + struct logic_pio_hwaddr *range = find_io_range(addr); \
> + size_t sz = sizeof(type); \
> \
> - if (entry && entry->ops) \
> - ret = entry->ops->in(entry->hostdata, \
> - addr, sizeof(type)); \
> + if (range && range->ops) \
> + ret = range->ops->in(range->hostdata, addr, sz);\
> else \
> WARN_ON_ONCE(1); \
Could this be simplified a little by requiring callers to set
range->ops for LOGIC_PIO_INDIRECT ranges *before* calling
logic_pio_register_range()? E.g.,
hisi_lpc_probe(...)
{
range = devm_kzalloc(...);
range->flags = LOGIC_PIO_INDIRECT;
range->ops = &hisi_lpc_ops;
logic_pio_register_range(range);
...
and
logic_pio_register_range(struct logic_pio_hwaddr *new_range)
{
if (new_range->flags == LOGIC_PIO_INDIRECT && !new_range->ops)
return -EINVAL;
...
Then maybe you wouldn't need to check range->ops in the accessors.
Bjorn
Powered by blists - more mailing lists