diff options
Diffstat (limited to 'drivers/memstick')
-rw-r--r-- | drivers/memstick/Kconfig | 2 | ||||
-rw-r--r-- | drivers/memstick/core/memstick.c | 21 | ||||
-rw-r--r-- | drivers/memstick/core/mspro_block.c | 17 | ||||
-rw-r--r-- | drivers/memstick/host/Kconfig | 12 | ||||
-rw-r--r-- | drivers/memstick/host/r592.c | 3 | ||||
-rw-r--r-- | drivers/memstick/host/rtsx_pci_ms.c | 7 |
6 files changed, 29 insertions, 33 deletions
diff --git a/drivers/memstick/Kconfig b/drivers/memstick/Kconfig index f0ca41c20323..1314605d791f 100644 --- a/drivers/memstick/Kconfig +++ b/drivers/memstick/Kconfig @@ -3,7 +3,7 @@ # menuconfig MEMSTICK - tristate "Sony MemoryStick card support (EXPERIMENTAL)" + tristate "Sony MemoryStick card support" help Sony MemoryStick is a proprietary storage/extension card protocol. diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c index 56ff19cdc2ad..ffcb10ac4341 100644 --- a/drivers/memstick/core/memstick.c +++ b/drivers/memstick/core/memstick.c @@ -512,18 +512,17 @@ int memstick_add_host(struct memstick_host *host) { int rc; - while (1) { - if (!idr_pre_get(&memstick_host_idr, GFP_KERNEL)) - return -ENOMEM; + idr_preload(GFP_KERNEL); + spin_lock(&memstick_host_lock); - spin_lock(&memstick_host_lock); - rc = idr_get_new(&memstick_host_idr, host, &host->id); - spin_unlock(&memstick_host_lock); - if (!rc) - break; - else if (rc != -EAGAIN) - return rc; - } + rc = idr_alloc(&memstick_host_idr, host, 0, 0, GFP_NOWAIT); + if (rc >= 0) + host->id = rc; + + spin_unlock(&memstick_host_lock); + idr_preload_end(); + if (rc < 0) + return rc; dev_set_name(&host->dev, "memstick%u", host->id); diff --git a/drivers/memstick/core/mspro_block.c b/drivers/memstick/core/mspro_block.c index 9729b92fbfdd..f12b78dbce04 100644 --- a/drivers/memstick/core/mspro_block.c +++ b/drivers/memstick/core/mspro_block.c @@ -1213,21 +1213,10 @@ static int mspro_block_init_disk(struct memstick_dev *card) msb->page_size = be16_to_cpu(sys_info->unit_size); mutex_lock(&mspro_block_disk_lock); - if (!idr_pre_get(&mspro_block_disk_idr, GFP_KERNEL)) { - mutex_unlock(&mspro_block_disk_lock); - return -ENOMEM; - } - - rc = idr_get_new(&mspro_block_disk_idr, card, &disk_id); + disk_id = idr_alloc(&mspro_block_disk_idr, card, 0, 256, GFP_KERNEL); mutex_unlock(&mspro_block_disk_lock); - - if (rc) - return rc; - - if ((disk_id << MSPRO_BLOCK_PART_SHIFT) > 255) { - rc = -ENOSPC; - goto out_release_id; - } + if (disk_id < 0) + return disk_id; msb->disk = alloc_disk(1 << MSPRO_BLOCK_PART_SHIFT); if (!msb->disk) { diff --git a/drivers/memstick/host/Kconfig b/drivers/memstick/host/Kconfig index 4f7a17fd1aa7..1b37cf8cd204 100644 --- a/drivers/memstick/host/Kconfig +++ b/drivers/memstick/host/Kconfig @@ -5,8 +5,8 @@ comment "MemoryStick Host Controller Drivers" config MEMSTICK_TIFM_MS - tristate "TI Flash Media MemoryStick Interface support (EXPERIMENTAL)" - depends on EXPERIMENTAL && PCI + tristate "TI Flash Media MemoryStick Interface support " + depends on PCI select TIFM_CORE help Say Y here if you want to be able to access MemoryStick cards with @@ -21,8 +21,8 @@ config MEMSTICK_TIFM_MS module will be called tifm_ms. config MEMSTICK_JMICRON_38X - tristate "JMicron JMB38X MemoryStick interface support (EXPERIMENTAL)" - depends on EXPERIMENTAL && PCI + tristate "JMicron JMB38X MemoryStick interface support" + depends on PCI help Say Y here if you want to be able to access MemoryStick cards with @@ -32,8 +32,8 @@ config MEMSTICK_JMICRON_38X module will be called jmb38x_ms. config MEMSTICK_R592 - tristate "Ricoh R5C592 MemoryStick interface support (EXPERIMENTAL)" - depends on EXPERIMENTAL && PCI + tristate "Ricoh R5C592 MemoryStick interface support" + depends on PCI help Say Y here if you want to be able to access MemoryStick cards with diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c index 29b2172ae18f..a7c5b31c0d50 100644 --- a/drivers/memstick/host/r592.c +++ b/drivers/memstick/host/r592.c @@ -454,7 +454,7 @@ static int r592_transfer_fifo_pio(struct r592_device *dev) /* Executes one TPC (data is read/written from small or large fifo) */ static void r592_execute_tpc(struct r592_device *dev) { - bool is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; + bool is_write; int len, error; u32 status, reg; @@ -463,6 +463,7 @@ static void r592_execute_tpc(struct r592_device *dev) return; } + is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; len = dev->req->long_data ? dev->req->sg.length : dev->req->data_len; diff --git a/drivers/memstick/host/rtsx_pci_ms.c b/drivers/memstick/host/rtsx_pci_ms.c index f5ddb82dadb7..64a779c58a74 100644 --- a/drivers/memstick/host/rtsx_pci_ms.c +++ b/drivers/memstick/host/rtsx_pci_ms.c @@ -426,6 +426,9 @@ static void rtsx_pci_ms_request(struct memstick_host *msh) dev_dbg(ms_dev(host), "--> %s\n", __func__); + if (rtsx_pci_card_exclusive_check(host->pcr, RTSX_MS_CARD)) + return; + schedule_work(&host->handle_req); } @@ -441,6 +444,10 @@ static int rtsx_pci_ms_set_param(struct memstick_host *msh, dev_dbg(ms_dev(host), "%s: param = %d, value = %d\n", __func__, param, value); + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_MS_CARD); + if (err) + return err; + switch (param) { case MEMSTICK_POWER: if (value == MEMSTICK_POWER_ON) |