]>
Commit | Line | Data |
---|---|---|
de78ab3b SL |
1 | From 3e09eac23f9a4bad835758bb23ece58acdb5836a Mon Sep 17 00:00:00 2001 |
2 | From: Colin Cross <ccross@android.com> | |
3 | Date: Thu, 22 Oct 2015 10:00:41 -0700 | |
4 | Subject: mmc: block: Allow more than 8 partitions per card | |
5 | ||
6 | [ Upstream commit 382c55f88ffeb218c446bf0c46d0fc25d2795fe2 ] | |
7 | ||
8 | It is quite common for Android devices to utilize more | |
9 | then 8 partitions on internal eMMC storage. | |
10 | ||
11 | The vanilla kernel can support this via | |
12 | CONFIG_MMC_BLOCK_MINORS, however that solution caps the | |
13 | system to 256 minors total, which limits the number of | |
14 | mmc cards the system can support. | |
15 | ||
16 | This patch, which has been carried for quite awhile in | |
17 | the AOSP common tree, provides an alternative solution | |
18 | that doesn't seem to limit the total card count. So I | |
19 | wanted to submit it for consideration upstream. | |
20 | ||
21 | This patch sets the GENHD_FL_EXT_DEVT flag, which will | |
22 | allocate minor number in major 259 for partitions past | |
23 | disk->minors. | |
24 | ||
25 | It also removes the use of disk_devt to determine devidx | |
26 | from md->disk. md->disk->first_minor is always initialized | |
27 | from devidx and can always be used to recover it. | |
28 | ||
29 | Cc: Ulf Hansson <ulf.hansson@linaro.org> | |
30 | Cc: Adrian Hunter <adrian.hunter@intel.com> | |
31 | Cc: Ben Hutchings <ben@decadent.org.uk> | |
32 | Cc: Chuanxiao Dong <chuanxiao.dong@intel.com> | |
33 | Cc: Shawn Lin <shawn.lin@rock-chips.com> | |
34 | Cc: Austin S Hemmelgarn <ahferroin7@gmail.com> | |
35 | Cc: Arnd Bergmann <arnd@arndb.de> | |
36 | Cc: Android Kernel Team <kernel-team@android.com> | |
37 | Cc: linux-mmc@vger.kernel.org | |
38 | Signed-off-by: Colin Cross <ccross@android.com> | |
39 | [jstultz: Added context to commit message] | |
40 | Signed-off-by: John Stultz <john.stultz@linaro.org> | |
41 | Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> | |
42 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
43 | --- | |
44 | drivers/mmc/card/block.c | 7 ++----- | |
45 | 1 file changed, 2 insertions(+), 5 deletions(-) | |
46 | ||
47 | diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c | |
48 | index dec6b0ec4def..8688ac7a45da 100644 | |
49 | --- a/drivers/mmc/card/block.c | |
50 | +++ b/drivers/mmc/card/block.c | |
51 | @@ -166,11 +166,7 @@ static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk) | |
52 | ||
53 | static inline int mmc_get_devidx(struct gendisk *disk) | |
54 | { | |
55 | - int devmaj = MAJOR(disk_devt(disk)); | |
56 | - int devidx = MINOR(disk_devt(disk)) / perdev_minors; | |
57 | - | |
58 | - if (!devmaj) | |
59 | - devidx = disk->first_minor / perdev_minors; | |
60 | + int devidx = disk->first_minor / perdev_minors; | |
61 | return devidx; | |
62 | } | |
63 | ||
64 | @@ -2152,6 +2148,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card, | |
65 | md->disk->queue = md->queue.queue; | |
66 | md->disk->driverfs_dev = parent; | |
67 | set_disk_ro(md->disk, md->read_only || default_ro); | |
68 | + md->disk->flags = GENHD_FL_EXT_DEVT; | |
69 | if (area_type & (MMC_BLK_DATA_AREA_RPMB | MMC_BLK_DATA_AREA_BOOT)) | |
70 | md->disk->flags |= GENHD_FL_NO_PART_SCAN; | |
71 | ||
72 | -- | |
73 | 2.19.1 | |
74 |