diff options
| -rw-r--r-- | drivers/net/pcmcia/smc91c92_cs.c | 4 | ||||
| -rw-r--r-- | drivers/pcmcia/cistpl.c | 43 | ||||
| -rw-r--r-- | drivers/pcmcia/pcmcia_resource.c | 2 | ||||
| -rw-r--r-- | drivers/pcmcia/rsrc_nonstatic.c | 32 | ||||
| -rw-r--r-- | include/pcmcia/cs.h | 2 |
5 files changed, 50 insertions, 33 deletions
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c index 267cbe0afd16..918b4a3eca57 100644 --- a/drivers/net/pcmcia/smc91c92_cs.c +++ b/drivers/net/pcmcia/smc91c92_cs.c | |||
| @@ -491,7 +491,7 @@ static int mhz_mfc_config(struct pcmcia_device *link) | |||
| 491 | 491 | ||
| 492 | cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL); | 492 | cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL); |
| 493 | if (!cfg_mem) | 493 | if (!cfg_mem) |
| 494 | return CS_OUT_OF_RESOURCE; | 494 | return -ENOMEM; |
| 495 | 495 | ||
| 496 | link->conf.Attributes |= CONF_ENABLE_SPKR; | 496 | link->conf.Attributes |= CONF_ENABLE_SPKR; |
| 497 | link->conf.Status = CCSR_AUDIO_ENA; | 497 | link->conf.Status = CCSR_AUDIO_ENA; |
| @@ -690,7 +690,7 @@ static int smc_setup(struct pcmcia_device *link) | |||
| 690 | 690 | ||
| 691 | cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL); | 691 | cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL); |
| 692 | if (!cfg_mem) | 692 | if (!cfg_mem) |
| 693 | return CS_OUT_OF_RESOURCE; | 693 | return -ENOMEM; |
| 694 | 694 | ||
| 695 | tuple = &cfg_mem->tuple; | 695 | tuple = &cfg_mem->tuple; |
| 696 | parse = &cfg_mem->parse; | 696 | parse = &cfg_mem->parse; |
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c index 1a513d9a8612..8d37768d0b46 100644 --- a/drivers/pcmcia/cistpl.c +++ b/drivers/pcmcia/cistpl.c | |||
| @@ -352,7 +352,9 @@ int verify_cis_cache(struct pcmcia_socket *s) | |||
| 352 | 352 | ||
| 353 | buf = kmalloc(256, GFP_KERNEL); | 353 | buf = kmalloc(256, GFP_KERNEL); |
| 354 | if (buf == NULL) | 354 | if (buf == NULL) |
| 355 | return -1; | 355 | dev_printk(KERN_WARNING, &s->dev, |
| 356 | "no memory for verifying CIS\n"); | ||
| 357 | return -ENOMEM; | ||
| 356 | list_for_each_entry(cis, &s->cis_cache, node) { | 358 | list_for_each_entry(cis, &s->cis_cache, node) { |
| 357 | int len = cis->len; | 359 | int len = cis->len; |
| 358 | 360 | ||
| @@ -384,15 +386,19 @@ int verify_cis_cache(struct pcmcia_socket *s) | |||
| 384 | int pcmcia_replace_cis(struct pcmcia_socket *s, | 386 | int pcmcia_replace_cis(struct pcmcia_socket *s, |
| 385 | const u8 *data, const size_t len) | 387 | const u8 *data, const size_t len) |
| 386 | { | 388 | { |
| 387 | if (len > CISTPL_MAX_CIS_SIZE) | 389 | if (len > CISTPL_MAX_CIS_SIZE) { |
| 388 | return CS_BAD_SIZE; | 390 | dev_printk(KERN_WARNING, &s->dev, "replacement CIS too big\n"); |
| 389 | kfree(s->fake_cis); | 391 | return -EINVAL; |
| 390 | s->fake_cis = kmalloc(len, GFP_KERNEL); | 392 | } |
| 391 | if (s->fake_cis == NULL) | 393 | kfree(s->fake_cis); |
| 392 | return CS_OUT_OF_RESOURCE; | 394 | s->fake_cis = kmalloc(len, GFP_KERNEL); |
| 393 | s->fake_cis_len = len; | 395 | if (s->fake_cis == NULL) { |
| 394 | memcpy(s->fake_cis, data, len); | 396 | dev_printk(KERN_WARNING, &s->dev, "no memory to replace CIS\n"); |
| 395 | return 0; | 397 | return -ENOMEM; |
| 398 | } | ||
| 399 | s->fake_cis_len = len; | ||
| 400 | memcpy(s->fake_cis, data, len); | ||
| 401 | return 0; | ||
| 396 | } | 402 | } |
| 397 | EXPORT_SYMBOL(pcmcia_replace_cis); | 403 | EXPORT_SYMBOL(pcmcia_replace_cis); |
| 398 | 404 | ||
| @@ -1411,8 +1417,10 @@ int pccard_read_tuple(struct pcmcia_socket *s, unsigned int function, cisdata_t | |||
| 1411 | int ret; | 1417 | int ret; |
| 1412 | 1418 | ||
| 1413 | buf = kmalloc(256, GFP_KERNEL); | 1419 | buf = kmalloc(256, GFP_KERNEL); |
| 1414 | if (buf == NULL) | 1420 | if (buf == NULL) { |
| 1415 | return CS_OUT_OF_RESOURCE; | 1421 | dev_printk(KERN_WARNING, &s->dev, "no memory to read tuple\n"); |
| 1422 | return -ENOMEM; | ||
| 1423 | } | ||
| 1416 | tuple.DesiredTuple = code; | 1424 | tuple.DesiredTuple = code; |
| 1417 | tuple.Attributes = TUPLE_RETURN_COMMON; | 1425 | tuple.Attributes = TUPLE_RETURN_COMMON; |
| 1418 | ret = pccard_get_first_tuple(s, function, &tuple); | 1426 | ret = pccard_get_first_tuple(s, function, &tuple); |
| @@ -1452,12 +1460,15 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, unsigned | |||
| 1452 | return CS_BAD_HANDLE; | 1460 | return CS_BAD_HANDLE; |
| 1453 | 1461 | ||
| 1454 | tuple = kmalloc(sizeof(*tuple), GFP_KERNEL); | 1462 | tuple = kmalloc(sizeof(*tuple), GFP_KERNEL); |
| 1455 | if (tuple == NULL) | 1463 | if (tuple == NULL) { |
| 1456 | return CS_OUT_OF_RESOURCE; | 1464 | dev_printk(KERN_WARNING, &s->dev, "no memory to validate CIS\n"); |
| 1465 | return -ENOMEM; | ||
| 1466 | } | ||
| 1457 | p = kmalloc(sizeof(*p), GFP_KERNEL); | 1467 | p = kmalloc(sizeof(*p), GFP_KERNEL); |
| 1458 | if (p == NULL) { | 1468 | if (p == NULL) { |
| 1459 | kfree(tuple); | 1469 | kfree(tuple); |
| 1460 | return CS_OUT_OF_RESOURCE; | 1470 | dev_printk(KERN_WARNING, &s->dev, "no memory to validate CIS\n"); |
| 1471 | return -ENOMEM; | ||
| 1461 | } | 1472 | } |
| 1462 | 1473 | ||
| 1463 | count = reserved = 0; | 1474 | count = reserved = 0; |
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index 48e168e8165b..69d87a7e0766 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c | |||
| @@ -780,7 +780,7 @@ int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req, window_h | |||
| 780 | for (w = 0; w < MAX_WIN; w++) | 780 | for (w = 0; w < MAX_WIN; w++) |
| 781 | if (!(s->state & SOCKET_WIN_REQ(w))) break; | 781 | if (!(s->state & SOCKET_WIN_REQ(w))) break; |
| 782 | if (w == MAX_WIN) | 782 | if (w == MAX_WIN) |
| 783 | return CS_OUT_OF_RESOURCE; | 783 | return CS_IN_USE; |
| 784 | 784 | ||
| 785 | win = &s->win[w]; | 785 | win = &s->win[w]; |
| 786 | win->magic = WINDOW_MAGIC; | 786 | win->magic = WINDOW_MAGIC; |
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index 9d04fb214ec2..0e4141bac7b1 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c | |||
| @@ -122,19 +122,22 @@ static void free_region(struct resource *res) | |||
| 122 | 122 | ||
| 123 | static int add_interval(struct resource_map *map, u_long base, u_long num) | 123 | static int add_interval(struct resource_map *map, u_long base, u_long num) |
| 124 | { | 124 | { |
| 125 | struct resource_map *p, *q; | 125 | struct resource_map *p, *q; |
| 126 | 126 | ||
| 127 | for (p = map; ; p = p->next) { | 127 | for (p = map; ; p = p->next) { |
| 128 | if ((p != map) && (p->base+p->num-1 >= base)) | 128 | if ((p != map) && (p->base+p->num-1 >= base)) |
| 129 | return -1; | 129 | return -1; |
| 130 | if ((p->next == map) || (p->next->base > base+num-1)) | 130 | if ((p->next == map) || (p->next->base > base+num-1)) |
| 131 | break; | 131 | break; |
| 132 | } | 132 | } |
| 133 | q = kmalloc(sizeof(struct resource_map), GFP_KERNEL); | 133 | q = kmalloc(sizeof(struct resource_map), GFP_KERNEL); |
| 134 | if (!q) return CS_OUT_OF_RESOURCE; | 134 | if (!q) { |
| 135 | q->base = base; q->num = num; | 135 | printk(KERN_WARNING "out of memory to update resources\n"); |
| 136 | q->next = p->next; p->next = q; | 136 | return -ENOMEM; |
| 137 | return 0; | 137 | } |
| 138 | q->base = base; q->num = num; | ||
| 139 | q->next = p->next; p->next = q; | ||
| 140 | return 0; | ||
| 138 | } | 141 | } |
| 139 | 142 | ||
| 140 | /*====================================================================*/ | 143 | /*====================================================================*/ |
| @@ -166,7 +169,10 @@ static int sub_interval(struct resource_map *map, u_long base, u_long num) | |||
| 166 | } else { | 169 | } else { |
| 167 | /* Split the block into two pieces */ | 170 | /* Split the block into two pieces */ |
| 168 | p = kmalloc(sizeof(struct resource_map), GFP_KERNEL); | 171 | p = kmalloc(sizeof(struct resource_map), GFP_KERNEL); |
| 169 | if (!p) return CS_OUT_OF_RESOURCE; | 172 | if (!p) { |
| 173 | printk(KERN_WARNING "out of memory to update resources\n"); | ||
| 174 | return -ENOMEM; | ||
| 175 | } | ||
| 170 | p->base = base+num; | 176 | p->base = base+num; |
| 171 | p->num = q->base+q->num - p->base; | 177 | p->num = q->base+q->num - p->base; |
| 172 | q->num = base - q->base; | 178 | q->num = base - q->base; |
diff --git a/include/pcmcia/cs.h b/include/pcmcia/cs.h index 695baf6cf1fd..9e6916c1fa81 100644 --- a/include/pcmcia/cs.h +++ b/include/pcmcia/cs.h | |||
| @@ -316,7 +316,7 @@ typedef struct error_info_t { | |||
| 316 | #define CS_CONFIGURATION_LOCKED 0x1d | 316 | #define CS_CONFIGURATION_LOCKED 0x1d |
| 317 | #define CS_IN_USE 0x1e | 317 | #define CS_IN_USE 0x1e |
| 318 | #define CS_NO_MORE_ITEMS 0x1f | 318 | #define CS_NO_MORE_ITEMS 0x1f |
| 319 | #define CS_OUT_OF_RESOURCE 0x20 | 319 | #define CS_OUT_OF_RESOURCE -ENOMEM |
| 320 | #define CS_BAD_HANDLE 0x21 | 320 | #define CS_BAD_HANDLE 0x21 |
| 321 | 321 | ||
| 322 | #define CS_BAD_TUPLE 0x40 | 322 | #define CS_BAD_TUPLE 0x40 |
