Commit 1c27030bd21e7e2c68ef5be9f28c63778cf4b27f

Authored by Tejun Heo
1 parent 1a8a74f03f

gdrom,viocd: Convert to bdops->check_events()

Convert gdrom and viocd from ->media_changed() to ->check_events().

It's unclear how the conditions are cleared and it's possible that it
may generate spurious events when polled.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Kay Sievers <kay.sievers@vrfy.org>

Showing 2 changed files with 20 additions and 13 deletions Side-by-side Diff

drivers/cdrom/gdrom.c
... ... @@ -395,10 +395,12 @@
395 395 return CDS_NO_INFO;
396 396 }
397 397  
398   -static int gdrom_mediachanged(struct cdrom_device_info *cd_info, int ignore)
  398 +static unsigned int gdrom_check_events(struct cdrom_device_info *cd_info,
  399 + unsigned int clearing, int ignore)
399 400 {
400 401 /* check the sense key */
401   - return (__raw_readb(GDROM_ERROR_REG) & 0xF0) == 0x60;
  402 + return (__raw_readb(GDROM_ERROR_REG) & 0xF0) == 0x60 ?
  403 + DISK_EVENT_MEDIA_CHANGE : 0;
402 404 }
403 405  
404 406 /* reset the G1 bus */
... ... @@ -483,7 +485,7 @@
483 485 .open = gdrom_open,
484 486 .release = gdrom_release,
485 487 .drive_status = gdrom_drivestatus,
486   - .media_changed = gdrom_mediachanged,
  488 + .check_events = gdrom_check_events,
487 489 .get_last_session = gdrom_get_last_session,
488 490 .reset = gdrom_hardreset,
489 491 .audio_ioctl = gdrom_audio_ioctl,
490 492  
... ... @@ -509,9 +511,10 @@
509 511 return 0;
510 512 }
511 513  
512   -static int gdrom_bdops_mediachanged(struct gendisk *disk)
  514 +static unsigned int gdrom_bdops_check_events(struct gendisk *disk,
  515 + unsigned int clearing)
513 516 {
514   - return cdrom_media_changed(gd.cd_info);
  517 + return cdrom_check_events(gd.cd_info, clearing);
515 518 }
516 519  
517 520 static int gdrom_bdops_ioctl(struct block_device *bdev, fmode_t mode,
... ... @@ -530,7 +533,7 @@
530 533 .owner = THIS_MODULE,
531 534 .open = gdrom_bdops_open,
532 535 .release = gdrom_bdops_release,
533   - .media_changed = gdrom_bdops_mediachanged,
  536 + .check_events = gdrom_bdops_check_events,
534 537 .ioctl = gdrom_bdops_ioctl,
535 538 };
536 539  
... ... @@ -800,6 +803,7 @@
800 803 goto probe_fail_cdrom_register;
801 804 }
802 805 gd.disk->fops = &gdrom_bdops;
  806 + gd.disk->events = DISK_EVENT_MEDIA_CHANGE;
803 807 /* latch on to the interrupt */
804 808 err = gdrom_set_interrupt_handlers();
805 809 if (err)
drivers/cdrom/viocd.c
... ... @@ -186,10 +186,11 @@
186 186 return ret;
187 187 }
188 188  
189   -static int viocd_blk_media_changed(struct gendisk *disk)
  189 +static unsigned int viocd_blk_check_events(struct gendisk *disk,
  190 + unsigned int clearing)
190 191 {
191 192 struct disk_info *di = disk->private_data;
192   - return cdrom_media_changed(&di->viocd_info);
  193 + return cdrom_check_events(&di->viocd_info, clearing);
193 194 }
194 195  
195 196 static const struct block_device_operations viocd_fops = {
... ... @@ -197,7 +198,7 @@
197 198 .open = viocd_blk_open,
198 199 .release = viocd_blk_release,
199 200 .ioctl = viocd_blk_ioctl,
200   - .media_changed = viocd_blk_media_changed,
  201 + .check_events = viocd_blk_check_events,
201 202 };
202 203  
203 204 static int viocd_open(struct cdrom_device_info *cdi, int purpose)
... ... @@ -320,7 +321,8 @@
320 321 }
321 322 }
322 323  
323   -static int viocd_media_changed(struct cdrom_device_info *cdi, int disc_nr)
  324 +static unsigned int viocd_check_events(struct cdrom_device_info *cdi,
  325 + unsigned int clearing, int disc_nr)
324 326 {
325 327 struct viocd_waitevent we;
326 328 HvLpEvent_Rc hvrc;
... ... @@ -340,7 +342,7 @@
340 342 if (hvrc != 0) {
341 343 pr_warning("bad rc on HvCallEvent_signalLpEventFast %d\n",
342 344 (int)hvrc);
343   - return -EIO;
  345 + return 0;
344 346 }
345 347  
346 348 wait_for_completion(&we.com);
... ... @@ -354,7 +356,7 @@
354 356 return 0;
355 357 }
356 358  
357   - return we.changed;
  359 + return we.changed ? DISK_EVENT_MEDIA_CHANGE : 0;
358 360 }
359 361  
360 362 static int viocd_lock_door(struct cdrom_device_info *cdi, int locking)
... ... @@ -550,7 +552,7 @@
550 552 static struct cdrom_device_ops viocd_dops = {
551 553 .open = viocd_open,
552 554 .release = viocd_release,
553   - .media_changed = viocd_media_changed,
  555 + .check_events = viocd_check_events,
554 556 .lock_door = viocd_lock_door,
555 557 .generic_packet = viocd_packet,
556 558 .audio_ioctl = viocd_audio_ioctl,
... ... @@ -624,6 +626,7 @@
624 626 gendisk->queue = q;
625 627 gendisk->fops = &viocd_fops;
626 628 gendisk->flags = GENHD_FL_CD|GENHD_FL_REMOVABLE;
  629 + gendisk->events = DISK_EVENT_MEDIA_CHANGE;
627 630 set_capacity(gendisk, 0);
628 631 gendisk->private_data = d;
629 632 d->viocd_disk = gendisk;