forked from Minki/linux
mmc: card: do away with indirection pointer
We have enough vtables in the kernel as it is, we don't need this one to create even more artificial separation of concerns. As is proved by the Makefile: obj-$(CONFIG_MMC_BLOCK) += mmc_block.o mmc_block-objs := block.o queue.o block.c and queue.c are baked into the same mmc_block.o object. So why would one of these objects access a function in the other object by dereferencing a pointer? Create a new block.h header file for the single shared function from block to queue and remove the function pointer and just call the queue request function. Apart from making the code more readable, this also makes link optimizations possible and probably speeds up the call as well. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
c80f275fa1
commit
29eb7bd01e
@ -2144,7 +2144,7 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
|
int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct mmc_blk_data *md = mq->data;
|
struct mmc_blk_data *md = mq->data;
|
||||||
@ -2265,7 +2265,6 @@ again:
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto err_putdisk;
|
goto err_putdisk;
|
||||||
|
|
||||||
md->queue.issue_fn = mmc_blk_issue_rq;
|
|
||||||
md->queue.data = md;
|
md->queue.data = md;
|
||||||
|
|
||||||
md->disk->major = MMC_BLOCK_MAJOR;
|
md->disk->major = MMC_BLOCK_MAJOR;
|
||||||
|
1
drivers/mmc/card/block.h
Normal file
1
drivers/mmc/card/block.h
Normal file
@ -0,0 +1 @@
|
|||||||
|
int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req);
|
@ -19,7 +19,9 @@
|
|||||||
|
|
||||||
#include <linux/mmc/card.h>
|
#include <linux/mmc/card.h>
|
||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
|
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
#include "block.h"
|
||||||
|
|
||||||
#define MMC_QUEUE_BOUNCESZ 65536
|
#define MMC_QUEUE_BOUNCESZ 65536
|
||||||
|
|
||||||
@ -68,7 +70,7 @@ static int mmc_queue_thread(void *d)
|
|||||||
bool req_is_special = mmc_req_is_special(req);
|
bool req_is_special = mmc_req_is_special(req);
|
||||||
|
|
||||||
set_current_state(TASK_RUNNING);
|
set_current_state(TASK_RUNNING);
|
||||||
mq->issue_fn(mq, req);
|
mmc_blk_issue_rq(mq, req);
|
||||||
cond_resched();
|
cond_resched();
|
||||||
if (mq->flags & MMC_QUEUE_NEW_REQUEST) {
|
if (mq->flags & MMC_QUEUE_NEW_REQUEST) {
|
||||||
mq->flags &= ~MMC_QUEUE_NEW_REQUEST;
|
mq->flags &= ~MMC_QUEUE_NEW_REQUEST;
|
||||||
|
@ -57,8 +57,6 @@ struct mmc_queue {
|
|||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
#define MMC_QUEUE_SUSPENDED (1 << 0)
|
#define MMC_QUEUE_SUSPENDED (1 << 0)
|
||||||
#define MMC_QUEUE_NEW_REQUEST (1 << 1)
|
#define MMC_QUEUE_NEW_REQUEST (1 << 1)
|
||||||
|
|
||||||
int (*issue_fn)(struct mmc_queue *, struct request *);
|
|
||||||
void *data;
|
void *data;
|
||||||
struct request_queue *queue;
|
struct request_queue *queue;
|
||||||
struct mmc_queue_req mqrq[2];
|
struct mmc_queue_req mqrq[2];
|
||||||
|
Loading…
Reference in New Issue
Block a user