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).
-+
-+
-+ V4L2_PIX_FMT_Y12 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 c1839d4ebe..419f07acbd 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 d98c21d3d3..78c7b2ff02 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,