Thread (43 messages) 43 messages, 8 authors, 2017-07-04

[PATCH v9 2/7] PCI: Apply the new generic I/O management on PCI IO hosts

From: Gabriele Paoloni <hidden>
Date: 2017-05-30 08:12:32
Also in: linux-acpi, linux-pci, lkml

Hi Bjorn
-----Original Message-----
From: Bjorn Helgaas [mailto:helgaas at kernel.org]
Sent: 26 May 2017 22:20
To: Gabriele Paoloni
Cc: catalin.marinas at arm.com; will.deacon at arm.com; robh+dt at kernel.org;
frowand.list at gmail.com; bhelgaas at google.com; rafael at kernel.org;
arnd at arndb.de; linux-arm-kernel at lists.infradead.org;
lorenzo.pieralisi at arm.com; mark.rutland at arm.com; minyard at acm.org;
benh at kernel.crashing.org; John Garry; linux-kernel at vger.kernel.org;
xuwei (O); Linuxarm; linux-acpi at vger.kernel.org; zhichang.yuan; linux-
pci at vger.kernel.org; olof at lixom.net; brian.starkey at arm.com
Subject: Re: [PATCH v9 2/7] PCI: Apply the new generic I/O management
on PCI IO hosts

On Thu, May 25, 2017 at 12:37:23PM +0100, Gabriele Paoloni wrote:
quoted
From: "zhichang.yuan" <redacted>

After introducing the new generic I/O space management(LOGIC_IO), the
original PCI MMIO relevant helpers need to be updated based on the
new
quoted
interfaces defined in LOGIC_IO.
This patch adapts the corresponding code to match the changes
introduced
quoted
by LOGIC_IO.

Signed-off-by: zhichang.yuan <redacted>
Signed-off-by: Gabriele Paoloni <redacted>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>        #earlier draft
Not sure how you plan to merge this, but here's my ack:

Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Many thanks for your Ack :)

Maybe Arnd can take the whole patchset (or just the lib framework + DT part
leaving the ACPI part to Lorenzo)....?
If you split this as suggested below, add my ack to all three patches.
Sure I will
quoted
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b01bd5b..c9fe12b 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
...
quoted
-int __weak pci_register_io_range(phys_addr_t addr, resource_size_t
size)
quoted
+int pci_register_io_range(struct fwnode_handle *fwnode, phys_addr_t
addr,
quoted
+			resource_size_t	size)
It's trivial and nit-picky, but I would do the __weak removal in its
own patch.  It's obviously fine because there's only one
implementation, but it's unrelated to the main point of this patch.
Agreed
I would split the signature change (fwnode addition) to a separate
patch, too, just to make the actual change more obvious, especially
since that's the only part that crosses subsystems (ACPI, PCI, OF).
Agreed too
quoted
 {
-	int err = 0;
-
+	int ret = 0;
 #ifdef PCI_IOBASE
-	struct io_range *range;
-	resource_size_t allocated_size = 0;
-
-	/* check if the range hasn't been previously recorded */
-	spin_lock(&io_range_lock);
-	list_for_each_entry(range, &io_range_list, list) {
-		if (addr >= range->start && addr + size <= range->start +
size) {
quoted
-			/* range already registered, bail out */
-			goto end_register;
-		}
-		allocated_size += range->size;
-	}
-
-	/* range not registed yet, check for available space */
-	if (allocated_size + size - 1 > IO_SPACE_LIMIT) {
-		/* if it's too big check if 64K space can be reserved */
-		if (allocated_size + SZ_64K - 1 > IO_SPACE_LIMIT) {
-			err = -E2BIG;
-			goto end_register;
-		}
-
-		size = SZ_64K;
-		pr_warn("Requested IO range too big, new size set to
64K\n");
quoted
-	}
+	struct logic_pio_hwaddr *range;

-	/* add the range to the list */
-	range = kzalloc(sizeof(*range), GFP_ATOMIC);
-	if (!range) {
-		err = -ENOMEM;
-		goto end_register;
-	}
+	if (!size || addr + size < addr)
+		return -EINVAL;

-	range->start = addr;
+	range = kzalloc(sizeof(*range), GFP_KERNEL);
+	if (!range)
+		return -ENOMEM;
Add a blank line here.
Yep I will

Cheers
Gab
quoted
+	range->fwnode = fwnode;
 	range->size = size;
+	range->hw_start = addr;
+	range->flags = PIO_CPU_MMIO;

-	list_add_tail(&range->list, &io_range_list);
-
-end_register:
-	spin_unlock(&io_range_lock);
+	ret = logic_pio_register_range(range);
+	if (ret)
+		kfree(range);
 #endif

-	return err;
+	return ret;
 }
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help