mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
scsi: block: Introduce BLK_MQ_REQ_PM
Introduce the BLK_MQ_REQ_PM flag. This flag makes the request allocation functions set RQF_PM. This is the first step towards removing BLK_MQ_REQ_PREEMPT. Link: https://lore.kernel.org/r/20201209052951.16136-3-bvanassche@acm.org Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Stanley Chu <stanley.chu@mediatek.com> Cc: Ming Lei <ming.lei@redhat.com> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Cc: Can Guo <cang@codeaurora.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Jens Axboe <axboe@kernel.dk> Reviewed-by: Can Guo <cang@codeaurora.org> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
fa4d0f1992
commit
0854bcdcde
@@ -424,11 +424,11 @@ EXPORT_SYMBOL(blk_cleanup_queue);
|
|||||||
/**
|
/**
|
||||||
* blk_queue_enter() - try to increase q->q_usage_counter
|
* blk_queue_enter() - try to increase q->q_usage_counter
|
||||||
* @q: request queue pointer
|
* @q: request queue pointer
|
||||||
* @flags: BLK_MQ_REQ_NOWAIT and/or BLK_MQ_REQ_PREEMPT
|
* @flags: BLK_MQ_REQ_NOWAIT, BLK_MQ_REQ_PM and/or BLK_MQ_REQ_PREEMPT
|
||||||
*/
|
*/
|
||||||
int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)
|
int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)
|
||||||
{
|
{
|
||||||
const bool pm = flags & BLK_MQ_REQ_PREEMPT;
|
const bool pm = flags & (BLK_MQ_REQ_PM | BLK_MQ_REQ_PREEMPT);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
bool success = false;
|
bool success = false;
|
||||||
@@ -630,7 +630,8 @@ struct request *blk_get_request(struct request_queue *q, unsigned int op,
|
|||||||
struct request *req;
|
struct request *req;
|
||||||
|
|
||||||
WARN_ON_ONCE(op & REQ_NOWAIT);
|
WARN_ON_ONCE(op & REQ_NOWAIT);
|
||||||
WARN_ON_ONCE(flags & ~(BLK_MQ_REQ_NOWAIT | BLK_MQ_REQ_PREEMPT));
|
WARN_ON_ONCE(flags & ~(BLK_MQ_REQ_NOWAIT | BLK_MQ_REQ_PM |
|
||||||
|
BLK_MQ_REQ_PREEMPT));
|
||||||
|
|
||||||
req = blk_mq_alloc_request(q, op, flags);
|
req = blk_mq_alloc_request(q, op, flags);
|
||||||
if (!IS_ERR(req) && q->mq_ops->initialize_rq_fn)
|
if (!IS_ERR(req) && q->mq_ops->initialize_rq_fn)
|
||||||
|
@@ -292,6 +292,8 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
|
|||||||
rq->mq_hctx = data->hctx;
|
rq->mq_hctx = data->hctx;
|
||||||
rq->rq_flags = 0;
|
rq->rq_flags = 0;
|
||||||
rq->cmd_flags = data->cmd_flags;
|
rq->cmd_flags = data->cmd_flags;
|
||||||
|
if (data->flags & BLK_MQ_REQ_PM)
|
||||||
|
rq->rq_flags |= RQF_PM;
|
||||||
if (data->flags & BLK_MQ_REQ_PREEMPT)
|
if (data->flags & BLK_MQ_REQ_PREEMPT)
|
||||||
rq->rq_flags |= RQF_PREEMPT;
|
rq->rq_flags |= RQF_PREEMPT;
|
||||||
if (blk_queue_io_stat(data->q))
|
if (blk_queue_io_stat(data->q))
|
||||||
|
@@ -444,6 +444,8 @@ enum {
|
|||||||
BLK_MQ_REQ_NOWAIT = (__force blk_mq_req_flags_t)(1 << 0),
|
BLK_MQ_REQ_NOWAIT = (__force blk_mq_req_flags_t)(1 << 0),
|
||||||
/* allocate from reserved pool */
|
/* allocate from reserved pool */
|
||||||
BLK_MQ_REQ_RESERVED = (__force blk_mq_req_flags_t)(1 << 1),
|
BLK_MQ_REQ_RESERVED = (__force blk_mq_req_flags_t)(1 << 1),
|
||||||
|
/* set RQF_PM */
|
||||||
|
BLK_MQ_REQ_PM = (__force blk_mq_req_flags_t)(1 << 2),
|
||||||
/* set RQF_PREEMPT */
|
/* set RQF_PREEMPT */
|
||||||
BLK_MQ_REQ_PREEMPT = (__force blk_mq_req_flags_t)(1 << 3),
|
BLK_MQ_REQ_PREEMPT = (__force blk_mq_req_flags_t)(1 << 3),
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user