diff options
184 files changed, 1248 insertions, 538 deletions
diff --git a/Documentation/scheduler/sched-rt-group.txt b/Documentation/scheduler/sched-rt-group.txt index 1df7f9cdab0..86eabe6c341 100644 --- a/Documentation/scheduler/sched-rt-group.txt +++ b/Documentation/scheduler/sched-rt-group.txt | |||
| @@ -73,7 +73,7 @@ The remaining CPU time will be used for user input and other tasks. Because | |||
| 73 | realtime tasks have explicitly allocated the CPU time they need to perform | 73 | realtime tasks have explicitly allocated the CPU time they need to perform |
| 74 | their tasks, buffer underruns in the graphics or audio can be eliminated. | 74 | their tasks, buffer underruns in the graphics or audio can be eliminated. |
| 75 | 75 | ||
| 76 | NOTE: the above example is not fully implemented as of yet (2.6.25). We still | 76 | NOTE: the above example is not fully implemented yet. We still |
| 77 | lack an EDF scheduler to make non-uniform periods usable. | 77 | lack an EDF scheduler to make non-uniform periods usable. |
| 78 | 78 | ||
| 79 | 79 | ||
| @@ -140,14 +140,15 @@ The other option is: | |||
| 140 | 140 | ||
| 141 | .o CONFIG_CGROUP_SCHED (aka "Basis for grouping tasks" = "Control groups") | 141 | .o CONFIG_CGROUP_SCHED (aka "Basis for grouping tasks" = "Control groups") |
| 142 | 142 | ||
| 143 | This uses the /cgroup virtual file system and "/cgroup/<cgroup>/cpu.rt_runtime_us" | 143 | This uses the /cgroup virtual file system and |
| 144 | to control the CPU time reserved for each control group instead. | 144 | "/cgroup/<cgroup>/cpu.rt_runtime_us" to control the CPU time reserved for each |
| 145 | control group instead. | ||
| 145 | 146 | ||
| 146 | For more information on working with control groups, you should read | 147 | For more information on working with control groups, you should read |
| 147 | Documentation/cgroups/cgroups.txt as well. | 148 | Documentation/cgroups/cgroups.txt as well. |
| 148 | 149 | ||
| 149 | Group settings are checked against the following limits in order to keep the configuration | 150 | Group settings are checked against the following limits in order to keep the |
| 150 | schedulable: | 151 | configuration schedulable: |
| 151 | 152 | ||
| 152 | \Sum_{i} runtime_{i} / global_period <= global_runtime / global_period | 153 | \Sum_{i} runtime_{i} / global_period <= global_runtime / global_period |
| 153 | 154 | ||
| @@ -189,7 +190,7 @@ Implementing SCHED_EDF might take a while to complete. Priority Inheritance is | |||
| 189 | the biggest challenge as the current linux PI infrastructure is geared towards | 190 | the biggest challenge as the current linux PI infrastructure is geared towards |
| 190 | the limited static priority levels 0-99. With deadline scheduling you need to | 191 | the limited static priority levels 0-99. With deadline scheduling you need to |
| 191 | do deadline inheritance (since priority is inversely proportional to the | 192 | do deadline inheritance (since priority is inversely proportional to the |
| 192 | deadline delta (deadline - now). | 193 | deadline delta (deadline - now)). |
| 193 | 194 | ||
| 194 | This means the whole PI machinery will have to be reworked - and that is one of | 195 | This means the whole PI machinery will have to be reworked - and that is one of |
| 195 | the most complex pieces of code we have. | 196 | the most complex pieces of code we have. |
| @@ -343,7 +343,8 @@ KBUILD_CPPFLAGS := -D__KERNEL__ | |||
| 343 | KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ | 343 | KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ |
| 344 | -fno-strict-aliasing -fno-common \ | 344 | -fno-strict-aliasing -fno-common \ |
| 345 | -Werror-implicit-function-declaration \ | 345 | -Werror-implicit-function-declaration \ |
| 346 | -Wno-format-security | 346 | -Wno-format-security \ |
| 347 | -fno-delete-null-pointer-checks | ||
| 347 | KBUILD_AFLAGS := -D__ASSEMBLY__ | 348 | KBUILD_AFLAGS := -D__ASSEMBLY__ |
| 348 | 349 | ||
| 349 | # Read KERNELRELEASE from include/config/kernel.release (if it exists) | 350 | # Read KERNELRELEASE from include/config/kernel.release (if it exists) |
diff --git a/arch/arm/configs/u300_defconfig b/arch/arm/configs/u300_defconfig index 4762d900129..7d61ae6e75d 100644 --- a/arch/arm/configs/u300_defconfig +++ b/arch/arm/configs/u300_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.31-rc1 | 3 | # Linux kernel version: 2.6.31-rc3 |
| 4 | # Thu Jul 2 00:16:59 2009 | 4 | # Thu Jul 16 23:36:10 2009 |
| 5 | # | 5 | # |
| 6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
| 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y |
| @@ -9,7 +9,6 @@ CONFIG_GENERIC_GPIO=y | |||
| 9 | CONFIG_GENERIC_TIME=y | 9 | CONFIG_GENERIC_TIME=y |
| 10 | CONFIG_GENERIC_CLOCKEVENTS=y | 10 | CONFIG_GENERIC_CLOCKEVENTS=y |
| 11 | CONFIG_MMU=y | 11 | CONFIG_MMU=y |
| 12 | CONFIG_HAVE_TCM=y | ||
| 13 | CONFIG_GENERIC_HARDIRQS=y | 12 | CONFIG_GENERIC_HARDIRQS=y |
| 14 | CONFIG_STACKTRACE_SUPPORT=y | 13 | CONFIG_STACKTRACE_SUPPORT=y |
| 15 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | 14 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y |
| @@ -113,7 +112,7 @@ CONFIG_MODULE_UNLOAD=y | |||
| 113 | # CONFIG_MODVERSIONS is not set | 112 | # CONFIG_MODVERSIONS is not set |
| 114 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 113 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
| 115 | CONFIG_BLOCK=y | 114 | CONFIG_BLOCK=y |
| 116 | CONFIG_LBDAF=y | 115 | # CONFIG_LBDAF is not set |
| 117 | # CONFIG_BLK_DEV_BSG is not set | 116 | # CONFIG_BLK_DEV_BSG is not set |
| 118 | # CONFIG_BLK_DEV_INTEGRITY is not set | 117 | # CONFIG_BLK_DEV_INTEGRITY is not set |
| 119 | 118 | ||
| @@ -542,13 +541,14 @@ CONFIG_INPUT_EVDEV=y | |||
| 542 | # | 541 | # |
| 543 | CONFIG_INPUT_KEYBOARD=y | 542 | CONFIG_INPUT_KEYBOARD=y |
| 544 | # CONFIG_KEYBOARD_ATKBD is not set | 543 | # CONFIG_KEYBOARD_ATKBD is not set |
| 545 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 546 | # CONFIG_KEYBOARD_LKKBD is not set | 544 | # CONFIG_KEYBOARD_LKKBD is not set |
| 547 | # CONFIG_KEYBOARD_XTKBD is not set | 545 | # CONFIG_KEYBOARD_GPIO is not set |
| 546 | # CONFIG_KEYBOARD_MATRIX is not set | ||
| 547 | # CONFIG_KEYBOARD_LM8323 is not set | ||
| 548 | # CONFIG_KEYBOARD_NEWTON is not set | 548 | # CONFIG_KEYBOARD_NEWTON is not set |
| 549 | # CONFIG_KEYBOARD_STOWAWAY is not set | 549 | # CONFIG_KEYBOARD_STOWAWAY is not set |
| 550 | # CONFIG_KEYBOARD_LM8323 is not set | 550 | # CONFIG_KEYBOARD_SUNKBD is not set |
| 551 | # CONFIG_KEYBOARD_GPIO is not set | 551 | # CONFIG_KEYBOARD_XTKBD is not set |
| 552 | # CONFIG_INPUT_MOUSE is not set | 552 | # CONFIG_INPUT_MOUSE is not set |
| 553 | # CONFIG_INPUT_JOYSTICK is not set | 553 | # CONFIG_INPUT_JOYSTICK is not set |
| 554 | # CONFIG_INPUT_TABLET is not set | 554 | # CONFIG_INPUT_TABLET is not set |
| @@ -911,7 +911,6 @@ CONFIG_REGULATOR=y | |||
| 911 | # CONFIG_JFS_FS is not set | 911 | # CONFIG_JFS_FS is not set |
| 912 | # CONFIG_FS_POSIX_ACL is not set | 912 | # CONFIG_FS_POSIX_ACL is not set |
| 913 | # CONFIG_XFS_FS is not set | 913 | # CONFIG_XFS_FS is not set |
| 914 | # CONFIG_GFS2_FS is not set | ||
| 915 | # CONFIG_OCFS2_FS is not set | 914 | # CONFIG_OCFS2_FS is not set |
| 916 | # CONFIG_BTRFS_FS is not set | 915 | # CONFIG_BTRFS_FS is not set |
| 917 | CONFIG_FILE_LOCKING=y | 916 | CONFIG_FILE_LOCKING=y |
| @@ -1122,7 +1121,6 @@ CONFIG_GENERIC_FIND_LAST_BIT=y | |||
| 1122 | # CONFIG_CRC32 is not set | 1121 | # CONFIG_CRC32 is not set |
| 1123 | # CONFIG_CRC7 is not set | 1122 | # CONFIG_CRC7 is not set |
| 1124 | # CONFIG_LIBCRC32C is not set | 1123 | # CONFIG_LIBCRC32C is not set |
| 1125 | CONFIG_GENERIC_ALLOCATOR=y | ||
| 1126 | CONFIG_HAS_IOMEM=y | 1124 | CONFIG_HAS_IOMEM=y |
| 1127 | CONFIG_HAS_IOPORT=y | 1125 | CONFIG_HAS_IOPORT=y |
| 1128 | CONFIG_HAS_DMA=y | 1126 | CONFIG_HAS_DMA=y |
diff --git a/arch/arm/mach-ep93xx/dma-m2p.c b/arch/arm/mach-ep93xx/dma-m2p.c index a2df5bb7dff..dbcac9c40a2 100644 --- a/arch/arm/mach-ep93xx/dma-m2p.c +++ b/arch/arm/mach-ep93xx/dma-m2p.c | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | #include <linux/err.h> | 33 | #include <linux/err.h> |
| 34 | #include <linux/interrupt.h> | 34 | #include <linux/interrupt.h> |
| 35 | #include <linux/module.h> | 35 | #include <linux/module.h> |
| 36 | #include <linux/io.h> | ||
| 36 | 37 | ||
| 37 | #include <mach/dma.h> | 38 | #include <mach/dma.h> |
| 38 | #include <mach/hardware.h> | 39 | #include <mach/hardware.h> |
diff --git a/arch/arm/mach-kirkwood/mpp.h b/arch/arm/mach-kirkwood/mpp.h index e021a80c2ca..bc74278ed31 100644 --- a/arch/arm/mach-kirkwood/mpp.h +++ b/arch/arm/mach-kirkwood/mpp.h | |||
| @@ -289,7 +289,7 @@ | |||
| 289 | 289 | ||
| 290 | #define MPP48_GPIO MPP( 48, 0x0, 1, 1, 0, 0, 0, 1 ) | 290 | #define MPP48_GPIO MPP( 48, 0x0, 1, 1, 0, 0, 0, 1 ) |
| 291 | #define MPP48_TSMP12 MPP( 48, 0x1, 1, 1, 0, 0, 0, 1 ) | 291 | #define MPP48_TSMP12 MPP( 48, 0x1, 1, 1, 0, 0, 0, 1 ) |
| 292 | #define MPP48_TDM_DTX MPP( 48. 0x2, 0, 1, 0, 0, 0, 1 ) | 292 | #define MPP48_TDM_DTX MPP( 48, 0x2, 0, 1, 0, 0, 0, 1 ) |
| 293 | 293 | ||
| 294 | #define MPP49_GPIO MPP( 49, 0x0, 1, 1, 0, 0, 0, 1 ) | 294 | #define MPP49_GPIO MPP( 49, 0x0, 1, 1, 0, 0, 0, 1 ) |
| 295 | #define MPP49_TSMP9 MPP( 49, 0x1, 1, 1, 0, 0, 0, 1 ) | 295 | #define MPP49_TSMP9 MPP( 49, 0x1, 1, 1, 0, 0, 0, 1 ) |
diff --git a/arch/arm/mach-mx3/Kconfig b/arch/arm/mach-mx3/Kconfig index 17a21a291e2..851f2458bf6 100644 --- a/arch/arm/mach-mx3/Kconfig +++ b/arch/arm/mach-mx3/Kconfig | |||
| @@ -36,6 +36,14 @@ config MACH_PCM037 | |||
| 36 | Include support for Phytec pcm037 platform. This includes | 36 | Include support for Phytec pcm037 platform. This includes |
| 37 | specific configurations for the board and its peripherals. | 37 | specific configurations for the board and its peripherals. |
| 38 | 38 | ||
| 39 | config MACH_PCM037_EET | ||
| 40 | bool "Support pcm037 EET board extensions" | ||
| 41 | depends on MACH_PCM037 | ||
| 42 | help | ||
| 43 | Add support for PCM037 EET baseboard extensions. If you are using the | ||
| 44 | OLED display with EET, use "video=mx3fb:CMEL-OLED" kernel | ||
| 45 | command-line parameter. | ||
| 46 | |||
| 39 | config MACH_MX31LITE | 47 | config MACH_MX31LITE |
| 40 | bool "Support MX31 LITEKIT (LogicPD)" | 48 | bool "Support MX31 LITEKIT (LogicPD)" |
| 41 | select ARCH_MX31 | 49 | select ARCH_MX31 |
diff --git a/arch/arm/mach-mx3/Makefile b/arch/arm/mach-mx3/Makefile index 0322696bd11..6b9775471be 100644 --- a/arch/arm/mach-mx3/Makefile +++ b/arch/arm/mach-mx3/Makefile | |||
| @@ -11,6 +11,7 @@ obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o | |||
| 11 | obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o | 11 | obj-$(CONFIG_MACH_MX31LILLY) += mx31lilly.o mx31lilly-db.o |
| 12 | obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o | 12 | obj-$(CONFIG_MACH_MX31LITE) += mx31lite.o |
| 13 | obj-$(CONFIG_MACH_PCM037) += pcm037.o | 13 | obj-$(CONFIG_MACH_PCM037) += pcm037.o |
| 14 | obj-$(CONFIG_MACH_PCM037_EET) += pcm037_eet.o | ||
| 14 | obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o | 15 | obj-$(CONFIG_MACH_MX31_3DS) += mx31pdk.o |
| 15 | obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \ | 16 | obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard.o mx31moboard-devboard.o \ |
| 16 | mx31moboard-marxbot.o | 17 | mx31moboard-marxbot.o |
diff --git a/arch/arm/mach-mx3/armadillo5x0.c b/arch/arm/mach-mx3/armadillo5x0.c index 541181090b3..ee331fd6b1b 100644 --- a/arch/arm/mach-mx3/armadillo5x0.c +++ b/arch/arm/mach-mx3/armadillo5x0.c | |||
| @@ -31,6 +31,8 @@ | |||
| 31 | #include <linux/smsc911x.h> | 31 | #include <linux/smsc911x.h> |
| 32 | #include <linux/interrupt.h> | 32 | #include <linux/interrupt.h> |
| 33 | #include <linux/irq.h> | 33 | #include <linux/irq.h> |
| 34 | #include <linux/mtd/physmap.h> | ||
| 35 | #include <linux/io.h> | ||
| 34 | 36 | ||
| 35 | #include <mach/hardware.h> | 37 | #include <mach/hardware.h> |
| 36 | #include <asm/mach-types.h> | 38 | #include <asm/mach-types.h> |
| @@ -46,8 +48,10 @@ | |||
| 46 | #include <mach/mmc.h> | 48 | #include <mach/mmc.h> |
| 47 | #include <mach/ipu.h> | 49 | #include <mach/ipu.h> |
| 48 | #include <mach/mx3fb.h> | 50 | #include <mach/mx3fb.h> |
| 51 | #include <mach/mxc_nand.h> | ||
| 49 | 52 | ||
| 50 | #include "devices.h" | 53 | #include "devices.h" |
| 54 | #include "crm_regs.h" | ||
| 51 | 55 | ||
| 52 | static int armadillo5x0_pins[] = { | 56 | static int armadillo5x0_pins[] = { |
| 53 | /* UART1 */ | 57 | /* UART1 */ |
| @@ -93,7 +97,56 @@ static int armadillo5x0_pins[] = { | |||
| 93 | MX31_PIN_FPSHIFT__FPSHIFT, | 97 | MX31_PIN_FPSHIFT__FPSHIFT, |
| 94 | MX31_PIN_DRDY0__DRDY0, | 98 | MX31_PIN_DRDY0__DRDY0, |
| 95 | IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/ | 99 | IOMUX_MODE(MX31_PIN_LCS1, IOMUX_CONFIG_GPIO), /*ADV7125_PSAVE*/ |
| 100 | }; | ||
| 96 | 101 | ||
| 102 | /* | ||
| 103 | * NAND Flash | ||
| 104 | */ | ||
| 105 | static struct mxc_nand_platform_data armadillo5x0_nand_flash_pdata = { | ||
| 106 | .width = 1, | ||
| 107 | .hw_ecc = 1, | ||
| 108 | }; | ||
| 109 | |||
| 110 | /* | ||
| 111 | * MTD NOR Flash | ||
| 112 | */ | ||
| 113 | static struct mtd_partition armadillo5x0_nor_flash_partitions[] = { | ||
| 114 | { | ||
| 115 | .name = "nor.bootloader", | ||
| 116 | .offset = 0x00000000, | ||
| 117 | .size = 4*32*1024, | ||
| 118 | }, { | ||
| 119 | .name = "nor.kernel", | ||
| 120 | .offset = MTDPART_OFS_APPEND, | ||
| 121 | .size = 16*128*1024, | ||
| 122 | }, { | ||
| 123 | .name = "nor.userland", | ||
| 124 | .offset = MTDPART_OFS_APPEND, | ||
| 125 | .size = 110*128*1024, | ||
| 126 | }, { | ||
| 127 | .name = "nor.config", | ||
| 128 | .offset = MTDPART_OFS_APPEND, | ||
| 129 | .size = 1*128*1024, | ||
| 130 | }, | ||
| 131 | }; | ||
| 132 | |||
| 133 | static struct physmap_flash_data armadillo5x0_nor_flash_pdata = { | ||
| 134 | .width = 2, | ||
| 135 | .parts = armadillo5x0_nor_flash_partitions, | ||
| 136 | .nr_parts = ARRAY_SIZE(armadillo5x0_nor_flash_partitions), | ||
| 137 | }; | ||
| 138 | |||
| 139 | static struct resource armadillo5x0_nor_flash_resource = { | ||
| 140 | .flags = IORESOURCE_MEM, | ||
| 141 | .start = CS0_BASE_ADDR, | ||
| 142 | .end = CS0_BASE_ADDR + SZ_64M - 1, | ||
| 143 | }; | ||
| 144 | |||
| 145 | static struct platform_device armadillo5x0_nor_flash = { | ||
| 146 | .name = "physmap-flash", | ||
| 147 | .id = -1, | ||
| 148 | .num_resources = 1, | ||
| 149 | .resource = &armadillo5x0_nor_flash_resource, | ||
| 97 | }; | 150 | }; |
| 98 | 151 | ||
| 99 | /* | 152 | /* |
| @@ -272,6 +325,16 @@ static void __init armadillo5x0_init(void) | |||
| 272 | /* Register FB */ | 325 | /* Register FB */ |
| 273 | mxc_register_device(&mx3_ipu, &mx3_ipu_data); | 326 | mxc_register_device(&mx3_ipu, &mx3_ipu_data); |
| 274 | mxc_register_device(&mx3_fb, &mx3fb_pdata); | 327 | mxc_register_device(&mx3_fb, &mx3fb_pdata); |
| 328 | |||
| 329 | /* Register NOR Flash */ | ||
| 330 | mxc_register_device(&armadillo5x0_nor_flash, | ||
| 331 | &armadillo5x0_nor_flash_pdata); | ||
| 332 | |||
| 333 | /* Register NAND Flash */ | ||
| 334 | mxc_register_device(&mxc_nand_device, &armadillo5x0_nand_flash_pdata); | ||
| 335 | |||
| 336 | /* set NAND page size to 2k if not configured via boot mode pins */ | ||
| 337 | __raw_writel(__raw_readl(MXC_CCM_RCSR) | (1 << 30), MXC_CCM_RCSR); | ||
| 275 | } | 338 | } |
| 276 | 339 | ||
| 277 | static void __init armadillo5x0_timer_init(void) | 340 | static void __init armadillo5x0_timer_init(void) |
diff --git a/arch/arm/mach-mx3/devices.c b/arch/arm/mach-mx3/devices.c index d927eddcad4..9e87e08fb12 100644 --- a/arch/arm/mach-mx3/devices.c +++ b/arch/arm/mach-mx3/devices.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
| 23 | #include <linux/serial.h> | 23 | #include <linux/serial.h> |
| 24 | #include <linux/gpio.h> | 24 | #include <linux/gpio.h> |
| 25 | #include <linux/dma-mapping.h> | ||
| 26 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
| 27 | #include <mach/irqs.h> | 26 | #include <mach/irqs.h> |
| 28 | #include <mach/common.h> | 27 | #include <mach/common.h> |
diff --git a/arch/arm/mach-mx3/pcm037.c b/arch/arm/mach-mx3/pcm037.c index c6f61a1f06c..840cfda341d 100644 --- a/arch/arm/mach-mx3/pcm037.c +++ b/arch/arm/mach-mx3/pcm037.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | #include <linux/types.h> | 19 | #include <linux/types.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | 21 | #include <linux/dma-mapping.h> | |
| 22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
| 23 | #include <linux/mtd/physmap.h> | 23 | #include <linux/mtd/physmap.h> |
| 24 | #include <linux/mtd/plat-ram.h> | 24 | #include <linux/mtd/plat-ram.h> |
| @@ -33,29 +33,67 @@ | |||
| 33 | #include <linux/irq.h> | 33 | #include <linux/irq.h> |
| 34 | #include <linux/fsl_devices.h> | 34 | #include <linux/fsl_devices.h> |
| 35 | 35 | ||
| 36 | #include <mach/hardware.h> | 36 | #include <media/soc_camera.h> |
| 37 | |||
| 37 | #include <asm/mach-types.h> | 38 | #include <asm/mach-types.h> |
| 38 | #include <asm/mach/arch.h> | 39 | #include <asm/mach/arch.h> |
| 39 | #include <asm/mach/time.h> | 40 | #include <asm/mach/time.h> |
| 40 | #include <asm/mach/map.h> | 41 | #include <asm/mach/map.h> |
| 42 | #include <mach/board-pcm037.h> | ||
| 41 | #include <mach/common.h> | 43 | #include <mach/common.h> |
| 44 | #include <mach/hardware.h> | ||
| 45 | #include <mach/i2c.h> | ||
| 42 | #include <mach/imx-uart.h> | 46 | #include <mach/imx-uart.h> |
| 43 | #include <mach/iomux-mx3.h> | 47 | #include <mach/iomux-mx3.h> |
| 44 | #include <mach/ipu.h> | 48 | #include <mach/ipu.h> |
| 45 | #include <mach/board-pcm037.h> | 49 | #include <mach/mmc.h> |
| 50 | #include <mach/mx3_camera.h> | ||
| 46 | #include <mach/mx3fb.h> | 51 | #include <mach/mx3fb.h> |
| 47 | #include <mach/mxc_nand.h> | 52 | #include <mach/mxc_nand.h> |
| 48 | #include <mach/mmc.h> | ||
| 49 | #ifdef CONFIG_I2C_IMX | ||
| 50 | #include <mach/i2c.h> | ||
| 51 | #endif | ||
| 52 | 53 | ||
| 53 | #include "devices.h" | 54 | #include "devices.h" |
| 55 | #include "pcm037.h" | ||
| 56 | |||
| 57 | static enum pcm037_board_variant pcm037_instance = PCM037_PCM970; | ||
| 58 | |||
| 59 | static int __init pcm037_variant_setup(char *str) | ||
| 60 | { | ||
| 61 | if (!strcmp("eet", str)) | ||
| 62 | pcm037_instance = PCM037_EET; | ||
| 63 | else if (strcmp("pcm970", str)) | ||
| 64 | pr_warning("Unknown pcm037 baseboard variant %s\n", str); | ||
| 65 | |||
| 66 | return 1; | ||
| 67 | } | ||
| 68 | |||
| 69 | /* Supported values: "pcm970" (default) and "eet" */ | ||
| 70 | __setup("pcm037_variant=", pcm037_variant_setup); | ||
| 71 | |||
| 72 | enum pcm037_board_variant pcm037_variant(void) | ||
| 73 | { | ||
| 74 | return pcm037_instance; | ||
| 75 | } | ||
| 76 | |||
| 77 | /* UART1 with RTS/CTS handshake signals */ | ||
| 78 | static unsigned int pcm037_uart1_handshake_pins[] = { | ||
| 79 | MX31_PIN_CTS1__CTS1, | ||
| 80 | MX31_PIN_RTS1__RTS1, | ||
| 81 | MX31_PIN_TXD1__TXD1, | ||
| 82 | MX31_PIN_RXD1__RXD1, | ||
| 83 | }; | ||
| 84 | |||
| 85 | /* UART1 without RTS/CTS handshake signals */ | ||
| 86 | static unsigned int pcm037_uart1_pins[] = { | ||
| 87 | MX31_PIN_TXD1__TXD1, | ||
| 88 | MX31_PIN_RXD1__RXD1, | ||
| 89 | }; | ||
| 54 | 90 | ||
| 55 | static unsigned int pcm037_pins[] = { | 91 | static unsigned int pcm037_pins[] = { |
| 56 | /* I2C */ | 92 | /* I2C */ |
| 57 | MX31_PIN_CSPI2_MOSI__SCL, | 93 | MX31_PIN_CSPI2_MOSI__SCL, |
| 58 | MX31_PIN_CSPI2_MISO__SDA, | 94 | MX31_PIN_CSPI2_MISO__SDA, |
| 95 | MX31_PIN_CSPI2_SS2__I2C3_SDA, | ||
| 96 | MX31_PIN_CSPI2_SCLK__I2C3_SCL, | ||
| 59 | /* SDHC1 */ | 97 | /* SDHC1 */ |
| 60 | MX31_PIN_SD1_DATA3__SD1_DATA3, | 98 | MX31_PIN_SD1_DATA3__SD1_DATA3, |
| 61 | MX31_PIN_SD1_DATA2__SD1_DATA2, | 99 | MX31_PIN_SD1_DATA2__SD1_DATA2, |
| @@ -73,11 +111,6 @@ static unsigned int pcm037_pins[] = { | |||
| 73 | MX31_PIN_CSPI1_SS0__SS0, | 111 | MX31_PIN_CSPI1_SS0__SS0, |
| 74 | MX31_PIN_CSPI1_SS1__SS1, | 112 | MX31_PIN_CSPI1_SS1__SS1, |
| 75 | MX31_PIN_CSPI1_SS2__SS2, | 113 | MX31_PIN_CSPI1_SS2__SS2, |
| 76 | /* UART1 */ | ||
| 77 | MX31_PIN_CTS1__CTS1, | ||
| 78 | MX31_PIN_RTS1__RTS1, | ||
| 79 | MX31_PIN_TXD1__TXD1, | ||
| 80 | MX31_PIN_RXD1__RXD1, | ||
| 81 | /* UART2 */ | 114 | /* UART2 */ |
| 82 | MX31_PIN_TXD2__TXD2, | 115 | MX31_PIN_TXD2__TXD2, |
| 83 | MX31_PIN_RXD2__RXD2, | 116 | MX31_PIN_RXD2__RXD2, |
| @@ -120,6 +153,22 @@ static unsigned int pcm037_pins[] = { | |||
| 120 | MX31_PIN_D3_SPL__D3_SPL, | 153 | MX31_PIN_D3_SPL__D3_SPL, |
| 121 | MX31_PIN_D3_CLS__D3_CLS, | 154 | MX31_PIN_D3_CLS__D3_CLS, |
| 122 | MX31_PIN_LCS0__GPI03_23, | 155 | MX31_PIN_LCS0__GPI03_23, |
| 156 | /* CSI */ | ||
| 157 | IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_GPIO), | ||
| 158 | MX31_PIN_CSI_D6__CSI_D6, | ||
| 159 | MX31_PIN_CSI_D7__CSI_D7, | ||
| 160 | MX31_PIN_CSI_D8__CSI_D8, | ||
| 161 | MX31_PIN_CSI_D9__CSI_D9, | ||
| 162 | MX31_PIN_CSI_D10__CSI_D10, | ||
| 163 | MX31_PIN_CSI_D11__CSI_D11, | ||
| 164 | MX31_PIN_CSI_D12__CSI_D12, | ||
| 165 | MX31_PIN_CSI_D13__CSI_D13, | ||
| 166 | MX31_PIN_CSI_D14__CSI_D14, | ||
| 167 | MX31_PIN_CSI_D15__CSI_D15, | ||
| 168 | MX31_PIN_CSI_HSYNC__CSI_HSYNC, | ||
| 169 | MX31_PIN_CSI_MCLK__CSI_MCLK, | ||
| 170 | MX31_PIN_CSI_PIXCLK__CSI_PIXCLK, | ||
| 171 | MX31_PIN_CSI_VSYNC__CSI_VSYNC, | ||
| 123 | }; | 172 | }; |
| 124 | 173 | ||
| 125 | static struct physmap_flash_data pcm037_flash_data = { | 174 | static struct physmap_flash_data pcm037_flash_data = { |
| @@ -250,19 +299,43 @@ static struct mxc_nand_platform_data pcm037_nand_board_info = { | |||
| 250 | .hw_ecc = 1, | 299 | .hw_ecc = 1, |
| 251 | }; | 300 | }; |
| 252 | 301 | ||
| 253 | #ifdef CONFIG_I2C_IMX | ||
| 254 | static struct imxi2c_platform_data pcm037_i2c_1_data = { | 302 | static struct imxi2c_platform_data pcm037_i2c_1_data = { |
| 255 | .bitrate = 100000, | 303 | .bitrate = 100000, |
| 256 | }; | 304 | }; |
| 257 | 305 | ||
| 306 | static struct imxi2c_platform_data pcm037_i2c_2_data = { | ||
| 307 | .bitrate = 20000, | ||
| 308 | }; | ||
| 309 | |||
| 258 | static struct at24_platform_data board_eeprom = { | 310 | static struct at24_platform_data board_eeprom = { |
| 259 | .byte_len = 4096, | 311 | .byte_len = 4096, |
| 260 | .page_size = 32, | 312 | .page_size = 32, |
| 261 | .flags = AT24_FLAG_ADDR16, | 313 | .flags = AT24_FLAG_ADDR16, |
| 262 | }; | 314 | }; |
| 263 | 315 | ||
| 316 | static int pcm037_camera_power(struct device *dev, int on) | ||
| 317 | { | ||
| 318 | /* disable or enable the camera in X7 or X8 PCM970 connector */ | ||
| 319 | gpio_set_value(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), !on); | ||
| 320 | return 0; | ||
| 321 | } | ||
| 322 | |||
| 323 | static struct i2c_board_info pcm037_i2c_2_devices[] = { | ||
| 324 | { | ||
| 325 | I2C_BOARD_INFO("mt9t031", 0x5d), | ||
| 326 | }, | ||
| 327 | }; | ||
| 328 | |||
| 329 | static struct soc_camera_link iclink = { | ||
| 330 | .bus_id = 0, /* Must match with the camera ID */ | ||
| 331 | .power = pcm037_camera_power, | ||
| 332 | .board_info = &pcm037_i2c_2_devices[0], | ||
| 333 | .i2c_adapter_id = 2, | ||
| 334 | .module_name = "mt9t031", | ||
| 335 | }; | ||
| 336 | |||
| 264 | static struct i2c_board_info pcm037_i2c_devices[] = { | 337 | static struct i2c_board_info pcm037_i2c_devices[] = { |
| 265 | { | 338 | { |
| 266 | I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ | 339 | I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ |
| 267 | .platform_data = &board_eeprom, | 340 | .platform_data = &board_eeprom, |
| 268 | }, { | 341 | }, { |
| @@ -270,7 +343,14 @@ static struct i2c_board_info pcm037_i2c_devices[] = { | |||
| 270 | .type = "pcf8563", | 343 | .type = "pcf8563", |
| 271 | } | 344 | } |
| 272 | }; | 345 | }; |
| 273 | #endif | 346 | |
| 347 | static struct platform_device pcm037_camera = { | ||
| 348 | .name = "soc-camera-pdrv", | ||
| 349 | .id = 0, | ||
| 350 | .dev = { | ||
| 351 | .platform_data = &iclink, | ||
| 352 | }, | ||
| 353 | }; | ||
| 274 | 354 | ||
| 275 | /* Not connected by default */ | 355 | /* Not connected by default */ |
| 276 | #ifdef PCM970_SDHC_RW_SWITCH | 356 | #ifdef PCM970_SDHC_RW_SWITCH |
| @@ -334,9 +414,41 @@ static struct imxmmc_platform_data sdhc_pdata = { | |||
| 334 | .exit = pcm970_sdhc1_exit, | 414 | .exit = pcm970_sdhc1_exit, |
| 335 | }; | 415 | }; |
| 336 | 416 | ||
| 417 | struct mx3_camera_pdata camera_pdata = { | ||
| 418 | .dma_dev = &mx3_ipu.dev, | ||
| 419 | .flags = MX3_CAMERA_DATAWIDTH_8 | MX3_CAMERA_DATAWIDTH_10, | ||
| 420 | .mclk_10khz = 2000, | ||
| 421 | }; | ||
| 422 | |||
| 423 | static int __init pcm037_camera_alloc_dma(const size_t buf_size) | ||
| 424 | { | ||
| 425 | dma_addr_t dma_handle; | ||
| 426 | void *buf; | ||
| 427 | int dma; | ||
| 428 | |||
| 429 | if (buf_size < 2 * 1024 * 1024) | ||
| 430 | return -EINVAL; | ||
| 431 | |||
| 432 | buf = dma_alloc_coherent(NULL, buf_size, &dma_handle, GFP_KERNEL); | ||
| 433 | if (!buf) { | ||
| 434 | pr_err("%s: cannot allocate camera buffer-memory\n", __func__); | ||
| 435 | return -ENOMEM; | ||
| 436 | } | ||
| 437 | |||
| 438 | memset(buf, 0, buf_size); | ||
| 439 | |||
| 440 | dma = dma_declare_coherent_memory(&mx3_camera.dev, | ||
| 441 | dma_handle, dma_handle, buf_size, | ||
| 442 | DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE); | ||
| 443 | |||
| 444 | /* The way we call dma_declare_coherent_memory only a malloc can fail */ | ||
| 445 | return dma & DMA_MEMORY_MAP ? 0 : -ENOMEM; | ||
| 446 | } | ||
| 447 | |||
| 337 | static struct platform_device *devices[] __initdata = { | 448 | static struct platform_device *devices[] __initdata = { |
| 338 | &pcm037_flash, | 449 | &pcm037_flash, |
| 339 | &pcm037_sram_device, | 450 | &pcm037_sram_device, |
| 451 | &pcm037_camera, | ||
| 340 | }; | 452 | }; |
| 341 | 453 | ||
| 342 | static struct ipu_platform_data mx3_ipu_data = { | 454 | static struct ipu_platform_data mx3_ipu_data = { |
| @@ -377,6 +489,22 @@ static const struct fb_videomode fb_modedb[] = { | |||
| 377 | .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH, | 489 | .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_OE_ACT_HIGH, |
| 378 | .vmode = FB_VMODE_NONINTERLACED, | 490 | .vmode = FB_VMODE_NONINTERLACED, |
| 379 | .flag = 0, | 491 | .flag = 0, |
| 492 | }, { | ||
| 493 | /* 240x320 @ 60 Hz */ | ||
| 494 | .name = "CMEL-OLED", | ||
| 495 | .refresh = 60, | ||
| 496 | .xres = 240, | ||
| 497 | .yres = 320, | ||
| 498 | .pixclock = 185925, | ||
| 499 | .left_margin = 9, | ||
| 500 | .right_margin = 16, | ||
| 501 | .upper_margin = 7, | ||
| 502 | .lower_margin = 9, | ||
| 503 | .hsync_len = 1, | ||
| 504 | .vsync_len = 1, | ||
| 505 | .sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_CLK_INVERT, | ||
| 506 | .vmode = FB_VMODE_NONINTERLACED, | ||
| 507 | .flag = 0, | ||
| 380 | }, | 508 | }, |
| 381 | }; | 509 | }; |
| 382 | 510 | ||
| @@ -397,6 +525,14 @@ static void __init mxc_board_init(void) | |||
| 397 | mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), | 525 | mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), |
| 398 | "pcm037"); | 526 | "pcm037"); |
| 399 | 527 | ||
| 528 | if (pcm037_variant() == PCM037_EET) | ||
| 529 | mxc_iomux_setup_multiple_pins(pcm037_uart1_pins, | ||
| 530 | ARRAY_SIZE(pcm037_uart1_pins), "pcm037_uart1"); | ||
| 531 | else | ||
| 532 | mxc_iomux_setup_multiple_pins(pcm037_uart1_handshake_pins, | ||
| 533 | ARRAY_SIZE(pcm037_uart1_handshake_pins), | ||
| 534 | "pcm037_uart1"); | ||
| 535 | |||
| 400 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 536 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
| 401 | 537 | ||
| 402 | mxc_register_device(&mxc_uart_device0, &uart_pdata); | 538 | mxc_register_device(&mxc_uart_device0, &uart_pdata); |
| @@ -415,18 +551,30 @@ static void __init mxc_board_init(void) | |||
| 415 | } | 551 | } |
| 416 | 552 | ||
| 417 | 553 | ||
| 418 | #ifdef CONFIG_I2C_IMX | 554 | /* I2C adapters and devices */ |
| 419 | i2c_register_board_info(1, pcm037_i2c_devices, | 555 | i2c_register_board_info(1, pcm037_i2c_devices, |
| 420 | ARRAY_SIZE(pcm037_i2c_devices)); | 556 | ARRAY_SIZE(pcm037_i2c_devices)); |
| 421 | 557 | ||
| 422 | mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data); | 558 | mxc_register_device(&mxc_i2c_device1, &pcm037_i2c_1_data); |
| 423 | #endif | 559 | mxc_register_device(&mxc_i2c_device2, &pcm037_i2c_2_data); |
| 560 | |||
| 424 | mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); | 561 | mxc_register_device(&mxc_nand_device, &pcm037_nand_board_info); |
| 425 | mxc_register_device(&mxcsdhc_device0, &sdhc_pdata); | 562 | mxc_register_device(&mxcsdhc_device0, &sdhc_pdata); |
| 426 | mxc_register_device(&mx3_ipu, &mx3_ipu_data); | 563 | mxc_register_device(&mx3_ipu, &mx3_ipu_data); |
| 427 | mxc_register_device(&mx3_fb, &mx3fb_pdata); | 564 | mxc_register_device(&mx3_fb, &mx3fb_pdata); |
| 428 | if (!gpio_usbotg_hs_activate()) | 565 | if (!gpio_usbotg_hs_activate()) |
| 429 | mxc_register_device(&mxc_otg_udc_device, &usb_pdata); | 566 | mxc_register_device(&mxc_otg_udc_device, &usb_pdata); |
| 567 | |||
| 568 | /* CSI */ | ||
| 569 | /* Camera power: default - off */ | ||
| 570 | ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), "mt9t031-power"); | ||
| 571 | if (!ret) | ||
| 572 | gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_CSI_D5), 1); | ||
| 573 | else | ||
| 574 | iclink.power = NULL; | ||
| 575 | |||
| 576 | if (!pcm037_camera_alloc_dma(4 * 1024 * 1024)) | ||
| 577 | mxc_register_device(&mx3_camera, &camera_pdata); | ||
| 430 | } | 578 | } |
| 431 | 579 | ||
| 432 | static void __init pcm037_timer_init(void) | 580 | static void __init pcm037_timer_init(void) |
| @@ -448,4 +596,3 @@ MACHINE_START(PCM037, "Phytec Phycore pcm037") | |||
| 448 | .init_machine = mxc_board_init, | 596 | .init_machine = mxc_board_init, |
| 449 | .timer = &pcm037_timer, | 597 | .timer = &pcm037_timer, |
| 450 | MACHINE_END | 598 | MACHINE_END |
| 451 | |||
diff --git a/arch/arm/mach-mx3/pcm037.h b/arch/arm/mach-mx3/pcm037.h new file mode 100644 index 00000000000..d6929721a5f --- /dev/null +++ b/arch/arm/mach-mx3/pcm037.h | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | #ifndef __PCM037_H__ | ||
| 2 | #define __PCM037_H__ | ||
| 3 | |||
| 4 | enum pcm037_board_variant { | ||
| 5 | PCM037_PCM970, | ||
| 6 | PCM037_EET, | ||
| 7 | }; | ||
| 8 | |||
| 9 | extern enum pcm037_board_variant pcm037_variant(void); | ||
| 10 | |||
| 11 | #endif | ||
diff --git a/arch/arm/mach-mx3/pcm037_eet.c b/arch/arm/mach-mx3/pcm037_eet.c new file mode 100644 index 00000000000..fe52fb1bb8b --- /dev/null +++ b/arch/arm/mach-mx3/pcm037_eet.c | |||
| @@ -0,0 +1,204 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2009 | ||
| 3 | * Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | */ | ||
| 9 | #include <linux/gpio.h> | ||
| 10 | #include <linux/gpio_keys.h> | ||
| 11 | #include <linux/input.h> | ||
| 12 | #include <linux/platform_device.h> | ||
| 13 | #include <linux/spi/spi.h> | ||
| 14 | |||
| 15 | #include <mach/common.h> | ||
| 16 | #if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE) | ||
| 17 | #include <mach/spi.h> | ||
| 18 | #endif | ||
| 19 | #include <mach/iomux-mx3.h> | ||
| 20 | |||
| 21 | #include <asm/mach-types.h> | ||
| 22 | |||
| 23 | #include "pcm037.h" | ||
| 24 | #include "devices.h" | ||
| 25 | |||
| 26 | static unsigned int pcm037_eet_pins[] = { | ||
| 27 | /* SPI #1 */ | ||
| 28 | MX31_PIN_CSPI1_MISO__MISO, | ||
| 29 | MX31_PIN_CSPI1_MOSI__MOSI, | ||
| 30 | MX31_PIN_CSPI1_SCLK__SCLK, | ||
| 31 | MX31_PIN_CSPI1_SPI_RDY__SPI_RDY, | ||
| 32 | MX31_PIN_CSPI1_SS0__SS0, | ||
| 33 | MX31_PIN_CSPI1_SS1__SS1, | ||
| 34 | MX31_PIN_CSPI1_SS2__SS2, | ||
| 35 | |||
| 36 | /* Reserve and hardwire GPIO 57 high - S6E63D6 chipselect */ | ||
| 37 | IOMUX_MODE(MX31_PIN_KEY_COL7, IOMUX_CONFIG_GPIO), | ||
| 38 | /* GPIO keys */ | ||
| 39 | IOMUX_MODE(MX31_PIN_GPIO1_0, IOMUX_CONFIG_GPIO), /* 0 */ | ||
| 40 | IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO), /* 1 */ | ||
| 41 | IOMUX_MODE(MX31_PIN_GPIO1_2, IOMUX_CONFIG_GPIO), /* 2 */ | ||
| 42 | IOMUX_MODE(MX31_PIN_GPIO1_3, IOMUX_CONFIG_GPIO), /* 3 */ | ||
| 43 | IOMUX_MODE(MX31_PIN_SVEN0, IOMUX_CONFIG_GPIO), /* 32 */ | ||
| 44 | IOMUX_MODE(MX31_PIN_STX0, IOMUX_CONFIG_GPIO), /* 33 */ | ||
| 45 | IOMUX_MODE(MX31_PIN_SRX0, IOMUX_CONFIG_GPIO), /* 34 */ | ||
| 46 | IOMUX_MODE(MX31_PIN_SIMPD0, IOMUX_CONFIG_GPIO), /* 35 */ | ||
| 47 | IOMUX_MODE(MX31_PIN_RTS1, IOMUX_CONFIG_GPIO), /* 38 */ | ||
| 48 | IOMUX_MODE(MX31_PIN_CTS1, IOMUX_CONFIG_GPIO), /* 39 */ | ||
| 49 | IOMUX_MODE(MX31_PIN_KEY_ROW4, IOMUX_CONFIG_GPIO), /* 50 */ | ||
| 50 | IOMUX_MODE(MX31_PIN_KEY_ROW5, IOMUX_CONFIG_GPIO), /* 51 */ | ||
| 51 | IOMUX_MODE(MX31_PIN_KEY_ROW6, IOMUX_CONFIG_GPIO), /* 52 */ | ||
| 52 | IOMUX_MODE(MX31_PIN_KEY_ROW7, IOMUX_CONFIG_GPIO), /* 53 */ | ||
| 53 | |||
| 54 | /* LEDs */ | ||
| 55 | IOMUX_MODE(MX31_PIN_DTR_DTE1, IOMUX_CONFIG_GPIO), /* 44 */ | ||
| 56 | IOMUX_MODE(MX31_PIN_DSR_DTE1, IOMUX_CONFIG_GPIO), /* 45 */ | ||
| 57 | IOMUX_MODE(MX31_PIN_KEY_COL5, IOMUX_CONFIG_GPIO), /* 55 */ | ||
| 58 | IOMUX_MODE(MX31_PIN_KEY_COL6, IOMUX_CONFIG_GPIO), /* 56 */ | ||
| 59 | }; | ||
| 60 | |||
| 61 | /* SPI */ | ||
| 62 | static struct spi_board_info pcm037_spi_dev[] = { | ||
| 63 | { | ||
| 64 | .modalias = "dac124s085", | ||
| 65 | .max_speed_hz = 400000, | ||
| 66 | .bus_num = 0, | ||
| 67 | .chip_select = 0, /* Index in pcm037_spi1_cs[] */ | ||
| 68 | .mode = SPI_CPHA, | ||
| 69 | }, | ||
| 70 | }; | ||
| 71 | |||
| 72 | /* Platform Data for MXC CSPI */ | ||
| 73 | #if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE) | ||
| 74 | static int pcm037_spi1_cs[] = {MXC_SPI_CS(1), IOMUX_TO_GPIO(MX31_PIN_KEY_COL7)}; | ||
| 75 | |||
| 76 | struct spi_imx_master pcm037_spi1_master = { | ||
| 77 | .chipselect = pcm037_spi1_cs, | ||
| 78 | .num_chipselect = ARRAY_SIZE(pcm037_spi1_cs), | ||
| 79 | }; | ||
| 80 | #endif | ||
| 81 | |||
| 82 | /* GPIO-keys input device */ | ||
| 83 | static struct gpio_keys_button pcm037_gpio_keys[] = { | ||
| 84 | { | ||
| 85 | .type = EV_KEY, | ||
| 86 | .code = KEY_L, | ||
| 87 | .gpio = 0, | ||
| 88 | .desc = "Wheel Manual", | ||
| 89 | .wakeup = 0, | ||
| 90 | }, { | ||
| 91 | .type = EV_KEY, | ||
| 92 | .code = KEY_A, | ||
| 93 | .gpio = 1, | ||
| 94 | .desc = "Wheel AF", | ||
| 95 | .wakeup = 0, | ||
| 96 | }, { | ||
| 97 | .type = EV_KEY, | ||
| 98 | .code = KEY_V, | ||
| 99 | .gpio = 2, | ||
| 100 | .desc = "Wheel View", | ||
| 101 | .wakeup = 0, | ||
| 102 | }, { | ||
| 103 | .type = EV_KEY, | ||
| 104 | .code = KEY_M, | ||
| 105 | .gpio = 3, | ||
| 106 | .desc = "Wheel Menu", | ||
| 107 | .wakeup = 0, | ||
| 108 | }, { | ||
| 109 | .type = EV_KEY, | ||
| 110 | .code = KEY_UP, | ||
| 111 | .gpio = 32, | ||
| 112 | .desc = "Nav Pad Up", | ||
| 113 | .wakeup = 0, | ||
| 114 | }, { | ||
| 115 | .type = EV_KEY, | ||
| 116 | .code = KEY_RIGHT, | ||
| 117 | .gpio = 33, | ||
| 118 | .desc = "Nav Pad Right", | ||
| 119 | .wakeup = 0, | ||
| 120 | }, { | ||
| 121 | .type = EV_KEY, | ||
| 122 | .code = KEY_DOWN, | ||
| 123 | .gpio = 34, | ||
| 124 | .desc = "Nav Pad Down", | ||
| 125 | .wakeup = 0, | ||
| 126 | }, { | ||
| 127 | .type = EV_KEY, | ||
| 128 | .code = KEY_LEFT, | ||
| 129 | .gpio = 35, | ||
| 130 | .desc = "Nav Pad Left", | ||
| 131 | .wakeup = 0, | ||
| 132 | }, { | ||
| 133 | .type = EV_KEY, | ||
| 134 | .code = KEY_ENTER, | ||
| 135 | .gpio = 38, | ||
| 136 | .desc = "Nav Pad Ok", | ||
| 137 | .wakeup = 0, | ||
| 138 | }, { | ||
| 139 | .type = EV_KEY, | ||
| 140 | .code = KEY_O, | ||
| 141 | .gpio = 39, | ||
| 142 | .desc = "Wheel Off", | ||
| 143 | .wakeup = 0, | ||
| 144 | }, { | ||
| 145 | .type = EV_KEY, | ||
| 146 | .code = BTN_FORWARD, | ||
| 147 | .gpio = 50, | ||
| 148 | .desc = "Focus Forward", | ||
| 149 | .wakeup = 0, | ||
| 150 | }, { | ||
| 151 | .type = EV_KEY, | ||
| 152 | .code = BTN_BACK, | ||
| 153 | .gpio = 51, | ||
| 154 | .desc = "Focus Backward", | ||
| 155 | .wakeup = 0, | ||
| 156 | }, { | ||
| 157 | .type = EV_KEY, | ||
| 158 | .code = BTN_MIDDLE, | ||
| 159 | .gpio = 52, | ||
| 160 | .desc = "Release Half", | ||
| 161 | .wakeup = 0, | ||
| 162 | }, { | ||
| 163 | .type = EV_KEY, | ||
| 164 | .code = BTN_EXTRA, | ||
| 165 | .gpio = 53, | ||
| 166 | .desc = "Release Full", | ||
| 167 | .wakeup = 0, | ||
| 168 | }, | ||
| 169 | }; | ||
| 170 | |||
| 171 | static struct gpio_keys_platform_data pcm037_gpio_keys_platform_data = { | ||
| 172 | .buttons = pcm037_gpio_keys, | ||
| 173 | .nbuttons = ARRAY_SIZE(pcm037_gpio_keys), | ||
| 174 | .rep = 0, /* No auto-repeat */ | ||
| 175 | }; | ||
| 176 | |||
| 177 | static struct platform_device pcm037_gpio_keys_device = { | ||
| 178 | .name = "gpio-keys", | ||
| 179 | .id = -1, | ||
| 180 | .dev = { | ||
| 181 | .platform_data = &pcm037_gpio_keys_platform_data, | ||
| 182 | }, | ||
| 183 | }; | ||
| 184 | |||
| 185 | static int eet_init_devices(void) | ||
| 186 | { | ||
| 187 | if (!machine_is_pcm037() || pcm037_variant() != PCM037_EET) | ||
| 188 | return 0; | ||
| 189 | |||
| 190 | mxc_iomux_setup_multiple_pins(pcm037_eet_pins, | ||
| 191 | ARRAY_SIZE(pcm037_eet_pins), "pcm037_eet"); | ||
| 192 | |||
| 193 | /* SPI */ | ||
| 194 | spi_register_board_info(pcm037_spi_dev, ARRAY_SIZE(pcm037_spi_dev)); | ||
| 195 | #if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE) | ||
| 196 | mxc_register_device(&mxc_spi_device0, &pcm037_spi1_master); | ||
| 197 | #endif | ||
| 198 | |||
| 199 | platform_device_register(&pcm037_gpio_keys_device); | ||
| 200 | |||
| 201 | return 0; | ||
| 202 | } | ||
| 203 | |||
| 204 | late_initcall(eet_init_devices); | ||
diff --git a/arch/arm/mach-pxa/include/mach/mfp-pxa300.h b/arch/arm/mach-pxa/include/mach/mfp-pxa300.h index ae8441192ef..7139e0dc26d 100644 --- a/arch/arm/mach-pxa/include/mach/mfp-pxa300.h +++ b/arch/arm/mach-pxa/include/mach/mfp-pxa300.h | |||
| @@ -567,9 +567,9 @@ | |||
| 567 | #define GPIO37_ULPI_DATA_OUT_7 MFP_CFG(GPIO37, AF3) | 567 | #define GPIO37_ULPI_DATA_OUT_7 MFP_CFG(GPIO37, AF3) |
| 568 | #define GPIO33_ULPI_OTG_INTR MFP_CFG(GPIO33, AF1) | 568 | #define GPIO33_ULPI_OTG_INTR MFP_CFG(GPIO33, AF1) |
| 569 | 569 | ||
| 570 | #define ULPI_DIR MFP_CFG_DRV(ULPI_DIR, MFP_AF0, MFP_DS01X) | 570 | #define ULPI_DIR MFP_CFG_DRV(ULPI_DIR, AF0, DS01X) |
| 571 | #define ULPI_NXT MFP_CFG_DRV(ULPI_NXT, MFP_AF0, MFP_DS01X) | 571 | #define ULPI_NXT MFP_CFG_DRV(ULPI_NXT, AF0, DS01X) |
| 572 | #define ULPI_STP MFP_CFG_DRV(ULPI_STP, MFP_AF0, MFP_DS01X) | 572 | #define ULPI_STP MFP_CFG_DRV(ULPI_STP, AF0, DS01X) |
| 573 | #endif /* CONFIG_CPU_PXA310 */ | 573 | #endif /* CONFIG_CPU_PXA310 */ |
| 574 | 574 | ||
| 575 | #endif /* __ASM_ARCH_MFP_PXA300_H */ | 575 | #endif /* __ASM_ARCH_MFP_PXA300_H */ |
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c index 6f678d93bf4..09b7b1a10ca 100644 --- a/arch/arm/mach-pxa/pxa3xx.c +++ b/arch/arm/mach-pxa/pxa3xx.c | |||
| @@ -250,7 +250,7 @@ static DEFINE_PXA3_CKEN(pxa3xx_mmc2, MMC2, 19500000, 0); | |||
| 250 | static struct clk_lookup pxa3xx_clkregs[] = { | 250 | static struct clk_lookup pxa3xx_clkregs[] = { |
| 251 | INIT_CLKREG(&clk_pxa3xx_pout, NULL, "CLK_POUT"), | 251 | INIT_CLKREG(&clk_pxa3xx_pout, NULL, "CLK_POUT"), |
| 252 | /* Power I2C clock is always on */ | 252 | /* Power I2C clock is always on */ |
| 253 | INIT_CLKREG(&clk_dummy, "pxa2xx-i2c.1", NULL), | 253 | INIT_CLKREG(&clk_dummy, "pxa3xx-pwri2c.1", NULL), |
| 254 | INIT_CLKREG(&clk_pxa3xx_lcd, "pxa2xx-fb", NULL), | 254 | INIT_CLKREG(&clk_pxa3xx_lcd, "pxa2xx-fb", NULL), |
| 255 | INIT_CLKREG(&clk_pxa3xx_camera, NULL, "CAMCLK"), | 255 | INIT_CLKREG(&clk_pxa3xx_camera, NULL, "CAMCLK"), |
| 256 | INIT_CLKREG(&clk_pxa3xx_ac97, NULL, "AC97CLK"), | 256 | INIT_CLKREG(&clk_pxa3xx_ac97, NULL, "AC97CLK"), |
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 9ea9c05093c..facbd49eec6 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
| @@ -208,8 +208,7 @@ struct platform_device realview_i2c_device = { | |||
| 208 | 208 | ||
| 209 | static struct i2c_board_info realview_i2c_board_info[] = { | 209 | static struct i2c_board_info realview_i2c_board_info[] = { |
| 210 | { | 210 | { |
| 211 | I2C_BOARD_INFO("rtc-ds1307", 0xd0 >> 1), | 211 | I2C_BOARD_INFO("ds1338", 0xd0 >> 1), |
| 212 | .type = "ds1338", | ||
| 213 | }, | 212 | }, |
| 214 | }; | 213 | }; |
| 215 | 214 | ||
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index 89b3ccf35e1..7936085dd75 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c | |||
| @@ -455,8 +455,8 @@ void __init u300_init_irq(void) | |||
| 455 | for (i = 0; i < NR_IRQS; i++) | 455 | for (i = 0; i < NR_IRQS; i++) |
| 456 | set_bit(i, (unsigned long *) &mask[0]); | 456 | set_bit(i, (unsigned long *) &mask[0]); |
| 457 | u300_enable_intcon_clock(); | 457 | u300_enable_intcon_clock(); |
| 458 | vic_init((void __iomem *) U300_INTCON0_VBASE, 0, mask[0], 0); | 458 | vic_init((void __iomem *) U300_INTCON0_VBASE, 0, mask[0], mask[0]); |
| 459 | vic_init((void __iomem *) U300_INTCON1_VBASE, 32, mask[1], 0); | 459 | vic_init((void __iomem *) U300_INTCON1_VBASE, 32, mask[1], mask[1]); |
| 460 | } | 460 | } |
| 461 | 461 | ||
| 462 | 462 | ||
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index 69214fc8bd1..31093af7d05 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
| @@ -342,8 +342,7 @@ static struct platform_device versatile_i2c_device = { | |||
| 342 | 342 | ||
| 343 | static struct i2c_board_info versatile_i2c_board_info[] = { | 343 | static struct i2c_board_info versatile_i2c_board_info[] = { |
| 344 | { | 344 | { |
| 345 | I2C_BOARD_INFO("rtc-ds1307", 0xd0 >> 1), | 345 | I2C_BOARD_INFO("ds1338", 0xd0 >> 1), |
| 346 | .type = "ds1338", | ||
| 347 | }, | 346 | }, |
| 348 | }; | 347 | }; |
| 349 | 348 | ||
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx3.h b/arch/arm/plat-mxc/include/mach/iomux-mx3.h index 27f8d1b2bc6..2eb182f7387 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx3.h +++ b/arch/arm/plat-mxc/include/mach/iomux-mx3.h | |||
| @@ -602,6 +602,8 @@ enum iomux_pins { | |||
| 602 | #define MX31_PIN_I2C_DAT__SDA IOMUX_MODE(MX31_PIN_I2C_DAT, IOMUX_CONFIG_FUNC) | 602 | #define MX31_PIN_I2C_DAT__SDA IOMUX_MODE(MX31_PIN_I2C_DAT, IOMUX_CONFIG_FUNC) |
| 603 | #define MX31_PIN_DCD_DTE1__I2C2_SDA IOMUX_MODE(MX31_PIN_DCD_DTE1, IOMUX_CONFIG_ALT2) | 603 | #define MX31_PIN_DCD_DTE1__I2C2_SDA IOMUX_MODE(MX31_PIN_DCD_DTE1, IOMUX_CONFIG_ALT2) |
| 604 | #define MX31_PIN_RI_DTE1__I2C2_SCL IOMUX_MODE(MX31_PIN_RI_DTE1, IOMUX_CONFIG_ALT2) | 604 | #define MX31_PIN_RI_DTE1__I2C2_SCL IOMUX_MODE(MX31_PIN_RI_DTE1, IOMUX_CONFIG_ALT2) |
| 605 | #define MX31_PIN_CSPI2_SS2__I2C3_SDA IOMUX_MODE(MX31_PIN_CSPI2_SS2, IOMUX_CONFIG_ALT1) | ||
| 606 | #define MX31_PIN_CSPI2_SCLK__I2C3_SCL IOMUX_MODE(MX31_PIN_CSPI2_SCLK, IOMUX_CONFIG_ALT1) | ||
| 605 | #define MX31_PIN_CSI_D4__CSI_D4 IOMUX_MODE(MX31_PIN_CSI_D4, IOMUX_CONFIG_FUNC) | 607 | #define MX31_PIN_CSI_D4__CSI_D4 IOMUX_MODE(MX31_PIN_CSI_D4, IOMUX_CONFIG_FUNC) |
| 606 | #define MX31_PIN_CSI_D5__CSI_D5 IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_FUNC) | 608 | #define MX31_PIN_CSI_D5__CSI_D5 IOMUX_MODE(MX31_PIN_CSI_D5, IOMUX_CONFIG_FUNC) |
| 607 | #define MX31_PIN_CSI_D6__CSI_D6 IOMUX_MODE(MX31_PIN_CSI_D6, IOMUX_CONFIG_FUNC) | 609 | #define MX31_PIN_CSI_D6__CSI_D6 IOMUX_MODE(MX31_PIN_CSI_D6, IOMUX_CONFIG_FUNC) |
diff --git a/arch/arm/plat-pxa/gpio.c b/arch/arm/plat-pxa/gpio.c index abc79d44aca..98548c6903a 100644 --- a/arch/arm/plat-pxa/gpio.c +++ b/arch/arm/plat-pxa/gpio.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include <linux/irq.h> | 16 | #include <linux/irq.h> |
| 17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
| 18 | #include <linux/sysdev.h> | 18 | #include <linux/sysdev.h> |
| 19 | #include <linux/bootmem.h> | 19 | #include <linux/slab.h> |
| 20 | 20 | ||
| 21 | #include <mach/gpio.h> | 21 | #include <mach/gpio.h> |
| 22 | 22 | ||
| @@ -112,17 +112,12 @@ static int __init pxa_init_gpio_chip(int gpio_end) | |||
| 112 | int i, gpio, nbanks = gpio_to_bank(gpio_end) + 1; | 112 | int i, gpio, nbanks = gpio_to_bank(gpio_end) + 1; |
| 113 | struct pxa_gpio_chip *chips; | 113 | struct pxa_gpio_chip *chips; |
| 114 | 114 | ||
| 115 | /* this is early, we have to use bootmem allocator, and we really | 115 | chips = kzalloc(nbanks * sizeof(struct pxa_gpio_chip), GFP_KERNEL); |
| 116 | * want this to be allocated dynamically for different 'gpio_end' | ||
| 117 | */ | ||
| 118 | chips = alloc_bootmem_low(nbanks * sizeof(struct pxa_gpio_chip)); | ||
| 119 | if (chips == NULL) { | 116 | if (chips == NULL) { |
| 120 | pr_err("%s: failed to allocate GPIO chips\n", __func__); | 117 | pr_err("%s: failed to allocate GPIO chips\n", __func__); |
| 121 | return -ENOMEM; | 118 | return -ENOMEM; |
| 122 | } | 119 | } |
| 123 | 120 | ||
| 124 | memset(chips, 0, nbanks * sizeof(struct pxa_gpio_chip)); | ||
| 125 | |||
| 126 | for (i = 0, gpio = 0; i < nbanks; i++, gpio += 32) { | 121 | for (i = 0, gpio = 0; i < nbanks; i++, gpio += 32) { |
| 127 | struct gpio_chip *c = &chips[i].chip; | 122 | struct gpio_chip *c = &chips[i].chip; |
| 128 | 123 | ||
diff --git a/arch/blackfin/include/asm/context.S b/arch/blackfin/include/asm/context.S index 16561ab18b3..f8a664f022b 100644 --- a/arch/blackfin/include/asm/context.S +++ b/arch/blackfin/include/asm/context.S | |||
| @@ -223,9 +223,10 @@ | |||
| 223 | [--sp] = RETN; | 223 | [--sp] = RETN; |
| 224 | [--sp] = RETE; | 224 | [--sp] = RETE; |
| 225 | [--sp] = SEQSTAT; | 225 | [--sp] = SEQSTAT; |
| 226 | #ifdef CONFIG_KGDB | 226 | #ifdef CONFIG_DEBUG_KERNEL |
| 227 | r1.l = lo(IPEND); | 227 | p1.l = lo(IPEND); |
| 228 | r1.h = hi(IPEND); | 228 | p1.h = hi(IPEND); |
| 229 | r1 = [p1]; | ||
| 229 | [--sp] = r1; | 230 | [--sp] = r1; |
| 230 | #else | 231 | #else |
| 231 | [--sp] = r0; /* Skip IPEND as well. */ | 232 | [--sp] = r0; /* Skip IPEND as well. */ |
diff --git a/arch/blackfin/include/asm/cpu.h b/arch/blackfin/include/asm/cpu.h index 565b8136855..fadfa82f93b 100644 --- a/arch/blackfin/include/asm/cpu.h +++ b/arch/blackfin/include/asm/cpu.h | |||
| @@ -32,7 +32,6 @@ struct blackfin_cpudata { | |||
| 32 | struct task_struct *idle; | 32 | struct task_struct *idle; |
| 33 | unsigned int imemctl; | 33 | unsigned int imemctl; |
| 34 | unsigned int dmemctl; | 34 | unsigned int dmemctl; |
| 35 | unsigned long loops_per_jiffy; | ||
| 36 | unsigned long dcache_invld_count; | 35 | unsigned long dcache_invld_count; |
| 37 | unsigned long icache_invld_count; | 36 | unsigned long icache_invld_count; |
| 38 | }; | 37 | }; |
diff --git a/arch/blackfin/include/asm/hardirq.h b/arch/blackfin/include/asm/hardirq.h index cbd52f86bb9..0b78b873df5 100644 --- a/arch/blackfin/include/asm/hardirq.h +++ b/arch/blackfin/include/asm/hardirq.h | |||
| @@ -6,6 +6,9 @@ | |||
| 6 | extern void ack_bad_irq(unsigned int irq); | 6 | extern void ack_bad_irq(unsigned int irq); |
| 7 | #define ack_bad_irq ack_bad_irq | 7 | #define ack_bad_irq ack_bad_irq |
| 8 | 8 | ||
| 9 | /* Define until common code gets sane defaults */ | ||
| 10 | #define HARDIRQ_BITS 9 | ||
| 11 | |||
| 9 | #include <asm-generic/hardirq.h> | 12 | #include <asm-generic/hardirq.h> |
| 10 | 13 | ||
| 11 | #endif | 14 | #endif |
diff --git a/arch/blackfin/include/asm/processor.h b/arch/blackfin/include/asm/processor.h index d0be99be830..a36ad8dac06 100644 --- a/arch/blackfin/include/asm/processor.h +++ b/arch/blackfin/include/asm/processor.h | |||
| @@ -105,23 +105,16 @@ static inline uint32_t __pure bfin_revid(void) | |||
| 105 | /* Always use CHIPID, to work around ANOMALY_05000234 */ | 105 | /* Always use CHIPID, to work around ANOMALY_05000234 */ |
| 106 | uint32_t revid = (bfin_read_CHIPID() & CHIPID_VERSION) >> 28; | 106 | uint32_t revid = (bfin_read_CHIPID() & CHIPID_VERSION) >> 28; |
| 107 | 107 | ||
| 108 | #ifdef CONFIG_BF52x | 108 | #ifdef _BOOTROM_GET_DXE_ADDRESS_TWI |
| 109 | /* ANOMALY_05000357 | 109 | /* |
| 110 | * ANOMALY_05000364 | ||
| 110 | * Incorrect Revision Number in DSPID Register | 111 | * Incorrect Revision Number in DSPID Register |
| 111 | */ | 112 | */ |
| 112 | if (revid == 0) | 113 | if (ANOMALY_05000364 && |
| 113 | switch (bfin_read16(_BOOTROM_GET_DXE_ADDRESS_TWI)) { | 114 | bfin_read16(_BOOTROM_GET_DXE_ADDRESS_TWI) == 0x2796) |
| 114 | case 0x0010: | 115 | revid = 1; |
| 115 | revid = 0; | ||
| 116 | break; | ||
| 117 | case 0x2796: | ||
| 118 | revid = 1; | ||
| 119 | break; | ||
| 120 | default: | ||
| 121 | revid = 0xFFFF; | ||
| 122 | break; | ||
| 123 | } | ||
| 124 | #endif | 116 | #endif |
| 117 | |||
| 125 | return revid; | 118 | return revid; |
| 126 | } | 119 | } |
| 127 | 120 | ||
diff --git a/arch/blackfin/kernel/bfin_dma_5xx.c b/arch/blackfin/kernel/bfin_dma_5xx.c index e0bf8cc0690..9f9b8281665 100644 --- a/arch/blackfin/kernel/bfin_dma_5xx.c +++ b/arch/blackfin/kernel/bfin_dma_5xx.c | |||
| @@ -253,32 +253,31 @@ void __init early_dma_memcpy(void *pdst, const void *psrc, size_t size) | |||
| 253 | BUG_ON(src % 4); | 253 | BUG_ON(src % 4); |
| 254 | BUG_ON(size % 4); | 254 | BUG_ON(size % 4); |
| 255 | 255 | ||
| 256 | /* Force a sync in case a previous config reset on this channel | ||
| 257 | * occurred. This is needed so subsequent writes to DMA registers | ||
| 258 | * are not spuriously lost/corrupted. | ||
| 259 | */ | ||
| 260 | __builtin_bfin_ssync(); | ||
| 261 | |||
| 262 | src_ch = 0; | 256 | src_ch = 0; |
| 263 | /* Find an avalible memDMA channel */ | 257 | /* Find an avalible memDMA channel */ |
| 264 | while (1) { | 258 | while (1) { |
| 265 | if (!src_ch || src_ch == (struct dma_register *)MDMA_S1_NEXT_DESC_PTR) { | 259 | if (src_ch == (struct dma_register *)MDMA_S0_NEXT_DESC_PTR) { |
| 266 | dst_ch = (struct dma_register *)MDMA_D0_NEXT_DESC_PTR; | ||
| 267 | src_ch = (struct dma_register *)MDMA_S0_NEXT_DESC_PTR; | ||
| 268 | } else { | ||
| 269 | dst_ch = (struct dma_register *)MDMA_D1_NEXT_DESC_PTR; | 260 | dst_ch = (struct dma_register *)MDMA_D1_NEXT_DESC_PTR; |
| 270 | src_ch = (struct dma_register *)MDMA_S1_NEXT_DESC_PTR; | 261 | src_ch = (struct dma_register *)MDMA_S1_NEXT_DESC_PTR; |
| 262 | } else { | ||
| 263 | dst_ch = (struct dma_register *)MDMA_D0_NEXT_DESC_PTR; | ||
| 264 | src_ch = (struct dma_register *)MDMA_S0_NEXT_DESC_PTR; | ||
| 271 | } | 265 | } |
| 272 | 266 | ||
| 273 | if (!bfin_read16(&src_ch->cfg)) { | 267 | if (!bfin_read16(&src_ch->cfg)) |
| 268 | break; | ||
| 269 | else if (bfin_read16(&dst_ch->irq_status) & DMA_DONE) { | ||
| 270 | bfin_write16(&src_ch->cfg, 0); | ||
| 274 | break; | 271 | break; |
| 275 | } else { | ||
| 276 | if (bfin_read16(&src_ch->irq_status) & DMA_DONE) | ||
| 277 | bfin_write16(&src_ch->cfg, 0); | ||
| 278 | } | 272 | } |
| 279 | |||
| 280 | } | 273 | } |
| 281 | 274 | ||
| 275 | /* Force a sync in case a previous config reset on this channel | ||
| 276 | * occurred. This is needed so subsequent writes to DMA registers | ||
| 277 | * are not spuriously lost/corrupted. | ||
| 278 | */ | ||
| 279 | __builtin_bfin_ssync(); | ||
| 280 | |||
| 282 | /* Destination */ | 281 | /* Destination */ |
| 283 | bfin_write32(&dst_ch->start_addr, dst); | 282 | bfin_write32(&dst_ch->start_addr, dst); |
| 284 | bfin_write16(&dst_ch->x_count, size >> 2); | 283 | bfin_write16(&dst_ch->x_count, size >> 2); |
diff --git a/arch/blackfin/kernel/bfin_gpio.c b/arch/blackfin/kernel/bfin_gpio.c index beffa00a93c..6b944627137 100644 --- a/arch/blackfin/kernel/bfin_gpio.c +++ b/arch/blackfin/kernel/bfin_gpio.c | |||
| @@ -686,14 +686,12 @@ void bfin_gpio_pm_hibernate_restore(void) | |||
| 686 | *port_fer[bank] = gpio_bank_saved[bank].fer; | 686 | *port_fer[bank] = gpio_bank_saved[bank].fer; |
| 687 | #endif | 687 | #endif |
| 688 | gpio_array[bank]->inen = gpio_bank_saved[bank].inen; | 688 | gpio_array[bank]->inen = gpio_bank_saved[bank].inen; |
| 689 | gpio_array[bank]->data_set = gpio_bank_saved[bank].data | ||
| 690 | & gpio_bank_saved[bank].dir; | ||
| 689 | gpio_array[bank]->dir = gpio_bank_saved[bank].dir; | 691 | gpio_array[bank]->dir = gpio_bank_saved[bank].dir; |
| 690 | gpio_array[bank]->polar = gpio_bank_saved[bank].polar; | 692 | gpio_array[bank]->polar = gpio_bank_saved[bank].polar; |
| 691 | gpio_array[bank]->edge = gpio_bank_saved[bank].edge; | 693 | gpio_array[bank]->edge = gpio_bank_saved[bank].edge; |
| 692 | gpio_array[bank]->both = gpio_bank_saved[bank].both; | 694 | gpio_array[bank]->both = gpio_bank_saved[bank].both; |
| 693 | |||
| 694 | gpio_array[bank]->data_set = gpio_bank_saved[bank].data | ||
| 695 | | gpio_bank_saved[bank].dir; | ||
| 696 | |||
| 697 | gpio_array[bank]->maska = gpio_bank_saved[bank].maska; | 695 | gpio_array[bank]->maska = gpio_bank_saved[bank].maska; |
| 698 | } | 696 | } |
| 699 | AWA_DUMMY_READ(maska); | 697 | AWA_DUMMY_READ(maska); |
diff --git a/arch/blackfin/kernel/cplb-nompu/cplbinit.c b/arch/blackfin/kernel/cplb-nompu/cplbinit.c index d6c067782e6..685f160a5a3 100644 --- a/arch/blackfin/kernel/cplb-nompu/cplbinit.c +++ b/arch/blackfin/kernel/cplb-nompu/cplbinit.c | |||
| @@ -72,13 +72,24 @@ void __init generate_cplb_tables_cpu(unsigned int cpu) | |||
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | /* Cover L1 memory. One 4M area for code and data each is enough. */ | 74 | /* Cover L1 memory. One 4M area for code and data each is enough. */ |
| 75 | if (L1_DATA_A_LENGTH || L1_DATA_B_LENGTH) { | 75 | if (cpu == 0) { |
| 76 | d_tbl[i_d].addr = L1_DATA_A_START; | 76 | if (L1_DATA_A_LENGTH || L1_DATA_B_LENGTH) { |
| 77 | d_tbl[i_d++].data = L1_DMEMORY | PAGE_SIZE_4MB; | 77 | d_tbl[i_d].addr = L1_DATA_A_START; |
| 78 | d_tbl[i_d++].data = L1_DMEMORY | PAGE_SIZE_4MB; | ||
| 79 | } | ||
| 80 | i_tbl[i_i].addr = L1_CODE_START; | ||
| 81 | i_tbl[i_i++].data = L1_IMEMORY | PAGE_SIZE_4MB; | ||
| 78 | } | 82 | } |
| 79 | i_tbl[i_i].addr = L1_CODE_START; | 83 | #ifdef CONFIG_SMP |
| 80 | i_tbl[i_i++].data = L1_IMEMORY | PAGE_SIZE_4MB; | 84 | else { |
| 81 | 85 | if (L1_DATA_A_LENGTH || L1_DATA_B_LENGTH) { | |
| 86 | d_tbl[i_d].addr = COREB_L1_DATA_A_START; | ||
| 87 | d_tbl[i_d++].data = L1_DMEMORY | PAGE_SIZE_4MB; | ||
| 88 | } | ||
| 89 | i_tbl[i_i].addr = COREB_L1_CODE_START; | ||
| 90 | i_tbl[i_i++].data = L1_IMEMORY | PAGE_SIZE_4MB; | ||
| 91 | } | ||
| 92 | #endif | ||
| 82 | first_switched_dcplb = i_d; | 93 | first_switched_dcplb = i_d; |
| 83 | first_switched_icplb = i_i; | 94 | first_switched_icplb = i_i; |
| 84 | 95 | ||
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c index 79cad0ac589..9da36bab7cc 100644 --- a/arch/blackfin/kernel/process.c +++ b/arch/blackfin/kernel/process.c | |||
| @@ -361,7 +361,7 @@ static inline | |||
| 361 | int in_mem_const(unsigned long addr, unsigned long size, | 361 | int in_mem_const(unsigned long addr, unsigned long size, |
| 362 | unsigned long const_addr, unsigned long const_size) | 362 | unsigned long const_addr, unsigned long const_size) |
| 363 | { | 363 | { |
| 364 | return in_mem_const_off(addr, 0, size, const_addr, const_size); | 364 | return in_mem_const_off(addr, size, 0, const_addr, const_size); |
| 365 | } | 365 | } |
| 366 | #define IN_ASYNC(bnum, bctlnum) \ | 366 | #define IN_ASYNC(bnum, bctlnum) \ |
| 367 | ({ \ | 367 | ({ \ |
| @@ -390,13 +390,13 @@ int bfin_mem_access_type(unsigned long addr, unsigned long size) | |||
| 390 | if (in_mem_const(addr, size, L1_DATA_B_START, L1_DATA_B_LENGTH)) | 390 | if (in_mem_const(addr, size, L1_DATA_B_START, L1_DATA_B_LENGTH)) |
| 391 | return cpu == 0 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; | 391 | return cpu == 0 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; |
| 392 | #ifdef COREB_L1_CODE_START | 392 | #ifdef COREB_L1_CODE_START |
| 393 | if (in_mem_const(addr, size, COREB_L1_CODE_START, L1_CODE_LENGTH)) | 393 | if (in_mem_const(addr, size, COREB_L1_CODE_START, COREB_L1_CODE_LENGTH)) |
| 394 | return cpu == 1 ? BFIN_MEM_ACCESS_ITEST : BFIN_MEM_ACCESS_IDMA; | 394 | return cpu == 1 ? BFIN_MEM_ACCESS_ITEST : BFIN_MEM_ACCESS_IDMA; |
| 395 | if (in_mem_const(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) | 395 | if (in_mem_const(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) |
| 396 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE_ONLY : -EFAULT; | 396 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE_ONLY : -EFAULT; |
| 397 | if (in_mem_const(addr, size, COREB_L1_DATA_A_START, L1_DATA_A_LENGTH)) | 397 | if (in_mem_const(addr, size, COREB_L1_DATA_A_START, COREB_L1_DATA_A_LENGTH)) |
| 398 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; | 398 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; |
| 399 | if (in_mem_const(addr, size, COREB_L1_DATA_B_START, L1_DATA_B_LENGTH)) | 399 | if (in_mem_const(addr, size, COREB_L1_DATA_B_START, COREB_L1_DATA_B_LENGTH)) |
| 400 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; | 400 | return cpu == 1 ? BFIN_MEM_ACCESS_CORE : BFIN_MEM_ACCESS_IDMA; |
| 401 | #endif | 401 | #endif |
| 402 | if (in_mem_const(addr, size, L2_START, L2_LENGTH)) | 402 | if (in_mem_const(addr, size, L2_START, L2_LENGTH)) |
| @@ -472,13 +472,13 @@ int _access_ok(unsigned long addr, unsigned long size) | |||
| 472 | if (in_mem_const_off(addr, size, _ebss_b_l1 - _sdata_b_l1, L1_DATA_B_START, L1_DATA_B_LENGTH)) | 472 | if (in_mem_const_off(addr, size, _ebss_b_l1 - _sdata_b_l1, L1_DATA_B_START, L1_DATA_B_LENGTH)) |
| 473 | return 1; | 473 | return 1; |
| 474 | #ifdef COREB_L1_CODE_START | 474 | #ifdef COREB_L1_CODE_START |
| 475 | if (in_mem_const(addr, size, COREB_L1_CODE_START, L1_CODE_LENGTH)) | 475 | if (in_mem_const(addr, size, COREB_L1_CODE_START, COREB_L1_CODE_LENGTH)) |
| 476 | return 1; | 476 | return 1; |
| 477 | if (in_mem_const(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) | 477 | if (in_mem_const(addr, size, COREB_L1_SCRATCH_START, L1_SCRATCH_LENGTH)) |
| 478 | return 1; | 478 | return 1; |
| 479 | if (in_mem_const(addr, size, COREB_L1_DATA_A_START, L1_DATA_A_LENGTH)) | 479 | if (in_mem_const(addr, size, COREB_L1_DATA_A_START, COREB_L1_DATA_A_LENGTH)) |
| 480 | return 1; | 480 | return 1; |
| 481 | if (in_mem_const(addr, size, COREB_L1_DATA_B_START, L1_DATA_B_LENGTH)) | 481 | if (in_mem_const(addr, size, COREB_L1_DATA_B_START, COREB_L1_DATA_B_LENGTH)) |
| 482 | return 1; | 482 | return 1; |
| 483 | #endif | 483 | #endif |
| 484 | if (in_mem_const_off(addr, size, _ebss_l2 - _stext_l2, L2_START, L2_LENGTH)) | 484 | if (in_mem_const_off(addr, size, _ebss_l2 - _stext_l2, L2_START, L2_LENGTH)) |
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c index 6136c33e919..6225edae488 100644 --- a/arch/blackfin/kernel/setup.c +++ b/arch/blackfin/kernel/setup.c | |||
| @@ -168,7 +168,6 @@ void __cpuinit bfin_setup_cpudata(unsigned int cpu) | |||
| 168 | struct blackfin_cpudata *cpudata = &per_cpu(cpu_data, cpu); | 168 | struct blackfin_cpudata *cpudata = &per_cpu(cpu_data, cpu); |
| 169 | 169 | ||
| 170 | cpudata->idle = current; | 170 | cpudata->idle = current; |
| 171 | cpudata->loops_per_jiffy = loops_per_jiffy; | ||
| 172 | cpudata->imemctl = bfin_read_IMEM_CONTROL(); | 171 | cpudata->imemctl = bfin_read_IMEM_CONTROL(); |
| 173 | cpudata->dmemctl = bfin_read_DMEM_CONTROL(); | 172 | cpudata->dmemctl = bfin_read_DMEM_CONTROL(); |
| 174 | } | 173 | } |
| @@ -568,17 +567,23 @@ static __init void memory_setup(void) | |||
| 568 | # endif /* ANOMALY_05000263 */ | 567 | # endif /* ANOMALY_05000263 */ |
| 569 | # endif /* CONFIG_ROMFS_FS */ | 568 | # endif /* CONFIG_ROMFS_FS */ |
| 570 | 569 | ||
| 571 | memory_end -= mtd_size; | 570 | /* Since the default MTD_UCLINUX has no magic number, we just blindly |
| 572 | 571 | * read 8 past the end of the kernel's image, and look at it. | |
| 573 | if (mtd_size == 0) { | 572 | * When no image is attached, mtd_size is set to a random number |
| 574 | console_init(); | 573 | * Do some basic sanity checks before operating on things |
| 575 | panic("Don't boot kernel without rootfs attached."); | 574 | */ |
| 575 | if (mtd_size == 0 || memory_end <= mtd_size) { | ||
| 576 | pr_emerg("Could not find valid ram mtd attached.\n"); | ||
| 577 | } else { | ||
| 578 | memory_end -= mtd_size; | ||
| 579 | |||
| 580 | /* Relocate MTD image to the top of memory after the uncached memory area */ | ||
| 581 | uclinux_ram_map.phys = memory_mtd_start = memory_end; | ||
| 582 | uclinux_ram_map.size = mtd_size; | ||
| 583 | pr_info("Found mtd parition at 0x%p, (len=0x%lx), moving to 0x%p\n", | ||
| 584 | _end, mtd_size, (void *)memory_mtd_start); | ||
| 585 | dma_memcpy((void *)uclinux_ram_map.phys, _end, uclinux_ram_map.size); | ||
| 576 | } | 586 | } |
| 577 | |||
| 578 | /* Relocate MTD image to the top of memory after the uncached memory area */ | ||
| 579 | uclinux_ram_map.phys = memory_mtd_start = memory_end; | ||
| 580 | uclinux_ram_map.size = mtd_size; | ||
| 581 | dma_memcpy((void *)uclinux_ram_map.phys, _end, uclinux_ram_map.size); | ||
| 582 | #endif /* CONFIG_MTD_UCLINUX */ | 587 | #endif /* CONFIG_MTD_UCLINUX */ |
| 583 | 588 | ||
| 584 | #if (defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) && ANOMALY_05000263) | 589 | #if (defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) && ANOMALY_05000263) |
| @@ -868,13 +873,6 @@ void __init setup_arch(char **cmdline_p) | |||
| 868 | else | 873 | else |
| 869 | printk(KERN_CONT "and Disabled\n"); | 874 | printk(KERN_CONT "and Disabled\n"); |
| 870 | 875 | ||
| 871 | #if defined(CONFIG_CHR_DEV_FLASH) || defined(CONFIG_BLK_DEV_FLASH) | ||
| 872 | /* we need to initialize the Flashrom device here since we might | ||
| 873 | * do things with flash early on in the boot | ||
| 874 | */ | ||
| 875 | flash_probe(); | ||
| 876 | #endif | ||
| 877 | |||
| 878 | printk(KERN_INFO "Boot Mode: %i\n", bfin_read_SYSCR() & 0xF); | 876 | printk(KERN_INFO "Boot Mode: %i\n", bfin_read_SYSCR() & 0xF); |
| 879 | 877 | ||
| 880 | /* Newer parts mirror SWRST bits in SYSCR */ | 878 | /* Newer parts mirror SWRST bits in SYSCR */ |
| @@ -938,10 +936,6 @@ void __init setup_arch(char **cmdline_p) | |||
| 938 | CPU, bfin_revid()); | 936 | CPU, bfin_revid()); |
| 939 | } | 937 | } |
| 940 | 938 | ||
| 941 | /* We can't run on BF548-0.1 due to ANOMALY 05000448 */ | ||
| 942 | if (bfin_cpuid() == 0x27de && bfin_revid() == 1) | ||
| 943 | panic("You can't run on this processor due to 05000448"); | ||
| 944 | |||
| 945 | printk(KERN_INFO "Blackfin Linux support by http://blackfin.uclinux.org/\n"); | 939 | printk(KERN_INFO "Blackfin Linux support by http://blackfin.uclinux.org/\n"); |
| 946 | 940 | ||
| 947 | printk(KERN_INFO "Processor Speed: %lu MHz core clock and %lu MHz System Clock\n", | 941 | printk(KERN_INFO "Processor Speed: %lu MHz core clock and %lu MHz System Clock\n", |
| @@ -1164,9 +1158,9 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
| 1164 | sclk/1000000, sclk%1000000); | 1158 | sclk/1000000, sclk%1000000); |
| 1165 | seq_printf(m, "bogomips\t: %lu.%02lu\n" | 1159 | seq_printf(m, "bogomips\t: %lu.%02lu\n" |
| 1166 | "Calibration\t: %lu loops\n", | 1160 | "Calibration\t: %lu loops\n", |
| 1167 | (cpudata->loops_per_jiffy * HZ) / 500000, | 1161 | (loops_per_jiffy * HZ) / 500000, |
| 1168 | ((cpudata->loops_per_jiffy * HZ) / 5000) % 100, | 1162 | ((loops_per_jiffy * HZ) / 5000) % 100, |
| 1169 | (cpudata->loops_per_jiffy * HZ)); | 1163 | (loops_per_jiffy * HZ)); |
| 1170 | 1164 | ||
| 1171 | /* Check Cache configutation */ | 1165 | /* Check Cache configutation */ |
| 1172 | switch (cpudata->dmemctl & (1 << DMC0_P | 1 << DMC1_P)) { | 1166 | switch (cpudata->dmemctl & (1 << DMC0_P | 1 << DMC1_P)) { |
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index 8a1caf2bb5b..bf2b2d1f8ae 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
| @@ -570,11 +570,12 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
| 570 | if (kernel_mode_regs(fp) || (current && !current->mm)) { | 570 | if (kernel_mode_regs(fp) || (current && !current->mm)) { |
| 571 | console_verbose(); | 571 | console_verbose(); |
| 572 | oops_in_progress = 1; | 572 | oops_in_progress = 1; |
| 573 | if (strerror) | ||
| 574 | verbose_printk(strerror); | ||
| 575 | } | 573 | } |
| 576 | 574 | ||
| 577 | if (sig != SIGTRAP) { | 575 | if (sig != SIGTRAP) { |
| 576 | if (strerror) | ||
| 577 | verbose_printk(strerror); | ||
| 578 | |||
| 578 | dump_bfin_process(fp); | 579 | dump_bfin_process(fp); |
| 579 | dump_bfin_mem(fp); | 580 | dump_bfin_mem(fp); |
| 580 | show_regs(fp); | 581 | show_regs(fp); |
| @@ -619,7 +620,9 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
| 619 | force_sig_info(sig, &info, current); | 620 | force_sig_info(sig, &info, current); |
| 620 | } | 621 | } |
| 621 | 622 | ||
| 622 | if (ANOMALY_05000461 && trapnr == VEC_HWERR && !access_ok(VERIFY_READ, fp->pc, 8)) | 623 | if ((ANOMALY_05000461 && trapnr == VEC_HWERR && !access_ok(VERIFY_READ, fp->pc, 8)) || |
| 624 | (ANOMALY_05000281 && trapnr == VEC_HWERR) || | ||
| 625 | (ANOMALY_05000189 && (trapnr == VEC_CPLB_I_VL || trapnr == VEC_CPLB_VL))) | ||
| 623 | fp->pc = SAFE_USER_INSTRUCTION; | 626 | fp->pc = SAFE_USER_INSTRUCTION; |
| 624 | 627 | ||
| 625 | traps_done: | 628 | traps_done: |
diff --git a/arch/blackfin/lib/lshrdi3.c b/arch/blackfin/lib/lshrdi3.c index 84b9c559222..e57bf6fbdf3 100644 --- a/arch/blackfin/lib/lshrdi3.c +++ b/arch/blackfin/lib/lshrdi3.c | |||
| @@ -27,21 +27,7 @@ | |||
| 27 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 27 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | #define BITS_PER_UNIT 8 | 30 | #include "gcclib.h" |
| 31 | |||
| 32 | typedef int SItype __attribute__ ((mode(SI))); | ||
| 33 | typedef unsigned int USItype __attribute__ ((mode(SI))); | ||
| 34 | typedef int DItype __attribute__ ((mode(DI))); | ||
| 35 | typedef int word_type __attribute__ ((mode(__word__))); | ||
| 36 | |||
| 37 | struct DIstruct { | ||
| 38 | SItype high, low; | ||
| 39 | }; | ||
| 40 | |||
| 41 | typedef union { | ||
| 42 | struct DIstruct s; | ||
| 43 | DItype ll; | ||
| 44 | } DIunion; | ||
| 45 | 31 | ||
| 46 | #ifdef CONFIG_ARITHMETIC_OPS_L1 | 32 | #ifdef CONFIG_ARITHMETIC_OPS_L1 |
| 47 | DItype __lshrdi3(DItype u, word_type b)__attribute__((l1_text)); | 33 | DItype __lshrdi3(DItype u, word_type b)__attribute__((l1_text)); |
diff --git a/arch/blackfin/mach-bf518/boards/ezbrd.c b/arch/blackfin/mach-bf518/boards/ezbrd.c index d9791106be9..809be268e42 100644 --- a/arch/blackfin/mach-bf518/boards/ezbrd.c +++ b/arch/blackfin/mach-bf518/boards/ezbrd.c | |||
| @@ -534,7 +534,7 @@ static struct platform_device i2c_bfin_twi_device = { | |||
| 534 | #endif | 534 | #endif |
| 535 | 535 | ||
| 536 | static struct i2c_board_info __initdata bfin_i2c_board_info[] = { | 536 | static struct i2c_board_info __initdata bfin_i2c_board_info[] = { |
| 537 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE) | 537 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE) |
| 538 | { | 538 | { |
| 539 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), | 539 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), |
| 540 | }, | 540 | }, |
diff --git a/arch/blackfin/mach-bf518/include/mach/anomaly.h b/arch/blackfin/mach-bf518/include/mach/anomaly.h index 426e064062a..753ed810e1c 100644 --- a/arch/blackfin/mach-bf518/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf518/include/mach/anomaly.h | |||
| @@ -82,6 +82,7 @@ | |||
| 82 | #define ANOMALY_05000179 (0) | 82 | #define ANOMALY_05000179 (0) |
| 83 | #define ANOMALY_05000182 (0) | 83 | #define ANOMALY_05000182 (0) |
| 84 | #define ANOMALY_05000183 (0) | 84 | #define ANOMALY_05000183 (0) |
| 85 | #define ANOMALY_05000189 (0) | ||
| 85 | #define ANOMALY_05000198 (0) | 86 | #define ANOMALY_05000198 (0) |
| 86 | #define ANOMALY_05000202 (0) | 87 | #define ANOMALY_05000202 (0) |
| 87 | #define ANOMALY_05000215 (0) | 88 | #define ANOMALY_05000215 (0) |
| @@ -117,6 +118,7 @@ | |||
| 117 | #define ANOMALY_05000357 (0) | 118 | #define ANOMALY_05000357 (0) |
| 118 | #define ANOMALY_05000362 (1) | 119 | #define ANOMALY_05000362 (1) |
| 119 | #define ANOMALY_05000363 (0) | 120 | #define ANOMALY_05000363 (0) |
| 121 | #define ANOMALY_05000364 (0) | ||
| 120 | #define ANOMALY_05000371 (0) | 122 | #define ANOMALY_05000371 (0) |
| 121 | #define ANOMALY_05000380 (0) | 123 | #define ANOMALY_05000380 (0) |
| 122 | #define ANOMALY_05000386 (0) | 124 | #define ANOMALY_05000386 (0) |
diff --git a/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h index 0fb2ce5d840..dbade93395e 100644 --- a/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf518/include/mach/bfin_serial_5xx.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) | 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) |
| 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) | 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) |
| 55 | 55 | ||
| 56 | #define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin)) | 56 | #define UART_GET_CTS(x) gpio_get_value(x->cts_pin) |
| 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) | 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) |
| 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) | 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) |
| 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) | 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) |
diff --git a/arch/blackfin/mach-bf527/boards/cm_bf527.c b/arch/blackfin/mach-bf527/boards/cm_bf527.c index f4867ce0c61..b09484f538f 100644 --- a/arch/blackfin/mach-bf527/boards/cm_bf527.c +++ b/arch/blackfin/mach-bf527/boards/cm_bf527.c | |||
| @@ -793,7 +793,7 @@ static struct platform_device i2c_bfin_twi_device = { | |||
| 793 | #endif | 793 | #endif |
| 794 | 794 | ||
| 795 | static struct i2c_board_info __initdata bfin_i2c_board_info[] = { | 795 | static struct i2c_board_info __initdata bfin_i2c_board_info[] = { |
| 796 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE) | 796 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE) |
| 797 | { | 797 | { |
| 798 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), | 798 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), |
| 799 | .type = "pcf8574_lcd", | 799 | .type = "pcf8574_lcd", |
diff --git a/arch/blackfin/mach-bf527/boards/ezbrd.c b/arch/blackfin/mach-bf527/boards/ezbrd.c index b2f30f06b73..2ad68cd10ae 100644 --- a/arch/blackfin/mach-bf527/boards/ezbrd.c +++ b/arch/blackfin/mach-bf527/boards/ezbrd.c | |||
| @@ -591,7 +591,7 @@ static struct platform_device i2c_bfin_twi_device = { | |||
| 591 | #endif | 591 | #endif |
| 592 | 592 | ||
| 593 | static struct i2c_board_info __initdata bfin_i2c_board_info[] = { | 593 | static struct i2c_board_info __initdata bfin_i2c_board_info[] = { |
| 594 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE) | 594 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE) |
| 595 | { | 595 | { |
| 596 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), | 596 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), |
| 597 | }, | 597 | }, |
diff --git a/arch/blackfin/mach-bf527/boards/ezkit.c b/arch/blackfin/mach-bf527/boards/ezkit.c index 799a1d1fa89..75e563d3f9d 100644 --- a/arch/blackfin/mach-bf527/boards/ezkit.c +++ b/arch/blackfin/mach-bf527/boards/ezkit.c | |||
| @@ -858,7 +858,7 @@ static struct platform_device i2c_bfin_twi_device = { | |||
| 858 | #endif | 858 | #endif |
| 859 | 859 | ||
| 860 | static struct i2c_board_info __initdata bfin_i2c_board_info[] = { | 860 | static struct i2c_board_info __initdata bfin_i2c_board_info[] = { |
| 861 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE) | 861 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE) |
| 862 | { | 862 | { |
| 863 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), | 863 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), |
| 864 | }, | 864 | }, |
diff --git a/arch/blackfin/mach-bf527/include/mach/anomaly.h b/arch/blackfin/mach-bf527/include/mach/anomaly.h index 0d63f740616..c438ca89d8c 100644 --- a/arch/blackfin/mach-bf527/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf527/include/mach/anomaly.h | |||
| @@ -176,6 +176,8 @@ | |||
| 176 | #define ANOMALY_05000443 (1) | 176 | #define ANOMALY_05000443 (1) |
| 177 | /* The WURESET Bit in the SYSCR Register is not Functional */ | 177 | /* The WURESET Bit in the SYSCR Register is not Functional */ |
| 178 | #define ANOMALY_05000445 (1) | 178 | #define ANOMALY_05000445 (1) |
| 179 | /* USB DMA Short Packet Data Corruption */ | ||
| 180 | #define ANOMALY_05000450 (1) | ||
| 179 | /* BCODE_QUICKBOOT, BCODE_ALLBOOT, and BCODE_FULLBOOT Settings in SYSCR Register Not Functional */ | 181 | /* BCODE_QUICKBOOT, BCODE_ALLBOOT, and BCODE_FULLBOOT Settings in SYSCR Register Not Functional */ |
| 180 | #define ANOMALY_05000451 (1) | 182 | #define ANOMALY_05000451 (1) |
| 181 | /* Incorrect Default Hysteresis Setting for RESET, NMI, and BMODE Signals */ | 183 | /* Incorrect Default Hysteresis Setting for RESET, NMI, and BMODE Signals */ |
| @@ -201,6 +203,7 @@ | |||
| 201 | #define ANOMALY_05000179 (0) | 203 | #define ANOMALY_05000179 (0) |
| 202 | #define ANOMALY_05000182 (0) | 204 | #define ANOMALY_05000182 (0) |
| 203 | #define ANOMALY_05000183 (0) | 205 | #define ANOMALY_05000183 (0) |
| 206 | #define ANOMALY_05000189 (0) | ||
| 204 | #define ANOMALY_05000198 (0) | 207 | #define ANOMALY_05000198 (0) |
| 205 | #define ANOMALY_05000202 (0) | 208 | #define ANOMALY_05000202 (0) |
| 206 | #define ANOMALY_05000215 (0) | 209 | #define ANOMALY_05000215 (0) |
| @@ -238,6 +241,5 @@ | |||
| 238 | #define ANOMALY_05000412 (0) | 241 | #define ANOMALY_05000412 (0) |
| 239 | #define ANOMALY_05000447 (0) | 242 | #define ANOMALY_05000447 (0) |
| 240 | #define ANOMALY_05000448 (0) | 243 | #define ANOMALY_05000448 (0) |
| 241 | #define ANOMALY_05000450 (0) | ||
| 242 | 244 | ||
| 243 | #endif | 245 | #endif |
diff --git a/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h index a625659dd67..ebd6cebc1fb 100644 --- a/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf527/include/mach/bfin_serial_5xx.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) | 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) |
| 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) | 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) |
| 55 | 55 | ||
| 56 | #define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin)) | 56 | #define UART_GET_CTS(x) gpio_get_value(x->cts_pin) |
| 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) | 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) |
| 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) | 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) |
| 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) | 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) |
diff --git a/arch/blackfin/mach-bf533/boards/stamp.c b/arch/blackfin/mach-bf533/boards/stamp.c index a68ade8a3ca..3d743ccaff6 100644 --- a/arch/blackfin/mach-bf533/boards/stamp.c +++ b/arch/blackfin/mach-bf533/boards/stamp.c | |||
| @@ -453,7 +453,7 @@ static struct i2c_board_info __initdata bfin_i2c_board_info[] = { | |||
| 453 | .irq = 39, | 453 | .irq = 39, |
| 454 | }, | 454 | }, |
| 455 | #endif | 455 | #endif |
| 456 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE) | 456 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE) |
| 457 | { | 457 | { |
| 458 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), | 458 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), |
| 459 | }, | 459 | }, |
diff --git a/arch/blackfin/mach-bf533/include/mach/anomaly.h b/arch/blackfin/mach-bf533/include/mach/anomaly.h index 70a0ad69c61..cd83db2fb1a 100644 --- a/arch/blackfin/mach-bf533/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf533/include/mach/anomaly.h | |||
| @@ -335,6 +335,7 @@ | |||
| 335 | #define ANOMALY_05000323 (0) | 335 | #define ANOMALY_05000323 (0) |
| 336 | #define ANOMALY_05000353 (1) | 336 | #define ANOMALY_05000353 (1) |
| 337 | #define ANOMALY_05000362 (1) | 337 | #define ANOMALY_05000362 (1) |
| 338 | #define ANOMALY_05000364 (0) | ||
| 338 | #define ANOMALY_05000380 (0) | 339 | #define ANOMALY_05000380 (0) |
| 339 | #define ANOMALY_05000386 (1) | 340 | #define ANOMALY_05000386 (1) |
| 340 | #define ANOMALY_05000389 (0) | 341 | #define ANOMALY_05000389 (0) |
diff --git a/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h index a3789d7ccf8..4062e24e759 100644 --- a/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf533/include/mach/bfin_serial_5xx.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) | 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) |
| 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) | 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) |
| 55 | 55 | ||
| 56 | #define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin)) | 56 | #define UART_GET_CTS(x) gpio_get_value(x->cts_pin) |
| 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) | 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) |
| 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) | 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) |
| 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) | 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) |
diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c index c1f76dd2c4e..bd656907b8c 100644 --- a/arch/blackfin/mach-bf537/boards/stamp.c +++ b/arch/blackfin/mach-bf537/boards/stamp.c | |||
| @@ -1313,10 +1313,10 @@ static struct i2c_board_info __initdata bfin_i2c_board_info[] = { | |||
| 1313 | #if defined(CONFIG_JOYSTICK_AD7142) || defined(CONFIG_JOYSTICK_AD7142_MODULE) | 1313 | #if defined(CONFIG_JOYSTICK_AD7142) || defined(CONFIG_JOYSTICK_AD7142_MODULE) |
| 1314 | { | 1314 | { |
| 1315 | I2C_BOARD_INFO("ad7142_joystick", 0x2C), | 1315 | I2C_BOARD_INFO("ad7142_joystick", 0x2C), |
| 1316 | .irq = IRQ_PF5, | 1316 | .irq = IRQ_PG5, |
| 1317 | }, | 1317 | }, |
| 1318 | #endif | 1318 | #endif |
| 1319 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE) | 1319 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE) |
| 1320 | { | 1320 | { |
| 1321 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), | 1321 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), |
| 1322 | }, | 1322 | }, |
diff --git a/arch/blackfin/mach-bf537/include/mach/anomaly.h b/arch/blackfin/mach-bf537/include/mach/anomaly.h index 57c128cc3b6..e66aa131f51 100644 --- a/arch/blackfin/mach-bf537/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf537/include/mach/anomaly.h | |||
| @@ -167,6 +167,7 @@ | |||
| 167 | #define ANOMALY_05000179 (0) | 167 | #define ANOMALY_05000179 (0) |
| 168 | #define ANOMALY_05000182 (0) | 168 | #define ANOMALY_05000182 (0) |
| 169 | #define ANOMALY_05000183 (0) | 169 | #define ANOMALY_05000183 (0) |
| 170 | #define ANOMALY_05000189 (0) | ||
| 170 | #define ANOMALY_05000198 (0) | 171 | #define ANOMALY_05000198 (0) |
| 171 | #define ANOMALY_05000202 (0) | 172 | #define ANOMALY_05000202 (0) |
| 172 | #define ANOMALY_05000215 (0) | 173 | #define ANOMALY_05000215 (0) |
| @@ -186,6 +187,7 @@ | |||
| 186 | #define ANOMALY_05000353 (1) | 187 | #define ANOMALY_05000353 (1) |
| 187 | #define ANOMALY_05000362 (1) | 188 | #define ANOMALY_05000362 (1) |
| 188 | #define ANOMALY_05000363 (0) | 189 | #define ANOMALY_05000363 (0) |
| 190 | #define ANOMALY_05000364 (0) | ||
| 189 | #define ANOMALY_05000380 (0) | 191 | #define ANOMALY_05000380 (0) |
| 190 | #define ANOMALY_05000386 (1) | 192 | #define ANOMALY_05000386 (1) |
| 191 | #define ANOMALY_05000389 (0) | 193 | #define ANOMALY_05000389 (0) |
diff --git a/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h index b86662fb9de..e95d54f9af6 100644 --- a/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf537/include/mach/bfin_serial_5xx.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) | 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) |
| 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) | 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) |
| 55 | 55 | ||
| 56 | #define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin)) | 56 | #define UART_GET_CTS(x) gpio_get_value(x->cts_pin) |
| 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) | 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) |
| 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) | 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) |
| 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) | 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) |
diff --git a/arch/blackfin/mach-bf538/include/mach/anomaly.h b/arch/blackfin/mach-bf538/include/mach/anomaly.h index c97acdf85cd..451cf8a82a4 100644 --- a/arch/blackfin/mach-bf538/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf538/include/mach/anomaly.h | |||
| @@ -137,6 +137,7 @@ | |||
| 137 | #define ANOMALY_05000158 (0) | 137 | #define ANOMALY_05000158 (0) |
| 138 | #define ANOMALY_05000171 (0) | 138 | #define ANOMALY_05000171 (0) |
| 139 | #define ANOMALY_05000182 (0) | 139 | #define ANOMALY_05000182 (0) |
| 140 | #define ANOMALY_05000189 (0) | ||
| 140 | #define ANOMALY_05000198 (0) | 141 | #define ANOMALY_05000198 (0) |
| 141 | #define ANOMALY_05000202 (0) | 142 | #define ANOMALY_05000202 (0) |
| 142 | #define ANOMALY_05000215 (0) | 143 | #define ANOMALY_05000215 (0) |
| @@ -160,6 +161,7 @@ | |||
| 160 | #define ANOMALY_05000353 (1) | 161 | #define ANOMALY_05000353 (1) |
| 161 | #define ANOMALY_05000362 (1) | 162 | #define ANOMALY_05000362 (1) |
| 162 | #define ANOMALY_05000363 (0) | 163 | #define ANOMALY_05000363 (0) |
| 164 | #define ANOMALY_05000364 (0) | ||
| 163 | #define ANOMALY_05000380 (0) | 165 | #define ANOMALY_05000380 (0) |
| 164 | #define ANOMALY_05000386 (1) | 166 | #define ANOMALY_05000386 (1) |
| 165 | #define ANOMALY_05000389 (0) | 167 | #define ANOMALY_05000389 (0) |
diff --git a/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h index c536551eb4b..999f239fe1a 100644 --- a/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf538/include/mach/bfin_serial_5xx.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) | 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) |
| 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) | 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) |
| 55 | 55 | ||
| 56 | #define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin)) | 56 | #define UART_GET_CTS(x) gpio_get_value(x->cts_pin) |
| 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) | 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) |
| 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) | 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) |
| 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) | 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) |
diff --git a/arch/blackfin/mach-bf548/boards/ezkit.c b/arch/blackfin/mach-bf548/boards/ezkit.c index 81f5b95cc36..dc0dd9b2bce 100644 --- a/arch/blackfin/mach-bf548/boards/ezkit.c +++ b/arch/blackfin/mach-bf548/boards/ezkit.c | |||
| @@ -864,7 +864,7 @@ static struct i2c_board_info __initdata bfin_i2c_board_info0[] = { | |||
| 864 | 864 | ||
| 865 | #if !defined(CONFIG_BF542) /* The BF542 only has 1 TWI */ | 865 | #if !defined(CONFIG_BF542) /* The BF542 only has 1 TWI */ |
| 866 | static struct i2c_board_info __initdata bfin_i2c_board_info1[] = { | 866 | static struct i2c_board_info __initdata bfin_i2c_board_info1[] = { |
| 867 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE) | 867 | #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE) |
| 868 | { | 868 | { |
| 869 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), | 869 | I2C_BOARD_INFO("pcf8574_lcd", 0x22), |
| 870 | }, | 870 | }, |
diff --git a/arch/blackfin/mach-bf548/include/mach/anomaly.h b/arch/blackfin/mach-bf548/include/mach/anomaly.h index 18a4cd24f67..cd040fe0bc5 100644 --- a/arch/blackfin/mach-bf548/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf548/include/mach/anomaly.h | |||
| @@ -195,6 +195,7 @@ | |||
| 195 | #define ANOMALY_05000179 (0) | 195 | #define ANOMALY_05000179 (0) |
| 196 | #define ANOMALY_05000182 (0) | 196 | #define ANOMALY_05000182 (0) |
| 197 | #define ANOMALY_05000183 (0) | 197 | #define ANOMALY_05000183 (0) |
| 198 | #define ANOMALY_05000189 (0) | ||
| 198 | #define ANOMALY_05000198 (0) | 199 | #define ANOMALY_05000198 (0) |
| 199 | #define ANOMALY_05000202 (0) | 200 | #define ANOMALY_05000202 (0) |
| 200 | #define ANOMALY_05000215 (0) | 201 | #define ANOMALY_05000215 (0) |
| @@ -226,6 +227,7 @@ | |||
| 226 | #define ANOMALY_05000323 (0) | 227 | #define ANOMALY_05000323 (0) |
| 227 | #define ANOMALY_05000362 (1) | 228 | #define ANOMALY_05000362 (1) |
| 228 | #define ANOMALY_05000363 (0) | 229 | #define ANOMALY_05000363 (0) |
| 230 | #define ANOMALY_05000364 (0) | ||
| 229 | #define ANOMALY_05000380 (0) | 231 | #define ANOMALY_05000380 (0) |
| 230 | #define ANOMALY_05000400 (0) | 232 | #define ANOMALY_05000400 (0) |
| 231 | #define ANOMALY_05000412 (0) | 233 | #define ANOMALY_05000412 (0) |
diff --git a/arch/blackfin/mach-bf561/include/mach/anomaly.h b/arch/blackfin/mach-bf561/include/mach/anomaly.h index 94b8e277f09..a5312b2d267 100644 --- a/arch/blackfin/mach-bf561/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf561/include/mach/anomaly.h | |||
| @@ -288,6 +288,7 @@ | |||
| 288 | #define ANOMALY_05000273 (0) | 288 | #define ANOMALY_05000273 (0) |
| 289 | #define ANOMALY_05000311 (0) | 289 | #define ANOMALY_05000311 (0) |
| 290 | #define ANOMALY_05000353 (1) | 290 | #define ANOMALY_05000353 (1) |
| 291 | #define ANOMALY_05000364 (0) | ||
| 291 | #define ANOMALY_05000380 (0) | 292 | #define ANOMALY_05000380 (0) |
| 292 | #define ANOMALY_05000386 (1) | 293 | #define ANOMALY_05000386 (1) |
| 293 | #define ANOMALY_05000389 (0) | 294 | #define ANOMALY_05000389 (0) |
diff --git a/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h b/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h index a1b50878553..fd5e8878b8c 100644 --- a/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h +++ b/arch/blackfin/mach-bf561/include/mach/bfin_serial_5xx.h | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) | 53 | #define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0) |
| 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) | 54 | #define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0) |
| 55 | 55 | ||
| 56 | #define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin)) | 56 | #define UART_GET_CTS(x) gpio_get_value(x->cts_pin) |
| 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) | 57 | #define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1) |
| 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) | 58 | #define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0) |
| 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) | 59 | #define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v) |
diff --git a/arch/blackfin/mach-bf561/include/mach/mem_map.h b/arch/blackfin/mach-bf561/include/mach/mem_map.h index a63e15c86d9..5b96ea549a0 100644 --- a/arch/blackfin/mach-bf561/include/mach/mem_map.h +++ b/arch/blackfin/mach-bf561/include/mach/mem_map.h | |||
| @@ -37,7 +37,6 @@ | |||
| 37 | 37 | ||
| 38 | /* Memory Map for ADSP-BF561 processors */ | 38 | /* Memory Map for ADSP-BF561 processors */ |
| 39 | 39 | ||
| 40 | #ifdef CONFIG_BF561 | ||
| 41 | #define COREA_L1_CODE_START 0xFFA00000 | 40 | #define COREA_L1_CODE_START 0xFFA00000 |
| 42 | #define COREA_L1_DATA_A_START 0xFF800000 | 41 | #define COREA_L1_DATA_A_START 0xFF800000 |
| 43 | #define COREA_L1_DATA_B_START 0xFF900000 | 42 | #define COREA_L1_DATA_B_START 0xFF900000 |
| @@ -74,6 +73,28 @@ | |||
| 74 | #define BFIN_DCACHESIZE (0*1024) | 73 | #define BFIN_DCACHESIZE (0*1024) |
| 75 | #define BFIN_DSUPBANKS 0 | 74 | #define BFIN_DSUPBANKS 0 |
| 76 | #endif /*CONFIG_BFIN_DCACHE*/ | 75 | #endif /*CONFIG_BFIN_DCACHE*/ |
| 76 | |||
| 77 | /* | ||
| 78 | * If we are in SMP mode, then the cache settings of Core B will match | ||
| 79 | * the settings of Core A. If we aren't, then we assume Core B is not | ||
| 80 | * using any cache. This allows the rest of the kernel to work with | ||
| 81 | * the core in either mode as we are only loading user code into it and | ||
| 82 | * it is the user's problem to make sure they aren't doing something | ||
| 83 | * stupid there. | ||
| 84 | * | ||
| 85 | * Note that we treat the L1 code region as a contiguous blob to make | ||
| 86 | * the rest of the kernel simpler. Easier to check one region than a | ||
| 87 | * bunch of small ones. Again, possible misbehavior here is the fault | ||
| 88 | * of the user -- don't try to use memory that doesn't exist. | ||
| 89 | */ | ||
| 90 | #ifdef CONFIG_SMP | ||
| 91 | # define COREB_L1_CODE_LENGTH L1_CODE_LENGTH | ||
| 92 | # define COREB_L1_DATA_A_LENGTH L1_DATA_A_LENGTH | ||
| 93 | # define COREB_L1_DATA_B_LENGTH L1_DATA_B_LENGTH | ||
| 94 | #else | ||
| 95 | # define COREB_L1_CODE_LENGTH 0x14000 | ||
| 96 | # define COREB_L1_DATA_A_LENGTH 0x8000 | ||
| 97 | # define COREB_L1_DATA_B_LENGTH 0x8000 | ||
| 77 | #endif | 98 | #endif |
| 78 | 99 | ||
| 79 | /* Level 2 Memory */ | 100 | /* Level 2 Memory */ |
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S index 5a4e7c7fd92..fb1795d5be2 100644 --- a/arch/blackfin/mach-common/entry.S +++ b/arch/blackfin/mach-common/entry.S | |||
| @@ -218,7 +218,7 @@ ENTRY(_ex_single_step) | |||
| 218 | /* Single stepping only a single instruction, so clear the trace | 218 | /* Single stepping only a single instruction, so clear the trace |
| 219 | * bit here. */ | 219 | * bit here. */ |
| 220 | r7 = syscfg; | 220 | r7 = syscfg; |
| 221 | bitclr (r7, 0); | 221 | bitclr (r7, SYSCFG_SSSTEP_P); |
| 222 | syscfg = R7; | 222 | syscfg = R7; |
| 223 | jump _ex_trap_c; | 223 | jump _ex_trap_c; |
| 224 | 224 | ||
| @@ -251,7 +251,7 @@ ENTRY(_ex_single_step) | |||
| 251 | if !cc jump _bfin_return_from_exception; | 251 | if !cc jump _bfin_return_from_exception; |
| 252 | 252 | ||
| 253 | r7 = syscfg; | 253 | r7 = syscfg; |
| 254 | bitclr (r7, 0); | 254 | bitclr (r7, SYSCFG_SSSTEP_P); /* Turn off single step */ |
| 255 | syscfg = R7; | 255 | syscfg = R7; |
| 256 | 256 | ||
| 257 | /* Fall through to _bfin_return_from_exception. */ | 257 | /* Fall through to _bfin_return_from_exception. */ |
| @@ -342,9 +342,11 @@ ENTRY(_ex_trap_c) | |||
| 342 | r6 = retx; | 342 | r6 = retx; |
| 343 | [p5 + PDA_RETX] = r6; | 343 | [p5 + PDA_RETX] = r6; |
| 344 | #endif | 344 | #endif |
| 345 | /* Save the state of single stepping */ | ||
| 345 | r6 = SYSCFG; | 346 | r6 = SYSCFG; |
| 346 | [p5 + PDA_SYSCFG] = r6; | 347 | [p5 + PDA_SYSCFG] = r6; |
| 347 | BITCLR(r6, 0); | 348 | /* Clear it while we handle the exception in IRQ5 mode */ |
| 349 | BITCLR(r6, SYSCFG_SSSTEP_P); | ||
| 348 | SYSCFG = r6; | 350 | SYSCFG = r6; |
| 349 | 351 | ||
| 350 | /* Disable all interrupts, but make sure level 5 is enabled so | 352 | /* Disable all interrupts, but make sure level 5 is enabled so |
| @@ -367,7 +369,7 @@ ENDPROC(_ex_trap_c) | |||
| 367 | * exception. This is a unrecoverable event, so crash. | 369 | * exception. This is a unrecoverable event, so crash. |
| 368 | * Note: this cannot be ENTRY() as we jump here with "if cc jump" ... | 370 | * Note: this cannot be ENTRY() as we jump here with "if cc jump" ... |
| 369 | */ | 371 | */ |
| 370 | _double_fault: | 372 | ENTRY(_double_fault) |
| 371 | /* Turn caches & protection off, to ensure we don't get any more | 373 | /* Turn caches & protection off, to ensure we don't get any more |
| 372 | * double exceptions | 374 | * double exceptions |
| 373 | */ | 375 | */ |
| @@ -872,7 +874,7 @@ ENTRY(_ret_from_exception) | |||
| 872 | raise 15; /* raise evt15 to do signal or reschedule */ | 874 | raise 15; /* raise evt15 to do signal or reschedule */ |
| 873 | 4: | 875 | 4: |
| 874 | r0 = syscfg; | 876 | r0 = syscfg; |
| 875 | bitclr(r0, 0); | 877 | bitclr(r0, SYSCFG_SSSTEP_P); /* Turn off single step */ |
| 876 | syscfg = r0; | 878 | syscfg = r0; |
| 877 | 5: | 879 | 5: |
| 878 | rts; | 880 | rts; |
diff --git a/arch/blackfin/mach-common/smp.c b/arch/blackfin/mach-common/smp.c index 61840059dfa..349ee3f5466 100644 --- a/arch/blackfin/mach-common/smp.c +++ b/arch/blackfin/mach-common/smp.c | |||
| @@ -211,6 +211,8 @@ int smp_call_function(void (*func)(void *info), void *info, int wait) | |||
| 211 | return 0; | 211 | return 0; |
| 212 | 212 | ||
| 213 | msg = kmalloc(sizeof(*msg), GFP_ATOMIC); | 213 | msg = kmalloc(sizeof(*msg), GFP_ATOMIC); |
| 214 | if (!msg) | ||
| 215 | return -ENOMEM; | ||
| 214 | INIT_LIST_HEAD(&msg->list); | 216 | INIT_LIST_HEAD(&msg->list); |
| 215 | msg->call_struct.func = func; | 217 | msg->call_struct.func = func; |
| 216 | msg->call_struct.info = info; | 218 | msg->call_struct.info = info; |
| @@ -252,6 +254,8 @@ int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, | |||
| 252 | cpu_set(cpu, callmap); | 254 | cpu_set(cpu, callmap); |
| 253 | 255 | ||
| 254 | msg = kmalloc(sizeof(*msg), GFP_ATOMIC); | 256 | msg = kmalloc(sizeof(*msg), GFP_ATOMIC); |
| 257 | if (!msg) | ||
| 258 | return -ENOMEM; | ||
| 255 | INIT_LIST_HEAD(&msg->list); | 259 | INIT_LIST_HEAD(&msg->list); |
| 256 | msg->call_struct.func = func; | 260 | msg->call_struct.func = func; |
| 257 | msg->call_struct.info = info; | 261 | msg->call_struct.info = info; |
| @@ -287,6 +291,8 @@ void smp_send_reschedule(int cpu) | |||
| 287 | return; | 291 | return; |
| 288 | 292 | ||
| 289 | msg = kmalloc(sizeof(*msg), GFP_ATOMIC); | 293 | msg = kmalloc(sizeof(*msg), GFP_ATOMIC); |
| 294 | if (!msg) | ||
| 295 | return; | ||
| 290 | memset(msg, 0, sizeof(msg)); | 296 | memset(msg, 0, sizeof(msg)); |
| 291 | INIT_LIST_HEAD(&msg->list); | 297 | INIT_LIST_HEAD(&msg->list); |
| 292 | msg->type = BFIN_IPI_RESCHEDULE; | 298 | msg->type = BFIN_IPI_RESCHEDULE; |
| @@ -314,6 +320,8 @@ void smp_send_stop(void) | |||
| 314 | return; | 320 | return; |
| 315 | 321 | ||
| 316 | msg = kmalloc(sizeof(*msg), GFP_ATOMIC); | 322 | msg = kmalloc(sizeof(*msg), GFP_ATOMIC); |
| 323 | if (!msg) | ||
| 324 | return; | ||
| 317 | memset(msg, 0, sizeof(msg)); | 325 | memset(msg, 0, sizeof(msg)); |
| 318 | INIT_LIST_HEAD(&msg->list); | 326 | INIT_LIST_HEAD(&msg->list); |
| 319 | msg->type = BFIN_IPI_CPU_STOP; | 327 | msg->type = BFIN_IPI_CPU_STOP; |
| @@ -450,7 +458,7 @@ void __init smp_cpus_done(unsigned int max_cpus) | |||
| 450 | unsigned int cpu; | 458 | unsigned int cpu; |
| 451 | 459 | ||
| 452 | for_each_online_cpu(cpu) | 460 | for_each_online_cpu(cpu) |
| 453 | bogosum += per_cpu(cpu_data, cpu).loops_per_jiffy; | 461 | bogosum += loops_per_jiffy; |
| 454 | 462 | ||
| 455 | printk(KERN_INFO "SMP: Total of %d processors activated " | 463 | printk(KERN_INFO "SMP: Total of %d processors activated " |
| 456 | "(%lu.%02lu BogoMIPS).\n", | 464 | "(%lu.%02lu BogoMIPS).\n", |
diff --git a/arch/ia64/include/asm/fpu.h b/arch/ia64/include/asm/fpu.h index 0c26157cffa..b6395ad1500 100644 --- a/arch/ia64/include/asm/fpu.h +++ b/arch/ia64/include/asm/fpu.h | |||
| @@ -6,6 +6,8 @@ | |||
| 6 | * David Mosberger-Tang <davidm@hpl.hp.com> | 6 | * David Mosberger-Tang <davidm@hpl.hp.com> |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | #include <linux/types.h> | ||
| 10 | |||
| 9 | /* floating point status register: */ | 11 | /* floating point status register: */ |
| 10 | #define FPSR_TRAP_VD (1 << 0) /* invalid op trap disabled */ | 12 | #define FPSR_TRAP_VD (1 << 0) /* invalid op trap disabled */ |
| 11 | #define FPSR_TRAP_DD (1 << 1) /* denormal trap disabled */ | 13 | #define FPSR_TRAP_DD (1 << 1) /* denormal trap disabled */ |
diff --git a/arch/ia64/include/asm/xen/hypervisor.h b/arch/ia64/include/asm/xen/hypervisor.h index e425227a418..88afb54501e 100644 --- a/arch/ia64/include/asm/xen/hypervisor.h +++ b/arch/ia64/include/asm/xen/hypervisor.h | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | #ifndef _ASM_IA64_XEN_HYPERVISOR_H | 33 | #ifndef _ASM_IA64_XEN_HYPERVISOR_H |
| 34 | #define _ASM_IA64_XEN_HYPERVISOR_H | 34 | #define _ASM_IA64_XEN_HYPERVISOR_H |
| 35 | 35 | ||
| 36 | #include <linux/err.h> | ||
| 36 | #include <xen/interface/xen.h> | 37 | #include <xen/interface/xen.h> |
| 37 | #include <xen/interface/version.h> /* to compile feature.c */ | 38 | #include <xen/interface/version.h> /* to compile feature.c */ |
| 38 | #include <xen/features.h> /* to comiple xen-netfront.c */ | 39 | #include <xen/features.h> /* to comiple xen-netfront.c */ |
diff --git a/arch/ia64/kernel/dma-mapping.c b/arch/ia64/kernel/dma-mapping.c index 086a2aeb040..39a3cd0a417 100644 --- a/arch/ia64/kernel/dma-mapping.c +++ b/arch/ia64/kernel/dma-mapping.c | |||
| @@ -6,6 +6,14 @@ int iommu_detected __read_mostly; | |||
| 6 | struct dma_map_ops *dma_ops; | 6 | struct dma_map_ops *dma_ops; |
| 7 | EXPORT_SYMBOL(dma_ops); | 7 | EXPORT_SYMBOL(dma_ops); |
| 8 | 8 | ||
| 9 | #define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16) | ||
| 10 | |||
| 11 | static int __init dma_init(void) | ||
| 12 | { | ||
| 13 | dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES); | ||
| 14 | } | ||
| 15 | fs_initcall(dma_init); | ||
| 16 | |||
| 9 | struct dma_map_ops *dma_get_ops(struct device *dev) | 17 | struct dma_map_ops *dma_get_ops(struct device *dev) |
| 10 | { | 18 | { |
| 11 | return dma_ops; | 19 | return dma_ops; |
diff --git a/arch/mn10300/kernel/vmlinux.lds.S b/arch/mn10300/kernel/vmlinux.lds.S index c96ba3da95a..f4aa0793465 100644 --- a/arch/mn10300/kernel/vmlinux.lds.S +++ b/arch/mn10300/kernel/vmlinux.lds.S | |||
| @@ -107,7 +107,7 @@ SECTIONS | |||
| 107 | __init_end = .; | 107 | __init_end = .; |
| 108 | /* freed after init ends here */ | 108 | /* freed after init ends here */ |
| 109 | 109 | ||
| 110 | BSS(4) | 110 | BSS_SECTION(0, PAGE_SIZE, 4) |
| 111 | 111 | ||
| 112 | _end = . ; | 112 | _end = . ; |
| 113 | 113 | ||
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 9fa2c7dcd05..ef149880c14 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c | |||
| @@ -736,15 +736,16 @@ void user_disable_single_step(struct task_struct *task) | |||
| 736 | { | 736 | { |
| 737 | struct pt_regs *regs = task->thread.regs; | 737 | struct pt_regs *regs = task->thread.regs; |
| 738 | 738 | ||
| 739 | |||
| 740 | #if defined(CONFIG_BOOKE) | ||
| 741 | /* If DAC then do not single step, skip */ | ||
| 742 | if (task->thread.dabr) | ||
| 743 | return; | ||
| 744 | #endif | ||
| 745 | |||
| 746 | if (regs != NULL) { | 739 | if (regs != NULL) { |
| 747 | #if defined(CONFIG_40x) || defined(CONFIG_BOOKE) | 740 | #if defined(CONFIG_BOOKE) |
| 741 | /* If DAC don't clear DBCRO_IDM or MSR_DE */ | ||
| 742 | if (task->thread.dabr) | ||
| 743 | task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT); | ||
| 744 | else { | ||
| 745 | task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM); | ||
| 746 | regs->msr &= ~MSR_DE; | ||
| 747 | } | ||
| 748 | #elif defined(CONFIG_40x) | ||
| 748 | task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM); | 749 | task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM); |
| 749 | regs->msr &= ~MSR_DE; | 750 | regs->msr &= ~MSR_DE; |
| 750 | #else | 751 | #else |
diff --git a/arch/powerpc/kernel/vector.S b/arch/powerpc/kernel/vector.S index ef36cbbc588..ea4d64644d0 100644 --- a/arch/powerpc/kernel/vector.S +++ b/arch/powerpc/kernel/vector.S | |||
| @@ -80,10 +80,10 @@ _GLOBAL(load_up_altivec) | |||
| 80 | mtvscr vr0 | 80 | mtvscr vr0 |
| 81 | REST_32VRS(0,r4,r5) | 81 | REST_32VRS(0,r4,r5) |
| 82 | #ifndef CONFIG_SMP | 82 | #ifndef CONFIG_SMP |
| 83 | /* Update last_task_used_math to 'current' */ | 83 | /* Update last_task_used_altivec to 'current' */ |
| 84 | subi r4,r5,THREAD /* Back to 'current' */ | 84 | subi r4,r5,THREAD /* Back to 'current' */ |
| 85 | fromreal(r4) | 85 | fromreal(r4) |
| 86 | PPC_STL r4,ADDROFF(last_task_used_math)(r3) | 86 | PPC_STL r4,ADDROFF(last_task_used_altivec)(r3) |
| 87 | #endif /* CONFIG_SMP */ | 87 | #endif /* CONFIG_SMP */ |
| 88 | /* restore registers and return */ | 88 | /* restore registers and return */ |
| 89 | blr | 89 | blr |
| @@ -172,7 +172,7 @@ _GLOBAL(load_up_vsx) | |||
| 172 | oris r12,r12,MSR_VSX@h | 172 | oris r12,r12,MSR_VSX@h |
| 173 | std r12,_MSR(r1) | 173 | std r12,_MSR(r1) |
| 174 | #ifndef CONFIG_SMP | 174 | #ifndef CONFIG_SMP |
| 175 | /* Update last_task_used_math to 'current' */ | 175 | /* Update last_task_used_vsx to 'current' */ |
| 176 | ld r4,PACACURRENT(r13) | 176 | ld r4,PACACURRENT(r13) |
| 177 | std r4,0(r3) | 177 | std r4,0(r3) |
| 178 | #endif /* CONFIG_SMP */ | 178 | #endif /* CONFIG_SMP */ |
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h index daf866ed061..330ee807f89 100644 --- a/arch/x86/include/asm/io_apic.h +++ b/arch/x86/include/asm/io_apic.h | |||
| @@ -161,6 +161,7 @@ extern int io_apic_set_pci_routing(struct device *dev, int irq, | |||
| 161 | struct io_apic_irq_attr *irq_attr); | 161 | struct io_apic_irq_attr *irq_attr); |
| 162 | extern int (*ioapic_renumber_irq)(int ioapic, int irq); | 162 | extern int (*ioapic_renumber_irq)(int ioapic, int irq); |
| 163 | extern void ioapic_init_mappings(void); | 163 | extern void ioapic_init_mappings(void); |
| 164 | extern void ioapic_insert_resources(void); | ||
| 164 | 165 | ||
| 165 | extern struct IO_APIC_route_entry **alloc_ioapic_entries(void); | 166 | extern struct IO_APIC_route_entry **alloc_ioapic_entries(void); |
| 166 | extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries); | 167 | extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries); |
| @@ -180,6 +181,7 @@ extern void ioapic_write_entry(int apic, int pin, | |||
| 180 | #define io_apic_assign_pci_irqs 0 | 181 | #define io_apic_assign_pci_irqs 0 |
| 181 | static const int timer_through_8259 = 0; | 182 | static const int timer_through_8259 = 0; |
| 182 | static inline void ioapic_init_mappings(void) { } | 183 | static inline void ioapic_init_mappings(void) { } |
| 184 | static inline void ioapic_insert_resources(void) { } | ||
| 183 | 185 | ||
| 184 | static inline void probe_nr_irqs_gsi(void) { } | 186 | static inline void probe_nr_irqs_gsi(void) { } |
| 185 | #endif | 187 | #endif |
diff --git a/arch/x86/include/asm/lguest_hcall.h b/arch/x86/include/asm/lguest_hcall.h index d31c4a68407..33600a66755 100644 --- a/arch/x86/include/asm/lguest_hcall.h +++ b/arch/x86/include/asm/lguest_hcall.h | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | #include <asm/hw_irq.h> | 30 | #include <asm/hw_irq.h> |
| 31 | #include <asm/kvm_para.h> | 31 | #include <asm/kvm_para.h> |
| 32 | 32 | ||
| 33 | /*G:031 But first, how does our Guest contact the Host to ask for privileged | 33 | /*G:030 But first, how does our Guest contact the Host to ask for privileged |
| 34 | * operations? There are two ways: the direct way is to make a "hypercall", | 34 | * operations? There are two ways: the direct way is to make a "hypercall", |
| 35 | * to make requests of the Host Itself. | 35 | * to make requests of the Host Itself. |
| 36 | * | 36 | * |
diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c index 69328ac8de9..8952a589028 100644 --- a/arch/x86/kernel/apic/es7000_32.c +++ b/arch/x86/kernel/apic/es7000_32.c | |||
| @@ -652,7 +652,8 @@ static int es7000_mps_oem_check_cluster(struct mpc_table *mpc, char *oem, | |||
| 652 | return ret && es7000_apic_is_cluster(); | 652 | return ret && es7000_apic_is_cluster(); |
| 653 | } | 653 | } |
| 654 | 654 | ||
| 655 | struct apic apic_es7000_cluster = { | 655 | /* We've been warned by a false positive warning.Use __refdata to keep calm. */ |
| 656 | struct apic __refdata apic_es7000_cluster = { | ||
| 656 | 657 | ||
| 657 | .name = "es7000", | 658 | .name = "es7000", |
| 658 | .probe = probe_es7000, | 659 | .probe = probe_es7000, |
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 90b5e6efa93..2284a4812b6 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
| @@ -4181,28 +4181,20 @@ fake_ioapic_page: | |||
| 4181 | } | 4181 | } |
| 4182 | } | 4182 | } |
| 4183 | 4183 | ||
| 4184 | static int __init ioapic_insert_resources(void) | 4184 | void __init ioapic_insert_resources(void) |
| 4185 | { | 4185 | { |
| 4186 | int i; | 4186 | int i; |
| 4187 | struct resource *r = ioapic_resources; | 4187 | struct resource *r = ioapic_resources; |
| 4188 | 4188 | ||
| 4189 | if (!r) { | 4189 | if (!r) { |
| 4190 | if (nr_ioapics > 0) { | 4190 | if (nr_ioapics > 0) |
| 4191 | printk(KERN_ERR | 4191 | printk(KERN_ERR |
| 4192 | "IO APIC resources couldn't be allocated.\n"); | 4192 | "IO APIC resources couldn't be allocated.\n"); |
| 4193 | return -1; | 4193 | return; |
| 4194 | } | ||
| 4195 | return 0; | ||
| 4196 | } | 4194 | } |
| 4197 | 4195 | ||
| 4198 | for (i = 0; i < nr_ioapics; i++) { | 4196 | for (i = 0; i < nr_ioapics; i++) { |
| 4199 | insert_resource(&iomem_resource, r); | 4197 | insert_resource(&iomem_resource, r); |
| 4200 | r++; | 4198 | r++; |
| 4201 | } | 4199 | } |
| 4202 | |||
| 4203 | return 0; | ||
| 4204 | } | 4200 | } |
| 4205 | |||
| 4206 | /* Insert the IO APIC resources after PCI initialization has occured to handle | ||
| 4207 | * IO APICS that are mapped in on a BAR in PCI space. */ | ||
| 4208 | late_initcall(ioapic_insert_resources); | ||
diff --git a/arch/x86/kernel/apic/numaq_32.c b/arch/x86/kernel/apic/numaq_32.c index 533e59c6fc8..ca96e68f0d2 100644 --- a/arch/x86/kernel/apic/numaq_32.c +++ b/arch/x86/kernel/apic/numaq_32.c | |||
| @@ -493,7 +493,8 @@ static void numaq_setup_portio_remap(void) | |||
| 493 | (u_long) xquad_portio, (u_long) num_quads*XQUAD_PORTIO_QUAD); | 493 | (u_long) xquad_portio, (u_long) num_quads*XQUAD_PORTIO_QUAD); |
| 494 | } | 494 | } |
| 495 | 495 | ||
| 496 | struct apic apic_numaq = { | 496 | /* Use __refdata to keep false positive warning calm. */ |
| 497 | struct apic __refdata apic_numaq = { | ||
| 497 | 498 | ||
| 498 | .name = "NUMAQ", | 499 | .name = "NUMAQ", |
| 499 | .probe = probe_numaq, | 500 | .probe = probe_numaq, |
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index 4f9c55f3a7c..03801f2f761 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c | |||
| @@ -60,7 +60,7 @@ static inline u64 scale_delta(u64 delta, u32 mul_frac, int shift) | |||
| 60 | "adc %5,%%edx ; " | 60 | "adc %5,%%edx ; " |
| 61 | : "=A" (product), "=r" (tmp1), "=r" (tmp2) | 61 | : "=A" (product), "=r" (tmp1), "=r" (tmp2) |
| 62 | : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) ); | 62 | : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) ); |
| 63 | #elif __x86_64__ | 63 | #elif defined(__x86_64__) |
| 64 | __asm__ ( | 64 | __asm__ ( |
| 65 | "mul %%rdx ; shrd $32,%%rdx,%%rax" | 65 | "mul %%rdx ; shrd $32,%%rdx,%%rax" |
| 66 | : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) ); | 66 | : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) ); |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index 7bc65f0f62c..f2bf1f73d46 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
| @@ -379,6 +379,11 @@ static void lguest_cpuid(unsigned int *ax, unsigned int *bx, | |||
| 379 | 379 | ||
| 380 | native_cpuid(ax, bx, cx, dx); | 380 | native_cpuid(ax, bx, cx, dx); |
| 381 | switch (function) { | 381 | switch (function) { |
| 382 | case 0: /* ID and highest CPUID. Futureproof a little by sticking to | ||
| 383 | * older ones. */ | ||
| 384 | if (*ax > 5) | ||
| 385 | *ax = 5; | ||
| 386 | break; | ||
| 382 | case 1: /* Basic feature request. */ | 387 | case 1: /* Basic feature request. */ |
| 383 | /* We only allow kernel to see SSE3, CMPXCHG16B and SSSE3 */ | 388 | /* We only allow kernel to see SSE3, CMPXCHG16B and SSSE3 */ |
| 384 | *cx &= 0x00002201; | 389 | *cx &= 0x00002201; |
| @@ -1079,7 +1084,7 @@ static unsigned lguest_patch(u8 type, u16 clobber, void *ibuf, | |||
| 1079 | return insn_len; | 1084 | return insn_len; |
| 1080 | } | 1085 | } |
| 1081 | 1086 | ||
| 1082 | /*G:030 Once we get to lguest_init(), we know we're a Guest. The various | 1087 | /*G:029 Once we get to lguest_init(), we know we're a Guest. The various |
| 1083 | * pv_ops structures in the kernel provide points for (almost) every routine we | 1088 | * pv_ops structures in the kernel provide points for (almost) every routine we |
| 1084 | * have to override to avoid privileged instructions. */ | 1089 | * have to override to avoid privileged instructions. */ |
| 1085 | __init void lguest_init(void) | 1090 | __init void lguest_init(void) |
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 85307cc6e45..bfae139182f 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
| @@ -697,7 +697,7 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code, | |||
| 697 | if (!printk_ratelimit()) | 697 | if (!printk_ratelimit()) |
| 698 | return; | 698 | return; |
| 699 | 699 | ||
| 700 | printk(KERN_CONT "%s%s[%d]: segfault at %lx ip %p sp %p error %lx", | 700 | printk("%s%s[%d]: segfault at %lx ip %p sp %p error %lx", |
| 701 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, | 701 | task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, |
| 702 | tsk->comm, task_pid_nr(tsk), address, | 702 | tsk->comm, task_pid_nr(tsk), address, |
| 703 | (void *)regs->ip, (void *)regs->sp, error_code); | 703 | (void *)regs->ip, (void *)regs->sp, error_code); |
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c index 0fb56db16d1..52e62e57fed 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | #include <asm/pat.h> | 35 | #include <asm/pat.h> |
| 36 | #include <asm/e820.h> | 36 | #include <asm/e820.h> |
| 37 | #include <asm/pci_x86.h> | 37 | #include <asm/pci_x86.h> |
| 38 | #include <asm/io_apic.h> | ||
| 38 | 39 | ||
| 39 | 40 | ||
| 40 | static int | 41 | static int |
| @@ -227,6 +228,12 @@ void __init pcibios_resource_survey(void) | |||
| 227 | pcibios_allocate_resources(1); | 228 | pcibios_allocate_resources(1); |
| 228 | 229 | ||
| 229 | e820_reserve_resources_late(); | 230 | e820_reserve_resources_late(); |
| 231 | /* | ||
| 232 | * Insert the IO APIC resources after PCI initialization has | ||
| 233 | * occured to handle IO APICS that are mapped in on a BAR in | ||
| 234 | * PCI space, but before trying to assign unassigned pci res. | ||
| 235 | */ | ||
| 236 | ioapic_insert_resources(); | ||
| 230 | } | 237 | } |
| 231 | 238 | ||
| 232 | /** | 239 | /** |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 15a23031833..336eb1ed73c 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -513,6 +513,7 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 513 | { PCI_VDEVICE(INTEL, 0x502a), board_ahci }, /* Tolapai */ | 513 | { PCI_VDEVICE(INTEL, 0x502a), board_ahci }, /* Tolapai */ |
| 514 | { PCI_VDEVICE(INTEL, 0x502b), board_ahci }, /* Tolapai */ | 514 | { PCI_VDEVICE(INTEL, 0x502b), board_ahci }, /* Tolapai */ |
| 515 | { PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */ | 515 | { PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */ |
| 516 | { PCI_VDEVICE(INTEL, 0x3a22), board_ahci }, /* ICH10 */ | ||
| 516 | { PCI_VDEVICE(INTEL, 0x3a25), board_ahci }, /* ICH10 */ | 517 | { PCI_VDEVICE(INTEL, 0x3a25), board_ahci }, /* ICH10 */ |
| 517 | { PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */ | 518 | { PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */ |
| 518 | { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */ | 519 | { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */ |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 045a486a09e..2c6aedaef71 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -3392,17 +3392,27 @@ int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel) | |||
| 3392 | 3392 | ||
| 3393 | static int ata_dev_set_mode(struct ata_device *dev) | 3393 | static int ata_dev_set_mode(struct ata_device *dev) |
| 3394 | { | 3394 | { |
| 3395 | struct ata_port *ap = dev->link->ap; | ||
| 3395 | struct ata_eh_context *ehc = &dev->link->eh_context; | 3396 | struct ata_eh_context *ehc = &dev->link->eh_context; |
| 3397 | const bool nosetxfer = dev->horkage & ATA_HORKAGE_NOSETXFER; | ||
| 3396 | const char *dev_err_whine = ""; | 3398 | const char *dev_err_whine = ""; |
| 3397 | int ign_dev_err = 0; | 3399 | int ign_dev_err = 0; |
| 3398 | unsigned int err_mask; | 3400 | unsigned int err_mask = 0; |
| 3399 | int rc; | 3401 | int rc; |
| 3400 | 3402 | ||
| 3401 | dev->flags &= ~ATA_DFLAG_PIO; | 3403 | dev->flags &= ~ATA_DFLAG_PIO; |
| 3402 | if (dev->xfer_shift == ATA_SHIFT_PIO) | 3404 | if (dev->xfer_shift == ATA_SHIFT_PIO) |
| 3403 | dev->flags |= ATA_DFLAG_PIO; | 3405 | dev->flags |= ATA_DFLAG_PIO; |
| 3404 | 3406 | ||
| 3405 | err_mask = ata_dev_set_xfermode(dev); | 3407 | if (nosetxfer && ap->flags & ATA_FLAG_SATA && ata_id_is_sata(dev->id)) |
| 3408 | dev_err_whine = " (SET_XFERMODE skipped)"; | ||
| 3409 | else { | ||
| 3410 | if (nosetxfer) | ||
| 3411 | ata_dev_printk(dev, KERN_WARNING, | ||
| 3412 | "NOSETXFER but PATA detected - can't " | ||
| 3413 | "skip SETXFER, might malfunction\n"); | ||
| 3414 | err_mask = ata_dev_set_xfermode(dev); | ||
| 3415 | } | ||
| 3406 | 3416 | ||
| 3407 | if (err_mask & ~AC_ERR_DEV) | 3417 | if (err_mask & ~AC_ERR_DEV) |
| 3408 | goto fail; | 3418 | goto fail; |
| @@ -4297,6 +4307,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | |||
| 4297 | /* Devices which aren't very happy with higher link speeds */ | 4307 | /* Devices which aren't very happy with higher link speeds */ |
| 4298 | { "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, }, | 4308 | { "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, }, |
| 4299 | 4309 | ||
| 4310 | /* | ||
| 4311 | * Devices which choke on SETXFER. Applies only if both the | ||
| 4312 | * device and controller are SATA. | ||
| 4313 | */ | ||
| 4314 | { "PIONEER DVD-RW DVRTD08", "1.00", ATA_HORKAGE_NOSETXFER }, | ||
| 4315 | |||
| 4300 | /* End Marker */ | 4316 | /* End Marker */ |
| 4301 | { } | 4317 | { } |
| 4302 | }; | 4318 | }; |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index fa22f94ca41..1a07c061f64 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
| @@ -2517,6 +2517,10 @@ int ata_eh_reset(struct ata_link *link, int classify, | |||
| 2517 | 2517 | ||
| 2518 | ata_eh_about_to_do(link, NULL, ATA_EH_RESET); | 2518 | ata_eh_about_to_do(link, NULL, ATA_EH_RESET); |
| 2519 | rc = ata_do_reset(link, reset, classes, deadline, true); | 2519 | rc = ata_do_reset(link, reset, classes, deadline, true); |
| 2520 | if (rc) { | ||
| 2521 | failed_link = link; | ||
| 2522 | goto fail; | ||
| 2523 | } | ||
| 2520 | } | 2524 | } |
| 2521 | } else { | 2525 | } else { |
| 2522 | if (verbose) | 2526 | if (verbose) |
diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c index 4b27617be26..8561a9f195c 100644 --- a/drivers/ata/pata_at91.c +++ b/drivers/ata/pata_at91.c | |||
| @@ -312,11 +312,12 @@ err_ide_ioremap: | |||
| 312 | static int __devexit pata_at91_remove(struct platform_device *pdev) | 312 | static int __devexit pata_at91_remove(struct platform_device *pdev) |
| 313 | { | 313 | { |
| 314 | struct ata_host *host = dev_get_drvdata(&pdev->dev); | 314 | struct ata_host *host = dev_get_drvdata(&pdev->dev); |
| 315 | struct at91_ide_info *info = host->private_data; | 315 | struct at91_ide_info *info; |
| 316 | struct device *dev = &pdev->dev; | 316 | struct device *dev = &pdev->dev; |
| 317 | 317 | ||
| 318 | if (!host) | 318 | if (!host) |
| 319 | return 0; | 319 | return 0; |
| 320 | info = host->private_data; | ||
| 320 | 321 | ||
| 321 | ata_host_detach(host); | 322 | ata_host_detach(host); |
| 322 | 323 | ||
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 43db3ea15b5..fbeefb68a31 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
| @@ -213,7 +213,7 @@ static int virtblk_ioctl(struct block_device *bdev, fmode_t mode, | |||
| 213 | * Only allow the generic SCSI ioctls if the host can support it. | 213 | * Only allow the generic SCSI ioctls if the host can support it. |
| 214 | */ | 214 | */ |
| 215 | if (!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_SCSI)) | 215 | if (!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_SCSI)) |
| 216 | return -ENOIOCTLCMD; | 216 | return -ENOTTY; |
| 217 | 217 | ||
| 218 | return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp); | 218 | return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp); |
| 219 | } | 219 | } |
| @@ -360,6 +360,9 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) | |||
| 360 | blk_queue_max_phys_segments(vblk->disk->queue, vblk->sg_elems-2); | 360 | blk_queue_max_phys_segments(vblk->disk->queue, vblk->sg_elems-2); |
| 361 | blk_queue_max_hw_segments(vblk->disk->queue, vblk->sg_elems-2); | 361 | blk_queue_max_hw_segments(vblk->disk->queue, vblk->sg_elems-2); |
| 362 | 362 | ||
| 363 | /* No need to bounce any requests */ | ||
| 364 | blk_queue_bounce_limit(vblk->disk->queue, BLK_BOUNCE_ANY); | ||
| 365 | |||
| 363 | /* No real sector limit. */ | 366 | /* No real sector limit. */ |
| 364 | blk_queue_max_sectors(vblk->disk->queue, -1U); | 367 | blk_queue_max_sectors(vblk->disk->queue, -1U); |
| 365 | 368 | ||
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c index 94e7e3c8c05..d97779ef72c 100644 --- a/drivers/char/hvc_console.c +++ b/drivers/char/hvc_console.c | |||
| @@ -552,7 +552,7 @@ static int hvc_chars_in_buffer(struct tty_struct *tty) | |||
| 552 | struct hvc_struct *hp = tty->driver_data; | 552 | struct hvc_struct *hp = tty->driver_data; |
| 553 | 553 | ||
| 554 | if (!hp) | 554 | if (!hp) |
| 555 | return -1; | 555 | return 0; |
| 556 | return hp->n_outbuf; | 556 | return hp->n_outbuf; |
| 557 | } | 557 | } |
| 558 | 558 | ||
diff --git a/drivers/char/n_tty.c b/drivers/char/n_tty.c index 94a5d5020ab..ff47907ff1b 100644 --- a/drivers/char/n_tty.c +++ b/drivers/char/n_tty.c | |||
| @@ -1331,9 +1331,6 @@ handle_newline: | |||
| 1331 | 1331 | ||
| 1332 | static void n_tty_write_wakeup(struct tty_struct *tty) | 1332 | static void n_tty_write_wakeup(struct tty_struct *tty) |
| 1333 | { | 1333 | { |
| 1334 | /* Write out any echoed characters that are still pending */ | ||
| 1335 | process_echoes(tty); | ||
| 1336 | |||
| 1337 | if (tty->fasync && test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) | 1334 | if (tty->fasync && test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) |
| 1338 | kill_fasync(&tty->fasync, SIGIO, POLL_OUT); | 1335 | kill_fasync(&tty->fasync, SIGIO, POLL_OUT); |
| 1339 | } | 1336 | } |
diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c index 574f1c79b6e..ec58d8c387f 100644 --- a/drivers/char/nozomi.c +++ b/drivers/char/nozomi.c | |||
| @@ -828,7 +828,7 @@ static int receive_data(enum port_type index, struct nozomi *dc) | |||
| 828 | struct port *port = &dc->port[index]; | 828 | struct port *port = &dc->port[index]; |
| 829 | void __iomem *addr = port->dl_addr[port->toggle_dl]; | 829 | void __iomem *addr = port->dl_addr[port->toggle_dl]; |
| 830 | struct tty_struct *tty = tty_port_tty_get(&port->port); | 830 | struct tty_struct *tty = tty_port_tty_get(&port->port); |
| 831 | int i; | 831 | int i, ret; |
| 832 | 832 | ||
| 833 | if (unlikely(!tty)) { | 833 | if (unlikely(!tty)) { |
| 834 | DBG1("tty not open for port: %d?", index); | 834 | DBG1("tty not open for port: %d?", index); |
| @@ -844,12 +844,14 @@ static int receive_data(enum port_type index, struct nozomi *dc) | |||
| 844 | 844 | ||
| 845 | /* disable interrupt in downlink... */ | 845 | /* disable interrupt in downlink... */ |
| 846 | disable_transmit_dl(index, dc); | 846 | disable_transmit_dl(index, dc); |
| 847 | return 0; | 847 | ret = 0; |
| 848 | goto put; | ||
| 848 | } | 849 | } |
| 849 | 850 | ||
| 850 | if (unlikely(size == 0)) { | 851 | if (unlikely(size == 0)) { |
| 851 | dev_err(&dc->pdev->dev, "size == 0?\n"); | 852 | dev_err(&dc->pdev->dev, "size == 0?\n"); |
| 852 | return 1; | 853 | ret = 1; |
| 854 | goto put; | ||
| 853 | } | 855 | } |
| 854 | 856 | ||
| 855 | tty_buffer_request_room(tty, size); | 857 | tty_buffer_request_room(tty, size); |
| @@ -871,8 +873,10 @@ static int receive_data(enum port_type index, struct nozomi *dc) | |||
| 871 | } | 873 | } |
| 872 | 874 | ||
| 873 | set_bit(index, &dc->flip); | 875 | set_bit(index, &dc->flip); |
| 876 | ret = 1; | ||
| 877 | put: | ||
| 874 | tty_kref_put(tty); | 878 | tty_kref_put(tty); |
| 875 | return 1; | 879 | return ret; |
| 876 | } | 880 | } |
| 877 | 881 | ||
| 878 | /* Debug for interrupts */ | 882 | /* Debug for interrupts */ |
| @@ -1862,16 +1866,14 @@ static s32 ntty_chars_in_buffer(struct tty_struct *tty) | |||
| 1862 | { | 1866 | { |
| 1863 | struct port *port = tty->driver_data; | 1867 | struct port *port = tty->driver_data; |
| 1864 | struct nozomi *dc = get_dc_by_tty(tty); | 1868 | struct nozomi *dc = get_dc_by_tty(tty); |
| 1865 | s32 rval; | 1869 | s32 rval = 0; |
| 1866 | 1870 | ||
| 1867 | if (unlikely(!dc || !port)) { | 1871 | if (unlikely(!dc || !port)) { |
| 1868 | rval = -ENODEV; | ||
| 1869 | goto exit_in_buffer; | 1872 | goto exit_in_buffer; |
| 1870 | } | 1873 | } |
| 1871 | 1874 | ||
| 1872 | if (unlikely(!port->port.count)) { | 1875 | if (unlikely(!port->port.count)) { |
| 1873 | dev_err(&dc->pdev->dev, "No tty open?\n"); | 1876 | dev_err(&dc->pdev->dev, "No tty open?\n"); |
| 1874 | rval = -ENODEV; | ||
| 1875 | goto exit_in_buffer; | 1877 | goto exit_in_buffer; |
| 1876 | } | 1878 | } |
| 1877 | 1879 | ||
diff --git a/drivers/char/pcmcia/ipwireless/tty.c b/drivers/char/pcmcia/ipwireless/tty.c index 569f2f7743a..674b3ab3587 100644 --- a/drivers/char/pcmcia/ipwireless/tty.c +++ b/drivers/char/pcmcia/ipwireless/tty.c | |||
| @@ -320,10 +320,10 @@ static int ipw_chars_in_buffer(struct tty_struct *linux_tty) | |||
| 320 | struct ipw_tty *tty = linux_tty->driver_data; | 320 | struct ipw_tty *tty = linux_tty->driver_data; |
| 321 | 321 | ||
| 322 | if (!tty) | 322 | if (!tty) |
| 323 | return -ENODEV; | 323 | return 0; |
| 324 | 324 | ||
| 325 | if (!tty->open_count) | 325 | if (!tty->open_count) |
| 326 | return -EINVAL; | 326 | return 0; |
| 327 | 327 | ||
| 328 | return tty->tx_bytes_queued; | 328 | return tty->tx_bytes_queued; |
| 329 | } | 329 | } |
diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c index bfe4cdb2feb..268e17f9ec3 100644 --- a/drivers/char/specialix.c +++ b/drivers/char/specialix.c | |||
| @@ -1809,10 +1809,10 @@ static int sx_tiocmset(struct tty_struct *tty, struct file *file, | |||
| 1809 | if (clear & TIOCM_DTR) | 1809 | if (clear & TIOCM_DTR) |
| 1810 | port->MSVR &= ~MSVR_DTR; | 1810 | port->MSVR &= ~MSVR_DTR; |
| 1811 | } | 1811 | } |
| 1812 | spin_lock_irqsave(&bp->lock, flags); | 1812 | spin_lock(&bp->lock); |
| 1813 | sx_out(bp, CD186x_CAR, port_No(port)); | 1813 | sx_out(bp, CD186x_CAR, port_No(port)); |
| 1814 | sx_out(bp, CD186x_MSVR, port->MSVR); | 1814 | sx_out(bp, CD186x_MSVR, port->MSVR); |
| 1815 | spin_unlock_irqrestore(&bp->lock, flags); | 1815 | spin_unlock(&bp->lock); |
| 1816 | spin_unlock_irqrestore(&port->lock, flags); | 1816 | spin_unlock_irqrestore(&port->lock, flags); |
| 1817 | func_exit(); | 1817 | func_exit(); |
| 1818 | return 0; | 1818 | return 0; |
| @@ -1833,11 +1833,11 @@ static int sx_send_break(struct tty_struct *tty, int length) | |||
| 1833 | port->break_length = SPECIALIX_TPS / HZ * length; | 1833 | port->break_length = SPECIALIX_TPS / HZ * length; |
| 1834 | port->COR2 |= COR2_ETC; | 1834 | port->COR2 |= COR2_ETC; |
| 1835 | port->IER |= IER_TXRDY; | 1835 | port->IER |= IER_TXRDY; |
| 1836 | spin_lock_irqsave(&bp->lock, flags); | 1836 | spin_lock(&bp->lock); |
| 1837 | sx_out(bp, CD186x_CAR, port_No(port)); | 1837 | sx_out(bp, CD186x_CAR, port_No(port)); |
| 1838 | sx_out(bp, CD186x_COR2, port->COR2); | 1838 | sx_out(bp, CD186x_COR2, port->COR2); |
| 1839 | sx_out(bp, CD186x_IER, port->IER); | 1839 | sx_out(bp, CD186x_IER, port->IER); |
| 1840 | spin_unlock_irqrestore(&bp->lock, flags); | 1840 | spin_unlock(&bp->lock); |
| 1841 | spin_unlock_irqrestore(&port->lock, flags); | 1841 | spin_unlock_irqrestore(&port->lock, flags); |
| 1842 | sx_wait_CCR(bp); | 1842 | sx_wait_CCR(bp); |
| 1843 | spin_lock_irqsave(&bp->lock, flags); | 1843 | spin_lock_irqsave(&bp->lock, flags); |
| @@ -2023,9 +2023,9 @@ static void sx_unthrottle(struct tty_struct *tty) | |||
| 2023 | if (sx_crtscts(tty)) | 2023 | if (sx_crtscts(tty)) |
| 2024 | port->MSVR |= MSVR_DTR; | 2024 | port->MSVR |= MSVR_DTR; |
| 2025 | /* Else clause: see remark in "sx_throttle"... */ | 2025 | /* Else clause: see remark in "sx_throttle"... */ |
| 2026 | spin_lock_irqsave(&bp->lock, flags); | 2026 | spin_lock(&bp->lock); |
| 2027 | sx_out(bp, CD186x_CAR, port_No(port)); | 2027 | sx_out(bp, CD186x_CAR, port_No(port)); |
| 2028 | spin_unlock_irqrestore(&bp->lock, flags); | 2028 | spin_unlock(&bp->lock); |
| 2029 | if (I_IXOFF(tty)) { | 2029 | if (I_IXOFF(tty)) { |
| 2030 | spin_unlock_irqrestore(&port->lock, flags); | 2030 | spin_unlock_irqrestore(&port->lock, flags); |
| 2031 | sx_wait_CCR(bp); | 2031 | sx_wait_CCR(bp); |
| @@ -2035,9 +2035,9 @@ static void sx_unthrottle(struct tty_struct *tty) | |||
| 2035 | sx_wait_CCR(bp); | 2035 | sx_wait_CCR(bp); |
| 2036 | spin_lock_irqsave(&port->lock, flags); | 2036 | spin_lock_irqsave(&port->lock, flags); |
| 2037 | } | 2037 | } |
| 2038 | spin_lock_irqsave(&bp->lock, flags); | 2038 | spin_lock(&bp->lock); |
| 2039 | sx_out(bp, CD186x_MSVR, port->MSVR); | 2039 | sx_out(bp, CD186x_MSVR, port->MSVR); |
| 2040 | spin_unlock_irqrestore(&bp->lock, flags); | 2040 | spin_unlock(&bp->lock); |
| 2041 | spin_unlock_irqrestore(&port->lock, flags); | 2041 | spin_unlock_irqrestore(&port->lock, flags); |
| 2042 | 2042 | ||
| 2043 | func_exit(); | 2043 | func_exit(); |
| @@ -2061,10 +2061,10 @@ static void sx_stop(struct tty_struct *tty) | |||
| 2061 | 2061 | ||
| 2062 | spin_lock_irqsave(&port->lock, flags); | 2062 | spin_lock_irqsave(&port->lock, flags); |
| 2063 | port->IER &= ~IER_TXRDY; | 2063 | port->IER &= ~IER_TXRDY; |
| 2064 | spin_lock_irqsave(&bp->lock, flags); | 2064 | spin_lock(&bp->lock); |
| 2065 | sx_out(bp, CD186x_CAR, port_No(port)); | 2065 | sx_out(bp, CD186x_CAR, port_No(port)); |
| 2066 | sx_out(bp, CD186x_IER, port->IER); | 2066 | sx_out(bp, CD186x_IER, port->IER); |
| 2067 | spin_unlock_irqrestore(&bp->lock, flags); | 2067 | spin_unlock(&bp->lock); |
| 2068 | spin_unlock_irqrestore(&port->lock, flags); | 2068 | spin_unlock_irqrestore(&port->lock, flags); |
| 2069 | 2069 | ||
| 2070 | func_exit(); | 2070 | func_exit(); |
| @@ -2089,10 +2089,10 @@ static void sx_start(struct tty_struct *tty) | |||
| 2089 | spin_lock_irqsave(&port->lock, flags); | 2089 | spin_lock_irqsave(&port->lock, flags); |
| 2090 | if (port->xmit_cnt && port->xmit_buf && !(port->IER & IER_TXRDY)) { | 2090 | if (port->xmit_cnt && port->xmit_buf && !(port->IER & IER_TXRDY)) { |
| 2091 | port->IER |= IER_TXRDY; | 2091 | port->IER |= IER_TXRDY; |
| 2092 | spin_lock_irqsave(&bp->lock, flags); | 2092 | spin_lock(&bp->lock); |
| 2093 | sx_out(bp, CD186x_CAR, port_No(port)); | 2093 | sx_out(bp, CD186x_CAR, port_No(port)); |
| 2094 | sx_out(bp, CD186x_IER, port->IER); | 2094 | sx_out(bp, CD186x_IER, port->IER); |
| 2095 | spin_unlock_irqrestore(&bp->lock, flags); | 2095 | spin_unlock(&bp->lock); |
| 2096 | } | 2096 | } |
| 2097 | spin_unlock_irqrestore(&port->lock, flags); | 2097 | spin_unlock_irqrestore(&port->lock, flags); |
| 2098 | 2098 | ||
diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c index 0ef0dc97ba2..acd76b767d4 100644 --- a/drivers/char/tty_ldisc.c +++ b/drivers/char/tty_ldisc.c | |||
| @@ -790,17 +790,20 @@ void tty_ldisc_hangup(struct tty_struct *tty) | |||
| 790 | * N_TTY. | 790 | * N_TTY. |
| 791 | */ | 791 | */ |
| 792 | if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { | 792 | if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { |
| 793 | /* Avoid racing set_ldisc */ | 793 | /* Avoid racing set_ldisc or tty_ldisc_release */ |
| 794 | mutex_lock(&tty->ldisc_mutex); | 794 | mutex_lock(&tty->ldisc_mutex); |
| 795 | /* Switch back to N_TTY */ | 795 | if (tty->ldisc) { /* Not yet closed */ |
| 796 | tty_ldisc_halt(tty); | 796 | /* Switch back to N_TTY */ |
| 797 | tty_ldisc_wait_idle(tty); | 797 | tty_ldisc_halt(tty); |
| 798 | tty_ldisc_reinit(tty); | 798 | tty_ldisc_wait_idle(tty); |
| 799 | /* At this point we have a closed ldisc and we want to | 799 | tty_ldisc_reinit(tty); |
| 800 | reopen it. We could defer this to the next open but | 800 | /* At this point we have a closed ldisc and we want to |
| 801 | it means auditing a lot of other paths so this is a FIXME */ | 801 | reopen it. We could defer this to the next open but |
| 802 | WARN_ON(tty_ldisc_open(tty, tty->ldisc)); | 802 | it means auditing a lot of other paths so this is |
| 803 | tty_ldisc_enable(tty); | 803 | a FIXME */ |
| 804 | WARN_ON(tty_ldisc_open(tty, tty->ldisc)); | ||
| 805 | tty_ldisc_enable(tty); | ||
| 806 | } | ||
| 804 | mutex_unlock(&tty->ldisc_mutex); | 807 | mutex_unlock(&tty->ldisc_mutex); |
| 805 | tty_reset_termios(tty); | 808 | tty_reset_termios(tty); |
| 806 | } | 809 | } |
| @@ -865,6 +868,7 @@ void tty_ldisc_release(struct tty_struct *tty, struct tty_struct *o_tty) | |||
| 865 | 868 | ||
| 866 | tty_ldisc_wait_idle(tty); | 869 | tty_ldisc_wait_idle(tty); |
| 867 | 870 | ||
| 871 | mutex_lock(&tty->ldisc_mutex); | ||
| 868 | /* | 872 | /* |
| 869 | * Now kill off the ldisc | 873 | * Now kill off the ldisc |
| 870 | */ | 874 | */ |
| @@ -875,6 +879,7 @@ void tty_ldisc_release(struct tty_struct *tty, struct tty_struct *o_tty) | |||
| 875 | 879 | ||
| 876 | /* Ensure the next open requests the N_TTY ldisc */ | 880 | /* Ensure the next open requests the N_TTY ldisc */ |
| 877 | tty_set_termios_ldisc(tty, N_TTY); | 881 | tty_set_termios_ldisc(tty, N_TTY); |
| 882 | mutex_unlock(&tty->ldisc_mutex); | ||
| 878 | 883 | ||
| 879 | /* This will need doing differently if we need to lock */ | 884 | /* This will need doing differently if we need to lock */ |
| 880 | if (o_tty) | 885 | if (o_tty) |
diff --git a/drivers/char/tty_port.c b/drivers/char/tty_port.c index 4e862a75f7f..9769b1149f7 100644 --- a/drivers/char/tty_port.c +++ b/drivers/char/tty_port.c | |||
| @@ -267,7 +267,7 @@ int tty_port_block_til_ready(struct tty_port *port, | |||
| 267 | if (retval == 0) | 267 | if (retval == 0) |
| 268 | port->flags |= ASYNC_NORMAL_ACTIVE; | 268 | port->flags |= ASYNC_NORMAL_ACTIVE; |
| 269 | spin_unlock_irqrestore(&port->lock, flags); | 269 | spin_unlock_irqrestore(&port->lock, flags); |
| 270 | return 0; | 270 | return retval; |
| 271 | 271 | ||
| 272 | } | 272 | } |
| 273 | EXPORT_SYMBOL(tty_port_block_til_ready); | 273 | EXPORT_SYMBOL(tty_port_block_til_ready); |
diff --git a/drivers/char/vc_screen.c b/drivers/char/vc_screen.c index d94d25c12aa..c1791a63d99 100644 --- a/drivers/char/vc_screen.c +++ b/drivers/char/vc_screen.c | |||
| @@ -495,11 +495,15 @@ void vcs_remove_sysfs(int index) | |||
| 495 | 495 | ||
| 496 | int __init vcs_init(void) | 496 | int __init vcs_init(void) |
| 497 | { | 497 | { |
| 498 | unsigned int i; | ||
| 499 | |||
| 498 | if (register_chrdev(VCS_MAJOR, "vcs", &vcs_fops)) | 500 | if (register_chrdev(VCS_MAJOR, "vcs", &vcs_fops)) |
| 499 | panic("unable to get major %d for vcs device", VCS_MAJOR); | 501 | panic("unable to get major %d for vcs device", VCS_MAJOR); |
| 500 | vc_class = class_create(THIS_MODULE, "vc"); | 502 | vc_class = class_create(THIS_MODULE, "vc"); |
| 501 | 503 | ||
| 502 | device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 0), NULL, "vcs"); | 504 | device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 0), NULL, "vcs"); |
| 503 | device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 128), NULL, "vcsa"); | 505 | device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 128), NULL, "vcsa"); |
| 506 | for (i = 0; i < MIN_NR_CONSOLES; i++) | ||
| 507 | vcs_make_sysfs(i); | ||
| 504 | return 0; | 508 | return 0; |
| 505 | } | 509 | } |
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index 7947bd1b4cf..404f4c1ee43 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
| @@ -770,14 +770,12 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ | |||
| 770 | visual_init(vc, currcons, 1); | 770 | visual_init(vc, currcons, 1); |
| 771 | if (!*vc->vc_uni_pagedir_loc) | 771 | if (!*vc->vc_uni_pagedir_loc) |
| 772 | con_set_default_unimap(vc); | 772 | con_set_default_unimap(vc); |
| 773 | if (!vc->vc_kmalloced) | 773 | vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL); |
| 774 | vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL); | ||
| 775 | if (!vc->vc_screenbuf) { | 774 | if (!vc->vc_screenbuf) { |
| 776 | kfree(vc); | 775 | kfree(vc); |
| 777 | vc_cons[currcons].d = NULL; | 776 | vc_cons[currcons].d = NULL; |
| 778 | return -ENOMEM; | 777 | return -ENOMEM; |
| 779 | } | 778 | } |
| 780 | vc->vc_kmalloced = 1; | ||
| 781 | vc_init(vc, vc->vc_rows, vc->vc_cols, 1); | 779 | vc_init(vc, vc->vc_rows, vc->vc_cols, 1); |
| 782 | vcs_make_sysfs(currcons); | 780 | vcs_make_sysfs(currcons); |
| 783 | atomic_notifier_call_chain(&vt_notifier_list, VT_ALLOCATE, ¶m); | 781 | atomic_notifier_call_chain(&vt_notifier_list, VT_ALLOCATE, ¶m); |
| @@ -913,10 +911,8 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc, | |||
| 913 | if (new_scr_end > new_origin) | 911 | if (new_scr_end > new_origin) |
| 914 | scr_memsetw((void *)new_origin, vc->vc_video_erase_char, | 912 | scr_memsetw((void *)new_origin, vc->vc_video_erase_char, |
| 915 | new_scr_end - new_origin); | 913 | new_scr_end - new_origin); |
| 916 | if (vc->vc_kmalloced) | 914 | kfree(vc->vc_screenbuf); |
| 917 | kfree(vc->vc_screenbuf); | ||
| 918 | vc->vc_screenbuf = newscreen; | 915 | vc->vc_screenbuf = newscreen; |
| 919 | vc->vc_kmalloced = 1; | ||
| 920 | vc->vc_screenbuf_size = new_screen_size; | 916 | vc->vc_screenbuf_size = new_screen_size; |
| 921 | set_origin(vc); | 917 | set_origin(vc); |
| 922 | 918 | ||
| @@ -995,8 +991,7 @@ void vc_deallocate(unsigned int currcons) | |||
| 995 | vc->vc_sw->con_deinit(vc); | 991 | vc->vc_sw->con_deinit(vc); |
| 996 | put_pid(vc->vt_pid); | 992 | put_pid(vc->vt_pid); |
| 997 | module_put(vc->vc_sw->owner); | 993 | module_put(vc->vc_sw->owner); |
| 998 | if (vc->vc_kmalloced) | 994 | kfree(vc->vc_screenbuf); |
| 999 | kfree(vc->vc_screenbuf); | ||
| 1000 | if (currcons >= MIN_NR_CONSOLES) | 995 | if (currcons >= MIN_NR_CONSOLES) |
| 1001 | kfree(vc); | 996 | kfree(vc); |
| 1002 | vc_cons[currcons].d = NULL; | 997 | vc_cons[currcons].d = NULL; |
| @@ -2881,7 +2876,6 @@ static int __init con_init(void) | |||
| 2881 | INIT_WORK(&vc_cons[currcons].SAK_work, vc_SAK); | 2876 | INIT_WORK(&vc_cons[currcons].SAK_work, vc_SAK); |
| 2882 | visual_init(vc, currcons, 1); | 2877 | visual_init(vc, currcons, 1); |
| 2883 | vc->vc_screenbuf = kzalloc(vc->vc_screenbuf_size, GFP_NOWAIT); | 2878 | vc->vc_screenbuf = kzalloc(vc->vc_screenbuf_size, GFP_NOWAIT); |
| 2884 | vc->vc_kmalloced = 0; | ||
| 2885 | vc_init(vc, vc->vc_rows, vc->vc_cols, | 2879 | vc_init(vc, vc->vc_rows, vc->vc_cols, |
| 2886 | currcons || !vc->vc_sw->con_save_screen); | 2880 | currcons || !vc->vc_sw->con_save_screen); |
| 2887 | } | 2881 | } |
diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c index 2960b6d7345..9903f270e44 100644 --- a/drivers/gpu/drm/drm_debugfs.c +++ b/drivers/gpu/drm/drm_debugfs.c | |||
| @@ -101,6 +101,10 @@ int drm_debugfs_create_files(struct drm_info_list *files, int count, | |||
| 101 | continue; | 101 | continue; |
| 102 | 102 | ||
| 103 | tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL); | 103 | tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL); |
| 104 | if (tmp == NULL) { | ||
| 105 | ret = -1; | ||
| 106 | goto fail; | ||
| 107 | } | ||
| 104 | ent = debugfs_create_file(files[i].name, S_IFREG | S_IRUGO, | 108 | ent = debugfs_create_file(files[i].name, S_IFREG | S_IRUGO, |
| 105 | root, tmp, &drm_debugfs_fops); | 109 | root, tmp, &drm_debugfs_fops); |
| 106 | if (!ent) { | 110 | if (!ent) { |
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 8104ecaea26..ffe8f4394d5 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c | |||
| @@ -134,26 +134,29 @@ drm_gem_object_alloc(struct drm_device *dev, size_t size) | |||
| 134 | BUG_ON((size & (PAGE_SIZE - 1)) != 0); | 134 | BUG_ON((size & (PAGE_SIZE - 1)) != 0); |
| 135 | 135 | ||
| 136 | obj = kzalloc(sizeof(*obj), GFP_KERNEL); | 136 | obj = kzalloc(sizeof(*obj), GFP_KERNEL); |
| 137 | if (!obj) | ||
| 138 | goto free; | ||
| 137 | 139 | ||
| 138 | obj->dev = dev; | 140 | obj->dev = dev; |
| 139 | obj->filp = shmem_file_setup("drm mm object", size, VM_NORESERVE); | 141 | obj->filp = shmem_file_setup("drm mm object", size, VM_NORESERVE); |
| 140 | if (IS_ERR(obj->filp)) { | 142 | if (IS_ERR(obj->filp)) |
| 141 | kfree(obj); | 143 | goto free; |
| 142 | return NULL; | ||
| 143 | } | ||
| 144 | 144 | ||
| 145 | kref_init(&obj->refcount); | 145 | kref_init(&obj->refcount); |
| 146 | kref_init(&obj->handlecount); | 146 | kref_init(&obj->handlecount); |
| 147 | obj->size = size; | 147 | obj->size = size; |
| 148 | if (dev->driver->gem_init_object != NULL && | 148 | if (dev->driver->gem_init_object != NULL && |
| 149 | dev->driver->gem_init_object(obj) != 0) { | 149 | dev->driver->gem_init_object(obj) != 0) { |
| 150 | fput(obj->filp); | 150 | goto fput; |
| 151 | kfree(obj); | ||
| 152 | return NULL; | ||
| 153 | } | 151 | } |
| 154 | atomic_inc(&dev->object_count); | 152 | atomic_inc(&dev->object_count); |
| 155 | atomic_add(obj->size, &dev->object_memory); | 153 | atomic_add(obj->size, &dev->object_memory); |
| 156 | return obj; | 154 | return obj; |
| 155 | fput: | ||
| 156 | fput(obj->filp); | ||
| 157 | free: | ||
| 158 | kfree(obj); | ||
| 159 | return NULL; | ||
| 157 | } | 160 | } |
| 158 | EXPORT_SYMBOL(drm_gem_object_alloc); | 161 | EXPORT_SYMBOL(drm_gem_object_alloc); |
| 159 | 162 | ||
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 155a5bbce68..55bb8a82d61 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c | |||
| @@ -489,7 +489,7 @@ int drm_put_minor(struct drm_minor **minor_p) | |||
| 489 | */ | 489 | */ |
| 490 | void drm_put_dev(struct drm_device *dev) | 490 | void drm_put_dev(struct drm_device *dev) |
| 491 | { | 491 | { |
| 492 | struct drm_driver *driver = dev->driver; | 492 | struct drm_driver *driver; |
| 493 | struct drm_map_list *r_list, *list_temp; | 493 | struct drm_map_list *r_list, *list_temp; |
| 494 | 494 | ||
| 495 | DRM_DEBUG("\n"); | 495 | DRM_DEBUG("\n"); |
| @@ -498,6 +498,7 @@ void drm_put_dev(struct drm_device *dev) | |||
| 498 | DRM_ERROR("cleanup called no dev\n"); | 498 | DRM_ERROR("cleanup called no dev\n"); |
| 499 | return; | 499 | return; |
| 500 | } | 500 | } |
| 501 | driver = dev->driver; | ||
| 501 | 502 | ||
| 502 | drm_vblank_cleanup(dev); | 503 | drm_vblank_cleanup(dev); |
| 503 | 504 | ||
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c index 40b75032ea4..fe949a12fe4 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c | |||
| @@ -327,7 +327,7 @@ ssize_t ttm_bo_io(struct ttm_bo_device *bdev, struct file *filp, | |||
| 327 | goto out_unref; | 327 | goto out_unref; |
| 328 | 328 | ||
| 329 | kmap_offset = dev_offset - bo->vm_node->start; | 329 | kmap_offset = dev_offset - bo->vm_node->start; |
| 330 | if (unlikely(kmap_offset) >= bo->num_pages) { | 330 | if (unlikely(kmap_offset >= bo->num_pages)) { |
| 331 | ret = -EFBIG; | 331 | ret = -EFBIG; |
| 332 | goto out_unref; | 332 | goto out_unref; |
| 333 | } | 333 | } |
| @@ -401,7 +401,7 @@ ssize_t ttm_bo_fbdev_io(struct ttm_buffer_object *bo, const char __user *wbuf, | |||
| 401 | bool dummy; | 401 | bool dummy; |
| 402 | 402 | ||
| 403 | kmap_offset = (*f_pos >> PAGE_SHIFT); | 403 | kmap_offset = (*f_pos >> PAGE_SHIFT); |
| 404 | if (unlikely(kmap_offset) >= bo->num_pages) | 404 | if (unlikely(kmap_offset >= bo->num_pages)) |
| 405 | return -EFBIG; | 405 | return -EFBIG; |
| 406 | 406 | ||
| 407 | page_offset = *f_pos & ~PAGE_MASK; | 407 | page_offset = *f_pos & ~PAGE_MASK; |
diff --git a/drivers/gpu/drm/via/via_irq.c b/drivers/gpu/drm/via/via_irq.c index c248c1d3726..5935b8842e8 100644 --- a/drivers/gpu/drm/via/via_irq.c +++ b/drivers/gpu/drm/via/via_irq.c | |||
| @@ -183,7 +183,7 @@ int via_enable_vblank(struct drm_device *dev, int crtc) | |||
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | status = VIA_READ(VIA_REG_INTERRUPT); | 185 | status = VIA_READ(VIA_REG_INTERRUPT); |
| 186 | VIA_WRITE(VIA_REG_INTERRUPT, status & VIA_IRQ_VBLANK_ENABLE); | 186 | VIA_WRITE(VIA_REG_INTERRUPT, status | VIA_IRQ_VBLANK_ENABLE); |
| 187 | 187 | ||
| 188 | VIA_WRITE8(0x83d4, 0x11); | 188 | VIA_WRITE8(0x83d4, 0x11); |
| 189 | VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) | 0x30); | 189 | VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) | 0x30); |
| @@ -194,6 +194,10 @@ int via_enable_vblank(struct drm_device *dev, int crtc) | |||
| 194 | void via_disable_vblank(struct drm_device *dev, int crtc) | 194 | void via_disable_vblank(struct drm_device *dev, int crtc) |
| 195 | { | 195 | { |
| 196 | drm_via_private_t *dev_priv = dev->dev_private; | 196 | drm_via_private_t *dev_priv = dev->dev_private; |
| 197 | u32 status; | ||
| 198 | |||
| 199 | status = VIA_READ(VIA_REG_INTERRUPT); | ||
| 200 | VIA_WRITE(VIA_REG_INTERRUPT, status & ~VIA_IRQ_VBLANK_ENABLE); | ||
| 197 | 201 | ||
| 198 | VIA_WRITE8(0x83d4, 0x11); | 202 | VIA_WRITE8(0x83d4, 0x11); |
| 199 | VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) & ~0x30); | 203 | VIA_WRITE8(0x83d5, VIA_READ8(0x83d5) & ~0x30); |
diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c index 3fae3a91ce5..c89687a1083 100644 --- a/drivers/i2c/busses/i2c-davinci.c +++ b/drivers/i2c/busses/i2c-davinci.c | |||
| @@ -187,6 +187,11 @@ static int i2c_davinci_init(struct davinci_i2c_dev *dev) | |||
| 187 | davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKH_REG, clkh); | 187 | davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKH_REG, clkh); |
| 188 | davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKL_REG, clkl); | 188 | davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKL_REG, clkl); |
| 189 | 189 | ||
| 190 | /* Respond at reserved "SMBus Host" slave address" (and zero); | ||
| 191 | * we seem to have no option to not respond... | ||
| 192 | */ | ||
| 193 | davinci_i2c_write_reg(dev, DAVINCI_I2C_OAR_REG, 0x08); | ||
| 194 | |||
| 190 | dev_dbg(dev->dev, "input_clock = %d, CLK = %d\n", input_clock, clk); | 195 | dev_dbg(dev->dev, "input_clock = %d, CLK = %d\n", input_clock, clk); |
| 191 | dev_dbg(dev->dev, "PSC = %d\n", | 196 | dev_dbg(dev->dev, "PSC = %d\n", |
| 192 | davinci_i2c_read_reg(dev, DAVINCI_I2C_PSC_REG)); | 197 | davinci_i2c_read_reg(dev, DAVINCI_I2C_PSC_REG)); |
| @@ -387,7 +392,7 @@ static void terminate_write(struct davinci_i2c_dev *dev) | |||
| 387 | davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); | 392 | davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); |
| 388 | 393 | ||
| 389 | if (!dev->terminate) | 394 | if (!dev->terminate) |
| 390 | dev_err(dev->dev, "TDR IRQ while no data to send\n"); | 395 | dev_dbg(dev->dev, "TDR IRQ while no data to send\n"); |
| 391 | } | 396 | } |
| 392 | 397 | ||
| 393 | /* | 398 | /* |
| @@ -473,9 +478,14 @@ static irqreturn_t i2c_davinci_isr(int this_irq, void *dev_id) | |||
| 473 | break; | 478 | break; |
| 474 | 479 | ||
| 475 | case DAVINCI_I2C_IVR_AAS: | 480 | case DAVINCI_I2C_IVR_AAS: |
| 476 | dev_warn(dev->dev, "Address as slave interrupt\n"); | 481 | dev_dbg(dev->dev, "Address as slave interrupt\n"); |
| 477 | }/* switch */ | 482 | break; |
| 478 | }/* while */ | 483 | |
| 484 | default: | ||
| 485 | dev_warn(dev->dev, "Unrecognized irq stat %d\n", stat); | ||
| 486 | break; | ||
| 487 | } | ||
| 488 | } | ||
| 479 | 489 | ||
| 480 | return count ? IRQ_HANDLED : IRQ_NONE; | 490 | return count ? IRQ_HANDLED : IRQ_NONE; |
| 481 | } | 491 | } |
| @@ -505,7 +515,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) | |||
| 505 | return -ENODEV; | 515 | return -ENODEV; |
| 506 | } | 516 | } |
| 507 | 517 | ||
| 508 | ioarea = request_mem_region(mem->start, (mem->end - mem->start) + 1, | 518 | ioarea = request_mem_region(mem->start, resource_size(mem), |
| 509 | pdev->name); | 519 | pdev->name); |
| 510 | if (!ioarea) { | 520 | if (!ioarea) { |
| 511 | dev_err(&pdev->dev, "I2C region already claimed\n"); | 521 | dev_err(&pdev->dev, "I2C region already claimed\n"); |
| @@ -523,7 +533,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) | |||
| 523 | dev->irq = irq->start; | 533 | dev->irq = irq->start; |
| 524 | platform_set_drvdata(pdev, dev); | 534 | platform_set_drvdata(pdev, dev); |
| 525 | 535 | ||
| 526 | dev->clk = clk_get(&pdev->dev, "I2CCLK"); | 536 | dev->clk = clk_get(&pdev->dev, NULL); |
| 527 | if (IS_ERR(dev->clk)) { | 537 | if (IS_ERR(dev->clk)) { |
| 528 | r = -ENODEV; | 538 | r = -ENODEV; |
| 529 | goto err_free_mem; | 539 | goto err_free_mem; |
| @@ -568,7 +578,7 @@ err_free_mem: | |||
| 568 | put_device(&pdev->dev); | 578 | put_device(&pdev->dev); |
| 569 | kfree(dev); | 579 | kfree(dev); |
| 570 | err_release_region: | 580 | err_release_region: |
| 571 | release_mem_region(mem->start, (mem->end - mem->start) + 1); | 581 | release_mem_region(mem->start, resource_size(mem)); |
| 572 | 582 | ||
| 573 | return r; | 583 | return r; |
| 574 | } | 584 | } |
| @@ -591,7 +601,7 @@ static int davinci_i2c_remove(struct platform_device *pdev) | |||
| 591 | kfree(dev); | 601 | kfree(dev); |
| 592 | 602 | ||
| 593 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 603 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 594 | release_mem_region(mem->start, (mem->end - mem->start) + 1); | 604 | release_mem_region(mem->start, resource_size(mem)); |
| 595 | return 0; | 605 | return 0; |
| 596 | } | 606 | } |
| 597 | 607 | ||
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index ad8d2010c92..fdd83277c8a 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c | |||
| @@ -806,7 +806,7 @@ omap_i2c_probe(struct platform_device *pdev) | |||
| 806 | return -ENODEV; | 806 | return -ENODEV; |
| 807 | } | 807 | } |
| 808 | 808 | ||
| 809 | ioarea = request_mem_region(mem->start, (mem->end - mem->start) + 1, | 809 | ioarea = request_mem_region(mem->start, resource_size(mem), |
| 810 | pdev->name); | 810 | pdev->name); |
| 811 | if (!ioarea) { | 811 | if (!ioarea) { |
| 812 | dev_err(&pdev->dev, "I2C region already claimed\n"); | 812 | dev_err(&pdev->dev, "I2C region already claimed\n"); |
| @@ -905,7 +905,7 @@ err_free_mem: | |||
| 905 | platform_set_drvdata(pdev, NULL); | 905 | platform_set_drvdata(pdev, NULL); |
| 906 | kfree(dev); | 906 | kfree(dev); |
| 907 | err_release_region: | 907 | err_release_region: |
| 908 | release_mem_region(mem->start, (mem->end - mem->start) + 1); | 908 | release_mem_region(mem->start, resource_size(mem)); |
| 909 | 909 | ||
| 910 | return r; | 910 | return r; |
| 911 | } | 911 | } |
| @@ -925,7 +925,7 @@ omap_i2c_remove(struct platform_device *pdev) | |||
| 925 | iounmap(dev->base); | 925 | iounmap(dev->base); |
| 926 | kfree(dev); | 926 | kfree(dev); |
| 927 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 927 | mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 928 | release_mem_region(mem->start, (mem->end - mem->start) + 1); | 928 | release_mem_region(mem->start, resource_size(mem)); |
| 929 | return 0; | 929 | return 0; |
| 930 | } | 930 | } |
| 931 | 931 | ||
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c index 1c01083b01b..4f3d99cd169 100644 --- a/drivers/i2c/busses/i2c-sh_mobile.c +++ b/drivers/i2c/busses/i2c-sh_mobile.c | |||
| @@ -563,7 +563,7 @@ static int sh_mobile_i2c_probe(struct platform_device *dev) | |||
| 563 | goto err_irq; | 563 | goto err_irq; |
| 564 | } | 564 | } |
| 565 | 565 | ||
| 566 | size = (res->end - res->start) + 1; | 566 | size = resource_size(res); |
| 567 | 567 | ||
| 568 | pd->reg = ioremap(res->start, size); | 568 | pd->reg = ioremap(res->start, size); |
| 569 | if (pd->reg == NULL) { | 569 | if (pd->reg == NULL) { |
diff --git a/drivers/i2c/busses/i2c-simtec.c b/drivers/i2c/busses/i2c-simtec.c index 042fda295f3..6407f47bda8 100644 --- a/drivers/i2c/busses/i2c-simtec.c +++ b/drivers/i2c/busses/i2c-simtec.c | |||
| @@ -92,7 +92,7 @@ static int simtec_i2c_probe(struct platform_device *dev) | |||
| 92 | goto err; | 92 | goto err; |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | size = (res->end-res->start)+1; | 95 | size = resource_size(res); |
| 96 | 96 | ||
| 97 | pd->ioarea = request_mem_region(res->start, size, dev->name); | 97 | pd->ioarea = request_mem_region(res->start, size, dev->name); |
| 98 | if (pd->ioarea == NULL) { | 98 | if (pd->ioarea == NULL) { |
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 114efd8dc8f..1148140d08a 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c | |||
| @@ -608,8 +608,7 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd, | |||
| 608 | p, compat_mode); | 608 | p, compat_mode); |
| 609 | 609 | ||
| 610 | if (_IOC_NR(cmd) == _IOC_NR(EVIOCGNAME(0))) | 610 | if (_IOC_NR(cmd) == _IOC_NR(EVIOCGNAME(0))) |
| 611 | return str_to_user(dev_name(&evdev->dev), | 611 | return str_to_user(dev->name, _IOC_SIZE(cmd), p); |
| 612 | _IOC_SIZE(cmd), p); | ||
| 613 | 612 | ||
| 614 | if (_IOC_NR(cmd) == _IOC_NR(EVIOCGPHYS(0))) | 613 | if (_IOC_NR(cmd) == _IOC_NR(EVIOCGPHYS(0))) |
| 615 | return str_to_user(dev->phys, _IOC_SIZE(cmd), p); | 614 | return str_to_user(dev->phys, _IOC_SIZE(cmd), p); |
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index 0e12f89276a..4cfd084fa89 100644 --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c | |||
| @@ -536,7 +536,7 @@ static int joydev_ioctl_common(struct joydev *joydev, | |||
| 536 | default: | 536 | default: |
| 537 | if ((cmd & ~IOCSIZE_MASK) == JSIOCGNAME(0)) { | 537 | if ((cmd & ~IOCSIZE_MASK) == JSIOCGNAME(0)) { |
| 538 | int len; | 538 | int len; |
| 539 | const char *name = dev_name(&dev->dev); | 539 | const char *name = dev->name; |
| 540 | 540 | ||
| 541 | if (!name) | 541 | if (!name) |
| 542 | return 0; | 542 | return 0; |
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index b868b8d5fbb..f155ad8cdae 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c | |||
| @@ -470,20 +470,20 @@ static void xpad_irq_out(struct urb *urb) | |||
| 470 | status = urb->status; | 470 | status = urb->status; |
| 471 | 471 | ||
| 472 | switch (status) { | 472 | switch (status) { |
| 473 | case 0: | 473 | case 0: |
| 474 | /* success */ | 474 | /* success */ |
| 475 | break; | 475 | return; |
| 476 | case -ECONNRESET: | 476 | |
| 477 | case -ENOENT: | 477 | case -ECONNRESET: |
| 478 | case -ESHUTDOWN: | 478 | case -ENOENT: |
| 479 | /* this urb is terminated, clean up */ | 479 | case -ESHUTDOWN: |
| 480 | dbg("%s - urb shutting down with status: %d", | 480 | /* this urb is terminated, clean up */ |
| 481 | __func__, status); | 481 | dbg("%s - urb shutting down with status: %d", __func__, status); |
| 482 | return; | 482 | return; |
| 483 | default: | 483 | |
| 484 | dbg("%s - nonzero urb status received: %d", | 484 | default: |
| 485 | __func__, status); | 485 | dbg("%s - nonzero urb status received: %d", __func__, status); |
| 486 | goto exit; | 486 | goto exit; |
| 487 | } | 487 | } |
| 488 | 488 | ||
| 489 | exit: | 489 | exit: |
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index df3f8aa6811..95fe0452dae 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
| @@ -895,6 +895,13 @@ static unsigned int atkbd_amilo_pa1510_forced_release_keys[] = { | |||
| 895 | }; | 895 | }; |
| 896 | 896 | ||
| 897 | /* | 897 | /* |
| 898 | * Amilo Pi 3525 key release for Fn+Volume keys not working | ||
| 899 | */ | ||
| 900 | static unsigned int atkbd_amilo_pi3525_forced_release_keys[] = { | ||
| 901 | 0x20, 0xa0, 0x2e, 0xae, 0x30, 0xb0, -1U | ||
| 902 | }; | ||
| 903 | |||
| 904 | /* | ||
| 898 | * Amilo Xi 3650 key release for light touch bar not working | 905 | * Amilo Xi 3650 key release for light touch bar not working |
| 899 | */ | 906 | */ |
| 900 | static unsigned int atkbd_amilo_xi3650_forced_release_keys[] = { | 907 | static unsigned int atkbd_amilo_xi3650_forced_release_keys[] = { |
| @@ -902,6 +909,13 @@ static unsigned int atkbd_amilo_xi3650_forced_release_keys[] = { | |||
| 902 | }; | 909 | }; |
| 903 | 910 | ||
| 904 | /* | 911 | /* |
| 912 | * Soltech TA12 system with broken key release on volume keys and mute key | ||
| 913 | */ | ||
| 914 | static unsigned int atkdb_soltech_ta12_forced_release_keys[] = { | ||
| 915 | 0xa0, 0xae, 0xb0, -1U | ||
| 916 | }; | ||
| 917 | |||
| 918 | /* | ||
| 905 | * atkbd_set_keycode_table() initializes keyboard's keycode table | 919 | * atkbd_set_keycode_table() initializes keyboard's keycode table |
| 906 | * according to the selected scancode set | 920 | * according to the selected scancode set |
| 907 | */ | 921 | */ |
| @@ -1568,6 +1582,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { | |||
| 1568 | .driver_data = atkbd_amilo_pa1510_forced_release_keys, | 1582 | .driver_data = atkbd_amilo_pa1510_forced_release_keys, |
| 1569 | }, | 1583 | }, |
| 1570 | { | 1584 | { |
| 1585 | .ident = "Fujitsu Amilo Pi 3525", | ||
| 1586 | .matches = { | ||
| 1587 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), | ||
| 1588 | DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pi 3525"), | ||
| 1589 | }, | ||
| 1590 | .callback = atkbd_setup_forced_release, | ||
| 1591 | .driver_data = atkbd_amilo_pi3525_forced_release_keys, | ||
| 1592 | }, | ||
| 1593 | { | ||
| 1571 | .ident = "Fujitsu Amilo Xi 3650", | 1594 | .ident = "Fujitsu Amilo Xi 3650", |
| 1572 | .matches = { | 1595 | .matches = { |
| 1573 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), | 1596 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), |
| @@ -1576,6 +1599,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { | |||
| 1576 | .callback = atkbd_setup_forced_release, | 1599 | .callback = atkbd_setup_forced_release, |
| 1577 | .driver_data = atkbd_amilo_xi3650_forced_release_keys, | 1600 | .driver_data = atkbd_amilo_xi3650_forced_release_keys, |
| 1578 | }, | 1601 | }, |
| 1602 | { | ||
| 1603 | .ident = "Soltech Corporation TA12", | ||
| 1604 | .matches = { | ||
| 1605 | DMI_MATCH(DMI_SYS_VENDOR, "Soltech Corporation"), | ||
| 1606 | DMI_MATCH(DMI_PRODUCT_NAME, "TA12"), | ||
| 1607 | }, | ||
| 1608 | .callback = atkbd_setup_forced_release, | ||
| 1609 | .driver_data = atkdb_soltech_ta12_forced_release_keys, | ||
| 1610 | }, | ||
| 1579 | { } | 1611 | { } |
| 1580 | }; | 1612 | }; |
| 1581 | 1613 | ||
diff --git a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c index 6d67af5387a..21cb755a54f 100644 --- a/drivers/input/misc/pcspkr.c +++ b/drivers/input/misc/pcspkr.c | |||
| @@ -114,7 +114,7 @@ static int __devexit pcspkr_remove(struct platform_device *dev) | |||
| 114 | return 0; | 114 | return 0; |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | static int pcspkr_suspend(struct platform_device *dev, pm_message_t state) | 117 | static int pcspkr_suspend(struct device *dev) |
| 118 | { | 118 | { |
| 119 | pcspkr_event(NULL, EV_SND, SND_BELL, 0); | 119 | pcspkr_event(NULL, EV_SND, SND_BELL, 0); |
| 120 | 120 | ||
| @@ -127,14 +127,18 @@ static void pcspkr_shutdown(struct platform_device *dev) | |||
| 127 | pcspkr_event(NULL, EV_SND, SND_BELL, 0); | 127 | pcspkr_event(NULL, EV_SND, SND_BELL, 0); |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | static struct dev_pm_ops pcspkr_pm_ops = { | ||
| 131 | .suspend = pcspkr_suspend, | ||
| 132 | }; | ||
| 133 | |||
| 130 | static struct platform_driver pcspkr_platform_driver = { | 134 | static struct platform_driver pcspkr_platform_driver = { |
| 131 | .driver = { | 135 | .driver = { |
| 132 | .name = "pcspkr", | 136 | .name = "pcspkr", |
| 133 | .owner = THIS_MODULE, | 137 | .owner = THIS_MODULE, |
| 138 | .pm = &pcspkr_pm_ops, | ||
| 134 | }, | 139 | }, |
| 135 | .probe = pcspkr_probe, | 140 | .probe = pcspkr_probe, |
| 136 | .remove = __devexit_p(pcspkr_remove), | 141 | .remove = __devexit_p(pcspkr_remove), |
| 137 | .suspend = pcspkr_suspend, | ||
| 138 | .shutdown = pcspkr_shutdown, | 142 | .shutdown = pcspkr_shutdown, |
| 139 | }; | 143 | }; |
| 140 | 144 | ||
diff --git a/drivers/input/misc/wistron_btns.c b/drivers/input/misc/wistron_btns.c index 7c8957dd22c..26e17a9a22e 100644 --- a/drivers/input/misc/wistron_btns.c +++ b/drivers/input/misc/wistron_btns.c | |||
| @@ -646,6 +646,15 @@ static struct dmi_system_id dmi_ids[] __initdata = { | |||
| 646 | }, | 646 | }, |
| 647 | { | 647 | { |
| 648 | .callback = dmi_matched, | 648 | .callback = dmi_matched, |
| 649 | .ident = "Maxdata Pro 7000 DX", | ||
| 650 | .matches = { | ||
| 651 | DMI_MATCH(DMI_SYS_VENDOR, "MAXDATA"), | ||
| 652 | DMI_MATCH(DMI_PRODUCT_NAME, "Pro 7000"), | ||
| 653 | }, | ||
| 654 | .driver_data = keymap_fs_amilo_pro_v2000 | ||
| 655 | }, | ||
| 656 | { | ||
| 657 | .callback = dmi_matched, | ||
| 649 | .ident = "Fujitsu N3510", | 658 | .ident = "Fujitsu N3510", |
| 650 | .matches = { | 659 | .matches = { |
| 651 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), | 660 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), |
diff --git a/drivers/isdn/gigaset/interface.c b/drivers/isdn/gigaset/interface.c index 1ebfcab7466..8ff7e35c706 100644 --- a/drivers/isdn/gigaset/interface.c +++ b/drivers/isdn/gigaset/interface.c | |||
| @@ -408,6 +408,8 @@ static int if_write_room(struct tty_struct *tty) | |||
| 408 | return retval; | 408 | return retval; |
| 409 | } | 409 | } |
| 410 | 410 | ||
| 411 | /* FIXME: This function does not have error returns */ | ||
| 412 | |||
| 411 | static int if_chars_in_buffer(struct tty_struct *tty) | 413 | static int if_chars_in_buffer(struct tty_struct *tty) |
| 412 | { | 414 | { |
| 413 | struct cardstate *cs; | 415 | struct cardstate *cs; |
diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h index 9c3138265f8..01c59192379 100644 --- a/drivers/lguest/lg.h +++ b/drivers/lguest/lg.h | |||
| @@ -38,8 +38,6 @@ struct lguest_pages | |||
| 38 | #define CHANGED_GDT_TLS 4 /* Actually a subset of CHANGED_GDT */ | 38 | #define CHANGED_GDT_TLS 4 /* Actually a subset of CHANGED_GDT */ |
| 39 | #define CHANGED_ALL 3 | 39 | #define CHANGED_ALL 3 |
| 40 | 40 | ||
| 41 | struct lguest; | ||
| 42 | |||
| 43 | struct lg_cpu { | 41 | struct lg_cpu { |
| 44 | unsigned int id; | 42 | unsigned int id; |
| 45 | struct lguest *lg; | 43 | struct lguest *lg; |
diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c index b56d72ff06e..34e23489811 100644 --- a/drivers/mmc/host/mvsdio.c +++ b/drivers/mmc/host/mvsdio.c | |||
| @@ -384,7 +384,7 @@ static irqreturn_t mvsd_irq(int irq, void *dev) | |||
| 384 | u16 val[2] = {0, 0}; | 384 | u16 val[2] = {0, 0}; |
| 385 | val[0] = mvsd_read(MVSD_FIFO); | 385 | val[0] = mvsd_read(MVSD_FIFO); |
| 386 | val[1] = mvsd_read(MVSD_FIFO); | 386 | val[1] = mvsd_read(MVSD_FIFO); |
| 387 | memcpy(p, &val, s); | 387 | memcpy(p, ((void *)&val) + 4 - s, s); |
| 388 | s = 0; | 388 | s = 0; |
| 389 | intr_status = mvsd_read(MVSD_NOR_INTR_STATUS); | 389 | intr_status = mvsd_read(MVSD_NOR_INTR_STATUS); |
| 390 | } | 390 | } |
| @@ -423,7 +423,7 @@ static irqreturn_t mvsd_irq(int irq, void *dev) | |||
| 423 | if (s < 4) { | 423 | if (s < 4) { |
| 424 | if (s && (intr_status & MVSD_NOR_TX_AVAIL)) { | 424 | if (s && (intr_status & MVSD_NOR_TX_AVAIL)) { |
| 425 | u16 val[2] = {0, 0}; | 425 | u16 val[2] = {0, 0}; |
| 426 | memcpy(&val, p, s); | 426 | memcpy(((void *)&val) + 4 - s, p, s); |
| 427 | mvsd_write(MVSD_FIFO, val[0]); | 427 | mvsd_write(MVSD_FIFO, val[0]); |
| 428 | mvsd_write(MVSD_FIFO, val[1]); | 428 | mvsd_write(MVSD_FIFO, val[1]); |
| 429 | s = 0; | 429 | s = 0; |
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c index d7d7109ef47..e55ac792d68 100644 --- a/drivers/mmc/host/pxamci.c +++ b/drivers/mmc/host/pxamci.c | |||
| @@ -168,12 +168,12 @@ static void pxamci_setup_data(struct pxamci_host *host, struct mmc_data *data) | |||
| 168 | 168 | ||
| 169 | if (data->flags & MMC_DATA_READ) { | 169 | if (data->flags & MMC_DATA_READ) { |
| 170 | host->dma_dir = DMA_FROM_DEVICE; | 170 | host->dma_dir = DMA_FROM_DEVICE; |
| 171 | dcmd = DCMD_INCTRGADDR | DCMD_FLOWTRG; | 171 | dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC; |
| 172 | DRCMR(host->dma_drcmrtx) = 0; | 172 | DRCMR(host->dma_drcmrtx) = 0; |
| 173 | DRCMR(host->dma_drcmrrx) = host->dma | DRCMR_MAPVLD; | 173 | DRCMR(host->dma_drcmrrx) = host->dma | DRCMR_MAPVLD; |
| 174 | } else { | 174 | } else { |
| 175 | host->dma_dir = DMA_TO_DEVICE; | 175 | host->dma_dir = DMA_TO_DEVICE; |
| 176 | dcmd = DCMD_INCSRCADDR | DCMD_FLOWSRC; | 176 | dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG; |
| 177 | DRCMR(host->dma_drcmrrx) = 0; | 177 | DRCMR(host->dma_drcmrrx) = 0; |
| 178 | DRCMR(host->dma_drcmrtx) = host->dma | DRCMR_MAPVLD; | 178 | DRCMR(host->dma_drcmrtx) = host->dma | DRCMR_MAPVLD; |
| 179 | } | 179 | } |
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index 8ae72ec1445..0e2ba21d444 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c | |||
| @@ -908,6 +908,7 @@ static const struct net_device_ops rtl8139_netdev_ops = { | |||
| 908 | .ndo_open = rtl8139_open, | 908 | .ndo_open = rtl8139_open, |
| 909 | .ndo_stop = rtl8139_close, | 909 | .ndo_stop = rtl8139_close, |
| 910 | .ndo_get_stats = rtl8139_get_stats, | 910 | .ndo_get_stats = rtl8139_get_stats, |
| 911 | .ndo_change_mtu = eth_change_mtu, | ||
| 911 | .ndo_validate_addr = eth_validate_addr, | 912 | .ndo_validate_addr = eth_validate_addr, |
| 912 | .ndo_set_mac_address = rtl8139_set_mac_address, | 913 | .ndo_set_mac_address = rtl8139_set_mac_address, |
| 913 | .ndo_start_xmit = rtl8139_start_xmit, | 914 | .ndo_start_xmit = rtl8139_start_xmit, |
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c index 6f42ad72891..3fe09876e76 100644 --- a/drivers/net/arm/ixp4xx_eth.c +++ b/drivers/net/arm/ixp4xx_eth.c | |||
| @@ -1142,7 +1142,9 @@ static const struct net_device_ops ixp4xx_netdev_ops = { | |||
| 1142 | .ndo_start_xmit = eth_xmit, | 1142 | .ndo_start_xmit = eth_xmit, |
| 1143 | .ndo_set_multicast_list = eth_set_mcast_list, | 1143 | .ndo_set_multicast_list = eth_set_mcast_list, |
| 1144 | .ndo_do_ioctl = eth_ioctl, | 1144 | .ndo_do_ioctl = eth_ioctl, |
| 1145 | 1145 | .ndo_change_mtu = eth_change_mtu, | |
| 1146 | .ndo_set_mac_address = eth_mac_addr, | ||
| 1147 | .ndo_validate_addr = eth_validate_addr, | ||
| 1146 | }; | 1148 | }; |
| 1147 | 1149 | ||
| 1148 | static int __devinit eth_init_one(struct platform_device *pdev) | 1150 | static int __devinit eth_init_one(struct platform_device *pdev) |
diff --git a/drivers/net/atlx/atl2.c b/drivers/net/atlx/atl2.c index c734b1983ec..204db961029 100644 --- a/drivers/net/atlx/atl2.c +++ b/drivers/net/atlx/atl2.c | |||
| @@ -2071,7 +2071,7 @@ static int atl2_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) | |||
| 2071 | if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE)) | 2071 | if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE)) |
| 2072 | return -EOPNOTSUPP; | 2072 | return -EOPNOTSUPP; |
| 2073 | 2073 | ||
| 2074 | if (wol->wolopts & (WAKE_MCAST|WAKE_BCAST|WAKE_MCAST)) | 2074 | if (wol->wolopts & (WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)) |
| 2075 | return -EOPNOTSUPP; | 2075 | return -EOPNOTSUPP; |
| 2076 | 2076 | ||
| 2077 | /* these settings will always override what we currently have */ | 2077 | /* these settings will always override what we currently have */ |
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c index 3eee666a9cd..55445f980f9 100644 --- a/drivers/net/cs89x0.c +++ b/drivers/net/cs89x0.c | |||
| @@ -1524,6 +1524,7 @@ static void net_timeout(struct net_device *dev) | |||
| 1524 | static int net_send_packet(struct sk_buff *skb, struct net_device *dev) | 1524 | static int net_send_packet(struct sk_buff *skb, struct net_device *dev) |
| 1525 | { | 1525 | { |
| 1526 | struct net_local *lp = netdev_priv(dev); | 1526 | struct net_local *lp = netdev_priv(dev); |
| 1527 | unsigned long flags; | ||
| 1527 | 1528 | ||
| 1528 | if (net_debug > 3) { | 1529 | if (net_debug > 3) { |
| 1529 | printk("%s: sent %d byte packet of type %x\n", | 1530 | printk("%s: sent %d byte packet of type %x\n", |
| @@ -1535,7 +1536,7 @@ static int net_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
| 1535 | ask the chip to start transmitting before the | 1536 | ask the chip to start transmitting before the |
| 1536 | whole packet has been completely uploaded. */ | 1537 | whole packet has been completely uploaded. */ |
| 1537 | 1538 | ||
| 1538 | spin_lock_irq(&lp->lock); | 1539 | spin_lock_irqsave(&lp->lock, flags); |
| 1539 | netif_stop_queue(dev); | 1540 | netif_stop_queue(dev); |
| 1540 | 1541 | ||
| 1541 | /* initiate a transmit sequence */ | 1542 | /* initiate a transmit sequence */ |
| @@ -1549,13 +1550,13 @@ static int net_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
| 1549 | * we're waiting for TxOk, so return 1 and requeue this packet. | 1550 | * we're waiting for TxOk, so return 1 and requeue this packet. |
| 1550 | */ | 1551 | */ |
| 1551 | 1552 | ||
| 1552 | spin_unlock_irq(&lp->lock); | 1553 | spin_unlock_irqrestore(&lp->lock, flags); |
| 1553 | if (net_debug) printk("cs89x0: Tx buffer not free!\n"); | 1554 | if (net_debug) printk("cs89x0: Tx buffer not free!\n"); |
| 1554 | return NETDEV_TX_BUSY; | 1555 | return NETDEV_TX_BUSY; |
| 1555 | } | 1556 | } |
| 1556 | /* Write the contents of the packet */ | 1557 | /* Write the contents of the packet */ |
| 1557 | writewords(dev->base_addr, TX_FRAME_PORT,skb->data,(skb->len+1) >>1); | 1558 | writewords(dev->base_addr, TX_FRAME_PORT,skb->data,(skb->len+1) >>1); |
| 1558 | spin_unlock_irq(&lp->lock); | 1559 | spin_unlock_irqrestore(&lp->lock, flags); |
| 1559 | lp->stats.tx_bytes += skb->len; | 1560 | lp->stats.tx_bytes += skb->len; |
| 1560 | dev->trans_start = jiffies; | 1561 | dev->trans_start = jiffies; |
| 1561 | dev_kfree_skb (skb); | 1562 | dev_kfree_skb (skb); |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index 147c4b088fb..e8d46cc1bec 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
| @@ -3080,7 +3080,9 @@ static const struct net_device_ops ehea_netdev_ops = { | |||
| 3080 | .ndo_poll_controller = ehea_netpoll, | 3080 | .ndo_poll_controller = ehea_netpoll, |
| 3081 | #endif | 3081 | #endif |
| 3082 | .ndo_get_stats = ehea_get_stats, | 3082 | .ndo_get_stats = ehea_get_stats, |
| 3083 | .ndo_change_mtu = eth_change_mtu, | ||
| 3083 | .ndo_set_mac_address = ehea_set_mac_addr, | 3084 | .ndo_set_mac_address = ehea_set_mac_addr, |
| 3085 | .ndo_validate_addr = eth_validate_addr, | ||
| 3084 | .ndo_set_multicast_list = ehea_set_multicast_list, | 3086 | .ndo_set_multicast_list = ehea_set_multicast_list, |
| 3085 | .ndo_change_mtu = ehea_change_mtu, | 3087 | .ndo_change_mtu = ehea_change_mtu, |
| 3086 | .ndo_vlan_rx_register = ehea_vlan_rx_register, | 3088 | .ndo_vlan_rx_register = ehea_vlan_rx_register, |
diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 0f19b743749..d4b98074b1b 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c | |||
| @@ -1642,6 +1642,7 @@ static const struct net_device_ops fec_netdev_ops = { | |||
| 1642 | .ndo_stop = fec_enet_close, | 1642 | .ndo_stop = fec_enet_close, |
| 1643 | .ndo_start_xmit = fec_enet_start_xmit, | 1643 | .ndo_start_xmit = fec_enet_start_xmit, |
| 1644 | .ndo_set_multicast_list = set_multicast_list, | 1644 | .ndo_set_multicast_list = set_multicast_list, |
| 1645 | .ndo_change_mtu = eth_change_mtu, | ||
| 1645 | .ndo_validate_addr = eth_validate_addr, | 1646 | .ndo_validate_addr = eth_validate_addr, |
| 1646 | .ndo_tx_timeout = fec_timeout, | 1647 | .ndo_tx_timeout = fec_timeout, |
| 1647 | .ndo_set_mac_address = fec_set_mac_address, | 1648 | .ndo_set_mac_address = fec_set_mac_address, |
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 4ae1d259fce..43d813ed9f4 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
| @@ -156,6 +156,8 @@ static const struct net_device_ops gfar_netdev_ops = { | |||
| 156 | .ndo_tx_timeout = gfar_timeout, | 156 | .ndo_tx_timeout = gfar_timeout, |
| 157 | .ndo_do_ioctl = gfar_ioctl, | 157 | .ndo_do_ioctl = gfar_ioctl, |
| 158 | .ndo_vlan_rx_register = gfar_vlan_rx_register, | 158 | .ndo_vlan_rx_register = gfar_vlan_rx_register, |
| 159 | .ndo_set_mac_address = eth_mac_addr, | ||
| 160 | .ndo_validate_addr = eth_validate_addr, | ||
| 159 | #ifdef CONFIG_NET_POLL_CONTROLLER | 161 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 160 | .ndo_poll_controller = gfar_netpoll, | 162 | .ndo_poll_controller = gfar_netpoll, |
| 161 | #endif | 163 | #endif |
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index be480292aba..adb09d32625 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
| @@ -127,14 +127,48 @@ static void igb_restore_vlan(struct igb_adapter *); | |||
| 127 | static void igb_ping_all_vfs(struct igb_adapter *); | 127 | static void igb_ping_all_vfs(struct igb_adapter *); |
| 128 | static void igb_msg_task(struct igb_adapter *); | 128 | static void igb_msg_task(struct igb_adapter *); |
| 129 | static int igb_rcv_msg_from_vf(struct igb_adapter *, u32); | 129 | static int igb_rcv_msg_from_vf(struct igb_adapter *, u32); |
| 130 | static inline void igb_set_rah_pool(struct e1000_hw *, int , int); | ||
| 131 | static void igb_set_mc_list_pools(struct igb_adapter *, int, u16); | 130 | static void igb_set_mc_list_pools(struct igb_adapter *, int, u16); |
| 132 | static void igb_vmm_control(struct igb_adapter *); | 131 | static void igb_vmm_control(struct igb_adapter *); |
| 133 | static inline void igb_set_vmolr(struct e1000_hw *, int); | ||
| 134 | static inline int igb_set_vf_rlpml(struct igb_adapter *, int, int); | ||
| 135 | static int igb_set_vf_mac(struct igb_adapter *adapter, int, unsigned char *); | 132 | static int igb_set_vf_mac(struct igb_adapter *adapter, int, unsigned char *); |
| 136 | static void igb_restore_vf_multicasts(struct igb_adapter *adapter); | 133 | static void igb_restore_vf_multicasts(struct igb_adapter *adapter); |
| 137 | 134 | ||
| 135 | static inline void igb_set_vmolr(struct e1000_hw *hw, int vfn) | ||
| 136 | { | ||
| 137 | u32 reg_data; | ||
| 138 | |||
| 139 | reg_data = rd32(E1000_VMOLR(vfn)); | ||
| 140 | reg_data |= E1000_VMOLR_BAM | /* Accept broadcast */ | ||
| 141 | E1000_VMOLR_ROPE | /* Accept packets matched in UTA */ | ||
| 142 | E1000_VMOLR_ROMPE | /* Accept packets matched in MTA */ | ||
| 143 | E1000_VMOLR_AUPE | /* Accept untagged packets */ | ||
| 144 | E1000_VMOLR_STRVLAN; /* Strip vlan tags */ | ||
| 145 | wr32(E1000_VMOLR(vfn), reg_data); | ||
| 146 | } | ||
| 147 | |||
| 148 | static inline int igb_set_vf_rlpml(struct igb_adapter *adapter, int size, | ||
| 149 | int vfn) | ||
| 150 | { | ||
| 151 | struct e1000_hw *hw = &adapter->hw; | ||
| 152 | u32 vmolr; | ||
| 153 | |||
| 154 | vmolr = rd32(E1000_VMOLR(vfn)); | ||
| 155 | vmolr &= ~E1000_VMOLR_RLPML_MASK; | ||
| 156 | vmolr |= size | E1000_VMOLR_LPE; | ||
| 157 | wr32(E1000_VMOLR(vfn), vmolr); | ||
| 158 | |||
| 159 | return 0; | ||
| 160 | } | ||
| 161 | |||
| 162 | static inline void igb_set_rah_pool(struct e1000_hw *hw, int pool, int entry) | ||
| 163 | { | ||
| 164 | u32 reg_data; | ||
| 165 | |||
| 166 | reg_data = rd32(E1000_RAH(entry)); | ||
| 167 | reg_data &= ~E1000_RAH_POOL_MASK; | ||
| 168 | reg_data |= E1000_RAH_POOL_1 << pool;; | ||
| 169 | wr32(E1000_RAH(entry), reg_data); | ||
| 170 | } | ||
| 171 | |||
| 138 | #ifdef CONFIG_PM | 172 | #ifdef CONFIG_PM |
| 139 | static int igb_suspend(struct pci_dev *, pm_message_t); | 173 | static int igb_suspend(struct pci_dev *, pm_message_t); |
| 140 | static int igb_resume(struct pci_dev *); | 174 | static int igb_resume(struct pci_dev *); |
| @@ -5418,43 +5452,6 @@ static void igb_io_resume(struct pci_dev *pdev) | |||
| 5418 | igb_get_hw_control(adapter); | 5452 | igb_get_hw_control(adapter); |
| 5419 | } | 5453 | } |
| 5420 | 5454 | ||
| 5421 | static inline void igb_set_vmolr(struct e1000_hw *hw, int vfn) | ||
| 5422 | { | ||
| 5423 | u32 reg_data; | ||
| 5424 | |||
| 5425 | reg_data = rd32(E1000_VMOLR(vfn)); | ||
| 5426 | reg_data |= E1000_VMOLR_BAM | /* Accept broadcast */ | ||
| 5427 | E1000_VMOLR_ROPE | /* Accept packets matched in UTA */ | ||
| 5428 | E1000_VMOLR_ROMPE | /* Accept packets matched in MTA */ | ||
| 5429 | E1000_VMOLR_AUPE | /* Accept untagged packets */ | ||
| 5430 | E1000_VMOLR_STRVLAN; /* Strip vlan tags */ | ||
| 5431 | wr32(E1000_VMOLR(vfn), reg_data); | ||
| 5432 | } | ||
| 5433 | |||
| 5434 | static inline int igb_set_vf_rlpml(struct igb_adapter *adapter, int size, | ||
| 5435 | int vfn) | ||
| 5436 | { | ||
| 5437 | struct e1000_hw *hw = &adapter->hw; | ||
| 5438 | u32 vmolr; | ||
| 5439 | |||
| 5440 | vmolr = rd32(E1000_VMOLR(vfn)); | ||
| 5441 | vmolr &= ~E1000_VMOLR_RLPML_MASK; | ||
| 5442 | vmolr |= size | E1000_VMOLR_LPE; | ||
| 5443 | wr32(E1000_VMOLR(vfn), vmolr); | ||
| 5444 | |||
| 5445 | return 0; | ||
| 5446 | } | ||
| 5447 | |||
| 5448 | static inline void igb_set_rah_pool(struct e1000_hw *hw, int pool, int entry) | ||
| 5449 | { | ||
| 5450 | u32 reg_data; | ||
| 5451 | |||
| 5452 | reg_data = rd32(E1000_RAH(entry)); | ||
| 5453 | reg_data &= ~E1000_RAH_POOL_MASK; | ||
| 5454 | reg_data |= E1000_RAH_POOL_1 << pool;; | ||
| 5455 | wr32(E1000_RAH(entry), reg_data); | ||
| 5456 | } | ||
| 5457 | |||
| 5458 | static void igb_set_mc_list_pools(struct igb_adapter *adapter, | 5455 | static void igb_set_mc_list_pools(struct igb_adapter *adapter, |
| 5459 | int entry_count, u16 total_rar_filters) | 5456 | int entry_count, u16 total_rar_filters) |
| 5460 | { | 5457 | { |
diff --git a/drivers/net/isa-skeleton.c b/drivers/net/isa-skeleton.c index 73585fd8f29..d12377b8435 100644 --- a/drivers/net/isa-skeleton.c +++ b/drivers/net/isa-skeleton.c | |||
| @@ -430,7 +430,8 @@ static int net_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
| 430 | * hardware interrupt handler. Queue flow control is | 430 | * hardware interrupt handler. Queue flow control is |
| 431 | * thus managed under this lock as well. | 431 | * thus managed under this lock as well. |
| 432 | */ | 432 | */ |
| 433 | spin_lock_irq(&np->lock); | 433 | unsigned long flags; |
| 434 | spin_lock_irqsave(&np->lock, flags); | ||
| 434 | 435 | ||
| 435 | add_to_tx_ring(np, skb, length); | 436 | add_to_tx_ring(np, skb, length); |
| 436 | dev->trans_start = jiffies; | 437 | dev->trans_start = jiffies; |
| @@ -446,7 +447,7 @@ static int net_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
| 446 | * is when the transmit statistics are updated. | 447 | * is when the transmit statistics are updated. |
| 447 | */ | 448 | */ |
| 448 | 449 | ||
| 449 | spin_unlock_irq(&np->lock); | 450 | spin_unlock_irqrestore(&np->lock, flags); |
| 450 | #else | 451 | #else |
| 451 | /* This is the case for older hardware which takes | 452 | /* This is the case for older hardware which takes |
| 452 | * a single transmit buffer at a time, and it is | 453 | * a single transmit buffer at a time, and it is |
diff --git a/drivers/net/mlx4/cmd.c b/drivers/net/mlx4/cmd.c index 2845a0560b8..65ec77dc31f 100644 --- a/drivers/net/mlx4/cmd.c +++ b/drivers/net/mlx4/cmd.c | |||
| @@ -80,7 +80,9 @@ enum { | |||
| 80 | /* Bad management packet (silently discarded): */ | 80 | /* Bad management packet (silently discarded): */ |
| 81 | CMD_STAT_BAD_PKT = 0x30, | 81 | CMD_STAT_BAD_PKT = 0x30, |
| 82 | /* More outstanding CQEs in CQ than new CQ size: */ | 82 | /* More outstanding CQEs in CQ than new CQ size: */ |
| 83 | CMD_STAT_BAD_SIZE = 0x40 | 83 | CMD_STAT_BAD_SIZE = 0x40, |
| 84 | /* Multi Function device support required: */ | ||
| 85 | CMD_STAT_MULTI_FUNC_REQ = 0x50, | ||
| 84 | }; | 86 | }; |
| 85 | 87 | ||
| 86 | enum { | 88 | enum { |
| @@ -128,6 +130,7 @@ static int mlx4_status_to_errno(u8 status) | |||
| 128 | [CMD_STAT_LAM_NOT_PRE] = -EAGAIN, | 130 | [CMD_STAT_LAM_NOT_PRE] = -EAGAIN, |
| 129 | [CMD_STAT_BAD_PKT] = -EINVAL, | 131 | [CMD_STAT_BAD_PKT] = -EINVAL, |
| 130 | [CMD_STAT_BAD_SIZE] = -ENOMEM, | 132 | [CMD_STAT_BAD_SIZE] = -ENOMEM, |
| 133 | [CMD_STAT_MULTI_FUNC_REQ] = -EACCES, | ||
| 131 | }; | 134 | }; |
| 132 | 135 | ||
| 133 | if (status >= ARRAY_SIZE(trans_table) || | 136 | if (status >= ARRAY_SIZE(trans_table) || |
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c index 018348c0119..dac621b1e9f 100644 --- a/drivers/net/mlx4/main.c +++ b/drivers/net/mlx4/main.c | |||
| @@ -729,7 +729,10 @@ static int mlx4_init_hca(struct mlx4_dev *dev) | |||
| 729 | 729 | ||
| 730 | err = mlx4_QUERY_FW(dev); | 730 | err = mlx4_QUERY_FW(dev); |
| 731 | if (err) { | 731 | if (err) { |
| 732 | mlx4_err(dev, "QUERY_FW command failed, aborting.\n"); | 732 | if (err == -EACCES) |
| 733 | mlx4_info(dev, "non-primary physical function, skipping.\n"); | ||
| 734 | else | ||
| 735 | mlx4_err(dev, "QUERY_FW command failed, aborting.\n"); | ||
| 733 | return err; | 736 | return err; |
| 734 | } | 737 | } |
| 735 | 738 | ||
| @@ -1285,6 +1288,7 @@ static struct pci_device_id mlx4_pci_table[] = { | |||
| 1285 | { PCI_VDEVICE(MELLANOX, 0x6750) }, /* MT25408 "Hermon" EN 10GigE PCIe gen2 */ | 1288 | { PCI_VDEVICE(MELLANOX, 0x6750) }, /* MT25408 "Hermon" EN 10GigE PCIe gen2 */ |
| 1286 | { PCI_VDEVICE(MELLANOX, 0x6372) }, /* MT25458 ConnectX EN 10GBASE-T 10GigE */ | 1289 | { PCI_VDEVICE(MELLANOX, 0x6372) }, /* MT25458 ConnectX EN 10GBASE-T 10GigE */ |
| 1287 | { PCI_VDEVICE(MELLANOX, 0x675a) }, /* MT25458 ConnectX EN 10GBASE-T+Gen2 10GigE */ | 1290 | { PCI_VDEVICE(MELLANOX, 0x675a) }, /* MT25458 ConnectX EN 10GBASE-T+Gen2 10GigE */ |
| 1291 | { PCI_VDEVICE(MELLANOX, 0x6764) }, /* MT26468 ConnectX EN 10GigE PCIe gen2*/ | ||
| 1288 | { 0, } | 1292 | { 0, } |
| 1289 | }; | 1293 | }; |
| 1290 | 1294 | ||
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index eba937c4637..b10fedd8214 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
| @@ -134,8 +134,10 @@ int phy_scan_fixups(struct phy_device *phydev) | |||
| 134 | 134 | ||
| 135 | err = fixup->run(phydev); | 135 | err = fixup->run(phydev); |
| 136 | 136 | ||
| 137 | if (err < 0) | 137 | if (err < 0) { |
| 138 | mutex_unlock(&phy_fixup_lock); | ||
| 138 | return err; | 139 | return err; |
| 140 | } | ||
| 139 | } | 141 | } |
| 140 | } | 142 | } |
| 141 | mutex_unlock(&phy_fixup_lock); | 143 | mutex_unlock(&phy_fixup_lock); |
diff --git a/drivers/net/plip.c b/drivers/net/plip.c index 7a62f781fef..2ca8b0d84ee 100644 --- a/drivers/net/plip.c +++ b/drivers/net/plip.c | |||
| @@ -270,6 +270,9 @@ static const struct net_device_ops plip_netdev_ops = { | |||
| 270 | .ndo_stop = plip_close, | 270 | .ndo_stop = plip_close, |
| 271 | .ndo_start_xmit = plip_tx_packet, | 271 | .ndo_start_xmit = plip_tx_packet, |
| 272 | .ndo_do_ioctl = plip_ioctl, | 272 | .ndo_do_ioctl = plip_ioctl, |
| 273 | .ndo_change_mtu = eth_change_mtu, | ||
| 274 | .ndo_set_mac_address = eth_mac_addr, | ||
| 275 | .ndo_validate_addr = eth_validate_addr, | ||
| 273 | }; | 276 | }; |
| 274 | 277 | ||
| 275 | /* Entry point of PLIP driver. | 278 | /* Entry point of PLIP driver. |
diff --git a/drivers/net/ppp_async.c b/drivers/net/ppp_async.c index 17c116bb332..6de8399d6dd 100644 --- a/drivers/net/ppp_async.c +++ b/drivers/net/ppp_async.c | |||
| @@ -356,6 +356,7 @@ ppp_asynctty_receive(struct tty_struct *tty, const unsigned char *buf, | |||
| 356 | if (!skb_queue_empty(&ap->rqueue)) | 356 | if (!skb_queue_empty(&ap->rqueue)) |
| 357 | tasklet_schedule(&ap->tsk); | 357 | tasklet_schedule(&ap->tsk); |
| 358 | ap_put(ap); | 358 | ap_put(ap); |
| 359 | tty_unthrottle(tty); | ||
| 359 | } | 360 | } |
| 360 | 361 | ||
| 361 | static void | 362 | static void |
diff --git a/drivers/net/ppp_synctty.c b/drivers/net/ppp_synctty.c index aa3d39f38e2..d2fa2db1358 100644 --- a/drivers/net/ppp_synctty.c +++ b/drivers/net/ppp_synctty.c | |||
| @@ -397,6 +397,7 @@ ppp_sync_receive(struct tty_struct *tty, const unsigned char *buf, | |||
| 397 | if (!skb_queue_empty(&ap->rqueue)) | 397 | if (!skb_queue_empty(&ap->rqueue)) |
| 398 | tasklet_schedule(&ap->tsk); | 398 | tasklet_schedule(&ap->tsk); |
| 399 | sp_put(ap); | 399 | sp_put(ap); |
| 400 | tty_unthrottle(tty); | ||
| 400 | } | 401 | } |
| 401 | 402 | ||
| 402 | static void | 403 | static void |
diff --git a/drivers/net/ps3_gelic_net.c b/drivers/net/ps3_gelic_net.c index d1a5fb4d6ac..a3932c9f340 100644 --- a/drivers/net/ps3_gelic_net.c +++ b/drivers/net/ps3_gelic_net.c | |||
| @@ -1411,6 +1411,7 @@ static const struct net_device_ops gelic_netdevice_ops = { | |||
| 1411 | .ndo_set_multicast_list = gelic_net_set_multi, | 1411 | .ndo_set_multicast_list = gelic_net_set_multi, |
| 1412 | .ndo_change_mtu = gelic_net_change_mtu, | 1412 | .ndo_change_mtu = gelic_net_change_mtu, |
| 1413 | .ndo_tx_timeout = gelic_net_tx_timeout, | 1413 | .ndo_tx_timeout = gelic_net_tx_timeout, |
| 1414 | .ndo_set_mac_address = eth_mac_addr, | ||
| 1414 | .ndo_validate_addr = eth_validate_addr, | 1415 | .ndo_validate_addr = eth_validate_addr, |
| 1415 | #ifdef CONFIG_NET_POLL_CONTROLLER | 1416 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 1416 | .ndo_poll_controller = gelic_net_poll_controller, | 1417 | .ndo_poll_controller = gelic_net_poll_controller, |
diff --git a/drivers/net/ps3_gelic_wireless.c b/drivers/net/ps3_gelic_wireless.c index b6b3ca9bdb2..6932b08d746 100644 --- a/drivers/net/ps3_gelic_wireless.c +++ b/drivers/net/ps3_gelic_wireless.c | |||
| @@ -2707,6 +2707,7 @@ static const struct net_device_ops gelic_wl_netdevice_ops = { | |||
| 2707 | .ndo_set_multicast_list = gelic_net_set_multi, | 2707 | .ndo_set_multicast_list = gelic_net_set_multi, |
| 2708 | .ndo_change_mtu = gelic_net_change_mtu, | 2708 | .ndo_change_mtu = gelic_net_change_mtu, |
| 2709 | .ndo_tx_timeout = gelic_net_tx_timeout, | 2709 | .ndo_tx_timeout = gelic_net_tx_timeout, |
| 2710 | .ndo_set_mac_address = eth_mac_addr, | ||
| 2710 | .ndo_validate_addr = eth_validate_addr, | 2711 | .ndo_validate_addr = eth_validate_addr, |
| 2711 | #ifdef CONFIG_NET_POLL_CONTROLLER | 2712 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 2712 | .ndo_poll_controller = gelic_net_poll_controller, | 2713 | .ndo_poll_controller = gelic_net_poll_controller, |
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c index fdcbaf8dfa7..1c70e999cc5 100644 --- a/drivers/net/smc91x.c +++ b/drivers/net/smc91x.c | |||
| @@ -1774,6 +1774,7 @@ static const struct net_device_ops smc_netdev_ops = { | |||
| 1774 | .ndo_start_xmit = smc_hard_start_xmit, | 1774 | .ndo_start_xmit = smc_hard_start_xmit, |
| 1775 | .ndo_tx_timeout = smc_timeout, | 1775 | .ndo_tx_timeout = smc_timeout, |
| 1776 | .ndo_set_multicast_list = smc_set_multicast_list, | 1776 | .ndo_set_multicast_list = smc_set_multicast_list, |
| 1777 | .ndo_change_mtu = eth_change_mtu, | ||
| 1777 | .ndo_validate_addr = eth_validate_addr, | 1778 | .ndo_validate_addr = eth_validate_addr, |
| 1778 | .ndo_set_mac_address = eth_mac_addr, | 1779 | .ndo_set_mac_address = eth_mac_addr, |
| 1779 | #ifdef CONFIG_NET_POLL_CONTROLLER | 1780 | #ifdef CONFIG_NET_POLL_CONTROLLER |
diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c index 66067f9d91c..94b6d2658dd 100644 --- a/drivers/net/smsc911x.c +++ b/drivers/net/smsc911x.c | |||
| @@ -1779,6 +1779,7 @@ static const struct net_device_ops smsc911x_netdev_ops = { | |||
| 1779 | .ndo_get_stats = smsc911x_get_stats, | 1779 | .ndo_get_stats = smsc911x_get_stats, |
| 1780 | .ndo_set_multicast_list = smsc911x_set_multicast_list, | 1780 | .ndo_set_multicast_list = smsc911x_set_multicast_list, |
| 1781 | .ndo_do_ioctl = smsc911x_do_ioctl, | 1781 | .ndo_do_ioctl = smsc911x_do_ioctl, |
| 1782 | .ndo_change_mtu = eth_change_mtu, | ||
| 1782 | .ndo_validate_addr = eth_validate_addr, | 1783 | .ndo_validate_addr = eth_validate_addr, |
| 1783 | .ndo_set_mac_address = smsc911x_set_mac_address, | 1784 | .ndo_set_mac_address = smsc911x_set_mac_address, |
| 1784 | #ifdef CONFIG_NET_POLL_CONTROLLER | 1785 | #ifdef CONFIG_NET_POLL_CONTROLLER |
diff --git a/drivers/net/sunvnet.c b/drivers/net/sunvnet.c index a82fb2aca4c..f1e5e4542c2 100644 --- a/drivers/net/sunvnet.c +++ b/drivers/net/sunvnet.c | |||
| @@ -1016,7 +1016,9 @@ static const struct net_device_ops vnet_ops = { | |||
| 1016 | .ndo_open = vnet_open, | 1016 | .ndo_open = vnet_open, |
| 1017 | .ndo_stop = vnet_close, | 1017 | .ndo_stop = vnet_close, |
| 1018 | .ndo_set_multicast_list = vnet_set_rx_mode, | 1018 | .ndo_set_multicast_list = vnet_set_rx_mode, |
| 1019 | .ndo_change_mtu = eth_change_mtu, | ||
| 1019 | .ndo_set_mac_address = vnet_set_mac_addr, | 1020 | .ndo_set_mac_address = vnet_set_mac_addr, |
| 1021 | .ndo_validate_addr = eth_validate_addr, | ||
| 1020 | .ndo_tx_timeout = vnet_tx_timeout, | 1022 | .ndo_tx_timeout = vnet_tx_timeout, |
| 1021 | .ndo_change_mtu = vnet_change_mtu, | 1023 | .ndo_change_mtu = vnet_change_mtu, |
| 1022 | .ndo_start_xmit = vnet_start_xmit, | 1024 | .ndo_start_xmit = vnet_start_xmit, |
diff --git a/drivers/net/usb/kaweth.c b/drivers/net/usb/kaweth.c index e0131478971..1f9ec29fce5 100644 --- a/drivers/net/usb/kaweth.c +++ b/drivers/net/usb/kaweth.c | |||
| @@ -999,6 +999,9 @@ static const struct net_device_ops kaweth_netdev_ops = { | |||
| 999 | .ndo_tx_timeout = kaweth_tx_timeout, | 999 | .ndo_tx_timeout = kaweth_tx_timeout, |
| 1000 | .ndo_set_multicast_list = kaweth_set_rx_mode, | 1000 | .ndo_set_multicast_list = kaweth_set_rx_mode, |
| 1001 | .ndo_get_stats = kaweth_netdev_stats, | 1001 | .ndo_get_stats = kaweth_netdev_stats, |
| 1002 | .ndo_change_mtu = eth_change_mtu, | ||
| 1003 | .ndo_set_mac_address = eth_mac_addr, | ||
| 1004 | .ndo_validate_addr = eth_validate_addr, | ||
| 1002 | }; | 1005 | }; |
| 1003 | 1006 | ||
| 1004 | static int kaweth_probe( | 1007 | static int kaweth_probe( |
diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c index 73acbd244aa..631d269ac98 100644 --- a/drivers/net/usb/pegasus.c +++ b/drivers/net/usb/pegasus.c | |||
| @@ -1493,6 +1493,9 @@ static const struct net_device_ops pegasus_netdev_ops = { | |||
| 1493 | .ndo_set_multicast_list = pegasus_set_multicast, | 1493 | .ndo_set_multicast_list = pegasus_set_multicast, |
| 1494 | .ndo_get_stats = pegasus_netdev_stats, | 1494 | .ndo_get_stats = pegasus_netdev_stats, |
| 1495 | .ndo_tx_timeout = pegasus_tx_timeout, | 1495 | .ndo_tx_timeout = pegasus_tx_timeout, |
| 1496 | .ndo_change_mtu = eth_change_mtu, | ||
| 1497 | .ndo_set_mac_address = eth_mac_addr, | ||
| 1498 | .ndo_validate_addr = eth_validate_addr, | ||
| 1496 | }; | 1499 | }; |
| 1497 | 1500 | ||
| 1498 | static struct usb_driver pegasus_driver = { | 1501 | static struct usb_driver pegasus_driver = { |
diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c index d3489a3c4c0..88c30a58b4b 100644 --- a/drivers/net/via-rhine.c +++ b/drivers/net/via-rhine.c | |||
| @@ -621,6 +621,7 @@ static const struct net_device_ops rhine_netdev_ops = { | |||
| 621 | .ndo_start_xmit = rhine_start_tx, | 621 | .ndo_start_xmit = rhine_start_tx, |
| 622 | .ndo_get_stats = rhine_get_stats, | 622 | .ndo_get_stats = rhine_get_stats, |
| 623 | .ndo_set_multicast_list = rhine_set_rx_mode, | 623 | .ndo_set_multicast_list = rhine_set_rx_mode, |
| 624 | .ndo_change_mtu = eth_change_mtu, | ||
| 624 | .ndo_validate_addr = eth_validate_addr, | 625 | .ndo_validate_addr = eth_validate_addr, |
| 625 | .ndo_set_mac_address = eth_mac_addr, | 626 | .ndo_set_mac_address = eth_mac_addr, |
| 626 | .ndo_do_ioctl = netdev_ioctl, | 627 | .ndo_do_ioctl = netdev_ioctl, |
diff --git a/drivers/net/wireless/orinoco/main.c b/drivers/net/wireless/orinoco/main.c index 345593c4acc..a370e510f19 100644 --- a/drivers/net/wireless/orinoco/main.c +++ b/drivers/net/wireless/orinoco/main.c | |||
| @@ -2521,6 +2521,8 @@ static const struct net_device_ops orinoco_netdev_ops = { | |||
| 2521 | .ndo_start_xmit = orinoco_xmit, | 2521 | .ndo_start_xmit = orinoco_xmit, |
| 2522 | .ndo_set_multicast_list = orinoco_set_multicast_list, | 2522 | .ndo_set_multicast_list = orinoco_set_multicast_list, |
| 2523 | .ndo_change_mtu = orinoco_change_mtu, | 2523 | .ndo_change_mtu = orinoco_change_mtu, |
| 2524 | .ndo_set_mac_address = eth_mac_addr, | ||
| 2525 | .ndo_validate_addr = eth_validate_addr, | ||
| 2524 | .ndo_tx_timeout = orinoco_tx_timeout, | 2526 | .ndo_tx_timeout = orinoco_tx_timeout, |
| 2525 | .ndo_get_stats = orinoco_get_stats, | 2527 | .ndo_get_stats = orinoco_get_stats, |
| 2526 | }; | 2528 | }; |
| @@ -2555,7 +2557,6 @@ struct net_device | |||
| 2555 | priv->wireless_data.spy_data = &priv->spy_data; | 2557 | priv->wireless_data.spy_data = &priv->spy_data; |
| 2556 | dev->wireless_data = &priv->wireless_data; | 2558 | dev->wireless_data = &priv->wireless_data; |
| 2557 | #endif | 2559 | #endif |
| 2558 | /* we use the default eth_mac_addr for setting the MAC addr */ | ||
| 2559 | 2560 | ||
| 2560 | /* Reserve space in skb for the SNAP header */ | 2561 | /* Reserve space in skb for the SNAP header */ |
| 2561 | dev->hard_header_len += ENCAPS_OVERHEAD; | 2562 | dev->hard_header_len += ENCAPS_OVERHEAD; |
diff --git a/drivers/serial/bfin_sport_uart.c b/drivers/serial/bfin_sport_uart.c index 34b4ae0fe76..c108b1a0ce9 100644 --- a/drivers/serial/bfin_sport_uart.c +++ b/drivers/serial/bfin_sport_uart.c | |||
| @@ -236,7 +236,6 @@ static int sport_startup(struct uart_port *port) | |||
| 236 | int retval; | 236 | int retval; |
| 237 | 237 | ||
| 238 | pr_debug("%s enter\n", __func__); | 238 | pr_debug("%s enter\n", __func__); |
| 239 | memset(buffer, 20, '\0'); | ||
| 240 | snprintf(buffer, 20, "%s rx", up->name); | 239 | snprintf(buffer, 20, "%s rx", up->name); |
| 241 | retval = request_irq(up->rx_irq, sport_uart_rx_irq, IRQF_SAMPLE_RANDOM, buffer, up); | 240 | retval = request_irq(up->rx_irq, sport_uart_rx_irq, IRQF_SAMPLE_RANDOM, buffer, up); |
| 242 | if (retval) { | 241 | if (retval) { |
diff --git a/drivers/serial/msm_serial.c b/drivers/serial/msm_serial.c index 698048f64f5..f7c24baa141 100644 --- a/drivers/serial/msm_serial.c +++ b/drivers/serial/msm_serial.c | |||
| @@ -730,7 +730,6 @@ static int __devexit msm_serial_remove(struct platform_device *pdev) | |||
| 730 | } | 730 | } |
| 731 | 731 | ||
| 732 | static struct platform_driver msm_platform_driver = { | 732 | static struct platform_driver msm_platform_driver = { |
| 733 | .probe = msm_serial_probe, | ||
| 734 | .remove = msm_serial_remove, | 733 | .remove = msm_serial_remove, |
| 735 | .driver = { | 734 | .driver = { |
| 736 | .name = "msm_serial", | 735 | .name = "msm_serial", |
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 5b15d9d8896..e1f89416ef8 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
| @@ -750,7 +750,7 @@ static int acm_tty_chars_in_buffer(struct tty_struct *tty) | |||
| 750 | { | 750 | { |
| 751 | struct acm *acm = tty->driver_data; | 751 | struct acm *acm = tty->driver_data; |
| 752 | if (!ACM_READY(acm)) | 752 | if (!ACM_READY(acm)) |
| 753 | return -EINVAL; | 753 | return 0; |
| 754 | /* | 754 | /* |
| 755 | * This is inaccurate (overcounts), but it works. | 755 | * This is inaccurate (overcounts), but it works. |
| 756 | */ | 756 | */ |
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c index bfc5ce000ef..ccd4dd340d2 100644 --- a/drivers/usb/serial/mos7720.c +++ b/drivers/usb/serial/mos7720.c | |||
| @@ -521,7 +521,7 @@ static int mos7720_chars_in_buffer(struct tty_struct *tty) | |||
| 521 | mos7720_port = usb_get_serial_port_data(port); | 521 | mos7720_port = usb_get_serial_port_data(port); |
| 522 | if (mos7720_port == NULL) { | 522 | if (mos7720_port == NULL) { |
| 523 | dbg("%s:leaving ...........", __func__); | 523 | dbg("%s:leaving ...........", __func__); |
| 524 | return -ENODEV; | 524 | return 0; |
| 525 | } | 525 | } |
| 526 | 526 | ||
| 527 | for (i = 0; i < NUM_URBS; ++i) { | 527 | for (i = 0; i < NUM_URBS; ++i) { |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 14971a92699..3bc609fe224 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
| @@ -727,7 +727,7 @@ static int ti_write_room(struct tty_struct *tty) | |||
| 727 | dbg("%s - port %d", __func__, port->number); | 727 | dbg("%s - port %d", __func__, port->number); |
| 728 | 728 | ||
| 729 | if (tport == NULL) | 729 | if (tport == NULL) |
| 730 | return -ENODEV; | 730 | return 0; |
| 731 | 731 | ||
| 732 | spin_lock_irqsave(&tport->tp_lock, flags); | 732 | spin_lock_irqsave(&tport->tp_lock, flags); |
| 733 | room = ti_buf_space_avail(tport->tp_write_buf); | 733 | room = ti_buf_space_avail(tport->tp_write_buf); |
| @@ -748,7 +748,7 @@ static int ti_chars_in_buffer(struct tty_struct *tty) | |||
| 748 | dbg("%s - port %d", __func__, port->number); | 748 | dbg("%s - port %d", __func__, port->number); |
| 749 | 749 | ||
| 750 | if (tport == NULL) | 750 | if (tport == NULL) |
| 751 | return -ENODEV; | 751 | return 0; |
| 752 | 752 | ||
| 753 | spin_lock_irqsave(&tport->tp_lock, flags); | 753 | spin_lock_irqsave(&tport->tp_lock, flags); |
| 754 | chars = ti_buf_data_avail(tport->tp_write_buf); | 754 | chars = ti_buf_data_avail(tport->tp_write_buf); |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 8afcf08eba9..3b54b394017 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
| @@ -1119,12 +1119,13 @@ config FB_CARILLO_RANCH | |||
| 1119 | 1119 | ||
| 1120 | config FB_INTEL | 1120 | config FB_INTEL |
| 1121 | tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support (EXPERIMENTAL)" | 1121 | tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support (EXPERIMENTAL)" |
| 1122 | depends on EXPERIMENTAL && FB && PCI && X86 && AGP_INTEL | 1122 | depends on EXPERIMENTAL && FB && PCI && X86 && AGP_INTEL && EMBEDDED |
| 1123 | select FB_MODE_HELPERS | 1123 | select FB_MODE_HELPERS |
| 1124 | select FB_CFB_FILLRECT | 1124 | select FB_CFB_FILLRECT |
| 1125 | select FB_CFB_COPYAREA | 1125 | select FB_CFB_COPYAREA |
| 1126 | select FB_CFB_IMAGEBLIT | 1126 | select FB_CFB_IMAGEBLIT |
| 1127 | select FB_BOOT_VESA_SUPPORT if FB_INTEL = y | 1127 | select FB_BOOT_VESA_SUPPORT if FB_INTEL = y |
| 1128 | depends on !DRM_I915 | ||
| 1128 | help | 1129 | help |
| 1129 | This driver supports the on-board graphics built in to the Intel | 1130 | This driver supports the on-board graphics built in to the Intel |
| 1130 | 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets. | 1131 | 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets. |
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c index e641584e212..88716626744 100644 --- a/drivers/video/backlight/pwm_bl.c +++ b/drivers/video/backlight/pwm_bl.c | |||
| @@ -145,6 +145,8 @@ static int pwm_backlight_suspend(struct platform_device *pdev, | |||
| 145 | struct backlight_device *bl = platform_get_drvdata(pdev); | 145 | struct backlight_device *bl = platform_get_drvdata(pdev); |
| 146 | struct pwm_bl_data *pb = dev_get_drvdata(&bl->dev); | 146 | struct pwm_bl_data *pb = dev_get_drvdata(&bl->dev); |
| 147 | 147 | ||
| 148 | if (pb->notify) | ||
| 149 | pb->notify(0); | ||
| 148 | pwm_config(pb->pwm, 0, pb->period); | 150 | pwm_config(pb->pwm, 0, pb->period); |
| 149 | pwm_disable(pb->pwm); | 151 | pwm_disable(pb->pwm); |
| 150 | return 0; | 152 | return 0; |
diff --git a/drivers/video/fbmon.c b/drivers/video/fbmon.c index 5c1a2c01778..9ae9cd32bd0 100644 --- a/drivers/video/fbmon.c +++ b/drivers/video/fbmon.c | |||
| @@ -256,8 +256,8 @@ static void fix_edid(unsigned char *edid, int fix) | |||
| 256 | 256 | ||
| 257 | static int edid_checksum(unsigned char *edid) | 257 | static int edid_checksum(unsigned char *edid) |
| 258 | { | 258 | { |
| 259 | unsigned char i, csum = 0, all_null = 0; | 259 | unsigned char csum = 0, all_null = 0; |
| 260 | int err = 0, fix = check_edid(edid); | 260 | int i, err = 0, fix = check_edid(edid); |
| 261 | 261 | ||
| 262 | if (fix) | 262 | if (fix) |
| 263 | fix_edid(edid, fix); | 263 | fix_edid(edid, fix); |
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index 193c8f0e5cc..bcec78ffc76 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
| @@ -669,7 +669,7 @@ static int __init virtio_pci_init(void) | |||
| 669 | 669 | ||
| 670 | err = pci_register_driver(&virtio_pci_driver); | 670 | err = pci_register_driver(&virtio_pci_driver); |
| 671 | if (err) | 671 | if (err) |
| 672 | device_unregister(virtio_pci_root); | 672 | root_device_unregister(virtio_pci_root); |
| 673 | 673 | ||
| 674 | return err; | 674 | return err; |
| 675 | } | 675 | } |
diff --git a/drivers/watchdog/ep93xx_wdt.c b/drivers/watchdog/ep93xx_wdt.c index e9f950ff86e..cdd55e0d09f 100644 --- a/drivers/watchdog/ep93xx_wdt.c +++ b/drivers/watchdog/ep93xx_wdt.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/watchdog.h> | 29 | #include <linux/watchdog.h> |
| 30 | #include <linux/timer.h> | 30 | #include <linux/timer.h> |
| 31 | #include <linux/uaccess.h> | 31 | #include <linux/uaccess.h> |
| 32 | #include <linux/io.h> | ||
| 32 | #include <mach/hardware.h> | 33 | #include <mach/hardware.h> |
| 33 | 34 | ||
| 34 | #define WDT_VERSION "0.3" | 35 | #define WDT_VERSION "0.3" |
diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c index 6fcb1e7095c..92828281a30 100644 --- a/fs/9p/vfs_addr.c +++ b/fs/9p/vfs_addr.c | |||
| @@ -57,7 +57,7 @@ static int v9fs_vfs_readpage(struct file *filp, struct page *page) | |||
| 57 | buffer = kmap(page); | 57 | buffer = kmap(page); |
| 58 | offset = page_offset(page); | 58 | offset = page_offset(page); |
| 59 | 59 | ||
| 60 | retval = v9fs_file_readn(filp, buffer, NULL, offset, PAGE_CACHE_SIZE); | 60 | retval = v9fs_file_readn(filp, buffer, NULL, PAGE_CACHE_SIZE, offset); |
| 61 | if (retval < 0) | 61 | if (retval < 0) |
| 62 | goto done; | 62 | goto done; |
| 63 | 63 | ||
diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c index 7f19fefd3d4..42cec2a7c0c 100644 --- a/fs/cifs/cifs_debug.c +++ b/fs/cifs/cifs_debug.c | |||
| @@ -261,6 +261,8 @@ static ssize_t cifs_stats_proc_write(struct file *file, | |||
| 261 | atomic_set(&tcon->num_reads, 0); | 261 | atomic_set(&tcon->num_reads, 0); |
| 262 | atomic_set(&tcon->num_oplock_brks, 0); | 262 | atomic_set(&tcon->num_oplock_brks, 0); |
| 263 | atomic_set(&tcon->num_opens, 0); | 263 | atomic_set(&tcon->num_opens, 0); |
| 264 | atomic_set(&tcon->num_posixopens, 0); | ||
| 265 | atomic_set(&tcon->num_posixmkdirs, 0); | ||
| 264 | atomic_set(&tcon->num_closes, 0); | 266 | atomic_set(&tcon->num_closes, 0); |
| 265 | atomic_set(&tcon->num_deletes, 0); | 267 | atomic_set(&tcon->num_deletes, 0); |
| 266 | atomic_set(&tcon->num_mkdirs, 0); | 268 | atomic_set(&tcon->num_mkdirs, 0); |
| @@ -347,11 +349,15 @@ static int cifs_stats_proc_show(struct seq_file *m, void *v) | |||
| 347 | atomic_read(&tcon->num_locks), | 349 | atomic_read(&tcon->num_locks), |
| 348 | atomic_read(&tcon->num_hardlinks), | 350 | atomic_read(&tcon->num_hardlinks), |
| 349 | atomic_read(&tcon->num_symlinks)); | 351 | atomic_read(&tcon->num_symlinks)); |
| 350 | seq_printf(m, "\nOpens: %d Closes: %d" | 352 | seq_printf(m, "\nOpens: %d Closes: %d " |
| 351 | "Deletes: %d", | 353 | "Deletes: %d", |
| 352 | atomic_read(&tcon->num_opens), | 354 | atomic_read(&tcon->num_opens), |
| 353 | atomic_read(&tcon->num_closes), | 355 | atomic_read(&tcon->num_closes), |
| 354 | atomic_read(&tcon->num_deletes)); | 356 | atomic_read(&tcon->num_deletes)); |
| 357 | seq_printf(m, "\nPosix Opens: %d " | ||
| 358 | "Posix Mkdirs: %d", | ||
| 359 | atomic_read(&tcon->num_posixopens), | ||
| 360 | atomic_read(&tcon->num_posixmkdirs)); | ||
| 355 | seq_printf(m, "\nMkdirs: %d Rmdirs: %d", | 361 | seq_printf(m, "\nMkdirs: %d Rmdirs: %d", |
| 356 | atomic_read(&tcon->num_mkdirs), | 362 | atomic_read(&tcon->num_mkdirs), |
| 357 | atomic_read(&tcon->num_rmdirs)); | 363 | atomic_read(&tcon->num_rmdirs)); |
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 63f6cdfa563..6084d6379c0 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h | |||
| @@ -260,6 +260,8 @@ struct cifsTconInfo { | |||
| 260 | atomic_t num_closes; | 260 | atomic_t num_closes; |
| 261 | atomic_t num_deletes; | 261 | atomic_t num_deletes; |
| 262 | atomic_t num_mkdirs; | 262 | atomic_t num_mkdirs; |
| 263 | atomic_t num_posixopens; | ||
| 264 | atomic_t num_posixmkdirs; | ||
| 263 | atomic_t num_rmdirs; | 265 | atomic_t num_rmdirs; |
| 264 | atomic_t num_renames; | 266 | atomic_t num_renames; |
| 265 | atomic_t num_t2renames; | 267 | atomic_t num_t2renames; |
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 922f5fe2084..1866bc2927d 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
| @@ -1113,7 +1113,10 @@ PsxCreat: | |||
| 1113 | psx_create_err: | 1113 | psx_create_err: |
| 1114 | cifs_buf_release(pSMB); | 1114 | cifs_buf_release(pSMB); |
| 1115 | 1115 | ||
| 1116 | cifs_stats_inc(&tcon->num_mkdirs); | 1116 | if (posix_flags & SMB_O_DIRECTORY) |
| 1117 | cifs_stats_inc(&tcon->num_posixmkdirs); | ||
| 1118 | else | ||
| 1119 | cifs_stats_inc(&tcon->num_posixopens); | ||
| 1117 | 1120 | ||
| 1118 | if (rc == -EAGAIN) | 1121 | if (rc == -EAGAIN) |
| 1119 | goto PsxCreat; | 1122 | goto PsxCreat; |
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index e16d7592116..9bb5c875073 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
| @@ -2726,6 +2726,7 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses, | |||
| 2726 | strncpy(tcon->treeName, tree, MAX_TREE_SIZE); | 2726 | strncpy(tcon->treeName, tree, MAX_TREE_SIZE); |
| 2727 | 2727 | ||
| 2728 | /* mostly informational -- no need to fail on error here */ | 2728 | /* mostly informational -- no need to fail on error here */ |
| 2729 | kfree(tcon->nativeFileSystem); | ||
| 2729 | tcon->nativeFileSystem = cifs_strndup_from_ucs(bcc_ptr, | 2730 | tcon->nativeFileSystem = cifs_strndup_from_ucs(bcc_ptr, |
| 2730 | bytes_left, is_unicode, | 2731 | bytes_left, is_unicode, |
| 2731 | nls_codepage); | 2732 | nls_codepage); |
diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c index 205ec95b347..eb507c453c5 100644 --- a/fs/dlm/lock.c +++ b/fs/dlm/lock.c | |||
| @@ -435,7 +435,7 @@ static int search_rsb(struct dlm_ls *ls, char *name, int len, int b, | |||
| 435 | static int find_rsb(struct dlm_ls *ls, char *name, int namelen, | 435 | static int find_rsb(struct dlm_ls *ls, char *name, int namelen, |
| 436 | unsigned int flags, struct dlm_rsb **r_ret) | 436 | unsigned int flags, struct dlm_rsb **r_ret) |
| 437 | { | 437 | { |
| 438 | struct dlm_rsb *r, *tmp; | 438 | struct dlm_rsb *r = NULL, *tmp; |
| 439 | uint32_t hash, bucket; | 439 | uint32_t hash, bucket; |
| 440 | int error = -EINVAL; | 440 | int error = -EINVAL; |
| 441 | 441 | ||
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index cdb580a9c7a..618a60f0388 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c | |||
| @@ -902,7 +902,7 @@ static void tcp_connect_to_sock(struct connection *con) | |||
| 902 | int result = -EHOSTUNREACH; | 902 | int result = -EHOSTUNREACH; |
| 903 | struct sockaddr_storage saddr, src_addr; | 903 | struct sockaddr_storage saddr, src_addr; |
| 904 | int addr_len; | 904 | int addr_len; |
| 905 | struct socket *sock; | 905 | struct socket *sock = NULL; |
| 906 | 906 | ||
| 907 | if (con->nodeid == 0) { | 907 | if (con->nodeid == 0) { |
| 908 | log_print("attempt to connect sock 0 foiled"); | 908 | log_print("attempt to connect sock 0 foiled"); |
| @@ -962,6 +962,8 @@ out_err: | |||
| 962 | if (con->sock) { | 962 | if (con->sock) { |
| 963 | sock_release(con->sock); | 963 | sock_release(con->sock); |
| 964 | con->sock = NULL; | 964 | con->sock = NULL; |
| 965 | } else if (sock) { | ||
| 966 | sock_release(sock); | ||
| 965 | } | 967 | } |
| 966 | /* | 968 | /* |
| 967 | * Some errors are fatal and this list might need adjusting. For other | 969 | * Some errors are fatal and this list might need adjusting. For other |
diff --git a/fs/dlm/plock.c b/fs/dlm/plock.c index 894a32d438d..16f682e26c0 100644 --- a/fs/dlm/plock.c +++ b/fs/dlm/plock.c | |||
| @@ -353,7 +353,7 @@ static ssize_t dev_write(struct file *file, const char __user *u, size_t count, | |||
| 353 | { | 353 | { |
| 354 | struct dlm_plock_info info; | 354 | struct dlm_plock_info info; |
| 355 | struct plock_op *op; | 355 | struct plock_op *op; |
| 356 | int found = 0; | 356 | int found = 0, do_callback = 0; |
| 357 | 357 | ||
| 358 | if (count != sizeof(info)) | 358 | if (count != sizeof(info)) |
| 359 | return -EINVAL; | 359 | return -EINVAL; |
| @@ -366,21 +366,24 @@ static ssize_t dev_write(struct file *file, const char __user *u, size_t count, | |||
| 366 | 366 | ||
| 367 | spin_lock(&ops_lock); | 367 | spin_lock(&ops_lock); |
| 368 | list_for_each_entry(op, &recv_list, list) { | 368 | list_for_each_entry(op, &recv_list, list) { |
| 369 | if (op->info.fsid == info.fsid && op->info.number == info.number && | 369 | if (op->info.fsid == info.fsid && |
| 370 | op->info.number == info.number && | ||
| 370 | op->info.owner == info.owner) { | 371 | op->info.owner == info.owner) { |
| 372 | struct plock_xop *xop = (struct plock_xop *)op; | ||
| 371 | list_del_init(&op->list); | 373 | list_del_init(&op->list); |
| 372 | found = 1; | ||
| 373 | op->done = 1; | ||
| 374 | memcpy(&op->info, &info, sizeof(info)); | 374 | memcpy(&op->info, &info, sizeof(info)); |
| 375 | if (xop->callback) | ||
| 376 | do_callback = 1; | ||
| 377 | else | ||
| 378 | op->done = 1; | ||
| 379 | found = 1; | ||
| 375 | break; | 380 | break; |
| 376 | } | 381 | } |
| 377 | } | 382 | } |
| 378 | spin_unlock(&ops_lock); | 383 | spin_unlock(&ops_lock); |
| 379 | 384 | ||
| 380 | if (found) { | 385 | if (found) { |
| 381 | struct plock_xop *xop; | 386 | if (do_callback) |
| 382 | xop = (struct plock_xop *)op; | ||
| 383 | if (xop->callback) | ||
| 384 | dlm_plock_callback(op); | 387 | dlm_plock_callback(op); |
| 385 | else | 388 | else |
| 386 | wake_up(&recv_wq); | 389 | wake_up(&recv_wq); |
diff --git a/fs/gfs2/trace_gfs2.h b/fs/gfs2/trace_gfs2.h index 98d6ef1c1dc..148d55c1417 100644 --- a/fs/gfs2/trace_gfs2.h +++ b/fs/gfs2/trace_gfs2.h | |||
| @@ -1,12 +1,11 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM gfs2 | ||
| 3 | |||
| 1 | #if !defined(_TRACE_GFS2_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_GFS2_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_GFS2_H | 5 | #define _TRACE_GFS2_H |
| 3 | 6 | ||
| 4 | #include <linux/tracepoint.h> | 7 | #include <linux/tracepoint.h> |
| 5 | 8 | ||
| 6 | #undef TRACE_SYSTEM | ||
| 7 | #define TRACE_SYSTEM gfs2 | ||
| 8 | #define TRACE_INCLUDE_FILE trace_gfs2 | ||
| 9 | |||
| 10 | #include <linux/fs.h> | 9 | #include <linux/fs.h> |
| 11 | #include <linux/buffer_head.h> | 10 | #include <linux/buffer_head.h> |
| 12 | #include <linux/dlmconstants.h> | 11 | #include <linux/dlmconstants.h> |
| @@ -403,5 +402,6 @@ TRACE_EVENT(gfs2_block_alloc, | |||
| 403 | /* This part must be outside protection */ | 402 | /* This part must be outside protection */ |
| 404 | #undef TRACE_INCLUDE_PATH | 403 | #undef TRACE_INCLUDE_PATH |
| 405 | #define TRACE_INCLUDE_PATH . | 404 | #define TRACE_INCLUDE_PATH . |
| 405 | #define TRACE_INCLUDE_FILE trace_gfs2 | ||
| 406 | #include <trace/define_trace.h> | 406 | #include <trace/define_trace.h> |
| 407 | 407 | ||
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index a553f1041cf..6ad76bf5fb4 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -30,9 +30,7 @@ | |||
| 30 | * EXCEPTION_TABLE(...) | 30 | * EXCEPTION_TABLE(...) |
| 31 | * NOTES | 31 | * NOTES |
| 32 | * | 32 | * |
| 33 | * __bss_start = .; | 33 | * BSS_SECTION(0, 0, 0) |
| 34 | * BSS_SECTION(0, 0) | ||
| 35 | * __bss_stop = .; | ||
| 36 | * _end = .; | 34 | * _end = .; |
| 37 | * | 35 | * |
| 38 | * /DISCARD/ : { | 36 | * /DISCARD/ : { |
| @@ -489,7 +487,8 @@ | |||
| 489 | * bss (Block Started by Symbol) - uninitialized data | 487 | * bss (Block Started by Symbol) - uninitialized data |
| 490 | * zeroed during startup | 488 | * zeroed during startup |
| 491 | */ | 489 | */ |
| 492 | #define SBSS \ | 490 | #define SBSS(sbss_align) \ |
| 491 | . = ALIGN(sbss_align); \ | ||
| 493 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ | 492 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ |
| 494 | *(.sbss) \ | 493 | *(.sbss) \ |
| 495 | *(.scommon) \ | 494 | *(.scommon) \ |
| @@ -498,12 +497,10 @@ | |||
| 498 | #define BSS(bss_align) \ | 497 | #define BSS(bss_align) \ |
| 499 | . = ALIGN(bss_align); \ | 498 | . = ALIGN(bss_align); \ |
| 500 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \ | 499 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \ |
| 501 | VMLINUX_SYMBOL(__bss_start) = .; \ | ||
| 502 | *(.bss.page_aligned) \ | 500 | *(.bss.page_aligned) \ |
| 503 | *(.dynbss) \ | 501 | *(.dynbss) \ |
| 504 | *(.bss) \ | 502 | *(.bss) \ |
| 505 | *(COMMON) \ | 503 | *(COMMON) \ |
| 506 | VMLINUX_SYMBOL(__bss_stop) = .; \ | ||
| 507 | } | 504 | } |
| 508 | 505 | ||
| 509 | /* | 506 | /* |
| @@ -735,8 +732,10 @@ | |||
| 735 | INIT_RAM_FS \ | 732 | INIT_RAM_FS \ |
| 736 | } | 733 | } |
| 737 | 734 | ||
| 738 | #define BSS_SECTION(sbss_align, bss_align) \ | 735 | #define BSS_SECTION(sbss_align, bss_align, stop_align) \ |
| 739 | SBSS \ | 736 | . = ALIGN(sbss_align); \ |
| 737 | VMLINUX_SYMBOL(__bss_start) = .; \ | ||
| 738 | SBSS(sbss_align) \ | ||
| 740 | BSS(bss_align) \ | 739 | BSS(bss_align) \ |
| 741 | . = ALIGN(4); | 740 | . = ALIGN(stop_align); \ |
| 742 | 741 | VMLINUX_SYMBOL(__bss_stop) = .; | |
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index 45c18672b09..7174818c2c1 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
| @@ -43,6 +43,7 @@ | |||
| 43 | {0x1002, 0x4A4F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 43 | {0x1002, 0x4A4F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
| 44 | {0x1002, 0x4A50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 44 | {0x1002, 0x4A50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
| 45 | {0x1002, 0x4A54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 45 | {0x1002, 0x4A54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
| 46 | {0x1002, 0x4B48, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | ||
| 46 | {0x1002, 0x4B49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 47 | {0x1002, 0x4B49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
| 47 | {0x1002, 0x4B4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 48 | {0x1002, 0x4B4A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
| 48 | {0x1002, 0x4B4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ | 49 | {0x1002, 0x4B4B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ |
| @@ -262,6 +263,7 @@ | |||
| 262 | {0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 263 | {0x1002, 0x9440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
| 263 | {0x1002, 0x9441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 264 | {0x1002, 0x9441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
| 264 | {0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 265 | {0x1002, 0x9442, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
| 266 | {0x1002, 0x9443, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | ||
| 265 | {0x1002, 0x9444, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 267 | {0x1002, 0x9444, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
| 266 | {0x1002, 0x9446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ | 268 | {0x1002, 0x9446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_NEW_MEMMAP}, \ |
| 267 | {0x1002, 0x944A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 269 | {0x1002, 0x944A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| @@ -346,12 +348,12 @@ | |||
| 346 | {0x1002, 0x9599, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ | 348 | {0x1002, 0x9599, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_NEW_MEMMAP}, \ |
| 347 | {0x1002, 0x959B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 349 | {0x1002, 0x959B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
| 348 | {0x1002, 0x95C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 350 | {0x1002, 0x95C0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
| 351 | {0x1002, 0x95C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 352 | {0x1002, 0x95C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 349 | {0x1002, 0x95C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 353 | {0x1002, 0x95C5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
| 350 | {0x1002, 0x95C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 354 | {0x1002, 0x95C6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
| 351 | {0x1002, 0x95C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 355 | {0x1002, 0x95C7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
| 352 | {0x1002, 0x95C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 356 | {0x1002, 0x95C9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
| 353 | {0x1002, 0x95C2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 354 | {0x1002, 0x95C4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | ||
| 355 | {0x1002, 0x95CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 357 | {0x1002, 0x95CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
| 356 | {0x1002, 0x95CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 358 | {0x1002, 0x95CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
| 357 | {0x1002, 0x95CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ | 359 | {0x1002, 0x95CE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV620|RADEON_NEW_MEMMAP}, \ |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 20a100fe2b4..3a1dbba4d3a 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
| @@ -143,12 +143,3 @@ extern void clockevents_notify(unsigned long reason, void *arg); | |||
| 143 | #endif | 143 | #endif |
| 144 | 144 | ||
| 145 | #endif | 145 | #endif |
| 146 | |||
| 147 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | ||
| 148 | extern ktime_t clockevents_get_next_event(int cpu); | ||
| 149 | #else | ||
| 150 | static inline ktime_t clockevents_get_next_event(int cpu) | ||
| 151 | { | ||
| 152 | return (ktime_t) { .tv64 = KTIME_MAX }; | ||
| 153 | } | ||
| 154 | #endif | ||
diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h index d71f7c0f931..38fe59dc89a 100644 --- a/include/linux/console_struct.h +++ b/include/linux/console_struct.h | |||
| @@ -89,7 +89,6 @@ struct vc_data { | |||
| 89 | unsigned int vc_need_wrap : 1; | 89 | unsigned int vc_need_wrap : 1; |
| 90 | unsigned int vc_can_do_color : 1; | 90 | unsigned int vc_can_do_color : 1; |
| 91 | unsigned int vc_report_mouse : 2; | 91 | unsigned int vc_report_mouse : 2; |
| 92 | unsigned int vc_kmalloced : 1; | ||
| 93 | unsigned char vc_utf : 1; /* Unicode UTF-8 encoding */ | 92 | unsigned char vc_utf : 1; /* Unicode UTF-8 encoding */ |
| 94 | unsigned char vc_utf_count; | 93 | unsigned char vc_utf_count; |
| 95 | int vc_utf_char; | 94 | int vc_utf_char; |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 54648e625ef..4759917adc7 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
| @@ -448,7 +448,7 @@ extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf, | |||
| 448 | 448 | ||
| 449 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) | 449 | static inline void timer_stats_account_hrtimer(struct hrtimer *timer) |
| 450 | { | 450 | { |
| 451 | if (likely(!timer->start_pid)) | 451 | if (likely(!timer->start_site)) |
| 452 | return; | 452 | return; |
| 453 | timer_stats_update_stats(timer, timer->start_pid, timer->start_site, | 453 | timer_stats_update_stats(timer, timer->start_pid, timer->start_site, |
| 454 | timer->function, timer->start_comm, 0); | 454 | timer->function, timer->start_comm, 0); |
diff --git a/include/linux/lguest.h b/include/linux/lguest.h index 7bc1440fc47..dbf2479e808 100644 --- a/include/linux/lguest.h +++ b/include/linux/lguest.h | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | #define LG_CLOCK_MIN_DELTA 100UL | 11 | #define LG_CLOCK_MIN_DELTA 100UL |
| 12 | #define LG_CLOCK_MAX_DELTA ULONG_MAX | 12 | #define LG_CLOCK_MAX_DELTA ULONG_MAX |
| 13 | 13 | ||
| 14 | /*G:032 The second method of communicating with the Host is to via "struct | 14 | /*G:031 The second method of communicating with the Host is to via "struct |
| 15 | * lguest_data". Once the Guest's initialization hypercall tells the Host where | 15 | * lguest_data". Once the Guest's initialization hypercall tells the Host where |
| 16 | * this is, the Guest and Host both publish information in it. :*/ | 16 | * this is, the Guest and Host both publish information in it. :*/ |
| 17 | struct lguest_data | 17 | struct lguest_data |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 3d501db36a2..79b6d7fd4ac 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -385,6 +385,7 @@ enum { | |||
| 385 | not multiple of 16 bytes */ | 385 | not multiple of 16 bytes */ |
| 386 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */ | 386 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */ |
| 387 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ | 387 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ |
| 388 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ | ||
| 388 | 389 | ||
| 389 | /* DMA mask for user DMA control: User visible values; DO NOT | 390 | /* DMA mask for user DMA control: User visible values; DO NOT |
| 390 | renumber */ | 391 | renumber */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index b47b3f039d1..f2c69a2cca1 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -1342,12 +1342,12 @@ static inline int skb_network_offset(const struct sk_buff *skb) | |||
| 1342 | * shifting the start of the packet by 2 bytes. Drivers should do this | 1342 | * shifting the start of the packet by 2 bytes. Drivers should do this |
| 1343 | * with: | 1343 | * with: |
| 1344 | * | 1344 | * |
| 1345 | * skb_reserve(NET_IP_ALIGN); | 1345 | * skb_reserve(skb, NET_IP_ALIGN); |
| 1346 | * | 1346 | * |
| 1347 | * The downside to this alignment of the IP header is that the DMA is now | 1347 | * The downside to this alignment of the IP header is that the DMA is now |
| 1348 | * unaligned. On some architectures the cost of an unaligned DMA is high | 1348 | * unaligned. On some architectures the cost of an unaligned DMA is high |
| 1349 | * and this cost outweighs the gains made by aligning the IP header. | 1349 | * and this cost outweighs the gains made by aligning the IP header. |
| 1350 | * | 1350 | * |
| 1351 | * Since this trade off varies between architectures, we allow NET_IP_ALIGN | 1351 | * Since this trade off varies between architectures, we allow NET_IP_ALIGN |
| 1352 | * to be overridden. | 1352 | * to be overridden. |
| 1353 | */ | 1353 | */ |
diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h index cec79adbe3e..9c543d6ac53 100644 --- a/include/linux/virtio_net.h +++ b/include/linux/virtio_net.h | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */ | 27 | #define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */ |
| 28 | #define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */ | 28 | #define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */ |
| 29 | #define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */ | 29 | #define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */ |
| 30 | #define VIRTIO_NET_F_CTRL_RX_EXTRA 20 /* Extra RX mode control support */ | ||
| 30 | 31 | ||
| 31 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ | 32 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ |
| 32 | 33 | ||
| @@ -81,14 +82,19 @@ typedef __u8 virtio_net_ctrl_ack; | |||
| 81 | #define VIRTIO_NET_ERR 1 | 82 | #define VIRTIO_NET_ERR 1 |
| 82 | 83 | ||
| 83 | /* | 84 | /* |
| 84 | * Control the RX mode, ie. promisucous and allmulti. PROMISC and | 85 | * Control the RX mode, ie. promisucous, allmulti, etc... |
| 85 | * ALLMULTI commands require an "out" sg entry containing a 1 byte | 86 | * All commands require an "out" sg entry containing a 1 byte |
| 86 | * state value, zero = disable, non-zero = enable. These commands | 87 | * state value, zero = disable, non-zero = enable. Commands |
| 87 | * are supported with the VIRTIO_NET_F_CTRL_RX feature. | 88 | * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature. |
| 89 | * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA. | ||
| 88 | */ | 90 | */ |
| 89 | #define VIRTIO_NET_CTRL_RX 0 | 91 | #define VIRTIO_NET_CTRL_RX 0 |
| 90 | #define VIRTIO_NET_CTRL_RX_PROMISC 0 | 92 | #define VIRTIO_NET_CTRL_RX_PROMISC 0 |
| 91 | #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 | 93 | #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 |
| 94 | #define VIRTIO_NET_CTRL_RX_ALLUNI 2 | ||
| 95 | #define VIRTIO_NET_CTRL_RX_NOMULTI 3 | ||
| 96 | #define VIRTIO_NET_CTRL_RX_NOUNI 4 | ||
| 97 | #define VIRTIO_NET_CTRL_RX_NOBCAST 5 | ||
| 92 | 98 | ||
| 93 | /* | 99 | /* |
| 94 | * Control the MAC filter table. | 100 | * Control the MAC filter table. |
diff --git a/include/trace/events/block.h b/include/trace/events/block.h index d6b05f42dd4..9a74b468a22 100644 --- a/include/trace/events/block.h +++ b/include/trace/events/block.h | |||
| @@ -1,3 +1,6 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM block | ||
| 3 | |||
| 1 | #if !defined(_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_BLOCK_H | 5 | #define _TRACE_BLOCK_H |
| 3 | 6 | ||
| @@ -5,9 +8,6 @@ | |||
| 5 | #include <linux/blkdev.h> | 8 | #include <linux/blkdev.h> |
| 6 | #include <linux/tracepoint.h> | 9 | #include <linux/tracepoint.h> |
| 7 | 10 | ||
| 8 | #undef TRACE_SYSTEM | ||
| 9 | #define TRACE_SYSTEM block | ||
| 10 | |||
| 11 | TRACE_EVENT(block_rq_abort, | 11 | TRACE_EVENT(block_rq_abort, |
| 12 | 12 | ||
| 13 | TP_PROTO(struct request_queue *q, struct request *rq), | 13 | TP_PROTO(struct request_queue *q, struct request *rq), |
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h index dfbc9b0edc8..7d8b5bc7418 100644 --- a/include/trace/events/ext4.h +++ b/include/trace/events/ext4.h | |||
| @@ -1,9 +1,9 @@ | |||
| 1 | #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ) | ||
| 2 | #define _TRACE_EXT4_H | ||
| 3 | |||
| 4 | #undef TRACE_SYSTEM | 1 | #undef TRACE_SYSTEM |
| 5 | #define TRACE_SYSTEM ext4 | 2 | #define TRACE_SYSTEM ext4 |
| 6 | 3 | ||
| 4 | #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ) | ||
| 5 | #define _TRACE_EXT4_H | ||
| 6 | |||
| 7 | #include <linux/writeback.h> | 7 | #include <linux/writeback.h> |
| 8 | #include "../../../fs/ext4/ext4.h" | 8 | #include "../../../fs/ext4/ext4.h" |
| 9 | #include "../../../fs/ext4/mballoc.h" | 9 | #include "../../../fs/ext4/mballoc.h" |
diff --git a/include/trace/events/irq.h b/include/trace/events/irq.h index b0c7ede55eb..1cb0c3aa11e 100644 --- a/include/trace/events/irq.h +++ b/include/trace/events/irq.h | |||
| @@ -1,12 +1,12 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM irq | ||
| 3 | |||
| 1 | #if !defined(_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_IRQ_H | 5 | #define _TRACE_IRQ_H |
| 3 | 6 | ||
| 4 | #include <linux/tracepoint.h> | 7 | #include <linux/tracepoint.h> |
| 5 | #include <linux/interrupt.h> | 8 | #include <linux/interrupt.h> |
| 6 | 9 | ||
| 7 | #undef TRACE_SYSTEM | ||
| 8 | #define TRACE_SYSTEM irq | ||
| 9 | |||
| 10 | #define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq } | 10 | #define softirq_name(sirq) { sirq##_SOFTIRQ, #sirq } |
| 11 | #define show_softirq_name(val) \ | 11 | #define show_softirq_name(val) \ |
| 12 | __print_symbolic(val, \ | 12 | __print_symbolic(val, \ |
diff --git a/include/trace/events/jbd2.h b/include/trace/events/jbd2.h index 845b0b4b48f..10813fa0c8d 100644 --- a/include/trace/events/jbd2.h +++ b/include/trace/events/jbd2.h | |||
| @@ -1,12 +1,12 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM jbd2 | ||
| 3 | |||
| 1 | #if !defined(_TRACE_JBD2_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_JBD2_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_JBD2_H | 5 | #define _TRACE_JBD2_H |
| 3 | 6 | ||
| 4 | #include <linux/jbd2.h> | 7 | #include <linux/jbd2.h> |
| 5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
| 6 | 9 | ||
| 7 | #undef TRACE_SYSTEM | ||
| 8 | #define TRACE_SYSTEM jbd2 | ||
| 9 | |||
| 10 | TRACE_EVENT(jbd2_checkpoint, | 10 | TRACE_EVENT(jbd2_checkpoint, |
| 11 | 11 | ||
| 12 | TP_PROTO(journal_t *journal, int result), | 12 | TP_PROTO(journal_t *journal, int result), |
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index 9baba50d651..1493c541f9c 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h | |||
| @@ -1,12 +1,12 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM kmem | ||
| 3 | |||
| 1 | #if !defined(_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_KMEM_H | 5 | #define _TRACE_KMEM_H |
| 3 | 6 | ||
| 4 | #include <linux/types.h> | 7 | #include <linux/types.h> |
| 5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
| 6 | 9 | ||
| 7 | #undef TRACE_SYSTEM | ||
| 8 | #define TRACE_SYSTEM kmem | ||
| 9 | |||
| 10 | /* | 10 | /* |
| 11 | * The order of these masks is important. Matching masks will be seen | 11 | * The order of these masks is important. Matching masks will be seen |
| 12 | * first and the left over flags will end up showing by themselves. | 12 | * first and the left over flags will end up showing by themselves. |
diff --git a/include/trace/events/lockdep.h b/include/trace/events/lockdep.h index 0e956c9dfd7..bcf1d209a00 100644 --- a/include/trace/events/lockdep.h +++ b/include/trace/events/lockdep.h | |||
| @@ -1,12 +1,12 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM lockdep | ||
| 3 | |||
| 1 | #if !defined(_TRACE_LOCKDEP_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_LOCKDEP_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_LOCKDEP_H | 5 | #define _TRACE_LOCKDEP_H |
| 3 | 6 | ||
| 4 | #include <linux/lockdep.h> | 7 | #include <linux/lockdep.h> |
| 5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
| 6 | 9 | ||
| 7 | #undef TRACE_SYSTEM | ||
| 8 | #define TRACE_SYSTEM lockdep | ||
| 9 | |||
| 10 | #ifdef CONFIG_LOCKDEP | 10 | #ifdef CONFIG_LOCKDEP |
| 11 | 11 | ||
| 12 | TRACE_EVENT(lock_acquire, | 12 | TRACE_EVENT(lock_acquire, |
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index 24ab5bcff7b..8949bb7eb08 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h | |||
| @@ -1,12 +1,12 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM sched | ||
| 3 | |||
| 1 | #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_SCHED_H | 5 | #define _TRACE_SCHED_H |
| 3 | 6 | ||
| 4 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
| 5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
| 6 | 9 | ||
| 7 | #undef TRACE_SYSTEM | ||
| 8 | #define TRACE_SYSTEM sched | ||
| 9 | |||
| 10 | /* | 10 | /* |
| 11 | * Tracepoint for calling kthread_stop, performed to end a kthread: | 11 | * Tracepoint for calling kthread_stop, performed to end a kthread: |
| 12 | */ | 12 | */ |
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h index 1e8fabb57c0..e499863b966 100644 --- a/include/trace/events/skb.h +++ b/include/trace/events/skb.h | |||
| @@ -1,12 +1,12 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM skb | ||
| 3 | |||
| 1 | #if !defined(_TRACE_SKB_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_SKB_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_SKB_H | 5 | #define _TRACE_SKB_H |
| 3 | 6 | ||
| 4 | #include <linux/skbuff.h> | 7 | #include <linux/skbuff.h> |
| 5 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
| 6 | 9 | ||
| 7 | #undef TRACE_SYSTEM | ||
| 8 | #define TRACE_SYSTEM skb | ||
| 9 | |||
| 10 | /* | 10 | /* |
| 11 | * Tracepoint for free an sk_buff: | 11 | * Tracepoint for free an sk_buff: |
| 12 | */ | 12 | */ |
diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h index 035f1bff288..fcfd9a1e4b9 100644 --- a/include/trace/events/workqueue.h +++ b/include/trace/events/workqueue.h | |||
| @@ -1,3 +1,6 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM workqueue | ||
| 3 | |||
| 1 | #if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) | 4 | #if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) |
| 2 | #define _TRACE_WORKQUEUE_H | 5 | #define _TRACE_WORKQUEUE_H |
| 3 | 6 | ||
| @@ -5,9 +8,6 @@ | |||
| 5 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
| 6 | #include <linux/tracepoint.h> | 9 | #include <linux/tracepoint.h> |
| 7 | 10 | ||
| 8 | #undef TRACE_SYSTEM | ||
| 9 | #define TRACE_SYSTEM workqueue | ||
| 10 | |||
| 11 | TRACE_EVENT(workqueue_insertion, | 11 | TRACE_EVENT(workqueue_insertion, |
| 12 | 12 | ||
| 13 | TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), | 13 | TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), |
diff --git a/kernel/futex.c b/kernel/futex.c index 794c862125f..0672ff88f15 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
| @@ -247,6 +247,7 @@ again: | |||
| 247 | if (err < 0) | 247 | if (err < 0) |
| 248 | return err; | 248 | return err; |
| 249 | 249 | ||
| 250 | page = compound_head(page); | ||
| 250 | lock_page(page); | 251 | lock_page(page); |
| 251 | if (!page->mapping) { | 252 | if (!page->mapping) { |
| 252 | unlock_page(page); | 253 | unlock_page(page); |
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 9002958a96e..49da79ab848 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
| @@ -191,6 +191,46 @@ struct hrtimer_clock_base *lock_hrtimer_base(const struct hrtimer *timer, | |||
| 191 | } | 191 | } |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | |||
| 195 | /* | ||
| 196 | * Get the preferred target CPU for NOHZ | ||
| 197 | */ | ||
| 198 | static int hrtimer_get_target(int this_cpu, int pinned) | ||
| 199 | { | ||
| 200 | #ifdef CONFIG_NO_HZ | ||
| 201 | if (!pinned && get_sysctl_timer_migration() && idle_cpu(this_cpu)) { | ||
| 202 | int preferred_cpu = get_nohz_load_balancer(); | ||
| 203 | |||
| 204 | if (preferred_cpu >= 0) | ||
| 205 | return preferred_cpu; | ||
| 206 | } | ||
| 207 | #endif | ||
| 208 | return this_cpu; | ||
| 209 | } | ||
| 210 | |||
| 211 | /* | ||
| 212 | * With HIGHRES=y we do not migrate the timer when it is expiring | ||
| 213 | * before the next event on the target cpu because we cannot reprogram | ||
| 214 | * the target cpu hardware and we would cause it to fire late. | ||
| 215 | * | ||
| 216 | * Called with cpu_base->lock of target cpu held. | ||
| 217 | */ | ||
| 218 | static int | ||
| 219 | hrtimer_check_target(struct hrtimer *timer, struct hrtimer_clock_base *new_base) | ||
| 220 | { | ||
| 221 | #ifdef CONFIG_HIGH_RES_TIMERS | ||
| 222 | ktime_t expires; | ||
| 223 | |||
| 224 | if (!new_base->cpu_base->hres_active) | ||
| 225 | return 0; | ||
| 226 | |||
| 227 | expires = ktime_sub(hrtimer_get_expires(timer), new_base->offset); | ||
| 228 | return expires.tv64 <= new_base->cpu_base->expires_next.tv64; | ||
| 229 | #else | ||
| 230 | return 0; | ||
| 231 | #endif | ||
| 232 | } | ||
| 233 | |||
| 194 | /* | 234 | /* |
| 195 | * Switch the timer base to the current CPU when possible. | 235 | * Switch the timer base to the current CPU when possible. |
| 196 | */ | 236 | */ |
| @@ -200,16 +240,8 @@ switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_clock_base *base, | |||
| 200 | { | 240 | { |
| 201 | struct hrtimer_clock_base *new_base; | 241 | struct hrtimer_clock_base *new_base; |
| 202 | struct hrtimer_cpu_base *new_cpu_base; | 242 | struct hrtimer_cpu_base *new_cpu_base; |
| 203 | int cpu, preferred_cpu = -1; | 243 | int this_cpu = smp_processor_id(); |
| 204 | 244 | int cpu = hrtimer_get_target(this_cpu, pinned); | |
| 205 | cpu = smp_processor_id(); | ||
| 206 | #if defined(CONFIG_NO_HZ) && defined(CONFIG_SMP) | ||
| 207 | if (!pinned && get_sysctl_timer_migration() && idle_cpu(cpu)) { | ||
| 208 | preferred_cpu = get_nohz_load_balancer(); | ||
| 209 | if (preferred_cpu >= 0) | ||
| 210 | cpu = preferred_cpu; | ||
| 211 | } | ||
| 212 | #endif | ||
| 213 | 245 | ||
| 214 | again: | 246 | again: |
| 215 | new_cpu_base = &per_cpu(hrtimer_bases, cpu); | 247 | new_cpu_base = &per_cpu(hrtimer_bases, cpu); |
| @@ -217,7 +249,7 @@ again: | |||
| 217 | 249 | ||
| 218 | if (base != new_base) { | 250 | if (base != new_base) { |
| 219 | /* | 251 | /* |
| 220 | * We are trying to schedule the timer on the local CPU. | 252 | * We are trying to move timer to new_base. |
| 221 | * However we can't change timer's base while it is running, | 253 | * However we can't change timer's base while it is running, |
| 222 | * so we keep it on the same CPU. No hassle vs. reprogramming | 254 | * so we keep it on the same CPU. No hassle vs. reprogramming |
| 223 | * the event source in the high resolution case. The softirq | 255 | * the event source in the high resolution case. The softirq |
| @@ -233,38 +265,12 @@ again: | |||
| 233 | spin_unlock(&base->cpu_base->lock); | 265 | spin_unlock(&base->cpu_base->lock); |
| 234 | spin_lock(&new_base->cpu_base->lock); | 266 | spin_lock(&new_base->cpu_base->lock); |
| 235 | 267 | ||
| 236 | /* Optimized away for NOHZ=n SMP=n */ | 268 | if (cpu != this_cpu && hrtimer_check_target(timer, new_base)) { |
| 237 | if (cpu == preferred_cpu) { | 269 | cpu = this_cpu; |
| 238 | /* Calculate clock monotonic expiry time */ | 270 | spin_unlock(&new_base->cpu_base->lock); |
| 239 | #ifdef CONFIG_HIGH_RES_TIMERS | 271 | spin_lock(&base->cpu_base->lock); |
| 240 | ktime_t expires = ktime_sub(hrtimer_get_expires(timer), | 272 | timer->base = base; |
| 241 | new_base->offset); | 273 | goto again; |
| 242 | #else | ||
| 243 | ktime_t expires = hrtimer_get_expires(timer); | ||
| 244 | #endif | ||
| 245 | |||
| 246 | /* | ||
| 247 | * Get the next event on target cpu from the | ||
| 248 | * clock events layer. | ||
| 249 | * This covers the highres=off nohz=on case as well. | ||
| 250 | */ | ||
| 251 | ktime_t next = clockevents_get_next_event(cpu); | ||
| 252 | |||
| 253 | ktime_t delta = ktime_sub(expires, next); | ||
| 254 | |||
| 255 | /* | ||
| 256 | * We do not migrate the timer when it is expiring | ||
| 257 | * before the next event on the target cpu because | ||
| 258 | * we cannot reprogram the target cpu hardware and | ||
| 259 | * we would cause it to fire late. | ||
| 260 | */ | ||
| 261 | if (delta.tv64 < 0) { | ||
| 262 | cpu = smp_processor_id(); | ||
| 263 | spin_unlock(&new_base->cpu_base->lock); | ||
| 264 | spin_lock(&base->cpu_base->lock); | ||
| 265 | timer->base = base; | ||
| 266 | goto again; | ||
| 267 | } | ||
| 268 | } | 274 | } |
| 269 | timer->base = new_base; | 275 | timer->base = new_base; |
| 270 | } | 276 | } |
| @@ -1276,14 +1282,22 @@ void hrtimer_interrupt(struct clock_event_device *dev) | |||
| 1276 | 1282 | ||
| 1277 | expires_next.tv64 = KTIME_MAX; | 1283 | expires_next.tv64 = KTIME_MAX; |
| 1278 | 1284 | ||
| 1285 | spin_lock(&cpu_base->lock); | ||
| 1286 | /* | ||
| 1287 | * We set expires_next to KTIME_MAX here with cpu_base->lock | ||
| 1288 | * held to prevent that a timer is enqueued in our queue via | ||
| 1289 | * the migration code. This does not affect enqueueing of | ||
| 1290 | * timers which run their callback and need to be requeued on | ||
| 1291 | * this CPU. | ||
| 1292 | */ | ||
| 1293 | cpu_base->expires_next.tv64 = KTIME_MAX; | ||
| 1294 | |||
| 1279 | base = cpu_base->clock_base; | 1295 | base = cpu_base->clock_base; |
| 1280 | 1296 | ||
| 1281 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { | 1297 | for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { |
| 1282 | ktime_t basenow; | 1298 | ktime_t basenow; |
| 1283 | struct rb_node *node; | 1299 | struct rb_node *node; |
| 1284 | 1300 | ||
| 1285 | spin_lock(&cpu_base->lock); | ||
| 1286 | |||
| 1287 | basenow = ktime_add(now, base->offset); | 1301 | basenow = ktime_add(now, base->offset); |
| 1288 | 1302 | ||
| 1289 | while ((node = base->first)) { | 1303 | while ((node = base->first)) { |
| @@ -1316,11 +1330,15 @@ void hrtimer_interrupt(struct clock_event_device *dev) | |||
| 1316 | 1330 | ||
| 1317 | __run_hrtimer(timer); | 1331 | __run_hrtimer(timer); |
| 1318 | } | 1332 | } |
| 1319 | spin_unlock(&cpu_base->lock); | ||
| 1320 | base++; | 1333 | base++; |
| 1321 | } | 1334 | } |
| 1322 | 1335 | ||
| 1336 | /* | ||
| 1337 | * Store the new expiry value so the migration code can verify | ||
| 1338 | * against it. | ||
| 1339 | */ | ||
| 1323 | cpu_base->expires_next = expires_next; | 1340 | cpu_base->expires_next = expires_next; |
| 1341 | spin_unlock(&cpu_base->lock); | ||
| 1324 | 1342 | ||
| 1325 | /* Reprogramming necessary ? */ | 1343 | /* Reprogramming necessary ? */ |
| 1326 | if (expires_next.tv64 != KTIME_MAX) { | 1344 | if (expires_next.tv64 != KTIME_MAX) { |
diff --git a/kernel/sched.c b/kernel/sched.c index 01f55ada359..98972d366fd 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -493,6 +493,7 @@ struct rt_rq { | |||
| 493 | #endif | 493 | #endif |
| 494 | #ifdef CONFIG_SMP | 494 | #ifdef CONFIG_SMP |
| 495 | unsigned long rt_nr_migratory; | 495 | unsigned long rt_nr_migratory; |
| 496 | unsigned long rt_nr_total; | ||
| 496 | int overloaded; | 497 | int overloaded; |
| 497 | struct plist_head pushable_tasks; | 498 | struct plist_head pushable_tasks; |
| 498 | #endif | 499 | #endif |
| @@ -2571,15 +2572,37 @@ static void __sched_fork(struct task_struct *p) | |||
| 2571 | p->se.avg_wakeup = sysctl_sched_wakeup_granularity; | 2572 | p->se.avg_wakeup = sysctl_sched_wakeup_granularity; |
| 2572 | 2573 | ||
| 2573 | #ifdef CONFIG_SCHEDSTATS | 2574 | #ifdef CONFIG_SCHEDSTATS |
| 2574 | p->se.wait_start = 0; | 2575 | p->se.wait_start = 0; |
| 2575 | p->se.sum_sleep_runtime = 0; | 2576 | p->se.wait_max = 0; |
| 2576 | p->se.sleep_start = 0; | 2577 | p->se.wait_count = 0; |
| 2577 | p->se.block_start = 0; | 2578 | p->se.wait_sum = 0; |
| 2578 | p->se.sleep_max = 0; | 2579 | |
| 2579 | p->se.block_max = 0; | 2580 | p->se.sleep_start = 0; |
| 2580 | p->se.exec_max = 0; | 2581 | p->se.sleep_max = 0; |
| 2581 | p->se.slice_max = 0; | 2582 | p->se.sum_sleep_runtime = 0; |
| 2582 | p->se.wait_max = 0; | 2583 | |
| 2584 | p->se.block_start = 0; | ||
| 2585 | p->se.block_max = 0; | ||
| 2586 | p->se.exec_max = 0; | ||
| 2587 | p->se.slice_max = 0; | ||
| 2588 | |||
| 2589 | p->se.nr_migrations_cold = 0; | ||
| 2590 | p->se.nr_failed_migrations_affine = 0; | ||
| 2591 | p->se.nr_failed_migrations_running = 0; | ||
| 2592 | p->se.nr_failed_migrations_hot = 0; | ||
| 2593 | p->se.nr_forced_migrations = 0; | ||
| 2594 | p->se.nr_forced2_migrations = 0; | ||
| 2595 | |||
| 2596 | p->se.nr_wakeups = 0; | ||
| 2597 | p->se.nr_wakeups_sync = 0; | ||
| 2598 | p->se.nr_wakeups_migrate = 0; | ||
| 2599 | p->se.nr_wakeups_local = 0; | ||
| 2600 | p->se.nr_wakeups_remote = 0; | ||
| 2601 | p->se.nr_wakeups_affine = 0; | ||
| 2602 | p->se.nr_wakeups_affine_attempts = 0; | ||
| 2603 | p->se.nr_wakeups_passive = 0; | ||
| 2604 | p->se.nr_wakeups_idle = 0; | ||
| 2605 | |||
| 2583 | #endif | 2606 | #endif |
| 2584 | 2607 | ||
| 2585 | INIT_LIST_HEAD(&p->rt.run_list); | 2608 | INIT_LIST_HEAD(&p->rt.run_list); |
| @@ -9074,7 +9097,7 @@ static void init_rt_rq(struct rt_rq *rt_rq, struct rq *rq) | |||
| 9074 | #ifdef CONFIG_SMP | 9097 | #ifdef CONFIG_SMP |
| 9075 | rt_rq->rt_nr_migratory = 0; | 9098 | rt_rq->rt_nr_migratory = 0; |
| 9076 | rt_rq->overloaded = 0; | 9099 | rt_rq->overloaded = 0; |
| 9077 | plist_head_init(&rq->rt.pushable_tasks, &rq->lock); | 9100 | plist_head_init(&rt_rq->pushable_tasks, &rq->lock); |
| 9078 | #endif | 9101 | #endif |
| 9079 | 9102 | ||
| 9080 | rt_rq->rt_time = 0; | 9103 | rt_rq->rt_time = 0; |
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index ba7fd6e9556..7c248dc30f4 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
| @@ -687,7 +687,8 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) | |||
| 687 | * all of which have the same weight. | 687 | * all of which have the same weight. |
| 688 | */ | 688 | */ |
| 689 | if (sched_feat(NORMALIZED_SLEEPER) && | 689 | if (sched_feat(NORMALIZED_SLEEPER) && |
| 690 | task_of(se)->policy != SCHED_IDLE) | 690 | (!entity_is_task(se) || |
| 691 | task_of(se)->policy != SCHED_IDLE)) | ||
| 691 | thresh = calc_delta_fair(thresh, se); | 692 | thresh = calc_delta_fair(thresh, se); |
| 692 | 693 | ||
| 693 | vruntime -= thresh; | 694 | vruntime -= thresh; |
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 9bf0d2a7304..3918e01994e 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c | |||
| @@ -10,6 +10,8 @@ static inline struct task_struct *rt_task_of(struct sched_rt_entity *rt_se) | |||
| 10 | 10 | ||
| 11 | #ifdef CONFIG_RT_GROUP_SCHED | 11 | #ifdef CONFIG_RT_GROUP_SCHED |
| 12 | 12 | ||
| 13 | #define rt_entity_is_task(rt_se) (!(rt_se)->my_q) | ||
| 14 | |||
| 13 | static inline struct rq *rq_of_rt_rq(struct rt_rq *rt_rq) | 15 | static inline struct rq *rq_of_rt_rq(struct rt_rq *rt_rq) |
| 14 | { | 16 | { |
| 15 | return rt_rq->rq; | 17 | return rt_rq->rq; |
| @@ -22,6 +24,8 @@ static inline struct rt_rq *rt_rq_of_se(struct sched_rt_entity *rt_se) | |||
| 22 | 24 | ||
| 23 | #else /* CONFIG_RT_GROUP_SCHED */ | 25 | #else /* CONFIG_RT_GROUP_SCHED */ |
| 24 | 26 | ||
| 27 | #define rt_entity_is_task(rt_se) (1) | ||
| 28 | |||
| 25 | static inline struct rq *rq_of_rt_rq(struct rt_rq *rt_rq) | 29 | static inline struct rq *rq_of_rt_rq(struct rt_rq *rt_rq) |
| 26 | { | 30 | { |
| 27 | return container_of(rt_rq, struct rq, rt); | 31 | return container_of(rt_rq, struct rq, rt); |
| @@ -73,7 +77,7 @@ static inline void rt_clear_overload(struct rq *rq) | |||
| 73 | 77 | ||
| 74 | static void update_rt_migration(struct rt_rq *rt_rq) | 78 | static void update_rt_migration(struct rt_rq *rt_rq) |
| 75 | { | 79 | { |
| 76 | if (rt_rq->rt_nr_migratory && (rt_rq->rt_nr_running > 1)) { | 80 | if (rt_rq->rt_nr_migratory && rt_rq->rt_nr_total > 1) { |
| 77 | if (!rt_rq->overloaded) { | 81 | if (!rt_rq->overloaded) { |
| 78 | rt_set_overload(rq_of_rt_rq(rt_rq)); | 82 | rt_set_overload(rq_of_rt_rq(rt_rq)); |
| 79 | rt_rq->overloaded = 1; | 83 | rt_rq->overloaded = 1; |
| @@ -86,6 +90,12 @@ static void update_rt_migration(struct rt_rq *rt_rq) | |||
| 86 | 90 | ||
| 87 | static void inc_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) | 91 | static void inc_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) |
| 88 | { | 92 | { |
| 93 | if (!rt_entity_is_task(rt_se)) | ||
| 94 | return; | ||
| 95 | |||
| 96 | rt_rq = &rq_of_rt_rq(rt_rq)->rt; | ||
| 97 | |||
| 98 | rt_rq->rt_nr_total++; | ||
| 89 | if (rt_se->nr_cpus_allowed > 1) | 99 | if (rt_se->nr_cpus_allowed > 1) |
| 90 | rt_rq->rt_nr_migratory++; | 100 | rt_rq->rt_nr_migratory++; |
| 91 | 101 | ||
| @@ -94,6 +104,12 @@ static void inc_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) | |||
| 94 | 104 | ||
| 95 | static void dec_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) | 105 | static void dec_rt_migration(struct sched_rt_entity *rt_se, struct rt_rq *rt_rq) |
| 96 | { | 106 | { |
| 107 | if (!rt_entity_is_task(rt_se)) | ||
| 108 | return; | ||
| 109 | |||
| 110 | rt_rq = &rq_of_rt_rq(rt_rq)->rt; | ||
| 111 | |||
| 112 | rt_rq->rt_nr_total--; | ||
| 97 | if (rt_se->nr_cpus_allowed > 1) | 113 | if (rt_se->nr_cpus_allowed > 1) |
| 98 | rt_rq->rt_nr_migratory--; | 114 | rt_rq->rt_nr_migratory--; |
| 99 | 115 | ||
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 1ad6dd46111..a6dcd67b041 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c | |||
| @@ -254,15 +254,4 @@ void clockevents_notify(unsigned long reason, void *arg) | |||
| 254 | spin_unlock(&clockevents_lock); | 254 | spin_unlock(&clockevents_lock); |
| 255 | } | 255 | } |
| 256 | EXPORT_SYMBOL_GPL(clockevents_notify); | 256 | EXPORT_SYMBOL_GPL(clockevents_notify); |
| 257 | |||
| 258 | ktime_t clockevents_get_next_event(int cpu) | ||
| 259 | { | ||
| 260 | struct tick_device *td; | ||
| 261 | struct clock_event_device *dev; | ||
| 262 | |||
| 263 | td = &per_cpu(tick_cpu_device, cpu); | ||
| 264 | dev = td->evtdev; | ||
| 265 | |||
| 266 | return dev->next_event; | ||
| 267 | } | ||
| 268 | #endif | 257 | #endif |
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index bce9e01a29c..4521c77d1a1 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
| @@ -768,7 +768,7 @@ static struct tracer_stat function_stats __initdata = { | |||
| 768 | .stat_show = function_stat_show | 768 | .stat_show = function_stat_show |
| 769 | }; | 769 | }; |
| 770 | 770 | ||
| 771 | static void ftrace_profile_debugfs(struct dentry *d_tracer) | 771 | static __init void ftrace_profile_debugfs(struct dentry *d_tracer) |
| 772 | { | 772 | { |
| 773 | struct ftrace_profile_stat *stat; | 773 | struct ftrace_profile_stat *stat; |
| 774 | struct dentry *entry; | 774 | struct dentry *entry; |
| @@ -786,7 +786,6 @@ static void ftrace_profile_debugfs(struct dentry *d_tracer) | |||
| 786 | * The files created are permanent, if something happens | 786 | * The files created are permanent, if something happens |
| 787 | * we still do not free memory. | 787 | * we still do not free memory. |
| 788 | */ | 788 | */ |
| 789 | kfree(stat); | ||
| 790 | WARN(1, | 789 | WARN(1, |
| 791 | "Could not allocate stat file for cpu %d\n", | 790 | "Could not allocate stat file for cpu %d\n", |
| 792 | cpu); | 791 | cpu); |
| @@ -813,7 +812,7 @@ static void ftrace_profile_debugfs(struct dentry *d_tracer) | |||
| 813 | } | 812 | } |
| 814 | 813 | ||
| 815 | #else /* CONFIG_FUNCTION_PROFILER */ | 814 | #else /* CONFIG_FUNCTION_PROFILER */ |
| 816 | static void ftrace_profile_debugfs(struct dentry *d_tracer) | 815 | static __init void ftrace_profile_debugfs(struct dentry *d_tracer) |
| 817 | { | 816 | { |
| 818 | } | 817 | } |
| 819 | #endif /* CONFIG_FUNCTION_PROFILER */ | 818 | #endif /* CONFIG_FUNCTION_PROFILER */ |
diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c index 7402144bff2..75ef000613c 100644 --- a/kernel/trace/trace_functions.c +++ b/kernel/trace/trace_functions.c | |||
| @@ -363,7 +363,7 @@ ftrace_trace_onoff_callback(char *glob, char *cmd, char *param, int enable) | |||
| 363 | out_reg: | 363 | out_reg: |
| 364 | ret = register_ftrace_function_probe(glob, ops, count); | 364 | ret = register_ftrace_function_probe(glob, ops, count); |
| 365 | 365 | ||
| 366 | return ret; | 366 | return ret < 0 ? ret : 0; |
| 367 | } | 367 | } |
| 368 | 368 | ||
| 369 | static struct ftrace_func_command ftrace_traceon_cmd = { | 369 | static struct ftrace_func_command ftrace_traceon_cmd = { |
diff --git a/net/9p/client.c b/net/9p/client.c index dd43a8289b0..787ccddb85e 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
| @@ -117,9 +117,6 @@ static int parse_opts(char *opts, struct p9_client *clnt) | |||
| 117 | } | 117 | } |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | if (!clnt->trans_mod) | ||
| 121 | clnt->trans_mod = v9fs_get_default_trans(); | ||
| 122 | |||
| 123 | kfree(options); | 120 | kfree(options); |
| 124 | return ret; | 121 | return ret; |
| 125 | } | 122 | } |
| @@ -689,6 +686,9 @@ struct p9_client *p9_client_create(const char *dev_name, char *options) | |||
| 689 | if (err < 0) | 686 | if (err < 0) |
| 690 | goto error; | 687 | goto error; |
| 691 | 688 | ||
| 689 | if (!clnt->trans_mod) | ||
| 690 | clnt->trans_mod = v9fs_get_default_trans(); | ||
| 691 | |||
| 692 | if (clnt->trans_mod == NULL) { | 692 | if (clnt->trans_mod == NULL) { |
| 693 | err = -EPROTONOSUPPORT; | 693 | err = -EPROTONOSUPPORT; |
| 694 | P9_DPRINTK(P9_DEBUG_ERROR, | 694 | P9_DPRINTK(P9_DEBUG_ERROR, |
| @@ -1098,7 +1098,6 @@ p9_client_read(struct p9_fid *fid, char *data, char __user *udata, u64 offset, | |||
| 1098 | 1098 | ||
| 1099 | if (data) { | 1099 | if (data) { |
| 1100 | memmove(data, dataptr, count); | 1100 | memmove(data, dataptr, count); |
| 1101 | data += count; | ||
| 1102 | } | 1101 | } |
| 1103 | 1102 | ||
| 1104 | if (udata) { | 1103 | if (udata) { |
| @@ -1192,9 +1191,9 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid) | |||
| 1192 | 1191 | ||
| 1193 | err = p9pdu_readf(req->rc, clnt->dotu, "wS", &ignored, ret); | 1192 | err = p9pdu_readf(req->rc, clnt->dotu, "wS", &ignored, ret); |
| 1194 | if (err) { | 1193 | if (err) { |
| 1195 | ret = ERR_PTR(err); | ||
| 1196 | p9pdu_dump(1, req->rc); | 1194 | p9pdu_dump(1, req->rc); |
| 1197 | goto free_and_error; | 1195 | p9_free_req(clnt, req); |
| 1196 | goto error; | ||
| 1198 | } | 1197 | } |
| 1199 | 1198 | ||
| 1200 | P9_DPRINTK(P9_DEBUG_9P, | 1199 | P9_DPRINTK(P9_DEBUG_9P, |
| @@ -1211,8 +1210,6 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid) | |||
| 1211 | p9_free_req(clnt, req); | 1210 | p9_free_req(clnt, req); |
| 1212 | return ret; | 1211 | return ret; |
| 1213 | 1212 | ||
| 1214 | free_and_error: | ||
| 1215 | p9_free_req(clnt, req); | ||
| 1216 | error: | 1213 | error: |
| 1217 | kfree(ret); | 1214 | kfree(ret); |
| 1218 | return ERR_PTR(err); | 1215 | return ERR_PTR(err); |
diff --git a/net/core/sock.c b/net/core/sock.c index 6354863b1c6..ba5d2116aea 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
| @@ -939,8 +939,23 @@ static struct sock *sk_prot_alloc(struct proto *prot, gfp_t priority, | |||
| 939 | struct kmem_cache *slab; | 939 | struct kmem_cache *slab; |
| 940 | 940 | ||
| 941 | slab = prot->slab; | 941 | slab = prot->slab; |
| 942 | if (slab != NULL) | 942 | if (slab != NULL) { |
| 943 | sk = kmem_cache_alloc(slab, priority); | 943 | sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO); |
| 944 | if (!sk) | ||
| 945 | return sk; | ||
| 946 | if (priority & __GFP_ZERO) { | ||
| 947 | /* | ||
| 948 | * caches using SLAB_DESTROY_BY_RCU should let | ||
| 949 | * sk_node.next un-modified. Special care is taken | ||
| 950 | * when initializing object to zero. | ||
| 951 | */ | ||
| 952 | if (offsetof(struct sock, sk_node.next) != 0) | ||
| 953 | memset(sk, 0, offsetof(struct sock, sk_node.next)); | ||
| 954 | memset(&sk->sk_node.pprev, 0, | ||
| 955 | prot->obj_size - offsetof(struct sock, | ||
| 956 | sk_node.pprev)); | ||
| 957 | } | ||
| 958 | } | ||
| 944 | else | 959 | else |
| 945 | sk = kmalloc(prot->obj_size, priority); | 960 | sk = kmalloc(prot->obj_size, priority); |
| 946 | 961 | ||
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 44e2a3d2359..cb4a0f4bd5e 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
| @@ -735,10 +735,10 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 735 | } | 735 | } |
| 736 | 736 | ||
| 737 | tos = tiph->tos; | 737 | tos = tiph->tos; |
| 738 | if (tos&1) { | 738 | if (tos == 1) { |
| 739 | tos = 0; | ||
| 739 | if (skb->protocol == htons(ETH_P_IP)) | 740 | if (skb->protocol == htons(ETH_P_IP)) |
| 740 | tos = old_iph->tos; | 741 | tos = old_iph->tos; |
| 741 | tos &= ~1; | ||
| 742 | } | 742 | } |
| 743 | 743 | ||
| 744 | { | 744 | { |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 24702628266..7d082105472 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -1243,7 +1243,6 @@ int ip_push_pending_frames(struct sock *sk) | |||
| 1243 | skb->len += tmp_skb->len; | 1243 | skb->len += tmp_skb->len; |
| 1244 | skb->data_len += tmp_skb->len; | 1244 | skb->data_len += tmp_skb->len; |
| 1245 | skb->truesize += tmp_skb->truesize; | 1245 | skb->truesize += tmp_skb->truesize; |
| 1246 | __sock_put(tmp_skb->sk); | ||
| 1247 | tmp_skb->destructor = NULL; | 1246 | tmp_skb->destructor = NULL; |
| 1248 | tmp_skb->sk = NULL; | 1247 | tmp_skb->sk = NULL; |
| 1249 | } | 1248 | } |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 7c76e3d1821..87f8419a68f 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
| @@ -1484,7 +1484,6 @@ int ip6_push_pending_frames(struct sock *sk) | |||
| 1484 | skb->len += tmp_skb->len; | 1484 | skb->len += tmp_skb->len; |
| 1485 | skb->data_len += tmp_skb->len; | 1485 | skb->data_len += tmp_skb->len; |
| 1486 | skb->truesize += tmp_skb->truesize; | 1486 | skb->truesize += tmp_skb->truesize; |
| 1487 | __sock_put(tmp_skb->sk); | ||
| 1488 | tmp_skb->destructor = NULL; | 1487 | tmp_skb->destructor = NULL; |
| 1489 | tmp_skb->sk = NULL; | 1488 | tmp_skb->sk = NULL; |
| 1490 | } | 1489 | } |
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 68e52308e55..98b7327d094 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
| @@ -1018,6 +1018,7 @@ static void ipip6_tunnel_setup(struct net_device *dev) | |||
| 1018 | dev->hard_header_len = LL_MAX_HEADER + sizeof(struct iphdr); | 1018 | dev->hard_header_len = LL_MAX_HEADER + sizeof(struct iphdr); |
| 1019 | dev->mtu = ETH_DATA_LEN - sizeof(struct iphdr); | 1019 | dev->mtu = ETH_DATA_LEN - sizeof(struct iphdr); |
| 1020 | dev->flags = IFF_NOARP; | 1020 | dev->flags = IFF_NOARP; |
| 1021 | dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; | ||
| 1021 | dev->iflink = 0; | 1022 | dev->iflink = 0; |
| 1022 | dev->addr_len = 4; | 1023 | dev->addr_len = 4; |
| 1023 | dev->features |= NETIF_F_NETNS_LOCAL; | 1024 | dev->features |= NETIF_F_NETNS_LOCAL; |
diff --git a/samples/trace_events/trace-events-sample.h b/samples/trace_events/trace-events-sample.h index 9977a756fb3..f24ae370e51 100644 --- a/samples/trace_events/trace-events-sample.h +++ b/samples/trace_events/trace-events-sample.h | |||
| @@ -1,21 +1,4 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Notice that this file is not protected like a normal header. | ||
| 3 | * We also must allow for rereading of this file. The | ||
| 4 | * | ||
| 5 | * || defined(TRACE_HEADER_MULTI_READ) | ||
| 6 | * | ||
| 7 | * serves this purpose. | ||
| 8 | */ | ||
| 9 | #if !defined(_TRACE_EVENT_SAMPLE_H) || defined(TRACE_HEADER_MULTI_READ) | ||
| 10 | #define _TRACE_EVENT_SAMPLE_H | ||
| 11 | |||
| 12 | /* | ||
| 13 | * All trace headers should include tracepoint.h, until we finally | ||
| 14 | * make it into a standard header. | ||
| 15 | */ | ||
| 16 | #include <linux/tracepoint.h> | ||
| 17 | |||
| 18 | /* | ||
| 19 | * If TRACE_SYSTEM is defined, that will be the directory created | 2 | * If TRACE_SYSTEM is defined, that will be the directory created |
| 20 | * in the ftrace directory under /debugfs/tracing/events/<system> | 3 | * in the ftrace directory under /debugfs/tracing/events/<system> |
| 21 | * | 4 | * |
| @@ -34,11 +17,31 @@ | |||
| 34 | * #define TRACE_INCLUDE_FILE trace-events-sample | 17 | * #define TRACE_INCLUDE_FILE trace-events-sample |
| 35 | * | 18 | * |
| 36 | * As we do an the bottom of this file. | 19 | * As we do an the bottom of this file. |
| 20 | * | ||
| 21 | * Notice that TRACE_SYSTEM should be defined outside of #if | ||
| 22 | * protection, just like TRACE_INCLUDE_FILE. | ||
| 37 | */ | 23 | */ |
| 38 | #undef TRACE_SYSTEM | 24 | #undef TRACE_SYSTEM |
| 39 | #define TRACE_SYSTEM sample | 25 | #define TRACE_SYSTEM sample |
| 40 | 26 | ||
| 41 | /* | 27 | /* |
| 28 | * Notice that this file is not protected like a normal header. | ||
| 29 | * We also must allow for rereading of this file. The | ||
| 30 | * | ||
| 31 | * || defined(TRACE_HEADER_MULTI_READ) | ||
| 32 | * | ||
| 33 | * serves this purpose. | ||
| 34 | */ | ||
| 35 | #if !defined(_TRACE_EVENT_SAMPLE_H) || defined(TRACE_HEADER_MULTI_READ) | ||
| 36 | #define _TRACE_EVENT_SAMPLE_H | ||
| 37 | |||
| 38 | /* | ||
| 39 | * All trace headers should include tracepoint.h, until we finally | ||
| 40 | * make it into a standard header. | ||
| 41 | */ | ||
| 42 | #include <linux/tracepoint.h> | ||
| 43 | |||
| 44 | /* | ||
| 42 | * The TRACE_EVENT macro is broken up into 5 parts. | 45 | * The TRACE_EVENT macro is broken up into 5 parts. |
| 43 | * | 46 | * |
| 44 | * name: name of the trace point. This is also how to enable the tracepoint. | 47 | * name: name of the trace point. This is also how to enable the tracepoint. |
diff --git a/scripts/kconfig/lxdialog/util.c b/scripts/kconfig/lxdialog/util.c index 86d95cca46a..f2375ad7ebc 100644 --- a/scripts/kconfig/lxdialog/util.c +++ b/scripts/kconfig/lxdialog/util.c | |||
| @@ -19,6 +19,8 @@ | |||
| 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <stdarg.h> | ||
| 23 | |||
| 22 | #include "dialog.h" | 24 | #include "dialog.h" |
| 23 | 25 | ||
| 24 | struct dialog_info dlg; | 26 | struct dialog_info dlg; |
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index 3bcacb4bfd3..25b60bc117f 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c | |||
| @@ -888,6 +888,8 @@ int main(int ac, char **av) | |||
| 888 | single_menu_mode = 1; | 888 | single_menu_mode = 1; |
| 889 | } | 889 | } |
| 890 | 890 | ||
| 891 | initscr(); | ||
| 892 | |||
| 891 | getyx(stdscr, saved_y, saved_x); | 893 | getyx(stdscr, saved_y, saved_x); |
| 892 | if (init_dialog(NULL)) { | 894 | if (init_dialog(NULL)) { |
| 893 | fprintf(stderr, N_("Your display is too small to run Menuconfig!\n")); | 895 | fprintf(stderr, N_("Your display is too small to run Menuconfig!\n")); |
diff --git a/scripts/package/builddeb b/scripts/package/builddeb index b19f1f4962e..8b357b0bd25 100644 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb | |||
| @@ -89,7 +89,7 @@ for script in postinst postrm preinst prerm ; do | |||
| 89 | set -e | 89 | set -e |
| 90 | 90 | ||
| 91 | # Pass maintainer script parameters to hook scripts | 91 | # Pass maintainer script parameters to hook scripts |
| 92 | export DEB_MAINT_PARAMS="\$@" | 92 | export DEB_MAINT_PARAMS="\$*" |
| 93 | 93 | ||
| 94 | test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d | 94 | test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d |
| 95 | exit 0 | 95 | exit 0 |
diff --git a/sound/arm/pxa2xx-pcm-lib.c b/sound/arm/pxa2xx-pcm-lib.c index 108b643229b..6205f37d547 100644 --- a/sound/arm/pxa2xx-pcm-lib.c +++ b/sound/arm/pxa2xx-pcm-lib.c | |||
| @@ -75,7 +75,7 @@ int __pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream) | |||
| 75 | { | 75 | { |
| 76 | struct pxa2xx_runtime_data *rtd = substream->runtime->private_data; | 76 | struct pxa2xx_runtime_data *rtd = substream->runtime->private_data; |
| 77 | 77 | ||
| 78 | if (rtd && rtd->params) | 78 | if (rtd && rtd->params && rtd->params->drcmr) |
| 79 | *rtd->params->drcmr = 0; | 79 | *rtd->params->drcmr = 0; |
| 80 | 80 | ||
| 81 | snd_pcm_set_runtime_buffer(substream, NULL); | 81 | snd_pcm_set_runtime_buffer(substream, NULL); |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index bbb9b42e260..7e99763ca52 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -4505,6 +4505,12 @@ static int alc880_parse_auto_config(struct hda_codec *codec) | |||
| 4505 | &dig_nid, 1); | 4505 | &dig_nid, 1); |
| 4506 | if (err < 0) | 4506 | if (err < 0) |
| 4507 | continue; | 4507 | continue; |
| 4508 | if (dig_nid > 0x7f) { | ||
| 4509 | printk(KERN_ERR "alc880_auto: invalid dig_nid " | ||
| 4510 | "connection 0x%x for NID 0x%x\n", dig_nid, | ||
| 4511 | spec->autocfg.dig_out_pins[i]); | ||
| 4512 | continue; | ||
| 4513 | } | ||
| 4508 | if (!i) | 4514 | if (!i) |
| 4509 | spec->multiout.dig_out_nid = dig_nid; | 4515 | spec->multiout.dig_out_nid = dig_nid; |
| 4510 | else { | 4516 | else { |
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c index 235a71e5ac8..b5ca02e2038 100644 --- a/sound/pci/riptide/riptide.c +++ b/sound/pci/riptide/riptide.c | |||
| @@ -2197,9 +2197,12 @@ static int __init alsa_card_riptide_init(void) | |||
| 2197 | if (err < 0) | 2197 | if (err < 0) |
| 2198 | return err; | 2198 | return err; |
| 2199 | #if defined(SUPPORT_JOYSTICK) | 2199 | #if defined(SUPPORT_JOYSTICK) |
| 2200 | pci_register_driver(&joystick_driver); | 2200 | err = pci_register_driver(&joystick_driver); |
| 2201 | /* On failure unregister formerly registered audio driver */ | ||
| 2202 | if (err < 0) | ||
| 2203 | pci_unregister_driver(&driver); | ||
| 2201 | #endif | 2204 | #endif |
| 2202 | return 0; | 2205 | return err; |
| 2203 | } | 2206 | } |
| 2204 | 2207 | ||
| 2205 | static void __exit alsa_card_riptide_exit(void) | 2208 | static void __exit alsa_card_riptide_exit(void) |
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index c7b902358b7..44b9cdc8a83 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
| @@ -2661,7 +2661,7 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) | |||
| 2661 | struct usb_interface_descriptor *altsd; | 2661 | struct usb_interface_descriptor *altsd; |
| 2662 | int i, altno, err, stream; | 2662 | int i, altno, err, stream; |
| 2663 | int format; | 2663 | int format; |
| 2664 | struct audioformat *fp; | 2664 | struct audioformat *fp = NULL; |
| 2665 | unsigned char *fmt, *csep; | 2665 | unsigned char *fmt, *csep; |
| 2666 | int num; | 2666 | int num; |
| 2667 | 2667 | ||
| @@ -2734,6 +2734,18 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) | |||
| 2734 | continue; | 2734 | continue; |
| 2735 | } | 2735 | } |
| 2736 | 2736 | ||
| 2737 | /* | ||
| 2738 | * Blue Microphones workaround: The last altsetting is identical | ||
| 2739 | * with the previous one, except for a larger packet size, but | ||
| 2740 | * is actually a mislabeled two-channel setting; ignore it. | ||
| 2741 | */ | ||
| 2742 | if (fmt[4] == 1 && fmt[5] == 2 && altno == 2 && num == 3 && | ||
| 2743 | fp && fp->altsetting == 1 && fp->channels == 1 && | ||
| 2744 | fp->format == SNDRV_PCM_FORMAT_S16_LE && | ||
| 2745 | le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == | ||
| 2746 | fp->maxpacksize * 2) | ||
| 2747 | continue; | ||
| 2748 | |||
| 2737 | csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT); | 2749 | csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT); |
| 2738 | /* Creamware Noah has this descriptor after the 2nd endpoint */ | 2750 | /* Creamware Noah has this descriptor after the 2nd endpoint */ |
| 2739 | if (!csep && altsd->bNumEndpoints >= 2) | 2751 | if (!csep && altsd->bNumEndpoints >= 2) |
