Skip to content

Commit

Permalink
resource/PCI: align functions now return start of resource
Browse files Browse the repository at this point in the history
As suggested by Linus, align functions should return the start
of a resource, not void. An update of "res->start" is no longer
necessary.

Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
  • Loading branch information
Dominik Brodowski authored and jbarnes993 committed Feb 23, 2010
1 parent 93da620 commit b26b2d4
Show file tree
Hide file tree
Showing 21 changed files with 102 additions and 95 deletions.
4 changes: 2 additions & 2 deletions arch/alpha/kernel/pci.c
Expand Up @@ -126,7 +126,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_final);
#define MB (1024*KB)
#define GB (1024*MB)

void
resource_size_t
pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
Expand Down Expand Up @@ -184,7 +184,7 @@ pcibios_align_resource(void *data, struct resource *res,
}
}

res->start = start;
return start;
}
#undef KB
#undef MB
Expand Down
8 changes: 5 additions & 3 deletions arch/arm/kernel/bios32.c
Expand Up @@ -616,15 +616,17 @@ char * __init pcibios_setup(char *str)
* but we want to try to avoid allocating at 0x2900-0x2bff
* which might be mirrored at 0x0100-0x03ff..
*/
void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
resource_size_t pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
resource_size_t start = res->start;

if (res->flags & IORESOURCE_IO && start & 0x300)
start = (start + 0x3ff) & ~0x3ff;

res->start = (start + align - 1) & ~(align - 1);
start = (start + align - 1) & ~(align - 1);

return start;
}

/**
Expand Down
14 changes: 6 additions & 8 deletions arch/cris/arch-v32/drivers/pci/bios.c
Expand Up @@ -41,18 +41,16 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
return 0;
}

void
resource_size_t
pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
if (res->flags & IORESOURCE_IO) {
resource_size_t start = res->start;
resource_size_t start = res->start;

if (start & 0x300) {
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}
if ((res->flags & IORESOURCE_IO) && (start & 0x300))
start = (start + 0x3ff) & ~0x3ff;

return start
}

int pcibios_enable_resources(struct pci_dev *dev, int mask)
Expand Down
14 changes: 6 additions & 8 deletions arch/frv/mb93090-mb00/pci-frv.c
Expand Up @@ -32,18 +32,16 @@
* but we want to try to avoid allocating at 0x2900-0x2bff
* which might have be mirrored at 0x0100-0x03ff..
*/
void
resource_size_t
pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
if (res->flags & IORESOURCE_IO) {
resource_size_t start = res->start;
resource_size_t start = res->start;

if (start & 0x300) {
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}
if ((res->flags & IORESOURCE_IO) && (start & 0x300))
start = (start + 0x3ff) & ~0x3ff;

return start
}


Expand Down
3 changes: 2 additions & 1 deletion arch/ia64/pci/pci.c
Expand Up @@ -547,10 +547,11 @@ pcibios_disable_device (struct pci_dev *dev)
acpi_pci_irq_disable(dev);
}

void
resource_size_t
pcibios_align_resource (void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
return res->start;
}

/*
Expand Down
4 changes: 2 additions & 2 deletions arch/mips/pci/pci.c
Expand Up @@ -49,7 +49,7 @@ static int pci_initialized;
* but we want to try to avoid allocating at 0x2900-0x2bff
* which might have be mirrored at 0x0100-0x03ff..
*/
void
resource_size_t
pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
Expand All @@ -73,7 +73,7 @@ pcibios_align_resource(void *data, struct resource *res,
start = PCIBIOS_MIN_MEM + hose->mem_resource->start;
}

res->start = start;
return start;
}

static void __devinit pcibios_scanbus(struct pci_controller *hose)
Expand Down
10 changes: 5 additions & 5 deletions arch/mips/pmc-sierra/yosemite/ht.c
Expand Up @@ -345,14 +345,13 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
return pcibios_enable_resources(dev);
}

void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
resource_size_t pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
struct pci_dev *dev = data;
resource_size_t start = res->start;

if (res->flags & IORESOURCE_IO) {
resource_size_t start = res->start;

/* We need to avoid collisions with `mirrored' VGA ports
and other strange ISA hardware, so we always want the
addresses kilobyte aligned. */
Expand All @@ -363,8 +362,9 @@ void pcibios_align_resource(void *data, struct resource *res,
}

start = (start + 1024 - 1) & ~(1024 - 1);
res->start = start;
}

return start;
}

struct pci_ops titan_pci_ops = {
Expand Down
16 changes: 7 additions & 9 deletions arch/mn10300/unit-asb2305/pci-asb2305.c
Expand Up @@ -31,9 +31,11 @@
* but we want to try to avoid allocating at 0x2900-0x2bff
* which might have be mirrored at 0x0100-0x03ff..
*/
void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
resource_size_t pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
resource_size_t start = res->start;

#if 0
struct pci_dev *dev = data;

Expand All @@ -47,14 +49,10 @@ void pcibios_align_resource(void *data, struct resource *res,
);
#endif

if (res->flags & IORESOURCE_IO) {
unsigned long start = res->start;
if ((res->flags & IORESOURCE_IO) && (start & 0x300))
start = (start + 0x3ff) & ~0x3ff;

if (start & 0x300) {
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}
return start;
}


Expand Down
10 changes: 5 additions & 5 deletions arch/parisc/kernel/pci.c
Expand Up @@ -254,10 +254,10 @@ EXPORT_SYMBOL(pcibios_bus_to_resource);
* Since we are just checking candidates, don't use any fields other
* than res->start.
*/
void pcibios_align_resource(void *data, struct resource *res,
resource_size_t pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t alignment)
{
resource_size_t mask, align;
resource_size_t mask, align, start = res->start;

DBG_RES("pcibios_align_resource(%s, (%p) [%lx,%lx]/%x, 0x%lx, 0x%lx)\n",
pci_name(((struct pci_dev *) data)),
Expand All @@ -269,10 +269,10 @@ void pcibios_align_resource(void *data, struct resource *res,

/* Align to largest of MIN or input size */
mask = max(alignment, align) - 1;
res->start += mask;
res->start &= ~mask;
start += mask;
start &= ~mask;

/* The caller updates the end field, we don't. */
return start;
}


Expand Down
13 changes: 6 additions & 7 deletions arch/powerpc/kernel/pci-common.c
Expand Up @@ -1181,21 +1181,20 @@ static int skip_isa_ioresource_align(struct pci_dev *dev)
* but we want to try to avoid allocating at 0x2900-0x2bff
* which might have be mirrored at 0x0100-0x03ff..
*/
void pcibios_align_resource(void *data, struct resource *res,
resource_size_t pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
struct pci_dev *dev = data;
resource_size_t start = res->start;

if (res->flags & IORESOURCE_IO) {
resource_size_t start = res->start;

if (skip_isa_ioresource_align(dev))
return;
if (start & 0x300) {
return start;
if (start & 0x300)
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}

return start;
}
EXPORT_SYMBOL(pcibios_align_resource);

Expand Down
6 changes: 3 additions & 3 deletions arch/sh/drivers/pci/pci.c
Expand Up @@ -148,8 +148,8 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)
* addresses to be allocated in the 0x000-0x0ff region
* modulo 0x400.
*/
void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
resource_size_t pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
struct pci_dev *dev = data;
struct pci_channel *chan = dev->sysdata;
Expand All @@ -171,7 +171,7 @@ void pcibios_align_resource(void *data, struct resource *res,
start = PCIBIOS_MIN_MEM + chan->mem_resource->start;
}

res->start = start;
return start;
}

void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
Expand Down
5 changes: 3 additions & 2 deletions arch/sparc/kernel/pci.c
Expand Up @@ -722,9 +722,10 @@ void pcibios_update_irq(struct pci_dev *pdev, int irq)
{
}

void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
resource_size_t pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
return res->start;
}

int pcibios_enable_device(struct pci_dev *dev, int mask)
Expand Down
5 changes: 3 additions & 2 deletions arch/sparc/kernel/pcic.c
Expand Up @@ -768,9 +768,10 @@ char * __devinit pcibios_setup(char *str)
return str;
}

void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
resource_size_t pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
return res->start;
}

int pcibios_enable_device(struct pci_dev *pdev, int mask)
Expand Down
12 changes: 5 additions & 7 deletions arch/x86/pci/i386.c
Expand Up @@ -60,22 +60,20 @@ skip_isa_ioresource_align(struct pci_dev *dev) {
* but we want to try to avoid allocating at 0x2900-0x2bff
* which might have be mirrored at 0x0100-0x03ff..
*/
void
resource_size_t
pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
struct pci_dev *dev = data;
resource_size_t start = res->start;

if (res->flags & IORESOURCE_IO) {
resource_size_t start = res->start;

if (skip_isa_ioresource_align(dev))
return;
if (start & 0x300) {
return start;
if (start & 0x300)
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}
return start;
}
EXPORT_SYMBOL(pcibios_align_resource);

Expand Down
11 changes: 5 additions & 6 deletions arch/xtensa/kernel/pci.c
Expand Up @@ -69,26 +69,25 @@ static int pci_bus_count;
* but we want to try to avoid allocating at 0x2900-0x2bff
* which might have be mirrored at 0x0100-0x03ff..
*/
void
resource_size_t
pcibios_align_resource(void *data, struct resource *res, resource_size_t size,
resource_size_t align)
{
struct pci_dev *dev = data;
resource_size_t start = res->start;

if (res->flags & IORESOURCE_IO) {
resource_size_t start = res->start;

if (size > 0x100) {
printk(KERN_ERR "PCI: I/O Region %s/%d too large"
" (%ld bytes)\n", pci_name(dev),
dev->resource - res, size);
}

if (start & 0x300) {
if (start & 0x300)
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}

return start;
}

int
Expand Down
6 changes: 4 additions & 2 deletions drivers/pci/bus.c
Expand Up @@ -36,8 +36,10 @@ int
pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
resource_size_t size, resource_size_t align,
resource_size_t min, unsigned int type_mask,
void (*alignf)(void *, struct resource *, resource_size_t,
resource_size_t),
resource_size_t (*alignf)(void *,
struct resource *,
resource_size_t,
resource_size_t),
void *alignf_data)
{
int i, ret = -ENOMEM;
Expand Down
12 changes: 6 additions & 6 deletions drivers/pcmcia/rsrc_mgr.c
Expand Up @@ -114,32 +114,32 @@ struct pcmcia_align_data {
unsigned long offset;
};

static void pcmcia_align(void *align_data, struct resource *res,
unsigned long size, unsigned long align)
static resource_size_t pcmcia_align(void *align_data, struct resource *res,
resource_size_t size, resource_size_t align)
{
struct pcmcia_align_data *data = align_data;
unsigned long start;
resource_size_t start;

start = (res->start & ~data->mask) + data->offset;
if (start < res->start)
start += data->mask + 1;
res->start = start;

#ifdef CONFIG_X86
if (res->flags & IORESOURCE_IO) {
if (start & 0x300) {
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}
#endif

#ifdef CONFIG_M68K
if (res->flags & IORESOURCE_IO) {
if ((res->start + size - 1) >= 1024)
res->start = res->end;
start = res->end;
}
#endif

return start;
}


Expand Down

0 comments on commit b26b2d4

Please sign in to comment.