diff options
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/amiflop.c | 40 | ||||
-rw-r--r-- | drivers/block/nbd.c | 4 | ||||
-rw-r--r-- | drivers/block/ps3disk.c | 18 | ||||
-rw-r--r-- | drivers/block/xsysace.c | 1 |
4 files changed, 30 insertions, 33 deletions
diff --git a/drivers/block/amiflop.c b/drivers/block/amiflop.c index 4b1d4ac960f1..8df436ff7068 100644 --- a/drivers/block/amiflop.c +++ b/drivers/block/amiflop.c | |||
@@ -156,7 +156,7 @@ static volatile int fdc_busy = -1; | |||
156 | static volatile int fdc_nested; | 156 | static volatile int fdc_nested; |
157 | static DECLARE_WAIT_QUEUE_HEAD(fdc_wait); | 157 | static DECLARE_WAIT_QUEUE_HEAD(fdc_wait); |
158 | 158 | ||
159 | static DECLARE_WAIT_QUEUE_HEAD(motor_wait); | 159 | static DECLARE_COMPLETION(motor_on_completion); |
160 | 160 | ||
161 | static volatile int selected = -1; /* currently selected drive */ | 161 | static volatile int selected = -1; /* currently selected drive */ |
162 | 162 | ||
@@ -184,8 +184,7 @@ static unsigned char mfmencode[16]={ | |||
184 | static unsigned char mfmdecode[128]; | 184 | static unsigned char mfmdecode[128]; |
185 | 185 | ||
186 | /* floppy internal millisecond timer stuff */ | 186 | /* floppy internal millisecond timer stuff */ |
187 | static volatile int ms_busy = -1; | 187 | static DECLARE_COMPLETION(ms_wait_completion); |
188 | static DECLARE_WAIT_QUEUE_HEAD(ms_wait); | ||
189 | #define MS_TICKS ((amiga_eclock+50)/1000) | 188 | #define MS_TICKS ((amiga_eclock+50)/1000) |
190 | 189 | ||
191 | /* | 190 | /* |
@@ -211,8 +210,7 @@ static int fd_device[4] = { 0, 0, 0, 0 }; | |||
211 | 210 | ||
212 | static irqreturn_t ms_isr(int irq, void *dummy) | 211 | static irqreturn_t ms_isr(int irq, void *dummy) |
213 | { | 212 | { |
214 | ms_busy = -1; | 213 | complete(&ms_wait_completion); |
215 | wake_up(&ms_wait); | ||
216 | return IRQ_HANDLED; | 214 | return IRQ_HANDLED; |
217 | } | 215 | } |
218 | 216 | ||
@@ -220,19 +218,17 @@ static irqreturn_t ms_isr(int irq, void *dummy) | |||
220 | A more generic routine would do a schedule a la timer.device */ | 218 | A more generic routine would do a schedule a la timer.device */ |
221 | static void ms_delay(int ms) | 219 | static void ms_delay(int ms) |
222 | { | 220 | { |
223 | unsigned long flags; | ||
224 | int ticks; | 221 | int ticks; |
222 | static DEFINE_MUTEX(mutex); | ||
223 | |||
225 | if (ms > 0) { | 224 | if (ms > 0) { |
226 | local_irq_save(flags); | 225 | mutex_lock(&mutex); |
227 | while (ms_busy == 0) | ||
228 | sleep_on(&ms_wait); | ||
229 | ms_busy = 0; | ||
230 | local_irq_restore(flags); | ||
231 | ticks = MS_TICKS*ms-1; | 226 | ticks = MS_TICKS*ms-1; |
232 | ciaa.tblo=ticks%256; | 227 | ciaa.tblo=ticks%256; |
233 | ciaa.tbhi=ticks/256; | 228 | ciaa.tbhi=ticks/256; |
234 | ciaa.crb=0x19; /*count eclock, force load, one-shoot, start */ | 229 | ciaa.crb=0x19; /*count eclock, force load, one-shoot, start */ |
235 | sleep_on(&ms_wait); | 230 | wait_for_completion(&ms_wait_completion); |
231 | mutex_unlock(&mutex); | ||
236 | } | 232 | } |
237 | } | 233 | } |
238 | 234 | ||
@@ -254,8 +250,7 @@ static void get_fdc(int drive) | |||
254 | printk("get_fdc: drive %d fdc_busy %d fdc_nested %d\n",drive,fdc_busy,fdc_nested); | 250 | printk("get_fdc: drive %d fdc_busy %d fdc_nested %d\n",drive,fdc_busy,fdc_nested); |
255 | #endif | 251 | #endif |
256 | local_irq_save(flags); | 252 | local_irq_save(flags); |
257 | while (!try_fdc(drive)) | 253 | wait_event(fdc_wait, try_fdc(drive)); |
258 | sleep_on(&fdc_wait); | ||
259 | fdc_busy = drive; | 254 | fdc_busy = drive; |
260 | fdc_nested++; | 255 | fdc_nested++; |
261 | local_irq_restore(flags); | 256 | local_irq_restore(flags); |
@@ -330,7 +325,7 @@ static void fd_deselect (int drive) | |||
330 | static void motor_on_callback(unsigned long nr) | 325 | static void motor_on_callback(unsigned long nr) |
331 | { | 326 | { |
332 | if (!(ciaa.pra & DSKRDY) || --on_attempts == 0) { | 327 | if (!(ciaa.pra & DSKRDY) || --on_attempts == 0) { |
333 | wake_up (&motor_wait); | 328 | complete_all(&motor_on_completion); |
334 | } else { | 329 | } else { |
335 | motor_on_timer.expires = jiffies + HZ/10; | 330 | motor_on_timer.expires = jiffies + HZ/10; |
336 | add_timer(&motor_on_timer); | 331 | add_timer(&motor_on_timer); |
@@ -347,11 +342,12 @@ static int fd_motor_on(int nr) | |||
347 | unit[nr].motor = 1; | 342 | unit[nr].motor = 1; |
348 | fd_select(nr); | 343 | fd_select(nr); |
349 | 344 | ||
345 | INIT_COMPLETION(motor_on_completion); | ||
350 | motor_on_timer.data = nr; | 346 | motor_on_timer.data = nr; |
351 | mod_timer(&motor_on_timer, jiffies + HZ/2); | 347 | mod_timer(&motor_on_timer, jiffies + HZ/2); |
352 | 348 | ||
353 | on_attempts = 10; | 349 | on_attempts = 10; |
354 | sleep_on (&motor_wait); | 350 | wait_for_completion(&motor_on_completion); |
355 | fd_deselect(nr); | 351 | fd_deselect(nr); |
356 | } | 352 | } |
357 | 353 | ||
@@ -582,8 +578,7 @@ static void raw_read(int drive) | |||
582 | { | 578 | { |
583 | drive&=3; | 579 | drive&=3; |
584 | get_fdc(drive); | 580 | get_fdc(drive); |
585 | while (block_flag) | 581 | wait_event(wait_fd_block, !block_flag); |
586 | sleep_on(&wait_fd_block); | ||
587 | fd_select(drive); | 582 | fd_select(drive); |
588 | /* setup adkcon bits correctly */ | 583 | /* setup adkcon bits correctly */ |
589 | custom.adkcon = ADK_MSBSYNC; | 584 | custom.adkcon = ADK_MSBSYNC; |
@@ -598,8 +593,7 @@ static void raw_read(int drive) | |||
598 | 593 | ||
599 | block_flag = 1; | 594 | block_flag = 1; |
600 | 595 | ||
601 | while (block_flag) | 596 | wait_event(wait_fd_block, !block_flag); |
602 | sleep_on (&wait_fd_block); | ||
603 | 597 | ||
604 | custom.dsklen = 0; | 598 | custom.dsklen = 0; |
605 | fd_deselect(drive); | 599 | fd_deselect(drive); |
@@ -616,8 +610,7 @@ static int raw_write(int drive) | |||
616 | rel_fdc(); | 610 | rel_fdc(); |
617 | return 0; | 611 | return 0; |
618 | } | 612 | } |
619 | while (block_flag) | 613 | wait_event(wait_fd_block, !block_flag); |
620 | sleep_on(&wait_fd_block); | ||
621 | fd_select(drive); | 614 | fd_select(drive); |
622 | /* clear adkcon bits */ | 615 | /* clear adkcon bits */ |
623 | custom.adkcon = ADK_PRECOMP1|ADK_PRECOMP0|ADK_WORDSYNC|ADK_MSBSYNC; | 616 | custom.adkcon = ADK_PRECOMP1|ADK_PRECOMP0|ADK_WORDSYNC|ADK_MSBSYNC; |
@@ -1294,8 +1287,7 @@ static int non_int_flush_track (unsigned long nr) | |||
1294 | writepending = 0; | 1287 | writepending = 0; |
1295 | return 0; | 1288 | return 0; |
1296 | } | 1289 | } |
1297 | while (block_flag == 2) | 1290 | wait_event(wait_fd_block, block_flag != 2); |
1298 | sleep_on (&wait_fd_block); | ||
1299 | } | 1291 | } |
1300 | else { | 1292 | else { |
1301 | local_irq_restore(flags); | 1293 | local_irq_restore(flags); |
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 7bcc1d8bc967..34f80fa6fed1 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c | |||
@@ -406,6 +406,7 @@ static int nbd_do_it(struct nbd_device *lo) | |||
406 | ret = sysfs_create_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr); | 406 | ret = sysfs_create_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr); |
407 | if (ret) { | 407 | if (ret) { |
408 | printk(KERN_ERR "nbd: sysfs_create_file failed!"); | 408 | printk(KERN_ERR "nbd: sysfs_create_file failed!"); |
409 | lo->pid = 0; | ||
409 | return ret; | 410 | return ret; |
410 | } | 411 | } |
411 | 412 | ||
@@ -413,6 +414,7 @@ static int nbd_do_it(struct nbd_device *lo) | |||
413 | nbd_end_request(req); | 414 | nbd_end_request(req); |
414 | 415 | ||
415 | sysfs_remove_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr); | 416 | sysfs_remove_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr); |
417 | lo->pid = 0; | ||
416 | return 0; | 418 | return 0; |
417 | } | 419 | } |
418 | 420 | ||
@@ -648,6 +650,8 @@ static int nbd_ioctl(struct block_device *bdev, fmode_t mode, | |||
648 | set_capacity(lo->disk, lo->bytesize >> 9); | 650 | set_capacity(lo->disk, lo->bytesize >> 9); |
649 | return 0; | 651 | return 0; |
650 | case NBD_DO_IT: | 652 | case NBD_DO_IT: |
653 | if (lo->pid) | ||
654 | return -EBUSY; | ||
651 | if (!lo->file) | 655 | if (!lo->file) |
652 | return -EINVAL; | 656 | return -EINVAL; |
653 | thread = kthread_create(nbd_thread, lo, lo->disk->disk_name); | 657 | thread = kthread_create(nbd_thread, lo, lo->disk->disk_name); |
diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c index 936466f62afd..bccc42bb9212 100644 --- a/drivers/block/ps3disk.c +++ b/drivers/block/ps3disk.c | |||
@@ -141,7 +141,7 @@ static int ps3disk_submit_request_sg(struct ps3_storage_device *dev, | |||
141 | 141 | ||
142 | start_sector = req->sector * priv->blocking_factor; | 142 | start_sector = req->sector * priv->blocking_factor; |
143 | sectors = req->nr_sectors * priv->blocking_factor; | 143 | sectors = req->nr_sectors * priv->blocking_factor; |
144 | dev_dbg(&dev->sbd.core, "%s:%u: %s %lu sectors starting at %lu\n", | 144 | dev_dbg(&dev->sbd.core, "%s:%u: %s %llu sectors starting at %llu\n", |
145 | __func__, __LINE__, op, sectors, start_sector); | 145 | __func__, __LINE__, op, sectors, start_sector); |
146 | 146 | ||
147 | if (write) { | 147 | if (write) { |
@@ -178,7 +178,7 @@ static int ps3disk_submit_flush_request(struct ps3_storage_device *dev, | |||
178 | LV1_STORAGE_ATA_HDDOUT, 0, 0, 0, | 178 | LV1_STORAGE_ATA_HDDOUT, 0, 0, 0, |
179 | 0, &dev->tag); | 179 | 0, &dev->tag); |
180 | if (res) { | 180 | if (res) { |
181 | dev_err(&dev->sbd.core, "%s:%u: sync cache failed 0x%lx\n", | 181 | dev_err(&dev->sbd.core, "%s:%u: sync cache failed 0x%llx\n", |
182 | __func__, __LINE__, res); | 182 | __func__, __LINE__, res); |
183 | end_request(req, 0); | 183 | end_request(req, 0); |
184 | return 0; | 184 | return 0; |
@@ -238,11 +238,11 @@ static irqreturn_t ps3disk_interrupt(int irq, void *data) | |||
238 | 238 | ||
239 | if (tag != dev->tag) | 239 | if (tag != dev->tag) |
240 | dev_err(&dev->sbd.core, | 240 | dev_err(&dev->sbd.core, |
241 | "%s:%u: tag mismatch, got %lx, expected %lx\n", | 241 | "%s:%u: tag mismatch, got %llx, expected %llx\n", |
242 | __func__, __LINE__, tag, dev->tag); | 242 | __func__, __LINE__, tag, dev->tag); |
243 | 243 | ||
244 | if (res) { | 244 | if (res) { |
245 | dev_err(&dev->sbd.core, "%s:%u: res=%d status=0x%lx\n", | 245 | dev_err(&dev->sbd.core, "%s:%u: res=%d status=0x%llx\n", |
246 | __func__, __LINE__, res, status); | 246 | __func__, __LINE__, res, status); |
247 | return IRQ_HANDLED; | 247 | return IRQ_HANDLED; |
248 | } | 248 | } |
@@ -269,7 +269,7 @@ static irqreturn_t ps3disk_interrupt(int irq, void *data) | |||
269 | op = read ? "read" : "write"; | 269 | op = read ? "read" : "write"; |
270 | } | 270 | } |
271 | if (status) { | 271 | if (status) { |
272 | dev_dbg(&dev->sbd.core, "%s:%u: %s failed 0x%lx\n", __func__, | 272 | dev_dbg(&dev->sbd.core, "%s:%u: %s failed 0x%llx\n", __func__, |
273 | __LINE__, op, status); | 273 | __LINE__, op, status); |
274 | error = -EIO; | 274 | error = -EIO; |
275 | } else { | 275 | } else { |
@@ -297,7 +297,7 @@ static int ps3disk_sync_cache(struct ps3_storage_device *dev) | |||
297 | 297 | ||
298 | res = ps3stor_send_command(dev, LV1_STORAGE_ATA_HDDOUT, 0, 0, 0, 0); | 298 | res = ps3stor_send_command(dev, LV1_STORAGE_ATA_HDDOUT, 0, 0, 0, 0); |
299 | if (res) { | 299 | if (res) { |
300 | dev_err(&dev->sbd.core, "%s:%u: sync cache failed 0x%lx\n", | 300 | dev_err(&dev->sbd.core, "%s:%u: sync cache failed 0x%llx\n", |
301 | __func__, __LINE__, res); | 301 | __func__, __LINE__, res); |
302 | return -EIO; | 302 | return -EIO; |
303 | } | 303 | } |
@@ -388,7 +388,7 @@ static int ps3disk_identify(struct ps3_storage_device *dev) | |||
388 | sizeof(ata_cmnd), ata_cmnd.buffer, | 388 | sizeof(ata_cmnd), ata_cmnd.buffer, |
389 | ata_cmnd.arglen); | 389 | ata_cmnd.arglen); |
390 | if (res) { | 390 | if (res) { |
391 | dev_err(&dev->sbd.core, "%s:%u: identify disk failed 0x%lx\n", | 391 | dev_err(&dev->sbd.core, "%s:%u: identify disk failed 0x%llx\n", |
392 | __func__, __LINE__, res); | 392 | __func__, __LINE__, res); |
393 | return -EIO; | 393 | return -EIO; |
394 | } | 394 | } |
@@ -426,7 +426,7 @@ static int __devinit ps3disk_probe(struct ps3_system_bus_device *_dev) | |||
426 | 426 | ||
427 | if (dev->blk_size < 512) { | 427 | if (dev->blk_size < 512) { |
428 | dev_err(&dev->sbd.core, | 428 | dev_err(&dev->sbd.core, |
429 | "%s:%u: cannot handle block size %lu\n", __func__, | 429 | "%s:%u: cannot handle block size %llu\n", __func__, |
430 | __LINE__, dev->blk_size); | 430 | __LINE__, dev->blk_size); |
431 | return -EINVAL; | 431 | return -EINVAL; |
432 | } | 432 | } |
@@ -512,7 +512,7 @@ static int __devinit ps3disk_probe(struct ps3_system_bus_device *_dev) | |||
512 | dev->regions[dev->region_idx].size*priv->blocking_factor); | 512 | dev->regions[dev->region_idx].size*priv->blocking_factor); |
513 | 513 | ||
514 | dev_info(&dev->sbd.core, | 514 | dev_info(&dev->sbd.core, |
515 | "%s is a %s (%lu MiB total, %lu MiB for OtherOS)\n", | 515 | "%s is a %s (%llu MiB total, %lu MiB for OtherOS)\n", |
516 | gendisk->disk_name, priv->model, priv->raw_capacity >> 11, | 516 | gendisk->disk_name, priv->model, priv->raw_capacity >> 11, |
517 | get_capacity(gendisk) >> 11); | 517 | get_capacity(gendisk) >> 11); |
518 | 518 | ||
diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c index 29e1dfafb7c6..381d686fc1a3 100644 --- a/drivers/block/xsysace.c +++ b/drivers/block/xsysace.c | |||
@@ -1206,6 +1206,7 @@ static struct of_device_id ace_of_match[] __devinitdata = { | |||
1206 | { .compatible = "xlnx,opb-sysace-1.00.b", }, | 1206 | { .compatible = "xlnx,opb-sysace-1.00.b", }, |
1207 | { .compatible = "xlnx,opb-sysace-1.00.c", }, | 1207 | { .compatible = "xlnx,opb-sysace-1.00.c", }, |
1208 | { .compatible = "xlnx,xps-sysace-1.00.a", }, | 1208 | { .compatible = "xlnx,xps-sysace-1.00.a", }, |
1209 | { .compatible = "xlnx,sysace", }, | ||
1209 | {}, | 1210 | {}, |
1210 | }; | 1211 | }; |
1211 | MODULE_DEVICE_TABLE(of, ace_of_match); | 1212 | MODULE_DEVICE_TABLE(of, ace_of_match); |