lkml.org 
[lkml]   [2013]   [Jan]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 1/4] block: add a flag to identify PM request
    Date
    From: Lin Ming <ming.m.lin@intel.com>

    Add a flag REQ_PM to identify the request is PM related.
    As an example, modify scsi code to use this flag.

    Signed-off-by: Lin Ming <ming.m.lin@intel.com>
    Signed-off-by: Aaron Lu <aaron.lu@intel.com>
    ---
    drivers/scsi/scsi_lib.c | 9 ++++-----
    drivers/scsi/sd.c | 9 +++++----
    include/linux/blk_types.h | 2 ++
    include/scsi/scsi_device.h | 17 +++++++++++++----
    4 files changed, 24 insertions(+), 13 deletions(-)

    diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
    index f1bf5af..af1b8b3 100644
    --- a/drivers/scsi/scsi_lib.c
    +++ b/drivers/scsi/scsi_lib.c
    @@ -271,11 +271,10 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
    }
    EXPORT_SYMBOL(scsi_execute);

    -
    -int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd,
    +int scsi_execute_req_flags(struct scsi_device *sdev, const unsigned char *cmd,
    int data_direction, void *buffer, unsigned bufflen,
    struct scsi_sense_hdr *sshdr, int timeout, int retries,
    - int *resid)
    + int *resid, int flags)
    {
    char *sense = NULL;
    int result;
    @@ -286,14 +285,14 @@ int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd,
    return DRIVER_ERROR << 24;
    }
    result = scsi_execute(sdev, cmd, data_direction, buffer, bufflen,
    - sense, timeout, retries, 0, resid);
    + sense, timeout, retries, flags, resid);
    if (sshdr)
    scsi_normalize_sense(sense, SCSI_SENSE_BUFFERSIZE, sshdr);

    kfree(sense);
    return result;
    }
    -EXPORT_SYMBOL(scsi_execute_req);
    +EXPORT_SYMBOL(scsi_execute_req_flags);

    /*
    * Function: scsi_init_cmd_errh()
    diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
    index 7992635..8ca160e 100644
    --- a/drivers/scsi/sd.c
    +++ b/drivers/scsi/sd.c
    @@ -1424,8 +1424,9 @@ static int sd_sync_cache(struct scsi_disk *sdkp)
    * Leave the rest of the command zero to indicate
    * flush everything.
    */
    - res = scsi_execute_req(sdp, cmd, DMA_NONE, NULL, 0, &sshdr,
    - SD_FLUSH_TIMEOUT, SD_MAX_RETRIES, NULL);
    + res = scsi_execute_req_flags(sdp, cmd, DMA_NONE, NULL, 0, &sshdr,
    + SD_FLUSH_TIMEOUT, SD_MAX_RETRIES, NULL,
    + REQ_PM);
    if (res == 0)
    break;
    }
    @@ -3021,8 +3022,8 @@ static int sd_start_stop_device(struct scsi_disk *sdkp, int start)
    if (!scsi_device_online(sdp))
    return -ENODEV;

    - res = scsi_execute_req(sdp, cmd, DMA_NONE, NULL, 0, &sshdr,
    - SD_TIMEOUT, SD_MAX_RETRIES, NULL);
    + res = scsi_execute_req_flags(sdp, cmd, DMA_NONE, NULL, 0, &sshdr,
    + SD_TIMEOUT, SD_MAX_RETRIES, NULL, REQ_PM);
    if (res) {
    sd_printk(KERN_WARNING, sdkp, "START_STOP FAILED\n");
    sd_print_result(sdkp, res);
    diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
    index cdf1119..fcc1ce2 100644
    --- a/include/linux/blk_types.h
    +++ b/include/linux/blk_types.h
    @@ -175,6 +175,7 @@ enum rq_flag_bits {
    __REQ_IO_STAT, /* account I/O stat */
    __REQ_MIXED_MERGE, /* merge of different types, fail separately */
    __REQ_KERNEL, /* direct IO to kernel pages */
    + __REQ_PM, /* runtime pm request */
    __REQ_NR_BITS, /* stops here */
    };

    @@ -223,5 +224,6 @@ enum rq_flag_bits {
    #define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE)
    #define REQ_SECURE (1 << __REQ_SECURE)
    #define REQ_KERNEL (1 << __REQ_KERNEL)
    +#define REQ_PM (1 << __REQ_PM)

    #endif /* __LINUX_BLK_TYPES_H */
    diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
    index e65c62e..aff494c 100644
    --- a/include/scsi/scsi_device.h
    +++ b/include/scsi/scsi_device.h
    @@ -393,10 +393,19 @@ extern int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
    int data_direction, void *buffer, unsigned bufflen,
    unsigned char *sense, int timeout, int retries,
    int flag, int *resid);
    -extern int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd,
    - int data_direction, void *buffer, unsigned bufflen,
    - struct scsi_sense_hdr *, int timeout, int retries,
    - int *resid);
    +extern int scsi_execute_req_flags(struct scsi_device *sdev,
    + const unsigned char *cmd, int data_direction, void *buffer,
    + unsigned bufflen, struct scsi_sense_hdr *sshdr, int timeout,
    + int retries, int *resid, int flags);
    +
    +static inline int scsi_execute_req(struct scsi_device *sdev,
    + const unsigned char *cmd, int data_direction, void *buffer,
    + unsigned bufflen, struct scsi_sense_hdr *sshdr, int timeout,
    + int retries, int *resid)
    +{
    + return scsi_execute_req_flags(sdev, cmd, data_direction, buffer,
    + bufflen, sshdr, timeout, retries, resid, 0);
    +}

    #ifdef CONFIG_PM_RUNTIME
    extern int scsi_autopm_get_device(struct scsi_device *);
    --
    1.7.11.7


    \
     
     \ /
      Last update: 2013-01-06 10:21    [W:3.194 / U:0.304 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site