本文整理汇总了C++中rq_entry_fifo函数的典型用法代码示例。如果您正苦于以下问题:C++ rq_entry_fifo函数的具体用法?C++ rq_entry_fifo怎么用?C++ rq_entry_fifo使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了rq_entry_fifo函数的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: zen_expired_request
/*
* get the first expired request in direction ddir
*/
static struct request *
zen_expired_request(struct zen_data *zdata, int ddir)
{
struct request *rq;
if (list_empty(&zdata->fifo_list[ddir]))
return NULL;
rq = rq_entry_fifo(zdata->fifo_list[ddir].next);
if (time_after_eq(jiffies, rq_fifo_time(rq)))
return rq;
return NULL;
}
开发者ID:Minia89,项目名称:DORIMANX_LG_STOCK_LP_KERNEL,代码行数:17,代码来源:zen-iosched.c
示例2: vr_expired_request
/*
* get the first expired request in direction ddir
*/
static struct request *
vr_expired_request(struct vr_data *vd, int ddir)
{
struct request *rq;
if (list_empty(&vd->fifo_list[ddir]))
return NULL;
rq = rq_entry_fifo(vd->fifo_list[ddir].next);
if (time_after(jiffies, rq_fifo_time(rq)))
return rq;
return NULL;
}
开发者ID:Banjo0917,项目名称:cink-peax,代码行数:17,代码来源:vr-iosched.c
示例3: row_dispatch_insert
/*
* row_dispatch_insert() - move request to dispatch queue
* @rd: pointer to struct row_data
* @queue_idx: index of the row_queue to dispatch from
*
* This function moves the next request to dispatch from
* the given queue (row_queues[queue_idx]) to the dispatch queue
*
*/
static void row_dispatch_insert(struct row_data *rd, int queue_idx)
{
struct request *rq;
rq = rq_entry_fifo(rd->row_queues[queue_idx].fifo.next);
row_remove_request(rd->dispatch_queue, rq);
elv_dispatch_add_tail(rd->dispatch_queue, rq);
rd->row_queues[queue_idx].nr_dispatched++;
row_clear_rowq_unserved(rd, queue_idx);
row_log_rowq(rd, queue_idx, " Dispatched request nr_disp = %d",
rd->row_queues[queue_idx].nr_dispatched);
if (rq->cmd_flags & REQ_URGENT)
rd->nr_urgent_in_flight++;
}
开发者ID:showp1984,项目名称:Blackout-Monarudo,代码行数:23,代码来源:row-iosched.c
示例4: sio_expired_request
static struct request *
sio_expired_request(struct sio_data *sd, int sync, int data_dir)
{
struct list_head *list = &sd->fifo_list[sync][data_dir];
struct request *rq;
if (list_empty(list))
return NULL;
/* Retrieve request */
rq = rq_entry_fifo(list->next);
/* Request has expired */
if (time_after_eq(jiffies, rq_fifo_time(rq)))
return rq;
return NULL;
}
开发者ID:F4uzan,项目名称:skernel_u0,代码行数:14,代码来源:sioplus-iosched.c
示例5: rq_entry_fifo
static struct request *tripndroid_expired_request(struct tripndroid_data *td, int sync, int data_dir)
{
struct list_head *list = &td->fifo_list[sync][data_dir];
struct request *rq;
if (list_empty(list))
return NULL;
rq = rq_entry_fifo(list->next);
//if (time_after(jiffies, rq_fifo_time(rq)))
//return rq;
return NULL;
}
开发者ID:abazad,项目名称:nethunter-kernel,代码行数:15,代码来源:tripndroid-iosched.c
示例6: fiops_dispatch_request
/* return vios dispatched */
static u64 fiops_dispatch_request(struct fiops_data *fiopsd,
struct fiops_ioc *ioc)
{
struct request *rq;
struct request_queue *q = fiopsd->queue;
rq = rq_entry_fifo(ioc->fifo.next);
fiops_remove_request(rq);
elv_dispatch_add_tail(q, rq);
fiopsd->in_flight[rq_is_sync(rq)]++;
ioc->in_flight++;
return fiops_scaled_vios(fiopsd, ioc, rq);
}
开发者ID:Minia89,项目名称:Note-3-AEL-Kernel-SM-N9005_EUR_LL_Opensource_Update2.,代码行数:17,代码来源:fiops-iosched.c
示例7: sio_expired_request
static struct request *
sio_expired_request(struct sio_data *sd, int sync)
{
struct request *rq;
if (list_empty(&sd->fifo_list[sync]))
return NULL;
/* Retrieve request */
rq = rq_entry_fifo(sd->fifo_list[sync].next);
/* Request has expired */
if (time_after(jiffies, rq_fifo_time(rq)))
return rq;
return NULL;
}
开发者ID:Austrie,项目名称:SpeedDemon-Kernel,代码行数:17,代码来源:sio-iosched.c
示例8: deadline_check_fifo
/*
* deadline_check_fifo returns 0 if there are no expired requests on the fifo,
* 1 otherwise. Requires !list_empty(&fd->fifo_list[data_type])
*/
static inline int deadline_check_fifo(struct flash_data *fd, int ddir)
{
struct request *rq;
// if no req on given list, return 0: not expire;
if(list_empty(&fd->fifo_list[ddir]))
return 0;
rq = rq_entry_fifo(fd->fifo_list[ddir].next);
/*
* rq is expired!
*/
if (time_after(jiffies, rq_fifo_time(rq)))
return 1;
return 0;
}
开发者ID:luyao-jiang,项目名称:scheduler,代码行数:22,代码来源:flash-iosched.c
示例9: row_dispatch_requests
/*
* row_dispatch_requests() - selects the next request to dispatch
* @q: requests queue
* @force: flag indicating if forced dispatch
*
* Return 0 if no requests were moved to the dispatch queue.
* 1 otherwise
*
*/
static int row_dispatch_requests(struct request_queue *q, int force)
{
struct row_data *rd = (struct row_data *)q->elevator->elevator_data;
int ret = 0, currq, ioprio_class_to_serve, start_idx, end_idx;
int expire_index = -1;
if (force && hrtimer_active(&rd->rd_idle_data.hr_timer)) {
if (hrtimer_try_to_cancel(&rd->rd_idle_data.hr_timer) >= 0) {
row_log(rd->dispatch_queue,
"Canceled delayed work on %d - forced dispatch",
rd->rd_idle_data.idling_queue_idx);
rd->rd_idle_data.idling_queue_idx = ROWQ_MAX_PRIO;
}
}
if (rd->pending_urgent_rq) {
row_log(rd->dispatch_queue, "dispatching urgent request");
row_dispatch_insert(rd, rd->pending_urgent_rq);
ret = 1;
goto done;
}
ioprio_class_to_serve = row_get_ioprio_class_to_serve(rd, force);
row_log(rd->dispatch_queue, "Dispatching from %d priority class",
ioprio_class_to_serve);
if (ioprio_class_to_serve == IOPRIO_CLASS_RT) {
expire_index = row_be_expire_adjust(rd);
if (expire_index >= ROWQ_REG_PRIO_IDX)
ioprio_class_to_serve = IOPRIO_CLASS_BE;
}
switch (ioprio_class_to_serve) {
case IOPRIO_CLASS_NONE:
rd->last_served_ioprio_class = IOPRIO_CLASS_NONE;
goto done;
case IOPRIO_CLASS_RT:
if (expire_index >= 0) {
start_idx = expire_index;
end_idx = expire_index + 1;
expire_index = -1;
} else {
start_idx = ROWQ_HIGH_PRIO_IDX;
end_idx = ROWQ_REG_PRIO_IDX;
}
break;
case IOPRIO_CLASS_BE:
if (expire_index > 0) {
start_idx = expire_index;
end_idx = expire_index + 1;
expire_index = -1;
} else {
start_idx = ROWQ_REG_PRIO_IDX;
end_idx = ROWQ_LOW_PRIO_IDX;
}
break;
case IOPRIO_CLASS_IDLE:
start_idx = ROWQ_LOW_PRIO_IDX;
end_idx = ROWQ_MAX_PRIO;
break;
default:
pr_err("%s(): Invalid I/O priority class", __func__);
goto done;
}
currq = row_get_next_queue(q, rd, start_idx, end_idx);
/* Dispatch */
if (currq >= 0) {
row_dispatch_insert(rd,
rq_entry_fifo(rd->row_queues[currq].fifo.next));
ret = 1;
}
done:
return ret;
}
开发者ID:fromfuture,项目名称:Elizium,代码行数:85,代码来源:row-iosched.c
示例10: deadline_dispatch_requests
/*
* deadline_dispatch_requests selects the best request according to
* read/write expire, fifo_batch, etc
*/
static int deadline_dispatch_requests(request_queue_t *q, int force)
{
struct deadline_data *dd = q->elevator->elevator_data;
const int reads = !list_empty(&dd->fifo_list[READ]);
const int writes = !list_empty(&dd->fifo_list[WRITE]);
struct request *rq;
int data_dir;
/*
* batches are currently reads XOR writes
*/
if (dd->next_rq[WRITE])
rq = dd->next_rq[WRITE];
else
rq = dd->next_rq[READ];
if (rq) {
/* we have a "next request" */
if (dd->last_sector != rq->sector)
/* end the batch on a non sequential request */
dd->batching += dd->fifo_batch;
if (dd->batching < dd->fifo_batch)
/* we are still entitled to batch */
goto dispatch_request;
}
/*
* at this point we are not running a batch. select the appropriate
* data direction (read / write)
*/
if (reads) {
BUG_ON(RB_EMPTY_ROOT(&dd->sort_list[READ]));
if (writes && (dd->starved++ >= dd->writes_starved))
goto dispatch_writes;
data_dir = READ;
goto dispatch_find_request;
}
/*
* there are either no reads or writes have been starved
*/
if (writes) {
dispatch_writes:
BUG_ON(RB_EMPTY_ROOT(&dd->sort_list[WRITE]));
dd->starved = 0;
data_dir = WRITE;
goto dispatch_find_request;
}
return 0;
dispatch_find_request:
/*
* we are not running a batch, find best request for selected data_dir
*/
if (deadline_check_fifo(dd, data_dir)) {
/* An expired request exists - satisfy it */
dd->batching = 0;
rq = rq_entry_fifo(dd->fifo_list[data_dir].next);
} else if (dd->next_rq[data_dir]) {
/*
* The last req was the same dir and we have a next request in
* sort order. No expired requests so continue on from here.
*/
rq = dd->next_rq[data_dir];
} else {
struct rb_node *node;
/*
* The last req was the other direction or we have run out of
* higher-sectored requests. Go back to the lowest sectored
* request (1 way elevator) and start a new batch.
*/
dd->batching = 0;
node = rb_first(&dd->sort_list[data_dir]);
if (node)
rq = rb_entry_rq(node);
}
dispatch_request:
/*
* rq is the selected appropriate request.
*/
dd->batching++;
deadline_move_request(dd, rq);
//.........这里部分代码省略.........
开发者ID:usv299792458,项目名称:kernel,代码行数:101,代码来源:deadline-iosched.c
示例11: osio_dispatch
static int osio_dispatch(struct request_queue *q, int force)
{
struct osio_data *od = q->elevator->elevator_data;
const unsigned int non_empty[3] = {!list_empty(&od->fifo_head[OSIO_DIR_READ]),
!list_empty(&od->fifo_head[OSIO_DIR_SYNC_WRITE]),
!list_empty(&od->fifo_head[OSIO_DIR_ASYNC_WRITE]),};
struct request *rq = NULL;
osio_dbg("1, od->fifo_dir = %d\n", od->fifo_dir);
osio_dbg("1, non_empty[0] = %d\n", non_empty[0]);
osio_dbg("1, non_empty[1] = %d\n", non_empty[1]);
osio_dbg("1, non_empty[2] = %d\n", non_empty[2]);
/* dispatch a batch of rq */
if (od->fifo_dir != OSIO_DIR_UNDEF) {
if ((od->batching >= od->fifo_batch[od->fifo_dir]) || (!non_empty[od->fifo_dir])) {
od->fifo_dir = OSIO_DIR_UNDEF;
} else {
goto dispatch_request;
}
}
/* redecide the direction */
if (non_empty[OSIO_DIR_READ]) {
goto dir_read;
}
if (non_empty[OSIO_DIR_SYNC_WRITE]) {
goto dir_sync_write;
}
if (non_empty[OSIO_DIR_ASYNC_WRITE]) {
goto dir_async_write;
}
return 0;
dir_read:
/* find a starved write rq */
if ((od->write_starved[OSIO_SYNC] > od->write_starved_line[OSIO_SYNC]) && non_empty[OSIO_DIR_SYNC_WRITE]) {
goto dir_sync_write;
} else if ((od->write_starved[OSIO_ASYNC] > od->write_starved_line[OSIO_ASYNC]) && non_empty[OSIO_DIR_ASYNC_WRITE]) {
goto dir_async_write;
}
od->fifo_dir = OSIO_DIR_READ;
od->batching = 0;
od->write_starved[OSIO_SYNC] += non_empty[OSIO_DIR_SYNC_WRITE];
od->write_starved[OSIO_ASYNC] += non_empty[OSIO_DIR_ASYNC_WRITE];
goto dispatch_request;
dir_sync_write:
if ((od->write_starved[OSIO_ASYNC] > od->write_starved_line[OSIO_ASYNC]) && non_empty[OSIO_DIR_ASYNC_WRITE]) {
goto dir_async_write;
}
od->fifo_dir = OSIO_DIR_SYNC_WRITE;
od->batching = 0;
od->write_starved[OSIO_SYNC] = 0;
od->write_starved[OSIO_ASYNC] += non_empty[OSIO_DIR_ASYNC_WRITE];
goto dispatch_request;
dir_async_write:
od->fifo_dir = OSIO_DIR_ASYNC_WRITE;
od->batching = 0;
od->write_starved[OSIO_ASYNC] = 0;
od->write_starved[OSIO_SYNC] += non_empty[OSIO_DIR_SYNC_WRITE];
goto dispatch_request;
dispatch_request:
/* dispatch req */
osio_dbg("2, od->fifo_dir = %d\n", od->fifo_dir);
osio_dbg("2, od->batching = %d\n", od->batching);
rq = rq_entry_fifo(od->fifo_head[od->fifo_dir].next);
list_del_init(&rq->queuelist);
elv_dispatch_add_tail(q, rq);
od->batching ++;
return 1;
}
开发者ID:fshh520,项目名称:osio-iosched,代码行数:79,代码来源:osio-iosched.c
注:本文中的rq_entry_fifo函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论