Patrick Pannuto [Mon, 2 Aug 2010 22:01:04 +0000 (15:01 -0700)]
timer: Added usleep_range timer
usleep_range is a finer precision implementations of msleep
and is designed to be a drop-in replacement for udelay where
a precise sleep / busy-wait is unnecessary.
Since an easy interface to hrtimers could lead to an undesired
proliferation of interrupts, we provide only a "range" API,
forcing the caller to think about an acceptable tolerance on
both ends and hopefully avoiding introducing another interrupt.
INTRO
As discussed here ( http://lkml.org/lkml/2007/8/3/250 ), msleep(1) is not
precise enough for many drivers (yes, sleep precision is an unfair notion,
but consistently sleeping for ~an order of magnitude greater than requested
is worth fixing). This patch adds a usleep API so that udelay does not have
to be used. Obviously not every udelay can be replaced (those in atomic
contexts or being used for simple bitbanging come to mind), but there are
many, many examples of
mydriver_write(...)
/* Wait for hardware to latch */
udelay(100)
in various drivers where a busy-wait loop is neither beneficial nor
necessary, but msleep simply does not provide enough precision and people
are using a busy-wait loop instead.
CONCERNS FROM THE RFC
Why is udelay a problem / necessary? Most callers of udelay are in device/
driver initialization code, which is serial...
As I see it, there is only benefit to sleeping over a delay; the
notion of "refactoring" areas that use udelay was presented, but
I see usleep as the refactoring. Consider i2c, if the bus is busy,
you need to wait a bit (say 100us) before trying again, your
current options are:
* udelay(100)
* msleep(1) <-- As noted above, actually as high as ~20ms
on some platforms, so not really an option
* Manually set up an hrtimer to try again in 100us (which
is what usleep does anyway...)
People choose the udelay route because it is EASY; we need to
provide a better easy route.
Device / driver / boot code is *currently* serial, but every few
months someone makes noise about parallelizing boot, and IMHO, a
little forward-thinking now is one less thing to worry about
if/when that ever happens
udelay's could be preempted
Sure, but if udelay plans on looping 1000 times, and it gets
preempted on loop 200, whenever it's scheduled again, it is
going to do the next 800 loops.
Is the interruptible case needed?
Probably not, but I see usleep as a very logical parallel to msleep,
so it made sense to include the "full" API. Processors are getting
faster (albeit not as quickly as they are becoming more parallel),
so if someone wanted to be interruptible for a few usecs, why not
let them? If this is a contentious point, I'm happy to remove it.
OTHER THOUGHTS
I believe there is also value in exposing the usleep_range option; it gives
the scheduler a lot more flexibility and allows the programmer to express
his intent much more clearly; it's something I would hope future driver
writers will take advantage of.
To get the results in the NUMBERS section below, I literally s/udelay/usleep
the kernel tree; I had to go in and undo the changes to the USB drivers, but
everything else booted successfully; I find that extremely telling in and
of itself -- many people are using a delay API where a sleep will suit them
just fine.
SOME ATTEMPTS AT NUMBERS
It turns out that calculating quantifiable benefit on this is challenging,
so instead I will simply present the current state of things, and I hope
this to be sufficient:
How many udelay calls are there in 2.6.35-rc5?
udealy(ARG) >= | COUNT
1000 | 319
500 | 414
100 | 1146
20 | 1832
I am working on Android, so that is my focus for this. The following table
is a modified usleep that simply printk's the amount of time requested to
sleep; these tests were run on a kernel with udelay >= 20 --> usleep
"boot" is power-on to lock screen
"power collapse" is when the power button is pushed and the device suspends
"resume" is when the power button is pushed and the lock screen is displayed
(no touchscreen events or anything, just turning on the display)
"use device" is from the unlock swipe to clicking around a bit; there is no
sd card in this phone, so fail loading music, video, camera
ACTION | TOTAL NUMBER OF USLEEP CALLS | NET TIME (us)
boot | 22 | 1250
power-collapse | 9 | 1200
resume | 5 | 500
use device | 59 | 7700
The most interesting category to me is the "use device" field; 7700us of
busy-wait time that could be put towards better responsiveness, or at the
least less power usage.
Signed-off-by: Patrick Pannuto <ppannuto@codeaurora.org>
Cc: apw@canonical.com
Cc: corbet@lwn.net
Cc: arjan@linux.intel.com
Cc: Randy Dunlap <rdunlap@xenotime.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
蔡枫 [Fri, 22 Jul 2011 07:01:20 +0000 (15:01 +0800)]
Merge branch 'develop' of 10.10.10.29:/home/rockchip/kernel into develop
clb [Fri, 22 Jul 2011 07:02:31 +0000 (15:02 +0800)]
modify cir send
蔡枫 [Fri, 22 Jul 2011 06:55:55 +0000 (14:55 +0800)]
Merge branch 'develop' of 10.10.10.29:/home/rockchip/kernel into develop
蔡枫 [Fri, 22 Jul 2011 06:55:44 +0000 (14:55 +0800)]
newton:remove flash usb mass storage
黄涛 [Fri, 22 Jul 2011 06:23:40 +0000 (14:23 +0800)]
rk29: sdk: defconfig: kernel log buffer size 512KB
黄涛 [Fri, 22 Jul 2011 06:23:30 +0000 (14:23 +0800)]
rk29: phonesdk: defconfig: kernel log buffer size 512KB
黄涛 [Fri, 22 Jul 2011 06:23:19 +0000 (14:23 +0800)]
rk29: phonepadsdk: defconfig: kernel log buffer size 512KB
黄涛 [Fri, 22 Jul 2011 06:22:59 +0000 (14:22 +0800)]
rk29: ddr3sdk: defconfig: kernel log buffer size 512KB
yangkai [Fri, 22 Jul 2011 01:45:07 +0000 (09:45 +0800)]
fix bug of GIC crash
yangkai [Thu, 21 Jul 2011 11:56:02 +0000 (19:56 +0800)]
move clk_set_rate out of irq disabled
张晴 [Thu, 21 Jul 2011 10:04:52 +0000 (03:04 -0700)]
a22 and 29phonesdk:sey VCC25 0V when in sleep,29phonesdk:set key gpio pullup/down disable
kfx [Thu, 21 Jul 2011 08:36:50 +0000 (16:36 +0800)]
update hdmi drivers
kfx [Thu, 21 Jul 2011 07:34:40 +0000 (15:34 +0800)]
rk29_fb.c: hdmi_get_scale-->hdmi_get_fbscale
phc [Thu, 21 Jul 2011 07:23:31 +0000 (15:23 +0800)]
RK29SmartPhone:sync. SDCard code with XBW, use the old config
kfx [Thu, 21 Jul 2011 01:44:14 +0000 (09:44 +0800)]
close hdmi debug info
kfx [Thu, 21 Jul 2011 01:29:37 +0000 (09:29 +0800)]
update hdmi driver
黄涛 [Thu, 21 Jul 2011 01:18:45 +0000 (09:18 +0800)]
arm: Makefile: better support make boot.img
邱建斌 [Wed, 20 Jul 2011 11:27:59 +0000 (19:27 +0800)]
wm8994: fix a bug for Bluetooth headsets
邱建斌 [Tue, 19 Jul 2011 02:05:32 +0000 (10:05 +0800)]
rk29_phone: fix heatset main mic Call Features
蔡枫 [Wed, 20 Jul 2011 09:57:11 +0000 (17:57 +0800)]
newton:update config and board file
陈恒明 [Wed, 20 Jul 2011 08:07:00 +0000 (16:07 +0800)]
rk29: vpu_service: fix bug when delay work and cancel work come at the same time
胡卫国 [Wed, 20 Jul 2011 07:06:20 +0000 (15:06 +0800)]
support 3 usb ethernet: dm9620, ax8872b, sr9700 (2)
胡卫国 [Wed, 20 Jul 2011 07:03:14 +0000 (15:03 +0800)]
support 3 usb ethernet: dm9620, ax8872b, sr9700
陈辉 [Wed, 20 Jul 2011 06:33:20 +0000 (14:33 +0800)]
change AXI frequency division from 3 to 2
杨云 [Wed, 20 Jul 2011 01:56:48 +0000 (09:56 +0800)]
Merge branch 'develop' of /home/rockchip/kernel into develop
杨云 [Wed, 20 Jul 2011 00:50:06 +0000 (08:50 +0800)]
Merge remote branch 'origin/develop_xbw_update-SDCard' into develop
xbw [Tue, 19 Jul 2011 14:12:51 +0000 (22:12 +0800)]
Integrate the XBW-version of SDMMC-drver into rk29_ddr3sdk
黄涛 [Tue, 19 Jul 2011 10:10:54 +0000 (18:10 +0800)]
Revert "rk29: vpu_service: fix bug when __cancel_delayed_work and delay work run at the same time"
This reverts commit
c41dd263406cad12ec15d39986a530be1d23ad11.
蔡枫 [Tue, 19 Jul 2011 10:04:28 +0000 (18:04 +0800)]
newton:add gt819 firmware
蔡枫 [Tue, 19 Jul 2011 10:00:33 +0000 (18:00 +0800)]
Merge branch 'develop' of 10.10.10.29:/home/rockchip/kernel into develop
蔡枫 [Tue, 19 Jul 2011 10:00:14 +0000 (18:00 +0800)]
newton:add gt819 firmware
陈恒明 [Tue, 19 Jul 2011 09:57:31 +0000 (17:57 +0800)]
rk29: vpu_service: fix bug when __cancel_delayed_work and delay work run at the same time
if in inturrept use async interface else use sync interface
黄涛 [Tue, 19 Jul 2011 08:50:47 +0000 (16:50 +0800)]
arm: Makefile: boot.img use zImage
黄涛 [Tue, 19 Jul 2011 08:24:20 +0000 (16:24 +0800)]
rk29: default LZO-compressed kernel for zImage
Albin Tonnerre [Fri, 8 Jan 2010 22:42:43 +0000 (14:42 -0800)]
arm: add support for LZO-compressed kernels
- changes to ach/arch/boot/Makefile to make it easier to add new
compression types
- new piggy.lzo.S necessary for lzo compression
- changes in arch/arm/boot/compressed/misc.c to allow the use of lzo or
gzip, depending on the config
- Kconfig support
Signed-off-by: Albin Tonnerre <albin.tonnerre@free-electrons.com>
Tested-by: Wu Zhangjin <wuzhangjin@gmail.com>
Acked-by: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Russell King <rmk@arm.linux.org.uk>
Acked-by: Russell King <rmk@arm.linux.org.uk>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Martin Michlmayr <tbm@cyrius.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Albin Tonnerre [Fri, 8 Jan 2010 22:42:42 +0000 (14:42 -0800)]
lib: add support for LZO-compressed kernels
This patch series adds generic support for creating and extracting
LZO-compressed kernel images, as well as support for using such images on
the x86 and ARM architectures, and support for creating and using
LZO-compressed initrd and initramfs images.
Russell King said:
: Testing on a Cortex A9 model:
: - lzo decompressor is 65% of the time gzip takes to decompress a kernel
: - lzo kernel is 9% larger than a gzip kernel
:
: which I'm happy to say confirms your figures when comparing the two.
:
: However, when comparing your new gzip code to the old gzip code:
: - new is 99% of the size of the old code
: - new takes 42% of the time to decompress than the old code
:
: What this means is that for a proper comparison, the results get even better:
: - lzo is 7.5% larger than the old gzip'd kernel image
: - lzo takes 28% of the time that the old gzip code took
:
: So the expense seems definitely worth the effort. The only reason I
: can think of ever using gzip would be if you needed the additional
: compression (eg, because you have limited flash to store the image.)
:
: I would argue that the default for ARM should therefore be LZO.
This patch:
The lzo compressor is worse than gzip at compression, but faster at
extraction. Here are some figures for an ARM board I'm working on:
Uncompressed size: 3.24Mo
gzip 1.61Mo 0.72s
lzo 1.75Mo 0.48s
So for a compression ratio that is still relatively close to gzip, it's
much faster to extract, at least in that case.
This part contains:
- Makefile routine to support lzo compression
- Fixes to the existing lzo compressor so that it can be used in
compressed kernels
- wrapper around the existing lzo1x_decompress, as it only extracts one
block at a time, while we need to extract a whole file here
- config dialog for kernel compression
[akpm@linux-foundation.org: coding-style fixes]
[akpm@linux-foundation.org: cleanup]
Signed-off-by: Albin Tonnerre <albin.tonnerre@free-electrons.com>
Tested-by: Wu Zhangjin <wuzhangjin@gmail.com>
Acked-by: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Russell King <rmk@arm.linux.org.uk>
Acked-by: Russell King <rmk@arm.linux.org.uk>
Cc: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
杜坤明 [Tue, 19 Jul 2011 08:02:03 +0000 (16:02 +0800)]
gpu : fix the gcdOPTIMIZE_HEAP_SAMESIZE for heap alloc.
黄涛 [Tue, 19 Jul 2011 07:24:29 +0000 (15:24 +0800)]
rk29: i2c: cpu freq notifier only for i2c0
chenli [Tue, 19 Jul 2011 01:44:37 +0000 (09:44 +0800)]
IPP fix bugs:
1.Disable pre_scaling or deinterlacing when there is no request to do
2.Store clip mode always set to 1 now
杨云 [Tue, 19 Jul 2011 01:02:40 +0000 (09:02 +0800)]
Merge remote branch 'origin/develop_xbw_update-SDCard' into develop
黄涛 [Mon, 18 Jul 2011 11:43:08 +0000 (19:43 +0800)]
rk29: clock: bump version
黄涛 [Mon, 18 Jul 2011 11:29:29 +0000 (19:29 +0800)]
lcd: nt35510: aclk_lcdc max 300MHz
黄涛 [Mon, 18 Jul 2011 11:28:48 +0000 (19:28 +0800)]
lcd: ls035y8dx02a: aclk_lcdc max 300MHz
黄涛 [Mon, 18 Jul 2011 11:21:12 +0000 (19:21 +0800)]
rk29: sdk: more fix for vmac and usb host 1.1 both enabled
黄涛 [Mon, 18 Jul 2011 11:18:36 +0000 (19:18 +0800)]
rk29: ddr3sdk: more fix for vmac and usb host 1.1 both enabled
黄涛 [Mon, 18 Jul 2011 11:16:33 +0000 (19:16 +0800)]
rk29: clock: fix aclk_lcdc from ddr pll
CMY [Mon, 18 Jul 2011 10:02:10 +0000 (18:02 +0800)]
Merge branch 'develop' of 10.10.10.29:/home/rockchip/kernel into develop
CMY [Mon, 18 Jul 2011 09:59:11 +0000 (17:59 +0800)]
新的modem驱动
CMY [Mon, 18 Jul 2011 09:58:48 +0000 (17:58 +0800)]
支持更多的3g dongle
蔡枫 [Mon, 18 Jul 2011 09:19:57 +0000 (17:19 +0800)]
newton:fix touch screen compile error
lyx [Mon, 18 Jul 2011 06:45:50 +0000 (23:45 -0700)]
newton: modify irda serial device suspend&resume function
xbw [Mon, 18 Jul 2011 05:58:43 +0000 (22:58 -0700)]
modify rk29_sdk_defconfig for SDMMC
xbw [Mon, 18 Jul 2011 03:45:18 +0000 (20:45 -0700)]
Integrae the XBW-version of SDMMC-drver into RK29SDK, and the xbw-version is set to default(2)
xbw [Mon, 18 Jul 2011 03:41:08 +0000 (20:41 -0700)]
Integrae the XBW-version of SDMMC-drver into RK29SDK, and the xbw-version is set to default
邱建斌 [Mon, 18 Jul 2011 02:40:43 +0000 (10:40 +0800)]
rk29_phone: change headset volume
黄涛 [Mon, 18 Jul 2011 01:59:10 +0000 (09:59 +0800)]
Revert "Merge branch 'hdmi' into develop"
This reverts commit
57a857b5743d0166ac639b560ae3dc483c6e72e2, reversing
changes made to
5a152bcf0214a60cb5d72cad71a9b6f9c8b4ec4f.
黄涛 [Mon, 18 Jul 2011 01:20:14 +0000 (09:20 +0800)]
Revert "update rk29_sdk_defconfig: change hdmi config"
This reverts commit
57f8574caa1c3e76b7c395ae260c18e0baf07f01.
lyx [Sun, 17 Jul 2011 09:17:50 +0000 (02:17 -0700)]
newton: add irda serial driver
root [Sun, 17 Jul 2011 13:25:01 +0000 (21:25 +0800)]
update rk29_sdk_defconfig: change hdmi config
root [Sat, 16 Jul 2011 06:07:57 +0000 (14:07 +0800)]
A22:deal with minimum and maximal value of touchscreen specially
root [Sun, 17 Jul 2011 07:39:29 +0000 (15:39 +0800)]
Merge branch 'hdmi' into develop
yzq [Sat, 16 Jul 2011 15:40:20 +0000 (08:40 -0700)]
fix hdmi bug : wake up , the hdmi screen probabilistic flash of white
蔡枫 [Sat, 16 Jul 2011 01:36:03 +0000 (09:36 +0800)]
Merge branch 'newton' into develop
蔡枫 [Sat, 16 Jul 2011 01:35:10 +0000 (09:35 +0800)]
newton:update config and board file
杨云 [Sat, 16 Jul 2011 01:08:53 +0000 (09:08 +0800)]
Revert "RK29 SDMMC Ver1.14 2011-06-26 release from XBW"
This reverts commit
543f1a582cda4d8b4945bbda8a9a876b76712ba1.
蔡枫 [Fri, 15 Jul 2011 14:13:33 +0000 (22:13 +0800)]
Merge branch 'develop' of 10.10.10.29:/home/rockchip/kernel into develop
蔡枫 [Fri, 15 Jul 2011 14:13:00 +0000 (22:13 +0800)]
newton:add gt819 config and firmware update
xsf@rock-chips.com [Fri, 15 Jul 2011 07:51:45 +0000 (15:51 +0800)]
phonesdk and A22: increasing the speed of resume
杨云 [Fri, 15 Jul 2011 06:52:57 +0000 (14:52 +0800)]
RK29 SDMMC Ver1.14 2011-06-26 release from XBW
黄涛 [Fri, 15 Jul 2011 03:03:32 +0000 (11:03 +0800)]
rk29: fix for vmac and usb host 1.1 both enabled
陈恒明 [Thu, 14 Jul 2011 12:22:04 +0000 (20:22 +0800)]
rk29: vpu_service: fix bug when encode tash and decode task work together
黄涛 [Thu, 14 Jul 2011 08:27:24 +0000 (16:27 +0800)]
rk29: clock: make aclk_lcdc as high as possible
zhaoyifeng [Thu, 14 Jul 2011 03:30:17 +0000 (11:30 +0800)]
support make_ext4fs
hxy/ubuntu [Thu, 14 Jul 2011 02:49:16 +0000 (10:49 +0800)]
fix dma channel bug found in uart dma
phc [Thu, 14 Jul 2011 02:17:05 +0000 (10:17 +0800)]
RK29SmartPhone:Sharp LCD 02A stanby change, reset lcd when resume
黄涛 [Thu, 14 Jul 2011 02:14:17 +0000 (10:14 +0800)]
rk29: ddr3sdk: defconfig: ddr freq 456MHz
蔡枫 [Wed, 13 Jul 2011 15:31:38 +0000 (23:31 +0800)]
newton:update config file
蔡枫 [Wed, 13 Jul 2011 14:54:29 +0000 (22:54 +0800)]
newton:update config and board
蔡枫 [Wed, 13 Jul 2011 14:14:51 +0000 (22:14 +0800)]
Merge branch 'develop' of 10.10.10.29:/home/rockchip/kernel into develop
蔡枫 [Wed, 13 Jul 2011 14:13:05 +0000 (22:13 +0800)]
newton:optimize ft5406,modify supend and resume for ft5406 and gt819
root [Wed, 13 Jul 2011 13:05:08 +0000 (21:05 +0800)]
rk29_phone:add config for wm831x charge IRQ
杜坤明 [Wed, 13 Jul 2011 09:33:04 +0000 (17:33 +0800)]
gpu: modify gcsHAL_INTERFACE to reduce memcopy size, Android version must be synchronized.
陈恒明 [Wed, 13 Jul 2011 06:39:16 +0000 (14:39 +0800)]
rk29: vpu: move vpu_service from user to kernel
黄涛 [Wed, 13 Jul 2011 06:58:40 +0000 (14:58 +0800)]
rk29: sdk: defconfig remove EXT3_FS_XATTR and YAFFS, add EXT4 and FUSE
黄涛 [Wed, 13 Jul 2011 06:58:26 +0000 (14:58 +0800)]
rk29: phonesdk: defconfig remove EXT3_FS_XATTR and YAFFS, add EXT4 and FUSE
黄涛 [Wed, 13 Jul 2011 06:58:13 +0000 (14:58 +0800)]
rk29: phonepadsdk: defconfig remove EXT3_FS_XATTR and YAFFS, add EXT4 and FUSE
黄涛 [Wed, 13 Jul 2011 06:57:53 +0000 (14:57 +0800)]
rk29: ddr3sdk: defconfig remove EXT3_FS_XATTR and YAFFS, add EXT4 and FUSE
wdc [Wed, 13 Jul 2011 06:31:37 +0000 (14:31 +0800)]
bluetooth: Add the Judge of the bluetooth irq to send wake up key
黄涛 [Wed, 13 Jul 2011 06:23:05 +0000 (14:23 +0800)]
rk29: enable HIGHMEM and ZONE_DMA
黄涛 [Wed, 13 Jul 2011 06:13:21 +0000 (14:13 +0800)]
Revert "rk29: Kconfig: support 1G memory"
This reverts commit
d11238ad51fd172858986b3c264176efb23295c5.
wdc [Wed, 13 Jul 2011 03:00:42 +0000 (11:00 +0800)]
bluetooth: iomux uart2_rts to gpio
wdc [Wed, 13 Jul 2011 01:34:57 +0000 (09:34 +0800)]
Revert "bluetooth: iomux uart2_rts to gpio"
This reverts commit
8b1e5c75a5482a262d63f78bc338fee2a96da7f5.
wdc [Wed, 13 Jul 2011 01:27:06 +0000 (09:27 +0800)]
bluetooth: iomux uart2_rts to gpio
yangkai [Wed, 13 Jul 2011 02:32:28 +0000 (10:32 +0800)]
hid device support remote wakeup
黄涛 [Tue, 12 Jul 2011 12:31:58 +0000 (20:31 +0800)]
rk29: clock: increase aclk_cpu for 1G+
yangkai [Tue, 12 Jul 2011 06:29:42 +0000 (14:29 +0800)]
modify a long time delay in irq disable when host enum
黄涛 [Mon, 11 Jul 2011 12:26:15 +0000 (20:26 +0800)]
rk29: L2 Data RAM latency set to 4 cycles, Tag RAM latency set to 3 cycles, suggested by zcs
黄涛 [Mon, 11 Jul 2011 12:18:31 +0000 (20:18 +0800)]
rk29: clock: make delay more accurate
黄涛 [Mon, 11 Jul 2011 12:15:57 +0000 (20:15 +0800)]
rk29: cru.h: make LOOP more accurate