diff options
Diffstat (limited to 'drivers/pcmcia/rsrc_nonstatic.c')
-rw-r--r-- | drivers/pcmcia/rsrc_nonstatic.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index 5301ac60358f..0f8b157c9717 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * (C) 1999 David A. Hinds | 12 | * (C) 1999 David A. Hinds |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <linux/module.h> | 15 | #include <linux/module.h> |
17 | #include <linux/moduleparam.h> | 16 | #include <linux/moduleparam.h> |
18 | #include <linux/init.h> | 17 | #include <linux/init.h> |
@@ -61,7 +60,7 @@ struct socket_data { | |||
61 | unsigned int rsrc_mem_probe; | 60 | unsigned int rsrc_mem_probe; |
62 | }; | 61 | }; |
63 | 62 | ||
64 | static DECLARE_MUTEX(rsrc_sem); | 63 | static DEFINE_MUTEX(rsrc_mutex); |
65 | #define MEM_PROBE_LOW (1 << 0) | 64 | #define MEM_PROBE_LOW (1 << 0) |
66 | #define MEM_PROBE_HIGH (1 << 1) | 65 | #define MEM_PROBE_HIGH (1 << 1) |
67 | 66 | ||
@@ -484,7 +483,7 @@ static int validate_mem(struct pcmcia_socket *s, unsigned int probe_mask) | |||
484 | 483 | ||
485 | 484 | ||
486 | /* | 485 | /* |
487 | * Locking note: Must be called with skt_sem held! | 486 | * Locking note: Must be called with skt_mutex held! |
488 | */ | 487 | */ |
489 | static int pcmcia_nonstatic_validate_mem(struct pcmcia_socket *s) | 488 | static int pcmcia_nonstatic_validate_mem(struct pcmcia_socket *s) |
490 | { | 489 | { |
@@ -495,7 +494,7 @@ static int pcmcia_nonstatic_validate_mem(struct pcmcia_socket *s) | |||
495 | if (!probe_mem) | 494 | if (!probe_mem) |
496 | return 0; | 495 | return 0; |
497 | 496 | ||
498 | down(&rsrc_sem); | 497 | mutex_lock(&rsrc_mutex); |
499 | 498 | ||
500 | if (s->features & SS_CAP_PAGE_REGS) | 499 | if (s->features & SS_CAP_PAGE_REGS) |
501 | probe_mask = MEM_PROBE_HIGH; | 500 | probe_mask = MEM_PROBE_HIGH; |
@@ -507,7 +506,7 @@ static int pcmcia_nonstatic_validate_mem(struct pcmcia_socket *s) | |||
507 | s_data->rsrc_mem_probe |= probe_mask; | 506 | s_data->rsrc_mem_probe |= probe_mask; |
508 | } | 507 | } |
509 | 508 | ||
510 | up(&rsrc_sem); | 509 | mutex_unlock(&rsrc_mutex); |
511 | 510 | ||
512 | return ret; | 511 | return ret; |
513 | } | 512 | } |
@@ -585,7 +584,7 @@ static int nonstatic_adjust_io_region(struct resource *res, unsigned long r_star | |||
585 | struct socket_data *s_data = s->resource_data; | 584 | struct socket_data *s_data = s->resource_data; |
586 | int ret = -ENOMEM; | 585 | int ret = -ENOMEM; |
587 | 586 | ||
588 | down(&rsrc_sem); | 587 | mutex_lock(&rsrc_mutex); |
589 | for (m = s_data->io_db.next; m != &s_data->io_db; m = m->next) { | 588 | for (m = s_data->io_db.next; m != &s_data->io_db; m = m->next) { |
590 | unsigned long start = m->base; | 589 | unsigned long start = m->base; |
591 | unsigned long end = m->base + m->num - 1; | 590 | unsigned long end = m->base + m->num - 1; |
@@ -596,7 +595,7 @@ static int nonstatic_adjust_io_region(struct resource *res, unsigned long r_star | |||
596 | ret = adjust_resource(res, r_start, r_end - r_start + 1); | 595 | ret = adjust_resource(res, r_start, r_end - r_start + 1); |
597 | break; | 596 | break; |
598 | } | 597 | } |
599 | up(&rsrc_sem); | 598 | mutex_unlock(&rsrc_mutex); |
600 | 599 | ||
601 | return ret; | 600 | return ret; |
602 | } | 601 | } |
@@ -630,7 +629,7 @@ static struct resource *nonstatic_find_io_region(unsigned long base, int num, | |||
630 | data.offset = base & data.mask; | 629 | data.offset = base & data.mask; |
631 | data.map = &s_data->io_db; | 630 | data.map = &s_data->io_db; |
632 | 631 | ||
633 | down(&rsrc_sem); | 632 | mutex_lock(&rsrc_mutex); |
634 | #ifdef CONFIG_PCI | 633 | #ifdef CONFIG_PCI |
635 | if (s->cb_dev) { | 634 | if (s->cb_dev) { |
636 | ret = pci_bus_alloc_resource(s->cb_dev->bus, res, num, 1, | 635 | ret = pci_bus_alloc_resource(s->cb_dev->bus, res, num, 1, |
@@ -639,7 +638,7 @@ static struct resource *nonstatic_find_io_region(unsigned long base, int num, | |||
639 | #endif | 638 | #endif |
640 | ret = allocate_resource(&ioport_resource, res, num, min, ~0UL, | 639 | ret = allocate_resource(&ioport_resource, res, num, min, ~0UL, |
641 | 1, pcmcia_align, &data); | 640 | 1, pcmcia_align, &data); |
642 | up(&rsrc_sem); | 641 | mutex_unlock(&rsrc_mutex); |
643 | 642 | ||
644 | if (ret != 0) { | 643 | if (ret != 0) { |
645 | kfree(res); | 644 | kfree(res); |
@@ -672,7 +671,7 @@ static struct resource * nonstatic_find_mem_region(u_long base, u_long num, | |||
672 | min = 0x100000UL + base; | 671 | min = 0x100000UL + base; |
673 | } | 672 | } |
674 | 673 | ||
675 | down(&rsrc_sem); | 674 | mutex_lock(&rsrc_mutex); |
676 | #ifdef CONFIG_PCI | 675 | #ifdef CONFIG_PCI |
677 | if (s->cb_dev) { | 676 | if (s->cb_dev) { |
678 | ret = pci_bus_alloc_resource(s->cb_dev->bus, res, num, | 677 | ret = pci_bus_alloc_resource(s->cb_dev->bus, res, num, |
@@ -682,7 +681,7 @@ static struct resource * nonstatic_find_mem_region(u_long base, u_long num, | |||
682 | #endif | 681 | #endif |
683 | ret = allocate_resource(&iomem_resource, res, num, min, | 682 | ret = allocate_resource(&iomem_resource, res, num, min, |
684 | max, 1, pcmcia_align, &data); | 683 | max, 1, pcmcia_align, &data); |
685 | up(&rsrc_sem); | 684 | mutex_unlock(&rsrc_mutex); |
686 | if (ret == 0 || low) | 685 | if (ret == 0 || low) |
687 | break; | 686 | break; |
688 | low = 1; | 687 | low = 1; |
@@ -705,7 +704,7 @@ static int adjust_memory(struct pcmcia_socket *s, unsigned int action, unsigned | |||
705 | if (end < start) | 704 | if (end < start) |
706 | return -EINVAL; | 705 | return -EINVAL; |
707 | 706 | ||
708 | down(&rsrc_sem); | 707 | mutex_lock(&rsrc_mutex); |
709 | switch (action) { | 708 | switch (action) { |
710 | case ADD_MANAGED_RESOURCE: | 709 | case ADD_MANAGED_RESOURCE: |
711 | ret = add_interval(&data->mem_db, start, size); | 710 | ret = add_interval(&data->mem_db, start, size); |
@@ -723,7 +722,7 @@ static int adjust_memory(struct pcmcia_socket *s, unsigned int action, unsigned | |||
723 | default: | 722 | default: |
724 | ret = -EINVAL; | 723 | ret = -EINVAL; |
725 | } | 724 | } |
726 | up(&rsrc_sem); | 725 | mutex_unlock(&rsrc_mutex); |
727 | 726 | ||
728 | return ret; | 727 | return ret; |
729 | } | 728 | } |
@@ -741,7 +740,7 @@ static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long | |||
741 | if (end > IO_SPACE_LIMIT) | 740 | if (end > IO_SPACE_LIMIT) |
742 | return -EINVAL; | 741 | return -EINVAL; |
743 | 742 | ||
744 | down(&rsrc_sem); | 743 | mutex_lock(&rsrc_mutex); |
745 | switch (action) { | 744 | switch (action) { |
746 | case ADD_MANAGED_RESOURCE: | 745 | case ADD_MANAGED_RESOURCE: |
747 | if (add_interval(&data->io_db, start, size) != 0) { | 746 | if (add_interval(&data->io_db, start, size) != 0) { |
@@ -760,7 +759,7 @@ static int adjust_io(struct pcmcia_socket *s, unsigned int action, unsigned long | |||
760 | ret = -EINVAL; | 759 | ret = -EINVAL; |
761 | break; | 760 | break; |
762 | } | 761 | } |
763 | up(&rsrc_sem); | 762 | mutex_unlock(&rsrc_mutex); |
764 | 763 | ||
765 | return ret; | 764 | return ret; |
766 | } | 765 | } |
@@ -867,7 +866,7 @@ static void nonstatic_release_resource_db(struct pcmcia_socket *s) | |||
867 | struct socket_data *data = s->resource_data; | 866 | struct socket_data *data = s->resource_data; |
868 | struct resource_map *p, *q; | 867 | struct resource_map *p, *q; |
869 | 868 | ||
870 | down(&rsrc_sem); | 869 | mutex_lock(&rsrc_mutex); |
871 | for (p = data->mem_db.next; p != &data->mem_db; p = q) { | 870 | for (p = data->mem_db.next; p != &data->mem_db; p = q) { |
872 | q = p->next; | 871 | q = p->next; |
873 | kfree(p); | 872 | kfree(p); |
@@ -876,7 +875,7 @@ static void nonstatic_release_resource_db(struct pcmcia_socket *s) | |||
876 | q = p->next; | 875 | q = p->next; |
877 | kfree(p); | 876 | kfree(p); |
878 | } | 877 | } |
879 | up(&rsrc_sem); | 878 | mutex_unlock(&rsrc_mutex); |
880 | } | 879 | } |
881 | 880 | ||
882 | 881 | ||
@@ -901,7 +900,7 @@ static ssize_t show_io_db(struct class_device *class_dev, char *buf) | |||
901 | struct resource_map *p; | 900 | struct resource_map *p; |
902 | ssize_t ret = 0; | 901 | ssize_t ret = 0; |
903 | 902 | ||
904 | down(&rsrc_sem); | 903 | mutex_lock(&rsrc_mutex); |
905 | data = s->resource_data; | 904 | data = s->resource_data; |
906 | 905 | ||
907 | for (p = data->io_db.next; p != &data->io_db; p = p->next) { | 906 | for (p = data->io_db.next; p != &data->io_db; p = p->next) { |
@@ -913,7 +912,7 @@ static ssize_t show_io_db(struct class_device *class_dev, char *buf) | |||
913 | ((unsigned long) p->base + p->num - 1)); | 912 | ((unsigned long) p->base + p->num - 1)); |
914 | } | 913 | } |
915 | 914 | ||
916 | up(&rsrc_sem); | 915 | mutex_unlock(&rsrc_mutex); |
917 | return (ret); | 916 | return (ret); |
918 | } | 917 | } |
919 | 918 | ||
@@ -953,7 +952,7 @@ static ssize_t show_mem_db(struct class_device *class_dev, char *buf) | |||
953 | struct resource_map *p; | 952 | struct resource_map *p; |
954 | ssize_t ret = 0; | 953 | ssize_t ret = 0; |
955 | 954 | ||
956 | down(&rsrc_sem); | 955 | mutex_lock(&rsrc_mutex); |
957 | data = s->resource_data; | 956 | data = s->resource_data; |
958 | 957 | ||
959 | for (p = data->mem_db.next; p != &data->mem_db; p = p->next) { | 958 | for (p = data->mem_db.next; p != &data->mem_db; p = p->next) { |
@@ -965,7 +964,7 @@ static ssize_t show_mem_db(struct class_device *class_dev, char *buf) | |||
965 | ((unsigned long) p->base + p->num - 1)); | 964 | ((unsigned long) p->base + p->num - 1)); |
966 | } | 965 | } |
967 | 966 | ||
968 | up(&rsrc_sem); | 967 | mutex_unlock(&rsrc_mutex); |
969 | return (ret); | 968 | return (ret); |
970 | } | 969 | } |
971 | 970 | ||