|
27 | 27 | #include <linux/time.h>
|
28 | 28 | #include <linux/hdreg.h>
|
29 | 29 | #include <linux/dma-mapping.h>
|
| 30 | +#include <linux/completion.h> |
30 | 31 | #include <asm/io.h>
|
31 |
| -#include <asm/semaphore.h> |
32 | 32 | #include <asm/uaccess.h>
|
33 | 33 |
|
34 | 34 | #if 0
|
@@ -303,7 +303,7 @@ struct carm_host {
|
303 | 303 |
|
304 | 304 | struct work_struct fsm_task;
|
305 | 305 |
|
306 |
| - struct semaphore probe_sem; |
| 306 | + struct completion probe_comp; |
307 | 307 | };
|
308 | 308 |
|
309 | 309 | struct carm_response {
|
@@ -1346,7 +1346,7 @@ static void carm_fsm_task (void *_data)
|
1346 | 1346 | }
|
1347 | 1347 |
|
1348 | 1348 | case HST_PROBE_FINISHED:
|
1349 |
| - up(&host->probe_sem); |
| 1349 | + complete(&host->probe_comp); |
1350 | 1350 | break;
|
1351 | 1351 |
|
1352 | 1352 | case HST_ERROR:
|
@@ -1622,7 +1622,7 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
|
1622 | 1622 | host->flags = pci_dac ? FL_DAC : 0;
|
1623 | 1623 | spin_lock_init(&host->lock);
|
1624 | 1624 | INIT_WORK(&host->fsm_task, carm_fsm_task, host);
|
1625 |
| - init_MUTEX_LOCKED(&host->probe_sem); |
| 1625 | + init_completion(&host->probe_comp); |
1626 | 1626 |
|
1627 | 1627 | for (i = 0; i < ARRAY_SIZE(host->req); i++)
|
1628 | 1628 | host->req[i].tag = i;
|
@@ -1691,8 +1691,8 @@ static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
|
1691 | 1691 | if (rc)
|
1692 | 1692 | goto err_out_free_irq;
|
1693 | 1693 |
|
1694 |
| - DPRINTK("waiting for probe_sem\n"); |
1695 |
| - down(&host->probe_sem); |
| 1694 | + DPRINTK("waiting for probe_comp\n"); |
| 1695 | + wait_for_completion(&host->probe_comp); |
1696 | 1696 |
|
1697 | 1697 | printk(KERN_INFO "%s: pci %s, ports %d, io %lx, irq %u, major %d\n",
|
1698 | 1698 | host->name, pci_name(pdev), (int) CARM_MAX_PORTS,
|
|
0 commit comments