These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / mmc / card / queue.c
index 8efa368..6f4323c 100644 (file)
@@ -56,7 +56,6 @@ static int mmc_queue_thread(void *d)
        down(&mq->thread_sem);
        do {
                struct request *req = NULL;
-               struct mmc_queue_req *tmp;
                unsigned int cmd_flags = 0;
 
                spin_lock_irq(q->queue_lock);
@@ -69,6 +68,7 @@ static int mmc_queue_thread(void *d)
                        set_current_state(TASK_RUNNING);
                        cmd_flags = req ? req->cmd_flags : 0;
                        mq->issue_fn(mq, req);
+                       cond_resched();
                        if (mq->flags & MMC_QUEUE_NEW_REQUEST) {
                                mq->flags &= ~MMC_QUEUE_NEW_REQUEST;
                                continue; /* fetch again */
@@ -86,9 +86,7 @@ static int mmc_queue_thread(void *d)
 
                        mq->mqrq_prev->brq.mrq.data = NULL;
                        mq->mqrq_prev->req = NULL;
-                       tmp = mq->mqrq_prev;
-                       mq->mqrq_prev = mq->mqrq_cur;
-                       mq->mqrq_cur = tmp;
+                       swap(mq->mqrq_prev, mq->mqrq_cur);
                } else {
                        if (kthread_should_stop()) {
                                set_current_state(TASK_RUNNING);
@@ -167,7 +165,7 @@ static void mmc_queue_setup_discard(struct request_queue *q,
                return;
 
        queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, q);
-       q->limits.max_discard_sectors = max_discard;
+       blk_queue_max_discard_sectors(q, max_discard);
        if (card->erased_byte == 0 && !mmc_can_discard(card))
                q->limits.discard_zeroes_data = 1;
        q->limits.discard_granularity = card->pref_erase << 9;
@@ -469,7 +467,7 @@ static unsigned int mmc_queue_packed_map_sg(struct mmc_queue *mq,
                        sg_set_buf(__sg, buf + offset, len);
                        offset += len;
                        remain -= len;
-                       (__sg++)->page_link &= ~0x02;
+                       sg_unmark_end(__sg++);
                        sg_len++;
                } while (remain);
        }
@@ -477,7 +475,7 @@ static unsigned int mmc_queue_packed_map_sg(struct mmc_queue *mq,
        list_for_each_entry(req, &packed->list, queuelist) {
                sg_len += blk_rq_map_sg(mq->queue, req, __sg);
                __sg = sg + (sg_len - 1);
-               (__sg++)->page_link &= ~0x02;
+               sg_unmark_end(__sg++);
        }
        sg_mark_end(sg + (sg_len - 1));
        return sg_len;