linux-uconsole/drivers
Ulf Hansson ee5943daee UPSTREAM: mmc: core: Optimize boot time by detecting cards simultaneously
The mmc workqueue is an ordered workqueue, allowing only one work to
execute per given time. As this workqueue is used for card detection, the
conseqeunce is that cards will be detected one by one waiting for each
other.

Moreover, most of the time spent during card initialization is waiting for
the card's internal firmware to be ready. From a CPU perspective this
typically means waiting for a completion variable to be kicked via an
IRQ-handler or waiting for a sleep timer to finish.

This behaviour of detecting/initializing cards is sub-optimal, especially
for SOCs having several controllers/cards.

Let's convert to use the system_freezable_wq for the mmc detect works.
This enables several works to be executed simultaneously and thus also
cards to be detected like so.

Tests on UX500, which holds two eMMC cards and an SD-card (actually also
an SDIO card, currently not detected), shows a significant improved
behaviour due to this change.

Before this change, both the eMMC cards waited for the SD card to be
initialized as its detect work entered the workqueue first. In some cases,
depending on the characteristic of the SD-card, they got delayed 1-1.5 s.

Additionally for the second eMMC, it needed to wait for the first eMMC to
be initialized which added another 120-190 ms.

Converting to the system_freezable_wq, removed these delays and made both
the eMMC cards available far earlier in the boot sequence.

Selecting the system_freezable_wq, in favour of for example the system_wq,
is because we need card detection mechanism to be disabled once userspace
are frozen during system PM. Currently the mmc core deal with this via PM
notifiers, but following patches may utilize the behaviour of the
system_freezable_wq, to simplify the use of the PM notifiers.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Alan Cooper <alcooperx@gmail.com>
Tested-by: Shawn Lin <shawn.lin@rock-chips.com>
(cherry picked from commit 520bd7a8b4)

Change-Id: I52bc65649b285e825e931a370a9754d1475494dc
2016-03-03 20:02:42 +08:00
..
accessibility
acpi ACPI / property: avoid leaking format string into kobject name 2016-01-08 01:01:41 +01:00
adc
amba rk: revert to v3.10 2015-11-11 15:57:28 +08:00
android android: drivers: workaround debugfs race in binder 2016-02-16 13:54:24 -08:00
ata ahci: Intel DNV device IDs SATA 2016-02-17 12:31:03 -08:00
atm rk: revert to v3.10 2015-11-11 15:57:28 +08:00
auxdisplay rk: revert to v3.10 2015-11-11 15:57:28 +08:00
base This is the 4.4.2 stable release 2016-02-18 16:03:29 +08:00
bcma
block zram: don't call idr_remove() from zram_remove() 2016-02-17 12:31:06 -08:00
bluetooth Linux 4.4-rc1 2015-11-18 14:36:06 +08:00
bus bus: sunxi-rsb: Fix peripheral IC mapping runtime address 2015-12-22 11:42:30 -08:00
cdrom rk: revert to v3.10 2015-11-11 15:57:28 +08:00
char arm: dcc_tty: fix armv6 dcc tty build failure 2016-02-16 13:54:00 -08:00
cir
clk UPSTREAM: clk: skip unnecessary set_phase if nothing to do 2016-03-03 15:22:00 +08:00
clocksource clocksource: Mmio: remove artificial 32bit limitation 2015-12-10 19:37:18 +01:00
cmmb
connector connector: bump skb->users before callback invocation 2016-01-04 21:46:45 -05:00
cpufreq Merge branch 'android-4.4' 2016-02-18 15:18:27 +08:00
cpuidle cpuidle: governor: menu: don't use loadavg 2016-02-16 13:52:31 -08:00
cpuquiet
crypto crypto: marvell/cesa - fix test in mv_cesa_dev_dma_init() 2016-02-17 12:31:05 -08:00
dca
devfreq Merge branch 'torvalds/master' 2015-11-11 19:52:00 +08:00
dio
dma dmaengine: xgene-dma: Fix double IRQ issue by setting IRQ_DISABLE_UNLAZY flag 2016-01-07 11:09:36 +05:30
dma-buf CHROMIUM: android: fix warning when releasing active sync point 2016-02-16 13:53:25 -08:00
edac rk: revert to v3.10 2015-11-11 15:57:28 +08:00
eisa rk: revert to v3.10 2015-11-11 15:57:28 +08:00
extcon rk: revert to v3.10 2015-11-11 15:57:28 +08:00
firewire IEEE 1394 subsystem patch: 2015-11-11 10:21:34 -08:00
firmware firmware: dmi_scan: Fix UUID endianness for SMBIOS >= 2.6 2016-01-08 09:00:54 +01:00
fmc
fpga fpga manager: Fix firmware resource leak on error 2015-11-24 15:25:46 -08:00
gpio Linux 4.4-rc6 2015-12-21 14:26:23 +08:00
gpu GPU: Rogue_M: update to 1.31_2 version & support gpu pd. 2016-01-18 19:04:28 +08:00
headset_observe
hid This is the 4.4.2 stable release 2016-02-18 16:03:29 +08:00
hsi hsi: controllers:remove redundant code 2015-10-30 16:10:40 +01:00
hv rk: revert to v3.10 2015-11-11 15:57:28 +08:00
hwmon Linux 4.4-rc6 2015-12-21 14:26:23 +08:00
hwspinlock drivers/hwspinlock: fix race between radix tree insertion and lookup 2016-02-25 12:01:23 -08:00
hwtracing Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2015-11-13 20:04:17 -08:00
i2c UPSTREAM: i2c: make i2c_parse_fw_timings() always visible 2016-02-03 11:12:55 +08:00
ide mm, page_alloc: rename __GFP_WAIT to __GFP_RECLAIM 2015-11-06 17:50:42 -08:00
idle rk: revert to v3.10 2015-11-11 15:57:28 +08:00
iio This is the 4.4.3 stable release 2016-03-03 19:46:53 +08:00
infiniband net/mlx5_core: Fix trimming down IRQ number 2016-01-31 11:29:01 -08:00
input This is the 4.4.3 stable release 2016-03-03 19:46:53 +08:00
iommu This is the 4.4.3 stable release 2016-03-03 19:46:53 +08:00
ipack
irqchip irqchip/versatile-fpga: Fix PCI IRQ mapping on Versatile PB 2015-12-01 22:50:16 +01:00
isdn ser_gigaset: remove unnecessary kfree() calls from release method 2015-12-15 13:24:21 -05:00
leds Merge branch 'torvalds/master' 2015-11-11 19:52:00 +08:00
lguest rk: revert to v3.10 2015-11-11 15:57:28 +08:00
lightnvm lightnvm: wrong offset in bad blk lun calculation 2015-12-29 08:28:32 -07:00
macintosh rk: revert to v3.10 2015-11-11 15:57:28 +08:00
mailbox Merge branch 'torvalds/master' 2015-11-11 19:52:00 +08:00
mcb mcb: Destroy IDA on module unload 2015-10-29 09:02:16 +09:00
md md/raid: only permit hot-add of compatible integrity profiles 2016-02-17 12:30:57 -08:00
media This is the 4.4.2 stable release 2016-02-18 16:03:29 +08:00
memory fsl-ifc: add missing include on ARM64 2015-12-16 00:16:58 +01:00
memstick rk: revert to v3.10 2015-11-11 15:57:28 +08:00
message SCSI queue for 4.4. 2015-11-12 07:06:18 -05:00
mfd rockchip: power & pmic: fix compile warning 2016-02-29 20:49:13 +08:00
misc Merge branch 'android-4.4' 2016-02-18 15:18:27 +08:00
mmc UPSTREAM: mmc: core: Optimize boot time by detecting cards simultaneously 2016-03-03 20:02:42 +08:00
mtd This is the 4.4.2 stable release 2016-02-18 16:03:29 +08:00
mtk_wcn_bt
mtk_wcn_combo
net Merge branch 'android-4.4' of https://android.googlesource.com/kernel/common 2016-03-03 19:42:14 +08:00
nfc Linux 4.4-rc1 2015-11-18 14:36:06 +08:00
ntb rk: revert to v3.10 2015-11-11 15:57:28 +08:00
nubus
nvdimm libnvdimm: fix namespace object confusion in is_uuid_busy() 2016-02-25 12:01:21 -08:00
nvme NVMe: IO ending fixes on surprise removal 2015-12-22 10:12:04 -07:00
nvmem
of of: Fix build warnings 2016-02-16 13:54:09 -08:00
oprofile
parisc parisc iommu: fix panic due to trying to allocate too large region 2015-12-12 16:07:25 +01:00
parport rk: revert to v3.10 2015-11-11 15:57:28 +08:00
pci PCI: Fix minimum allocation address overwrite 2016-02-17 12:30:56 -08:00
pcmcia rk: revert to v3.10 2015-11-11 15:57:28 +08:00
perf arm64 updates for 4.4: 2015-11-04 14:47:13 -08:00
phy This is the 4.4.3 stable release 2016-03-03 19:46:53 +08:00
pinctrl pinctrl: rk3366: add support for rk3366 2016-03-02 09:23:45 +08:00
platform This is the 4.4.3 stable release 2016-03-03 19:46:53 +08:00
pnp rk: revert to v3.10 2015-11-11 15:57:28 +08:00
power rockchip: power & pmic: fix compile warning 2016-02-29 20:49:13 +08:00
powercap powercap / RAPL: fix BIOS lock check 2015-12-12 02:31:11 +01:00
pps
ps3
ptp
pwm pwm: Changes for v4.4-rc1 2015-11-11 09:16:10 -08:00
rapidio rk: revert to v3.10 2015-11-11 15:57:28 +08:00
ras
regulator UPSTREAM: regulator: core: avoid unused variable warning 2016-03-02 13:51:40 +08:00
remoteproc remoteproc: fix memory leak of remoteproc ida cache layers 2015-11-26 17:44:28 +02:00
reset Merge branch 'torvalds/master' 2015-11-11 19:52:00 +08:00
rk_nand nand: add ftl driver and nand drivers for rk3366 2016-01-19 11:44:50 +08:00
rpmsg
rtc rockchip: power & pmic: fix compile warning 2016-02-29 20:49:13 +08:00
s390 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2015-12-22 15:43:18 -08:00
sbus rk: revert to v3.10 2015-11-11 15:57:28 +08:00
scsi scsi: fix soft lockup in scsi_remove_target() on module removal 2016-02-25 12:01:17 -08:00
sfi
sh drivers: sh: Get rid of CONFIG_ARCH_SHMOBILE_MULTI 2015-11-17 02:12:46 +09:00
smc
sn
soc soc: rockchip: power-domain: Modify power domain driver for rk3366 2016-02-25 09:50:38 +08:00
spi Linux 4.4-rc6 2015-12-21 14:26:23 +08:00
spmi char/misc drivers for 4.4-rc1 2015-11-04 22:15:15 -08:00
ssb ssb: add Kconfig entry for compiling SoC related code 2015-10-28 21:05:21 +02:00
staging This is the 4.4.3 stable release 2016-03-03 19:46:53 +08:00
switch drivers: switch: remove S_IWUSR from dev_attr 2016-02-16 13:51:00 -08:00
target iscsi-target: Fix potential dead-lock during node acl delete 2016-02-25 12:01:16 -08:00
tc
testcode
thermal UPSTREAM: thermal: rockchip: fix the tsadc sequence output on rk3228/rk3399 2016-03-01 14:22:29 +08:00
thunderbolt
tty This is the 4.4.3 stable release 2016-03-03 19:46:53 +08:00
uio rk: revert to v3.10 2015-11-11 15:57:28 +08:00
usb This is the 4.4.3 stable release 2016-03-03 19:46:53 +08:00
uwb driver core update for 4.4-rc1 2015-11-04 21:50:37 -08:00
vfio Revert: "vfio: Include No-IOMMU mode" 2015-12-04 08:38:42 -07:00
vhost vhost: replace % with & on data path 2015-12-07 17:28:10 +02:00
video Merge branch 'android-4.4' of https://android.googlesource.com/kernel/common 2016-03-03 19:42:14 +08:00
virt
virtio virtio_ring: shadow available ring flags & index 2015-12-07 17:28:11 +02:00
vlynq
vme rk: revert to v3.10 2015-11-11 15:57:28 +08:00
w1 w1: ds2482: Manage SLPZ pin sleep state 2016-02-16 13:54:18 -08:00
watchdog Linux 4.4-rc3 2015-12-01 09:14:17 +08:00
xen xen: bug fixes for 4.4-rc5 2015-12-18 12:24:52 -08:00
zorro
Kconfig Merge branch 'android-4.4' 2016-02-18 15:18:27 +08:00
Makefile Merge branch 'android-4.4' 2016-02-18 15:18:27 +08:00