Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: queue: Factor out mmc_queue_reqs_free_bufs()

In preparation for supporting a queue of requests, factor out
mmc_queue_reqs_free_bufs().

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Harjani Ritesh <riteshh@codeaurora.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Adrian Hunter and committed by
Ulf Hansson
c09949cf 64e29e42

+26 -39
+26 -39
drivers/mmc/card/queue.c
··· 252 252 return ret; 253 253 } 254 254 255 + static void mmc_queue_reqs_free_bufs(struct mmc_queue *mq) 256 + { 257 + struct mmc_queue_req *mqrq_cur = mq->mqrq_cur; 258 + struct mmc_queue_req *mqrq_prev = mq->mqrq_prev; 259 + 260 + kfree(mqrq_cur->bounce_sg); 261 + mqrq_cur->bounce_sg = NULL; 262 + kfree(mqrq_prev->bounce_sg); 263 + mqrq_prev->bounce_sg = NULL; 264 + 265 + kfree(mqrq_cur->sg); 266 + mqrq_cur->sg = NULL; 267 + kfree(mqrq_cur->bounce_buf); 268 + mqrq_cur->bounce_buf = NULL; 269 + 270 + kfree(mqrq_prev->sg); 271 + mqrq_prev->sg = NULL; 272 + kfree(mqrq_prev->bounce_buf); 273 + mqrq_prev->bounce_buf = NULL; 274 + } 275 + 255 276 /** 256 277 * mmc_init_queue - initialise a queue structure. 257 278 * @mq: mmc queue ··· 289 268 u64 limit = BLK_BOUNCE_HIGH; 290 269 bool bounce = false; 291 270 int ret; 292 - struct mmc_queue_req *mqrq_cur = &mq->mqrq[0]; 293 - struct mmc_queue_req *mqrq_prev = &mq->mqrq[1]; 294 271 295 272 if (mmc_dev(host)->dma_mask && *mmc_dev(host)->dma_mask) 296 273 limit = (u64)dma_max_pfn(mmc_dev(host)) << PAGE_SHIFT; ··· 298 279 if (!mq->queue) 299 280 return -ENOMEM; 300 281 301 - mq->mqrq_cur = mqrq_cur; 302 - mq->mqrq_prev = mqrq_prev; 282 + mq->mqrq_cur = &mq->mqrq[0]; 283 + mq->mqrq_prev = &mq->mqrq[1]; 303 284 mq->queue->queuedata = mq; 304 285 305 286 blk_queue_prep_rq(mq->queue, mmc_prep_request); ··· 355 336 356 337 if (IS_ERR(mq->thread)) { 357 338 ret = PTR_ERR(mq->thread); 358 - goto free_bounce_sg; 339 + goto cleanup_queue; 359 340 } 360 341 361 342 return 0; 362 - free_bounce_sg: 363 - kfree(mqrq_cur->bounce_sg); 364 - mqrq_cur->bounce_sg = NULL; 365 - kfree(mqrq_prev->bounce_sg); 366 - mqrq_prev->bounce_sg = NULL; 367 343 368 344 cleanup_queue: 369 - kfree(mqrq_cur->sg); 370 - mqrq_cur->sg = NULL; 371 - kfree(mqrq_cur->bounce_buf); 372 - mqrq_cur->bounce_buf = NULL; 373 - 374 - kfree(mqrq_prev->sg); 375 - mqrq_prev->sg = NULL; 376 - kfree(mqrq_prev->bounce_buf); 377 - mqrq_prev->bounce_buf = NULL; 378 - 345 + mmc_queue_reqs_free_bufs(mq); 379 346 blk_cleanup_queue(mq->queue); 380 347 return ret; 381 348 } ··· 370 365 { 371 366 struct request_queue *q = mq->queue; 372 367 unsigned long flags; 373 - struct mmc_queue_req *mqrq_cur = mq->mqrq_cur; 374 - struct mmc_queue_req *mqrq_prev = mq->mqrq_prev; 375 368 376 369 /* Make sure the queue isn't suspended, as that will deadlock */ 377 370 mmc_queue_resume(mq); ··· 383 380 blk_start_queue(q); 384 381 spin_unlock_irqrestore(q->queue_lock, flags); 385 382 386 - kfree(mqrq_cur->bounce_sg); 387 - mqrq_cur->bounce_sg = NULL; 388 - 389 - kfree(mqrq_cur->sg); 390 - mqrq_cur->sg = NULL; 391 - 392 - kfree(mqrq_cur->bounce_buf); 393 - mqrq_cur->bounce_buf = NULL; 394 - 395 - kfree(mqrq_prev->bounce_sg); 396 - mqrq_prev->bounce_sg = NULL; 397 - 398 - kfree(mqrq_prev->sg); 399 - mqrq_prev->sg = NULL; 400 - 401 - kfree(mqrq_prev->bounce_buf); 402 - mqrq_prev->bounce_buf = NULL; 383 + mmc_queue_reqs_free_bufs(mq); 403 384 404 385 mq->card = NULL; 405 386 }