All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Tomasz Nowicki <tn@semihalf.com>
Cc: Bjorn Helgaas <helgaas@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Hanjun Guo <hanjun.guo@linaro.org>,
	Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>,
	Sinan Kaya <okaya@codeaurora.org>,
	jchandra@broadcom.com, robert.richter@caviumnetworks.com,
	mw@semihalf.com, Liviu.Dudau@arm.com,
	David Daney <ddaney@caviumnetworks.com>,
	wangyijing@huawei.com,
	Suravee Suthikulanit <Suravee.Suthikulpanit@amd.com>,
	Mark Salter <msalter@redhat.com>,
	Linux PCI <linux-pci@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"linaro-acpi@lists.linaro.org" <linaro-acpi@lists.linaro.org>,
	Jon Masters <jcm@redhat.com>and
Subject: Re: [PATCH V7 03/11] pci, of: Move the PCI I/O space management to PCI core code.
Date: Tue, 10 May 2016 19:59:00 +0200	[thread overview]
Message-ID: <CAJZ5v0ge+LGwp=AkPF50H1ZXFA6J5ByazuY7Opc-aLJwWrBNxg@mail.gmail.com> (raw)
In-Reply-To: <1462893601-8937-4-git-send-email-tn@semihalf.com>

On Tue, May 10, 2016 at 5:19 PM, Tomasz Nowicki <tn@semihalf.com> wrote:
> No functional changes in this patch.
>
> PCI I/O space mapping code does not depend on OF, therefore it can be
> moved to PCI core code. This way we will be able to use it
> e.g. in ACPI PCI code.
>
> Suggested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
> CC: Arnd Bergmann <arnd@arndb.de>
> CC: Liviu Dudau <Liviu.Dudau@arm.com>
> ---
>  drivers/of/address.c       | 116 +--------------------------------------------
>  drivers/pci/pci.c          | 115 ++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/of_address.h |   9 ----
>  include/linux/pci.h        |   5 ++
>  4 files changed, 121 insertions(+), 124 deletions(-)
>
> diff --git a/drivers/of/address.c b/drivers/of/address.c
> index 91a469d..0a553c0 100644
> --- a/drivers/of/address.c
> +++ b/drivers/of/address.c
> @@ -4,6 +4,7 @@
>  #include <linux/ioport.h>
>  #include <linux/module.h>
>  #include <linux/of_address.h>
> +#include <linux/pci.h>
>  #include <linux/pci_regs.h>
>  #include <linux/sizes.h>
>  #include <linux/slab.h>
> @@ -673,121 +674,6 @@ const __be32 *of_get_address(struct device_node *dev, int index, u64 *size,
>  }
>  EXPORT_SYMBOL(of_get_address);
>
> -#ifdef PCI_IOBASE
> -struct io_range {
> -       struct list_head list;
> -       phys_addr_t start;
> -       resource_size_t size;
> -};
> -
> -static LIST_HEAD(io_range_list);
> -static DEFINE_SPINLOCK(io_range_lock);
> -#endif
> -
> -/*
> - * Record the PCI IO range (expressed as CPU physical address + size).
> - * Return a negative value if an error has occured, zero otherwise
> - */
> -int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
> -{
> -       int err = 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) {
> -                       /* 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");
> -       }
> -
> -       /* add the range to the list */
> -       range = kzalloc(sizeof(*range), GFP_ATOMIC);
> -       if (!range) {
> -               err = -ENOMEM;
> -               goto end_register;
> -       }
> -
> -       range->start = addr;
> -       range->size = size;
> -
> -       list_add_tail(&range->list, &io_range_list);
> -
> -end_register:
> -       spin_unlock(&io_range_lock);
> -#endif
> -
> -       return err;
> -}
> -
> -phys_addr_t pci_pio_to_address(unsigned long pio)
> -{
> -       phys_addr_t address = (phys_addr_t)OF_BAD_ADDR;
> -
> -#ifdef PCI_IOBASE
> -       struct io_range *range;
> -       resource_size_t allocated_size = 0;
> -
> -       if (pio > IO_SPACE_LIMIT)
> -               return address;
> -
> -       spin_lock(&io_range_lock);
> -       list_for_each_entry(range, &io_range_list, list) {
> -               if (pio >= allocated_size && pio < allocated_size + range->size) {
> -                       address = range->start + pio - allocated_size;
> -                       break;
> -               }
> -               allocated_size += range->size;
> -       }
> -       spin_unlock(&io_range_lock);
> -#endif
> -
> -       return address;
> -}
> -
> -unsigned long __weak pci_address_to_pio(phys_addr_t address)
> -{
> -#ifdef PCI_IOBASE
> -       struct io_range *res;
> -       resource_size_t offset = 0;
> -       unsigned long addr = -1;
> -
> -       spin_lock(&io_range_lock);
> -       list_for_each_entry(res, &io_range_list, list) {
> -               if (address >= res->start && address < res->start + res->size) {
> -                       addr = address - res->start + offset;
> -                       break;
> -               }
> -               offset += res->size;
> -       }
> -       spin_unlock(&io_range_lock);
> -
> -       return addr;
> -#else
> -       if (address > IO_SPACE_LIMIT)
> -               return (unsigned long)-1;
> -
> -       return (unsigned long) address;
> -#endif
> -}
> -
>  static int __of_address_to_resource(struct device_node *dev,
>                 const __be32 *addrp, u64 size, unsigned int flags,
>                 const char *name, struct resource *r)
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 25e0327..bc0c914 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -3021,6 +3021,121 @@ int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
>  }
>  EXPORT_SYMBOL(pci_request_regions_exclusive);
>
> +#ifdef PCI_IOBASE
> +struct io_range {
> +       struct list_head list;
> +       phys_addr_t start;
> +       resource_size_t size;
> +};
> +
> +static LIST_HEAD(io_range_list);
> +static DEFINE_SPINLOCK(io_range_lock);
> +#endif
> +
> +/*
> + * Record the PCI IO range (expressed as CPU physical address + size).
> + * Return a negative value if an error has occured, zero otherwise
> + */
> +int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
> +{
> +       int err = 0;
> +
> +#ifdef PCI_IOBASE

I understand that this moves code around, but those in-function
#ifdefs aren't nice.  Any chance to get rid of them but putting whole
functions under the #ifdef?

WARNING: multiple messages have this Message-ID (diff)
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Tomasz Nowicki <tn@semihalf.com>
Cc: Bjorn Helgaas <helgaas@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Hanjun Guo <hanjun.guo@linaro.org>,
	Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>,
	Sinan Kaya <okaya@codeaurora.org>,
	jchandra@broadcom.com, robert.richter@caviumnetworks.com,
	mw@semihalf.com, Liviu.Dudau@arm.com,
	David Daney <ddaney@caviumnetworks.com>,
	wangyijing@huawei.com,
	Suravee Suthikulanit <Suravee.Suthikulpanit@amd.com>,
	Mark Salter <msalter@redhat.com>,
	Linux PCI <linux-pci@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"linaro-acpi@lists.linaro.org" <linaro-acpi@lists.linaro.org>,
	Jon Masters <jcm@redhat.com>,
	andrea.gallo@linaro.org, dhdang@apm.com, jeremy.linton@arm.com,
	liudongdong3@huawei.com,
	Christopher Covington <cov@codeaurora.org>
Subject: Re: [PATCH V7 03/11] pci, of: Move the PCI I/O space management to PCI core code.
Date: Tue, 10 May 2016 19:59:00 +0200	[thread overview]
Message-ID: <CAJZ5v0ge+LGwp=AkPF50H1ZXFA6J5ByazuY7Opc-aLJwWrBNxg@mail.gmail.com> (raw)
In-Reply-To: <1462893601-8937-4-git-send-email-tn@semihalf.com>

On Tue, May 10, 2016 at 5:19 PM, Tomasz Nowicki <tn@semihalf.com> wrote:
> No functional changes in this patch.
>
> PCI I/O space mapping code does not depend on OF, therefore it can be
> moved to PCI core code. This way we will be able to use it
> e.g. in ACPI PCI code.
>
> Suggested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
> CC: Arnd Bergmann <arnd@arndb.de>
> CC: Liviu Dudau <Liviu.Dudau@arm.com>
> ---
>  drivers/of/address.c       | 116 +--------------------------------------------
>  drivers/pci/pci.c          | 115 ++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/of_address.h |   9 ----
>  include/linux/pci.h        |   5 ++
>  4 files changed, 121 insertions(+), 124 deletions(-)
>
> diff --git a/drivers/of/address.c b/drivers/of/address.c
> index 91a469d..0a553c0 100644
> --- a/drivers/of/address.c
> +++ b/drivers/of/address.c
> @@ -4,6 +4,7 @@
>  #include <linux/ioport.h>
>  #include <linux/module.h>
>  #include <linux/of_address.h>
> +#include <linux/pci.h>
>  #include <linux/pci_regs.h>
>  #include <linux/sizes.h>
>  #include <linux/slab.h>
> @@ -673,121 +674,6 @@ const __be32 *of_get_address(struct device_node *dev, int index, u64 *size,
>  }
>  EXPORT_SYMBOL(of_get_address);
>
> -#ifdef PCI_IOBASE
> -struct io_range {
> -       struct list_head list;
> -       phys_addr_t start;
> -       resource_size_t size;
> -};
> -
> -static LIST_HEAD(io_range_list);
> -static DEFINE_SPINLOCK(io_range_lock);
> -#endif
> -
> -/*
> - * Record the PCI IO range (expressed as CPU physical address + size).
> - * Return a negative value if an error has occured, zero otherwise
> - */
> -int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
> -{
> -       int err = 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) {
> -                       /* 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");
> -       }
> -
> -       /* add the range to the list */
> -       range = kzalloc(sizeof(*range), GFP_ATOMIC);
> -       if (!range) {
> -               err = -ENOMEM;
> -               goto end_register;
> -       }
> -
> -       range->start = addr;
> -       range->size = size;
> -
> -       list_add_tail(&range->list, &io_range_list);
> -
> -end_register:
> -       spin_unlock(&io_range_lock);
> -#endif
> -
> -       return err;
> -}
> -
> -phys_addr_t pci_pio_to_address(unsigned long pio)
> -{
> -       phys_addr_t address = (phys_addr_t)OF_BAD_ADDR;
> -
> -#ifdef PCI_IOBASE
> -       struct io_range *range;
> -       resource_size_t allocated_size = 0;
> -
> -       if (pio > IO_SPACE_LIMIT)
> -               return address;
> -
> -       spin_lock(&io_range_lock);
> -       list_for_each_entry(range, &io_range_list, list) {
> -               if (pio >= allocated_size && pio < allocated_size + range->size) {
> -                       address = range->start + pio - allocated_size;
> -                       break;
> -               }
> -               allocated_size += range->size;
> -       }
> -       spin_unlock(&io_range_lock);
> -#endif
> -
> -       return address;
> -}
> -
> -unsigned long __weak pci_address_to_pio(phys_addr_t address)
> -{
> -#ifdef PCI_IOBASE
> -       struct io_range *res;
> -       resource_size_t offset = 0;
> -       unsigned long addr = -1;
> -
> -       spin_lock(&io_range_lock);
> -       list_for_each_entry(res, &io_range_list, list) {
> -               if (address >= res->start && address < res->start + res->size) {
> -                       addr = address - res->start + offset;
> -                       break;
> -               }
> -               offset += res->size;
> -       }
> -       spin_unlock(&io_range_lock);
> -
> -       return addr;
> -#else
> -       if (address > IO_SPACE_LIMIT)
> -               return (unsigned long)-1;
> -
> -       return (unsigned long) address;
> -#endif
> -}
> -
>  static int __of_address_to_resource(struct device_node *dev,
>                 const __be32 *addrp, u64 size, unsigned int flags,
>                 const char *name, struct resource *r)
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 25e0327..bc0c914 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -3021,6 +3021,121 @@ int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
>  }
>  EXPORT_SYMBOL(pci_request_regions_exclusive);
>
> +#ifdef PCI_IOBASE
> +struct io_range {
> +       struct list_head list;
> +       phys_addr_t start;
> +       resource_size_t size;
> +};
> +
> +static LIST_HEAD(io_range_list);
> +static DEFINE_SPINLOCK(io_range_lock);
> +#endif
> +
> +/*
> + * Record the PCI IO range (expressed as CPU physical address + size).
> + * Return a negative value if an error has occured, zero otherwise
> + */
> +int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
> +{
> +       int err = 0;
> +
> +#ifdef PCI_IOBASE

I understand that this moves code around, but those in-function
#ifdefs aren't nice.  Any chance to get rid of them but putting whole
functions under the #ifdef?

WARNING: multiple messages have this Message-ID (diff)
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Tomasz Nowicki <tn@semihalf.com>
Cc: Bjorn Helgaas <helgaas@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Hanjun Guo <hanjun.guo@linaro.org>,
	Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>,
	Sinan Kaya <okaya@codeaurora.org>,
	jchandra@broadcom.com, robert.richter@caviumnetworks.com,
	mw@semihalf.com, Liviu.Dudau@arm.com,
	David Daney <ddaney@caviumnetworks.com>,
	wangyijing@huawei.com,
	Suravee Suthikulanit <Suravee.Suthikulpanit@amd.com>,
	Mark Salter <msalter@redhat.com>,
	Linux PCI <linux-pci@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"linaro-acpi@lists.linaro.org" <linaro-acpi@lists.linaro.org>,
	Jon Masters <jcm@redhat.com>,
	andrea.gallo@linaro.org, dhdang@apm.com, jeremy.linton@arm.com,
	liudongdong3@huawei.com,
	Christopher Covington <cov@codeaurora.org>
Subject: Re: [PATCH V7 03/11] pci, of: Move the PCI I/O space management to PCI core code.
Date: Tue, 10 May 2016 19:59:00 +0200	[thread overview]
Message-ID: <CAJZ5v0ge+LGwp=AkPF50H1ZXFA6J5ByazuY7Opc-aLJwWrBNxg@mail.gmail.com> (raw)
In-Reply-To: <1462893601-8937-4-git-send-email-tn@semihalf.com>

On Tue, May 10, 2016 at 5:19 PM, Tomasz Nowicki <tn@semihalf.com> wrote:
> No functional changes in this patch.
>
> PCI I/O space mapping code does not depend on OF, therefore it can be
> moved to PCI core code. This way we will be able to use it
> e.g. in ACPI PCI code.
>
> Suggested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
> CC: Arnd Bergmann <arnd@arndb.de>
> CC: Liviu Dudau <Liviu.Dudau@arm.com>
> ---
>  drivers/of/address.c       | 116 +--------------------------------------------
>  drivers/pci/pci.c          | 115 ++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/of_address.h |   9 ----
>  include/linux/pci.h        |   5 ++
>  4 files changed, 121 insertions(+), 124 deletions(-)
>
> diff --git a/drivers/of/address.c b/drivers/of/address.c
> index 91a469d..0a553c0 100644
> --- a/drivers/of/address.c
> +++ b/drivers/of/address.c
> @@ -4,6 +4,7 @@
>  #include <linux/ioport.h>
>  #include <linux/module.h>
>  #include <linux/of_address.h>
> +#include <linux/pci.h>
>  #include <linux/pci_regs.h>
>  #include <linux/sizes.h>
>  #include <linux/slab.h>
> @@ -673,121 +674,6 @@ const __be32 *of_get_address(struct device_node *dev, int index, u64 *size,
>  }
>  EXPORT_SYMBOL(of_get_address);
>
> -#ifdef PCI_IOBASE
> -struct io_range {
> -       struct list_head list;
> -       phys_addr_t start;
> -       resource_size_t size;
> -};
> -
> -static LIST_HEAD(io_range_list);
> -static DEFINE_SPINLOCK(io_range_lock);
> -#endif
> -
> -/*
> - * Record the PCI IO range (expressed as CPU physical address + size).
> - * Return a negative value if an error has occured, zero otherwise
> - */
> -int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
> -{
> -       int err = 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) {
> -                       /* 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");
> -       }
> -
> -       /* add the range to the list */
> -       range = kzalloc(sizeof(*range), GFP_ATOMIC);
> -       if (!range) {
> -               err = -ENOMEM;
> -               goto end_register;
> -       }
> -
> -       range->start = addr;
> -       range->size = size;
> -
> -       list_add_tail(&range->list, &io_range_list);
> -
> -end_register:
> -       spin_unlock(&io_range_lock);
> -#endif
> -
> -       return err;
> -}
> -
> -phys_addr_t pci_pio_to_address(unsigned long pio)
> -{
> -       phys_addr_t address = (phys_addr_t)OF_BAD_ADDR;
> -
> -#ifdef PCI_IOBASE
> -       struct io_range *range;
> -       resource_size_t allocated_size = 0;
> -
> -       if (pio > IO_SPACE_LIMIT)
> -               return address;
> -
> -       spin_lock(&io_range_lock);
> -       list_for_each_entry(range, &io_range_list, list) {
> -               if (pio >= allocated_size && pio < allocated_size + range->size) {
> -                       address = range->start + pio - allocated_size;
> -                       break;
> -               }
> -               allocated_size += range->size;
> -       }
> -       spin_unlock(&io_range_lock);
> -#endif
> -
> -       return address;
> -}
> -
> -unsigned long __weak pci_address_to_pio(phys_addr_t address)
> -{
> -#ifdef PCI_IOBASE
> -       struct io_range *res;
> -       resource_size_t offset = 0;
> -       unsigned long addr = -1;
> -
> -       spin_lock(&io_range_lock);
> -       list_for_each_entry(res, &io_range_list, list) {
> -               if (address >= res->start && address < res->start + res->size) {
> -                       addr = address - res->start + offset;
> -                       break;
> -               }
> -               offset += res->size;
> -       }
> -       spin_unlock(&io_range_lock);
> -
> -       return addr;
> -#else
> -       if (address > IO_SPACE_LIMIT)
> -               return (unsigned long)-1;
> -
> -       return (unsigned long) address;
> -#endif
> -}
> -
>  static int __of_address_to_resource(struct device_node *dev,
>                 const __be32 *addrp, u64 size, unsigned int flags,
>                 const char *name, struct resource *r)
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 25e0327..bc0c914 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -3021,6 +3021,121 @@ int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
>  }
>  EXPORT_SYMBOL(pci_request_regions_exclusive);
>
> +#ifdef PCI_IOBASE
> +struct io_range {
> +       struct list_head list;
> +       phys_addr_t start;
> +       resource_size_t size;
> +};
> +
> +static LIST_HEAD(io_range_list);
> +static DEFINE_SPINLOCK(io_range_lock);
> +#endif
> +
> +/*
> + * Record the PCI IO range (expressed as CPU physical address + size).
> + * Return a negative value if an error has occured, zero otherwise
> + */
> +int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
> +{
> +       int err = 0;
> +
> +#ifdef PCI_IOBASE

I understand that this moves code around, but those in-function
#ifdefs aren't nice.  Any chance to get rid of them but putting whole
functions under the #ifdef?

WARNING: multiple messages have this Message-ID (diff)
From: rafael@kernel.org (Rafael J. Wysocki)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V7 03/11] pci, of: Move the PCI I/O space management to PCI core code.
Date: Tue, 10 May 2016 19:59:00 +0200	[thread overview]
Message-ID: <CAJZ5v0ge+LGwp=AkPF50H1ZXFA6J5ByazuY7Opc-aLJwWrBNxg@mail.gmail.com> (raw)
In-Reply-To: <1462893601-8937-4-git-send-email-tn@semihalf.com>

On Tue, May 10, 2016 at 5:19 PM, Tomasz Nowicki <tn@semihalf.com> wrote:
> No functional changes in this patch.
>
> PCI I/O space mapping code does not depend on OF, therefore it can be
> moved to PCI core code. This way we will be able to use it
> e.g. in ACPI PCI code.
>
> Suggested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
> CC: Arnd Bergmann <arnd@arndb.de>
> CC: Liviu Dudau <Liviu.Dudau@arm.com>
> ---
>  drivers/of/address.c       | 116 +--------------------------------------------
>  drivers/pci/pci.c          | 115 ++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/of_address.h |   9 ----
>  include/linux/pci.h        |   5 ++
>  4 files changed, 121 insertions(+), 124 deletions(-)
>
> diff --git a/drivers/of/address.c b/drivers/of/address.c
> index 91a469d..0a553c0 100644
> --- a/drivers/of/address.c
> +++ b/drivers/of/address.c
> @@ -4,6 +4,7 @@
>  #include <linux/ioport.h>
>  #include <linux/module.h>
>  #include <linux/of_address.h>
> +#include <linux/pci.h>
>  #include <linux/pci_regs.h>
>  #include <linux/sizes.h>
>  #include <linux/slab.h>
> @@ -673,121 +674,6 @@ const __be32 *of_get_address(struct device_node *dev, int index, u64 *size,
>  }
>  EXPORT_SYMBOL(of_get_address);
>
> -#ifdef PCI_IOBASE
> -struct io_range {
> -       struct list_head list;
> -       phys_addr_t start;
> -       resource_size_t size;
> -};
> -
> -static LIST_HEAD(io_range_list);
> -static DEFINE_SPINLOCK(io_range_lock);
> -#endif
> -
> -/*
> - * Record the PCI IO range (expressed as CPU physical address + size).
> - * Return a negative value if an error has occured, zero otherwise
> - */
> -int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
> -{
> -       int err = 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) {
> -                       /* 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");
> -       }
> -
> -       /* add the range to the list */
> -       range = kzalloc(sizeof(*range), GFP_ATOMIC);
> -       if (!range) {
> -               err = -ENOMEM;
> -               goto end_register;
> -       }
> -
> -       range->start = addr;
> -       range->size = size;
> -
> -       list_add_tail(&range->list, &io_range_list);
> -
> -end_register:
> -       spin_unlock(&io_range_lock);
> -#endif
> -
> -       return err;
> -}
> -
> -phys_addr_t pci_pio_to_address(unsigned long pio)
> -{
> -       phys_addr_t address = (phys_addr_t)OF_BAD_ADDR;
> -
> -#ifdef PCI_IOBASE
> -       struct io_range *range;
> -       resource_size_t allocated_size = 0;
> -
> -       if (pio > IO_SPACE_LIMIT)
> -               return address;
> -
> -       spin_lock(&io_range_lock);
> -       list_for_each_entry(range, &io_range_list, list) {
> -               if (pio >= allocated_size && pio < allocated_size + range->size) {
> -                       address = range->start + pio - allocated_size;
> -                       break;
> -               }
> -               allocated_size += range->size;
> -       }
> -       spin_unlock(&io_range_lock);
> -#endif
> -
> -       return address;
> -}
> -
> -unsigned long __weak pci_address_to_pio(phys_addr_t address)
> -{
> -#ifdef PCI_IOBASE
> -       struct io_range *res;
> -       resource_size_t offset = 0;
> -       unsigned long addr = -1;
> -
> -       spin_lock(&io_range_lock);
> -       list_for_each_entry(res, &io_range_list, list) {
> -               if (address >= res->start && address < res->start + res->size) {
> -                       addr = address - res->start + offset;
> -                       break;
> -               }
> -               offset += res->size;
> -       }
> -       spin_unlock(&io_range_lock);
> -
> -       return addr;
> -#else
> -       if (address > IO_SPACE_LIMIT)
> -               return (unsigned long)-1;
> -
> -       return (unsigned long) address;
> -#endif
> -}
> -
>  static int __of_address_to_resource(struct device_node *dev,
>                 const __be32 *addrp, u64 size, unsigned int flags,
>                 const char *name, struct resource *r)
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 25e0327..bc0c914 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -3021,6 +3021,121 @@ int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
>  }
>  EXPORT_SYMBOL(pci_request_regions_exclusive);
>
> +#ifdef PCI_IOBASE
> +struct io_range {
> +       struct list_head list;
> +       phys_addr_t start;
> +       resource_size_t size;
> +};
> +
> +static LIST_HEAD(io_range_list);
> +static DEFINE_SPINLOCK(io_range_lock);
> +#endif
> +
> +/*
> + * Record the PCI IO range (expressed as CPU physical address + size).
> + * Return a negative value if an error has occured, zero otherwise
> + */
> +int __weak pci_register_io_range(phys_addr_t addr, resource_size_t size)
> +{
> +       int err = 0;
> +
> +#ifdef PCI_IOBASE

I understand that this moves code around, but those in-function
#ifdefs aren't nice.  Any chance to get rid of them but putting whole
functions under the #ifdef?

  reply	other threads:[~2016-05-10 17:59 UTC|newest]

Thread overview: 239+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-10 15:19 [PATCH V7 00/11] Support for generic ACPI based PCI host controller Tomasz Nowicki
2016-05-10 15:19 ` Tomasz Nowicki
2016-05-10 15:19 ` [PATCH V7 01/11] PCI: Provide common functions for ECAM mapping Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 15:19 ` [PATCH V7 02/11] PCI: generic, thunder: update to use generic ECAM API Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 15:19 ` [PATCH V7 03/11] pci, of: Move the PCI I/O space management to PCI core code Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 17:59   ` Rafael J. Wysocki [this message]
2016-05-10 17:59     ` Rafael J. Wysocki
2016-05-10 17:59     ` Rafael J. Wysocki
2016-05-10 17:59     ` Rafael J. Wysocki
2016-05-11  7:36     ` Tomasz Nowicki
2016-05-11  7:36       ` Tomasz Nowicki
2016-05-11  7:36       ` Tomasz Nowicki
2016-05-11  7:36       ` Tomasz Nowicki
2016-05-11 11:01       ` Arnd Bergmann
2016-05-11 11:01         ` Arnd Bergmann
2016-05-11 11:01         ` Arnd Bergmann
2016-05-11 11:01         ` Arnd Bergmann
2016-05-10 15:19 ` [PATCH V7 04/11] pci: Add new function to unmap IO resources Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-23  8:28   ` Jayachandran C
2016-05-23  8:28     ` Jayachandran C
2016-05-23  8:28     ` Jayachandran C
2016-05-10 15:19 ` [PATCH V7 05/11] acpi, pci: Support IO resources when parsing PCI host bridge resources Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 18:20   ` Rafael J. Wysocki
2016-05-10 18:20     ` Rafael J. Wysocki
2016-05-10 18:20     ` Rafael J. Wysocki
2016-05-10 18:20     ` Rafael J. Wysocki
2016-05-11  7:39     ` Tomasz Nowicki
2016-05-11  7:39       ` Tomasz Nowicki
2016-05-11  7:39       ` Tomasz Nowicki
2016-05-11  7:39       ` Tomasz Nowicki
2016-05-10 15:19 ` [PATCH V7 06/11] pci, acpi: Provide a way to assign bus domain number Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 15:19 ` [PATCH V7 07/11] pci, acpi: Handle ACPI companion assignment Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 18:37   ` Rafael J. Wysocki
2016-05-10 18:37     ` Rafael J. Wysocki
2016-05-10 18:37     ` Rafael J. Wysocki
2016-05-10 18:37     ` Rafael J. Wysocki
2016-05-10 18:43     ` Rafael J. Wysocki
2016-05-10 18:43       ` Rafael J. Wysocki
2016-05-10 18:43       ` Rafael J. Wysocki
2016-05-10 18:43       ` Rafael J. Wysocki
2016-05-11 10:11     ` Lorenzo Pieralisi
2016-05-11 10:11       ` Lorenzo Pieralisi
2016-05-11 10:11       ` Lorenzo Pieralisi
2016-05-11 10:11       ` Lorenzo Pieralisi
2016-05-11 20:30       ` Rafael J. Wysocki
2016-05-11 20:30         ` Rafael J. Wysocki
2016-05-11 20:30         ` Rafael J. Wysocki
2016-05-11 20:30         ` Rafael J. Wysocki
2016-05-11 22:43         ` Bjorn Helgaas
2016-05-11 22:43           ` Bjorn Helgaas
2016-05-11 22:43           ` Bjorn Helgaas
2016-05-11 22:43           ` Bjorn Helgaas
2016-05-12 10:01           ` Lorenzo Pieralisi
2016-05-12 10:01             ` Lorenzo Pieralisi
2016-05-12 10:01             ` Lorenzo Pieralisi
2016-05-12 10:01             ` Lorenzo Pieralisi
2016-05-12 10:43           ` Jayachandran C
2016-05-12 10:43             ` Jayachandran C
2016-05-12 10:43             ` Jayachandran C
2016-05-12 10:43             ` Jayachandran C
2016-05-12 11:27             ` Rafael J. Wysocki
2016-05-12 11:27               ` Rafael J. Wysocki
2016-05-12 11:27               ` Rafael J. Wysocki
2016-05-12 11:27               ` Rafael J. Wysocki
2016-05-13 10:32               ` Lorenzo Pieralisi
2016-05-13 10:32                 ` Lorenzo Pieralisi
2016-05-13 10:32                 ` Lorenzo Pieralisi
2016-05-13 10:32                 ` Lorenzo Pieralisi
2016-05-12 10:50           ` Tomasz Nowicki
2016-05-12 10:50             ` Tomasz Nowicki
2016-05-12 10:50             ` Tomasz Nowicki
2016-05-12 10:50             ` Tomasz Nowicki
2016-05-12 12:08             ` Bjorn Helgaas
2016-05-12 12:08               ` Bjorn Helgaas
2016-05-12 12:08               ` Bjorn Helgaas
2016-05-12 12:08               ` Bjorn Helgaas
2016-05-17  3:11   ` Dongdong Liu
2016-05-17  3:11     ` Dongdong Liu
2016-05-17  3:11     ` Dongdong Liu
2016-05-17 13:44     ` Tomasz Nowicki
2016-05-17 13:44       ` Tomasz Nowicki
2016-05-10 15:19 ` [PATCH V7 08/11] pci, acpi: Support for ACPI based generic PCI host controller Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 17:54   ` Rafael J. Wysocki
2016-05-10 17:54     ` Rafael J. Wysocki
2016-05-10 17:54     ` Rafael J. Wysocki
2016-05-10 17:54     ` Rafael J. Wysocki
2016-05-10 18:18   ` Rafael J. Wysocki
2016-05-10 18:18     ` Rafael J. Wysocki
2016-05-10 18:18     ` Rafael J. Wysocki
2016-05-10 18:18     ` Rafael J. Wysocki
2016-05-13 11:25   ` Jayachandran C
2016-05-13 11:25     ` Jayachandran C
2016-05-13 11:25     ` Jayachandran C
2016-05-13 11:31     ` Rafael J. Wysocki
2016-05-13 11:31       ` Rafael J. Wysocki
2016-05-13 11:31       ` Rafael J. Wysocki
2016-05-13 11:31       ` Rafael J. Wysocki
2016-05-13 11:42       ` Tomasz Nowicki
2016-05-13 11:42         ` Tomasz Nowicki
2016-05-13 11:42         ` Tomasz Nowicki
2016-05-13 11:42         ` Tomasz Nowicki
2016-05-14  9:07   ` Jayachandran C
2016-05-14  9:07     ` Jayachandran C
2016-05-14  9:07     ` Jayachandran C
2016-05-23 11:34     ` Tomasz Nowicki
2016-05-23 11:34       ` Tomasz Nowicki
2016-05-23 11:34       ` Tomasz Nowicki
2016-05-19 16:56   ` Matthias Brugger
2016-05-19 16:56     ` Matthias Brugger
2016-05-10 15:19 ` [PATCH V7 09/11] arm64, pci, acpi: ACPI support for legacy IRQs parsing and consolidation with DT code Tomasz Nowicki
2016-05-10 15:19   ` Tomasz Nowicki
2016-05-10 15:20 ` [PATCH V7 10/11] arm64, pci, acpi: Provide ACPI-specific prerequisites for PCI bus enumeration Tomasz Nowicki
2016-05-10 15:20   ` Tomasz Nowicki
2016-05-10 15:20 ` [PATCH V7 11/11] arm64, pci, acpi: Start using ACPI based PCI host controller driver for ARM64 Tomasz Nowicki
2016-05-10 15:20   ` Tomasz Nowicki
2016-05-11 10:41 ` [PATCH V7 00/11] Support for generic ACPI based PCI host controller Gabriele Paoloni
2016-05-11 10:41   ` Gabriele Paoloni
2016-05-11 10:41   ` Gabriele Paoloni
2016-05-11 10:41   ` Gabriele Paoloni
2016-05-11 11:08   ` Tomasz Nowicki
2016-05-11 11:08     ` Tomasz Nowicki
2016-05-11 11:08     ` Tomasz Nowicki
2016-05-11 11:08     ` Tomasz Nowicki
2016-05-11 12:53     ` Gabriele Paoloni
2016-05-11 12:53       ` Gabriele Paoloni
2016-05-11 12:53       ` Gabriele Paoloni
2016-05-11 12:53       ` Gabriele Paoloni
2016-05-20  4:41     ` Jon Masters
2016-05-20  4:41       ` Jon Masters
2016-05-20  4:41       ` Jon Masters
2016-05-20  7:37       ` Ard Biesheuvel
2016-05-20  7:37         ` Ard Biesheuvel
2016-05-20  7:37         ` Ard Biesheuvel
2016-05-20  7:37         ` Ard Biesheuvel
2016-05-20  8:01         ` Jon Masters
2016-05-20  8:01           ` Jon Masters
2016-05-20  8:01           ` Jon Masters
2016-05-20  8:01           ` Jon Masters
2016-05-20  8:28           ` Ard Biesheuvel
2016-05-20  8:28             ` Ard Biesheuvel
2016-05-20  8:28             ` Ard Biesheuvel
2016-05-20  8:28             ` Ard Biesheuvel
2016-05-20  8:40             ` Gabriele Paoloni
2016-05-20  8:40               ` Gabriele Paoloni
2016-05-20  8:40               ` Gabriele Paoloni
2016-05-20  8:40               ` Gabriele Paoloni
2016-05-20  9:14               ` Ard Biesheuvel
2016-05-20  9:14                 ` Ard Biesheuvel
2016-05-20  9:14                 ` Ard Biesheuvel
2016-05-20  9:14                 ` Ard Biesheuvel
2016-05-23 10:56                 ` Lorenzo Pieralisi
2016-05-23 10:56                   ` Lorenzo Pieralisi
2016-05-23 10:56                   ` Lorenzo Pieralisi
2016-05-23 10:56                   ` Lorenzo Pieralisi
2016-05-23 15:16                   ` Gabriele Paoloni
2016-05-23 15:16                     ` Gabriele Paoloni
2016-05-23 15:16                     ` Gabriele Paoloni
2016-05-23 15:16                     ` Gabriele Paoloni
2016-05-23 23:39                     ` Bjorn Helgaas
2016-05-23 23:39                       ` Bjorn Helgaas
2016-05-23 23:39                       ` Bjorn Helgaas
2016-05-23 23:39                       ` Bjorn Helgaas
2016-05-24  1:11                       ` Jon Masters
2016-05-24  1:11                         ` Jon Masters
2016-05-24  1:11                         ` Jon Masters
2016-05-24  1:11                         ` Jon Masters
2016-05-24  1:48                         ` Jon Masters
2016-05-24  1:48                           ` Jon Masters
2016-05-24  1:48                           ` Jon Masters
2016-05-24  1:48                           ` Jon Masters
2016-05-24 14:33                         ` Gabriele Paoloni
2016-05-24 14:33                           ` Gabriele Paoloni
2016-05-24 14:33                           ` Gabriele Paoloni
2016-05-24 14:33                           ` Gabriele Paoloni
2016-05-24  7:23                       ` Gabriele Paoloni
2016-05-24  7:23                         ` Gabriele Paoloni
2016-05-24  7:23                         ` Gabriele Paoloni
2016-05-24  7:23                         ` Gabriele Paoloni
2016-05-24 14:38                         ` Jon Masters
2016-05-24 14:38                           ` Jon Masters
2016-05-24 14:38                           ` Jon Masters
2016-05-24 14:38                           ` Jon Masters
2016-05-24 17:24                       ` Lorenzo Pieralisi
2016-05-24 17:24                         ` Lorenzo Pieralisi
2016-05-24 17:24                         ` Lorenzo Pieralisi
2016-05-24 17:24                         ` Lorenzo Pieralisi
2016-05-24 17:35                         ` Jon Masters
2016-05-24 17:35                           ` Jon Masters
2016-05-24 17:35                           ` Jon Masters
2016-05-24 17:35                           ` Jon Masters
2016-05-24 19:00                         ` Bjorn Helgaas
2016-05-24 19:00                           ` Bjorn Helgaas
2016-05-24 19:00                           ` Bjorn Helgaas
2016-05-24 19:00                           ` Bjorn Helgaas
2016-05-26  9:58                           ` Gabriele Paoloni
2016-05-26  9:58                             ` Gabriele Paoloni
2016-05-26  9:58                             ` Gabriele Paoloni
2016-05-26  9:58                             ` Gabriele Paoloni
2016-05-25  6:31                         ` Gabriele Paoloni
2016-05-25  6:31                           ` Gabriele Paoloni
2016-05-25  6:31                           ` Gabriele Paoloni
2016-05-25  6:31                           ` Gabriele Paoloni
2016-05-24  4:20                   ` Jon Masters
2016-05-24  4:20                     ` Jon Masters
2016-05-24  4:20                     ` Jon Masters
2016-05-24  4:20                     ` Jon Masters
2016-05-20  8:11         ` Gabriele Paoloni
2016-05-20  8:11           ` Gabriele Paoloni
2016-05-20  8:11           ` Gabriele Paoloni
2016-05-20  8:11           ` Gabriele Paoloni
2016-05-20  8:24           ` Jon Masters
2016-05-20  8:24             ` Jon Masters
2016-05-20  8:24             ` Jon Masters
2016-05-20  8:24             ` Jon Masters
2016-05-13  2:55 ` Duc Dang
2016-05-13  2:55   ` Duc Dang
2016-05-13  2:55   ` Duc Dang
2016-05-19 18:18 ` Jeremy Linton
2016-05-19 18:18   ` Jeremy Linton
2016-05-20  7:46 ` Jon Masters
2016-05-20  7:46   ` Jon Masters
2016-05-20  7:46   ` Jon Masters
2016-05-23 11:25 ` Dongdong Liu
2016-05-23 11:25   ` Dongdong Liu
2016-05-23 11:25   ` Dongdong Liu
2016-05-23 15:36 ` Sinan Kaya
2016-05-23 15:36   ` Sinan Kaya

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='CAJZ5v0ge+LGwp=AkPF50H1ZXFA6J5ByazuY7Opc-aLJwWrBNxg@mail.gmail.com' \
    --to=rafael@kernel.org \
    --cc=Liviu.Dudau@arm.com \
    --cc=Lorenzo.Pieralisi@arm.com \
    --cc=Suravee.Suthikulpanit@amd.com \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=ddaney@caviumnetworks.com \
    --cc=hanjun.guo@linaro.org \
    --cc=helgaas@kernel.org \
    --cc=jchandra@broadcom.com \
    --cc=jcm@redhat.com \
    --cc=linaro-acpi@lists.linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=msalter@redhat.com \
    --cc=mw@semihalf.com \
    --cc=okaya@codeaurora.org \
    --cc=robert.richter@caviumnetworks.com \
    --cc=tn@semihalf.com \
    --cc=wangyijing@huawei.com \
    --cc=will.deacon@arm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.