aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2015-10-22 13:00:41 -0400
committerUlf Hansson <ulf.hansson@linaro.org>2015-12-28 06:51:38 -0500
commit382c55f88ffeb218c446bf0c46d0fc25d2795fe2 (patch)
tree4fd2ac9e1260d2c06ddaf8b4b9b91728991e8f50 /drivers/mmc
parent520bd7a8b4152aacfbd34eb7f7a447354b631039 (diff)
mmc: block: Allow more than 8 partitions per card
It is quite common for Android devices to utilize more then 8 partitions on internal eMMC storage. The vanilla kernel can support this via CONFIG_MMC_BLOCK_MINORS, however that solution caps the system to 256 minors total, which limits the number of mmc cards the system can support. This patch, which has been carried for quite awhile in the AOSP common tree, provides an alternative solution that doesn't seem to limit the total card count. So I wanted to submit it for consideration upstream. This patch sets the GENHD_FL_EXT_DEVT flag, which will allocate minor number in major 259 for partitions past disk->minors. It also removes the use of disk_devt to determine devidx from md->disk. md->disk->first_minor is always initialized from devidx and can always be used to recover it. Cc: Ulf Hansson <ulf.hansson@linaro.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Ben Hutchings <ben@decadent.org.uk> Cc: Chuanxiao Dong <chuanxiao.dong@intel.com> Cc: Shawn Lin <shawn.lin@rock-chips.com> Cc: Austin S Hemmelgarn <ahferroin7@gmail.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Android Kernel Team <kernel-team@android.com> Cc: linux-mmc@vger.kernel.org Signed-off-by: Colin Cross <ccross@android.com> [jstultz: Added context to commit message] Signed-off-by: John Stultz <john.stultz@linaro.org> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/card/block.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index ce38960cca12..5914263090fc 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -171,11 +171,7 @@ static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk)
171 171
172static inline int mmc_get_devidx(struct gendisk *disk) 172static inline int mmc_get_devidx(struct gendisk *disk)
173{ 173{
174 int devmaj = MAJOR(disk_devt(disk)); 174 int devidx = disk->first_minor / perdev_minors;
175 int devidx = MINOR(disk_devt(disk)) / perdev_minors;
176
177 if (!devmaj)
178 devidx = disk->first_minor / perdev_minors;
179 return devidx; 175 return devidx;
180} 176}
181 177
@@ -2244,6 +2240,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
2244 md->disk->queue = md->queue.queue; 2240 md->disk->queue = md->queue.queue;
2245 md->disk->driverfs_dev = parent; 2241 md->disk->driverfs_dev = parent;
2246 set_disk_ro(md->disk, md->read_only || default_ro); 2242 set_disk_ro(md->disk, md->read_only || default_ro);
2243 md->disk->flags = GENHD_FL_EXT_DEVT;
2247 if (area_type & (MMC_BLK_DATA_AREA_RPMB | MMC_BLK_DATA_AREA_BOOT)) 2244 if (area_type & (MMC_BLK_DATA_AREA_RPMB | MMC_BLK_DATA_AREA_BOOT))
2248 md->disk->flags |= GENHD_FL_NO_PART_SCAN; 2245 md->disk->flags |= GENHD_FL_NO_PART_SCAN;
2249 2246