diff options
| author | Dominik Brodowski <linux@dominikbrodowski.net> | 2010-04-04 12:10:35 -0400 |
|---|---|---|
| committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2010-04-04 12:10:35 -0400 |
| commit | 147a27460366ecd35f1425f593cb42d52166c7ff (patch) | |
| tree | 15f4467b37ec1f6eb47cfa0dfdfca93b014eee16 | |
| parent | 5e11611a5d22252f3f9c169a3c9377eac0c32033 (diff) | |
pcmcia: fix up alignf issues
- pcmcia_align() used a "start" variable twice. That's obviously a bad
idea.
- pcmcia_common_resource() needs the current "start" parameter being
passed, instead of res->start.
- pcmcia_common_resource() doesn't use the size and align parameters,
so get rid of those.
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
| -rw-r--r-- | drivers/pcmcia/rsrc_nonstatic.c | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index 2e47991eccf6..559069a80a3b 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c | |||
| @@ -596,19 +596,17 @@ struct pcmcia_align_data { | |||
| 596 | struct resource_map *map; | 596 | struct resource_map *map; |
| 597 | }; | 597 | }; |
| 598 | 598 | ||
| 599 | static resource_size_t | 599 | static resource_size_t pcmcia_common_align(struct pcmcia_align_data *align_data, |
| 600 | pcmcia_common_align(void *align_data, const struct resource *res, | 600 | resource_size_t start) |
| 601 | resource_size_t size, resource_size_t align) | ||
| 602 | { | 601 | { |
| 603 | struct pcmcia_align_data *data = align_data; | 602 | resource_size_t ret; |
| 604 | resource_size_t start; | ||
| 605 | /* | 603 | /* |
| 606 | * Ensure that we have the correct start address | 604 | * Ensure that we have the correct start address |
| 607 | */ | 605 | */ |
| 608 | start = (res->start & ~data->mask) + data->offset; | 606 | ret = (start & ~align_data->mask) + align_data->offset; |
| 609 | if (start < res->start) | 607 | if (ret < start) |
| 610 | start += data->mask + 1; | 608 | ret += align_data->mask + 1; |
| 611 | return start; | 609 | return ret; |
| 612 | } | 610 | } |
| 613 | 611 | ||
| 614 | static resource_size_t | 612 | static resource_size_t |
| @@ -619,29 +617,28 @@ pcmcia_align(void *align_data, const struct resource *res, | |||
| 619 | struct resource_map *m; | 617 | struct resource_map *m; |
| 620 | resource_size_t start; | 618 | resource_size_t start; |
| 621 | 619 | ||
| 622 | start = pcmcia_common_align(data, res, size, align); | 620 | start = pcmcia_common_align(data, res->start); |
| 623 | 621 | ||
| 624 | for (m = data->map->next; m != data->map; m = m->next) { | 622 | for (m = data->map->next; m != data->map; m = m->next) { |
| 625 | unsigned long start = m->base; | 623 | unsigned long map_start = m->base; |
| 626 | unsigned long end = m->base + m->num - 1; | 624 | unsigned long map_end = m->base + m->num - 1; |
| 627 | 625 | ||
| 628 | /* | 626 | /* |
| 629 | * If the lower resources are not available, try aligning | 627 | * If the lower resources are not available, try aligning |
| 630 | * to this entry of the resource database to see if it'll | 628 | * to this entry of the resource database to see if it'll |
| 631 | * fit here. | 629 | * fit here. |
| 632 | */ | 630 | */ |
| 633 | if (res->start < start) { | 631 | if (start < map_start) |
| 634 | start = pcmcia_common_align(data, res, size, align); | 632 | start = pcmcia_common_align(data, map_start); |
| 635 | } | ||
| 636 | 633 | ||
| 637 | /* | 634 | /* |
| 638 | * If we're above the area which was passed in, there's | 635 | * If we're above the area which was passed in, there's |
| 639 | * no point proceeding. | 636 | * no point proceeding. |
| 640 | */ | 637 | */ |
| 641 | if (res->start >= res->end) | 638 | if (start >= res->end) |
| 642 | break; | 639 | break; |
| 643 | 640 | ||
| 644 | if ((res->start + size - 1) <= end) | 641 | if ((start + size - 1) <= map_end) |
| 645 | break; | 642 | break; |
| 646 | } | 643 | } |
| 647 | 644 | ||
