Skip to content

Commit a0a1e63

Browse files
storulfrkhuangtao
authored andcommitted
UPSTREAM: mmc: block: Use the mmc host device index as the mmcblk device index
Commit 520bd7a ("mmc: core: Optimize boot time by detecting cards simultaneously") causes regressions for some platforms. These platforms relies on fixed mmcblk device indexes, instead of deploying the defacto standard with UUID/PARTUUID. In other words their rootfs needs to be available at hardcoded paths, like /dev/mmcblk0p2. Such guarantees have never been made by the kernel, but clearly the above commit changes the behaviour. More precisely, because of that the order changes of how cards becomes detected, so do their corresponding mmcblk device indexes. As the above commit significantly improves boot time for some platforms (magnitude of seconds), let's avoid reverting this change but instead restore the behaviour of how mmcblk device indexes becomes picked. By using the same index for the mmcblk device as for the corresponding mmc host device, the probe order of mmc host devices decides the index we get for the mmcblk device. For those platforms that suffers from a regression, one could expect that this updated behaviour should be sufficient to meet their expectations of "fixed" mmcblk device indexes. Another side effect from this change, is that the same index is used for the mmc host device, the mmcblk device and the mmc block queue. That should clarify their relationship. Reported-by: Peter Hurley <peter@hurleysoftware.com> Reported-by: Laszlo Fiat <laszlo.fiat@gmail.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Fixes: 520bd7a ("mmc: core: Optimize boot time by detecting cards simultaneously") Cc: <stable@vger.kernel.org> Change-Id: I8fe12a3858f3e2ace8fcc785befbae588108e2db Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: xiaoyao <xiaoyao@rock-chips.com> (cherry picked from commit 9aaf343)
1 parent e025a03 commit a0a1e63

File tree

1 file changed

+1
-17
lines changed

1 file changed

+1
-17
lines changed

drivers/mmc/card/block.c

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ static int max_devices;
8888

8989
/* TODO: Replace these with struct ida */
9090
static DECLARE_BITMAP(dev_use, MAX_DEVICES);
91-
static DECLARE_BITMAP(name_use, MAX_DEVICES);
9291

9392
/*
9493
* There is one mmc_blk_data per slot.
@@ -107,7 +106,6 @@ struct mmc_blk_data {
107106
unsigned int usage;
108107
unsigned int read_only;
109108
unsigned int part_type;
110-
unsigned int name_idx;
111109
unsigned int reset_done;
112110
#define MMC_BLK_READ BIT(0)
113111
#define MMC_BLK_WRITE BIT(1)
@@ -2473,19 +2471,6 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
24732471
goto out;
24742472
}
24752473

2476-
/*
2477-
* !subname implies we are creating main mmc_blk_data that will be
2478-
* associated with mmc_card with dev_set_drvdata. Due to device
2479-
* partitions, devidx will not coincide with a per-physical card
2480-
* index anymore so we keep track of a name index.
2481-
*/
2482-
if (!subname) {
2483-
md->name_idx = find_first_zero_bit(name_use, max_devices);
2484-
__set_bit(md->name_idx, name_use);
2485-
} else
2486-
md->name_idx = ((struct mmc_blk_data *)
2487-
dev_to_disk(parent)->private_data)->name_idx;
2488-
24892474
md->area_type = area_type;
24902475

24912476
/*
@@ -2535,7 +2520,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
25352520
*/
25362521

25372522
snprintf(md->disk->disk_name, sizeof(md->disk->disk_name),
2538-
"mmcblk%u%s", md->name_idx, subname ? subname : "");
2523+
"mmcblk%u%s", card->host->index, subname ? subname : "");
25392524

25402525
if (mmc_card_mmc(card))
25412526
blk_queue_logical_block_size(md->queue.queue,
@@ -2697,7 +2682,6 @@ static void mmc_blk_remove_parts(struct mmc_card *card,
26972682
struct list_head *pos, *q;
26982683
struct mmc_blk_data *part_md;
26992684

2700-
__clear_bit(md->name_idx, name_use);
27012685
list_for_each_safe(pos, q, &md->part) {
27022686
part_md = list_entry(pos, struct mmc_blk_data, part);
27032687
list_del(pos);

0 commit comments

Comments
 (0)