diff --git a/packages/linux/meta b/packages/linux/meta index 90a863f44a..284ef7f368 100644 --- a/packages/linux/meta +++ b/packages/linux/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="linux" -PKG_VERSION="2.6.39-rc5" +PKG_VERSION="2.6.39-rc6" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/linux/patches/linux-2.6.39-rc5-000-linux-2.6.39-rc5-git4.patch b/packages/linux/patches/linux-2.6.39-rc5-000-linux-2.6.39-rc5-git4.patch deleted file mode 100644 index 2d659fbfa9..0000000000 --- a/packages/linux/patches/linux-2.6.39-rc5-000-linux-2.6.39-rc5-git4.patch +++ /dev/null @@ -1,4496 +0,0 @@ -diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl -index 5d259c6..fea63b4 100644 ---- a/Documentation/DocBook/media-entities.tmpl -+++ b/Documentation/DocBook/media-entities.tmpl -@@ -294,6 +294,7 @@ - - - -+ - - - -diff --git a/Documentation/DocBook/v4l/media-ioc-setup-link.xml b/Documentation/DocBook/v4l/media-ioc-setup-link.xml -index 2331e76..cec97af 100644 ---- a/Documentation/DocBook/v4l/media-ioc-setup-link.xml -+++ b/Documentation/DocBook/v4l/media-ioc-setup-link.xml -@@ -34,7 +34,7 @@ - - request - -- MEDIA_IOC_ENUM_LINKS -+ MEDIA_IOC_SETUP_LINK - - - -diff --git a/Documentation/DocBook/v4l/pixfmt-y12.xml b/Documentation/DocBook/v4l/pixfmt-y12.xml -new file mode 100644 -index 0000000..ff417b8 ---- /dev/null -+++ b/Documentation/DocBook/v4l/pixfmt-y12.xml -@@ -0,0 +1,79 @@ -+ -+ -+ V4L2_PIX_FMT_Y12 ('Y12 ') -+ &manvol; -+ -+ -+ V4L2_PIX_FMT_Y12 -+ Grey-scale image -+ -+ -+ Description -+ -+ This is a grey-scale image with a depth of 12 bits per pixel. Pixels -+are stored in 16-bit words with unused high bits padded with 0. The least -+significant byte is stored at lower memory addresses (little-endian). -+ -+ -+ <constant>V4L2_PIX_FMT_Y12</constant> 4 × 4 -+pixel image -+ -+ -+ Byte Order. -+ Each cell is one byte. -+ -+ -+ -+ -+ -+ start + 0: -+ Y'00low -+ Y'00high -+ Y'01low -+ Y'01high -+ Y'02low -+ Y'02high -+ Y'03low -+ Y'03high -+ -+ -+ start + 8: -+ Y'10low -+ Y'10high -+ Y'11low -+ Y'11high -+ Y'12low -+ Y'12high -+ Y'13low -+ Y'13high -+ -+ -+ start + 16: -+ Y'20low -+ Y'20high -+ Y'21low -+ Y'21high -+ Y'22low -+ Y'22high -+ Y'23low -+ Y'23high -+ -+ -+ start + 24: -+ Y'30low -+ Y'30high -+ Y'31low -+ Y'31high -+ Y'32low -+ Y'32high -+ Y'33low -+ Y'33high -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/Documentation/DocBook/v4l/pixfmt.xml b/Documentation/DocBook/v4l/pixfmt.xml -index c6fdcbb..40af4be 100644 ---- a/Documentation/DocBook/v4l/pixfmt.xml -+++ b/Documentation/DocBook/v4l/pixfmt.xml -@@ -696,6 +696,7 @@ information. - &sub-packed-yuv; - &sub-grey; - &sub-y10; -+ &sub-y12; - &sub-y16; - &sub-yuyv; - &sub-uyvy; -diff --git a/Documentation/DocBook/v4l/subdev-formats.xml b/Documentation/DocBook/v4l/subdev-formats.xml -index 7041127..d7ccd25 100644 ---- a/Documentation/DocBook/v4l/subdev-formats.xml -+++ b/Documentation/DocBook/v4l/subdev-formats.xml -@@ -456,6 +456,23 @@ - b1 - b0 - -+ -+ V4L2_MBUS_FMT_SGBRG8_1X8 -+ 0x3013 -+ -+ - -+ - -+ - -+ - -+ g7 -+ g6 -+ g5 -+ g4 -+ g3 -+ g2 -+ g1 -+ g0 -+ - - V4L2_MBUS_FMT_SGRBG8_1X8 - 0x3002 -@@ -473,6 +490,23 @@ - g1 - g0 - -+ -+ V4L2_MBUS_FMT_SRGGB8_1X8 -+ 0x3014 -+ -+ - -+ - -+ - -+ - -+ r7 -+ r6 -+ r5 -+ r4 -+ r3 -+ r2 -+ r1 -+ r0 -+ - - V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8 - 0x300b -@@ -2159,6 +2193,31 @@ - u1 - u0 - -+ -+ V4L2_MBUS_FMT_Y12_1X12 -+ 0x2013 -+ -+ - -+ - -+ - -+ - -+ - -+ - -+ - -+ - -+ y11 -+ y10 -+ y9 -+ y8 -+ y7 -+ y6 -+ y5 -+ y4 -+ y3 -+ y2 -+ y1 -+ y0 -+ - - V4L2_MBUS_FMT_UYVY8_1X16 - 0x200f -diff --git a/Documentation/cgroups/memory.txt b/Documentation/cgroups/memory.txt -index b6ed61c..7c16347 100644 ---- a/Documentation/cgroups/memory.txt -+++ b/Documentation/cgroups/memory.txt -@@ -52,8 +52,10 @@ Brief summary of control files. - tasks # attach a task(thread) and show list of threads - cgroup.procs # show list of processes - cgroup.event_control # an interface for event_fd() -- memory.usage_in_bytes # show current memory(RSS+Cache) usage. -- memory.memsw.usage_in_bytes # show current memory+Swap usage -+ memory.usage_in_bytes # show current res_counter usage for memory -+ (See 5.5 for details) -+ memory.memsw.usage_in_bytes # show current res_counter usage for memory+Swap -+ (See 5.5 for details) - memory.limit_in_bytes # set/show limit of memory usage - memory.memsw.limit_in_bytes # set/show limit of memory+Swap usage - memory.failcnt # show the number of memory usage hits limits -@@ -453,6 +455,15 @@ memory under it will be reclaimed. - You can reset failcnt by writing 0 to failcnt file. - # echo 0 > .../memory.failcnt - -+5.5 usage_in_bytes -+ -+For efficiency, as other kernel components, memory cgroup uses some optimization -+to avoid unnecessary cacheline false sharing. usage_in_bytes is affected by the -+method and doesn't show 'exact' value of memory(and swap) usage, it's an fuzz -+value for efficient access. (Of course, when necessary, it's synchronized.) -+If you want to know more exact memory usage, you should use RSS+CACHE(+SWAP) -+value in memory.stat(see 5.2). -+ - 6. Hierarchy support - - The memory controller supports a deep hierarchy and hierarchical accounting. -diff --git a/Documentation/hwmon/adm1021 b/Documentation/hwmon/adm1021 -index 03d02bf..02ad96c 100644 ---- a/Documentation/hwmon/adm1021 -+++ b/Documentation/hwmon/adm1021 -@@ -14,10 +14,6 @@ Supported chips: - Prefix: 'gl523sm' - Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e - Datasheet: -- * Intel Xeon Processor -- Prefix: - any other - may require 'force_adm1021' parameter -- Addresses scanned: none -- Datasheet: Publicly available at Intel website - * Maxim MAX1617 - Prefix: 'max1617' - Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e -@@ -91,21 +87,27 @@ will do no harm, but will return 'old' values. It is possible to make - ADM1021-clones do faster measurements, but there is really no good reason - for that. - --Xeon support -------------- - --Some Xeon processors have real max1617, adm1021, or compatible chips --within them, with two temperature sensors. -+Netburst-based Xeon support -+--------------------------- - --Other Xeons have chips with only one sensor. -+Some Xeon processors based on the Netburst (early Pentium 4, from 2001 to -+2003) microarchitecture had real MAX1617, ADM1021, or compatible chips -+within them, with two temperature sensors. Other Xeon processors of this -+era (with 400 MHz FSB) had chips with only one temperature sensor. - --If you have a Xeon, and the adm1021 module loads, and both temperatures --appear valid, then things are good. -+If you have such an old Xeon, and you get two valid temperatures when -+loading the adm1021 module, then things are good. - --If the adm1021 module doesn't load, you should try this: -- modprobe adm1021 force_adm1021=BUS,ADDRESS -- ADDRESS can only be 0x18, 0x1a, 0x29, 0x2b, 0x4c, or 0x4e. -+If nothing happens when loading the adm1021 module, and you are certain -+that your specific Xeon processor model includes compatible sensors, you -+will have to explicitly instantiate the sensor chips from user-space. See -+method 4 in Documentation/i2c/instantiating-devices. Possible slave -+addresses are 0x18, 0x1a, 0x29, 0x2b, 0x4c, or 0x4e. It is likely that -+only temp2 will be correct and temp1 will have to be ignored. - --If you have dual Xeons you may have appear to have two separate --adm1021-compatible chips, or two single-temperature sensors, at distinct --addresses. -+Previous generations of the Xeon processor (based on Pentium II/III) -+didn't have these sensors. Next generations of Xeon processors (533 MHz -+FSB and faster) lost them, until the Core-based generation which -+introduced integrated digital thermal sensors. These are supported by -+the coretemp driver. -diff --git a/Documentation/hwmon/lm90 b/Documentation/hwmon/lm90 -index fa475c0..f3efd18 100644 ---- a/Documentation/hwmon/lm90 -+++ b/Documentation/hwmon/lm90 -@@ -32,6 +32,16 @@ Supported chips: - Addresses scanned: I2C 0x4c and 0x4d - Datasheet: Publicly available at the ON Semiconductor website - http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461 -+ * Analog Devices ADT7461A -+ Prefix: 'adt7461a' -+ Addresses scanned: I2C 0x4c and 0x4d -+ Datasheet: Publicly available at the ON Semiconductor website -+ http://www.onsemi.com/PowerSolutions/product.do?id=ADT7461A -+ * ON Semiconductor NCT1008 -+ Prefix: 'nct1008' -+ Addresses scanned: I2C 0x4c and 0x4d -+ Datasheet: Publicly available at the ON Semiconductor website -+ http://www.onsemi.com/PowerSolutions/product.do?id=NCT1008 - * Maxim MAX6646 - Prefix: 'max6646' - Addresses scanned: I2C 0x4d -@@ -149,7 +159,7 @@ ADM1032: - * ALERT is triggered by open remote sensor. - * SMBus PEC support for Write Byte and Receive Byte transactions. - --ADT7461: -+ADT7461, ADT7461A, NCT1008: - * Extended temperature range (breaks compatibility) - * Lower resolution for remote temperature - -@@ -195,9 +205,9 @@ are exported, one for each channel, but these values are of course linked. - Only the local hysteresis can be set from user-space, and the same delta - applies to the remote hysteresis. - --The lm90 driver will not update its values more frequently than every --other second; reading them more often will do no harm, but will return --'old' values. -+The lm90 driver will not update its values more frequently than configured with -+the update_interval attribute; reading them more often will do no harm, but will -+return 'old' values. - - SMBus Alert Support - ------------------- -@@ -205,11 +215,12 @@ SMBus Alert Support - This driver has basic support for SMBus alert. When an alert is received, - the status register is read and the faulty temperature channel is logged. - --The Analog Devices chips (ADM1032 and ADT7461) do not implement the SMBus --alert protocol properly so additional care is needed: the ALERT output is --disabled when an alert is received, and is re-enabled only when the alarm --is gone. Otherwise the chip would block alerts from other chips in the bus --as long as the alarm is active. -+The Analog Devices chips (ADM1032, ADT7461 and ADT7461A) and ON -+Semiconductor chips (NCT1008) do not implement the SMBus alert protocol -+properly so additional care is needed: the ALERT output is disabled when -+an alert is received, and is re-enabled only when the alarm is gone. -+Otherwise the chip would block alerts from other chips in the bus as long -+as the alarm is active. - - PEC Support - ----------- -diff --git a/Documentation/video4linux/sh_mobile_ceu_camera.txt b/Documentation/video4linux/sh_mobile_ceu_camera.txt -index cb47e72..1e96ce6 100644 ---- a/Documentation/video4linux/sh_mobile_ceu_camera.txt -+++ b/Documentation/video4linux/sh_mobile_ceu_camera.txt -@@ -37,7 +37,7 @@ Generic scaling / cropping scheme - -1'- - - In the above chart minuses and slashes represent "real" data amounts, points and --accents represent "useful" data, basically, CEU scaled amd cropped output, -+accents represent "useful" data, basically, CEU scaled and cropped output, - mapped back onto the client's source plane. - - Such a configuration can be produced by user requests: -@@ -65,7 +65,7 @@ Do not touch input rectangle - it is already optimal. - - 1. Calculate current sensor scales: - -- scale_s = ((3') - (3)) / ((2') - (2)) -+ scale_s = ((2') - (2)) / ((3') - (3)) - - 2. Calculate "effective" input crop (sensor subwindow) - CEU crop scaled back at - current sensor scales onto input window - this is user S_CROP: -@@ -80,7 +80,7 @@ window: - 4. Calculate sensor output window by applying combined scales to real input - window: - -- width_s_out = ((2') - (2)) / scale_comb -+ width_s_out = ((7') - (7)) = ((2') - (2)) / scale_comb - - 5. Apply iterative sensor S_FMT for sensor output window. - -diff --git a/MAINTAINERS b/MAINTAINERS -index 1380312..2199ba1 100644 ---- a/MAINTAINERS -+++ b/MAINTAINERS -@@ -1032,12 +1032,13 @@ W: http://www.fluff.org/ben/linux/ - S: Maintained - F: arch/arm/mach-s3c64xx/ - --ARM/S5P ARM ARCHITECTURES -+ARM/S5P EXYNOS ARM ARCHITECTURES - M: Kukjin Kim - L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) - L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) - S: Maintained - F: arch/arm/mach-s5p*/ -+F: arch/arm/mach-exynos*/ - - ARM/SAMSUNG MOBILE MACHINE SUPPORT - M: Kyungmin Park -@@ -2808,7 +2809,7 @@ GPIO SUBSYSTEM - M: Grant Likely - S: Maintained - T: git git://git.secretlab.ca/git/linux-2.6.git --F: Documentation/gpio/gpio.txt -+F: Documentation/gpio.txt - F: drivers/gpio/ - F: include/linux/gpio* - -@@ -6921,6 +6922,18 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86. - S: Maintained - F: drivers/platform/x86 - -+XEN HYPERVISOR INTERFACE -+M: Jeremy Fitzhardinge -+M: Konrad Rzeszutek Wilk -+L: xen-devel@lists.xensource.com (moderated for non-subscribers) -+L: virtualization@lists.linux-foundation.org -+S: Supported -+F: arch/x86/xen/ -+F: drivers/*/xen-*front.c -+F: drivers/xen/ -+F: arch/x86/include/asm/xen/ -+F: include/xen/ -+ - XEN NETWORK BACKEND DRIVER - M: Ian Campbell - L: xen-devel@lists.xensource.com (moderated for non-subscribers) -@@ -6942,18 +6955,6 @@ S: Supported - F: arch/x86/xen/*swiotlb* - F: drivers/xen/*swiotlb* - --XEN HYPERVISOR INTERFACE --M: Jeremy Fitzhardinge --M: Konrad Rzeszutek Wilk --L: xen-devel@lists.xensource.com (moderated for non-subscribers) --L: virtualization@lists.linux-foundation.org --S: Supported --F: arch/x86/xen/ --F: drivers/*/xen-*front.c --F: drivers/xen/ --F: arch/x86/include/asm/xen/ --F: include/xen/ -- - XFS FILESYSTEM - P: Silicon Graphics Inc - M: Alex Elder -diff --git a/Makefile b/Makefile -index 5a7a2e4..6bc5e73 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,7 +1,7 @@ - VERSION = 2 - PATCHLEVEL = 6 - SUBLEVEL = 39 --EXTRAVERSION = -rc5 -+EXTRAVERSION = -rc5-git4 - NAME = Flesh-Eating Bats with Fangs - - # *DOCUMENTATION* -diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c -index f680122..a3a94e9 100644 ---- a/arch/arm/mach-davinci/dm355.c -+++ b/arch/arm/mach-davinci/dm355.c -@@ -314,7 +314,7 @@ static struct clk timer2_clk = { - .name = "timer2", - .parent = &pll1_aux_clk, - .lpsc = DAVINCI_LPSC_TIMER2, -- .usecount = 1, /* REVISIT: why can't' this be disabled? */ -+ .usecount = 1, /* REVISIT: why can't this be disabled? */ - }; - - static struct clk timer3_clk = { -diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c -index 5f8a654..4c82c27 100644 ---- a/arch/arm/mach-davinci/dm644x.c -+++ b/arch/arm/mach-davinci/dm644x.c -@@ -274,7 +274,7 @@ static struct clk timer2_clk = { - .name = "timer2", - .parent = &pll1_aux_clk, - .lpsc = DAVINCI_LPSC_TIMER2, -- .usecount = 1, /* REVISIT: why can't' this be disabled? */ -+ .usecount = 1, /* REVISIT: why can't this be disabled? */ - }; - - static struct clk_lookup dm644x_clks[] = { -diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile -index a45cd64..512b152 100644 ---- a/arch/arm/mach-omap2/Makefile -+++ b/arch/arm/mach-omap2/Makefile -@@ -68,7 +68,7 @@ obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o - obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o - - AFLAGS_sleep24xx.o :=-Wa,-march=armv6 --AFLAGS_sleep34xx.o :=-Wa,-march=armv7-a -+AFLAGS_sleep34xx.o :=-Wa,-march=armv7-a$(plus_sec) - - ifeq ($(CONFIG_PM_VERBOSE),y) - CFLAGS_pm_bus.o += -DDEBUG -diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c -index e964895..f8ba20a 100644 ---- a/arch/arm/mach-omap2/board-rx51.c -+++ b/arch/arm/mach-omap2/board-rx51.c -@@ -141,14 +141,19 @@ static void __init rx51_init(void) - static void __init rx51_map_io(void) - { - omap2_set_globals_3xxx(); -- rx51_video_mem_init(); - omap34xx_map_common_io(); - } - -+static void __init rx51_reserve(void) -+{ -+ rx51_video_mem_init(); -+ omap_reserve(); -+} -+ - MACHINE_START(NOKIA_RX51, "Nokia RX-51 board") - /* Maintainer: Lauri Leukkunen */ - .boot_params = 0x80000100, -- .reserve = omap_reserve, -+ .reserve = rx51_reserve, - .map_io = rx51_map_io, - .init_early = rx51_init_early, - .init_irq = omap_init_irq, -diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c -index 276992d..8c96567 100644 ---- a/arch/arm/mach-omap2/clock44xx_data.c -+++ b/arch/arm/mach-omap2/clock44xx_data.c -@@ -3116,14 +3116,9 @@ static struct omap_clk omap44xx_clks[] = { - CLK(NULL, "dsp_fck", &dsp_fck, CK_443X), - CLK("omapdss_dss", "sys_clk", &dss_sys_clk, CK_443X), - CLK("omapdss_dss", "tv_clk", &dss_tv_clk, CK_443X), -- CLK("omapdss_dss", "dss_clk", &dss_dss_clk, CK_443X), - CLK("omapdss_dss", "video_clk", &dss_48mhz_clk, CK_443X), -- CLK("omapdss_dss", "fck", &dss_fck, CK_443X), -- /* -- * On OMAP4, DSS ick is a dummy clock; this is needed for compatibility -- * with OMAP2/3. -- */ -- CLK("omapdss_dss", "ick", &dummy_ck, CK_443X), -+ CLK("omapdss_dss", "fck", &dss_dss_clk, CK_443X), -+ CLK("omapdss_dss", "ick", &dss_fck, CK_443X), - CLK(NULL, "efuse_ctrl_cust_fck", &efuse_ctrl_cust_fck, CK_443X), - CLK(NULL, "emif1_fck", &emif1_fck, CK_443X), - CLK(NULL, "emif2_fck", &emif2_fck, CK_443X), -diff --git a/arch/arm/mach-omap2/cm2xxx_3xxx.c b/arch/arm/mach-omap2/cm2xxx_3xxx.c -index 9d0dec8..38830d8 100644 ---- a/arch/arm/mach-omap2/cm2xxx_3xxx.c -+++ b/arch/arm/mach-omap2/cm2xxx_3xxx.c -@@ -247,6 +247,7 @@ struct omap3_cm_regs { - u32 per_cm_clksel; - u32 emu_cm_clksel; - u32 emu_cm_clkstctrl; -+ u32 pll_cm_autoidle; - u32 pll_cm_autoidle2; - u32 pll_cm_clksel4; - u32 pll_cm_clksel5; -@@ -319,6 +320,15 @@ void omap3_cm_save_context(void) - omap2_cm_read_mod_reg(OMAP3430_EMU_MOD, CM_CLKSEL1); - cm_context.emu_cm_clkstctrl = - omap2_cm_read_mod_reg(OMAP3430_EMU_MOD, OMAP2_CM_CLKSTCTRL); -+ /* -+ * As per erratum i671, ROM code does not respect the PER DPLL -+ * programming scheme if CM_AUTOIDLE_PLL.AUTO_PERIPH_DPLL == 1. -+ * In this case, even though this register has been saved in -+ * scratchpad contents, we need to restore AUTO_PERIPH_DPLL -+ * by ourselves. So, we need to save it anyway. -+ */ -+ cm_context.pll_cm_autoidle = -+ omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE); - cm_context.pll_cm_autoidle2 = - omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE2); - cm_context.pll_cm_clksel4 = -@@ -441,6 +451,13 @@ void omap3_cm_restore_context(void) - CM_CLKSEL1); - omap2_cm_write_mod_reg(cm_context.emu_cm_clkstctrl, OMAP3430_EMU_MOD, - OMAP2_CM_CLKSTCTRL); -+ /* -+ * As per erratum i671, ROM code does not respect the PER DPLL -+ * programming scheme if CM_AUTOIDLE_PLL.AUTO_PERIPH_DPLL == 1. -+ * In this case, we need to restore AUTO_PERIPH_DPLL by ourselves. -+ */ -+ omap2_cm_write_mod_reg(cm_context.pll_cm_autoidle, PLL_MOD, -+ CM_AUTOIDLE); - omap2_cm_write_mod_reg(cm_context.pll_cm_autoidle2, PLL_MOD, - CM_AUTOIDLE2); - omap2_cm_write_mod_reg(cm_context.pll_cm_clksel4, PLL_MOD, -diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c -index 6952794..da53ba3 100644 ---- a/arch/arm/mach-omap2/control.c -+++ b/arch/arm/mach-omap2/control.c -@@ -316,8 +316,14 @@ void omap3_save_scratchpad_contents(void) - omap2_cm_read_mod_reg(WKUP_MOD, CM_CLKSEL); - prcm_block_contents.cm_clken_pll = - omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN); -+ /* -+ * As per erratum i671, ROM code does not respect the PER DPLL -+ * programming scheme if CM_AUTOIDLE_PLL..AUTO_PERIPH_DPLL == 1. -+ * Then, in anycase, clear these bits to avoid extra latencies. -+ */ - prcm_block_contents.cm_autoidle_pll = -- omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_AUTOIDLE_PLL); -+ omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE) & -+ ~OMAP3430_AUTO_PERIPH_DPLL_MASK; - prcm_block_contents.cm_clksel1_pll = - omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL1_PLL); - prcm_block_contents.cm_clksel2_pll = -diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c -index 8eb3ce1..c4d0ae8 100644 ---- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c -+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c -@@ -1639,6 +1639,7 @@ static struct omap_hwmod_ocp_if *omap2420_gpio1_slaves[] = { - - static struct omap_hwmod omap2420_gpio1_hwmod = { - .name = "gpio1", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap242x_gpio1_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio1_irqs), - .main_clk = "gpios_fck", -@@ -1669,6 +1670,7 @@ static struct omap_hwmod_ocp_if *omap2420_gpio2_slaves[] = { - - static struct omap_hwmod omap2420_gpio2_hwmod = { - .name = "gpio2", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap242x_gpio2_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio2_irqs), - .main_clk = "gpios_fck", -@@ -1699,6 +1701,7 @@ static struct omap_hwmod_ocp_if *omap2420_gpio3_slaves[] = { - - static struct omap_hwmod omap2420_gpio3_hwmod = { - .name = "gpio3", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap242x_gpio3_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio3_irqs), - .main_clk = "gpios_fck", -@@ -1729,6 +1732,7 @@ static struct omap_hwmod_ocp_if *omap2420_gpio4_slaves[] = { - - static struct omap_hwmod omap2420_gpio4_hwmod = { - .name = "gpio4", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap242x_gpio4_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio4_irqs), - .main_clk = "gpios_fck", -@@ -1782,7 +1786,7 @@ static struct omap_hwmod_irq_info omap2420_dma_system_irqs[] = { - static struct omap_hwmod_addr_space omap2420_dma_system_addrs[] = { - { - .pa_start = 0x48056000, -- .pa_end = 0x4a0560ff, -+ .pa_end = 0x48056fff, - .flags = ADDR_TYPE_RT - }, - }; -diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c -index e6e3810..9682dd5 100644 ---- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c -+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c -@@ -1742,6 +1742,7 @@ static struct omap_hwmod_ocp_if *omap2430_gpio1_slaves[] = { - - static struct omap_hwmod omap2430_gpio1_hwmod = { - .name = "gpio1", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap243x_gpio1_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio1_irqs), - .main_clk = "gpios_fck", -@@ -1772,6 +1773,7 @@ static struct omap_hwmod_ocp_if *omap2430_gpio2_slaves[] = { - - static struct omap_hwmod omap2430_gpio2_hwmod = { - .name = "gpio2", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap243x_gpio2_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio2_irqs), - .main_clk = "gpios_fck", -@@ -1802,6 +1804,7 @@ static struct omap_hwmod_ocp_if *omap2430_gpio3_slaves[] = { - - static struct omap_hwmod omap2430_gpio3_hwmod = { - .name = "gpio3", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap243x_gpio3_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio3_irqs), - .main_clk = "gpios_fck", -@@ -1832,6 +1835,7 @@ static struct omap_hwmod_ocp_if *omap2430_gpio4_slaves[] = { - - static struct omap_hwmod omap2430_gpio4_hwmod = { - .name = "gpio4", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap243x_gpio4_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio4_irqs), - .main_clk = "gpios_fck", -@@ -1862,6 +1866,7 @@ static struct omap_hwmod_ocp_if *omap2430_gpio5_slaves[] = { - - static struct omap_hwmod omap2430_gpio5_hwmod = { - .name = "gpio5", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap243x_gpio5_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio5_irqs), - .main_clk = "gpio5_fck", -@@ -1915,7 +1920,7 @@ static struct omap_hwmod_irq_info omap2430_dma_system_irqs[] = { - static struct omap_hwmod_addr_space omap2430_dma_system_addrs[] = { - { - .pa_start = 0x48056000, -- .pa_end = 0x4a0560ff, -+ .pa_end = 0x48056fff, - .flags = ADDR_TYPE_RT - }, - }; -diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c -index b98e2df..909a84d 100644 ---- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c -+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c -@@ -2141,6 +2141,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_gpio1_slaves[] = { - - static struct omap_hwmod omap3xxx_gpio1_hwmod = { - .name = "gpio1", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap3xxx_gpio1_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio1_irqs), - .main_clk = "gpio1_ick", -@@ -2177,6 +2178,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_gpio2_slaves[] = { - - static struct omap_hwmod omap3xxx_gpio2_hwmod = { - .name = "gpio2", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap3xxx_gpio2_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio2_irqs), - .main_clk = "gpio2_ick", -@@ -2213,6 +2215,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_gpio3_slaves[] = { - - static struct omap_hwmod omap3xxx_gpio3_hwmod = { - .name = "gpio3", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap3xxx_gpio3_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio3_irqs), - .main_clk = "gpio3_ick", -@@ -2249,6 +2252,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_gpio4_slaves[] = { - - static struct omap_hwmod omap3xxx_gpio4_hwmod = { - .name = "gpio4", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap3xxx_gpio4_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio4_irqs), - .main_clk = "gpio4_ick", -@@ -2285,6 +2289,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = { - - static struct omap_hwmod omap3xxx_gpio5_hwmod = { - .name = "gpio5", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap3xxx_gpio5_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio5_irqs), - .main_clk = "gpio5_ick", -@@ -2321,6 +2326,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = { - - static struct omap_hwmod omap3xxx_gpio6_hwmod = { - .name = "gpio6", -+ .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .mpu_irqs = omap3xxx_gpio6_irqs, - .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio6_irqs), - .main_clk = "gpio6_ick", -@@ -2386,7 +2392,7 @@ static struct omap_hwmod_irq_info omap3xxx_dma_system_irqs[] = { - static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = { - { - .pa_start = 0x48056000, -- .pa_end = 0x4a0560ff, -+ .pa_end = 0x48056fff, - .flags = ADDR_TYPE_RT - }, - }; -diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c -index 3e88dd3..abc548a 100644 ---- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c -+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c -@@ -885,7 +885,7 @@ static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = { - static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = { - { - .pa_start = 0x4a056000, -- .pa_end = 0x4a0560ff, -+ .pa_end = 0x4a056fff, - .flags = ADDR_TYPE_RT - }, - }; -diff --git a/arch/arm/mach-omap2/omap_l3_smx.c b/arch/arm/mach-omap2/omap_l3_smx.c -index 5f2da756..4321e79 100644 ---- a/arch/arm/mach-omap2/omap_l3_smx.c -+++ b/arch/arm/mach-omap2/omap_l3_smx.c -@@ -196,11 +196,11 @@ static irqreturn_t omap3_l3_app_irq(int irq, void *_l3) - /* No timeout error for debug sources */ - } - -- base = ((l3->rt) + (*(omap3_l3_bases[int_type] + err_source))); -- - /* identify the error source */ - for (err_source = 0; !(status & (1 << err_source)); err_source++) - ; -+ -+ base = l3->rt + *(omap3_l3_bases[int_type] + err_source); - error = omap3_l3_readll(base, L3_ERROR_LOG); - - if (error) { -diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c -index 30af335..49486f5 100644 ---- a/arch/arm/mach-omap2/pm.c -+++ b/arch/arm/mach-omap2/pm.c -@@ -89,6 +89,7 @@ static void omap2_init_processor_devices(void) - if (cpu_is_omap44xx()) { - _init_omap_device("l3_main_1", &l3_dev); - _init_omap_device("dsp", &dsp_dev); -+ _init_omap_device("iva", &iva_dev); - } else { - _init_omap_device("l3_main", &l3_dev); - } -diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c -index 6fb5209..0c1552d 100644 ---- a/arch/arm/mach-omap2/voltage.c -+++ b/arch/arm/mach-omap2/voltage.c -@@ -114,7 +114,6 @@ static int __init _config_common_vdd_data(struct omap_vdd_info *vdd) - sys_clk_speed /= 1000; - - /* Generic voltage parameters */ -- vdd->curr_volt = 1200000; - vdd->volt_scale = vp_forceupdate_scale_voltage; - vdd->vp_enabled = false; - -diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c -index 02b7a03..8b3db1c 100644 ---- a/arch/m68k/mm/motorola.c -+++ b/arch/m68k/mm/motorola.c -@@ -300,6 +300,8 @@ void __init paging_init(void) - zones_size[ZONE_DMA] = m68k_memory[i].size >> PAGE_SHIFT; - free_area_init_node(i, zones_size, - m68k_memory[i].addr >> PAGE_SHIFT, NULL); -+ if (node_present_pages(i)) -+ node_set_state(i, N_NORMAL_MEMORY); - } - } - -diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c -index b7ed8d7..b1d1262 100644 ---- a/arch/parisc/mm/init.c -+++ b/arch/parisc/mm/init.c -@@ -266,8 +266,10 @@ static void __init setup_bootmem(void) - } - memset(pfnnid_map, 0xff, sizeof(pfnnid_map)); - -- for (i = 0; i < npmem_ranges; i++) -+ for (i = 0; i < npmem_ranges; i++) { -+ node_set_state(i, N_NORMAL_MEMORY); - node_set_online(i); -+ } - #endif - - /* -diff --git a/arch/powerpc/include/asm/uninorth.h b/arch/powerpc/include/asm/uninorth.h -index ae9c899..d12b11d 100644 ---- a/arch/powerpc/include/asm/uninorth.h -+++ b/arch/powerpc/include/asm/uninorth.h -@@ -60,7 +60,7 @@ - * - * Obviously, the GART is not cache coherent and so any change to it - * must be flushed to memory (or maybe just make the GART space non -- * cachable). AGP memory itself does't seem to be cache coherent neither. -+ * cachable). AGP memory itself doesn't seem to be cache coherent neither. - * - * In order to invalidate the GART (which is probably necessary to inval - * the bridge internal TLBs), the following sequence has to be written, -diff --git a/arch/um/Kconfig.um b/arch/um/Kconfig.um -index 90a438a..b5e675e 100644 ---- a/arch/um/Kconfig.um -+++ b/arch/um/Kconfig.um -@@ -47,7 +47,7 @@ config HOSTFS - - config HPPFS - tristate "HoneyPot ProcFS (EXPERIMENTAL)" -- depends on EXPERIMENTAL -+ depends on EXPERIMENTAL && PROC_FS - help - hppfs (HoneyPot ProcFS) is a filesystem which allows UML /proc - entries to be overridden, removed, or fabricated from the host. -diff --git a/arch/um/include/asm/thread_info.h b/arch/um/include/asm/thread_info.h -index e2cf786..5bd1bad 100644 ---- a/arch/um/include/asm/thread_info.h -+++ b/arch/um/include/asm/thread_info.h -@@ -49,7 +49,10 @@ static inline struct thread_info *current_thread_info(void) - { - struct thread_info *ti; - unsigned long mask = THREAD_SIZE - 1; -- ti = (struct thread_info *) (((unsigned long) &ti) & ~mask); -+ void *p; -+ -+ asm volatile ("" : "=r" (p) : "0" (&ti)); -+ ti = (struct thread_info *) (((unsigned long)p) & ~mask); - return ti; - } - -diff --git a/arch/um/sys-i386/Makefile b/arch/um/sys-i386/Makefile -index 804b28d..b1da91c 100644 ---- a/arch/um/sys-i386/Makefile -+++ b/arch/um/sys-i386/Makefile -@@ -4,7 +4,7 @@ - - obj-y = bug.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \ - ptrace_user.o setjmp.o signal.o stub.o stub_segv.o syscalls.o sysrq.o \ -- sys_call_table.o tls.o -+ sys_call_table.o tls.o atomic64_cx8_32.o - - obj-$(CONFIG_BINFMT_ELF) += elfcore.o - -diff --git a/arch/um/sys-i386/atomic64_cx8_32.S b/arch/um/sys-i386/atomic64_cx8_32.S -new file mode 100644 -index 0000000..1e901d3 ---- /dev/null -+++ b/arch/um/sys-i386/atomic64_cx8_32.S -@@ -0,0 +1,225 @@ -+/* -+ * atomic64_t for 586+ -+ * -+ * Copied from arch/x86/lib/atomic64_cx8_32.S -+ * -+ * Copyright © 2010 Luca Barbieri -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ */ -+ -+#include -+#include -+#include -+ -+.macro SAVE reg -+ pushl_cfi %\reg -+ CFI_REL_OFFSET \reg, 0 -+.endm -+ -+.macro RESTORE reg -+ popl_cfi %\reg -+ CFI_RESTORE \reg -+.endm -+ -+.macro read64 reg -+ movl %ebx, %eax -+ movl %ecx, %edx -+/* we need LOCK_PREFIX since otherwise cmpxchg8b always does the write */ -+ LOCK_PREFIX -+ cmpxchg8b (\reg) -+.endm -+ -+ENTRY(atomic64_read_cx8) -+ CFI_STARTPROC -+ -+ read64 %ecx -+ ret -+ CFI_ENDPROC -+ENDPROC(atomic64_read_cx8) -+ -+ENTRY(atomic64_set_cx8) -+ CFI_STARTPROC -+ -+1: -+/* we don't need LOCK_PREFIX since aligned 64-bit writes -+ * are atomic on 586 and newer */ -+ cmpxchg8b (%esi) -+ jne 1b -+ -+ ret -+ CFI_ENDPROC -+ENDPROC(atomic64_set_cx8) -+ -+ENTRY(atomic64_xchg_cx8) -+ CFI_STARTPROC -+ -+ movl %ebx, %eax -+ movl %ecx, %edx -+1: -+ LOCK_PREFIX -+ cmpxchg8b (%esi) -+ jne 1b -+ -+ ret -+ CFI_ENDPROC -+ENDPROC(atomic64_xchg_cx8) -+ -+.macro addsub_return func ins insc -+ENTRY(atomic64_\func\()_return_cx8) -+ CFI_STARTPROC -+ SAVE ebp -+ SAVE ebx -+ SAVE esi -+ SAVE edi -+ -+ movl %eax, %esi -+ movl %edx, %edi -+ movl %ecx, %ebp -+ -+ read64 %ebp -+1: -+ movl %eax, %ebx -+ movl %edx, %ecx -+ \ins\()l %esi, %ebx -+ \insc\()l %edi, %ecx -+ LOCK_PREFIX -+ cmpxchg8b (%ebp) -+ jne 1b -+ -+10: -+ movl %ebx, %eax -+ movl %ecx, %edx -+ RESTORE edi -+ RESTORE esi -+ RESTORE ebx -+ RESTORE ebp -+ ret -+ CFI_ENDPROC -+ENDPROC(atomic64_\func\()_return_cx8) -+.endm -+ -+addsub_return add add adc -+addsub_return sub sub sbb -+ -+.macro incdec_return func ins insc -+ENTRY(atomic64_\func\()_return_cx8) -+ CFI_STARTPROC -+ SAVE ebx -+ -+ read64 %esi -+1: -+ movl %eax, %ebx -+ movl %edx, %ecx -+ \ins\()l $1, %ebx -+ \insc\()l $0, %ecx -+ LOCK_PREFIX -+ cmpxchg8b (%esi) -+ jne 1b -+ -+10: -+ movl %ebx, %eax -+ movl %ecx, %edx -+ RESTORE ebx -+ ret -+ CFI_ENDPROC -+ENDPROC(atomic64_\func\()_return_cx8) -+.endm -+ -+incdec_return inc add adc -+incdec_return dec sub sbb -+ -+ENTRY(atomic64_dec_if_positive_cx8) -+ CFI_STARTPROC -+ SAVE ebx -+ -+ read64 %esi -+1: -+ movl %eax, %ebx -+ movl %edx, %ecx -+ subl $1, %ebx -+ sbb $0, %ecx -+ js 2f -+ LOCK_PREFIX -+ cmpxchg8b (%esi) -+ jne 1b -+ -+2: -+ movl %ebx, %eax -+ movl %ecx, %edx -+ RESTORE ebx -+ ret -+ CFI_ENDPROC -+ENDPROC(atomic64_dec_if_positive_cx8) -+ -+ENTRY(atomic64_add_unless_cx8) -+ CFI_STARTPROC -+ SAVE ebp -+ SAVE ebx -+/* these just push these two parameters on the stack */ -+ SAVE edi -+ SAVE esi -+ -+ movl %ecx, %ebp -+ movl %eax, %esi -+ movl %edx, %edi -+ -+ read64 %ebp -+1: -+ cmpl %eax, 0(%esp) -+ je 4f -+2: -+ movl %eax, %ebx -+ movl %edx, %ecx -+ addl %esi, %ebx -+ adcl %edi, %ecx -+ LOCK_PREFIX -+ cmpxchg8b (%ebp) -+ jne 1b -+ -+ movl $1, %eax -+3: -+ addl $8, %esp -+ CFI_ADJUST_CFA_OFFSET -8 -+ RESTORE ebx -+ RESTORE ebp -+ ret -+4: -+ cmpl %edx, 4(%esp) -+ jne 2b -+ xorl %eax, %eax -+ jmp 3b -+ CFI_ENDPROC -+ENDPROC(atomic64_add_unless_cx8) -+ -+ENTRY(atomic64_inc_not_zero_cx8) -+ CFI_STARTPROC -+ SAVE ebx -+ -+ read64 %esi -+1: -+ testl %eax, %eax -+ je 4f -+2: -+ movl %eax, %ebx -+ movl %edx, %ecx -+ addl $1, %ebx -+ adcl $0, %ecx -+ LOCK_PREFIX -+ cmpxchg8b (%esi) -+ jne 1b -+ -+ movl $1, %eax -+3: -+ RESTORE ebx -+ ret -+4: -+ testl %edx, %edx -+ jne 2b -+ jmp 3b -+ CFI_ENDPROC -+ENDPROC(atomic64_inc_not_zero_cx8) -diff --git a/arch/x86/boot/memory.c b/arch/x86/boot/memory.c -index cae3feb..db75d07 100644 ---- a/arch/x86/boot/memory.c -+++ b/arch/x86/boot/memory.c -@@ -91,7 +91,7 @@ static int detect_memory_e801(void) - if (oreg.ax > 15*1024) { - return -1; /* Bogus! */ - } else if (oreg.ax == 15*1024) { -- boot_params.alt_mem_k = (oreg.dx << 6) + oreg.ax; -+ boot_params.alt_mem_k = (oreg.bx << 6) + oreg.ax; - } else { - /* - * This ignores memory above 16MB if we have a memory -diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h -index c4bd267..a97a240 100644 ---- a/arch/x86/include/asm/io_apic.h -+++ b/arch/x86/include/asm/io_apic.h -@@ -150,7 +150,7 @@ void setup_IO_APIC_irq_extra(u32 gsi); - extern void ioapic_and_gsi_init(void); - extern void ioapic_insert_resources(void); - --int io_apic_setup_irq_pin(unsigned int irq, int node, struct io_apic_irq_attr *attr); -+int io_apic_setup_irq_pin_once(unsigned int irq, int node, struct io_apic_irq_attr *attr); - - extern struct IO_APIC_route_entry **alloc_ioapic_entries(void); - extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries); -diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c -index 68df09b..45fd33d 100644 ---- a/arch/x86/kernel/apic/io_apic.c -+++ b/arch/x86/kernel/apic/io_apic.c -@@ -128,8 +128,8 @@ static int __init parse_noapic(char *str) - } - early_param("noapic", parse_noapic); - --static int io_apic_setup_irq_pin_once(unsigned int irq, int node, -- struct io_apic_irq_attr *attr); -+static int io_apic_setup_irq_pin(unsigned int irq, int node, -+ struct io_apic_irq_attr *attr); - - /* Will be called in mpparse/acpi/sfi codes for saving IRQ info */ - void mp_save_irq(struct mpc_intsrc *m) -@@ -3570,7 +3570,7 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) - } - #endif /* CONFIG_HT_IRQ */ - --int -+static int - io_apic_setup_irq_pin(unsigned int irq, int node, struct io_apic_irq_attr *attr) - { - struct irq_cfg *cfg = alloc_irq_and_cfg_at(irq, node); -@@ -3585,8 +3585,8 @@ io_apic_setup_irq_pin(unsigned int irq, int node, struct io_apic_irq_attr *attr) - return ret; - } - --static int io_apic_setup_irq_pin_once(unsigned int irq, int node, -- struct io_apic_irq_attr *attr) -+int io_apic_setup_irq_pin_once(unsigned int irq, int node, -+ struct io_apic_irq_attr *attr) - { - unsigned int id = attr->ioapic, pin = attr->ioapic_pin; - int ret; -diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c -index 632e5dc..e638689 100644 ---- a/arch/x86/kernel/cpu/perf_event.c -+++ b/arch/x86/kernel/cpu/perf_event.c -@@ -613,8 +613,8 @@ static int x86_setup_perfctr(struct perf_event *event) - /* - * Branch tracing: - */ -- if ((attr->config == PERF_COUNT_HW_BRANCH_INSTRUCTIONS) && -- (hwc->sample_period == 1)) { -+ if (attr->config == PERF_COUNT_HW_BRANCH_INSTRUCTIONS && -+ !attr->freq && hwc->sample_period == 1) { - /* BTS is not supported by this architecture. */ - if (!x86_pmu.bts_active) - return -EOPNOTSUPP; -@@ -1288,6 +1288,16 @@ static int x86_pmu_handle_irq(struct pt_regs *regs) - - cpuc = &__get_cpu_var(cpu_hw_events); - -+ /* -+ * Some chipsets need to unmask the LVTPC in a particular spot -+ * inside the nmi handler. As a result, the unmasking was pushed -+ * into all the nmi handlers. -+ * -+ * This generic handler doesn't seem to have any issues where the -+ * unmasking occurs so it was left at the top. -+ */ -+ apic_write(APIC_LVTPC, APIC_DM_NMI); -+ - for (idx = 0; idx < x86_pmu.num_counters; idx++) { - if (!test_bit(idx, cpuc->active_mask)) { - /* -@@ -1374,8 +1384,6 @@ perf_event_nmi_handler(struct notifier_block *self, - return NOTIFY_DONE; - } - -- apic_write(APIC_LVTPC, APIC_DM_NMI); -- - handled = x86_pmu.handle_irq(args->regs); - if (!handled) - return NOTIFY_DONE; -diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c -index 43fa20b..e61539b 100644 ---- a/arch/x86/kernel/cpu/perf_event_intel.c -+++ b/arch/x86/kernel/cpu/perf_event_intel.c -@@ -25,7 +25,7 @@ struct intel_percore { - /* - * Intel PerfMon, used on Core and later. - */ --static const u64 intel_perfmon_event_map[] = -+static u64 intel_perfmon_event_map[PERF_COUNT_HW_MAX] __read_mostly = - { - [PERF_COUNT_HW_CPU_CYCLES] = 0x003c, - [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0, -@@ -933,6 +933,16 @@ static int intel_pmu_handle_irq(struct pt_regs *regs) - - cpuc = &__get_cpu_var(cpu_hw_events); - -+ /* -+ * Some chipsets need to unmask the LVTPC in a particular spot -+ * inside the nmi handler. As a result, the unmasking was pushed -+ * into all the nmi handlers. -+ * -+ * This handler doesn't seem to have any issues with the unmasking -+ * so it was left at the top. -+ */ -+ apic_write(APIC_LVTPC, APIC_DM_NMI); -+ - intel_pmu_disable_all(); - handled = intel_pmu_drain_bts_buffer(); - status = intel_pmu_get_status(); -@@ -998,6 +1008,9 @@ intel_bts_constraints(struct perf_event *event) - struct hw_perf_event *hwc = &event->hw; - unsigned int hw_event, bts_event; - -+ if (event->attr.freq) -+ return NULL; -+ - hw_event = hwc->config & INTEL_ARCH_EVENT_MASK; - bts_event = x86_pmu.event_map(PERF_COUNT_HW_BRANCH_INSTRUCTIONS); - -@@ -1305,7 +1318,7 @@ static void intel_clovertown_quirks(void) - * AJ106 could possibly be worked around by not allowing LBR - * usage from PEBS, including the fixup. - * AJ68 could possibly be worked around by always programming -- * a pebs_event_reset[0] value and coping with the lost events. -+ * a pebs_event_reset[0] value and coping with the lost events. - * - * But taken together it might just make sense to not enable PEBS on - * these chips. -@@ -1409,6 +1422,18 @@ static __init int intel_pmu_init(void) - x86_pmu.percore_constraints = intel_nehalem_percore_constraints; - x86_pmu.enable_all = intel_pmu_nhm_enable_all; - x86_pmu.extra_regs = intel_nehalem_extra_regs; -+ -+ if (ebx & 0x40) { -+ /* -+ * Erratum AAJ80 detected, we work it around by using -+ * the BR_MISP_EXEC.ANY event. This will over-count -+ * branch-misses, but it's still much better than the -+ * architectural event which is often completely bogus: -+ */ -+ intel_perfmon_event_map[PERF_COUNT_HW_BRANCH_MISSES] = 0x7f89; -+ -+ pr_cont("erratum AAJ80 worked around, "); -+ } - pr_cont("Nehalem events, "); - break; - -diff --git a/arch/x86/kernel/cpu/perf_event_p4.c b/arch/x86/kernel/cpu/perf_event_p4.c -index d1f77e2..e93fcd5 100644 ---- a/arch/x86/kernel/cpu/perf_event_p4.c -+++ b/arch/x86/kernel/cpu/perf_event_p4.c -@@ -950,11 +950,20 @@ static int p4_pmu_handle_irq(struct pt_regs *regs) - x86_pmu_stop(event, 0); - } - -- if (handled) { -- /* p4 quirk: unmask it again */ -- apic_write(APIC_LVTPC, apic_read(APIC_LVTPC) & ~APIC_LVT_MASKED); -+ if (handled) - inc_irq_stat(apic_perf_irqs); -- } -+ -+ /* -+ * When dealing with the unmasking of the LVTPC on P4 perf hw, it has -+ * been observed that the OVF bit flag has to be cleared first _before_ -+ * the LVTPC can be unmasked. -+ * -+ * The reason is the NMI line will continue to be asserted while the OVF -+ * bit is set. This causes a second NMI to generate if the LVTPC is -+ * unmasked before the OVF bit is cleared, leading to unknown NMI -+ * messages. -+ */ -+ apic_write(APIC_LVTPC, APIC_DM_NMI); - - return handled; - } -diff --git a/arch/x86/kernel/devicetree.c b/arch/x86/kernel/devicetree.c -index 706a9fb..e90f084 100644 ---- a/arch/x86/kernel/devicetree.c -+++ b/arch/x86/kernel/devicetree.c -@@ -391,7 +391,7 @@ static int ioapic_xlate(struct irq_domain *id, const u32 *intspec, u32 intsize, - - set_io_apic_irq_attr(&attr, idx, line, it->trigger, it->polarity); - -- return io_apic_setup_irq_pin(*out_hwirq, cpu_to_node(0), &attr); -+ return io_apic_setup_irq_pin_once(*out_hwirq, cpu_to_node(0), &attr); - } - - static void __init ioapic_add_ofnode(struct device_node *np) -diff --git a/arch/x86/platform/ce4100/falconfalls.dts b/arch/x86/platform/ce4100/falconfalls.dts -index 2d6d226..e70be38 100644 ---- a/arch/x86/platform/ce4100/falconfalls.dts -+++ b/arch/x86/platform/ce4100/falconfalls.dts -@@ -347,7 +347,7 @@ - "pciclass0c03"; - - reg = <0x16800 0x0 0x0 0x0 0x0>; -- interrupts = <22 3>; -+ interrupts = <22 1>; - }; - - usb@d,1 { -@@ -357,7 +357,7 @@ - "pciclass0c03"; - - reg = <0x16900 0x0 0x0 0x0 0x0>; -- interrupts = <22 3>; -+ interrupts = <22 1>; - }; - - sata@e,0 { -@@ -367,7 +367,7 @@ - "pciclass0106"; - - reg = <0x17000 0x0 0x0 0x0 0x0>; -- interrupts = <23 3>; -+ interrupts = <23 1>; - }; - - flash@f,0 { -diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c -index b136c9c..449c556 100644 ---- a/drivers/acpi/scan.c -+++ b/drivers/acpi/scan.c -@@ -943,6 +943,10 @@ static int acpi_bus_get_flags(struct acpi_device *device) - if (ACPI_SUCCESS(status)) - device->flags.lockable = 1; - -+ /* Power resources cannot be power manageable. */ -+ if (device->device_type == ACPI_BUS_TYPE_POWER) -+ return 0; -+ - /* Presence of _PS0|_PR0 indicates 'power manageable' */ - status = acpi_get_handle(device->handle, "_PS0", &temp); - if (ACPI_FAILURE(status)) -diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c -index fbc5b6e..abe3ab7 100644 ---- a/drivers/base/power/main.c -+++ b/drivers/base/power/main.c -@@ -63,6 +63,7 @@ void device_pm_init(struct device *dev) - dev->power.wakeup = NULL; - spin_lock_init(&dev->power.lock); - pm_runtime_init(dev); -+ INIT_LIST_HEAD(&dev->power.entry); - } - - /** -diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c -index 4573c83..abbbd33 100644 ---- a/drivers/base/power/wakeup.c -+++ b/drivers/base/power/wakeup.c -@@ -258,7 +258,7 @@ void device_set_wakeup_capable(struct device *dev, bool capable) - if (!!dev->power.can_wakeup == !!capable) - return; - -- if (device_is_registered(dev)) { -+ if (device_is_registered(dev) && !list_empty(&dev->power.entry)) { - if (capable) { - if (wakeup_sysfs_add(dev)) - return; -diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig -index c58f691..b493663 100644 ---- a/drivers/gpu/drm/Kconfig -+++ b/drivers/gpu/drm/Kconfig -@@ -24,6 +24,7 @@ config DRM_KMS_HELPER - depends on DRM - select FB - select FRAMEBUFFER_CONSOLE if !EXPERT -+ select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE - help - FB and CRTC helpers for KMS drivers. - -diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c -index 9507204..11d7a72 100644 ---- a/drivers/gpu/drm/drm_fb_helper.c -+++ b/drivers/gpu/drm/drm_fb_helper.c -@@ -342,9 +342,22 @@ int drm_fb_helper_debug_leave(struct fb_info *info) - } - EXPORT_SYMBOL(drm_fb_helper_debug_leave); - -+bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper) -+{ -+ bool error = false; -+ int i, ret; -+ for (i = 0; i < fb_helper->crtc_count; i++) { -+ struct drm_mode_set *mode_set = &fb_helper->crtc_info[i].mode_set; -+ ret = drm_crtc_helper_set_config(mode_set); -+ if (ret) -+ error = true; -+ } -+ return error; -+} -+EXPORT_SYMBOL(drm_fb_helper_restore_fbdev_mode); -+ - bool drm_fb_helper_force_kernel_mode(void) - { -- int i = 0; - bool ret, error = false; - struct drm_fb_helper *helper; - -@@ -352,12 +365,12 @@ bool drm_fb_helper_force_kernel_mode(void) - return false; - - list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { -- for (i = 0; i < helper->crtc_count; i++) { -- struct drm_mode_set *mode_set = &helper->crtc_info[i].mode_set; -- ret = drm_crtc_helper_set_config(mode_set); -- if (ret) -- error = true; -- } -+ if (helper->dev->switch_power_state == DRM_SWITCH_POWER_OFF) -+ continue; -+ -+ ret = drm_fb_helper_restore_fbdev_mode(helper); -+ if (ret) -+ error = true; - } - return error; - } -diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c -index 7273037..12876f2 100644 ---- a/drivers/gpu/drm/i915/i915_dma.c -+++ b/drivers/gpu/drm/i915/i915_dma.c -@@ -2207,7 +2207,7 @@ void i915_driver_lastclose(struct drm_device * dev) - drm_i915_private_t *dev_priv = dev->dev_private; - - if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) { -- drm_fb_helper_restore(); -+ intel_fb_restore_mode(dev); - vga_switcheroo_process_delayed_switch(); - return; - } -diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h -index f5b0d83..1d20712 100644 ---- a/drivers/gpu/drm/i915/intel_drv.h -+++ b/drivers/gpu/drm/i915/intel_drv.h -@@ -338,4 +338,5 @@ extern int intel_overlay_attrs(struct drm_device *dev, void *data, - struct drm_file *file_priv); - - extern void intel_fb_output_poll_changed(struct drm_device *dev); -+extern void intel_fb_restore_mode(struct drm_device *dev); - #endif /* __INTEL_DRV_H__ */ -diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c -index 5127827..ec49bae 100644 ---- a/drivers/gpu/drm/i915/intel_fb.c -+++ b/drivers/gpu/drm/i915/intel_fb.c -@@ -264,3 +264,13 @@ void intel_fb_output_poll_changed(struct drm_device *dev) - drm_i915_private_t *dev_priv = dev->dev_private; - drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper); - } -+ -+void intel_fb_restore_mode(struct drm_device *dev) -+{ -+ int ret; -+ drm_i915_private_t *dev_priv = dev->dev_private; -+ -+ ret = drm_fb_helper_restore_fbdev_mode(&dev_priv->fbdev->helper); -+ if (ret) -+ DRM_DEBUG("failed to restore crtc mode\n"); -+} -diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c -index bf7d4c0..871df03 100644 ---- a/drivers/gpu/drm/radeon/radeon_kms.c -+++ b/drivers/gpu/drm/radeon/radeon_kms.c -@@ -221,6 +221,19 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) - return -EINVAL; - } - break; -+ case RADEON_INFO_NUM_TILE_PIPES: -+ if (rdev->family >= CHIP_CAYMAN) -+ value = rdev->config.cayman.max_tile_pipes; -+ else if (rdev->family >= CHIP_CEDAR) -+ value = rdev->config.evergreen.max_tile_pipes; -+ else if (rdev->family >= CHIP_RV770) -+ value = rdev->config.rv770.max_tile_pipes; -+ else if (rdev->family >= CHIP_R600) -+ value = rdev->config.r600.max_tile_pipes; -+ else { -+ return -EINVAL; -+ } -+ break; - default: - DRM_DEBUG_KMS("Invalid request %d\n", info->request); - return -EINVAL; -diff --git a/drivers/gpu/drm/radeon/reg_srcs/r600 b/drivers/gpu/drm/radeon/reg_srcs/r600 -index af0da4a..92f1900 100644 ---- a/drivers/gpu/drm/radeon/reg_srcs/r600 -+++ b/drivers/gpu/drm/radeon/reg_srcs/r600 -@@ -708,6 +708,7 @@ r600 0x9400 - 0x00028D0C DB_RENDER_CONTROL - 0x00028D10 DB_RENDER_OVERRIDE - 0x0002880C DB_SHADER_CONTROL -+0x00028D28 DB_SRESULTS_COMPARE_STATE0 - 0x00028D2C DB_SRESULTS_COMPARE_STATE1 - 0x00028430 DB_STENCILREFMASK - 0x00028434 DB_STENCILREFMASK_BF -diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig -index 060ef63..50e40db 100644 ---- a/drivers/hwmon/Kconfig -+++ b/drivers/hwmon/Kconfig -@@ -110,8 +110,7 @@ config SENSORS_ADM1021 - help - If you say yes here you get support for Analog Devices ADM1021 - and ADM1023 sensor chips and clones: Maxim MAX1617 and MAX1617A, -- Genesys Logic GL523SM, National Semiconductor LM84, TI THMC10, -- and the XEON processor built-in sensor. -+ Genesys Logic GL523SM, National Semiconductor LM84 and TI THMC10. - - This driver can also be built as a module. If so, the module - will be called adm1021. -@@ -618,10 +617,10 @@ config SENSORS_LM90 - depends on I2C - help - If you say yes here you get support for National Semiconductor LM90, -- LM86, LM89 and LM99, Analog Devices ADM1032 and ADT7461, Maxim -- MAX6646, MAX6647, MAX6648, MAX6649, MAX6657, MAX6658, MAX6659, -- MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, and Winbond/Nuvoton -- W83L771W/G/AWG/ASG sensor chips. -+ LM86, LM89 and LM99, Analog Devices ADM1032, ADT7461, and ADT7461A, -+ Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6657, MAX6658, MAX6659, -+ MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, ON Semiconductor NCT1008, -+ and Winbond/Nuvoton W83L771W/G/AWG/ASG sensor chips. - - This driver can also be built as a module. If so, the module - will be called lm90. -diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c -index 250d099..da72dc1 100644 ---- a/drivers/hwmon/lm85.c -+++ b/drivers/hwmon/lm85.c -@@ -1094,6 +1094,7 @@ static struct attribute *lm85_attributes_minctl[] = { - &sensor_dev_attr_pwm1_auto_pwm_minctl.dev_attr.attr, - &sensor_dev_attr_pwm2_auto_pwm_minctl.dev_attr.attr, - &sensor_dev_attr_pwm3_auto_pwm_minctl.dev_attr.attr, -+ NULL - }; - - static const struct attribute_group lm85_group_minctl = { -@@ -1104,6 +1105,7 @@ static struct attribute *lm85_attributes_temp_off[] = { - &sensor_dev_attr_temp1_auto_temp_off.dev_attr.attr, - &sensor_dev_attr_temp2_auto_temp_off.dev_attr.attr, - &sensor_dev_attr_temp3_auto_temp_off.dev_attr.attr, -+ NULL - }; - - static const struct attribute_group lm85_group_temp_off = { -@@ -1329,11 +1331,11 @@ static int lm85_probe(struct i2c_client *client, - if (data->type != emc6d103s) { - err = sysfs_create_group(&client->dev.kobj, &lm85_group_minctl); - if (err) -- goto err_kfree; -+ goto err_remove_files; - err = sysfs_create_group(&client->dev.kobj, - &lm85_group_temp_off); - if (err) -- goto err_kfree; -+ goto err_remove_files; - } - - /* The ADT7463/68 have an optional VRM 10 mode where pin 21 is used -diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c -index c43b4e9..2f94f95 100644 ---- a/drivers/hwmon/lm90.c -+++ b/drivers/hwmon/lm90.c -@@ -49,10 +49,10 @@ - * chips, but support three temperature sensors instead of two. MAX6695 - * and MAX6696 only differ in the pinout so they can be treated identically. - * -- * This driver also supports the ADT7461 chip from Analog Devices. -- * It's supported in both compatibility and extended mode. It is mostly -- * compatible with LM90 except for a data format difference for the -- * temperature value registers. -+ * This driver also supports ADT7461 and ADT7461A from Analog Devices as well as -+ * NCT1008 from ON Semiconductor. The chips are supported in both compatibility -+ * and extended mode. They are mostly compatible with LM90 except for a data -+ * format difference for the temperature value registers. - * - * Since the LM90 was the first chipset supported by this driver, most - * comments will refer to this chipset, but are actually general and -@@ -88,9 +88,10 @@ - * Addresses to scan - * Address is fully defined internally and cannot be changed except for - * MAX6659, MAX6680 and MAX6681. -- * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6649, MAX6657, -- * MAX6658 and W83L771 have address 0x4c. -- * ADM1032-2, ADT7461-2, LM89-1, LM99-1 and MAX6646 have address 0x4d. -+ * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, ADT7461A, MAX6649, -+ * MAX6657, MAX6658, NCT1008 and W83L771 have address 0x4c. -+ * ADM1032-2, ADT7461-2, ADT7461A-2, LM89-1, LM99-1, MAX6646, and NCT1008D -+ * have address 0x4d. - * MAX6647 has address 0x4e. - * MAX6659 can have address 0x4c, 0x4d or 0x4e. - * MAX6680 and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, -@@ -174,6 +175,7 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680, - static const struct i2c_device_id lm90_id[] = { - { "adm1032", adm1032 }, - { "adt7461", adt7461 }, -+ { "adt7461a", adt7461 }, - { "lm90", lm90 }, - { "lm86", lm86 }, - { "lm89", lm86 }, -@@ -188,6 +190,7 @@ static const struct i2c_device_id lm90_id[] = { - { "max6681", max6680 }, - { "max6695", max6696 }, - { "max6696", max6696 }, -+ { "nct1008", adt7461 }, - { "w83l771", w83l771 }, - { } - }; -@@ -1153,6 +1156,11 @@ static int lm90_detect(struct i2c_client *new_client, - && (reg_config1 & 0x1B) == 0x00 - && reg_convrate <= 0x0A) { - name = "adt7461"; -+ } else -+ if (chip_id == 0x57 /* ADT7461A, NCT1008 */ -+ && (reg_config1 & 0x1B) == 0x00 -+ && reg_convrate <= 0x0A) { -+ name = "adt7461a"; - } - } else - if (man_id == 0x4D) { /* Maxim */ -diff --git a/drivers/infiniband/hw/qib/qib_iba6120.c b/drivers/infiniband/hw/qib/qib_iba6120.c -index 7de4b7e..d8ca0a0 100644 ---- a/drivers/infiniband/hw/qib/qib_iba6120.c -+++ b/drivers/infiniband/hw/qib/qib_iba6120.c -@@ -1799,7 +1799,7 @@ static int qib_6120_setup_reset(struct qib_devdata *dd) - /* - * Keep chip from being accessed until we are ready. Use - * writeq() directly, to allow the write even though QIB_PRESENT -- * isn't' set. -+ * isn't set. - */ - dd->flags &= ~(QIB_INITTED | QIB_PRESENT); - dd->int_counter = 0; /* so we check interrupts work again */ -diff --git a/drivers/infiniband/hw/qib/qib_iba7220.c b/drivers/infiniband/hw/qib/qib_iba7220.c -index 74fe036..c765a2e 100644 ---- a/drivers/infiniband/hw/qib/qib_iba7220.c -+++ b/drivers/infiniband/hw/qib/qib_iba7220.c -@@ -2111,7 +2111,7 @@ static int qib_setup_7220_reset(struct qib_devdata *dd) - /* - * Keep chip from being accessed until we are ready. Use - * writeq() directly, to allow the write even though QIB_PRESENT -- * isn't' set. -+ * isn't set. - */ - dd->flags &= ~(QIB_INITTED | QIB_PRESENT); - dd->int_counter = 0; /* so we check interrupts work again */ -diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c -index 55de3cf..6bab3ea 100644 ---- a/drivers/infiniband/hw/qib/qib_iba7322.c -+++ b/drivers/infiniband/hw/qib/qib_iba7322.c -@@ -3299,7 +3299,7 @@ static int qib_do_7322_reset(struct qib_devdata *dd) - /* - * Keep chip from being accessed until we are ready. Use - * writeq() directly, to allow the write even though QIB_PRESENT -- * isn't' set. -+ * isn't set. - */ - dd->flags &= ~(QIB_INITTED | QIB_PRESENT | QIB_BADINTR); - dd->flags |= QIB_DOING_RESET; -diff --git a/drivers/media/common/tuners/tda18271-common.c b/drivers/media/common/tuners/tda18271-common.c -index 5466d47..aae40e5 100644 ---- a/drivers/media/common/tuners/tda18271-common.c -+++ b/drivers/media/common/tuners/tda18271-common.c -@@ -533,16 +533,7 @@ int tda18271_calc_main_pll(struct dvb_frontend *fe, u32 freq) - if (tda_fail(ret)) - goto fail; - -- regs[R_MPD] = (0x77 & pd); -- -- switch (priv->mode) { -- case TDA18271_ANALOG: -- regs[R_MPD] &= ~0x08; -- break; -- case TDA18271_DIGITAL: -- regs[R_MPD] |= 0x08; -- break; -- } -+ regs[R_MPD] = (0x7f & pd); - - div = ((d * (freq / 1000)) << 7) / 125; - -diff --git a/drivers/media/common/tuners/tda18271-fe.c b/drivers/media/common/tuners/tda18271-fe.c -index 9ad4454..d884f5e 100644 ---- a/drivers/media/common/tuners/tda18271-fe.c -+++ b/drivers/media/common/tuners/tda18271-fe.c -@@ -579,8 +579,8 @@ static int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq) - #define RF3 2 - u32 rf_default[3]; - u32 rf_freq[3]; -- u8 prog_cal[3]; -- u8 prog_tab[3]; -+ s32 prog_cal[3]; -+ s32 prog_tab[3]; - - i = tda18271_lookup_rf_band(fe, &freq, NULL); - -@@ -602,32 +602,33 @@ static int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq) - return bcal; - - tda18271_calc_rf_cal(fe, &rf_freq[rf]); -- prog_tab[rf] = regs[R_EB14]; -+ prog_tab[rf] = (s32)regs[R_EB14]; - - if (1 == bcal) -- prog_cal[rf] = tda18271_calibrate_rf(fe, rf_freq[rf]); -+ prog_cal[rf] = -+ (s32)tda18271_calibrate_rf(fe, rf_freq[rf]); - else - prog_cal[rf] = prog_tab[rf]; - - switch (rf) { - case RF1: - map[i].rf_a1 = 0; -- map[i].rf_b1 = (s32)(prog_cal[RF1] - prog_tab[RF1]); -+ map[i].rf_b1 = (prog_cal[RF1] - prog_tab[RF1]); - map[i].rf1 = rf_freq[RF1] / 1000; - break; - case RF2: -- dividend = (s32)(prog_cal[RF2] - prog_tab[RF2]) - -- (s32)(prog_cal[RF1] + prog_tab[RF1]); -+ dividend = (prog_cal[RF2] - prog_tab[RF2] - -+ prog_cal[RF1] + prog_tab[RF1]); - divisor = (s32)(rf_freq[RF2] - rf_freq[RF1]) / 1000; - map[i].rf_a1 = (dividend / divisor); - map[i].rf2 = rf_freq[RF2] / 1000; - break; - case RF3: -- dividend = (s32)(prog_cal[RF3] - prog_tab[RF3]) - -- (s32)(prog_cal[RF2] + prog_tab[RF2]); -+ dividend = (prog_cal[RF3] - prog_tab[RF3] - -+ prog_cal[RF2] + prog_tab[RF2]); - divisor = (s32)(rf_freq[RF3] - rf_freq[RF2]) / 1000; - map[i].rf_a2 = (dividend / divisor); -- map[i].rf_b2 = (s32)(prog_cal[RF2] - prog_tab[RF2]); -+ map[i].rf_b2 = (prog_cal[RF2] - prog_tab[RF2]); - map[i].rf3 = rf_freq[RF3] / 1000; - break; - default: -diff --git a/drivers/media/common/tuners/tda18271-maps.c b/drivers/media/common/tuners/tda18271-maps.c -index e7f84c7..3d5b6ab 100644 ---- a/drivers/media/common/tuners/tda18271-maps.c -+++ b/drivers/media/common/tuners/tda18271-maps.c -@@ -229,8 +229,7 @@ static struct tda18271_map tda18271c2_km[] = { - static struct tda18271_map tda18271_rf_band[] = { - { .rfmax = 47900, .val = 0x00 }, - { .rfmax = 61100, .val = 0x01 }, --/* { .rfmax = 152600, .val = 0x02 }, */ -- { .rfmax = 121200, .val = 0x02 }, -+ { .rfmax = 152600, .val = 0x02 }, - { .rfmax = 164700, .val = 0x03 }, - { .rfmax = 203500, .val = 0x04 }, - { .rfmax = 457800, .val = 0x05 }, -@@ -448,7 +447,7 @@ static struct tda18271_map tda18271c2_rf_cal[] = { - { .rfmax = 150000, .val = 0xb0 }, - { .rfmax = 151000, .val = 0xb1 }, - { .rfmax = 152000, .val = 0xb7 }, -- { .rfmax = 153000, .val = 0xbd }, -+ { .rfmax = 152600, .val = 0xbd }, - { .rfmax = 154000, .val = 0x20 }, - { .rfmax = 155000, .val = 0x22 }, - { .rfmax = 156000, .val = 0x24 }, -@@ -459,7 +458,7 @@ static struct tda18271_map tda18271c2_rf_cal[] = { - { .rfmax = 161000, .val = 0x2d }, - { .rfmax = 163000, .val = 0x2e }, - { .rfmax = 164000, .val = 0x2f }, -- { .rfmax = 165000, .val = 0x30 }, -+ { .rfmax = 164700, .val = 0x30 }, - { .rfmax = 166000, .val = 0x11 }, - { .rfmax = 167000, .val = 0x12 }, - { .rfmax = 168000, .val = 0x13 }, -@@ -510,7 +509,8 @@ static struct tda18271_map tda18271c2_rf_cal[] = { - { .rfmax = 236000, .val = 0x1b }, - { .rfmax = 237000, .val = 0x1c }, - { .rfmax = 240000, .val = 0x1d }, -- { .rfmax = 242000, .val = 0x1f }, -+ { .rfmax = 242000, .val = 0x1e }, -+ { .rfmax = 244000, .val = 0x1f }, - { .rfmax = 247000, .val = 0x20 }, - { .rfmax = 249000, .val = 0x21 }, - { .rfmax = 252000, .val = 0x22 }, -@@ -624,7 +624,7 @@ static struct tda18271_map tda18271c2_rf_cal[] = { - { .rfmax = 453000, .val = 0x93 }, - { .rfmax = 454000, .val = 0x94 }, - { .rfmax = 456000, .val = 0x96 }, -- { .rfmax = 457000, .val = 0x98 }, -+ { .rfmax = 457800, .val = 0x98 }, - { .rfmax = 461000, .val = 0x11 }, - { .rfmax = 468000, .val = 0x12 }, - { .rfmax = 472000, .val = 0x13 }, -diff --git a/drivers/media/dvb/b2c2/flexcop-pci.c b/drivers/media/dvb/b2c2/flexcop-pci.c -index 9552540..03f96d6 100644 ---- a/drivers/media/dvb/b2c2/flexcop-pci.c -+++ b/drivers/media/dvb/b2c2/flexcop-pci.c -@@ -38,7 +38,7 @@ MODULE_PARM_DESC(debug, - DEBSTATUS); - - #define DRIVER_VERSION "0.1" --#define DRIVER_NAME "Technisat/B2C2 FlexCop II/IIb/III Digital TV PCI Driver" -+#define DRIVER_NAME "flexcop-pci" - #define DRIVER_AUTHOR "Patrick Boettcher " - - struct flexcop_pci { -diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig -index fe4f894..ccbd39a 100644 ---- a/drivers/media/dvb/dvb-usb/Kconfig -+++ b/drivers/media/dvb/dvb-usb/Kconfig -@@ -362,7 +362,7 @@ config DVB_USB_LME2510 - config DVB_USB_TECHNISAT_USB2 - tristate "Technisat DVB-S/S2 USB2.0 support" - depends on DVB_USB -- select DVB_STB0899 if !DVB_FE_CUSTOMISE -- select DVB_STB6100 if !DVB_FE_CUSTOMISE -+ select DVB_STV090x if !DVB_FE_CUSTOMISE -+ select DVB_STV6110x if !DVB_FE_CUSTOMISE - help - Say Y here to support the Technisat USB2 DVB-S/S2 device -diff --git a/drivers/media/dvb/dvb-usb/dib0700_devices.c b/drivers/media/dvb/dvb-usb/dib0700_devices.c -index 97af266..65214af 100644 ---- a/drivers/media/dvb/dvb-usb/dib0700_devices.c -+++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c -@@ -2162,7 +2162,7 @@ struct dibx000_agc_config dib7090_agc_config[2] = { - .agc1_pt3 = 98, - .agc1_slope1 = 0, - .agc1_slope2 = 167, -- .agc1_pt1 = 98, -+ .agc2_pt1 = 98, - .agc2_pt2 = 255, - .agc2_slope1 = 104, - .agc2_slope2 = 0, -@@ -2440,11 +2440,11 @@ static int tfe7090pvr_frontend0_attach(struct dvb_usb_adapter *adap) - dib0700_set_i2c_speed(adap->dev, 340); - adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x90, &tfe7090pvr_dib7000p_config[0]); - -- dib7090_slave_reset(adap->fe); -- - if (adap->fe == NULL) - return -ENODEV; - -+ dib7090_slave_reset(adap->fe); -+ - return 0; - } - -diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c -index 23640ed..056138f 100644 ---- a/drivers/media/media-entity.c -+++ b/drivers/media/media-entity.c -@@ -378,7 +378,6 @@ EXPORT_SYMBOL_GPL(media_entity_create_link); - - static int __media_entity_setup_link_notify(struct media_link *link, u32 flags) - { -- const u32 mask = MEDIA_LNK_FL_ENABLED; - int ret; - - /* Notify both entities. */ -@@ -395,7 +394,7 @@ static int __media_entity_setup_link_notify(struct media_link *link, u32 flags) - return ret; - } - -- link->flags = (link->flags & ~mask) | (flags & mask); -+ link->flags = flags; - link->reverse->flags = link->flags; - - return 0; -@@ -417,6 +416,7 @@ static int __media_entity_setup_link_notify(struct media_link *link, u32 flags) - */ - int __media_entity_setup_link(struct media_link *link, u32 flags) - { -+ const u32 mask = MEDIA_LNK_FL_ENABLED; - struct media_device *mdev; - struct media_entity *source, *sink; - int ret = -EBUSY; -@@ -424,6 +424,10 @@ int __media_entity_setup_link(struct media_link *link, u32 flags) - if (link == NULL) - return -EINVAL; - -+ /* The non-modifiable link flags must not be modified. */ -+ if ((link->flags & ~mask) != (flags & ~mask)) -+ return -EINVAL; -+ - if (link->flags & MEDIA_LNK_FL_IMMUTABLE) - return link->flags == flags ? 0 : -EINVAL; - -diff --git a/drivers/media/radio/radio-sf16fmr2.c b/drivers/media/radio/radio-sf16fmr2.c -index dc3f04c..87bad76 100644 ---- a/drivers/media/radio/radio-sf16fmr2.c -+++ b/drivers/media/radio/radio-sf16fmr2.c -@@ -170,7 +170,7 @@ static int fmr2_setfreq(struct fmr2 *dev) - return 0; - } - --/* !!! not tested, in my card this does't work !!! */ -+/* !!! not tested, in my card this doesn't work !!! */ - static int fmr2_setvolume(struct fmr2 *dev) - { - int vol[16] = { 0x021, 0x084, 0x090, 0x104, -diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig -index 4498b94..00f51dd 100644 ---- a/drivers/media/video/Kconfig -+++ b/drivers/media/video/Kconfig -@@ -875,7 +875,7 @@ config MX3_VIDEO - config VIDEO_MX3 - tristate "i.MX3x Camera Sensor Interface driver" - depends on VIDEO_DEV && MX3_IPU && SOC_CAMERA -- select VIDEOBUF_DMA_CONTIG -+ select VIDEOBUF2_DMA_CONTIG - select MX3_VIDEO - ---help--- - This is a v4l2 driver for the i.MX3x Camera Sensor Interface -diff --git a/drivers/media/video/cx18/cx18-streams.c b/drivers/media/video/cx18/cx18-streams.c -index c6e2ca3..6fbc356 100644 ---- a/drivers/media/video/cx18/cx18-streams.c -+++ b/drivers/media/video/cx18/cx18-streams.c -@@ -350,9 +350,17 @@ void cx18_streams_cleanup(struct cx18 *cx, int unregister) - - /* No struct video_device, but can have buffers allocated */ - if (type == CX18_ENC_STREAM_TYPE_IDX) { -+ /* If the module params didn't inhibit IDX ... */ - if (cx->stream_buffers[type] != 0) { - cx->stream_buffers[type] = 0; -- cx18_stream_free(&cx->streams[type]); -+ /* -+ * Before calling cx18_stream_free(), -+ * check if the IDX stream was actually set up. -+ * Needed, since the cx18_probe() error path -+ * exits through here as well as normal clean up -+ */ -+ if (cx->streams[type].buffers != 0) -+ cx18_stream_free(&cx->streams[type]); - } - continue; - } -diff --git a/drivers/media/video/cx23885/Kconfig b/drivers/media/video/cx23885/Kconfig -index 3b6e7f2..caab1bf 100644 ---- a/drivers/media/video/cx23885/Kconfig -+++ b/drivers/media/video/cx23885/Kconfig -@@ -22,6 +22,7 @@ config VIDEO_CX23885 - select DVB_CX24116 if !DVB_FE_CUSTOMISE - select DVB_STV0900 if !DVB_FE_CUSTOMISE - select DVB_DS3000 if !DVB_FE_CUSTOMISE -+ select DVB_STV0367 if !DVB_FE_CUSTOMISE - select MEDIA_TUNER_MT2131 if !MEDIA_TUNER_CUSTOMISE - select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMISE - select MEDIA_TUNER_TDA8290 if !MEDIA_TUNER_CUSTOMISE -diff --git a/drivers/media/video/imx074.c b/drivers/media/video/imx074.c -index 1a11691..0382ea7 100644 ---- a/drivers/media/video/imx074.c -+++ b/drivers/media/video/imx074.c -@@ -298,7 +298,7 @@ static unsigned long imx074_query_bus_param(struct soc_camera_device *icd) - static int imx074_set_bus_param(struct soc_camera_device *icd, - unsigned long flags) - { -- return -1; -+ return -EINVAL; - } - - static struct soc_camera_ops imx074_ops = { -diff --git a/drivers/media/video/omap3isp/isp.c b/drivers/media/video/omap3isp/isp.c -index 503bd79..472a693 100644 ---- a/drivers/media/video/omap3isp/isp.c -+++ b/drivers/media/video/omap3isp/isp.c -@@ -215,20 +215,21 @@ static u32 isp_set_xclk(struct isp_device *isp, u32 xclk, u8 xclksel) - } - - switch (xclksel) { -- case 0: -+ case ISP_XCLK_A: - isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, - ISPTCTRL_CTRL_DIVA_MASK, - divisor << ISPTCTRL_CTRL_DIVA_SHIFT); - dev_dbg(isp->dev, "isp_set_xclk(): cam_xclka set to %d Hz\n", - currentxclk); - break; -- case 1: -+ case ISP_XCLK_B: - isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, - ISPTCTRL_CTRL_DIVB_MASK, - divisor << ISPTCTRL_CTRL_DIVB_SHIFT); - dev_dbg(isp->dev, "isp_set_xclk(): cam_xclkb set to %d Hz\n", - currentxclk); - break; -+ case ISP_XCLK_NONE: - default: - omap3isp_put(isp); - dev_dbg(isp->dev, "ISP_ERR: isp_set_xclk(): Invalid requested " -@@ -237,13 +238,13 @@ static u32 isp_set_xclk(struct isp_device *isp, u32 xclk, u8 xclksel) - } - - /* Do we go from stable whatever to clock? */ -- if (divisor >= 2 && isp->xclk_divisor[xclksel] < 2) -+ if (divisor >= 2 && isp->xclk_divisor[xclksel - 1] < 2) - omap3isp_get(isp); - /* Stopping the clock. */ -- else if (divisor < 2 && isp->xclk_divisor[xclksel] >= 2) -+ else if (divisor < 2 && isp->xclk_divisor[xclksel - 1] >= 2) - omap3isp_put(isp); - -- isp->xclk_divisor[xclksel] = divisor; -+ isp->xclk_divisor[xclksel - 1] = divisor; - - omap3isp_put(isp); - -@@ -285,7 +286,8 @@ static void isp_power_settings(struct isp_device *isp, int idle) - */ - void omap3isp_configure_bridge(struct isp_device *isp, - enum ccdc_input_entity input, -- const struct isp_parallel_platform_data *pdata) -+ const struct isp_parallel_platform_data *pdata, -+ unsigned int shift) - { - u32 ispctrl_val; - -@@ -298,9 +300,9 @@ void omap3isp_configure_bridge(struct isp_device *isp, - switch (input) { - case CCDC_INPUT_PARALLEL: - ispctrl_val |= ISPCTRL_PAR_SER_CLK_SEL_PARALLEL; -- ispctrl_val |= pdata->data_lane_shift << ISPCTRL_SHIFT_SHIFT; - ispctrl_val |= pdata->clk_pol << ISPCTRL_PAR_CLK_POL_SHIFT; - ispctrl_val |= pdata->bridge << ISPCTRL_PAR_BRIDGE_SHIFT; -+ shift += pdata->data_lane_shift * 2; - break; - - case CCDC_INPUT_CSI2A: -@@ -319,6 +321,8 @@ void omap3isp_configure_bridge(struct isp_device *isp, - return; - } - -+ ispctrl_val |= ((shift/2) << ISPCTRL_SHIFT_SHIFT) & ISPCTRL_SHIFT_MASK; -+ - ispctrl_val &= ~ISPCTRL_SYNC_DETECT_MASK; - ispctrl_val |= ISPCTRL_SYNC_DETECT_VSRISE; - -@@ -658,6 +662,8 @@ int omap3isp_pipeline_pm_use(struct media_entity *entity, int use) - - /* Apply power change to connected non-nodes. */ - ret = isp_pipeline_pm_power(entity, change); -+ if (ret < 0) -+ entity->use_count -= change; - - mutex_unlock(&entity->parent->graph_mutex); - -@@ -872,6 +878,9 @@ static int isp_pipeline_disable(struct isp_pipeline *pipe) - } - } - -+ if (failure < 0) -+ isp->needs_reset = true; -+ - return failure; - } - -@@ -884,7 +893,8 @@ static int isp_pipeline_disable(struct isp_pipeline *pipe) - * single-shot or continuous mode. - * - * Return 0 if successful, or the return value of the failed video::s_stream -- * operation otherwise. -+ * operation otherwise. The pipeline state is not updated when the operation -+ * fails, except when stopping the pipeline. - */ - int omap3isp_pipeline_set_stream(struct isp_pipeline *pipe, - enum isp_pipeline_stream_state state) -@@ -895,7 +905,9 @@ int omap3isp_pipeline_set_stream(struct isp_pipeline *pipe, - ret = isp_pipeline_disable(pipe); - else - ret = isp_pipeline_enable(pipe, state); -- pipe->stream_state = state; -+ -+ if (ret == 0 || state == ISP_PIPELINE_STREAM_STOPPED) -+ pipe->stream_state = state; - - return ret; - } -@@ -1481,6 +1493,10 @@ void omap3isp_put(struct isp_device *isp) - if (--isp->ref_count == 0) { - isp_disable_interrupts(isp); - isp_save_ctx(isp); -+ if (isp->needs_reset) { -+ isp_reset(isp); -+ isp->needs_reset = false; -+ } - isp_disable_clocks(isp); - } - mutex_unlock(&isp->isp_mutex); -diff --git a/drivers/media/video/omap3isp/isp.h b/drivers/media/video/omap3isp/isp.h -index cf5214e..2620c40 100644 ---- a/drivers/media/video/omap3isp/isp.h -+++ b/drivers/media/video/omap3isp/isp.h -@@ -132,7 +132,6 @@ struct isp_reg { - - /** - * struct isp_parallel_platform_data - Parallel interface platform data -- * @width: Parallel bus width in bits (8, 10, 11 or 12) - * @data_lane_shift: Data lane shifter - * 0 - CAMEXT[13:0] -> CAM[13:0] - * 1 - CAMEXT[13:2] -> CAM[11:0] -@@ -146,7 +145,6 @@ struct isp_reg { - * ISPCTRL_PAR_BRIDGE_BENDIAN - Big endian - */ - struct isp_parallel_platform_data { -- unsigned int width; - unsigned int data_lane_shift:2; - unsigned int clk_pol:1; - unsigned int bridge:4; -@@ -262,6 +260,7 @@ struct isp_device { - /* ISP Obj */ - spinlock_t stat_lock; /* common lock for statistic drivers */ - struct mutex isp_mutex; /* For handling ref_count field */ -+ bool needs_reset; - int has_context; - int ref_count; - unsigned int autoidle; -@@ -311,11 +310,12 @@ int omap3isp_pipeline_set_stream(struct isp_pipeline *pipe, - enum isp_pipeline_stream_state state); - void omap3isp_configure_bridge(struct isp_device *isp, - enum ccdc_input_entity input, -- const struct isp_parallel_platform_data *pdata); -+ const struct isp_parallel_platform_data *pdata, -+ unsigned int shift); - --#define ISP_XCLK_NONE -1 --#define ISP_XCLK_A 0 --#define ISP_XCLK_B 1 -+#define ISP_XCLK_NONE 0 -+#define ISP_XCLK_A 1 -+#define ISP_XCLK_B 2 - - struct isp_device *omap3isp_get(struct isp_device *isp); - void omap3isp_put(struct isp_device *isp); -diff --git a/drivers/media/video/omap3isp/ispccdc.c b/drivers/media/video/omap3isp/ispccdc.c -index 5ff9d14..39d501b 100644 ---- a/drivers/media/video/omap3isp/ispccdc.c -+++ b/drivers/media/video/omap3isp/ispccdc.c -@@ -43,6 +43,12 @@ __ccdc_get_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_fh *fh, - - static const unsigned int ccdc_fmts[] = { - V4L2_MBUS_FMT_Y8_1X8, -+ V4L2_MBUS_FMT_Y10_1X10, -+ V4L2_MBUS_FMT_Y12_1X12, -+ V4L2_MBUS_FMT_SGRBG8_1X8, -+ V4L2_MBUS_FMT_SRGGB8_1X8, -+ V4L2_MBUS_FMT_SBGGR8_1X8, -+ V4L2_MBUS_FMT_SGBRG8_1X8, - V4L2_MBUS_FMT_SGRBG10_1X10, - V4L2_MBUS_FMT_SRGGB10_1X10, - V4L2_MBUS_FMT_SBGGR10_1X10, -@@ -1110,21 +1116,38 @@ static void ccdc_configure(struct isp_ccdc_device *ccdc) - struct isp_parallel_platform_data *pdata = NULL; - struct v4l2_subdev *sensor; - struct v4l2_mbus_framefmt *format; -+ const struct isp_format_info *fmt_info; -+ struct v4l2_subdev_format fmt_src; -+ unsigned int depth_out; -+ unsigned int depth_in = 0; - struct media_pad *pad; - unsigned long flags; -+ unsigned int shift; - u32 syn_mode; - u32 ccdc_pattern; - -- if (ccdc->input == CCDC_INPUT_PARALLEL) { -- pad = media_entity_remote_source(&ccdc->pads[CCDC_PAD_SINK]); -- sensor = media_entity_to_v4l2_subdev(pad->entity); -+ pad = media_entity_remote_source(&ccdc->pads[CCDC_PAD_SINK]); -+ sensor = media_entity_to_v4l2_subdev(pad->entity); -+ if (ccdc->input == CCDC_INPUT_PARALLEL) - pdata = &((struct isp_v4l2_subdevs_group *)sensor->host_priv) - ->bus.parallel; -+ -+ /* Compute shift value for lane shifter to configure the bridge. */ -+ fmt_src.pad = pad->index; -+ fmt_src.which = V4L2_SUBDEV_FORMAT_ACTIVE; -+ if (!v4l2_subdev_call(sensor, pad, get_fmt, NULL, &fmt_src)) { -+ fmt_info = omap3isp_video_format_info(fmt_src.format.code); -+ depth_in = fmt_info->bpp; - } - -- omap3isp_configure_bridge(isp, ccdc->input, pdata); -+ fmt_info = omap3isp_video_format_info -+ (isp->isp_ccdc.formats[CCDC_PAD_SINK].code); -+ depth_out = fmt_info->bpp; -+ -+ shift = depth_in - depth_out; -+ omap3isp_configure_bridge(isp, ccdc->input, pdata, shift); - -- ccdc->syncif.datsz = pdata ? pdata->width : 10; -+ ccdc->syncif.datsz = depth_out; - ccdc_config_sync_if(ccdc, &ccdc->syncif); - - /* CCDC_PAD_SINK */ -@@ -1338,7 +1361,7 @@ static int ccdc_sbl_wait_idle(struct isp_ccdc_device *ccdc, - * @ccdc: Pointer to ISP CCDC device. - * @event: Pointing which event trigger handler - * -- * Return 1 when the event and stopping request combination is satisfyied, -+ * Return 1 when the event and stopping request combination is satisfied, - * zero otherwise. - */ - static int __ccdc_handle_stopping(struct isp_ccdc_device *ccdc, u32 event) -@@ -1618,7 +1641,7 @@ static int ccdc_video_queue(struct isp_video *video, struct isp_buffer *buffer) - - ccdc_set_outaddr(ccdc, buffer->isp_addr); - -- /* We now have a buffer queued on the output, restart the pipeline in -+ /* We now have a buffer queued on the output, restart the pipeline - * on the next CCDC interrupt if running in continuous mode (or when - * starting the stream). - */ -diff --git a/drivers/media/video/omap3isp/isppreview.c b/drivers/media/video/omap3isp/isppreview.c -index 2b16988..aba537a 100644 ---- a/drivers/media/video/omap3isp/isppreview.c -+++ b/drivers/media/video/omap3isp/isppreview.c -@@ -755,7 +755,7 @@ static struct preview_update update_attrs[] = { - * @configs - pointer to update config structure. - * @config - return pointer to appropriate structure field. - * @bit - for which feature to return pointers. -- * Return size of coresponding prev_params member -+ * Return size of corresponding prev_params member - */ - static u32 - __preview_get_ptrs(struct prev_params *params, void **param, -diff --git a/drivers/media/video/omap3isp/ispqueue.c b/drivers/media/video/omap3isp/ispqueue.c -index 8fddc58..9c31714 100644 ---- a/drivers/media/video/omap3isp/ispqueue.c -+++ b/drivers/media/video/omap3isp/ispqueue.c -@@ -339,7 +339,7 @@ static int isp_video_buffer_prepare_user(struct isp_video_buffer *buf) - up_read(¤t->mm->mmap_sem); - - if (ret != buf->npages) { -- buf->npages = ret; -+ buf->npages = ret < 0 ? 0 : ret; - isp_video_buffer_cleanup(buf); - return -EFAULT; - } -@@ -408,8 +408,8 @@ done: - * isp_video_buffer_prepare_vm_flags - Get VMA flags for a userspace address - * - * This function locates the VMAs for the buffer's userspace address and checks -- * that their flags match. The onlflag that we need to care for at the moment is -- * VM_PFNMAP. -+ * that their flags match. The only flag that we need to care for at the moment -+ * is VM_PFNMAP. - * - * The buffer vm_flags field is set to the first VMA flags. - * -diff --git a/drivers/media/video/omap3isp/ispresizer.c b/drivers/media/video/omap3isp/ispresizer.c -index 653f88b..0bb0f8c 100644 ---- a/drivers/media/video/omap3isp/ispresizer.c -+++ b/drivers/media/video/omap3isp/ispresizer.c -@@ -714,19 +714,50 @@ static void resizer_print_status(struct isp_res_device *res) - * iw and ih are the input width and height after cropping. Those equations need - * to be satisfied exactly for the resizer to work correctly. - * -- * Reverting the equations, we can compute the resizing ratios with -+ * The equations can't be easily reverted, as the >> 8 operation is not linear. -+ * In addition, not all input sizes can be achieved for a given output size. To -+ * get the highest input size lower than or equal to the requested input size, -+ * we need to compute the highest resizing ratio that satisfies the following -+ * inequality (taking the 4-tap mode width equation as an example) -+ * -+ * iw >= (32 * sph + (ow - 1) * hrsz + 16) >> 8 - 7 -+ * -+ * (where iw is the requested input width) which can be rewritten as -+ * -+ * iw - 7 >= (32 * sph + (ow - 1) * hrsz + 16) >> 8 -+ * (iw - 7) << 8 >= 32 * sph + (ow - 1) * hrsz + 16 - b -+ * ((iw - 7) << 8) + b >= 32 * sph + (ow - 1) * hrsz + 16 -+ * -+ * where b is the value of the 8 least significant bits of the right hand side -+ * expression of the last inequality. The highest resizing ratio value will be -+ * achieved when b is equal to its maximum value of 255. That resizing ratio -+ * value will still satisfy the original inequality, as b will disappear when -+ * the expression will be shifted right by 8. -+ * -+ * The reverted the equations thus become - * - * - 8-phase, 4-tap mode -- * hrsz = ((iw - 7) * 256 - 16 - 32 * sph) / (ow - 1) -- * vrsz = ((ih - 4) * 256 - 16 - 32 * spv) / (oh - 1) -+ * hrsz = ((iw - 7) * 256 + 255 - 16 - 32 * sph) / (ow - 1) -+ * vrsz = ((ih - 4) * 256 + 255 - 16 - 32 * spv) / (oh - 1) - * - 4-phase, 7-tap mode -- * hrsz = ((iw - 7) * 256 - 32 - 64 * sph) / (ow - 1) -- * vrsz = ((ih - 7) * 256 - 32 - 64 * spv) / (oh - 1) -+ * hrsz = ((iw - 7) * 256 + 255 - 32 - 64 * sph) / (ow - 1) -+ * vrsz = ((ih - 7) * 256 + 255 - 32 - 64 * spv) / (oh - 1) - * -- * The ratios are integer values, and must be rounded down to ensure that the -- * cropped input size is not bigger than the uncropped input size. As the ratio -- * in 7-tap mode is always smaller than the ratio in 4-tap mode, we can use the -- * 7-tap mode equations to compute a ratio approximation. -+ * The ratios are integer values, and are rounded down to ensure that the -+ * cropped input size is not bigger than the uncropped input size. -+ * -+ * As the number of phases/taps, used to select the correct equations to compute -+ * the ratio, depends on the ratio, we start with the 4-tap mode equations to -+ * compute an approximation of the ratio, and switch to the 7-tap mode equations -+ * if the approximation is higher than the ratio threshold. -+ * -+ * As the 7-tap mode equations will return a ratio smaller than or equal to the -+ * 4-tap mode equations, the resulting ratio could become lower than or equal to -+ * the ratio threshold. This 'equations loop' isn't an issue as long as the -+ * correct equations are used to compute the final input size. Starting with the -+ * 4-tap mode equations ensure that, in case of values resulting in a 'ratio -+ * loop', the smallest of the ratio values will be used, never exceeding the -+ * requested input size. - * - * We first clamp the output size according to the hardware capabilitie to avoid - * auto-cropping the input more than required to satisfy the TRM equations. The -@@ -775,6 +806,8 @@ static void resizer_calc_ratios(struct isp_res_device *res, - unsigned int max_width; - unsigned int max_height; - unsigned int width_alignment; -+ unsigned int width; -+ unsigned int height; - - /* - * Clamp the output height based on the hardware capabilities and -@@ -786,19 +819,22 @@ static void resizer_calc_ratios(struct isp_res_device *res, - max_height = min_t(unsigned int, max_height, MAX_OUT_HEIGHT); - output->height = clamp(output->height, min_height, max_height); - -- ratio->vert = ((input->height - 7) * 256 - 32 - 64 * spv) -+ ratio->vert = ((input->height - 4) * 256 + 255 - 16 - 32 * spv) - / (output->height - 1); -+ if (ratio->vert > MID_RESIZE_VALUE) -+ ratio->vert = ((input->height - 7) * 256 + 255 - 32 - 64 * spv) -+ / (output->height - 1); - ratio->vert = clamp_t(unsigned int, ratio->vert, - MIN_RESIZE_VALUE, MAX_RESIZE_VALUE); - - if (ratio->vert <= MID_RESIZE_VALUE) { - upscaled_height = (output->height - 1) * ratio->vert - + 32 * spv + 16; -- input->height = (upscaled_height >> 8) + 4; -+ height = (upscaled_height >> 8) + 4; - } else { - upscaled_height = (output->height - 1) * ratio->vert - + 64 * spv + 32; -- input->height = (upscaled_height >> 8) + 7; -+ height = (upscaled_height >> 8) + 7; - } - - /* -@@ -854,20 +890,29 @@ static void resizer_calc_ratios(struct isp_res_device *res, - max_width & ~(width_alignment - 1)); - output->width = ALIGN(output->width, width_alignment); - -- ratio->horz = ((input->width - 7) * 256 - 32 - 64 * sph) -+ ratio->horz = ((input->width - 7) * 256 + 255 - 16 - 32 * sph) - / (output->width - 1); -+ if (ratio->horz > MID_RESIZE_VALUE) -+ ratio->horz = ((input->width - 7) * 256 + 255 - 32 - 64 * sph) -+ / (output->width - 1); - ratio->horz = clamp_t(unsigned int, ratio->horz, - MIN_RESIZE_VALUE, MAX_RESIZE_VALUE); - - if (ratio->horz <= MID_RESIZE_VALUE) { - upscaled_width = (output->width - 1) * ratio->horz - + 32 * sph + 16; -- input->width = (upscaled_width >> 8) + 7; -+ width = (upscaled_width >> 8) + 7; - } else { - upscaled_width = (output->width - 1) * ratio->horz - + 64 * sph + 32; -- input->width = (upscaled_width >> 8) + 7; -+ width = (upscaled_width >> 8) + 7; - } -+ -+ /* Center the new crop rectangle. */ -+ input->left += (input->width - width) / 2; -+ input->top += (input->height - height) / 2; -+ input->width = width; -+ input->height = height; - } - - /* -diff --git a/drivers/media/video/omap3isp/ispstat.h b/drivers/media/video/omap3isp/ispstat.h -index 820950c..d86da94 100644 ---- a/drivers/media/video/omap3isp/ispstat.h -+++ b/drivers/media/video/omap3isp/ispstat.h -@@ -131,9 +131,9 @@ struct ispstat { - struct ispstat_generic_config { - /* - * Fields must be in the same order as in: -- * - isph3a_aewb_config -- * - isph3a_af_config -- * - isphist_config -+ * - omap3isp_h3a_aewb_config -+ * - omap3isp_h3a_af_config -+ * - omap3isp_hist_config - */ - u32 buf_size; - u16 config_counter; -diff --git a/drivers/media/video/omap3isp/ispvideo.c b/drivers/media/video/omap3isp/ispvideo.c -index 208a7ec..9cd8f1a 100644 ---- a/drivers/media/video/omap3isp/ispvideo.c -+++ b/drivers/media/video/omap3isp/ispvideo.c -@@ -47,29 +47,59 @@ - - static struct isp_format_info formats[] = { - { V4L2_MBUS_FMT_Y8_1X8, V4L2_MBUS_FMT_Y8_1X8, -- V4L2_MBUS_FMT_Y8_1X8, V4L2_PIX_FMT_GREY, 8, }, -+ V4L2_MBUS_FMT_Y8_1X8, V4L2_MBUS_FMT_Y8_1X8, -+ V4L2_PIX_FMT_GREY, 8, }, -+ { V4L2_MBUS_FMT_Y10_1X10, V4L2_MBUS_FMT_Y10_1X10, -+ V4L2_MBUS_FMT_Y10_1X10, V4L2_MBUS_FMT_Y8_1X8, -+ V4L2_PIX_FMT_Y10, 10, }, -+ { V4L2_MBUS_FMT_Y12_1X12, V4L2_MBUS_FMT_Y10_1X10, -+ V4L2_MBUS_FMT_Y12_1X12, V4L2_MBUS_FMT_Y8_1X8, -+ V4L2_PIX_FMT_Y12, 12, }, -+ { V4L2_MBUS_FMT_SBGGR8_1X8, V4L2_MBUS_FMT_SBGGR8_1X8, -+ V4L2_MBUS_FMT_SBGGR8_1X8, V4L2_MBUS_FMT_SBGGR8_1X8, -+ V4L2_PIX_FMT_SBGGR8, 8, }, -+ { V4L2_MBUS_FMT_SGBRG8_1X8, V4L2_MBUS_FMT_SGBRG8_1X8, -+ V4L2_MBUS_FMT_SGBRG8_1X8, V4L2_MBUS_FMT_SGBRG8_1X8, -+ V4L2_PIX_FMT_SGBRG8, 8, }, -+ { V4L2_MBUS_FMT_SGRBG8_1X8, V4L2_MBUS_FMT_SGRBG8_1X8, -+ V4L2_MBUS_FMT_SGRBG8_1X8, V4L2_MBUS_FMT_SGRBG8_1X8, -+ V4L2_PIX_FMT_SGRBG8, 8, }, -+ { V4L2_MBUS_FMT_SRGGB8_1X8, V4L2_MBUS_FMT_SRGGB8_1X8, -+ V4L2_MBUS_FMT_SRGGB8_1X8, V4L2_MBUS_FMT_SRGGB8_1X8, -+ V4L2_PIX_FMT_SRGGB8, 8, }, - { V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8, V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8, -- V4L2_MBUS_FMT_SGRBG10_1X10, V4L2_PIX_FMT_SGRBG10DPCM8, 8, }, -+ V4L2_MBUS_FMT_SGRBG10_1X10, 0, -+ V4L2_PIX_FMT_SGRBG10DPCM8, 8, }, - { V4L2_MBUS_FMT_SBGGR10_1X10, V4L2_MBUS_FMT_SBGGR10_1X10, -- V4L2_MBUS_FMT_SBGGR10_1X10, V4L2_PIX_FMT_SBGGR10, 10, }, -+ V4L2_MBUS_FMT_SBGGR10_1X10, V4L2_MBUS_FMT_SBGGR8_1X8, -+ V4L2_PIX_FMT_SBGGR10, 10, }, - { V4L2_MBUS_FMT_SGBRG10_1X10, V4L2_MBUS_FMT_SGBRG10_1X10, -- V4L2_MBUS_FMT_SGBRG10_1X10, V4L2_PIX_FMT_SGBRG10, 10, }, -+ V4L2_MBUS_FMT_SGBRG10_1X10, V4L2_MBUS_FMT_SGBRG8_1X8, -+ V4L2_PIX_FMT_SGBRG10, 10, }, - { V4L2_MBUS_FMT_SGRBG10_1X10, V4L2_MBUS_FMT_SGRBG10_1X10, -- V4L2_MBUS_FMT_SGRBG10_1X10, V4L2_PIX_FMT_SGRBG10, 10, }, -+ V4L2_MBUS_FMT_SGRBG10_1X10, V4L2_MBUS_FMT_SGRBG8_1X8, -+ V4L2_PIX_FMT_SGRBG10, 10, }, - { V4L2_MBUS_FMT_SRGGB10_1X10, V4L2_MBUS_FMT_SRGGB10_1X10, -- V4L2_MBUS_FMT_SRGGB10_1X10, V4L2_PIX_FMT_SRGGB10, 10, }, -+ V4L2_MBUS_FMT_SRGGB10_1X10, V4L2_MBUS_FMT_SRGGB8_1X8, -+ V4L2_PIX_FMT_SRGGB10, 10, }, - { V4L2_MBUS_FMT_SBGGR12_1X12, V4L2_MBUS_FMT_SBGGR10_1X10, -- V4L2_MBUS_FMT_SBGGR12_1X12, V4L2_PIX_FMT_SBGGR12, 12, }, -+ V4L2_MBUS_FMT_SBGGR12_1X12, V4L2_MBUS_FMT_SBGGR8_1X8, -+ V4L2_PIX_FMT_SBGGR12, 12, }, - { V4L2_MBUS_FMT_SGBRG12_1X12, V4L2_MBUS_FMT_SGBRG10_1X10, -- V4L2_MBUS_FMT_SGBRG12_1X12, V4L2_PIX_FMT_SGBRG12, 12, }, -+ V4L2_MBUS_FMT_SGBRG12_1X12, V4L2_MBUS_FMT_SGBRG8_1X8, -+ V4L2_PIX_FMT_SGBRG12, 12, }, - { V4L2_MBUS_FMT_SGRBG12_1X12, V4L2_MBUS_FMT_SGRBG10_1X10, -- V4L2_MBUS_FMT_SGRBG12_1X12, V4L2_PIX_FMT_SGRBG12, 12, }, -+ V4L2_MBUS_FMT_SGRBG12_1X12, V4L2_MBUS_FMT_SGRBG8_1X8, -+ V4L2_PIX_FMT_SGRBG12, 12, }, - { V4L2_MBUS_FMT_SRGGB12_1X12, V4L2_MBUS_FMT_SRGGB10_1X10, -- V4L2_MBUS_FMT_SRGGB12_1X12, V4L2_PIX_FMT_SRGGB12, 12, }, -+ V4L2_MBUS_FMT_SRGGB12_1X12, V4L2_MBUS_FMT_SRGGB8_1X8, -+ V4L2_PIX_FMT_SRGGB12, 12, }, - { V4L2_MBUS_FMT_UYVY8_1X16, V4L2_MBUS_FMT_UYVY8_1X16, -- V4L2_MBUS_FMT_UYVY8_1X16, V4L2_PIX_FMT_UYVY, 16, }, -+ V4L2_MBUS_FMT_UYVY8_1X16, 0, -+ V4L2_PIX_FMT_UYVY, 16, }, - { V4L2_MBUS_FMT_YUYV8_1X16, V4L2_MBUS_FMT_YUYV8_1X16, -- V4L2_MBUS_FMT_YUYV8_1X16, V4L2_PIX_FMT_YUYV, 16, }, -+ V4L2_MBUS_FMT_YUYV8_1X16, 0, -+ V4L2_PIX_FMT_YUYV, 16, }, - }; - - const struct isp_format_info * -@@ -86,6 +116,37 @@ omap3isp_video_format_info(enum v4l2_mbus_pixelcode code) - } - - /* -+ * Decide whether desired output pixel code can be obtained with -+ * the lane shifter by shifting the input pixel code. -+ * @in: input pixelcode to shifter -+ * @out: output pixelcode from shifter -+ * @additional_shift: # of bits the sensor's LSB is offset from CAMEXT[0] -+ * -+ * return true if the combination is possible -+ * return false otherwise -+ */ -+static bool isp_video_is_shiftable(enum v4l2_mbus_pixelcode in, -+ enum v4l2_mbus_pixelcode out, -+ unsigned int additional_shift) -+{ -+ const struct isp_format_info *in_info, *out_info; -+ -+ if (in == out) -+ return true; -+ -+ in_info = omap3isp_video_format_info(in); -+ out_info = omap3isp_video_format_info(out); -+ -+ if ((in_info->flavor == 0) || (out_info->flavor == 0)) -+ return false; -+ -+ if (in_info->flavor != out_info->flavor) -+ return false; -+ -+ return in_info->bpp - out_info->bpp + additional_shift <= 6; -+} -+ -+/* - * isp_video_mbus_to_pix - Convert v4l2_mbus_framefmt to v4l2_pix_format - * @video: ISP video instance - * @mbus: v4l2_mbus_framefmt format (input) -@@ -235,6 +296,7 @@ static int isp_video_validate_pipeline(struct isp_pipeline *pipe) - return -EPIPE; - - while (1) { -+ unsigned int shifter_link; - /* Retrieve the sink format */ - pad = &subdev->entity.pads[0]; - if (!(pad->flags & MEDIA_PAD_FL_SINK)) -@@ -263,6 +325,10 @@ static int isp_video_validate_pipeline(struct isp_pipeline *pipe) - return -ENOSPC; - } - -+ /* If sink pad is on CCDC, the link has the lane shifter -+ * in the middle of it. */ -+ shifter_link = subdev == &isp->isp_ccdc.subdev; -+ - /* Retrieve the source format */ - pad = media_entity_remote_source(pad); - if (pad == NULL || -@@ -278,10 +344,24 @@ static int isp_video_validate_pipeline(struct isp_pipeline *pipe) - return -EPIPE; - - /* Check if the two ends match */ -- if (fmt_source.format.code != fmt_sink.format.code || -- fmt_source.format.width != fmt_sink.format.width || -+ if (fmt_source.format.width != fmt_sink.format.width || - fmt_source.format.height != fmt_sink.format.height) - return -EPIPE; -+ -+ if (shifter_link) { -+ unsigned int parallel_shift = 0; -+ if (isp->isp_ccdc.input == CCDC_INPUT_PARALLEL) { -+ struct isp_parallel_platform_data *pdata = -+ &((struct isp_v4l2_subdevs_group *) -+ subdev->host_priv)->bus.parallel; -+ parallel_shift = pdata->data_lane_shift * 2; -+ } -+ if (!isp_video_is_shiftable(fmt_source.format.code, -+ fmt_sink.format.code, -+ parallel_shift)) -+ return -EPIPE; -+ } else if (fmt_source.format.code != fmt_sink.format.code) -+ return -EPIPE; - } - - return 0; -diff --git a/drivers/media/video/omap3isp/ispvideo.h b/drivers/media/video/omap3isp/ispvideo.h -index 524a1ac..911bea6 100644 ---- a/drivers/media/video/omap3isp/ispvideo.h -+++ b/drivers/media/video/omap3isp/ispvideo.h -@@ -49,6 +49,8 @@ struct v4l2_pix_format; - * bits. Identical to @code if the format is 10 bits wide or less. - * @uncompressed: V4L2 media bus format code for the corresponding uncompressed - * format. Identical to @code if the format is not DPCM compressed. -+ * @flavor: V4L2 media bus format code for the same pixel layout but -+ * shifted to be 8 bits per pixel. =0 if format is not shiftable. - * @pixelformat: V4L2 pixel format FCC identifier - * @bpp: Bits per pixel - */ -@@ -56,6 +58,7 @@ struct isp_format_info { - enum v4l2_mbus_pixelcode code; - enum v4l2_mbus_pixelcode truncated; - enum v4l2_mbus_pixelcode uncompressed; -+ enum v4l2_mbus_pixelcode flavor; - u32 pixelformat; - unsigned int bpp; - }; -diff --git a/drivers/media/video/s5p-fimc/fimc-capture.c b/drivers/media/video/s5p-fimc/fimc-capture.c -index 95f8b4e1..d142b40 100644 ---- a/drivers/media/video/s5p-fimc/fimc-capture.c -+++ b/drivers/media/video/s5p-fimc/fimc-capture.c -@@ -527,7 +527,7 @@ static int fimc_cap_s_fmt_mplane(struct file *file, void *priv, - if (ret) - return ret; - -- if (vb2_is_streaming(&fimc->vid_cap.vbq) || fimc_capture_active(fimc)) -+ if (vb2_is_busy(&fimc->vid_cap.vbq) || fimc_capture_active(fimc)) - return -EBUSY; - - frame = &ctx->d_frame; -@@ -539,8 +539,10 @@ static int fimc_cap_s_fmt_mplane(struct file *file, void *priv, - return -EINVAL; - } - -- for (i = 0; i < frame->fmt->colplanes; i++) -- frame->payload[i] = pix->plane_fmt[i].bytesperline * pix->height; -+ for (i = 0; i < frame->fmt->colplanes; i++) { -+ frame->payload[i] = -+ (pix->width * pix->height * frame->fmt->depth[i]) >> 3; -+ } - - /* Output DMA frame pixel size and offsets. */ - frame->f_width = pix->plane_fmt[0].bytesperline * 8 -diff --git a/drivers/media/video/s5p-fimc/fimc-core.c b/drivers/media/video/s5p-fimc/fimc-core.c -index 6c919b3..dc91a85 100644 ---- a/drivers/media/video/s5p-fimc/fimc-core.c -+++ b/drivers/media/video/s5p-fimc/fimc-core.c -@@ -361,10 +361,20 @@ static void fimc_capture_irq_handler(struct fimc_dev *fimc) - { - struct fimc_vid_cap *cap = &fimc->vid_cap; - struct fimc_vid_buffer *v_buf; -+ struct timeval *tv; -+ struct timespec ts; - - if (!list_empty(&cap->active_buf_q) && - test_bit(ST_CAPT_RUN, &fimc->state)) { -+ ktime_get_real_ts(&ts); -+ - v_buf = active_queue_pop(cap); -+ -+ tv = &v_buf->vb.v4l2_buf.timestamp; -+ tv->tv_sec = ts.tv_sec; -+ tv->tv_usec = ts.tv_nsec / NSEC_PER_USEC; -+ v_buf->vb.v4l2_buf.sequence = cap->frame_count++; -+ - vb2_buffer_done(&v_buf->vb, VB2_BUF_STATE_DONE); - } - -@@ -758,7 +768,7 @@ static void fimc_unlock(struct vb2_queue *vq) - mutex_unlock(&ctx->fimc_dev->lock); - } - --struct vb2_ops fimc_qops = { -+static struct vb2_ops fimc_qops = { - .queue_setup = fimc_queue_setup, - .buf_prepare = fimc_buf_prepare, - .buf_queue = fimc_buf_queue, -@@ -927,23 +937,23 @@ int fimc_vidioc_try_fmt_mplane(struct file *file, void *priv, - pix->num_planes = fmt->memplanes; - pix->colorspace = V4L2_COLORSPACE_JPEG; - -- for (i = 0; i < pix->num_planes; ++i) { -- int bpl = pix->plane_fmt[i].bytesperline; - -- dbg("[%d] bpl: %d, depth: %d, w: %d, h: %d", -- i, bpl, fmt->depth[i], pix->width, pix->height); -+ for (i = 0; i < pix->num_planes; ++i) { -+ u32 bpl = pix->plane_fmt[i].bytesperline; -+ u32 *sizeimage = &pix->plane_fmt[i].sizeimage; - -- if (!bpl || (bpl * 8 / fmt->depth[i]) > pix->width) -- bpl = (pix->width * fmt->depth[0]) >> 3; -+ if (fmt->colplanes > 1 && (bpl == 0 || bpl < pix->width)) -+ bpl = pix->width; /* Planar */ - -- if (!pix->plane_fmt[i].sizeimage) -- pix->plane_fmt[i].sizeimage = pix->height * bpl; -+ if (fmt->colplanes == 1 && /* Packed */ -+ (bpl == 0 || ((bpl * 8) / fmt->depth[i]) < pix->width)) -+ bpl = (pix->width * fmt->depth[0]) / 8; - -- pix->plane_fmt[i].bytesperline = bpl; -+ if (i == 0) /* Same bytesperline for each plane. */ -+ mod_x = bpl; - -- dbg("[%d]: bpl: %d, sizeimage: %d", -- i, pix->plane_fmt[i].bytesperline, -- pix->plane_fmt[i].sizeimage); -+ pix->plane_fmt[i].bytesperline = mod_x; -+ *sizeimage = (pix->width * pix->height * fmt->depth[i]) / 8; - } - - return 0; -@@ -965,7 +975,7 @@ static int fimc_m2m_s_fmt_mplane(struct file *file, void *priv, - - vq = v4l2_m2m_get_vq(ctx->m2m_ctx, f->type); - -- if (vb2_is_streaming(vq)) { -+ if (vb2_is_busy(vq)) { - v4l2_err(&fimc->m2m.v4l2_dev, "queue (%d) busy\n", f->type); - return -EBUSY; - } -@@ -985,8 +995,10 @@ static int fimc_m2m_s_fmt_mplane(struct file *file, void *priv, - if (!frame->fmt) - return -EINVAL; - -- for (i = 0; i < frame->fmt->colplanes; i++) -- frame->payload[i] = pix->plane_fmt[i].bytesperline * pix->height; -+ for (i = 0; i < frame->fmt->colplanes; i++) { -+ frame->payload[i] = -+ (pix->width * pix->height * frame->fmt->depth[i]) / 8; -+ } - - frame->f_width = pix->plane_fmt[0].bytesperline * 8 / - frame->fmt->depth[0]; -@@ -1750,7 +1762,7 @@ static int __devexit fimc_remove(struct platform_device *pdev) - } - - /* Image pixel limits, similar across several FIMC HW revisions. */ --static struct fimc_pix_limit s5p_pix_limit[3] = { -+static struct fimc_pix_limit s5p_pix_limit[4] = { - [0] = { - .scaler_en_w = 3264, - .scaler_dis_w = 8192, -@@ -1775,6 +1787,14 @@ static struct fimc_pix_limit s5p_pix_limit[3] = { - .out_rot_en_w = 1280, - .out_rot_dis_w = 1920, - }, -+ [3] = { -+ .scaler_en_w = 1920, -+ .scaler_dis_w = 8192, -+ .in_rot_en_h = 1366, -+ .in_rot_dis_w = 8192, -+ .out_rot_en_w = 1366, -+ .out_rot_dis_w = 1920, -+ }, - }; - - static struct samsung_fimc_variant fimc0_variant_s5p = { -@@ -1827,7 +1847,7 @@ static struct samsung_fimc_variant fimc2_variant_s5pv210 = { - .pix_limit = &s5p_pix_limit[2], - }; - --static struct samsung_fimc_variant fimc0_variant_s5pv310 = { -+static struct samsung_fimc_variant fimc0_variant_exynos4 = { - .pix_hoff = 1, - .has_inp_rot = 1, - .has_out_rot = 1, -@@ -1840,7 +1860,7 @@ static struct samsung_fimc_variant fimc0_variant_s5pv310 = { - .pix_limit = &s5p_pix_limit[1], - }; - --static struct samsung_fimc_variant fimc2_variant_s5pv310 = { -+static struct samsung_fimc_variant fimc2_variant_exynos4 = { - .pix_hoff = 1, - .has_cistatus2 = 1, - .has_mainscaler_ext = 1, -@@ -1848,7 +1868,7 @@ static struct samsung_fimc_variant fimc2_variant_s5pv310 = { - .min_out_pixsize = 16, - .hor_offs_align = 1, - .out_buf_count = 32, -- .pix_limit = &s5p_pix_limit[2], -+ .pix_limit = &s5p_pix_limit[3], - }; - - /* S5PC100 */ -@@ -1874,12 +1894,12 @@ static struct samsung_fimc_driverdata fimc_drvdata_s5pv210 = { - }; - - /* S5PV310, S5PC210 */ --static struct samsung_fimc_driverdata fimc_drvdata_s5pv310 = { -+static struct samsung_fimc_driverdata fimc_drvdata_exynos4 = { - .variant = { -- [0] = &fimc0_variant_s5pv310, -- [1] = &fimc0_variant_s5pv310, -- [2] = &fimc0_variant_s5pv310, -- [3] = &fimc2_variant_s5pv310, -+ [0] = &fimc0_variant_exynos4, -+ [1] = &fimc0_variant_exynos4, -+ [2] = &fimc0_variant_exynos4, -+ [3] = &fimc2_variant_exynos4, - }, - .num_entities = 4, - .lclk_frequency = 166000000UL, -@@ -1893,8 +1913,8 @@ static struct platform_device_id fimc_driver_ids[] = { - .name = "s5pv210-fimc", - .driver_data = (unsigned long)&fimc_drvdata_s5pv210, - }, { -- .name = "s5pv310-fimc", -- .driver_data = (unsigned long)&fimc_drvdata_s5pv310, -+ .name = "exynos4-fimc", -+ .driver_data = (unsigned long)&fimc_drvdata_exynos4, - }, - {}, - }; -diff --git a/drivers/media/video/sh_mobile_ceu_camera.c b/drivers/media/video/sh_mobile_ceu_camera.c -index 3fe54bf..134e86b 100644 ---- a/drivers/media/video/sh_mobile_ceu_camera.c -+++ b/drivers/media/video/sh_mobile_ceu_camera.c -@@ -922,7 +922,7 @@ static int sh_mobile_ceu_get_formats(struct soc_camera_device *icd, unsigned int - /* Try 2560x1920, 1280x960, 640x480, 320x240 */ - mf.width = 2560 >> shift; - mf.height = 1920 >> shift; -- ret = v4l2_device_call_until_err(sd->v4l2_dev, 0, video, -+ ret = v4l2_device_call_until_err(sd->v4l2_dev, (long)icd, video, - s_mbus_fmt, &mf); - if (ret < 0) - return ret; -@@ -1224,7 +1224,7 @@ static int client_s_fmt(struct soc_camera_device *icd, - struct v4l2_cropcap cap; - int ret; - -- ret = v4l2_device_call_until_err(sd->v4l2_dev, 0, video, -+ ret = v4l2_device_call_until_err(sd->v4l2_dev, (long)icd, video, - s_mbus_fmt, mf); - if (ret < 0) - return ret; -@@ -1254,7 +1254,7 @@ static int client_s_fmt(struct soc_camera_device *icd, - tmp_h = min(2 * tmp_h, max_height); - mf->width = tmp_w; - mf->height = tmp_h; -- ret = v4l2_device_call_until_err(sd->v4l2_dev, 0, video, -+ ret = v4l2_device_call_until_err(sd->v4l2_dev, (long)icd, video, - s_mbus_fmt, mf); - dev_geo(dev, "Camera scaled to %ux%u\n", - mf->width, mf->height); -@@ -1658,7 +1658,7 @@ static int sh_mobile_ceu_try_fmt(struct soc_camera_device *icd, - mf.code = xlate->code; - mf.colorspace = pix->colorspace; - -- ret = v4l2_device_call_until_err(sd->v4l2_dev, 0, video, try_mbus_fmt, &mf); -+ ret = v4l2_device_call_until_err(sd->v4l2_dev, (long)icd, video, try_mbus_fmt, &mf); - if (ret < 0) - return ret; - -@@ -1682,7 +1682,7 @@ static int sh_mobile_ceu_try_fmt(struct soc_camera_device *icd, - */ - mf.width = 2560; - mf.height = 1920; -- ret = v4l2_device_call_until_err(sd->v4l2_dev, 0, video, -+ ret = v4l2_device_call_until_err(sd->v4l2_dev, (long)icd, video, - try_mbus_fmt, &mf); - if (ret < 0) { - /* Shouldn't actually happen... */ -diff --git a/drivers/media/video/sh_mobile_csi2.c b/drivers/media/video/sh_mobile_csi2.c -index dd1b81b..98b8748 100644 ---- a/drivers/media/video/sh_mobile_csi2.c -+++ b/drivers/media/video/sh_mobile_csi2.c -@@ -38,6 +38,8 @@ struct sh_csi2 { - void __iomem *base; - struct platform_device *pdev; - struct sh_csi2_client_config *client; -+ unsigned long (*query_bus_param)(struct soc_camera_device *); -+ int (*set_bus_param)(struct soc_camera_device *, unsigned long); - }; - - static int sh_csi2_try_fmt(struct v4l2_subdev *sd, -@@ -208,6 +210,7 @@ static int sh_csi2_notify(struct notifier_block *nb, - case BUS_NOTIFY_BOUND_DRIVER: - snprintf(priv->subdev.name, V4L2_SUBDEV_NAME_SIZE, "%s%s", - dev_name(v4l2_dev->dev), ".mipi-csi"); -+ priv->subdev.grp_id = (long)icd; - ret = v4l2_device_register_subdev(v4l2_dev, &priv->subdev); - dev_dbg(dev, "%s(%p): ret(register_subdev) = %d\n", __func__, priv, ret); - if (ret < 0) -@@ -215,6 +218,8 @@ static int sh_csi2_notify(struct notifier_block *nb, - - priv->client = pdata->clients + i; - -+ priv->set_bus_param = icd->ops->set_bus_param; -+ priv->query_bus_param = icd->ops->query_bus_param; - icd->ops->set_bus_param = sh_csi2_set_bus_param; - icd->ops->query_bus_param = sh_csi2_query_bus_param; - -@@ -226,8 +231,10 @@ static int sh_csi2_notify(struct notifier_block *nb, - priv->client = NULL; - - /* Driver is about to be unbound */ -- icd->ops->set_bus_param = NULL; -- icd->ops->query_bus_param = NULL; -+ icd->ops->set_bus_param = priv->set_bus_param; -+ icd->ops->query_bus_param = priv->query_bus_param; -+ priv->set_bus_param = NULL; -+ priv->query_bus_param = NULL; - - v4l2_device_unregister_subdev(&priv->subdev); - -diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c -index 4628448..3973f9a 100644 ---- a/drivers/media/video/soc_camera.c -+++ b/drivers/media/video/soc_camera.c -@@ -996,10 +996,11 @@ static void soc_camera_free_i2c(struct soc_camera_device *icd) - { - struct i2c_client *client = - to_i2c_client(to_soc_camera_control(icd)); -+ struct i2c_adapter *adap = client->adapter; - dev_set_drvdata(&icd->dev, NULL); - v4l2_device_unregister_subdev(i2c_get_clientdata(client)); - i2c_unregister_device(client); -- i2c_put_adapter(client->adapter); -+ i2c_put_adapter(adap); - } - #else - #define soc_camera_init_i2c(icd, icl) (-ENODEV) -@@ -1071,6 +1072,9 @@ static int soc_camera_probe(struct device *dev) - } - } - -+ sd = soc_camera_to_subdev(icd); -+ sd->grp_id = (long)icd; -+ - /* At this point client .probe() should have run already */ - ret = soc_camera_init_user_formats(icd); - if (ret < 0) -@@ -1092,7 +1096,6 @@ static int soc_camera_probe(struct device *dev) - goto evidstart; - - /* Try to improve our guess of a reasonable window format */ -- sd = soc_camera_to_subdev(icd); - if (!v4l2_subdev_call(sd, video, g_mbus_fmt, &mf)) { - icd->user_width = mf.width; - icd->user_height = mf.height; -diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c -index 498e674..6dc7196 100644 ---- a/drivers/media/video/v4l2-dev.c -+++ b/drivers/media/video/v4l2-dev.c -@@ -389,7 +389,8 @@ static int v4l2_open(struct inode *inode, struct file *filp) - video_get(vdev); - mutex_unlock(&videodev_lock); - #if defined(CONFIG_MEDIA_CONTROLLER) -- if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) { -+ if (vdev->v4l2_dev && vdev->v4l2_dev->mdev && -+ vdev->vfl_type != VFL_TYPE_SUBDEV) { - entity = media_entity_get(&vdev->entity); - if (!entity) { - ret = -EBUSY; -@@ -415,7 +416,8 @@ err: - /* decrease the refcount in case of an error */ - if (ret) { - #if defined(CONFIG_MEDIA_CONTROLLER) -- if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) -+ if (vdev->v4l2_dev && vdev->v4l2_dev->mdev && -+ vdev->vfl_type != VFL_TYPE_SUBDEV) - media_entity_put(entity); - #endif - video_put(vdev); -@@ -437,7 +439,8 @@ static int v4l2_release(struct inode *inode, struct file *filp) - mutex_unlock(vdev->lock); - } - #if defined(CONFIG_MEDIA_CONTROLLER) -- if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) -+ if (vdev->v4l2_dev && vdev->v4l2_dev->mdev && -+ vdev->vfl_type != VFL_TYPE_SUBDEV) - media_entity_put(&vdev->entity); - #endif - /* decrease the refcount unconditionally since the release() -@@ -686,7 +689,8 @@ int __video_register_device(struct video_device *vdev, int type, int nr, - - #if defined(CONFIG_MEDIA_CONTROLLER) - /* Part 5: Register the entity. */ -- if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) { -+ if (vdev->v4l2_dev && vdev->v4l2_dev->mdev && -+ vdev->vfl_type != VFL_TYPE_SUBDEV) { - vdev->entity.type = MEDIA_ENT_T_DEVNODE_V4L; - vdev->entity.name = vdev->name; - vdev->entity.v4l.major = VIDEO_MAJOR; -@@ -733,7 +737,8 @@ void video_unregister_device(struct video_device *vdev) - return; - - #if defined(CONFIG_MEDIA_CONTROLLER) -- if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) -+ if (vdev->v4l2_dev && vdev->v4l2_dev->mdev && -+ vdev->vfl_type != VFL_TYPE_SUBDEV) - media_device_unregister_entity(&vdev->entity); - #endif - -diff --git a/drivers/media/video/videobuf2-core.c b/drivers/media/video/videobuf2-core.c -index 6698c77..6ba1461 100644 ---- a/drivers/media/video/videobuf2-core.c -+++ b/drivers/media/video/videobuf2-core.c -@@ -37,6 +37,9 @@ module_param(debug, int, 0644); - #define call_qop(q, op, args...) \ - (((q)->ops->op) ? ((q)->ops->op(args)) : 0) - -+#define V4L2_BUFFER_STATE_FLAGS (V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_QUEUED | \ -+ V4L2_BUF_FLAG_DONE | V4L2_BUF_FLAG_ERROR) -+ - /** - * __vb2_buf_mem_alloc() - allocate video memory for the given buffer - */ -@@ -51,7 +54,7 @@ static int __vb2_buf_mem_alloc(struct vb2_buffer *vb, - for (plane = 0; plane < vb->num_planes; ++plane) { - mem_priv = call_memop(q, plane, alloc, q->alloc_ctx[plane], - plane_sizes[plane]); -- if (!mem_priv) -+ if (IS_ERR_OR_NULL(mem_priv)) - goto free; - - /* Associate allocator private data with this plane */ -@@ -284,7 +287,7 @@ static int __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b) - struct vb2_queue *q = vb->vb2_queue; - int ret = 0; - -- /* Copy back data such as timestamp, input, etc. */ -+ /* Copy back data such as timestamp, flags, input, etc. */ - memcpy(b, &vb->v4l2_buf, offsetof(struct v4l2_buffer, m)); - b->input = vb->v4l2_buf.input; - b->reserved = vb->v4l2_buf.reserved; -@@ -313,7 +316,10 @@ static int __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b) - b->m.userptr = vb->v4l2_planes[0].m.userptr; - } - -- b->flags = 0; -+ /* -+ * Clear any buffer state related flags. -+ */ -+ b->flags &= ~V4L2_BUFFER_STATE_FLAGS; - - switch (vb->state) { - case VB2_BUF_STATE_QUEUED: -@@ -519,6 +525,7 @@ int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req) - num_buffers = min_t(unsigned int, req->count, VIDEO_MAX_FRAME); - memset(plane_sizes, 0, sizeof(plane_sizes)); - memset(q->alloc_ctx, 0, sizeof(q->alloc_ctx)); -+ q->memory = req->memory; - - /* - * Ask the driver how many buffers and planes per buffer it requires. -@@ -560,8 +567,6 @@ int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req) - ret = num_buffers; - } - -- q->memory = req->memory; -- - /* - * Return the number of successfully allocated buffers - * to the userspace. -@@ -715,6 +720,8 @@ static int __fill_vb2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b, - - vb->v4l2_buf.field = b->field; - vb->v4l2_buf.timestamp = b->timestamp; -+ vb->v4l2_buf.input = b->input; -+ vb->v4l2_buf.flags = b->flags & ~V4L2_BUFFER_STATE_FLAGS; - - return 0; - } -diff --git a/drivers/media/video/videobuf2-dma-contig.c b/drivers/media/video/videobuf2-dma-contig.c -index 58205d5..a790a5f 100644 ---- a/drivers/media/video/videobuf2-dma-contig.c -+++ b/drivers/media/video/videobuf2-dma-contig.c -@@ -46,7 +46,7 @@ static void *vb2_dma_contig_alloc(void *alloc_ctx, unsigned long size) - GFP_KERNEL); - if (!buf->vaddr) { - dev_err(conf->dev, "dma_alloc_coherent of size %ld failed\n", -- buf->size); -+ size); - kfree(buf); - return ERR_PTR(-ENOMEM); - } -diff --git a/drivers/mtd/nand/diskonchip.c b/drivers/mtd/nand/diskonchip.c -index 96c0b34..657b9f4 100644 ---- a/drivers/mtd/nand/diskonchip.c -+++ b/drivers/mtd/nand/diskonchip.c -@@ -400,7 +400,7 @@ static uint16_t __init doc200x_ident_chip(struct mtd_info *mtd, int nr) - doc200x_hwcontrol(mtd, 0, NAND_CTRL_ALE | NAND_CTRL_CHANGE); - doc200x_hwcontrol(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE); - -- /* We can't' use dev_ready here, but at least we wait for the -+ /* We can't use dev_ready here, but at least we wait for the - * command to complete - */ - udelay(50); -diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c -index fe77e82..e8c19de 100644 ---- a/drivers/pcmcia/pcmcia_resource.c -+++ b/drivers/pcmcia/pcmcia_resource.c -@@ -173,7 +173,7 @@ static int pcmcia_access_config(struct pcmcia_device *p_dev, - c = p_dev->function_config; - - if (!(c->state & CONFIG_LOCKED)) { -- dev_dbg(&p_dev->dev, "Configuration isn't't locked\n"); -+ dev_dbg(&p_dev->dev, "Configuration isn't locked\n"); - mutex_unlock(&s->ops_mutex); - return -EACCES; - } -diff --git a/drivers/rtc/rtc-max8925.c b/drivers/rtc/rtc-max8925.c -index 174036d..20494b5 100644 ---- a/drivers/rtc/rtc-max8925.c -+++ b/drivers/rtc/rtc-max8925.c -@@ -257,6 +257,8 @@ static int __devinit max8925_rtc_probe(struct platform_device *pdev) - goto out_irq; - } - -+ dev_set_drvdata(&pdev->dev, info); -+ - info->rtc_dev = rtc_device_register("max8925-rtc", &pdev->dev, - &max8925_rtc_ops, THIS_MODULE); - ret = PTR_ERR(info->rtc_dev); -@@ -265,7 +267,6 @@ static int __devinit max8925_rtc_probe(struct platform_device *pdev) - goto out_rtc; - } - -- dev_set_drvdata(&pdev->dev, info); - platform_set_drvdata(pdev, info); - - return 0; -diff --git a/drivers/scsi/device_handler/scsi_dh.c b/drivers/scsi/device_handler/scsi_dh.c -index 564e6ec..0119b81 100644 ---- a/drivers/scsi/device_handler/scsi_dh.c -+++ b/drivers/scsi/device_handler/scsi_dh.c -@@ -394,12 +394,14 @@ int scsi_dh_activate(struct request_queue *q, activate_complete fn, void *data) - unsigned long flags; - struct scsi_device *sdev; - struct scsi_device_handler *scsi_dh = NULL; -+ struct device *dev = NULL; - - spin_lock_irqsave(q->queue_lock, flags); - sdev = q->queuedata; - if (sdev && sdev->scsi_dh_data) - scsi_dh = sdev->scsi_dh_data->scsi_dh; -- if (!scsi_dh || !get_device(&sdev->sdev_gendev) || -+ dev = get_device(&sdev->sdev_gendev); -+ if (!scsi_dh || !dev || - sdev->sdev_state == SDEV_CANCEL || - sdev->sdev_state == SDEV_DEL) - err = SCSI_DH_NOSYS; -@@ -410,12 +412,13 @@ int scsi_dh_activate(struct request_queue *q, activate_complete fn, void *data) - if (err) { - if (fn) - fn(data, err); -- return err; -+ goto out; - } - - if (scsi_dh->activate) - err = scsi_dh->activate(sdev, fn, data); -- put_device(&sdev->sdev_gendev); -+out: -+ put_device(dev); - return err; - } - EXPORT_SYMBOL_GPL(scsi_dh_activate); -diff --git a/drivers/scsi/mpt2sas/mpt2sas_ctl.c b/drivers/scsi/mpt2sas/mpt2sas_ctl.c -index 1c6d2b4..d72f1f2 100644 ---- a/drivers/scsi/mpt2sas/mpt2sas_ctl.c -+++ b/drivers/scsi/mpt2sas/mpt2sas_ctl.c -@@ -688,6 +688,13 @@ _ctl_do_mpt_command(struct MPT2SAS_ADAPTER *ioc, - goto out; - } - -+ /* Check for overflow and wraparound */ -+ if (karg.data_sge_offset * 4 > ioc->request_sz || -+ karg.data_sge_offset > (UINT_MAX / 4)) { -+ ret = -EINVAL; -+ goto out; -+ } -+ - /* copy in request message frame from user */ - if (copy_from_user(mpi_request, mf, karg.data_sge_offset*4)) { - printk(KERN_ERR "failure at %s:%d/%s()!\n", __FILE__, __LINE__, -@@ -1963,7 +1970,7 @@ _ctl_diag_read_buffer(void __user *arg, enum block_state state) - Mpi2DiagBufferPostReply_t *mpi_reply; - int rc, i; - u8 buffer_type; -- unsigned long timeleft; -+ unsigned long timeleft, request_size, copy_size; - u16 smid; - u16 ioc_status; - u8 issue_reset = 0; -@@ -1999,6 +2006,8 @@ _ctl_diag_read_buffer(void __user *arg, enum block_state state) - return -ENOMEM; - } - -+ request_size = ioc->diag_buffer_sz[buffer_type]; -+ - if ((karg.starting_offset % 4) || (karg.bytes_to_read % 4)) { - printk(MPT2SAS_ERR_FMT "%s: either the starting_offset " - "or bytes_to_read are not 4 byte aligned\n", ioc->name, -@@ -2006,13 +2015,23 @@ _ctl_diag_read_buffer(void __user *arg, enum block_state state) - return -EINVAL; - } - -+ if (karg.starting_offset > request_size) -+ return -EINVAL; -+ - diag_data = (void *)(request_data + karg.starting_offset); - dctlprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: diag_buffer(%p), " - "offset(%d), sz(%d)\n", ioc->name, __func__, - diag_data, karg.starting_offset, karg.bytes_to_read)); - -+ /* Truncate data on requests that are too large */ -+ if ((diag_data + karg.bytes_to_read < diag_data) || -+ (diag_data + karg.bytes_to_read > request_data + request_size)) -+ copy_size = request_size - karg.starting_offset; -+ else -+ copy_size = karg.bytes_to_read; -+ - if (copy_to_user((void __user *)uarg->diagnostic_data, -- diag_data, karg.bytes_to_read)) { -+ diag_data, copy_size)) { - printk(MPT2SAS_ERR_FMT "%s: Unable to write " - "mpt_diag_read_buffer_t data @ %p\n", ioc->name, - __func__, diag_data); -diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c -index 96d5ad0..7f636b1 100644 ---- a/drivers/scsi/pmcraid.c -+++ b/drivers/scsi/pmcraid.c -@@ -3814,6 +3814,9 @@ static long pmcraid_ioctl_passthrough( - rc = -EFAULT; - goto out_free_buffer; - } -+ } else if (request_size < 0) { -+ rc = -EINVAL; -+ goto out_free_buffer; - } - - /* check if we have any additional command parameters */ -diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c -index e44ff64..e639125 100644 ---- a/drivers/scsi/scsi_sysfs.c -+++ b/drivers/scsi/scsi_sysfs.c -@@ -322,14 +322,8 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work) - kfree(evt); - } - -- if (sdev->request_queue) { -- sdev->request_queue->queuedata = NULL; -- /* user context needed to free queue */ -- scsi_free_queue(sdev->request_queue); -- /* temporary expedient, try to catch use of queue lock -- * after free of sdev */ -- sdev->request_queue = NULL; -- } -+ /* NULL queue means the device can't be used */ -+ sdev->request_queue = NULL; - - scsi_target_reap(scsi_target(sdev)); - -@@ -937,6 +931,12 @@ void __scsi_remove_device(struct scsi_device *sdev) - if (sdev->host->hostt->slave_destroy) - sdev->host->hostt->slave_destroy(sdev); - transport_destroy_device(dev); -+ -+ /* cause the request function to reject all I/O requests */ -+ sdev->request_queue->queuedata = NULL; -+ -+ /* Freeing the queue signals to block that we're done */ -+ scsi_free_queue(sdev->request_queue); - put_device(dev); - } - -diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c -index bef0bbd..f01a51c 100644 ---- a/drivers/staging/rt2860/common/cmm_data_pci.c -+++ b/drivers/staging/rt2860/common/cmm_data_pci.c -@@ -444,7 +444,7 @@ int RTMPCheckRxError(struct rt_rtmp_adapter *pAd, - return (NDIS_STATUS_FAILURE); - } - } -- /* Drop not U2M frames, can't's drop here because we will drop beacon in this case */ -+ /* Drop not U2M frames, can't drop here because we will drop beacon in this case */ - /* I am kind of doubting the U2M bit operation */ - /* if (pRxD->U2M == 0) */ - /* return(NDIS_STATUS_FAILURE); */ -diff --git a/drivers/staging/rt2860/common/cmm_data_usb.c b/drivers/staging/rt2860/common/cmm_data_usb.c -index 5637857..83a62fa 100644 ---- a/drivers/staging/rt2860/common/cmm_data_usb.c -+++ b/drivers/staging/rt2860/common/cmm_data_usb.c -@@ -860,7 +860,7 @@ int RTMPCheckRxError(struct rt_rtmp_adapter *pAd, - DBGPRINT_RAW(RT_DEBUG_ERROR, ("received packet too long\n")); - return NDIS_STATUS_FAILURE; - } -- /* Drop not U2M frames, can't's drop here because we will drop beacon in this case */ -+ /* Drop not U2M frames, can't drop here because we will drop beacon in this case */ - /* I am kind of doubting the U2M bit operation */ - /* if (pRxD->U2M == 0) */ - /* return(NDIS_STATUS_FAILURE); */ -diff --git a/drivers/staging/spectra/ffsport.c b/drivers/staging/spectra/ffsport.c -index 20dae73..506547b 100644 ---- a/drivers/staging/spectra/ffsport.c -+++ b/drivers/staging/spectra/ffsport.c -@@ -653,7 +653,7 @@ static int SBD_setup_device(struct spectra_nand_dev *dev, int which) - } - dev->queue->queuedata = dev; - -- /* As Linux block layer does't support >4KB hardware sector, */ -+ /* As Linux block layer doesn't support >4KB hardware sector, */ - /* Here we force report 512 byte hardware sector size to Kernel */ - blk_queue_logical_block_size(dev->queue, 512); - -diff --git a/drivers/staging/tidspbridge/dynload/cload.c b/drivers/staging/tidspbridge/dynload/cload.c -index 5cecd23..fe1ef0a 100644 ---- a/drivers/staging/tidspbridge/dynload/cload.c -+++ b/drivers/staging/tidspbridge/dynload/cload.c -@@ -718,7 +718,7 @@ static void dload_symbols(struct dload_state *dlthis) - * as a temporary for .dllview record construction. - * Allocate storage for the whole table. Add 1 to the section count - * in case a trampoline section is auto-generated as well as the -- * size of the trampoline section name so DLLView does't get lost. -+ * size of the trampoline section name so DLLView doesn't get lost. - */ - - siz = sym_count * sizeof(struct local_symbol); -diff --git a/drivers/staging/tty/specialix.c b/drivers/staging/tty/specialix.c -index cb24c6d..5c3598e 100644 ---- a/drivers/staging/tty/specialix.c -+++ b/drivers/staging/tty/specialix.c -@@ -978,7 +978,7 @@ static void sx_change_speed(struct specialix_board *bp, - spin_lock_irqsave(&bp->lock, flags); - sx_out(bp, CD186x_CAR, port_No(port)); - -- /* The Specialix board does't implement the RTS lines. -+ /* The Specialix board doesn't implement the RTS lines. - They are used to set the IRQ level. Don't touch them. */ - if (sx_crtscts(tty)) - port->MSVR = MSVR_DTR | (sx_in(bp, CD186x_MSVR) & MSVR_RTS); -diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h -index 2e61fe1..8f4b81d 100644 ---- a/fs/btrfs/ctree.h -+++ b/fs/btrfs/ctree.h -@@ -718,7 +718,7 @@ struct btrfs_space_info { - u64 total_bytes; /* total bytes in the space, - this doesn't take mirrors into account */ - u64 bytes_used; /* total bytes used, -- this does't take mirrors into account */ -+ this doesn't take mirrors into account */ - u64 bytes_pinned; /* total bytes pinned, will be freed when the - transaction finishes */ - u64 bytes_reserved; /* total bytes the allocator has reserved for -diff --git a/fs/file.c b/fs/file.c -index 0be3447..4c6992d 100644 ---- a/fs/file.c -+++ b/fs/file.c -@@ -9,6 +9,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -39,14 +40,17 @@ int sysctl_nr_open_max = 1024 * 1024; /* raised later */ - */ - static DEFINE_PER_CPU(struct fdtable_defer, fdtable_defer_list); - --static inline void *alloc_fdmem(unsigned int size) -+static void *alloc_fdmem(unsigned int size) - { -- void *data; -- -- data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN); -- if (data != NULL) -- return data; -- -+ /* -+ * Very large allocations can stress page reclaim, so fall back to -+ * vmalloc() if the allocation size will be considered "large" by the VM. -+ */ -+ if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) { -+ void *data = kmalloc(size, GFP_KERNEL|__GFP_NOWARN); -+ if (data != NULL) -+ return data; -+ } - return vmalloc(size); - } - -diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c -index 89fc160..1f063ba 100644 ---- a/fs/nfs/namespace.c -+++ b/fs/nfs/namespace.c -@@ -119,7 +119,7 @@ Elong: - } - - #ifdef CONFIG_NFS_V4 --static rpc_authflavor_t nfs_find_best_sec(struct nfs4_secinfo_flavors *flavors, struct inode *inode) -+static rpc_authflavor_t nfs_find_best_sec(struct nfs4_secinfo_flavors *flavors) - { - struct gss_api_mech *mech; - struct xdr_netobj oid; -@@ -166,7 +166,7 @@ static int nfs_negotiate_security(const struct dentry *parent, - } - flavors = page_address(page); - ret = secinfo(parent->d_inode, &dentry->d_name, flavors); -- *flavor = nfs_find_best_sec(flavors, dentry->d_inode); -+ *flavor = nfs_find_best_sec(flavors); - put_page(page); - } - -diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h -index e1c261d..c4a6983 100644 ---- a/fs/nfs/nfs4_fs.h -+++ b/fs/nfs/nfs4_fs.h -@@ -47,6 +47,7 @@ enum nfs4_client_state { - NFS4CLNT_LAYOUTRECALL, - NFS4CLNT_SESSION_RESET, - NFS4CLNT_RECALL_SLOT, -+ NFS4CLNT_LEASE_CONFIRM, - }; - - enum nfs4_session_state { -diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c -index 9bf41ea..69c0f3c 100644 ---- a/fs/nfs/nfs4proc.c -+++ b/fs/nfs/nfs4proc.c -@@ -46,6 +46,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -443,8 +444,8 @@ static int nfs41_sequence_done(struct rpc_task *task, struct nfs4_sequence_res * - if (res->sr_status == 1) - res->sr_status = NFS_OK; - -- /* -ERESTARTSYS can result in skipping nfs41_sequence_setup */ -- if (!res->sr_slot) -+ /* don't increment the sequence number if the task wasn't sent */ -+ if (!RPC_WAS_SENT(task)) - goto out; - - /* Check the SEQUENCE operation status */ -@@ -2185,9 +2186,14 @@ static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle, - struct nfs4_exception exception = { }; - int err; - do { -- err = nfs4_handle_exception(server, -- _nfs4_lookup_root(server, fhandle, info), -- &exception); -+ err = _nfs4_lookup_root(server, fhandle, info); -+ switch (err) { -+ case 0: -+ case -NFS4ERR_WRONGSEC: -+ break; -+ default: -+ err = nfs4_handle_exception(server, err, &exception); -+ } - } while (exception.retry); - return err; - } -@@ -2208,25 +2214,47 @@ out: - return ret; - } - --/* -- * get the file handle for the "/" directory on the server -- */ --static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle, -+static int nfs4_find_root_sec(struct nfs_server *server, struct nfs_fh *fhandle, - struct nfs_fsinfo *info) - { - int i, len, status = 0; -- rpc_authflavor_t flav_array[NFS_MAX_SECFLAVORS + 2]; -+ rpc_authflavor_t flav_array[NFS_MAX_SECFLAVORS]; - -- flav_array[0] = RPC_AUTH_UNIX; -- len = gss_mech_list_pseudoflavors(&flav_array[1]); -- flav_array[1+len] = RPC_AUTH_NULL; -- len += 2; -+ len = gss_mech_list_pseudoflavors(&flav_array[0]); -+ flav_array[len] = RPC_AUTH_NULL; -+ len += 1; - - for (i = 0; i < len; i++) { - status = nfs4_lookup_root_sec(server, fhandle, info, flav_array[i]); -- if (status != -EPERM) -- break; -+ if (status == -NFS4ERR_WRONGSEC || status == -EACCES) -+ continue; -+ break; - } -+ /* -+ * -EACCESS could mean that the user doesn't have correct permissions -+ * to access the mount. It could also mean that we tried to mount -+ * with a gss auth flavor, but rpc.gssd isn't running. Either way, -+ * existing mount programs don't handle -EACCES very well so it should -+ * be mapped to -EPERM instead. -+ */ -+ if (status == -EACCES) -+ status = -EPERM; -+ return status; -+} -+ -+/* -+ * get the file handle for the "/" directory on the server -+ */ -+static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle, -+ struct nfs_fsinfo *info) -+{ -+ int status = nfs4_lookup_root(server, fhandle, info); -+ if ((status == -NFS4ERR_WRONGSEC) && !(server->flags & NFS_MOUNT_SECFLAVOUR)) -+ /* -+ * A status of -NFS4ERR_WRONGSEC will be mapped to -EPERM -+ * by nfs4_map_errors() as this function exits. -+ */ -+ status = nfs4_find_root_sec(server, fhandle, info); - if (status == 0) - status = nfs4_server_capabilities(server, fhandle); - if (status == 0) -@@ -3723,21 +3751,20 @@ int nfs4_proc_setclientid(struct nfs_client *clp, u32 program, - sizeof(setclientid.sc_uaddr), "%s.%u.%u", - clp->cl_ipaddr, port >> 8, port & 255); - -- status = rpc_call_sync(clp->cl_rpcclient, &msg, 0); -+ status = rpc_call_sync(clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT); - if (status != -NFS4ERR_CLID_INUSE) - break; -- if (signalled()) -+ if (loop != 0) { -+ ++clp->cl_id_uniquifier; - break; -- if (loop++ & 1) -- ssleep(clp->cl_lease_time / HZ + 1); -- else -- if (++clp->cl_id_uniquifier == 0) -- break; -+ } -+ ++loop; -+ ssleep(clp->cl_lease_time / HZ + 1); - } - return status; - } - --static int _nfs4_proc_setclientid_confirm(struct nfs_client *clp, -+int nfs4_proc_setclientid_confirm(struct nfs_client *clp, - struct nfs4_setclientid_res *arg, - struct rpc_cred *cred) - { -@@ -3752,7 +3779,7 @@ static int _nfs4_proc_setclientid_confirm(struct nfs_client *clp, - int status; - - now = jiffies; -- status = rpc_call_sync(clp->cl_rpcclient, &msg, 0); -+ status = rpc_call_sync(clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT); - if (status == 0) { - spin_lock(&clp->cl_lock); - clp->cl_lease_time = fsinfo.lease_time * HZ; -@@ -3762,26 +3789,6 @@ static int _nfs4_proc_setclientid_confirm(struct nfs_client *clp, - return status; - } - --int nfs4_proc_setclientid_confirm(struct nfs_client *clp, -- struct nfs4_setclientid_res *arg, -- struct rpc_cred *cred) --{ -- long timeout = 0; -- int err; -- do { -- err = _nfs4_proc_setclientid_confirm(clp, arg, cred); -- switch (err) { -- case 0: -- return err; -- case -NFS4ERR_RESOURCE: -- /* The IBM lawyers misread another document! */ -- case -NFS4ERR_DELAY: -- err = nfs4_delay(clp->cl_rpcclient, &timeout); -- } -- } while (err == 0); -- return err; --} -- - struct nfs4_delegreturndata { - struct nfs4_delegreturnargs args; - struct nfs4_delegreturnres res; -@@ -4786,7 +4793,7 @@ int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred) - init_utsname()->domainname, - clp->cl_rpcclient->cl_auth->au_flavor); - -- status = rpc_call_sync(clp->cl_rpcclient, &msg, 0); -+ status = rpc_call_sync(clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT); - if (!status) - status = nfs4_check_cl_exchange_flags(clp->cl_exchange_flags); - dprintk("<-- %s status= %d\n", __func__, status); -@@ -4869,7 +4876,8 @@ int nfs4_proc_get_lease_time(struct nfs_client *clp, struct nfs_fsinfo *fsinfo) - .rpc_client = clp->cl_rpcclient, - .rpc_message = &msg, - .callback_ops = &nfs4_get_lease_time_ops, -- .callback_data = &data -+ .callback_data = &data, -+ .flags = RPC_TASK_TIMEOUT, - }; - int status; - -@@ -5171,7 +5179,7 @@ static int _nfs4_proc_create_session(struct nfs_client *clp) - nfs4_init_channel_attrs(&args); - args.flags = (SESSION4_PERSIST | SESSION4_BACK_CHAN); - -- status = rpc_call_sync(session->clp->cl_rpcclient, &msg, 0); -+ status = rpc_call_sync(session->clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT); - - if (!status) - /* Verify the session's negotiated channel_attrs values */ -@@ -5194,20 +5202,10 @@ int nfs4_proc_create_session(struct nfs_client *clp) - int status; - unsigned *ptr; - struct nfs4_session *session = clp->cl_session; -- long timeout = 0; -- int err; - - dprintk("--> %s clp=%p session=%p\n", __func__, clp, session); - -- do { -- status = _nfs4_proc_create_session(clp); -- if (status == -NFS4ERR_DELAY) { -- err = nfs4_delay(clp->cl_rpcclient, &timeout); -- if (err) -- status = err; -- } -- } while (status == -NFS4ERR_DELAY); -- -+ status = _nfs4_proc_create_session(clp); - if (status) - goto out; - -@@ -5248,7 +5246,7 @@ int nfs4_proc_destroy_session(struct nfs4_session *session) - msg.rpc_argp = session; - msg.rpc_resp = NULL; - msg.rpc_cred = NULL; -- status = rpc_call_sync(session->clp->cl_rpcclient, &msg, 0); -+ status = rpc_call_sync(session->clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT); - - if (status) - printk(KERN_WARNING -diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c -index a6804f7..036f5ad 100644 ---- a/fs/nfs/nfs4state.c -+++ b/fs/nfs/nfs4state.c -@@ -64,10 +64,15 @@ static LIST_HEAD(nfs4_clientid_list); - - int nfs4_init_clientid(struct nfs_client *clp, struct rpc_cred *cred) - { -- struct nfs4_setclientid_res clid; -+ struct nfs4_setclientid_res clid = { -+ .clientid = clp->cl_clientid, -+ .confirm = clp->cl_confirm, -+ }; - unsigned short port; - int status; - -+ if (test_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state)) -+ goto do_confirm; - port = nfs_callback_tcpport; - if (clp->cl_addr.ss_family == AF_INET6) - port = nfs_callback_tcpport6; -@@ -75,10 +80,14 @@ int nfs4_init_clientid(struct nfs_client *clp, struct rpc_cred *cred) - status = nfs4_proc_setclientid(clp, NFS4_CALLBACK, port, cred, &clid); - if (status != 0) - goto out; -+ clp->cl_clientid = clid.clientid; -+ clp->cl_confirm = clid.confirm; -+ set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); -+do_confirm: - status = nfs4_proc_setclientid_confirm(clp, &clid, cred); - if (status != 0) - goto out; -- clp->cl_clientid = clid.clientid; -+ clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); - nfs4_schedule_state_renewal(clp); - out: - return status; -@@ -230,13 +239,18 @@ int nfs41_init_clientid(struct nfs_client *clp, struct rpc_cred *cred) - { - int status; - -+ if (test_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state)) -+ goto do_confirm; - nfs4_begin_drain_session(clp); - status = nfs4_proc_exchange_id(clp, cred); - if (status != 0) - goto out; -+ set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); -+do_confirm: - status = nfs4_proc_create_session(clp); - if (status != 0) - goto out; -+ clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); - nfs41_setup_state_renewal(clp); - nfs_mark_client_ready(clp, NFS_CS_READY); - out: -@@ -1584,20 +1598,23 @@ static int nfs4_recall_slot(struct nfs_client *clp) { return 0; } - */ - static void nfs4_set_lease_expired(struct nfs_client *clp, int status) - { -- if (nfs4_has_session(clp)) { -- switch (status) { -- case -NFS4ERR_DELAY: -- case -NFS4ERR_CLID_INUSE: -- case -EAGAIN: -- break; -+ switch (status) { -+ case -NFS4ERR_CLID_INUSE: -+ case -NFS4ERR_STALE_CLIENTID: -+ clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); -+ break; -+ case -NFS4ERR_DELAY: -+ case -ETIMEDOUT: -+ case -EAGAIN: -+ ssleep(1); -+ break; - -- case -EKEYEXPIRED: -- nfs4_warn_keyexpired(clp->cl_hostname); -- case -NFS4ERR_NOT_SAME: /* FixMe: implement recovery -- * in nfs4_exchange_id */ -- default: -- return; -- } -+ case -EKEYEXPIRED: -+ nfs4_warn_keyexpired(clp->cl_hostname); -+ case -NFS4ERR_NOT_SAME: /* FixMe: implement recovery -+ * in nfs4_exchange_id */ -+ default: -+ return; - } - set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); - } -@@ -1607,7 +1624,7 @@ static void nfs4_state_manager(struct nfs_client *clp) - int status = 0; - - /* Ensure exclusive access to NFSv4 state */ -- for(;;) { -+ do { - if (test_and_clear_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) { - /* We're going to have to re-establish a clientid */ - status = nfs4_reclaim_lease(clp); -@@ -1691,7 +1708,7 @@ static void nfs4_state_manager(struct nfs_client *clp) - break; - if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0) - break; -- } -+ } while (atomic_read(&clp->cl_count) > 1); - return; - out_error: - printk(KERN_WARNING "Error: state manager failed on NFSv4 server %s" -diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c -index dddfb57..c3ccd2c 100644 ---- a/fs/nfs/nfs4xdr.c -+++ b/fs/nfs/nfs4xdr.c -@@ -1452,26 +1452,25 @@ static void encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args, - - static void encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg *readdir, struct rpc_rqst *req, struct compound_hdr *hdr) - { -- uint32_t attrs[2] = {0, 0}; -+ uint32_t attrs[2] = { -+ FATTR4_WORD0_RDATTR_ERROR, -+ FATTR4_WORD1_MOUNTED_ON_FILEID, -+ }; - uint32_t dircount = readdir->count >> 1; - __be32 *p; - - if (readdir->plus) { - attrs[0] |= FATTR4_WORD0_TYPE|FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE| -- FATTR4_WORD0_FSID|FATTR4_WORD0_FILEHANDLE; -+ FATTR4_WORD0_FSID|FATTR4_WORD0_FILEHANDLE|FATTR4_WORD0_FILEID; - attrs[1] |= FATTR4_WORD1_MODE|FATTR4_WORD1_NUMLINKS|FATTR4_WORD1_OWNER| - FATTR4_WORD1_OWNER_GROUP|FATTR4_WORD1_RAWDEV| - FATTR4_WORD1_SPACE_USED|FATTR4_WORD1_TIME_ACCESS| - FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY; - dircount >>= 1; - } -- attrs[0] |= FATTR4_WORD0_RDATTR_ERROR|FATTR4_WORD0_FILEID; -- attrs[1] |= FATTR4_WORD1_MOUNTED_ON_FILEID; -- /* Switch to mounted_on_fileid if the server supports it */ -- if (readdir->bitmask[1] & FATTR4_WORD1_MOUNTED_ON_FILEID) -- attrs[0] &= ~FATTR4_WORD0_FILEID; -- else -- attrs[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID; -+ /* Use mounted_on_fileid only if the server supports it */ -+ if (!(readdir->bitmask[1] & FATTR4_WORD1_MOUNTED_ON_FILEID)) -+ attrs[0] |= FATTR4_WORD0_FILEID; - - p = reserve_space(xdr, 12+NFS4_VERIFIER_SIZE+20); - *p++ = cpu_to_be32(OP_READDIR); -@@ -3140,7 +3139,7 @@ static int decode_attr_mounted_on_fileid(struct xdr_stream *xdr, uint32_t *bitma - goto out_overflow; - xdr_decode_hyper(p, fileid); - bitmap[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID; -- ret = NFS_ATTR_FATTR_FILEID; -+ ret = NFS_ATTR_FATTR_MOUNTED_ON_FILEID; - } - dprintk("%s: fileid=%Lu\n", __func__, (unsigned long long)*fileid); - return ret; -@@ -4002,7 +4001,6 @@ static int decode_getfattr_attrs(struct xdr_stream *xdr, uint32_t *bitmap, - { - int status; - umode_t fmode = 0; -- uint64_t fileid; - uint32_t type; - - status = decode_attr_type(xdr, bitmap, &type); -@@ -4101,13 +4099,10 @@ static int decode_getfattr_attrs(struct xdr_stream *xdr, uint32_t *bitmap, - goto xdr_error; - fattr->valid |= status; - -- status = decode_attr_mounted_on_fileid(xdr, bitmap, &fileid); -+ status = decode_attr_mounted_on_fileid(xdr, bitmap, &fattr->mounted_on_fileid); - if (status < 0) - goto xdr_error; -- if (status != 0 && !(fattr->valid & status)) { -- fattr->fileid = fileid; -- fattr->valid |= status; -- } -+ fattr->valid |= status; - - xdr_error: - dprintk("%s: xdr returned %d\n", __func__, -status); -@@ -4838,17 +4833,21 @@ static int decode_secinfo(struct xdr_stream *xdr, struct nfs4_secinfo_res *res) - struct nfs4_secinfo_flavor *sec_flavor; - int status; - __be32 *p; -- int i; -+ int i, num_flavors; - - status = decode_op_hdr(xdr, OP_SECINFO); -+ if (status) -+ goto out; - p = xdr_inline_decode(xdr, 4); - if (unlikely(!p)) - goto out_overflow; -- res->flavors->num_flavors = be32_to_cpup(p); - -- for (i = 0; i < res->flavors->num_flavors; i++) { -+ res->flavors->num_flavors = 0; -+ num_flavors = be32_to_cpup(p); -+ -+ for (i = 0; i < num_flavors; i++) { - sec_flavor = &res->flavors->flavors[i]; -- if ((char *)&sec_flavor[1] - (char *)res > PAGE_SIZE) -+ if ((char *)&sec_flavor[1] - (char *)res->flavors > PAGE_SIZE) - break; - - p = xdr_inline_decode(xdr, 4); -@@ -4857,13 +4856,15 @@ static int decode_secinfo(struct xdr_stream *xdr, struct nfs4_secinfo_res *res) - sec_flavor->flavor = be32_to_cpup(p); - - if (sec_flavor->flavor == RPC_AUTH_GSS) { -- if (decode_secinfo_gss(xdr, sec_flavor)) -- break; -+ status = decode_secinfo_gss(xdr, sec_flavor); -+ if (status) -+ goto out; - } -+ res->flavors->num_flavors++; - } - -- return 0; -- -+out: -+ return status; - out_overflow: - print_overflow_msg(__func__, xdr); - return -EIO; -@@ -6408,7 +6409,9 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry, - if (decode_getfattr_attrs(xdr, bitmap, entry->fattr, entry->fh, - entry->server, 1) < 0) - goto out_overflow; -- if (entry->fattr->valid & NFS_ATTR_FATTR_FILEID) -+ if (entry->fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) -+ entry->ino = entry->fattr->mounted_on_fileid; -+ else if (entry->fattr->valid & NFS_ATTR_FATTR_FILEID) - entry->ino = entry->fattr->fileid; - - entry->d_type = DT_UNKNOWN; -diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c -index d9ab972..ff681ab 100644 ---- a/fs/nfs/pnfs.c -+++ b/fs/nfs/pnfs.c -@@ -1004,6 +1004,7 @@ pnfs_set_layoutcommit(struct nfs_write_data *wdata) - { - struct nfs_inode *nfsi = NFS_I(wdata->inode); - loff_t end_pos = wdata->args.offset + wdata->res.count; -+ bool mark_as_dirty = false; - - spin_lock(&nfsi->vfs_inode.i_lock); - if (!test_and_set_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) { -@@ -1011,13 +1012,18 @@ pnfs_set_layoutcommit(struct nfs_write_data *wdata) - get_lseg(wdata->lseg); - wdata->lseg->pls_lc_cred = - get_rpccred(wdata->args.context->state->owner->so_cred); -- mark_inode_dirty_sync(wdata->inode); -+ mark_as_dirty = true; - dprintk("%s: Set layoutcommit for inode %lu ", - __func__, wdata->inode->i_ino); - } - if (end_pos > wdata->lseg->pls_end_pos) - wdata->lseg->pls_end_pos = end_pos; - spin_unlock(&nfsi->vfs_inode.i_lock); -+ -+ /* if pnfs_layoutcommit_inode() runs between inode locks, the next one -+ * will be a noop because NFS_INO_LAYOUTCOMMIT will not be set */ -+ if (mark_as_dirty) -+ mark_inode_dirty_sync(wdata->inode); - } - EXPORT_SYMBOL_GPL(pnfs_set_layoutcommit); - -diff --git a/fs/nfs/super.c b/fs/nfs/super.c -index 2b8e9a5..e288f06 100644 ---- a/fs/nfs/super.c -+++ b/fs/nfs/super.c -@@ -1004,6 +1004,7 @@ static int nfs_parse_security_flavors(char *value, - return 0; - } - -+ mnt->flags |= NFS_MOUNT_SECFLAVOUR; - mnt->auth_flavor_len = 1; - return 1; - } -@@ -1976,6 +1977,15 @@ nfs_remount(struct super_block *sb, int *flags, char *raw_data) - if (error < 0) - goto out; - -+ /* -+ * noac is a special case. It implies -o sync, but that's not -+ * necessarily reflected in the mtab options. do_remount_sb -+ * will clear MS_SYNCHRONOUS if -o sync wasn't specified in the -+ * remount options, so we have to explicitly reset it. -+ */ -+ if (data->flags & NFS_MOUNT_NOAC) -+ *flags |= MS_SYNCHRONOUS; -+ - /* compare new mount options with old ones */ - error = nfs_compare_remount_data(nfss, data); - out: -@@ -2235,8 +2245,7 @@ static struct dentry *nfs_fs_mount(struct file_system_type *fs_type, - if (!s->s_root) { - /* initial superblock/root creation */ - nfs_fill_super(s, data); -- nfs_fscache_get_super_cookie( -- s, data ? data->fscache_uniq : NULL, NULL); -+ nfs_fscache_get_super_cookie(s, data->fscache_uniq, NULL); - } - - mntroot = nfs_get_root(s, mntfh, dev_name); -diff --git a/fs/nfs/write.c b/fs/nfs/write.c -index e4cbc11..3bd5d7e 100644 ---- a/fs/nfs/write.c -+++ b/fs/nfs/write.c -@@ -680,7 +680,6 @@ static int nfs_writepage_setup(struct nfs_open_context *ctx, struct page *page, - req = nfs_setup_write_request(ctx, page, offset, count); - if (IS_ERR(req)) - return PTR_ERR(req); -- nfs_mark_request_dirty(req); - /* Update file length */ - nfs_grow_file(page, offset, count); - nfs_mark_uptodate(page, req->wb_pgbase, req->wb_bytes); -@@ -1418,8 +1417,7 @@ static void nfs_commit_done(struct rpc_task *task, void *calldata) - task->tk_pid, task->tk_status); - - /* Call the NFS version-specific code */ -- if (NFS_PROTO(data->inode)->commit_done(task, data) != 0) -- return; -+ NFS_PROTO(data->inode)->commit_done(task, data); - } - - void nfs_commit_release_pages(struct nfs_write_data *data) -diff --git a/fs/ocfs2/ocfs2_fs.h b/fs/ocfs2/ocfs2_fs.h -index b68f87a..938387a 100644 ---- a/fs/ocfs2/ocfs2_fs.h -+++ b/fs/ocfs2/ocfs2_fs.h -@@ -1019,7 +1019,7 @@ struct ocfs2_xattr_entry { - __le16 xe_name_offset; /* byte offset from the 1st entry in the - local xattr storage(inode, xattr block or - xattr bucket). */ -- __u8 xe_name_len; /* xattr name len, does't include prefix. */ -+ __u8 xe_name_len; /* xattr name len, doesn't include prefix. */ - __u8 xe_type; /* the low 7 bits indicate the name prefix - * type and the highest bit indicates whether - * the EA is stored in the local storage. */ -diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h -index f22e7fe..ade09d7 100644 ---- a/include/drm/drm_fb_helper.h -+++ b/include/drm/drm_fb_helper.h -@@ -118,6 +118,7 @@ int drm_fb_helper_setcolreg(unsigned regno, - unsigned transp, - struct fb_info *info); - -+bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper); - void drm_fb_helper_restore(void); - void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper, - uint32_t fb_width, uint32_t fb_height); -diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h -index 3bce1a4..7aa5ddd 100644 ---- a/include/drm/radeon_drm.h -+++ b/include/drm/radeon_drm.h -@@ -909,6 +909,7 @@ struct drm_radeon_cs { - #define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ - #define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */ - #define RADEON_INFO_NUM_BACKENDS 0x0a /* DB/backends for r600+ - need for OQ */ -+#define RADEON_INFO_NUM_TILE_PIPES 0x0b /* tile pipes for r600+ */ - - struct drm_radeon_info { - uint32_t request; -diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h -index df29c8f..8847c8c 100644 ---- a/include/linux/huge_mm.h -+++ b/include/linux/huge_mm.h -@@ -117,7 +117,7 @@ static inline void vma_adjust_trans_huge(struct vm_area_struct *vma, - unsigned long end, - long adjust_next) - { -- if (!vma->anon_vma || vma->vm_ops || vma->vm_file) -+ if (!vma->anon_vma || vma->vm_ops) - return; - __vma_adjust_trans_huge(vma, start, end, adjust_next); - } -diff --git a/include/linux/mm.h b/include/linux/mm.h -index 692dbae..2348db2 100644 ---- a/include/linux/mm.h -+++ b/include/linux/mm.h -@@ -137,7 +137,8 @@ extern unsigned int kobjsize(const void *objp); - #define VM_RandomReadHint(v) ((v)->vm_flags & VM_RAND_READ) - - /* -- * special vmas that are non-mergable, non-mlock()able -+ * Special vmas that are non-mergable, non-mlock()able. -+ * Note: mm/huge_memory.c VM_NO_THP depends on this definition. - */ - #define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_RESERVED | VM_PFNMAP) - -diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h -index 216cea5..87694ca 100644 ---- a/include/linux/nfs_fs_sb.h -+++ b/include/linux/nfs_fs_sb.h -@@ -47,6 +47,7 @@ struct nfs_client { - - #ifdef CONFIG_NFS_V4 - u64 cl_clientid; /* constant */ -+ nfs4_verifier cl_confirm; /* Clientid verifier */ - unsigned long cl_state; - - spinlock_t cl_lock; -diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h -index 78b101e..890dce2 100644 ---- a/include/linux/nfs_xdr.h -+++ b/include/linux/nfs_xdr.h -@@ -50,6 +50,7 @@ struct nfs_fattr { - } du; - struct nfs_fsid fsid; - __u64 fileid; -+ __u64 mounted_on_fileid; - struct timespec atime; - struct timespec mtime; - struct timespec ctime; -@@ -83,6 +84,7 @@ struct nfs_fattr { - #define NFS_ATTR_FATTR_PRECHANGE (1U << 18) - #define NFS_ATTR_FATTR_V4_REFERRAL (1U << 19) /* NFSv4 referral */ - #define NFS_ATTR_FATTR_MOUNTPOINT (1U << 20) /* Treat as mountpoint */ -+#define NFS_ATTR_FATTR_MOUNTED_ON_FILEID (1U << 21) - - #define NFS_ATTR_FATTR (NFS_ATTR_FATTR_TYPE \ - | NFS_ATTR_FATTR_MODE \ -diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h -index d81db80..f73c482 100644 ---- a/include/linux/sunrpc/sched.h -+++ b/include/linux/sunrpc/sched.h -@@ -127,13 +127,16 @@ struct rpc_task_setup { - #define RPC_TASK_KILLED 0x0100 /* task was killed */ - #define RPC_TASK_SOFT 0x0200 /* Use soft timeouts */ - #define RPC_TASK_SOFTCONN 0x0400 /* Fail if can't connect */ -+#define RPC_TASK_SENT 0x0800 /* message was sent */ -+#define RPC_TASK_TIMEOUT 0x1000 /* fail with ETIMEDOUT on timeout */ - - #define RPC_IS_ASYNC(t) ((t)->tk_flags & RPC_TASK_ASYNC) - #define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER) - #define RPC_DO_ROOTOVERRIDE(t) ((t)->tk_flags & RPC_TASK_ROOTCREDS) - #define RPC_ASSASSINATED(t) ((t)->tk_flags & RPC_TASK_KILLED) --#define RPC_IS_SOFT(t) ((t)->tk_flags & RPC_TASK_SOFT) -+#define RPC_IS_SOFT(t) ((t)->tk_flags & (RPC_TASK_SOFT|RPC_TASK_TIMEOUT)) - #define RPC_IS_SOFTCONN(t) ((t)->tk_flags & RPC_TASK_SOFTCONN) -+#define RPC_WAS_SENT(t) ((t)->tk_flags & RPC_TASK_SENT) - - #define RPC_TASK_RUNNING 0 - #define RPC_TASK_QUEUED 1 -diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h -index 7054a7a..de5c159 100644 ---- a/include/linux/v4l2-mediabus.h -+++ b/include/linux/v4l2-mediabus.h -@@ -47,7 +47,7 @@ enum v4l2_mbus_pixelcode { - V4L2_MBUS_FMT_RGB565_2X8_BE = 0x1007, - V4L2_MBUS_FMT_RGB565_2X8_LE = 0x1008, - -- /* YUV (including grey) - next is 0x2013 */ -+ /* YUV (including grey) - next is 0x2014 */ - V4L2_MBUS_FMT_Y8_1X8 = 0x2001, - V4L2_MBUS_FMT_UYVY8_1_5X8 = 0x2002, - V4L2_MBUS_FMT_VYUY8_1_5X8 = 0x2003, -@@ -60,6 +60,7 @@ enum v4l2_mbus_pixelcode { - V4L2_MBUS_FMT_Y10_1X10 = 0x200a, - V4L2_MBUS_FMT_YUYV10_2X10 = 0x200b, - V4L2_MBUS_FMT_YVYU10_2X10 = 0x200c, -+ V4L2_MBUS_FMT_Y12_1X12 = 0x2013, - V4L2_MBUS_FMT_UYVY8_1X16 = 0x200f, - V4L2_MBUS_FMT_VYUY8_1X16 = 0x2010, - V4L2_MBUS_FMT_YUYV8_1X16 = 0x2011, -@@ -67,9 +68,11 @@ enum v4l2_mbus_pixelcode { - V4L2_MBUS_FMT_YUYV10_1X20 = 0x200d, - V4L2_MBUS_FMT_YVYU10_1X20 = 0x200e, - -- /* Bayer - next is 0x3013 */ -+ /* Bayer - next is 0x3015 */ - V4L2_MBUS_FMT_SBGGR8_1X8 = 0x3001, -+ V4L2_MBUS_FMT_SGBRG8_1X8 = 0x3013, - V4L2_MBUS_FMT_SGRBG8_1X8 = 0x3002, -+ V4L2_MBUS_FMT_SRGGB8_1X8 = 0x3014, - V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8 = 0x300b, - V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8 = 0x300c, - V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8 = 0x3009, -diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h -index aa6c393..be82c8e 100644 ---- a/include/linux/videodev2.h -+++ b/include/linux/videodev2.h -@@ -308,6 +308,7 @@ struct v4l2_pix_format { - #define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */ - #define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */ - #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ -+#define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */ - #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ - - /* Palette formats */ -diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h -index bd102cf..d61febf 100644 ---- a/include/media/v4l2-device.h -+++ b/include/media/v4l2-device.h -@@ -163,7 +163,7 @@ v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev); - ({ \ - struct v4l2_subdev *__sd; \ - __v4l2_device_call_subdevs_until_err_p(v4l2_dev, __sd, cond, o, \ -- f, args...); \ -+ f , ##args); \ - }) - - /* Call the specified callback for all subdevs matching grp_id (if 0, then -diff --git a/init/Kconfig b/init/Kconfig -index 7a71e0a..d886b1e 100644 ---- a/init/Kconfig -+++ b/init/Kconfig -@@ -1226,6 +1226,7 @@ config SLAB - per cpu and per node queues. - - config SLUB -+ depends on BROKEN || NUMA || !DISCONTIGMEM - bool "SLUB (Unqueued Allocator)" - help - SLUB is a slab allocator that minimizes cache line usage -diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c -index 9017478..87fdb3f 100644 ---- a/kernel/hrtimer.c -+++ b/kernel/hrtimer.c -@@ -81,7 +81,11 @@ DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) = - } - }; - --static int hrtimer_clock_to_base_table[MAX_CLOCKS]; -+static int hrtimer_clock_to_base_table[MAX_CLOCKS] = { -+ [CLOCK_REALTIME] = HRTIMER_BASE_REALTIME, -+ [CLOCK_MONOTONIC] = HRTIMER_BASE_MONOTONIC, -+ [CLOCK_BOOTTIME] = HRTIMER_BASE_BOOTTIME, -+}; - - static inline int hrtimer_clockid_to_base(clockid_t clock_id) - { -@@ -1722,10 +1726,6 @@ static struct notifier_block __cpuinitdata hrtimers_nb = { - - void __init hrtimers_init(void) - { -- hrtimer_clock_to_base_table[CLOCK_REALTIME] = HRTIMER_BASE_REALTIME; -- hrtimer_clock_to_base_table[CLOCK_MONOTONIC] = HRTIMER_BASE_MONOTONIC; -- hrtimer_clock_to_base_table[CLOCK_BOOTTIME] = HRTIMER_BASE_BOOTTIME; -- - hrtimer_cpu_notify(&hrtimers_nb, (unsigned long)CPU_UP_PREPARE, - (void *)(long)smp_processor_id()); - register_cpu_notifier(&hrtimers_nb); -diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig -index 61d7d59f..2ad39e5 100644 ---- a/kernel/trace/Kconfig -+++ b/kernel/trace/Kconfig -@@ -141,7 +141,7 @@ if FTRACE - config FUNCTION_TRACER - bool "Kernel Function Tracer" - depends on HAVE_FUNCTION_TRACER -- select FRAME_POINTER if !ARM_UNWIND && !S390 -+ select FRAME_POINTER if !ARM_UNWIND && !S390 && !MICROBLAZE - select KALLSYMS - select GENERIC_TRACER - select CONTEXT_SWITCH_TRACER -diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index 140dce7..14733d4 100644 ---- a/kernel/watchdog.c -+++ b/kernel/watchdog.c -@@ -430,9 +430,12 @@ static int watchdog_enable(int cpu) - p = kthread_create(watchdog, (void *)(unsigned long)cpu, "watchdog/%d", cpu); - if (IS_ERR(p)) { - printk(KERN_ERR "softlockup watchdog for %i failed\n", cpu); -- if (!err) -+ if (!err) { - /* if hardlockup hasn't already set this */ - err = PTR_ERR(p); -+ /* and disable the perf event */ -+ watchdog_nmi_disable(cpu); -+ } - goto out; - } - kthread_bind(p, cpu); -diff --git a/mm/huge_memory.c b/mm/huge_memory.c -index 470dcda..83326ad 100644 ---- a/mm/huge_memory.c -+++ b/mm/huge_memory.c -@@ -1408,6 +1408,9 @@ out: - return ret; - } - -+#define VM_NO_THP (VM_SPECIAL|VM_INSERTPAGE|VM_MIXEDMAP|VM_SAO| \ -+ VM_HUGETLB|VM_SHARED|VM_MAYSHARE) -+ - int hugepage_madvise(struct vm_area_struct *vma, - unsigned long *vm_flags, int advice) - { -@@ -1416,11 +1419,7 @@ int hugepage_madvise(struct vm_area_struct *vma, - /* - * Be somewhat over-protective like KSM for now! - */ -- if (*vm_flags & (VM_HUGEPAGE | -- VM_SHARED | VM_MAYSHARE | -- VM_PFNMAP | VM_IO | VM_DONTEXPAND | -- VM_RESERVED | VM_HUGETLB | VM_INSERTPAGE | -- VM_MIXEDMAP | VM_SAO)) -+ if (*vm_flags & (VM_HUGEPAGE | VM_NO_THP)) - return -EINVAL; - *vm_flags &= ~VM_NOHUGEPAGE; - *vm_flags |= VM_HUGEPAGE; -@@ -1436,11 +1435,7 @@ int hugepage_madvise(struct vm_area_struct *vma, - /* - * Be somewhat over-protective like KSM for now! - */ -- if (*vm_flags & (VM_NOHUGEPAGE | -- VM_SHARED | VM_MAYSHARE | -- VM_PFNMAP | VM_IO | VM_DONTEXPAND | -- VM_RESERVED | VM_HUGETLB | VM_INSERTPAGE | -- VM_MIXEDMAP | VM_SAO)) -+ if (*vm_flags & (VM_NOHUGEPAGE | VM_NO_THP)) - return -EINVAL; - *vm_flags &= ~VM_HUGEPAGE; - *vm_flags |= VM_NOHUGEPAGE; -@@ -1574,10 +1569,14 @@ int khugepaged_enter_vma_merge(struct vm_area_struct *vma) - * page fault if needed. - */ - return 0; -- if (vma->vm_file || vma->vm_ops) -+ if (vma->vm_ops) - /* khugepaged not yet working on file or special mappings */ - return 0; -- VM_BUG_ON(is_linear_pfn_mapping(vma) || is_pfn_mapping(vma)); -+ /* -+ * If is_pfn_mapping() is true is_learn_pfn_mapping() must be -+ * true too, verify it here. -+ */ -+ VM_BUG_ON(is_linear_pfn_mapping(vma) || vma->vm_flags & VM_NO_THP); - hstart = (vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK; - hend = vma->vm_end & HPAGE_PMD_MASK; - if (hstart < hend) -@@ -1828,12 +1827,15 @@ static void collapse_huge_page(struct mm_struct *mm, - (vma->vm_flags & VM_NOHUGEPAGE)) - goto out; - -- /* VM_PFNMAP vmas may have vm_ops null but vm_file set */ -- if (!vma->anon_vma || vma->vm_ops || vma->vm_file) -+ if (!vma->anon_vma || vma->vm_ops) - goto out; - if (is_vma_temporary_stack(vma)) - goto out; -- VM_BUG_ON(is_linear_pfn_mapping(vma) || is_pfn_mapping(vma)); -+ /* -+ * If is_pfn_mapping() is true is_learn_pfn_mapping() must be -+ * true too, verify it here. -+ */ -+ VM_BUG_ON(is_linear_pfn_mapping(vma) || vma->vm_flags & VM_NO_THP); - - pgd = pgd_offset(mm, address); - if (!pgd_present(*pgd)) -@@ -2066,13 +2068,16 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, - progress++; - continue; - } -- /* VM_PFNMAP vmas may have vm_ops null but vm_file set */ -- if (!vma->anon_vma || vma->vm_ops || vma->vm_file) -+ if (!vma->anon_vma || vma->vm_ops) - goto skip; - if (is_vma_temporary_stack(vma)) - goto skip; -- -- VM_BUG_ON(is_linear_pfn_mapping(vma) || is_pfn_mapping(vma)); -+ /* -+ * If is_pfn_mapping() is true is_learn_pfn_mapping() -+ * must be true too, verify it here. -+ */ -+ VM_BUG_ON(is_linear_pfn_mapping(vma) || -+ vma->vm_flags & VM_NO_THP); - - hstart = (vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK; - hend = vma->vm_end & HPAGE_PMD_MASK; -diff --git a/mm/memory.c b/mm/memory.c -index ce22a25..607098d4 100644 ---- a/mm/memory.c -+++ b/mm/memory.c -@@ -3396,7 +3396,7 @@ int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, - * run pte_offset_map on the pmd, if an huge pmd could - * materialize from under us from a different thread. - */ -- if (unlikely(__pte_alloc(mm, vma, pmd, address))) -+ if (unlikely(pmd_none(*pmd)) && __pte_alloc(mm, vma, pmd, address)) - return VM_FAULT_OOM; - /* if an huge pmd materialized from under us just retry later */ - if (unlikely(pmd_trans_huge(*pmd))) -diff --git a/mm/oom_kill.c b/mm/oom_kill.c -index 83fb72c1..f52e85c 100644 ---- a/mm/oom_kill.c -+++ b/mm/oom_kill.c -@@ -172,10 +172,13 @@ unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *mem, - - /* - * The baseline for the badness score is the proportion of RAM that each -- * task's rss and swap space use. -+ * task's rss, pagetable and swap space use. - */ -- points = (get_mm_rss(p->mm) + get_mm_counter(p->mm, MM_SWAPENTS)) * 1000 / -- totalpages; -+ points = get_mm_rss(p->mm) + p->mm->nr_ptes; -+ points += get_mm_counter(p->mm, MM_SWAPENTS); -+ -+ points *= 1000; -+ points /= totalpages; - task_unlock(p); - - /* -diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c -index fce9bd3..5c04f3e 100644 ---- a/net/l2tp/l2tp_ip.c -+++ b/net/l2tp/l2tp_ip.c -@@ -667,7 +667,7 @@ MODULE_AUTHOR("James Chapman "); - MODULE_DESCRIPTION("L2TP over IP"); - MODULE_VERSION("1.0"); - --/* Use the value of SOCK_DGRAM (2) directory, because __stringify does't like -+/* Use the value of SOCK_DGRAM (2) directory, because __stringify doesn't like - * enums - */ - MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 2, IPPROTO_L2TP); -diff --git a/net/sctp/ulpevent.c b/net/sctp/ulpevent.c -index dff27d5..61b1f5a 100644 ---- a/net/sctp/ulpevent.c -+++ b/net/sctp/ulpevent.c -@@ -554,7 +554,7 @@ struct sctp_ulpevent *sctp_ulpevent_make_send_failed( - memcpy(&ssf->ssf_info, &chunk->sinfo, sizeof(struct sctp_sndrcvinfo)); - - /* Per TSVWG discussion with Randy. Allow the application to -- * resemble a fragmented message. -+ * reassemble a fragmented message. - */ - ssf->ssf_info.sinfo_flags = chunk->chunk_hdr->flags; - -diff --git a/net/sunrpc/Kconfig b/net/sunrpc/Kconfig -index 8873fd8..b2198e6 100644 ---- a/net/sunrpc/Kconfig -+++ b/net/sunrpc/Kconfig -@@ -18,14 +18,13 @@ config SUNRPC_XPRT_RDMA - If unsure, say N. - - config RPCSEC_GSS_KRB5 -- tristate -+ tristate "Secure RPC: Kerberos V mechanism" - depends on SUNRPC && CRYPTO -- prompt "Secure RPC: Kerberos V mechanism" if !(NFS_V4 || NFSD_V4) -+ depends on CRYPTO_MD5 && CRYPTO_DES && CRYPTO_CBC && CRYPTO_CTS -+ depends on CRYPTO_ECB && CRYPTO_HMAC && CRYPTO_SHA1 && CRYPTO_AES -+ depends on CRYPTO_ARC4 - default y - select SUNRPC_GSS -- select CRYPTO_MD5 -- select CRYPTO_DES -- select CRYPTO_CBC - help - Choose Y here to enable Secure RPC using the Kerberos version 5 - GSS-API mechanism (RFC 1964). -diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c -index f3914d0..339ba64 100644 ---- a/net/sunrpc/auth_gss/auth_gss.c -+++ b/net/sunrpc/auth_gss/auth_gss.c -@@ -520,7 +520,7 @@ gss_refresh_upcall(struct rpc_task *task) - warn_gssd(); - task->tk_timeout = 15*HZ; - rpc_sleep_on(&pipe_version_rpc_waitqueue, task, NULL); -- return 0; -+ return -EAGAIN; - } - if (IS_ERR(gss_msg)) { - err = PTR_ERR(gss_msg); -@@ -563,10 +563,12 @@ retry: - if (PTR_ERR(gss_msg) == -EAGAIN) { - err = wait_event_interruptible_timeout(pipe_version_waitqueue, - pipe_version >= 0, 15*HZ); -+ if (pipe_version < 0) { -+ warn_gssd(); -+ err = -EACCES; -+ } - if (err) - goto out; -- if (pipe_version < 0) -- warn_gssd(); - goto retry; - } - if (IS_ERR(gss_msg)) { -diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c -index e7a96e4..8d83f9d 100644 ---- a/net/sunrpc/clnt.c -+++ b/net/sunrpc/clnt.c -@@ -1508,7 +1508,10 @@ call_timeout(struct rpc_task *task) - if (clnt->cl_chatty) - printk(KERN_NOTICE "%s: server %s not responding, timed out\n", - clnt->cl_protname, clnt->cl_server); -- rpc_exit(task, -EIO); -+ if (task->tk_flags & RPC_TASK_TIMEOUT) -+ rpc_exit(task, -ETIMEDOUT); -+ else -+ rpc_exit(task, -EIO); - return; - } - -diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c -index 9494c37..ce5eb68 100644 ---- a/net/sunrpc/xprt.c -+++ b/net/sunrpc/xprt.c -@@ -906,6 +906,7 @@ void xprt_transmit(struct rpc_task *task) - } - - dprintk("RPC: %5u xmit complete\n", task->tk_pid); -+ task->tk_flags |= RPC_TASK_SENT; - spin_lock_bh(&xprt->transport_lock); - - xprt->ops->set_retrans_timeout(task); -diff --git a/sound/aoa/codecs/tas.c b/sound/aoa/codecs/tas.c -index 58804c7..fd2188c 100644 ---- a/sound/aoa/codecs/tas.c -+++ b/sound/aoa/codecs/tas.c -@@ -170,7 +170,7 @@ static void tas_set_volume(struct tas *tas) - /* analysing the volume and mixer tables shows - * that they are similar enough when we shift - * the mixer table down by 4 bits. The error -- * is minuscule, in just one item the error -+ * is miniscule, in just one item the error - * is 1, at a value of 0x07f17b (mixer table - * value is 0x07f17a) */ - tmp = tas_gaintable[left]; diff --git a/packages/linux/patches/linux-2.6.39-rc5-000_crosscompile.patch b/packages/linux/patches/linux-2.6.39-rc6-000_crosscompile.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-000_crosscompile.patch rename to packages/linux/patches/linux-2.6.39-rc6-000_crosscompile.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-002_bash_only_feature.patch b/packages/linux/patches/linux-2.6.39-rc6-002_bash_only_feature.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-002_bash_only_feature.patch rename to packages/linux/patches/linux-2.6.39-rc6-002_bash_only_feature.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-003-no_dev_console.patch b/packages/linux/patches/linux-2.6.39-rc6-003-no_dev_console.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-003-no_dev_console.patch rename to packages/linux/patches/linux-2.6.39-rc6-003-no_dev_console.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-004_lower_undefined_mode_timeout.patch b/packages/linux/patches/linux-2.6.39-rc6-004_lower_undefined_mode_timeout.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-004_lower_undefined_mode_timeout.patch rename to packages/linux/patches/linux-2.6.39-rc6-004_lower_undefined_mode_timeout.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-005_kconfig_no_timestamp.patch b/packages/linux/patches/linux-2.6.39-rc6-005_kconfig_no_timestamp.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-005_kconfig_no_timestamp.patch rename to packages/linux/patches/linux-2.6.39-rc6-005_kconfig_no_timestamp.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-006_enable_utf8.patch b/packages/linux/patches/linux-2.6.39-rc6-006_enable_utf8.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-006_enable_utf8.patch rename to packages/linux/patches/linux-2.6.39-rc6-006_enable_utf8.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-007_die_floppy_die.patch b/packages/linux/patches/linux-2.6.39-rc6-007_die_floppy_die.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-007_die_floppy_die.patch rename to packages/linux/patches/linux-2.6.39-rc6-007_die_floppy_die.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-008-hda_intel_prealloc_4mb_dmabuffer.patch b/packages/linux/patches/linux-2.6.39-rc6-008-hda_intel_prealloc_4mb_dmabuffer.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-008-hda_intel_prealloc_4mb_dmabuffer.patch rename to packages/linux/patches/linux-2.6.39-rc6-008-hda_intel_prealloc_4mb_dmabuffer.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-009_disable_i8042_check_on_apple_mac.patch b/packages/linux/patches/linux-2.6.39-rc6-009_disable_i8042_check_on_apple_mac.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-009_disable_i8042_check_on_apple_mac.patch rename to packages/linux/patches/linux-2.6.39-rc6-009_disable_i8042_check_on_apple_mac.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-050_add_appleir_usb_driver.patch b/packages/linux/patches/linux-2.6.39-rc6-050_add_appleir_usb_driver.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-050_add_appleir_usb_driver.patch rename to packages/linux/patches/linux-2.6.39-rc6-050_add_appleir_usb_driver.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-052-aureal_remote_quirk-0.1.patch b/packages/linux/patches/linux-2.6.39-rc6-052-aureal_remote_quirk-0.1.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-052-aureal_remote_quirk-0.1.patch rename to packages/linux/patches/linux-2.6.39-rc6-052-aureal_remote_quirk-0.1.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-053_ati-remote_all_keys_and_keychange-0.1.patch b/packages/linux/patches/linux-2.6.39-rc6-053_ati-remote_all_keys_and_keychange-0.1.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-053_ati-remote_all_keys_and_keychange-0.1.patch rename to packages/linux/patches/linux-2.6.39-rc6-053_ati-remote_all_keys_and_keychange-0.1.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-054_nuvoton-cir-only-warn-about-unknown-chips.patch b/packages/linux/patches/linux-2.6.39-rc6-054_nuvoton-cir-only-warn-about-unknown-chips.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-054_nuvoton-cir-only-warn-about-unknown-chips.patch rename to packages/linux/patches/linux-2.6.39-rc6-054_nuvoton-cir-only-warn-about-unknown-chips.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-055_nuvoton-cir-enable-CIR-on-w83667hg-chip-variant.patch b/packages/linux/patches/linux-2.6.39-rc6-055_nuvoton-cir-enable-CIR-on-w83667hg-chip-variant.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-055_nuvoton-cir-enable-CIR-on-w83667hg-chip-variant.patch rename to packages/linux/patches/linux-2.6.39-rc6-055_nuvoton-cir-enable-CIR-on-w83667hg-chip-variant.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-056_mceusb_add_DELL_receiver-0.1.patch b/packages/linux/patches/linux-2.6.39-rc6-056_mceusb_add_DELL_receiver-0.1.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-056_mceusb_add_DELL_receiver-0.1.patch rename to packages/linux/patches/linux-2.6.39-rc6-056_mceusb_add_DELL_receiver-0.1.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-057_ite-resume-debug-0.1.patch b/packages/linux/patches/linux-2.6.39-rc6-057_ite-resume-debug-0.1.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-057_ite-resume-debug-0.1.patch rename to packages/linux/patches/linux-2.6.39-rc6-057_ite-resume-debug-0.1.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-071-silence_i915_agp-module-0.1.patch b/packages/linux/patches/linux-2.6.39-rc6-071-silence_i915_agp-module-0.1.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-071-silence_i915_agp-module-0.1.patch rename to packages/linux/patches/linux-2.6.39-rc6-071-silence_i915_agp-module-0.1.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-322-omap4_pandaboard_fix_dvi_support-0.1.patch b/packages/linux/patches/linux-2.6.39-rc6-322-omap4_pandaboard_fix_dvi_support-0.1.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-322-omap4_pandaboard_fix_dvi_support-0.1.patch rename to packages/linux/patches/linux-2.6.39-rc6-322-omap4_pandaboard_fix_dvi_support-0.1.patch diff --git a/packages/linux/patches/linux-2.6.39-rc5-716_mm-zero_swappiness.patch b/packages/linux/patches/linux-2.6.39-rc6-716_mm-zero_swappiness.patch similarity index 100% rename from packages/linux/patches/linux-2.6.39-rc5-716_mm-zero_swappiness.patch rename to packages/linux/patches/linux-2.6.39-rc6-716_mm-zero_swappiness.patch diff --git a/packages/mediacenter/xbmc-addon-settings/source/addon.xml b/packages/mediacenter/xbmc-addon-settings/source/addon.xml index b336d1425b..e906c3cfb3 100644 --- a/packages/mediacenter/xbmc-addon-settings/source/addon.xml +++ b/packages/mediacenter/xbmc-addon-settings/source/addon.xml @@ -1,7 +1,7 @@ diff --git a/packages/mediacenter/xbmc-addon-settings/source/default.py b/packages/mediacenter/xbmc-addon-settings/source/default.py index 56513f7138..ba0e9bfbc6 100644 --- a/packages/mediacenter/xbmc-addon-settings/source/default.py +++ b/packages/mediacenter/xbmc-addon-settings/source/default.py @@ -27,7 +27,7 @@ __author__ = "OpenELEC" __url__ = "http://www.openelec.tv" __svn_url__ = "" __credits__ = "" -__version__ = "0.0.7" +__version__ = "0.0.8" __XBMC_Revision__ = "22240" __settings__ = xbmcaddon.Addon(id='os.openelec.settings') diff --git a/packages/mediacenter/xbmc-addon-settings/source/resources/settings.xml b/packages/mediacenter/xbmc-addon-settings/source/resources/settings.xml index e945aa5dba..493b522f7f 100644 --- a/packages/mediacenter/xbmc-addon-settings/source/resources/settings.xml +++ b/packages/mediacenter/xbmc-addon-settings/source/resources/settings.xml @@ -11,7 +11,7 @@ - + diff --git a/packages/mediacenter/xbmc/install b/packages/mediacenter/xbmc/install index 58d9f182bf..1753b43cf8 100755 --- a/packages/mediacenter/xbmc/install +++ b/packages/mediacenter/xbmc/install @@ -55,6 +55,12 @@ mkdir -p $INSTALL/usr/share/xbmc/media # cp $PKG_DIR/splash/splash.png $INSTALL/usr/share/xbmc/media/Splash.png # fi +# cleanup and python addon fixes + mkdir -p $INSTALL/usr/share/xbmc/addons/script.module.pil/lib + ln -s `ls -d $INSTALL/usr/lib/python*/site-packages | sed -e "s,$INSTALL,,"`/PIL \ + $INSTALL/usr/share/xbmc/addons/script.module.pil/lib/PIL + rm -rf $INSTALL/usr/share/xbmc/addons/script.module.pysqlite + mkdir -p $INSTALL/usr/share/xbmc/addons cp -R $PKG_DIR/config/os.openelec.tv $INSTALL/usr/share/xbmc/addons $SED "s|@ADDON_OS_VERSION@|$OS_VERSION|g" -i $INSTALL/usr/share/xbmc/addons/os.openelec.tv/addon.xml diff --git a/packages/network/bluez/meta b/packages/network/bluez/meta index 1d72079cb8..2a05930025 100644 --- a/packages/network/bluez/meta +++ b/packages/network/bluez/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="bluez" -PKG_VERSION="4.92" +PKG_VERSION="4.93" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/sysutils/busybox/config/busybox.conf b/packages/sysutils/busybox/config/busybox.conf index c547bae270..b61494e50c 100644 --- a/packages/sysutils/busybox/config/busybox.conf +++ b/packages/sysutils/busybox/config/busybox.conf @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Busybox version: 1.18.4 -# Tue Apr 12 14:24:15 2011 +# Tue May 3 19:22:30 2011 # CONFIG_HAVE_DOT_CONFIG=y @@ -966,7 +966,7 @@ CONFIG_FEATURE_SH_EXTRA_QUIET=y # CONFIG_SYSLOGD=y CONFIG_FEATURE_ROTATE_LOGFILE=y -# CONFIG_FEATURE_REMOTE_LOG is not set +CONFIG_FEATURE_REMOTE_LOG=y CONFIG_FEATURE_SYSLOGD_DUP=y CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256 CONFIG_FEATURE_IPC_SYSLOG=y diff --git a/packages/sysutils/lcdproc/config/LCDd.conf b/packages/sysutils/lcdproc/config/LCDd.conf new file mode 100644 index 0000000000..47d4764e1a --- /dev/null +++ b/packages/sysutils/lcdproc/config/LCDd.conf @@ -0,0 +1,1149 @@ +# LCDd.conf -- configuration file for the LCDproc server daemon LCDd +# +# This file contains the configuration for the LCDd server. +# +# The format is ini-file-like. It is divided into sections that start at +# markers that look like [section]. Comments are all line-based comments, +# and are lines that start with '#' or ';'. +# +# The server has a 'central' section named [server]. For the menu there is +# a section called [menu]. Further each driver has a section which +# defines how the driver acts. +# +# The drivers are activated by specifiying them in a driver= line in the +# server section, like: +# +# Driver=curses +# +# This tells LCDd to use the curses driver. +# The first driver that is loaded and is capable of output defines the +# size of the display. The default driver to use is curses. +# If the driver is specified using the -d command line option, +# the Driver= options in the config file are ignored. +# +# The drivers read their own options from the respective sections. + + + +## Server section with all kinds of settings for the LCDd server ## +[server] + +# Where can we find the driver modules ? +# IMPORTANT: Make sure to change this setting to reflect your +# specific setup! Otherwise LCDd won't be able to find +# the driver modules and will thus not be able to +# function properly. +# NOTE: Always place a slash as last character ! +DriverPath=/usr/lib/lcdproc/ + +# Tells the server to load the given drivers. Multiple lines can be given. +# The name of the driver is case sensitive and determines the section +# where to look for further configuration options of the specific driver +# as well as the name of the dynamic driver module to load at runtime. +# The latter one can be changed by giving af File= directive in the +# driver specific section. +# +# The following drivers are supported: +# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, ea65, +# EyeboxOne, g15, glcdlib, glk, hd44780, icp_a106, imon, imonlcd, +# IOWarrior, irman, joy, lb216, lcdm001, lcterm, lirc, lis, MD8800, +# mdm166a, ms6931, mtc_s16209x, MtxOrb, mx5000, NoritakeVFD, picolcd, +# pyramid, sed1330, sed1520, serialPOS, serialVFD, shuttleVFD, sli, +# stv5730, svga, t6963, text, tyan, ula200, xosd +Driver=irtrans + +# Tells the driver to bind to the given interface +Bind=127.0.0.1 + +# Listen on this specified port; defaults to 13666. +Port=13666 + +# Sets the reporting level; defaults to 2 (warnings and errors only). +#ReportLevel=3 + +# Should we report to syslog instead of stderr ? [default: no; legal: yes, no] +#ReportToSyslog=yes + +# User to run as. LCDd will drop its root priviledges, if any, +# and run as this user instead. +User=nobody + +# The server will stay in the foreground if set to true. +Foreground=no + +# Hello message: each entry represents a display line; default: builtin +Hello=" Welcome to" +Hello=" OpenELEC" + +# GoodBye message: each entry represents a display line; default: builtin +#GoodBye="Thanks for using" +#GoodBye=" OpenELEC" + +# Sets the default time in seconds to displays a screen. +WaitTime=5 + +# If yes, the the serverscreen will be rotated as a usual info screen. If no, +# it will be a background screen, only visible when no other screens are +# active. The special value 'blank' is similar to no, but only a blank screen +# is displayed. [default: on; legal: on, off, blank] +ServerScreen=blank + +# Set master backlight setting. If set to 'open' a client may control the +# backlight for its own screens (only). [default: open; legal: off, open, on] +Backlight=open + +# Set master heartbeat setting. If set to 'open' a client may control the +# heartbeat for its own screens (only). [default: open; legal: off, open, on] +Heartbeat=open + +# set title scrolling speed [default: 10; legal: 0-10] +TitleSpeed=4 + +# The "...Key=" lines define what the server does with keypresses that +# don't go to any client. +# These are the defaults: +ToggleRotateKey=Enter +PrevScreenKey=Left +NextScreenKey=Right +#ScrollUpKey=Up +#ScrollDownKey=Down + +# If you have only 4 keys, you can choose to use this: +#ToggleRotateKey=Enter +#PrevScreenKey=Up +#NextScreenKey=Down + +# If you have only 3 keys, you can choose to use this: +#ToggleRotateKey=Enter +#PrevScreenKey=Up + + + +## The menu section. The menu is an internal LCDproc client. ## +[menu] +# You can configure what keys the menu should use. Note that the MenuKey +# will be reserved exclusively, the others work in shared mode. + +# The following works excellent with 4 keys or more. +MenuKey=Escape +EnterKey=Enter +UpKey=Up +DownKey=Down +# If you have 6 keys you may define these as well +#LeftKey=Left +#RightKey=Right + +# If you have only 3 keys, you could use something like this: +#MenuKey=Escape +#EnterKey=Enter +#DownKey=Down + + + +### Driver sections are below this line, in alphabetical order ### + + +## EMAC BayRAD driver ## +[bayrad] + +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd + +# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200] +Speed=9600 + + + +## CrystalFontz driver (for CF632 & CF634) ## +[CFontz] + +# Select the output device to use [default: /dev/lcd] +Device=/dev/ttyS0 +# Select the LCD size [default: 20x4] +Size=20x4 +# Set the initial contrast [default: 560; legal: 0 - 1000] +Contrast=350 +# Set the initial brightness [default: 1000; legal: 0 - 1000] +Brightness=1000 +# Set the initial off-brightness [default: 0; legal: 0 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +OffBrightness=0 +# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200 or 115200] +Speed=9600 +# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no] +NewFirmware=no +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] +# normally you shouldn't need this +Reboot=no + + + +## CrystalFontz633 driver (for CF633 only) ## +[CFontz633] +# Note: Use of this driver is deprecated, please use CFontzPacket driver +# with Model=633 instead. + +# Select the output device to use [default: /dev/lcd] +Device=/dev/ttyS0 +# Select the LCD type (size) [default: 16x2] +Size=16x2 +# Set the initial contrast [default: 560; legal: 0 - 1000] +Contrast=350 +# Set the initial brightness [default: 1000; legal: 0 - 1000] +Brightness=1000 +# Set the initial off-brightness [default: 0; legal: 0 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +OffBrightness=50 +# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200] +Speed=19200 +# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no] +# Currently this flag is not in use, there is no such thing as NewFirmware. ;=) +#NewFirmware=no +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] +# I want to reboot the LCD to make sure we start from a known state +Reboot=yes + + + +## CrystalFontz packet driver (for CFA533, CFA631, CFA633 & CFA635) ## +[CFontzPacket] + +# Select the LCD model [default: 633; legal: 533, 631, 633, 635] +Model=633 + +# Select the output device to use [default: /dev/lcd] +Device=/dev/ttyUSB0 + +# Set the initial contrast [default: 560; legal: 0 - 1000] +Contrast=350 + +# Set the initial brightness [default: 1000; legal: 0 - 1000] +Brightness=1000 + +# Set the initial off-brightness [default: 0; legal: 0 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +OffBrightness=50 + +# Reinitialize the LCD's BIOS on driver start. [default: no; legal: yes, no] +Reboot=yes + +# Enable the USB flag if the device is connected to an USB port. For +# serial ports leave it disabled. [default: no; legal: yes, no] +#USB=yes + +# Very old 633 firmware versions do not support partial screen updates using +# 'Send Data to LCD' command (31). For those devices it may be necessary to +# enable this flag. [default: no; legal: yes, no] +#OldFirmware=yes + +# Override the LCD size known for the selected model. Usually setting this +# value should not be necessary. +#Size=20x4 + +# Override the default communication speed known for the selected model. +# [default: depending on model; legal: 19200, 115200] +#Speed=115200 + + + +## Curses driver ## +[curses] + +# color settings +# foreground color [default: blue] +Foreground=blue +# background color when "backlight" is off [default: cyan] +Background=cyan +# background color when "backlight" is on [default: red] +Backlight=red + +# display size [default: 20x4] +Size=20x4 + +# What position (X,Y) to start the left top corner at... +# Default: (7,7) +TopLeftX=7 +TopLeftY=7 + +# use ASC symbols for icons & bars [default: no; legal, yes, no] +UseACS=no + +# draw Border [default: yes; legal: yes, no] +DrawBorder=yes + + + +## Cwlinux driver ## +[CwLnx] + +# Select the LCD model [default: 12232; legal: 12232, 12832, 1602] +Model=12232 + +# Select the output device to use [default: /dev/lcd] +Device=/dev/ttyUSB0 + +# Select the LCD size [default: depending on model: 12232: 20x4, 12832: 21x4, 1602: 16x2] +Size=20x4 + +# Set the communication speed [default: 19200; legal: 9600, 19200] +Speed=19200 + +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] +# normally you shouldn't need this +Reboot=no + +# If you have a keypad connected. Keypad layout is currently not +# configureable from the config file. +Keypad=yes + +# If you have a non-standard keypad you can associate any keystrings to keys. +# There are 6 input keys in the CwLnx hardware that generate characters +# from 'A' to 'F'. +# +# The following is the built-in default mapping hardcoded in the driver. +# You can leave those unchanged if you have a standard keypad. +# You can change it if you want to report other keystrings or have a non +# standard keypad. +# KeyMap_A=Up +# KeyMap_B=Down +# KeyMap_C=Left +# KeyMap_D=Right +# KeyMap_E=Enter +# KeyMap_F=Escape + +# keypad_test_mode permits to test keypad assignement +# Default value is no +#keypad_test_mode=yes + + + +## ea65 driver for the display in AOpen XC Cube AV EA65 media barebones ## +[ea65] + +# Device is fixed /dev/ttyS1 +# Width and Height are fixed 9x1 + +# As the VFD is self luminescent we don't have a backlight +# But we can use the backlight functions to control the front LEDs +# Brightness 0 to 299 -> LEDs off +# Brightness 300 to 699 -> LEDs half bright +# Brightness 700 to 1000 -> LEDs full bright +Brightness=500 +# OffBrightness is the the value used for the 'backlight off' state +OffBrightness=0 + + + +## EyeboxOne driver ## +[EyeboxOne] + +# Select the output device to use [default: /dev/ttyS1] +#Device=/dev/cua01 +Device=/dev/ttyS1 + +# Set the display size [default: 20x4] +Size=20x4 + +# Switch on the backlight? [default: yes] +Backlight=yes + +# Switch on the cursor? [default: no] +Cursor=no + +# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200] +Speed=19200 + +# Enter Key is a \r character, so it's hardcoded in the driver +LeftKey=D +RightKey=C +UpKey=A +DownKey=B +EscapeKey=P + +# You can find out which key of your display sends which +# character by setting keypad_test_mode to yes and running +# LCDd. LCDd will output all characters it receives. +# Afterwards you can modify the settings above and set +# keypad_set_mode to no again. +keypad_test_mode=no + + + +## g15 driver for Logitech G15 Keyboard LCDs ## +[g15] + +# Display size (currently unused) +size=20x5 + + + +## glcdlib meta driver for graphical LCDs ## +[glcdlib] + +## mandatory: + +# which graphical display supported by graphlcd-base to use [default: image] +# (see /etc/graphlcd.conf for possible drivers) +Driver=irtrans + +# no=use graphlcd bitmap fonts (they have only one size / font file) +# yes=use fonts supported by FreeType2 (needs Freetype2 support in libglcdprocdriver and its dependants) +UseFT2=yes + +# text resolution in fixed width characters [default: 16x4] +# (if it won't fit according to available physical pixel resolutioni +# and the minimum available font face size in pixels, then +# 'DebugBorder' will automatically be turned on) +TextResolution=20x4 + +# path to font file to use +FontFile=/usr/share/fonts/corefonts/courbd.ttf + +## these only apply if UseFT2=yes: + +# character encoding to use +CharEncoding=iso8859-2 + +# minumum size in pixels in which fonts should be rendered +MinFontFaceSize=7x12 + +## optional: +Brightness=50 # Brightness (in %) if applicable +Contrast=50 # Contrast (in %) if applicable +Backlight=no # Backlight if applicable +UpsideDown=no # flip image upside down +Invert=no # invert light/dark pixels +ShowDebugFrame=no # turns on/off 1 pixel thick debugging + # border whithin the usable text area, + # for setting up TextResolution and + # MinFontFaceSize (if using FT2); +ShowBigBorder=no # border around the unused area +ShowThinBorder=yes # border around the unused area +PixelShiftX=0 +PixelShiftY=2 + + + +## Matrix Orbital GLK driver ## +[glk] + +# select the serial device to use [default: /dev/lcd] +Device=/dev/lcd + +# set the initial contrast value [default: 560; legal: 0 - 1000] +Contrast=560 + +# set the serial port speed [default: 19200; legal: 9600, 19200, 38400] +Speed=19200 + + + +## Hitachi HD44780 driver ## +[hd44780] + +# Select what type of connection. See documentation for types. +ConnectionType=4bit + +# Port where the LPT is [ususal: 0x278, 0x378 and 0x3BC] +Port=0x378 + +# Device of the serial interface [default: /dev/lcd] +Device=/dev/ttyS0 + +# Bitrate of the serial port (0 for interface default) +Speed=0 + +# If you have a keypad connected. +# You may also need to configure the keypad layout further on in this file. +Keypad=no + +# Set the initial contrast (bwctusb and lcd2usb) [default: 500; legal: 0 - 1000] +Contrast=0 + +# Set brightness of the backlight (lcd2usb only) [default: 0; legal 0 - 1000] +#Brightness=1000 +#OffBrightness=0 + +# If you have a switchable backlight. +Backlight=no + +# If you have the additional output port ("bargraph") and you want to +# be able to control it with the lcdproc OUTPUT command +OutputPort=no + +# Specifies if the last line is pixel addressable or it controls an +# underline effect. [default: true (= pixel addressable); legal: yes, no] +#Lastline=true + +# Specifies the size of the LCD. +# In case of multiple combined displays, this should be the total size. +Size=20x4 + +# For multiple combined displays: how many lines does each display have. +# Vspan=2,2 means both displays have 2 lines. +#vspan=2,2 + +# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible', +# set this flag to get into extended mode (4-line linear). +#ExtendedMode=yes + +# In extended mode, on some controllers like the ST7036 (in 3 line mode) +# the next line in DDRAM won't start 0x20 higher. [default: 0x20] +#LineAddress=0x10 + +# Character map to to map ISO-8859-1 to the LCD's character set +# [default: hd44780_default; legal: hd44780_default, hd44780_euro, +# ea_ks0073, sed1278f_0b, hd44780_koi8_r ] +CharMap=hd44780_default + +# If your display is slow and cannot keep up with the flow of data from +# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4 +# to increase the delays. Default: 1. +#DelayMult=2 + +# Some displays (e.g. vdr-wakeup) need a message from the driver to that it +# is still alive. When set to a value bigger then null the character in the +# upper left corner is updated every seconds. Default: 0. +#KeepAliveDisplay=0 + +# If you experience occasional garbage on your display you can use this +# option as workaround. If set to a value bigger than null it forces a +# full screen refresh seconds. Default: 0. +#RefreshDisplay=5 + +# You can reduce the inserted delays by setting this to false. +# On fast PCs it is possible your LCD does not respond correctly. +# Default: true. +DelayBus=true + +# If you have a keypad you can assign keystrings to the keys. +# See documentation for used terms and how to wire it. +# For example to give directly connected key 4 the string "Enter", use: +# KeyDirect_4=Enter +# For matrix keys use the X and Y coordinates of the key: +# KeyMatrix_1_3=Enter +KeyMatrix_4_1=Enter +KeyMatrix_4_2=Up +KeyMatrix_4_3=Down +KeyMatrix_4_4=Escape + + + +## ICP A106 driver ## +[icp_a106] +Device=/dev/ttyS1 + + + +## Code Mercenaries IO-Warrior driver ## +[IOWarrior] + +# display dimensions +Size=20x4 + +# serial number [exactly as listed by usbview] +# (if not given, the 1st IOWarrior found gets used) +#SerialNumber=00000674 + +# If you have an HD66712, a KS0073 or an other 'almost HD44780-compatible', +# set this flag to get into extended mode (4-line linear). +#ExtendedMode=yes + +# Specifies if the last line is pixel addressable or it controls an +# underline effect. [default: true (= pixel addressable); legal: yes, no] +#Lastline=true + + + +## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ## +[imon] + +# select the device to use +Device=/dev/lcd0 + +# display dimensions +Size=16x2 + + + +## Soundgraph iMON LCD ## +[imonlcd] +# Specify which iMon protocol should be used [legal: 0=15c2:ffdc device, +# 1=15c2:0038 device; default: 0] +Protocol=0 + +# Set the exit behavior [legal: 0=leave shutdown message, 1=show the big clock, +# 2=blank device; default: 1] +#OnExit=2 + +# Select the output device to use [default: /dev/lcd0] +Device=/dev/lcd0 + +# Select the displays contrast [default: 200; legal: 0-1000] +Contrast=200 + +# Specify the size of the display in pixels [default: 96x16] +#Size=96x16 + +# Set the backlight state [default: on; legal: on, off] +Backlight=open + +# Set the disc mode [legal: 0=spin the "slim" disc - two disc segments, +# 1=their complement spinning; default: 0] +#DiscMode=0 + + + +## IrMan driver ## +[IrMan] +# in case of trouble with IrMan, try the Lirc emulator for IrMan + +# Select the input device to use +#Device=/dev/irman + +# Select the configuration file to use +#Config=/etc/irman.cfg + + + +## IRtrans driver ## +[irtrans] + +# Does the device have a backlight? [default: no; legal: yes, no] +Backlight=open + +# IRTrans device to connect to [default: localhost] +#Hostname=localhost + +# display dimensions +Size=16x2 + + + +## Joystick driver ## +[joy] + +# Select the input device to use [default: /dev/js0] +Device=/dev/js0 + +# set the axis map +Map_Axis1neg=Left +Map_Axis1pos=Right +Map_Axis2neg=Up +Map_Axis2pos=Down + +# set the button map +Map_Button1=Enter +Map_Button2=Escape + + + +## LB216 driver ## +[lb216] + +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd + +# Set the initial brightness [default: 255; legal: 0 - 255] +Brightness=255 + +# Set the communication speed [default: 9600; legal: 2400, 9600] +Speed=9600 + +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] +Reboot=no + + + +## LCDM001 driver ## +[lcdm001] + +Device=/dev/ttyS1 + +# keypad settings +# Keyname Function +# Normal context Menu context +# ------- -------------- ------------ +# PauseKey Pause/Continue Enter/select +# BackKey Back(Go to previous screen) Up/Left +# ForwardKey Forward(Go to next screen) Down/Right +# MainMenuKey Open main menu Exit/Cancel +PauseKey=LeftKey +BackKey=UpKey +ForwardKey=DownKey +MainMenuKey=RightKey + +# You can rearrange the settings here. +# If your device is broken, have a look at server/drivers/lcdm001.h + + + +## HNE LCTerm driver ## +[lcterm] +Device=/dev/ttyS1 +Size=16x2 + + + +## LIRC input driver ## +[lirc] + +# Specify an alternative location of the lircrc file [default: ~/.lircrc] +#lircrc=/etc/lircrc.lcdproc + +# Must be the same as in your lircrc +#prog=lcdd + + + +## LIS MCE 2005 driver ## +[lis] + +# Set the initial brightness [default: 1000; legal: 0 - 1000] +# 0-250 = 25%, 251-500 = 50%, 501-750 = 75%, 751-1000 = 100% +#Brightness=1000 + +# Columns by lines [default: 20x2] +#Size=20x2 + +# USB Vendor ID [default: 0x0403] +# Change only if testing a compatible device. +#VendorID=0x0403 + +# USB Product ID [default: 0x6001] +# Change only if testing a compatible device. +#ProductID=0x6001 + + + +##The driver for the VFD of the Medion MD8800 PC ## +[MD8800] +# device to use [default: /dev/ttyS1] +#Device=/dev/ttyS1 + +# display size [default: 16x2] +#Size=16x2 + +# Set the initial brightness [default: 1000; legal: 0 - 1000] +Brightness=1000 +# Set the initial off-brightness [default: 0; legal: 0 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +OffBrightness=50 + + + +## Futuba MDM166A Display +[mdm166a] +# Show self-running clock after LCDd shutdown +# Possible values: [default: no; legal: no, small, big] +Clock=big +# Dimm display, no dimming gives full brightness [default: no, legal: yes, no] +Dimming=no +# Dimm display in case LCDd is inactive [default: no, legal: yes, no] +OffDimming=yes + + + +## MSI MS-6931 driver for displays in 1HU servers ## +[ms6931] + +# device to use [default: /dev/ttyS1] +Device=/dev/ttyS1 + +# display size [default: 16x2] +#Size=16x2 + + + +## MTC-S16209x driver ## +[mtc_s16209x] + +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd + +# Set the initial brightness [default: 255; legal: 0 - 255] +Brightness=255 + +# Reinitialize the LCD's BIOS [default: no; legal: yes, no] +Reboot=no + + + +## Matrix Orbital driver ## +[MtxOrb] + +# Select the output device to use [default: /dev/lcd] +Device=/dev/ttyS0 + +# Set the display size [default: 20x4] +Size=20x4 + +# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd] +Type=lkd + +# Set the initial contrast [default: 480] +# NOTE: The driver will ignore this if the display +# is a vfd or vkd as they don't have this feature +Contrast=480 + +# Some old displays do not have an adjustable backlight but only can +# switch the backlight on/off. If you experience randomly appearing block +# characters, try setting this to false. [default: yes; legal: yes, no] +hasAdjustableBacklight=no + +# Set the initial brightness [default: 1000; legal: 0 - 1000] +Brightness=1000 +# Set the initial off-brightness [default: 0; legal: 0 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +OffBrightness=0 + +# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200] +Speed=19200 + +# The following table translates from MtxOrb key letters to logical key names. +# By default no keys are mapped, meaning the keypad is not used at all. +#KeyMap_A=Left +#KeyMap_B=Right +#KeyMap_C=Up +#KeyMap_D=Down +#KeyMap_E=Enter +#KeyMap_F=Escape +# See the [menu] section for an explanation of the key mappings + +# You can find out which key of your display sends which +# character by setting keypad_test_mode to yes and running +# LCDd. LCDd will output all characters it receives. +# Afterwards you can modify the settings above and set +# keypad_set_mode to no again. +keypad_test_mode=no + + + +## mx5000 driver for LCD display on the Logitech MX5000 keyboard ## +[mx5000] + +# Select the output device to use [default: /dev/hiddev0] +Device = /dev/hiddev0 +# Time to wait in ms after the refresh screen has been sent [default: 1000] +WaitAfterRefresh = 1000 + + + +## Noritake VFD driver ## +[NoritakeVFD] +# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1 [default: /dev/lcd] +Device=/dev/ttyS0 +# Specifies the size of the LCD. +Size=20x4 +# Set the initial brightness [default: 1000; legal: 0 - 1000] +Brightness=1000 +# Set the initial off-brightness [default: 0; legal: 0 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +OffBrightness=50 +# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200] +Speed=9600 +# Set serial data parity [default: 0 (None), legal: 0(=none), 1(=odd), 2(=even)] +Parity=0 +# re-initialize the VFD [default: no; legal: yes, no] +Reboot=no + + + +## Mini-box.com picoLCD (usblcd) driver ## +[picolcd] + +# KeyTimeout is the time that LCDd spends waiting for a key press before cycling +# through other duties. Higher values make LCDd use less CPU time and make +# key presses more detectable. Lower values make LCDd more responsive but a +# little prone to missing key presses. 500 (.5 second) is the default and a +# balanced value. +KeyTimeout=500 + +# Set the initial brightness [default: 1000; legal: 0 - 1000] +Brightness=1000 + +# Set the initial contrast [default: 1000; legal: 0 - 1000] +Contrast=1000 + +# Light the keys? i[default: on; legal: on, off] +Keylights=on + +# If Keylights is on, the you can unlight specific keys below: +# Key0 is the directional pad. Key1 - Key5 correspond to the F1 - F5 keys. +# There is no LED for the +/- keys. This is a handy way to indicate to users +# which keys are disabled. [default: on; legal: on, off] +Key0Light=on +Key1Light=on +Key2Light=on +Key3Light=on +Key4Light=on +Key5Light=on + +# Host name or IP address of the LIRC instance that is to receive IR codes +# If not set, or set to an empty value, IR support is disabled. +#LircHost=127.0.0.1 + +# UDP port on which LIRC is listening [default: 8765; legal: 1 - 65535] +LircPort=8765 + +# Threshold in jiffies of synthesized gap that triggers flushing the IR data to lirc +# [default: 100 (6.1ms); 0 to suppress] +LircFlushThreshold=100 + + + +## Pyramid LCD driver ## +[pyramid] + +# device to connect to [default: /dev/lcd] +Device=/dev/ttyUSB0 + + + +## Seiko Epson 1330 driver ## +[sed1330] + +# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC +Port=0x378 + +# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446, SP14Q002) +# Note: Currently only tested with G321D & SP14Q002. +Type=G321D + +# Width x Height of a character cell in pixels [legal: 6x7 - 8x16; default: 6x10] +CellSize=6x10 + +# Select what type of connection [legal: classic, bitshaker; default: classic] +ConnectionType=classic + + + +## Seiko Epson 1520 driver ## +[sed1520] + +# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC +Port=0x378 + + + +## serial POS display driver ## +[serialPOS] + +# Device to use in serial modea [default: /dev/lcd] +Device=/dev/lcd + +# Specifies the size of the display in characters. [default: 16x2] +Size=16x2 + +# Set the communication protocol to use with the POS display. +# [default: AEDEX; legal: IEE, Epson, Emax, IBM, LogicControls, Ultimate] +Type=AEDEX + +# communication baud rate with the display [default: 9600; legal: 1200, 2400, 19200, 115200] +Speed=9600 + + + +## Serial VFD driver ## +## Drives various (see below) serial 5x7dot VFD's. ## +[serialVFD] + +# Specifies the displaytype.[default: 0] +# 0 NEC (FIPC8367 based) VFDs. +# 1 KD Rev 2.1. +# 2 Noritake VFDs (*). +# 3 Futaba VFDs +# 4 IEE S03601-95B +# 5 IEE S03601-96-080 (*) +# 6 Futaba NA202SD08FA (allmost IEE compatible) +# 7 Samsung 20S207DA4 and 20S207DA6 +# 8 Nixdorf BA6x / VT100 +# (* most should work, not testet yet.) +Type=0 + +# "no" if display connected serial, "yes" if connected parallel. [default: no(=serial)] +use_parallel=no + +# Number of Custom-Characters [default: displaytype dependent] +#Custom-Characters=0 + +# Portaddress where the LPT is. Used in parallelmode only. Usual values are 0x278, 0x378 and 0x3BC +Port=0x378 + +# Set parallel port timingdelay (us). Used in parallelmode only. [default: 2; legal: 0 - 255] +#PortWait=2 + +# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1 +Device=/dev/ttyS1 + +# Specifies the size of the VFD. +Size=20x2 + +# Set the initial brightness [default: 1000; legal: 0 - 1000] +# (4 steps 0-250, 251-500, 501-750, 751-1000) +Brightness=1000 +# Set the initial off-brightness [default: 0; legal: 0 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +# (4 steps 0-250, 251-500, 501-750, 751-1000) +OffBrightness=0 + +# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200] +Speed=9600 + +# enable ISO 8859 1 compatibility [default: yes; legal: yes, no] +#ISO_8859_1=yes + + + +## shuttleVFD driver ## +[shuttleVFD] +# No options + + + +## stv5730 driver ## +[stv5730] + +# Port the device is connected to [default: 0x378] +Port=0x378 + + +[SureElec] + +# Port the device is connected to (by default first USB serial port) +Device=/dev/ttyUSB0 + +# Edition level of the device (can be 1, 2 or 3) [default: 2] +#Edition=1 + +# set display size +# Note: The size can be obtained directly from device for edition 2 & 3. +#Size=16x2 + +# Set the initial contrast [default: 480; legal: 0 - 1000] +#Contrast=200 + +# Set the initial brightness [default: 480; legal: 1 - 1000] +#Brightness=480 + +# Set the initial off-brightness [default: 100; legal: 1 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +#OffBrightness=100 + + +## SVGAlib driver ## +[svga] + +# svgalib mode to use [default: G320x240x256; legal: supported svgalib modes] +#Mode=G640x480x256 + +# set display size [default: 20x4] +Size=20x4 + +# Set the initial contrast [default: 500; legal: 0 - 1000] +# Can be set but does not change anything internally +Contrast=500 + +# Set the initial brightness [default: 1000; legal: 1 - 1000] +Brightness=1000 + +# Set the initial off-brightness [default: 500; legal: 1 - 1000] +# This value is used when the display is normally +# switched off in case LCDd is inactive +OffBrightness=500 + + + +## Text driver ## +[text] +# Set the display size [default: 20x4] +Size=20x4 + + + +## Toshiba T6963 driver ## +[t6963] + +# set display size [default: 20x6] +Size=20x6 + +# port to use [default: 0x378; legal: 0x200 - 0x400] +Port=0x378 + +# Is ECP mode on? [default: yes; legal: yes, no] +#ECPlpt=yes + +# Use graphics? [default: no; legal: yes, no] +#graphic=no + + + +## Tyan Barebones LCD driver (GS10 & GS12 series) ## +[tyan] + +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd + +# Set the communication speed [default: 9600; legal: 4800, 9600] +Speed=9600 + +# set display size [default: 16x2] +Size=16x2 + + + +## ELV ula200 driver ## +[ula200] + +# Select the LCD size [default: 20x4] +Size=20x4 + +# If you have a non standard keypad you can associate any keystrings to keys. +# There are 6 input key in the CwLnx hardware that generate characters +# from 'A' to 'F'. +# +# The following it the built-in default mapping hardcoded in the driver. +# You can leave those unchanged if you have a standard keypad. +# You can change it if you want to report other keystrings or have a non +# standard keypad. +# KeyMap_A=Up +# KeyMap_B=Down +# KeyMap_C=Left +# KeyMap_D=Right +# KeyMap_E=Enter +# KeyMap_F=Escape + + + +## Wirz SLI LCD driver ## +[sli] + +# Select the output device to use [default: /dev/lcd] +Device=/dev/lcd + +# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200, 38400, 57600, 115200] +Speed=19200 + + + +## OnScreen Display using libxosd ## +[xosd] + +# set display size [default: 20x4] +Size=20x4 + +# Offset in pixels from the top-left corner of the monitor [default: 0x0] +Offset=200x200 + +# X font to use, in XLFD format, as given by "xfontsel" +Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-* + +# EOF diff --git a/packages/sysutils/lcdproc/install b/packages/sysutils/lcdproc/install index 1febb2e886..85e2ef9478 100755 --- a/packages/sysutils/lcdproc/install +++ b/packages/sysutils/lcdproc/install @@ -32,4 +32,4 @@ mkdir -p $INSTALL/usr/lib/lcdproc cp $PKG_BUILD/server/drivers/*.so $INSTALL/usr/lib/lcdproc mkdir -p $INSTALL/etc - cp $PKG_BUILD/LCDd.conf $INSTALL/etc + cp $PKG_DIR/config/LCDd.conf $INSTALL/etc diff --git a/projects/Generic/linux/linux.i386.conf b/projects/Generic/linux/linux.i386.conf index f0c407ad49..fdff2ce505 100644 --- a/projects/Generic/linux/linux.i386.conf +++ b/projects/Generic/linux/linux.i386.conf @@ -1,6 +1,6 @@ # # Automatically generated make config: don't edit -# Linux/i386 2.6.39-rc5-git2 Kernel Configuration +# Linux/i386 2.6.39-rc5-git4 Kernel Configuration # # CONFIG_64BIT is not set CONFIG_X86_32=y @@ -2579,10 +2579,10 @@ CONFIG_FUSE_FS=y # # CD-ROM/DVD Filesystems # -CONFIG_ISO9660_FS=y +CONFIG_ISO9660_FS=m CONFIG_JOLIET=y CONFIG_ZISOFS=y -CONFIG_UDF_FS=y +CONFIG_UDF_FS=m CONFIG_UDF_NLS=y # diff --git a/projects/Generic/options b/projects/Generic/options index 1b412f914c..0feb0b39ee 100644 --- a/projects/Generic/options +++ b/projects/Generic/options @@ -208,7 +208,7 @@ # 'all' compiles all drivers; # 'all,!xxx,!yyy' de-selects previously selected drivers # "none" for disable LCD support - LCD_DRIVER="irtrans,imon" + LCD_DRIVER="irtrans,imon,imonlcd" # additional Firmware to use (dvb-firmware, wlan-firmware) # Space separated list is supported, diff --git a/projects/Intel/options b/projects/Intel/options index 9c6a87419b..4d8971b7c5 100644 --- a/projects/Intel/options +++ b/projects/Intel/options @@ -208,7 +208,7 @@ # 'all' compiles all drivers; # 'all,!xxx,!yyy' de-selects previously selected drivers # "none" for disable LCD support - LCD_DRIVER="irtrans,imon" + LCD_DRIVER="irtrans,imon,imonlcd" # additional Firmware to use (dvb-firmware, wlan-firmware) # Space separated list is supported,