lkml.org 
[lkml]   [2011]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[024/146] gdrom,viocd: Convert to bdops->check_events()
    2.6.38-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Tejun Heo <tj@kernel.org>

    commit 1c27030bd21e7e2c68ef5be9f28c63778cf4b27f upstream.

    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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/cdrom/gdrom.c | 16 ++++++++++------
    drivers/cdrom/viocd.c | 17 ++++++++++-------
    2 files changed, 20 insertions(+), 13 deletions(-)

    --- a/drivers/cdrom/gdrom.c
    +++ b/drivers/cdrom/gdrom.c
    @@ -395,10 +395,12 @@ static int gdrom_drivestatus(struct cdro
    return CDS_NO_INFO;
    }

    -static int gdrom_mediachanged(struct cdrom_device_info *cd_info, int ignore)
    +static unsigned int gdrom_check_events(struct cdrom_device_info *cd_info,
    + unsigned int clearing, int ignore)
    {
    /* check the sense key */
    - return (__raw_readb(GDROM_ERROR_REG) & 0xF0) == 0x60;
    + return (__raw_readb(GDROM_ERROR_REG) & 0xF0) == 0x60 ?
    + DISK_EVENT_MEDIA_CHANGE : 0;
    }

    /* reset the G1 bus */
    @@ -483,7 +485,7 @@ static struct cdrom_device_ops gdrom_ops
    .open = gdrom_open,
    .release = gdrom_release,
    .drive_status = gdrom_drivestatus,
    - .media_changed = gdrom_mediachanged,
    + .check_events = gdrom_check_events,
    .get_last_session = gdrom_get_last_session,
    .reset = gdrom_hardreset,
    .audio_ioctl = gdrom_audio_ioctl,
    @@ -509,9 +511,10 @@ static int gdrom_bdops_release(struct ge
    return 0;
    }

    -static int gdrom_bdops_mediachanged(struct gendisk *disk)
    +static unsigned int gdrom_bdops_check_events(struct gendisk *disk,
    + unsigned int clearing)
    {
    - return cdrom_media_changed(gd.cd_info);
    + return cdrom_check_events(gd.cd_info, clearing);
    }

    static int gdrom_bdops_ioctl(struct block_device *bdev, fmode_t mode,
    @@ -530,7 +533,7 @@ static const struct block_device_operati
    .owner = THIS_MODULE,
    .open = gdrom_bdops_open,
    .release = gdrom_bdops_release,
    - .media_changed = gdrom_bdops_mediachanged,
    + .check_events = gdrom_bdops_check_events,
    .ioctl = gdrom_bdops_ioctl,
    };

    @@ -800,6 +803,7 @@ static int __devinit probe_gdrom(struct
    goto probe_fail_cdrom_register;
    }
    gd.disk->fops = &gdrom_bdops;
    + gd.disk->events = DISK_EVENT_MEDIA_CHANGE;
    /* latch on to the interrupt */
    err = gdrom_set_interrupt_handlers();
    if (err)
    --- a/drivers/cdrom/viocd.c
    +++ b/drivers/cdrom/viocd.c
    @@ -186,10 +186,11 @@ static int viocd_blk_ioctl(struct block_
    return ret;
    }

    -static int viocd_blk_media_changed(struct gendisk *disk)
    +static unsigned int viocd_blk_check_events(struct gendisk *disk,
    + unsigned int clearing)
    {
    struct disk_info *di = disk->private_data;
    - return cdrom_media_changed(&di->viocd_info);
    + return cdrom_check_events(&di->viocd_info, clearing);
    }

    static const struct block_device_operations viocd_fops = {
    @@ -197,7 +198,7 @@ static const struct block_device_operati
    .open = viocd_blk_open,
    .release = viocd_blk_release,
    .ioctl = viocd_blk_ioctl,
    - .media_changed = viocd_blk_media_changed,
    + .check_events = viocd_blk_check_events,
    };

    static int viocd_open(struct cdrom_device_info *cdi, int purpose)
    @@ -320,7 +321,8 @@ static void do_viocd_request(struct requ
    }
    }

    -static int viocd_media_changed(struct cdrom_device_info *cdi, int disc_nr)
    +static unsigned int viocd_check_events(struct cdrom_device_info *cdi,
    + unsigned int clearing, int disc_nr)
    {
    struct viocd_waitevent we;
    HvLpEvent_Rc hvrc;
    @@ -340,7 +342,7 @@ static int viocd_media_changed(struct cd
    if (hvrc != 0) {
    pr_warning("bad rc on HvCallEvent_signalLpEventFast %d\n",
    (int)hvrc);
    - return -EIO;
    + return 0;
    }

    wait_for_completion(&we.com);
    @@ -354,7 +356,7 @@ static int viocd_media_changed(struct cd
    return 0;
    }

    - return we.changed;
    + return we.changed ? DISK_EVENT_MEDIA_CHANGE : 0;
    }

    static int viocd_lock_door(struct cdrom_device_info *cdi, int locking)
    @@ -550,7 +552,7 @@ static int viocd_audio_ioctl(struct cdro
    static struct cdrom_device_ops viocd_dops = {
    .open = viocd_open,
    .release = viocd_release,
    - .media_changed = viocd_media_changed,
    + .check_events = viocd_check_events,
    .lock_door = viocd_lock_door,
    .generic_packet = viocd_packet,
    .audio_ioctl = viocd_audio_ioctl,
    @@ -624,6 +626,7 @@ static int viocd_probe(struct vio_dev *v
    gendisk->queue = q;
    gendisk->fops = &viocd_fops;
    gendisk->flags = GENHD_FL_CD|GENHD_FL_REMOVABLE;
    + gendisk->events = DISK_EVENT_MEDIA_CHANGE;
    set_capacity(gendisk, 0);
    gendisk->private_data = d;
    d->viocd_disk = gendisk;



    \
     
     \ /
      Last update: 2011-06-01 11:31    [W:0.026 / U:29.608 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site