diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-08-19 17:27:27 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-08-19 17:27:27 -0400 |
| commit | 499792ec6dc737467e5486527cef95ed7d74fba9 (patch) | |
| tree | b88c4ef9d4491c17f71d26d33e73f05f7c7ea6a0 | |
| parent | 421b20b9c44b3fcdc07d6af875dad5ae86fad014 (diff) | |
| parent | d14b50cc60ca465290fcdb3b88e7d5fb684361ed (diff) | |
Merge branch 'upstream-fixes' into upstream
152 files changed, 2010 insertions, 768 deletions
diff --git a/Documentation/fb/imacfb.txt b/Documentation/fb/imacfb.txt new file mode 100644 index 000000000000..759028545a7e --- /dev/null +++ b/Documentation/fb/imacfb.txt | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | |||
| 2 | What is imacfb? | ||
| 3 | =============== | ||
| 4 | |||
| 5 | This is a generic EFI platform driver for Intel based Apple computers. | ||
| 6 | Imacfb is only for EFI booted Intel Macs. | ||
| 7 | |||
| 8 | Supported Hardware | ||
| 9 | ================== | ||
| 10 | |||
| 11 | iMac 17"/20" | ||
| 12 | Macbook | ||
| 13 | Macbook Pro 15"/17" | ||
| 14 | MacMini | ||
| 15 | |||
| 16 | How to use it? | ||
| 17 | ============== | ||
| 18 | |||
| 19 | Imacfb does not have any kind of autodetection of your machine. | ||
| 20 | You have to add the fillowing kernel parameters in your elilo.conf: | ||
| 21 | Macbook : | ||
| 22 | video=imacfb:macbook | ||
| 23 | MacMini : | ||
| 24 | video=imacfb:mini | ||
| 25 | Macbook Pro 15", iMac 17" : | ||
| 26 | video=imacfb:i17 | ||
| 27 | Macbook Pro 17", iMac 20" : | ||
| 28 | video=imacfb:i20 | ||
| 29 | |||
| 30 | -- | ||
| 31 | Edgar Hucek <gimli@dark-green.com> | ||
diff --git a/Documentation/kobject.txt b/Documentation/kobject.txt index 8d9bffbd192c..949f7b5a2053 100644 --- a/Documentation/kobject.txt +++ b/Documentation/kobject.txt | |||
| @@ -247,7 +247,7 @@ the object-specific fields, which include: | |||
| 247 | - default_attrs: Default attributes to be exported via sysfs when the | 247 | - default_attrs: Default attributes to be exported via sysfs when the |
| 248 | object is registered.Note that the last attribute has to be | 248 | object is registered.Note that the last attribute has to be |
| 249 | initialized to NULL ! You can find a complete implementation | 249 | initialized to NULL ! You can find a complete implementation |
| 250 | in drivers/block/genhd.c | 250 | in block/genhd.c |
| 251 | 251 | ||
| 252 | 252 | ||
| 253 | Instances of struct kobj_type are not registered; only referenced by | 253 | Instances of struct kobj_type are not registered; only referenced by |
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index d46338af6002..3e0c017e7877 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt | |||
| @@ -294,15 +294,15 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max | |||
| 294 | Default: 87380*2 bytes. | 294 | Default: 87380*2 bytes. |
| 295 | 295 | ||
| 296 | tcp_mem - vector of 3 INTEGERs: min, pressure, max | 296 | tcp_mem - vector of 3 INTEGERs: min, pressure, max |
| 297 | low: below this number of pages TCP is not bothered about its | 297 | min: below this number of pages TCP is not bothered about its |
| 298 | memory appetite. | 298 | memory appetite. |
| 299 | 299 | ||
| 300 | pressure: when amount of memory allocated by TCP exceeds this number | 300 | pressure: when amount of memory allocated by TCP exceeds this number |
| 301 | of pages, TCP moderates its memory consumption and enters memory | 301 | of pages, TCP moderates its memory consumption and enters memory |
| 302 | pressure mode, which is exited when memory consumption falls | 302 | pressure mode, which is exited when memory consumption falls |
| 303 | under "low". | 303 | under "min". |
| 304 | 304 | ||
| 305 | high: number of pages allowed for queueing by all TCP sockets. | 305 | max: number of pages allowed for queueing by all TCP sockets. |
| 306 | 306 | ||
| 307 | Defaults are calculated at boot time from amount of available | 307 | Defaults are calculated at boot time from amount of available |
| 308 | memory. | 308 | memory. |
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt index 3c62e66e1fcc..8c48b8a27b9c 100644 --- a/Documentation/powerpc/booting-without-of.txt +++ b/Documentation/powerpc/booting-without-of.txt | |||
| @@ -1196,7 +1196,7 @@ platforms are moved over to use the flattened-device-tree model. | |||
| 1196 | - model : Model of the device. Can be "TSEC", "eTSEC", or "FEC" | 1196 | - model : Model of the device. Can be "TSEC", "eTSEC", or "FEC" |
| 1197 | - compatible : Should be "gianfar" | 1197 | - compatible : Should be "gianfar" |
| 1198 | - reg : Offset and length of the register set for the device | 1198 | - reg : Offset and length of the register set for the device |
| 1199 | - address : List of bytes representing the ethernet address of | 1199 | - mac-address : List of bytes representing the ethernet address of |
| 1200 | this controller | 1200 | this controller |
| 1201 | - interrupts : <a b> where a is the interrupt number and b is a | 1201 | - interrupts : <a b> where a is the interrupt number and b is a |
| 1202 | field that represents an encoding of the sense and level | 1202 | field that represents an encoding of the sense and level |
| @@ -1216,7 +1216,7 @@ platforms are moved over to use the flattened-device-tree model. | |||
| 1216 | model = "TSEC"; | 1216 | model = "TSEC"; |
| 1217 | compatible = "gianfar"; | 1217 | compatible = "gianfar"; |
| 1218 | reg = <24000 1000>; | 1218 | reg = <24000 1000>; |
| 1219 | address = [ 00 E0 0C 00 73 00 ]; | 1219 | mac-address = [ 00 E0 0C 00 73 00 ]; |
| 1220 | interrupts = <d 3 e 3 12 3>; | 1220 | interrupts = <d 3 e 3 12 3>; |
| 1221 | interrupt-parent = <40000>; | 1221 | interrupt-parent = <40000>; |
| 1222 | phy-handle = <2452000> | 1222 | phy-handle = <2452000> |
| @@ -1498,7 +1498,7 @@ not necessary as they are usually the same as the root node. | |||
| 1498 | model = "TSEC"; | 1498 | model = "TSEC"; |
| 1499 | compatible = "gianfar"; | 1499 | compatible = "gianfar"; |
| 1500 | reg = <24000 1000>; | 1500 | reg = <24000 1000>; |
| 1501 | address = [ 00 E0 0C 00 73 00 ]; | 1501 | mac-address = [ 00 E0 0C 00 73 00 ]; |
| 1502 | interrupts = <d 3 e 3 12 3>; | 1502 | interrupts = <d 3 e 3 12 3>; |
| 1503 | interrupt-parent = <40000>; | 1503 | interrupt-parent = <40000>; |
| 1504 | phy-handle = <2452000>; | 1504 | phy-handle = <2452000>; |
| @@ -1511,7 +1511,7 @@ not necessary as they are usually the same as the root node. | |||
| 1511 | model = "TSEC"; | 1511 | model = "TSEC"; |
| 1512 | compatible = "gianfar"; | 1512 | compatible = "gianfar"; |
| 1513 | reg = <25000 1000>; | 1513 | reg = <25000 1000>; |
| 1514 | address = [ 00 E0 0C 00 73 01 ]; | 1514 | mac-address = [ 00 E0 0C 00 73 01 ]; |
| 1515 | interrupts = <13 3 14 3 18 3>; | 1515 | interrupts = <13 3 14 3 18 3>; |
| 1516 | interrupt-parent = <40000>; | 1516 | interrupt-parent = <40000>; |
| 1517 | phy-handle = <2452001>; | 1517 | phy-handle = <2452001>; |
| @@ -1524,7 +1524,7 @@ not necessary as they are usually the same as the root node. | |||
| 1524 | model = "FEC"; | 1524 | model = "FEC"; |
| 1525 | compatible = "gianfar"; | 1525 | compatible = "gianfar"; |
| 1526 | reg = <26000 1000>; | 1526 | reg = <26000 1000>; |
| 1527 | address = [ 00 E0 0C 00 73 02 ]; | 1527 | mac-address = [ 00 E0 0C 00 73 02 ]; |
| 1528 | interrupts = <19 3>; | 1528 | interrupts = <19 3>; |
| 1529 | interrupt-parent = <40000>; | 1529 | interrupt-parent = <40000>; |
| 1530 | phy-handle = <2452002>; | 1530 | phy-handle = <2452002>; |
diff --git a/MAINTAINERS b/MAINTAINERS index e3e1515ba5a9..21116cc3b4a5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -2656,6 +2656,14 @@ M: chrisw@sous-sol.org | |||
| 2656 | L: stable@kernel.org | 2656 | L: stable@kernel.org |
| 2657 | S: Maintained | 2657 | S: Maintained |
| 2658 | 2658 | ||
| 2659 | STABLE BRANCH: | ||
| 2660 | P: Greg Kroah-Hartman | ||
| 2661 | M: greg@kroah.com | ||
| 2662 | P: Chris Wright | ||
| 2663 | M: chrisw@sous-sol.org | ||
| 2664 | L: stable@kernel.org | ||
| 2665 | S: Maintained | ||
| 2666 | |||
| 2659 | TPM DEVICE DRIVER | 2667 | TPM DEVICE DRIVER |
| 2660 | P: Kylene Hall | 2668 | P: Kylene Hall |
| 2661 | M: kjhall@us.ibm.com | 2669 | M: kjhall@us.ibm.com |
| @@ -309,9 +309,6 @@ CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE) | |||
| 309 | 309 | ||
| 310 | CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ | 310 | CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ |
| 311 | -fno-strict-aliasing -fno-common | 311 | -fno-strict-aliasing -fno-common |
| 312 | # Force gcc to behave correct even for buggy distributions | ||
| 313 | CFLAGS += $(call cc-option, -fno-stack-protector) | ||
| 314 | |||
| 315 | AFLAGS := -D__ASSEMBLY__ | 312 | AFLAGS := -D__ASSEMBLY__ |
| 316 | 313 | ||
| 317 | # Read KERNELRELEASE from include/config/kernel.release (if it exists) | 314 | # Read KERNELRELEASE from include/config/kernel.release (if it exists) |
| @@ -436,12 +433,13 @@ core-y := usr/ | |||
| 436 | endif # KBUILD_EXTMOD | 433 | endif # KBUILD_EXTMOD |
| 437 | 434 | ||
| 438 | ifeq ($(dot-config),1) | 435 | ifeq ($(dot-config),1) |
| 439 | # In this section, we need .config | 436 | # Read in config |
| 437 | -include include/config/auto.conf | ||
| 440 | 438 | ||
| 439 | ifeq ($(KBUILD_EXTMOD),) | ||
| 441 | # Read in dependencies to all Kconfig* files, make sure to run | 440 | # Read in dependencies to all Kconfig* files, make sure to run |
| 442 | # oldconfig if changes are detected. | 441 | # oldconfig if changes are detected. |
| 443 | -include include/config/auto.conf.cmd | 442 | -include include/config/auto.conf.cmd |
| 444 | -include include/config/auto.conf | ||
| 445 | 443 | ||
| 446 | # To avoid any implicit rule to kick in, define an empty command | 444 | # To avoid any implicit rule to kick in, define an empty command |
| 447 | $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ; | 445 | $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ; |
| @@ -451,16 +449,27 @@ $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ; | |||
| 451 | # if auto.conf.cmd is missing then we are probably in a cleaned tree so | 449 | # if auto.conf.cmd is missing then we are probably in a cleaned tree so |
| 452 | # we execute the config step to be sure to catch updated Kconfig files | 450 | # we execute the config step to be sure to catch updated Kconfig files |
| 453 | include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd | 451 | include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd |
| 454 | ifeq ($(KBUILD_EXTMOD),) | ||
| 455 | $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig | 452 | $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig |
| 456 | else | 453 | else |
| 457 | $(error kernel configuration not valid - run 'make prepare' in $(srctree) to update it) | 454 | # external modules needs include/linux/autoconf.h and include/config/auto.conf |
| 458 | endif | 455 | # but do not care if they are up-to-date. Use auto.conf to trigger the test |
| 456 | PHONY += include/config/auto.conf | ||
| 457 | |||
| 458 | include/config/auto.conf: | ||
| 459 | $(Q)test -e include/linux/autoconf.h -a -e $@ || ( \ | ||
| 460 | echo; \ | ||
| 461 | echo " ERROR: Kernel configuration is invalid."; \ | ||
| 462 | echo " include/linux/autoconf.h or $@ are missing."; \ | ||
| 463 | echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ | ||
| 464 | echo; \ | ||
| 465 | /bin/false) | ||
| 466 | |||
| 467 | endif # KBUILD_EXTMOD | ||
| 459 | 468 | ||
| 460 | else | 469 | else |
| 461 | # Dummy target needed, because used as prerequisite | 470 | # Dummy target needed, because used as prerequisite |
| 462 | include/config/auto.conf: ; | 471 | include/config/auto.conf: ; |
| 463 | endif | 472 | endif # $(dot-config) |
| 464 | 473 | ||
| 465 | # The all: target is the default when no target is given on the | 474 | # The all: target is the default when no target is given on the |
| 466 | # command line. | 475 | # command line. |
| @@ -474,6 +483,8 @@ else | |||
| 474 | CFLAGS += -O2 | 483 | CFLAGS += -O2 |
| 475 | endif | 484 | endif |
| 476 | 485 | ||
| 486 | include $(srctree)/arch/$(ARCH)/Makefile | ||
| 487 | |||
| 477 | ifdef CONFIG_FRAME_POINTER | 488 | ifdef CONFIG_FRAME_POINTER |
| 478 | CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,) | 489 | CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,) |
| 479 | else | 490 | else |
| @@ -488,7 +499,8 @@ ifdef CONFIG_DEBUG_INFO | |||
| 488 | CFLAGS += -g | 499 | CFLAGS += -g |
| 489 | endif | 500 | endif |
| 490 | 501 | ||
| 491 | include $(srctree)/arch/$(ARCH)/Makefile | 502 | # Force gcc to behave correct even for buggy distributions |
| 503 | CFLAGS += $(call cc-option, -fno-stack-protector) | ||
| 492 | 504 | ||
| 493 | # arch Makefile may override CC so keep this after arch Makefile is included | 505 | # arch Makefile may override CC so keep this after arch Makefile is included |
| 494 | NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) | 506 | NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) |
diff --git a/arch/arm/common/rtctime.c b/arch/arm/common/rtctime.c index 35c9a64ac14c..4e5445cfb0ea 100644 --- a/arch/arm/common/rtctime.c +++ b/arch/arm/common/rtctime.c | |||
| @@ -68,6 +68,7 @@ void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc | |||
| 68 | rtc_time_to_tm(next_time, next); | 68 | rtc_time_to_tm(next_time, next); |
| 69 | } | 69 | } |
| 70 | } | 70 | } |
| 71 | EXPORT_SYMBOL(rtc_next_alarm_time); | ||
| 71 | 72 | ||
| 72 | static inline int rtc_arm_read_time(struct rtc_ops *ops, struct rtc_time *tm) | 73 | static inline int rtc_arm_read_time(struct rtc_ops *ops, struct rtc_time *tm) |
| 73 | { | 74 | { |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 4e29dd03e582..aeeed806f991 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
| @@ -233,7 +233,7 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err) | |||
| 233 | spin_unlock_irq(&die_lock); | 233 | spin_unlock_irq(&die_lock); |
| 234 | 234 | ||
| 235 | if (panic_on_oops) | 235 | if (panic_on_oops) |
| 236 | panic("Fatal exception: panic_on_oops"); | 236 | panic("Fatal exception"); |
| 237 | 237 | ||
| 238 | do_exit(SIGSEGV); | 238 | do_exit(SIGSEGV); |
| 239 | } | 239 | } |
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index 2d40fe1145f0..9562177b5fe1 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c | |||
| @@ -532,8 +532,6 @@ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) | |||
| 532 | return -EIO; | 532 | return -EIO; |
| 533 | } | 533 | } |
| 534 | 534 | ||
| 535 | EXPORT_SYMBOL(pci_set_dma_mask); | ||
| 536 | EXPORT_SYMBOL(pci_set_consistent_dma_mask); | ||
| 537 | EXPORT_SYMBOL(ixp4xx_pci_read); | 535 | EXPORT_SYMBOL(ixp4xx_pci_read); |
| 538 | EXPORT_SYMBOL(ixp4xx_pci_write); | 536 | EXPORT_SYMBOL(ixp4xx_pci_write); |
| 539 | 537 | ||
diff --git a/arch/arm/mach-ixp4xx/gtwx5715-setup.c b/arch/arm/mach-ixp4xx/gtwx5715-setup.c index 654e2eed81fb..30f1300e0e21 100644 --- a/arch/arm/mach-ixp4xx/gtwx5715-setup.c +++ b/arch/arm/mach-ixp4xx/gtwx5715-setup.c | |||
| @@ -107,9 +107,9 @@ static struct flash_platform_data gtwx5715_flash_data = { | |||
| 107 | .width = 2, | 107 | .width = 2, |
| 108 | }; | 108 | }; |
| 109 | 109 | ||
| 110 | static struct gtw5715_flash_resource = { | 110 | static struct resource gtwx5715_flash_resource = { |
| 111 | .flags = IORESOURCE_MEM, | 111 | .flags = IORESOURCE_MEM, |
| 112 | } | 112 | }; |
| 113 | 113 | ||
| 114 | static struct platform_device gtwx5715_flash = { | 114 | static struct platform_device gtwx5715_flash = { |
| 115 | .name = "IXP4XX-Flash", | 115 | .name = "IXP4XX-Flash", |
| @@ -130,9 +130,6 @@ static void __init gtwx5715_init(void) | |||
| 130 | { | 130 | { |
| 131 | ixp4xx_sys_init(); | 131 | ixp4xx_sys_init(); |
| 132 | 132 | ||
| 133 | if (!flash_resource) | ||
| 134 | printk(KERN_ERR "Could not allocate flash resource\n"); | ||
| 135 | |||
| 136 | gtwx5715_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | 133 | gtwx5715_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); |
| 137 | gtwx5715_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_8M - 1; | 134 | gtwx5715_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_8M - 1; |
| 138 | 135 | ||
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 0d4005dc06c5..82e0fd02af1c 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c | |||
| @@ -454,7 +454,7 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
| 454 | panic("Fatal exception in interrupt"); | 454 | panic("Fatal exception in interrupt"); |
| 455 | 455 | ||
| 456 | if (panic_on_oops) | 456 | if (panic_on_oops) |
| 457 | panic("Fatal exception: panic_on_oops"); | 457 | panic("Fatal exception"); |
| 458 | 458 | ||
| 459 | oops_exit(); | 459 | oops_exit(); |
| 460 | do_exit(SIGSEGV); | 460 | do_exit(SIGSEGV); |
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c index 5a0420464c6c..fffa9e0826bc 100644 --- a/arch/ia64/kernel/traps.c +++ b/arch/ia64/kernel/traps.c | |||
| @@ -118,7 +118,7 @@ die (const char *str, struct pt_regs *regs, long err) | |||
| 118 | spin_unlock_irq(&die.lock); | 118 | spin_unlock_irq(&die.lock); |
| 119 | 119 | ||
| 120 | if (panic_on_oops) | 120 | if (panic_on_oops) |
| 121 | panic("Fatal exception: panic_on_oops"); | 121 | panic("Fatal exception"); |
| 122 | 122 | ||
| 123 | do_exit(SIGSEGV); | 123 | do_exit(SIGSEGV); |
| 124 | } | 124 | } |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 13e583f16ede..abb325eb8f75 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -836,9 +836,10 @@ config MCA | |||
| 836 | bool | 836 | bool |
| 837 | 837 | ||
| 838 | config PCI | 838 | config PCI |
| 839 | bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_MPC52xx || (EMBEDDED && PPC_ISERIES) \ | 839 | bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \ |
| 840 | || MPC7448HPC2 | 840 | || PPC_MPC52xx || (EMBEDDED && PPC_ISERIES) || MPC7448HPC2 |
| 841 | default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx && !PPC_85xx && !PPC_86xx | 841 | default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx \ |
| 842 | && !PPC_85xx && !PPC_86xx | ||
| 842 | default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS | 843 | default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS |
| 843 | default PCI_QSPAN if !4xx && !CPM2 && 8xx | 844 | default PCI_QSPAN if !4xx && !CPM2 && 8xx |
| 844 | help | 845 | help |
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts new file mode 100644 index 000000000000..f0c7731743ea --- /dev/null +++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts | |||
| @@ -0,0 +1,339 @@ | |||
| 1 | /* | ||
| 2 | * MPC8641 HPCN Device Tree Source | ||
| 3 | * | ||
| 4 | * Copyright 2006 Freescale Semiconductor Inc. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify it | ||
| 7 | * under the terms of the GNU General Public License as published by the | ||
| 8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 9 | * option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | |||
| 13 | / { | ||
| 14 | model = "MPC8641HPCN"; | ||
| 15 | compatible = "mpc86xx"; | ||
| 16 | #address-cells = <1>; | ||
| 17 | #size-cells = <1>; | ||
| 18 | |||
| 19 | cpus { | ||
| 20 | #cpus = <2>; | ||
| 21 | #address-cells = <1>; | ||
| 22 | #size-cells = <0>; | ||
| 23 | |||
| 24 | PowerPC,8641@0 { | ||
| 25 | device_type = "cpu"; | ||
| 26 | reg = <0>; | ||
| 27 | d-cache-line-size = <20>; // 32 bytes | ||
| 28 | i-cache-line-size = <20>; // 32 bytes | ||
| 29 | d-cache-size = <8000>; // L1, 32K | ||
| 30 | i-cache-size = <8000>; // L1, 32K | ||
| 31 | timebase-frequency = <0>; // 33 MHz, from uboot | ||
| 32 | bus-frequency = <0>; // From uboot | ||
| 33 | clock-frequency = <0>; // From uboot | ||
| 34 | 32-bit; | ||
| 35 | linux,boot-cpu; | ||
| 36 | }; | ||
| 37 | PowerPC,8641@1 { | ||
| 38 | device_type = "cpu"; | ||
| 39 | reg = <1>; | ||
| 40 | d-cache-line-size = <20>; // 32 bytes | ||
| 41 | i-cache-line-size = <20>; // 32 bytes | ||
| 42 | d-cache-size = <8000>; // L1, 32K | ||
| 43 | i-cache-size = <8000>; // L1, 32K | ||
| 44 | timebase-frequency = <0>; // 33 MHz, from uboot | ||
| 45 | bus-frequency = <0>; // From uboot | ||
| 46 | clock-frequency = <0>; // From uboot | ||
| 47 | 32-bit; | ||
| 48 | }; | ||
| 49 | }; | ||
| 50 | |||
| 51 | memory { | ||
| 52 | device_type = "memory"; | ||
| 53 | reg = <00000000 40000000>; // 1G at 0x0 | ||
| 54 | }; | ||
| 55 | |||
| 56 | soc8641@f8000000 { | ||
| 57 | #address-cells = <1>; | ||
| 58 | #size-cells = <1>; | ||
| 59 | #interrupt-cells = <2>; | ||
| 60 | device_type = "soc"; | ||
| 61 | ranges = <0 f8000000 00100000>; | ||
| 62 | reg = <f8000000 00100000>; // CCSRBAR 1M | ||
| 63 | bus-frequency = <0>; | ||
| 64 | |||
| 65 | i2c@3000 { | ||
| 66 | device_type = "i2c"; | ||
| 67 | compatible = "fsl-i2c"; | ||
| 68 | reg = <3000 100>; | ||
| 69 | interrupts = <2b 2>; | ||
| 70 | interrupt-parent = <40000>; | ||
| 71 | dfsrr; | ||
| 72 | }; | ||
| 73 | |||
| 74 | i2c@3100 { | ||
| 75 | device_type = "i2c"; | ||
| 76 | compatible = "fsl-i2c"; | ||
| 77 | reg = <3100 100>; | ||
| 78 | interrupts = <2b 2>; | ||
| 79 | interrupt-parent = <40000>; | ||
| 80 | dfsrr; | ||
| 81 | }; | ||
| 82 | |||
| 83 | mdio@24520 { | ||
| 84 | #address-cells = <1>; | ||
| 85 | #size-cells = <0>; | ||
| 86 | device_type = "mdio"; | ||
| 87 | compatible = "gianfar"; | ||
| 88 | reg = <24520 20>; | ||
| 89 | linux,phandle = <24520>; | ||
| 90 | ethernet-phy@0 { | ||
| 91 | linux,phandle = <2452000>; | ||
| 92 | interrupt-parent = <40000>; | ||
| 93 | interrupts = <4a 1>; | ||
| 94 | reg = <0>; | ||
| 95 | device_type = "ethernet-phy"; | ||
| 96 | }; | ||
| 97 | ethernet-phy@1 { | ||
| 98 | linux,phandle = <2452001>; | ||
| 99 | interrupt-parent = <40000>; | ||
| 100 | interrupts = <4a 1>; | ||
| 101 | reg = <1>; | ||
| 102 | device_type = "ethernet-phy"; | ||
| 103 | }; | ||
| 104 | ethernet-phy@2 { | ||
| 105 | linux,phandle = <2452002>; | ||
| 106 | interrupt-parent = <40000>; | ||
| 107 | interrupts = <4a 1>; | ||
| 108 | reg = <2>; | ||
| 109 | device_type = "ethernet-phy"; | ||
| 110 | }; | ||
| 111 | ethernet-phy@3 { | ||
| 112 | linux,phandle = <2452003>; | ||
| 113 | interrupt-parent = <40000>; | ||
| 114 | interrupts = <4a 1>; | ||
| 115 | reg = <3>; | ||
| 116 | device_type = "ethernet-phy"; | ||
| 117 | }; | ||
| 118 | }; | ||
| 119 | |||
| 120 | ethernet@24000 { | ||
| 121 | #address-cells = <1>; | ||
| 122 | #size-cells = <0>; | ||
| 123 | device_type = "network"; | ||
| 124 | model = "TSEC"; | ||
| 125 | compatible = "gianfar"; | ||
| 126 | reg = <24000 1000>; | ||
| 127 | mac-address = [ 00 E0 0C 00 73 00 ]; | ||
| 128 | interrupts = <1d 2 1e 2 22 2>; | ||
| 129 | interrupt-parent = <40000>; | ||
| 130 | phy-handle = <2452000>; | ||
| 131 | }; | ||
| 132 | |||
| 133 | ethernet@25000 { | ||
| 134 | #address-cells = <1>; | ||
| 135 | #size-cells = <0>; | ||
| 136 | device_type = "network"; | ||
| 137 | model = "TSEC"; | ||
| 138 | compatible = "gianfar"; | ||
| 139 | reg = <25000 1000>; | ||
| 140 | mac-address = [ 00 E0 0C 00 73 01 ]; | ||
| 141 | interrupts = <23 2 24 2 28 2>; | ||
| 142 | interrupt-parent = <40000>; | ||
| 143 | phy-handle = <2452001>; | ||
| 144 | }; | ||
| 145 | |||
| 146 | ethernet@26000 { | ||
| 147 | #address-cells = <1>; | ||
| 148 | #size-cells = <0>; | ||
| 149 | device_type = "network"; | ||
| 150 | model = "TSEC"; | ||
| 151 | compatible = "gianfar"; | ||
| 152 | reg = <26000 1000>; | ||
| 153 | mac-address = [ 00 E0 0C 00 02 FD ]; | ||
| 154 | interrupts = <1F 2 20 2 21 2>; | ||
| 155 | interrupt-parent = <40000>; | ||
| 156 | phy-handle = <2452002>; | ||
| 157 | }; | ||
| 158 | |||
| 159 | ethernet@27000 { | ||
| 160 | #address-cells = <1>; | ||
| 161 | #size-cells = <0>; | ||
| 162 | device_type = "network"; | ||
| 163 | model = "TSEC"; | ||
| 164 | compatible = "gianfar"; | ||
| 165 | reg = <27000 1000>; | ||
| 166 | mac-address = [ 00 E0 0C 00 03 FD ]; | ||
| 167 | interrupts = <25 2 26 2 27 2>; | ||
| 168 | interrupt-parent = <40000>; | ||
| 169 | phy-handle = <2452003>; | ||
| 170 | }; | ||
| 171 | serial@4500 { | ||
| 172 | device_type = "serial"; | ||
| 173 | compatible = "ns16550"; | ||
| 174 | reg = <4500 100>; | ||
| 175 | clock-frequency = <0>; | ||
| 176 | interrupts = <2a 2>; | ||
| 177 | interrupt-parent = <40000>; | ||
| 178 | }; | ||
| 179 | |||
| 180 | serial@4600 { | ||
| 181 | device_type = "serial"; | ||
| 182 | compatible = "ns16550"; | ||
| 183 | reg = <4600 100>; | ||
| 184 | clock-frequency = <0>; | ||
| 185 | interrupts = <1c 2>; | ||
| 186 | interrupt-parent = <40000>; | ||
| 187 | }; | ||
| 188 | |||
| 189 | pci@8000 { | ||
| 190 | compatible = "86xx"; | ||
| 191 | device_type = "pci"; | ||
| 192 | #interrupt-cells = <1>; | ||
| 193 | #size-cells = <2>; | ||
| 194 | #address-cells = <3>; | ||
| 195 | reg = <8000 1000>; | ||
| 196 | bus-range = <0 fe>; | ||
| 197 | ranges = <02000000 0 80000000 80000000 0 20000000 | ||
| 198 | 01000000 0 00000000 e2000000 0 00100000>; | ||
| 199 | clock-frequency = <1fca055>; | ||
| 200 | interrupt-parent = <40000>; | ||
| 201 | interrupts = <18 2>; | ||
| 202 | interrupt-map-mask = <f800 0 0 7>; | ||
| 203 | interrupt-map = < | ||
| 204 | /* IDSEL 0x11 */ | ||
| 205 | 8800 0 0 1 4d0 3 2 | ||
| 206 | 8800 0 0 2 4d0 4 2 | ||
| 207 | 8800 0 0 3 4d0 5 2 | ||
| 208 | 8800 0 0 4 4d0 6 2 | ||
| 209 | |||
| 210 | /* IDSEL 0x12 */ | ||
| 211 | 9000 0 0 1 4d0 4 2 | ||
| 212 | 9000 0 0 2 4d0 5 2 | ||
| 213 | 9000 0 0 3 4d0 6 2 | ||
| 214 | 9000 0 0 4 4d0 3 2 | ||
| 215 | |||
| 216 | /* IDSEL 0x13 */ | ||
| 217 | 9800 0 0 1 4d0 0 0 | ||
| 218 | 9800 0 0 2 4d0 0 0 | ||
| 219 | 9800 0 0 3 4d0 0 0 | ||
| 220 | 9800 0 0 4 4d0 0 0 | ||
| 221 | |||
| 222 | /* IDSEL 0x14 */ | ||
| 223 | a000 0 0 1 4d0 0 0 | ||
| 224 | a000 0 0 2 4d0 0 0 | ||
| 225 | a000 0 0 3 4d0 0 0 | ||
| 226 | a000 0 0 4 4d0 0 0 | ||
| 227 | |||
| 228 | /* IDSEL 0x15 */ | ||
| 229 | a800 0 0 1 4d0 0 0 | ||
| 230 | a800 0 0 2 4d0 0 0 | ||
| 231 | a800 0 0 3 4d0 0 0 | ||
| 232 | a800 0 0 4 4d0 0 0 | ||
| 233 | |||
| 234 | /* IDSEL 0x16 */ | ||
| 235 | b000 0 0 1 4d0 0 0 | ||
| 236 | b000 0 0 2 4d0 0 0 | ||
| 237 | b000 0 0 3 4d0 0 0 | ||
| 238 | b000 0 0 4 4d0 0 0 | ||
| 239 | |||
| 240 | /* IDSEL 0x17 */ | ||
| 241 | b800 0 0 1 4d0 0 0 | ||
| 242 | b800 0 0 2 4d0 0 0 | ||
| 243 | b800 0 0 3 4d0 0 0 | ||
| 244 | b800 0 0 4 4d0 0 0 | ||
| 245 | |||
| 246 | /* IDSEL 0x18 */ | ||
| 247 | c000 0 0 1 4d0 0 0 | ||
| 248 | c000 0 0 2 4d0 0 0 | ||
| 249 | c000 0 0 3 4d0 0 0 | ||
| 250 | c000 0 0 4 4d0 0 0 | ||
| 251 | |||
| 252 | /* IDSEL 0x19 */ | ||
| 253 | c800 0 0 1 4d0 0 0 | ||
| 254 | c800 0 0 2 4d0 0 0 | ||
| 255 | c800 0 0 3 4d0 0 0 | ||
| 256 | c800 0 0 4 4d0 0 0 | ||
| 257 | |||
| 258 | /* IDSEL 0x1a */ | ||
| 259 | d000 0 0 1 4d0 6 2 | ||
| 260 | d000 0 0 2 4d0 3 2 | ||
| 261 | d000 0 0 3 4d0 4 2 | ||
| 262 | d000 0 0 4 4d0 5 2 | ||
| 263 | |||
| 264 | |||
| 265 | /* IDSEL 0x1b */ | ||
| 266 | d800 0 0 1 4d0 5 2 | ||
| 267 | d800 0 0 2 4d0 0 0 | ||
| 268 | d800 0 0 3 4d0 0 0 | ||
| 269 | d800 0 0 4 4d0 0 0 | ||
| 270 | |||
| 271 | /* IDSEL 0x1c */ | ||
| 272 | e000 0 0 1 4d0 9 2 | ||
| 273 | e000 0 0 2 4d0 a 2 | ||
| 274 | e000 0 0 3 4d0 c 2 | ||
| 275 | e000 0 0 4 4d0 7 2 | ||
| 276 | |||
| 277 | /* IDSEL 0x1d */ | ||
| 278 | e800 0 0 1 4d0 9 2 | ||
| 279 | e800 0 0 2 4d0 a 2 | ||
| 280 | e800 0 0 3 4d0 b 2 | ||
| 281 | e800 0 0 4 4d0 0 0 | ||
| 282 | |||
| 283 | /* IDSEL 0x1e */ | ||
| 284 | f000 0 0 1 4d0 c 2 | ||
| 285 | f000 0 0 2 4d0 0 0 | ||
| 286 | f000 0 0 3 4d0 0 0 | ||
| 287 | f000 0 0 4 4d0 0 0 | ||
| 288 | |||
| 289 | /* IDSEL 0x1f */ | ||
| 290 | f800 0 0 1 4d0 6 2 | ||
| 291 | f800 0 0 2 4d0 0 0 | ||
| 292 | f800 0 0 3 4d0 0 0 | ||
| 293 | f800 0 0 4 4d0 0 0 | ||
| 294 | >; | ||
| 295 | i8259@4d0 { | ||
| 296 | linux,phandle = <4d0>; | ||
| 297 | clock-frequency = <0>; | ||
| 298 | interrupt-controller; | ||
| 299 | device_type = "interrupt-controller"; | ||
| 300 | #address-cells = <0>; | ||
| 301 | #interrupt-cells = <2>; | ||
| 302 | built-in; | ||
| 303 | compatible = "chrp,iic"; | ||
| 304 | big-endian; | ||
| 305 | interrupts = <49 2>; | ||
| 306 | interrupt-parent = <40000>; | ||
| 307 | }; | ||
| 308 | |||
| 309 | }; | ||
| 310 | pic@40000 { | ||
| 311 | linux,phandle = <40000>; | ||
| 312 | clock-frequency = <0>; | ||
| 313 | interrupt-controller; | ||
| 314 | #address-cells = <0>; | ||
| 315 | #interrupt-cells = <2>; | ||
| 316 | reg = <40000 40000>; | ||
| 317 | built-in; | ||
| 318 | compatible = "chrp,open-pic"; | ||
| 319 | device_type = "open-pic"; | ||
| 320 | big-endian; | ||
| 321 | interrupts = < | ||
| 322 | 10 2 11 2 12 2 13 2 | ||
| 323 | 14 2 15 2 16 2 17 2 | ||
| 324 | 18 2 19 2 1a 2 1b 2 | ||
| 325 | 1c 2 1d 2 1e 2 1f 2 | ||
| 326 | 20 2 21 2 22 2 23 2 | ||
| 327 | 24 2 25 2 26 2 27 2 | ||
| 328 | 28 2 29 2 2a 2 2b 2 | ||
| 329 | 2c 2 2d 2 2e 2 2f 2 | ||
| 330 | 30 2 31 2 32 2 33 2 | ||
| 331 | 34 2 35 2 36 2 37 2 | ||
| 332 | 38 2 39 2 2a 2 3b 2 | ||
| 333 | 3c 2 3d 2 3e 2 3f 2 | ||
| 334 | 48 1 49 2 4a 1 | ||
| 335 | >; | ||
| 336 | interrupt-parent = <40000>; | ||
| 337 | }; | ||
| 338 | }; | ||
| 339 | }; | ||
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig index a45627547d03..8c6bd17c6929 100644 --- a/arch/powerpc/configs/g5_defconfig +++ b/arch/powerpc/configs/g5_defconfig | |||
| @@ -1,16 +1,18 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.17-rc1 | 3 | # Linux kernel version: 2.6.18-rc3 |
| 4 | # Wed Apr 19 13:24:37 2006 | 4 | # Tue Aug 8 09:12:29 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
| 7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
| 8 | CONFIG_PPC_MERGE=y | 8 | CONFIG_PPC_MERGE=y |
| 9 | CONFIG_MMU=y | 9 | CONFIG_MMU=y |
| 10 | CONFIG_GENERIC_HARDIRQS=y | 10 | CONFIG_GENERIC_HARDIRQS=y |
| 11 | CONFIG_IRQ_PER_CPU=y | ||
| 11 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
| 12 | CONFIG_GENERIC_HWEIGHT=y | 13 | CONFIG_GENERIC_HWEIGHT=y |
| 13 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 14 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 15 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 14 | CONFIG_PPC=y | 16 | CONFIG_PPC=y |
| 15 | CONFIG_EARLY_PRINTK=y | 17 | CONFIG_EARLY_PRINTK=y |
| 16 | CONFIG_COMPAT=y | 18 | CONFIG_COMPAT=y |
| @@ -33,6 +35,7 @@ CONFIG_PPC_STD_MMU=y | |||
| 33 | CONFIG_VIRT_CPU_ACCOUNTING=y | 35 | CONFIG_VIRT_CPU_ACCOUNTING=y |
| 34 | CONFIG_SMP=y | 36 | CONFIG_SMP=y |
| 35 | CONFIG_NR_CPUS=4 | 37 | CONFIG_NR_CPUS=4 |
| 38 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 36 | 39 | ||
| 37 | # | 40 | # |
| 38 | # Code maturity level options | 41 | # Code maturity level options |
| @@ -50,6 +53,7 @@ CONFIG_SWAP=y | |||
| 50 | CONFIG_SYSVIPC=y | 53 | CONFIG_SYSVIPC=y |
| 51 | CONFIG_POSIX_MQUEUE=y | 54 | CONFIG_POSIX_MQUEUE=y |
| 52 | # CONFIG_BSD_PROCESS_ACCT is not set | 55 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 56 | # CONFIG_TASKSTATS is not set | ||
| 53 | CONFIG_SYSCTL=y | 57 | CONFIG_SYSCTL=y |
| 54 | # CONFIG_AUDIT is not set | 58 | # CONFIG_AUDIT is not set |
| 55 | CONFIG_IKCONFIG=y | 59 | CONFIG_IKCONFIG=y |
| @@ -67,10 +71,12 @@ CONFIG_PRINTK=y | |||
| 67 | CONFIG_BUG=y | 71 | CONFIG_BUG=y |
| 68 | CONFIG_ELF_CORE=y | 72 | CONFIG_ELF_CORE=y |
| 69 | CONFIG_BASE_FULL=y | 73 | CONFIG_BASE_FULL=y |
| 74 | CONFIG_RT_MUTEXES=y | ||
| 70 | CONFIG_FUTEX=y | 75 | CONFIG_FUTEX=y |
| 71 | CONFIG_EPOLL=y | 76 | CONFIG_EPOLL=y |
| 72 | CONFIG_SHMEM=y | 77 | CONFIG_SHMEM=y |
| 73 | CONFIG_SLAB=y | 78 | CONFIG_SLAB=y |
| 79 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 74 | # CONFIG_TINY_SHMEM is not set | 80 | # CONFIG_TINY_SHMEM is not set |
| 75 | CONFIG_BASE_SMALL=0 | 81 | CONFIG_BASE_SMALL=0 |
| 76 | # CONFIG_SLOB is not set | 82 | # CONFIG_SLOB is not set |
| @@ -116,12 +122,16 @@ CONFIG_PPC_PMAC=y | |||
| 116 | CONFIG_PPC_PMAC64=y | 122 | CONFIG_PPC_PMAC64=y |
| 117 | # CONFIG_PPC_MAPLE is not set | 123 | # CONFIG_PPC_MAPLE is not set |
| 118 | # CONFIG_PPC_CELL is not set | 124 | # CONFIG_PPC_CELL is not set |
| 125 | # CONFIG_PPC_CELL_NATIVE is not set | ||
| 126 | # CONFIG_PPC_IBM_CELL_BLADE is not set | ||
| 127 | # CONFIG_UDBG_RTAS_CONSOLE is not set | ||
| 119 | CONFIG_U3_DART=y | 128 | CONFIG_U3_DART=y |
| 120 | CONFIG_MPIC=y | 129 | CONFIG_MPIC=y |
| 121 | # CONFIG_PPC_RTAS is not set | 130 | # CONFIG_PPC_RTAS is not set |
| 122 | # CONFIG_MMIO_NVRAM is not set | 131 | # CONFIG_MMIO_NVRAM is not set |
| 123 | CONFIG_MPIC_BROKEN_U3=y | 132 | CONFIG_MPIC_BROKEN_U3=y |
| 124 | # CONFIG_PPC_MPC106 is not set | 133 | # CONFIG_PPC_MPC106 is not set |
| 134 | CONFIG_PPC_970_NAP=y | ||
| 125 | CONFIG_CPU_FREQ=y | 135 | CONFIG_CPU_FREQ=y |
| 126 | CONFIG_CPU_FREQ_TABLE=y | 136 | CONFIG_CPU_FREQ_TABLE=y |
| 127 | # CONFIG_CPU_FREQ_DEBUG is not set | 137 | # CONFIG_CPU_FREQ_DEBUG is not set |
| @@ -153,6 +163,7 @@ CONFIG_BINFMT_ELF=y | |||
| 153 | CONFIG_FORCE_MAX_ZONEORDER=13 | 163 | CONFIG_FORCE_MAX_ZONEORDER=13 |
| 154 | CONFIG_IOMMU_VMERGE=y | 164 | CONFIG_IOMMU_VMERGE=y |
| 155 | # CONFIG_HOTPLUG_CPU is not set | 165 | # CONFIG_HOTPLUG_CPU is not set |
| 166 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 156 | CONFIG_KEXEC=y | 167 | CONFIG_KEXEC=y |
| 157 | # CONFIG_CRASH_DUMP is not set | 168 | # CONFIG_CRASH_DUMP is not set |
| 158 | CONFIG_IRQ_ALL_CPUS=y | 169 | CONFIG_IRQ_ALL_CPUS=y |
| @@ -168,6 +179,7 @@ CONFIG_FLATMEM=y | |||
| 168 | CONFIG_FLAT_NODE_MEM_MAP=y | 179 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 169 | # CONFIG_SPARSEMEM_STATIC is not set | 180 | # CONFIG_SPARSEMEM_STATIC is not set |
| 170 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 181 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 182 | CONFIG_RESOURCES_64BIT=y | ||
| 171 | # CONFIG_PPC_64K_PAGES is not set | 183 | # CONFIG_PPC_64K_PAGES is not set |
| 172 | # CONFIG_SCHED_SMT is not set | 184 | # CONFIG_SCHED_SMT is not set |
| 173 | CONFIG_PROC_DEVICETREE=y | 185 | CONFIG_PROC_DEVICETREE=y |
| @@ -184,6 +196,7 @@ CONFIG_GENERIC_ISA_DMA=y | |||
| 184 | # CONFIG_PPC_INDIRECT_PCI is not set | 196 | # CONFIG_PPC_INDIRECT_PCI is not set |
| 185 | CONFIG_PCI=y | 197 | CONFIG_PCI=y |
| 186 | CONFIG_PCI_DOMAINS=y | 198 | CONFIG_PCI_DOMAINS=y |
| 199 | # CONFIG_PCIEPORTBUS is not set | ||
| 187 | # CONFIG_PCI_DEBUG is not set | 200 | # CONFIG_PCI_DEBUG is not set |
| 188 | 201 | ||
| 189 | # | 202 | # |
| @@ -227,6 +240,8 @@ CONFIG_INET_ESP=m | |||
| 227 | CONFIG_INET_IPCOMP=m | 240 | CONFIG_INET_IPCOMP=m |
| 228 | CONFIG_INET_XFRM_TUNNEL=m | 241 | CONFIG_INET_XFRM_TUNNEL=m |
| 229 | CONFIG_INET_TUNNEL=y | 242 | CONFIG_INET_TUNNEL=y |
| 243 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 244 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 230 | CONFIG_INET_DIAG=y | 245 | CONFIG_INET_DIAG=y |
| 231 | CONFIG_INET_TCP_DIAG=y | 246 | CONFIG_INET_TCP_DIAG=y |
| 232 | # CONFIG_TCP_CONG_ADVANCED is not set | 247 | # CONFIG_TCP_CONG_ADVANCED is not set |
| @@ -239,6 +254,7 @@ CONFIG_TCP_CONG_BIC=y | |||
| 239 | # CONFIG_IPV6 is not set | 254 | # CONFIG_IPV6 is not set |
| 240 | # CONFIG_INET6_XFRM_TUNNEL is not set | 255 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 241 | # CONFIG_INET6_TUNNEL is not set | 256 | # CONFIG_INET6_TUNNEL is not set |
| 257 | # CONFIG_NETWORK_SECMARK is not set | ||
| 242 | CONFIG_NETFILTER=y | 258 | CONFIG_NETFILTER=y |
| 243 | # CONFIG_NETFILTER_DEBUG is not set | 259 | # CONFIG_NETFILTER_DEBUG is not set |
| 244 | 260 | ||
| @@ -263,6 +279,7 @@ CONFIG_IP_NF_TFTP=m | |||
| 263 | CONFIG_IP_NF_AMANDA=m | 279 | CONFIG_IP_NF_AMANDA=m |
| 264 | # CONFIG_IP_NF_PPTP is not set | 280 | # CONFIG_IP_NF_PPTP is not set |
| 265 | # CONFIG_IP_NF_H323 is not set | 281 | # CONFIG_IP_NF_H323 is not set |
| 282 | # CONFIG_IP_NF_SIP is not set | ||
| 266 | CONFIG_IP_NF_QUEUE=m | 283 | CONFIG_IP_NF_QUEUE=m |
| 267 | 284 | ||
| 268 | # | 285 | # |
| @@ -318,6 +335,7 @@ CONFIG_STANDALONE=y | |||
| 318 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 335 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 319 | CONFIG_FW_LOADER=y | 336 | CONFIG_FW_LOADER=y |
| 320 | # CONFIG_DEBUG_DRIVER is not set | 337 | # CONFIG_DEBUG_DRIVER is not set |
| 338 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 321 | 339 | ||
| 322 | # | 340 | # |
| 323 | # Connector - unified userspace <-> kernelspace linker | 341 | # Connector - unified userspace <-> kernelspace linker |
| @@ -355,6 +373,7 @@ CONFIG_BLK_DEV_NBD=m | |||
| 355 | CONFIG_BLK_DEV_RAM=y | 373 | CONFIG_BLK_DEV_RAM=y |
| 356 | CONFIG_BLK_DEV_RAM_COUNT=16 | 374 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 357 | CONFIG_BLK_DEV_RAM_SIZE=65536 | 375 | CONFIG_BLK_DEV_RAM_SIZE=65536 |
| 376 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 358 | CONFIG_BLK_DEV_INITRD=y | 377 | CONFIG_BLK_DEV_INITRD=y |
| 359 | CONFIG_CDROM_PKTCDVD=m | 378 | CONFIG_CDROM_PKTCDVD=m |
| 360 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 | 379 | CONFIG_CDROM_PKTCDVD_BUFFERS=8 |
| @@ -417,7 +436,6 @@ CONFIG_IDEDMA_PCI_AUTO=y | |||
| 417 | CONFIG_BLK_DEV_IDE_PMAC=y | 436 | CONFIG_BLK_DEV_IDE_PMAC=y |
| 418 | CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y | 437 | CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y |
| 419 | CONFIG_BLK_DEV_IDEDMA_PMAC=y | 438 | CONFIG_BLK_DEV_IDEDMA_PMAC=y |
| 420 | # CONFIG_BLK_DEV_IDE_PMAC_BLINK is not set | ||
| 421 | # CONFIG_IDE_ARM is not set | 439 | # CONFIG_IDE_ARM is not set |
| 422 | CONFIG_BLK_DEV_IDEDMA=y | 440 | CONFIG_BLK_DEV_IDEDMA=y |
| 423 | # CONFIG_IDEDMA_IVB is not set | 441 | # CONFIG_IDEDMA_IVB is not set |
| @@ -478,6 +496,7 @@ CONFIG_SCSI_SATA_SVW=y | |||
| 478 | # CONFIG_SCSI_SATA_MV is not set | 496 | # CONFIG_SCSI_SATA_MV is not set |
| 479 | # CONFIG_SCSI_SATA_NV is not set | 497 | # CONFIG_SCSI_SATA_NV is not set |
| 480 | # CONFIG_SCSI_PDC_ADMA is not set | 498 | # CONFIG_SCSI_PDC_ADMA is not set |
| 499 | # CONFIG_SCSI_HPTIOP is not set | ||
| 481 | # CONFIG_SCSI_SATA_QSTOR is not set | 500 | # CONFIG_SCSI_SATA_QSTOR is not set |
| 482 | # CONFIG_SCSI_SATA_PROMISE is not set | 501 | # CONFIG_SCSI_SATA_PROMISE is not set |
| 483 | # CONFIG_SCSI_SATA_SX4 is not set | 502 | # CONFIG_SCSI_SATA_SX4 is not set |
| @@ -497,7 +516,6 @@ CONFIG_SCSI_SATA_SVW=y | |||
| 497 | # CONFIG_SCSI_INIA100 is not set | 516 | # CONFIG_SCSI_INIA100 is not set |
| 498 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 517 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
| 499 | # CONFIG_SCSI_IPR is not set | 518 | # CONFIG_SCSI_IPR is not set |
| 500 | # CONFIG_SCSI_QLOGIC_FC is not set | ||
| 501 | # CONFIG_SCSI_QLOGIC_1280 is not set | 519 | # CONFIG_SCSI_QLOGIC_1280 is not set |
| 502 | # CONFIG_SCSI_QLA_FC is not set | 520 | # CONFIG_SCSI_QLA_FC is not set |
| 503 | # CONFIG_SCSI_LPFC is not set | 521 | # CONFIG_SCSI_LPFC is not set |
| @@ -514,9 +532,7 @@ CONFIG_MD_LINEAR=y | |||
| 514 | CONFIG_MD_RAID0=y | 532 | CONFIG_MD_RAID0=y |
| 515 | CONFIG_MD_RAID1=y | 533 | CONFIG_MD_RAID1=y |
| 516 | CONFIG_MD_RAID10=m | 534 | CONFIG_MD_RAID10=m |
| 517 | CONFIG_MD_RAID5=y | 535 | # CONFIG_MD_RAID456 is not set |
| 518 | # CONFIG_MD_RAID5_RESHAPE is not set | ||
| 519 | CONFIG_MD_RAID6=m | ||
| 520 | CONFIG_MD_MULTIPATH=m | 536 | CONFIG_MD_MULTIPATH=m |
| 521 | CONFIG_MD_FAULTY=m | 537 | CONFIG_MD_FAULTY=m |
| 522 | CONFIG_BLK_DEV_DM=y | 538 | CONFIG_BLK_DEV_DM=y |
| @@ -559,7 +575,6 @@ CONFIG_IEEE1394_OHCI1394=y | |||
| 559 | # | 575 | # |
| 560 | CONFIG_IEEE1394_VIDEO1394=m | 576 | CONFIG_IEEE1394_VIDEO1394=m |
| 561 | CONFIG_IEEE1394_SBP2=m | 577 | CONFIG_IEEE1394_SBP2=m |
| 562 | # CONFIG_IEEE1394_SBP2_PHYS_DMA is not set | ||
| 563 | CONFIG_IEEE1394_ETH1394=m | 578 | CONFIG_IEEE1394_ETH1394=m |
| 564 | CONFIG_IEEE1394_DV1394=m | 579 | CONFIG_IEEE1394_DV1394=m |
| 565 | CONFIG_IEEE1394_RAWIO=y | 580 | CONFIG_IEEE1394_RAWIO=y |
| @@ -573,6 +588,7 @@ CONFIG_IEEE1394_RAWIO=y | |||
| 573 | # Macintosh device drivers | 588 | # Macintosh device drivers |
| 574 | # | 589 | # |
| 575 | CONFIG_ADB_PMU=y | 590 | CONFIG_ADB_PMU=y |
| 591 | # CONFIG_ADB_PMU_LED is not set | ||
| 576 | CONFIG_PMAC_SMU=y | 592 | CONFIG_PMAC_SMU=y |
| 577 | CONFIG_THERM_PM72=y | 593 | CONFIG_THERM_PM72=y |
| 578 | CONFIG_WINDFARM=y | 594 | CONFIG_WINDFARM=y |
| @@ -643,6 +659,7 @@ CONFIG_TIGON3=y | |||
| 643 | # CONFIG_CHELSIO_T1 is not set | 659 | # CONFIG_CHELSIO_T1 is not set |
| 644 | # CONFIG_IXGB is not set | 660 | # CONFIG_IXGB is not set |
| 645 | # CONFIG_S2IO is not set | 661 | # CONFIG_S2IO is not set |
| 662 | # CONFIG_MYRI10GE is not set | ||
| 646 | 663 | ||
| 647 | # | 664 | # |
| 648 | # Token Ring devices | 665 | # Token Ring devices |
| @@ -739,6 +756,7 @@ CONFIG_SERIO=y | |||
| 739 | CONFIG_VT=y | 756 | CONFIG_VT=y |
| 740 | CONFIG_VT_CONSOLE=y | 757 | CONFIG_VT_CONSOLE=y |
| 741 | CONFIG_HW_CONSOLE=y | 758 | CONFIG_HW_CONSOLE=y |
| 759 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 742 | # CONFIG_SERIAL_NONSTANDARD is not set | 760 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 743 | 761 | ||
| 744 | # | 762 | # |
| @@ -754,6 +772,7 @@ CONFIG_HW_CONSOLE=y | |||
| 754 | CONFIG_UNIX98_PTYS=y | 772 | CONFIG_UNIX98_PTYS=y |
| 755 | CONFIG_LEGACY_PTYS=y | 773 | CONFIG_LEGACY_PTYS=y |
| 756 | CONFIG_LEGACY_PTY_COUNT=256 | 774 | CONFIG_LEGACY_PTY_COUNT=256 |
| 775 | # CONFIG_BRIQ_PANEL is not set | ||
| 757 | 776 | ||
| 758 | # | 777 | # |
| 759 | # IPMI | 778 | # IPMI |
| @@ -764,6 +783,7 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
| 764 | # Watchdog Cards | 783 | # Watchdog Cards |
| 765 | # | 784 | # |
| 766 | # CONFIG_WATCHDOG is not set | 785 | # CONFIG_WATCHDOG is not set |
| 786 | # CONFIG_HW_RANDOM is not set | ||
| 767 | CONFIG_GEN_RTC=y | 787 | CONFIG_GEN_RTC=y |
| 768 | # CONFIG_GEN_RTC_X is not set | 788 | # CONFIG_GEN_RTC_X is not set |
| 769 | # CONFIG_DTLK is not set | 789 | # CONFIG_DTLK is not set |
| @@ -774,6 +794,7 @@ CONFIG_GEN_RTC=y | |||
| 774 | # Ftape, the floppy tape device driver | 794 | # Ftape, the floppy tape device driver |
| 775 | # | 795 | # |
| 776 | CONFIG_AGP=m | 796 | CONFIG_AGP=m |
| 797 | # CONFIG_AGP_SIS is not set | ||
| 777 | # CONFIG_AGP_VIA is not set | 798 | # CONFIG_AGP_VIA is not set |
| 778 | CONFIG_AGP_UNINORTH=m | 799 | CONFIG_AGP_UNINORTH=m |
| 779 | # CONFIG_DRM is not set | 800 | # CONFIG_DRM is not set |
| @@ -813,6 +834,7 @@ CONFIG_I2C_ALGOBIT=y | |||
| 813 | # CONFIG_I2C_PIIX4 is not set | 834 | # CONFIG_I2C_PIIX4 is not set |
| 814 | CONFIG_I2C_POWERMAC=y | 835 | CONFIG_I2C_POWERMAC=y |
| 815 | # CONFIG_I2C_NFORCE2 is not set | 836 | # CONFIG_I2C_NFORCE2 is not set |
| 837 | # CONFIG_I2C_OCORES is not set | ||
| 816 | # CONFIG_I2C_PARPORT_LIGHT is not set | 838 | # CONFIG_I2C_PARPORT_LIGHT is not set |
| 817 | # CONFIG_I2C_PROSAVAGE is not set | 839 | # CONFIG_I2C_PROSAVAGE is not set |
| 818 | # CONFIG_I2C_SAVAGE4 is not set | 840 | # CONFIG_I2C_SAVAGE4 is not set |
| @@ -849,7 +871,6 @@ CONFIG_I2C_POWERMAC=y | |||
| 849 | # | 871 | # |
| 850 | # Dallas's 1-wire bus | 872 | # Dallas's 1-wire bus |
| 851 | # | 873 | # |
| 852 | # CONFIG_W1 is not set | ||
| 853 | 874 | ||
| 854 | # | 875 | # |
| 855 | # Hardware Monitoring support | 876 | # Hardware Monitoring support |
| @@ -865,6 +886,7 @@ CONFIG_I2C_POWERMAC=y | |||
| 865 | # Multimedia devices | 886 | # Multimedia devices |
| 866 | # | 887 | # |
| 867 | # CONFIG_VIDEO_DEV is not set | 888 | # CONFIG_VIDEO_DEV is not set |
| 889 | CONFIG_VIDEO_V4L2=y | ||
| 868 | 890 | ||
| 869 | # | 891 | # |
| 870 | # Digital Video Broadcasting Devices | 892 | # Digital Video Broadcasting Devices |
| @@ -875,22 +897,19 @@ CONFIG_I2C_POWERMAC=y | |||
| 875 | # | 897 | # |
| 876 | # Graphics support | 898 | # Graphics support |
| 877 | # | 899 | # |
| 900 | CONFIG_FIRMWARE_EDID=y | ||
| 878 | CONFIG_FB=y | 901 | CONFIG_FB=y |
| 879 | CONFIG_FB_CFB_FILLRECT=y | 902 | CONFIG_FB_CFB_FILLRECT=y |
| 880 | CONFIG_FB_CFB_COPYAREA=y | 903 | CONFIG_FB_CFB_COPYAREA=y |
| 881 | CONFIG_FB_CFB_IMAGEBLIT=y | 904 | CONFIG_FB_CFB_IMAGEBLIT=y |
| 882 | CONFIG_FB_MACMODES=y | 905 | CONFIG_FB_MACMODES=y |
| 883 | CONFIG_FB_FIRMWARE_EDID=y | 906 | # CONFIG_FB_BACKLIGHT is not set |
| 884 | CONFIG_FB_MODE_HELPERS=y | 907 | CONFIG_FB_MODE_HELPERS=y |
| 885 | CONFIG_FB_TILEBLITTING=y | 908 | CONFIG_FB_TILEBLITTING=y |
| 886 | # CONFIG_FB_CIRRUS is not set | 909 | # CONFIG_FB_CIRRUS is not set |
| 887 | # CONFIG_FB_PM2 is not set | 910 | # CONFIG_FB_PM2 is not set |
| 888 | # CONFIG_FB_CYBER2000 is not set | 911 | # CONFIG_FB_CYBER2000 is not set |
| 889 | CONFIG_FB_OF=y | 912 | CONFIG_FB_OF=y |
| 890 | # CONFIG_FB_CONTROL is not set | ||
| 891 | # CONFIG_FB_PLATINUM is not set | ||
| 892 | # CONFIG_FB_VALKYRIE is not set | ||
| 893 | # CONFIG_FB_CT65550 is not set | ||
| 894 | # CONFIG_FB_ASILIANT is not set | 913 | # CONFIG_FB_ASILIANT is not set |
| 895 | # CONFIG_FB_IMSTT is not set | 914 | # CONFIG_FB_IMSTT is not set |
| 896 | # CONFIG_FB_VGA16 is not set | 915 | # CONFIG_FB_VGA16 is not set |
| @@ -990,6 +1009,18 @@ CONFIG_SND_VERBOSE_PROCFS=y | |||
| 990 | # CONFIG_SND_CMIPCI is not set | 1009 | # CONFIG_SND_CMIPCI is not set |
| 991 | # CONFIG_SND_CS4281 is not set | 1010 | # CONFIG_SND_CS4281 is not set |
| 992 | # CONFIG_SND_CS46XX is not set | 1011 | # CONFIG_SND_CS46XX is not set |
| 1012 | # CONFIG_SND_DARLA20 is not set | ||
| 1013 | # CONFIG_SND_GINA20 is not set | ||
| 1014 | # CONFIG_SND_LAYLA20 is not set | ||
| 1015 | # CONFIG_SND_DARLA24 is not set | ||
| 1016 | # CONFIG_SND_GINA24 is not set | ||
| 1017 | # CONFIG_SND_LAYLA24 is not set | ||
| 1018 | # CONFIG_SND_MONA is not set | ||
| 1019 | # CONFIG_SND_MIA is not set | ||
| 1020 | # CONFIG_SND_ECHO3G is not set | ||
| 1021 | # CONFIG_SND_INDIGO is not set | ||
| 1022 | # CONFIG_SND_INDIGOIO is not set | ||
| 1023 | # CONFIG_SND_INDIGODJ is not set | ||
| 993 | # CONFIG_SND_EMU10K1 is not set | 1024 | # CONFIG_SND_EMU10K1 is not set |
| 994 | # CONFIG_SND_EMU10K1X is not set | 1025 | # CONFIG_SND_EMU10K1X is not set |
| 995 | # CONFIG_SND_ENS1370 is not set | 1026 | # CONFIG_SND_ENS1370 is not set |
| @@ -1027,6 +1058,17 @@ CONFIG_SND_POWERMAC=m | |||
| 1027 | CONFIG_SND_POWERMAC_AUTO_DRC=y | 1058 | CONFIG_SND_POWERMAC_AUTO_DRC=y |
| 1028 | 1059 | ||
| 1029 | # | 1060 | # |
| 1061 | # Apple Onboard Audio driver | ||
| 1062 | # | ||
| 1063 | CONFIG_SND_AOA=m | ||
| 1064 | CONFIG_SND_AOA_FABRIC_LAYOUT=m | ||
| 1065 | CONFIG_SND_AOA_ONYX=m | ||
| 1066 | CONFIG_SND_AOA_TAS=m | ||
| 1067 | CONFIG_SND_AOA_TOONIE=m | ||
| 1068 | CONFIG_SND_AOA_SOUNDBUS=m | ||
| 1069 | CONFIG_SND_AOA_SOUNDBUS_I2S=m | ||
| 1070 | |||
| 1071 | # | ||
| 1030 | # USB devices | 1072 | # USB devices |
| 1031 | # | 1073 | # |
| 1032 | CONFIG_SND_USB_AUDIO=m | 1074 | CONFIG_SND_USB_AUDIO=m |
| @@ -1060,6 +1102,7 @@ CONFIG_USB_DEVICEFS=y | |||
| 1060 | CONFIG_USB_EHCI_HCD=y | 1102 | CONFIG_USB_EHCI_HCD=y |
| 1061 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | 1103 | # CONFIG_USB_EHCI_SPLIT_ISO is not set |
| 1062 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 1104 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
| 1105 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 1063 | # CONFIG_USB_ISP116X_HCD is not set | 1106 | # CONFIG_USB_ISP116X_HCD is not set |
| 1064 | CONFIG_USB_OHCI_HCD=y | 1107 | CONFIG_USB_OHCI_HCD=y |
| 1065 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | 1108 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set |
| @@ -1110,9 +1153,7 @@ CONFIG_USB_HIDDEV=y | |||
| 1110 | # CONFIG_USB_ACECAD is not set | 1153 | # CONFIG_USB_ACECAD is not set |
| 1111 | # CONFIG_USB_KBTAB is not set | 1154 | # CONFIG_USB_KBTAB is not set |
| 1112 | # CONFIG_USB_POWERMATE is not set | 1155 | # CONFIG_USB_POWERMATE is not set |
| 1113 | # CONFIG_USB_MTOUCH is not set | 1156 | # CONFIG_USB_TOUCHSCREEN is not set |
| 1114 | # CONFIG_USB_ITMTOUCH is not set | ||
| 1115 | # CONFIG_USB_EGALAX is not set | ||
| 1116 | # CONFIG_USB_YEALINK is not set | 1157 | # CONFIG_USB_YEALINK is not set |
| 1117 | # CONFIG_USB_XPAD is not set | 1158 | # CONFIG_USB_XPAD is not set |
| 1118 | # CONFIG_USB_ATI_REMOTE is not set | 1159 | # CONFIG_USB_ATI_REMOTE is not set |
| @@ -1155,6 +1196,7 @@ CONFIG_USB_SERIAL=m | |||
| 1155 | CONFIG_USB_SERIAL_GENERIC=y | 1196 | CONFIG_USB_SERIAL_GENERIC=y |
| 1156 | # CONFIG_USB_SERIAL_AIRPRIME is not set | 1197 | # CONFIG_USB_SERIAL_AIRPRIME is not set |
| 1157 | # CONFIG_USB_SERIAL_ANYDATA is not set | 1198 | # CONFIG_USB_SERIAL_ANYDATA is not set |
| 1199 | # CONFIG_USB_SERIAL_ARK3116 is not set | ||
| 1158 | CONFIG_USB_SERIAL_BELKIN=m | 1200 | CONFIG_USB_SERIAL_BELKIN=m |
| 1159 | # CONFIG_USB_SERIAL_WHITEHEAT is not set | 1201 | # CONFIG_USB_SERIAL_WHITEHEAT is not set |
| 1160 | CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m | 1202 | CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m |
| @@ -1162,6 +1204,7 @@ CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m | |||
| 1162 | CONFIG_USB_SERIAL_CYPRESS_M8=m | 1204 | CONFIG_USB_SERIAL_CYPRESS_M8=m |
| 1163 | CONFIG_USB_SERIAL_EMPEG=m | 1205 | CONFIG_USB_SERIAL_EMPEG=m |
| 1164 | CONFIG_USB_SERIAL_FTDI_SIO=m | 1206 | CONFIG_USB_SERIAL_FTDI_SIO=m |
| 1207 | # CONFIG_USB_SERIAL_FUNSOFT is not set | ||
| 1165 | CONFIG_USB_SERIAL_VISOR=m | 1208 | CONFIG_USB_SERIAL_VISOR=m |
| 1166 | CONFIG_USB_SERIAL_IPAQ=m | 1209 | CONFIG_USB_SERIAL_IPAQ=m |
| 1167 | CONFIG_USB_SERIAL_IR=m | 1210 | CONFIG_USB_SERIAL_IR=m |
| @@ -1191,9 +1234,11 @@ CONFIG_USB_SERIAL_PL2303=m | |||
| 1191 | # CONFIG_USB_SERIAL_HP4X is not set | 1234 | # CONFIG_USB_SERIAL_HP4X is not set |
| 1192 | CONFIG_USB_SERIAL_SAFE=m | 1235 | CONFIG_USB_SERIAL_SAFE=m |
| 1193 | CONFIG_USB_SERIAL_SAFE_PADDED=y | 1236 | CONFIG_USB_SERIAL_SAFE_PADDED=y |
| 1237 | # CONFIG_USB_SERIAL_SIERRAWIRELESS is not set | ||
| 1194 | CONFIG_USB_SERIAL_TI=m | 1238 | CONFIG_USB_SERIAL_TI=m |
| 1195 | CONFIG_USB_SERIAL_CYBERJACK=m | 1239 | CONFIG_USB_SERIAL_CYBERJACK=m |
| 1196 | CONFIG_USB_SERIAL_XIRCOM=m | 1240 | CONFIG_USB_SERIAL_XIRCOM=m |
| 1241 | # CONFIG_USB_SERIAL_OPTION is not set | ||
| 1197 | CONFIG_USB_SERIAL_OMNINET=m | 1242 | CONFIG_USB_SERIAL_OMNINET=m |
| 1198 | CONFIG_USB_EZUSB=y | 1243 | CONFIG_USB_EZUSB=y |
| 1199 | 1244 | ||
| @@ -1207,10 +1252,12 @@ CONFIG_USB_EZUSB=y | |||
| 1207 | # CONFIG_USB_LEGOTOWER is not set | 1252 | # CONFIG_USB_LEGOTOWER is not set |
| 1208 | # CONFIG_USB_LCD is not set | 1253 | # CONFIG_USB_LCD is not set |
| 1209 | # CONFIG_USB_LED is not set | 1254 | # CONFIG_USB_LED is not set |
| 1255 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 1210 | # CONFIG_USB_CYTHERM is not set | 1256 | # CONFIG_USB_CYTHERM is not set |
| 1211 | # CONFIG_USB_PHIDGETKIT is not set | 1257 | # CONFIG_USB_PHIDGETKIT is not set |
| 1212 | # CONFIG_USB_PHIDGETSERVO is not set | 1258 | # CONFIG_USB_PHIDGETSERVO is not set |
| 1213 | # CONFIG_USB_IDMOUSE is not set | 1259 | # CONFIG_USB_IDMOUSE is not set |
| 1260 | CONFIG_USB_APPLEDISPLAY=m | ||
| 1214 | # CONFIG_USB_SISUSBVGA is not set | 1261 | # CONFIG_USB_SISUSBVGA is not set |
| 1215 | # CONFIG_USB_LD is not set | 1262 | # CONFIG_USB_LD is not set |
| 1216 | # CONFIG_USB_TEST is not set | 1263 | # CONFIG_USB_TEST is not set |
| @@ -1235,6 +1282,14 @@ CONFIG_USB_EZUSB=y | |||
| 1235 | # CONFIG_NEW_LEDS is not set | 1282 | # CONFIG_NEW_LEDS is not set |
| 1236 | 1283 | ||
| 1237 | # | 1284 | # |
| 1285 | # LED drivers | ||
| 1286 | # | ||
| 1287 | |||
| 1288 | # | ||
| 1289 | # LED Triggers | ||
| 1290 | # | ||
| 1291 | |||
| 1292 | # | ||
| 1238 | # InfiniBand support | 1293 | # InfiniBand support |
| 1239 | # | 1294 | # |
| 1240 | # CONFIG_INFINIBAND is not set | 1295 | # CONFIG_INFINIBAND is not set |
| @@ -1249,6 +1304,19 @@ CONFIG_USB_EZUSB=y | |||
| 1249 | # CONFIG_RTC_CLASS is not set | 1304 | # CONFIG_RTC_CLASS is not set |
| 1250 | 1305 | ||
| 1251 | # | 1306 | # |
| 1307 | # DMA Engine support | ||
| 1308 | # | ||
| 1309 | # CONFIG_DMA_ENGINE is not set | ||
| 1310 | |||
| 1311 | # | ||
| 1312 | # DMA Clients | ||
| 1313 | # | ||
| 1314 | |||
| 1315 | # | ||
| 1316 | # DMA Devices | ||
| 1317 | # | ||
| 1318 | |||
| 1319 | # | ||
| 1252 | # File systems | 1320 | # File systems |
| 1253 | # | 1321 | # |
| 1254 | CONFIG_EXT2_FS=y | 1322 | CONFIG_EXT2_FS=y |
| @@ -1273,7 +1341,6 @@ CONFIG_REISERFS_FS_SECURITY=y | |||
| 1273 | # CONFIG_JFS_FS is not set | 1341 | # CONFIG_JFS_FS is not set |
| 1274 | CONFIG_FS_POSIX_ACL=y | 1342 | CONFIG_FS_POSIX_ACL=y |
| 1275 | CONFIG_XFS_FS=m | 1343 | CONFIG_XFS_FS=m |
| 1276 | CONFIG_XFS_EXPORT=y | ||
| 1277 | # CONFIG_XFS_QUOTA is not set | 1344 | # CONFIG_XFS_QUOTA is not set |
| 1278 | CONFIG_XFS_SECURITY=y | 1345 | CONFIG_XFS_SECURITY=y |
| 1279 | CONFIG_XFS_POSIX_ACL=y | 1346 | CONFIG_XFS_POSIX_ACL=y |
| @@ -1282,6 +1349,7 @@ CONFIG_XFS_POSIX_ACL=y | |||
| 1282 | # CONFIG_MINIX_FS is not set | 1349 | # CONFIG_MINIX_FS is not set |
| 1283 | # CONFIG_ROMFS_FS is not set | 1350 | # CONFIG_ROMFS_FS is not set |
| 1284 | CONFIG_INOTIFY=y | 1351 | CONFIG_INOTIFY=y |
| 1352 | CONFIG_INOTIFY_USER=y | ||
| 1285 | # CONFIG_QUOTA is not set | 1353 | # CONFIG_QUOTA is not set |
| 1286 | CONFIG_DNOTIFY=y | 1354 | CONFIG_DNOTIFY=y |
| 1287 | CONFIG_AUTOFS_FS=m | 1355 | CONFIG_AUTOFS_FS=m |
| @@ -1363,7 +1431,9 @@ CONFIG_RPCSEC_GSS_KRB5=y | |||
| 1363 | # CONFIG_SMB_FS is not set | 1431 | # CONFIG_SMB_FS is not set |
| 1364 | CONFIG_CIFS=m | 1432 | CONFIG_CIFS=m |
| 1365 | # CONFIG_CIFS_STATS is not set | 1433 | # CONFIG_CIFS_STATS is not set |
| 1434 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 1366 | # CONFIG_CIFS_XATTR is not set | 1435 | # CONFIG_CIFS_XATTR is not set |
| 1436 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1367 | # CONFIG_CIFS_EXPERIMENTAL is not set | 1437 | # CONFIG_CIFS_EXPERIMENTAL is not set |
| 1368 | # CONFIG_NCP_FS is not set | 1438 | # CONFIG_NCP_FS is not set |
| 1369 | # CONFIG_CODA_FS is not set | 1439 | # CONFIG_CODA_FS is not set |
| @@ -1444,6 +1514,9 @@ CONFIG_CRC32=y | |||
| 1444 | CONFIG_LIBCRC32C=m | 1514 | CONFIG_LIBCRC32C=m |
| 1445 | CONFIG_ZLIB_INFLATE=y | 1515 | CONFIG_ZLIB_INFLATE=y |
| 1446 | CONFIG_ZLIB_DEFLATE=m | 1516 | CONFIG_ZLIB_DEFLATE=m |
| 1517 | CONFIG_TEXTSEARCH=y | ||
| 1518 | CONFIG_TEXTSEARCH_KMP=m | ||
| 1519 | CONFIG_PLIST=y | ||
| 1447 | 1520 | ||
| 1448 | # | 1521 | # |
| 1449 | # Instrumentation Support | 1522 | # Instrumentation Support |
| @@ -1457,14 +1530,19 @@ CONFIG_OPROFILE=y | |||
| 1457 | # | 1530 | # |
| 1458 | # CONFIG_PRINTK_TIME is not set | 1531 | # CONFIG_PRINTK_TIME is not set |
| 1459 | CONFIG_MAGIC_SYSRQ=y | 1532 | CONFIG_MAGIC_SYSRQ=y |
| 1533 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1460 | CONFIG_DEBUG_KERNEL=y | 1534 | CONFIG_DEBUG_KERNEL=y |
| 1461 | CONFIG_LOG_BUF_SHIFT=17 | 1535 | CONFIG_LOG_BUF_SHIFT=17 |
| 1462 | CONFIG_DETECT_SOFTLOCKUP=y | 1536 | CONFIG_DETECT_SOFTLOCKUP=y |
| 1463 | # CONFIG_SCHEDSTATS is not set | 1537 | # CONFIG_SCHEDSTATS is not set |
| 1464 | # CONFIG_DEBUG_SLAB is not set | 1538 | # CONFIG_DEBUG_SLAB is not set |
| 1465 | CONFIG_DEBUG_MUTEXES=y | 1539 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1540 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1466 | # CONFIG_DEBUG_SPINLOCK is not set | 1541 | # CONFIG_DEBUG_SPINLOCK is not set |
| 1542 | CONFIG_DEBUG_MUTEXES=y | ||
| 1543 | # CONFIG_DEBUG_RWSEMS is not set | ||
| 1467 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1544 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 1545 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1468 | # CONFIG_DEBUG_KOBJECT is not set | 1546 | # CONFIG_DEBUG_KOBJECT is not set |
| 1469 | # CONFIG_DEBUG_INFO is not set | 1547 | # CONFIG_DEBUG_INFO is not set |
| 1470 | CONFIG_DEBUG_FS=y | 1548 | CONFIG_DEBUG_FS=y |
| @@ -1476,11 +1554,7 @@ CONFIG_FORCED_INLINING=y | |||
| 1476 | # CONFIG_DEBUGGER is not set | 1554 | # CONFIG_DEBUGGER is not set |
| 1477 | CONFIG_IRQSTACKS=y | 1555 | CONFIG_IRQSTACKS=y |
| 1478 | CONFIG_BOOTX_TEXT=y | 1556 | CONFIG_BOOTX_TEXT=y |
| 1479 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | 1557 | # CONFIG_PPC_EARLY_DEBUG is not set |
| 1480 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
| 1481 | # CONFIG_PPC_EARLY_DEBUG_RTAS is not set | ||
| 1482 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
| 1483 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
| 1484 | 1558 | ||
| 1485 | # | 1559 | # |
| 1486 | # Security options | 1560 | # Security options |
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig index a95e455a1944..72ed95b3ead6 100644 --- a/arch/powerpc/configs/iseries_defconfig +++ b/arch/powerpc/configs/iseries_defconfig | |||
| @@ -1,16 +1,18 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.17-rc1 | 3 | # Linux kernel version: 2.6.18-rc3 |
| 4 | # Wed Apr 19 11:46:44 2006 | 4 | # Tue Aug 8 09:15:46 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
| 7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
| 8 | CONFIG_PPC_MERGE=y | 8 | CONFIG_PPC_MERGE=y |
| 9 | CONFIG_MMU=y | 9 | CONFIG_MMU=y |
| 10 | CONFIG_GENERIC_HARDIRQS=y | 10 | CONFIG_GENERIC_HARDIRQS=y |
| 11 | CONFIG_IRQ_PER_CPU=y | ||
| 11 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
| 12 | CONFIG_GENERIC_HWEIGHT=y | 13 | CONFIG_GENERIC_HWEIGHT=y |
| 13 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 14 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 15 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 14 | CONFIG_PPC=y | 16 | CONFIG_PPC=y |
| 15 | CONFIG_EARLY_PRINTK=y | 17 | CONFIG_EARLY_PRINTK=y |
| 16 | CONFIG_COMPAT=y | 18 | CONFIG_COMPAT=y |
| @@ -34,6 +36,7 @@ CONFIG_PPC_STD_MMU=y | |||
| 34 | CONFIG_VIRT_CPU_ACCOUNTING=y | 36 | CONFIG_VIRT_CPU_ACCOUNTING=y |
| 35 | CONFIG_SMP=y | 37 | CONFIG_SMP=y |
| 36 | CONFIG_NR_CPUS=32 | 38 | CONFIG_NR_CPUS=32 |
| 39 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 37 | 40 | ||
| 38 | # | 41 | # |
| 39 | # Code maturity level options | 42 | # Code maturity level options |
| @@ -51,6 +54,7 @@ CONFIG_SWAP=y | |||
| 51 | CONFIG_SYSVIPC=y | 54 | CONFIG_SYSVIPC=y |
| 52 | CONFIG_POSIX_MQUEUE=y | 55 | CONFIG_POSIX_MQUEUE=y |
| 53 | # CONFIG_BSD_PROCESS_ACCT is not set | 56 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 57 | # CONFIG_TASKSTATS is not set | ||
| 54 | CONFIG_SYSCTL=y | 58 | CONFIG_SYSCTL=y |
| 55 | CONFIG_AUDIT=y | 59 | CONFIG_AUDIT=y |
| 56 | CONFIG_AUDITSYSCALL=y | 60 | CONFIG_AUDITSYSCALL=y |
| @@ -69,10 +73,12 @@ CONFIG_PRINTK=y | |||
| 69 | CONFIG_BUG=y | 73 | CONFIG_BUG=y |
| 70 | CONFIG_ELF_CORE=y | 74 | CONFIG_ELF_CORE=y |
| 71 | CONFIG_BASE_FULL=y | 75 | CONFIG_BASE_FULL=y |
| 76 | CONFIG_RT_MUTEXES=y | ||
| 72 | CONFIG_FUTEX=y | 77 | CONFIG_FUTEX=y |
| 73 | CONFIG_EPOLL=y | 78 | CONFIG_EPOLL=y |
| 74 | CONFIG_SHMEM=y | 79 | CONFIG_SHMEM=y |
| 75 | CONFIG_SLAB=y | 80 | CONFIG_SLAB=y |
| 81 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 76 | # CONFIG_TINY_SHMEM is not set | 82 | # CONFIG_TINY_SHMEM is not set |
| 77 | CONFIG_BASE_SMALL=0 | 83 | CONFIG_BASE_SMALL=0 |
| 78 | # CONFIG_SLOB is not set | 84 | # CONFIG_SLOB is not set |
| @@ -113,10 +119,14 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
| 113 | CONFIG_PPC_ISERIES=y | 119 | CONFIG_PPC_ISERIES=y |
| 114 | # CONFIG_EMBEDDED6xx is not set | 120 | # CONFIG_EMBEDDED6xx is not set |
| 115 | # CONFIG_APUS is not set | 121 | # CONFIG_APUS is not set |
| 122 | # CONFIG_PPC_CELL is not set | ||
| 123 | # CONFIG_PPC_CELL_NATIVE is not set | ||
| 124 | # CONFIG_UDBG_RTAS_CONSOLE is not set | ||
| 116 | # CONFIG_PPC_RTAS is not set | 125 | # CONFIG_PPC_RTAS is not set |
| 117 | # CONFIG_MMIO_NVRAM is not set | 126 | # CONFIG_MMIO_NVRAM is not set |
| 118 | CONFIG_IBMVIO=y | 127 | CONFIG_IBMVIO=y |
| 119 | # CONFIG_PPC_MPC106 is not set | 128 | # CONFIG_PPC_MPC106 is not set |
| 129 | # CONFIG_PPC_970_NAP is not set | ||
| 120 | # CONFIG_CPU_FREQ is not set | 130 | # CONFIG_CPU_FREQ is not set |
| 121 | # CONFIG_WANT_EARLY_SERIAL is not set | 131 | # CONFIG_WANT_EARLY_SERIAL is not set |
| 122 | 132 | ||
| @@ -135,6 +145,7 @@ CONFIG_BINFMT_ELF=y | |||
| 135 | # CONFIG_BINFMT_MISC is not set | 145 | # CONFIG_BINFMT_MISC is not set |
| 136 | CONFIG_FORCE_MAX_ZONEORDER=13 | 146 | CONFIG_FORCE_MAX_ZONEORDER=13 |
| 137 | CONFIG_IOMMU_VMERGE=y | 147 | CONFIG_IOMMU_VMERGE=y |
| 148 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 138 | CONFIG_IRQ_ALL_CPUS=y | 149 | CONFIG_IRQ_ALL_CPUS=y |
| 139 | CONFIG_LPARCFG=y | 150 | CONFIG_LPARCFG=y |
| 140 | # CONFIG_NUMA is not set | 151 | # CONFIG_NUMA is not set |
| @@ -149,6 +160,7 @@ CONFIG_FLATMEM=y | |||
| 149 | CONFIG_FLAT_NODE_MEM_MAP=y | 160 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 150 | # CONFIG_SPARSEMEM_STATIC is not set | 161 | # CONFIG_SPARSEMEM_STATIC is not set |
| 151 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 162 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 163 | CONFIG_RESOURCES_64BIT=y | ||
| 152 | # CONFIG_PPC_64K_PAGES is not set | 164 | # CONFIG_PPC_64K_PAGES is not set |
| 153 | # CONFIG_SCHED_SMT is not set | 165 | # CONFIG_SCHED_SMT is not set |
| 154 | CONFIG_PROC_DEVICETREE=y | 166 | CONFIG_PROC_DEVICETREE=y |
| @@ -164,6 +176,7 @@ CONFIG_GENERIC_ISA_DMA=y | |||
| 164 | # CONFIG_PPC_INDIRECT_PCI is not set | 176 | # CONFIG_PPC_INDIRECT_PCI is not set |
| 165 | CONFIG_PCI=y | 177 | CONFIG_PCI=y |
| 166 | CONFIG_PCI_DOMAINS=y | 178 | CONFIG_PCI_DOMAINS=y |
| 179 | # CONFIG_PCIEPORTBUS is not set | ||
| 167 | # CONFIG_PCI_DEBUG is not set | 180 | # CONFIG_PCI_DEBUG is not set |
| 168 | 181 | ||
| 169 | # | 182 | # |
| @@ -207,6 +220,8 @@ CONFIG_INET_ESP=m | |||
| 207 | CONFIG_INET_IPCOMP=m | 220 | CONFIG_INET_IPCOMP=m |
| 208 | CONFIG_INET_XFRM_TUNNEL=m | 221 | CONFIG_INET_XFRM_TUNNEL=m |
| 209 | CONFIG_INET_TUNNEL=y | 222 | CONFIG_INET_TUNNEL=y |
| 223 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 224 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 210 | CONFIG_INET_DIAG=y | 225 | CONFIG_INET_DIAG=y |
| 211 | CONFIG_INET_TCP_DIAG=y | 226 | CONFIG_INET_TCP_DIAG=y |
| 212 | # CONFIG_TCP_CONG_ADVANCED is not set | 227 | # CONFIG_TCP_CONG_ADVANCED is not set |
| @@ -219,6 +234,7 @@ CONFIG_TCP_CONG_BIC=y | |||
| 219 | # CONFIG_IPV6 is not set | 234 | # CONFIG_IPV6 is not set |
| 220 | # CONFIG_INET6_XFRM_TUNNEL is not set | 235 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 221 | # CONFIG_INET6_TUNNEL is not set | 236 | # CONFIG_INET6_TUNNEL is not set |
| 237 | # CONFIG_NETWORK_SECMARK is not set | ||
| 222 | CONFIG_NETFILTER=y | 238 | CONFIG_NETFILTER=y |
| 223 | # CONFIG_NETFILTER_DEBUG is not set | 239 | # CONFIG_NETFILTER_DEBUG is not set |
| 224 | 240 | ||
| @@ -246,9 +262,11 @@ CONFIG_NETFILTER_XT_MATCH_MARK=m | |||
| 246 | # CONFIG_NETFILTER_XT_MATCH_POLICY is not set | 262 | # CONFIG_NETFILTER_XT_MATCH_POLICY is not set |
| 247 | # CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set | 263 | # CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set |
| 248 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 264 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
| 265 | # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set | ||
| 249 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 266 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
| 250 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 267 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
| 251 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 268 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
| 269 | # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set | ||
| 252 | CONFIG_NETFILTER_XT_MATCH_STRING=m | 270 | CONFIG_NETFILTER_XT_MATCH_STRING=m |
| 253 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 271 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
| 254 | 272 | ||
| @@ -267,6 +285,7 @@ CONFIG_IP_NF_TFTP=m | |||
| 267 | CONFIG_IP_NF_AMANDA=m | 285 | CONFIG_IP_NF_AMANDA=m |
| 268 | # CONFIG_IP_NF_PPTP is not set | 286 | # CONFIG_IP_NF_PPTP is not set |
| 269 | # CONFIG_IP_NF_H323 is not set | 287 | # CONFIG_IP_NF_H323 is not set |
| 288 | # CONFIG_IP_NF_SIP is not set | ||
| 270 | CONFIG_IP_NF_QUEUE=m | 289 | CONFIG_IP_NF_QUEUE=m |
| 271 | CONFIG_IP_NF_IPTABLES=m | 290 | CONFIG_IP_NF_IPTABLES=m |
| 272 | CONFIG_IP_NF_MATCH_IPRANGE=m | 291 | CONFIG_IP_NF_MATCH_IPRANGE=m |
| @@ -360,6 +379,7 @@ CONFIG_STANDALONE=y | |||
| 360 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 379 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 361 | CONFIG_FW_LOADER=m | 380 | CONFIG_FW_LOADER=m |
| 362 | # CONFIG_DEBUG_DRIVER is not set | 381 | # CONFIG_DEBUG_DRIVER is not set |
| 382 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 363 | 383 | ||
| 364 | # | 384 | # |
| 365 | # Connector - unified userspace <-> kernelspace linker | 385 | # Connector - unified userspace <-> kernelspace linker |
| @@ -396,6 +416,7 @@ CONFIG_BLK_DEV_NBD=m | |||
| 396 | CONFIG_BLK_DEV_RAM=y | 416 | CONFIG_BLK_DEV_RAM=y |
| 397 | CONFIG_BLK_DEV_RAM_COUNT=16 | 417 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 398 | CONFIG_BLK_DEV_RAM_SIZE=65536 | 418 | CONFIG_BLK_DEV_RAM_SIZE=65536 |
| 419 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 399 | CONFIG_BLK_DEV_INITRD=y | 420 | CONFIG_BLK_DEV_INITRD=y |
| 400 | # CONFIG_CDROM_PKTCDVD is not set | 421 | # CONFIG_CDROM_PKTCDVD is not set |
| 401 | # CONFIG_ATA_OVER_ETH is not set | 422 | # CONFIG_ATA_OVER_ETH is not set |
| @@ -453,6 +474,7 @@ CONFIG_SCSI_FC_ATTRS=y | |||
| 453 | # CONFIG_MEGARAID_LEGACY is not set | 474 | # CONFIG_MEGARAID_LEGACY is not set |
| 454 | # CONFIG_MEGARAID_SAS is not set | 475 | # CONFIG_MEGARAID_SAS is not set |
| 455 | # CONFIG_SCSI_SATA is not set | 476 | # CONFIG_SCSI_SATA is not set |
| 477 | # CONFIG_SCSI_HPTIOP is not set | ||
| 456 | # CONFIG_SCSI_BUSLOGIC is not set | 478 | # CONFIG_SCSI_BUSLOGIC is not set |
| 457 | # CONFIG_SCSI_DMX3191D is not set | 479 | # CONFIG_SCSI_DMX3191D is not set |
| 458 | # CONFIG_SCSI_EATA is not set | 480 | # CONFIG_SCSI_EATA is not set |
| @@ -464,7 +486,6 @@ CONFIG_SCSI_IBMVSCSI=m | |||
| 464 | # CONFIG_SCSI_INIA100 is not set | 486 | # CONFIG_SCSI_INIA100 is not set |
| 465 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 487 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
| 466 | # CONFIG_SCSI_IPR is not set | 488 | # CONFIG_SCSI_IPR is not set |
| 467 | # CONFIG_SCSI_QLOGIC_FC is not set | ||
| 468 | # CONFIG_SCSI_QLOGIC_1280 is not set | 489 | # CONFIG_SCSI_QLOGIC_1280 is not set |
| 469 | # CONFIG_SCSI_QLA_FC is not set | 490 | # CONFIG_SCSI_QLA_FC is not set |
| 470 | # CONFIG_SCSI_LPFC is not set | 491 | # CONFIG_SCSI_LPFC is not set |
| @@ -481,9 +502,7 @@ CONFIG_MD_LINEAR=y | |||
| 481 | CONFIG_MD_RAID0=y | 502 | CONFIG_MD_RAID0=y |
| 482 | CONFIG_MD_RAID1=y | 503 | CONFIG_MD_RAID1=y |
| 483 | CONFIG_MD_RAID10=m | 504 | CONFIG_MD_RAID10=m |
| 484 | CONFIG_MD_RAID5=y | 505 | # CONFIG_MD_RAID456 is not set |
| 485 | # CONFIG_MD_RAID5_RESHAPE is not set | ||
| 486 | CONFIG_MD_RAID6=m | ||
| 487 | CONFIG_MD_MULTIPATH=m | 506 | CONFIG_MD_MULTIPATH=m |
| 488 | CONFIG_MD_FAULTY=m | 507 | CONFIG_MD_FAULTY=m |
| 489 | CONFIG_BLK_DEV_DM=y | 508 | CONFIG_BLK_DEV_DM=y |
| @@ -596,6 +615,7 @@ CONFIG_E1000=m | |||
| 596 | # CONFIG_CHELSIO_T1 is not set | 615 | # CONFIG_CHELSIO_T1 is not set |
| 597 | # CONFIG_IXGB is not set | 616 | # CONFIG_IXGB is not set |
| 598 | # CONFIG_S2IO is not set | 617 | # CONFIG_S2IO is not set |
| 618 | # CONFIG_MYRI10GE is not set | ||
| 599 | 619 | ||
| 600 | # | 620 | # |
| 601 | # Token Ring devices | 621 | # Token Ring devices |
| @@ -696,6 +716,7 @@ CONFIG_SERIAL_ICOM=m | |||
| 696 | CONFIG_UNIX98_PTYS=y | 716 | CONFIG_UNIX98_PTYS=y |
| 697 | CONFIG_LEGACY_PTYS=y | 717 | CONFIG_LEGACY_PTYS=y |
| 698 | CONFIG_LEGACY_PTY_COUNT=256 | 718 | CONFIG_LEGACY_PTY_COUNT=256 |
| 719 | # CONFIG_BRIQ_PANEL is not set | ||
| 699 | 720 | ||
| 700 | # | 721 | # |
| 701 | # IPMI | 722 | # IPMI |
| @@ -706,6 +727,7 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
| 706 | # Watchdog Cards | 727 | # Watchdog Cards |
| 707 | # | 728 | # |
| 708 | # CONFIG_WATCHDOG is not set | 729 | # CONFIG_WATCHDOG is not set |
| 730 | # CONFIG_HW_RANDOM is not set | ||
| 709 | CONFIG_GEN_RTC=y | 731 | CONFIG_GEN_RTC=y |
| 710 | # CONFIG_GEN_RTC_X is not set | 732 | # CONFIG_GEN_RTC_X is not set |
| 711 | # CONFIG_DTLK is not set | 733 | # CONFIG_DTLK is not set |
| @@ -741,7 +763,6 @@ CONFIG_MAX_RAW_DEVS=256 | |||
| 741 | # | 763 | # |
| 742 | # Dallas's 1-wire bus | 764 | # Dallas's 1-wire bus |
| 743 | # | 765 | # |
| 744 | # CONFIG_W1 is not set | ||
| 745 | 766 | ||
| 746 | # | 767 | # |
| 747 | # Hardware Monitoring support | 768 | # Hardware Monitoring support |
| @@ -757,6 +778,7 @@ CONFIG_MAX_RAW_DEVS=256 | |||
| 757 | # Multimedia devices | 778 | # Multimedia devices |
| 758 | # | 779 | # |
| 759 | # CONFIG_VIDEO_DEV is not set | 780 | # CONFIG_VIDEO_DEV is not set |
| 781 | CONFIG_VIDEO_V4L2=y | ||
| 760 | 782 | ||
| 761 | # | 783 | # |
| 762 | # Digital Video Broadcasting Devices | 784 | # Digital Video Broadcasting Devices |
| @@ -766,7 +788,9 @@ CONFIG_MAX_RAW_DEVS=256 | |||
| 766 | # | 788 | # |
| 767 | # Graphics support | 789 | # Graphics support |
| 768 | # | 790 | # |
| 791 | CONFIG_FIRMWARE_EDID=y | ||
| 769 | # CONFIG_FB is not set | 792 | # CONFIG_FB is not set |
| 793 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 770 | 794 | ||
| 771 | # | 795 | # |
| 772 | # Sound | 796 | # Sound |
| @@ -801,6 +825,14 @@ CONFIG_USB_ARCH_HAS_EHCI=y | |||
| 801 | # CONFIG_NEW_LEDS is not set | 825 | # CONFIG_NEW_LEDS is not set |
| 802 | 826 | ||
| 803 | # | 827 | # |
| 828 | # LED drivers | ||
| 829 | # | ||
| 830 | |||
| 831 | # | ||
| 832 | # LED Triggers | ||
| 833 | # | ||
| 834 | |||
| 835 | # | ||
| 804 | # InfiniBand support | 836 | # InfiniBand support |
| 805 | # | 837 | # |
| 806 | # CONFIG_INFINIBAND is not set | 838 | # CONFIG_INFINIBAND is not set |
| @@ -815,6 +847,19 @@ CONFIG_USB_ARCH_HAS_EHCI=y | |||
| 815 | # CONFIG_RTC_CLASS is not set | 847 | # CONFIG_RTC_CLASS is not set |
| 816 | 848 | ||
| 817 | # | 849 | # |
| 850 | # DMA Engine support | ||
| 851 | # | ||
| 852 | # CONFIG_DMA_ENGINE is not set | ||
| 853 | |||
| 854 | # | ||
| 855 | # DMA Clients | ||
| 856 | # | ||
| 857 | |||
| 858 | # | ||
| 859 | # DMA Devices | ||
| 860 | # | ||
| 861 | |||
| 862 | # | ||
| 818 | # File systems | 863 | # File systems |
| 819 | # | 864 | # |
| 820 | CONFIG_EXT2_FS=y | 865 | CONFIG_EXT2_FS=y |
| @@ -843,7 +888,6 @@ CONFIG_JFS_SECURITY=y | |||
| 843 | # CONFIG_JFS_STATISTICS is not set | 888 | # CONFIG_JFS_STATISTICS is not set |
| 844 | CONFIG_FS_POSIX_ACL=y | 889 | CONFIG_FS_POSIX_ACL=y |
| 845 | CONFIG_XFS_FS=m | 890 | CONFIG_XFS_FS=m |
| 846 | CONFIG_XFS_EXPORT=y | ||
| 847 | # CONFIG_XFS_QUOTA is not set | 891 | # CONFIG_XFS_QUOTA is not set |
| 848 | CONFIG_XFS_SECURITY=y | 892 | CONFIG_XFS_SECURITY=y |
| 849 | CONFIG_XFS_POSIX_ACL=y | 893 | CONFIG_XFS_POSIX_ACL=y |
| @@ -852,6 +896,7 @@ CONFIG_XFS_POSIX_ACL=y | |||
| 852 | # CONFIG_MINIX_FS is not set | 896 | # CONFIG_MINIX_FS is not set |
| 853 | # CONFIG_ROMFS_FS is not set | 897 | # CONFIG_ROMFS_FS is not set |
| 854 | CONFIG_INOTIFY=y | 898 | CONFIG_INOTIFY=y |
| 899 | CONFIG_INOTIFY_USER=y | ||
| 855 | # CONFIG_QUOTA is not set | 900 | # CONFIG_QUOTA is not set |
| 856 | CONFIG_DNOTIFY=y | 901 | CONFIG_DNOTIFY=y |
| 857 | CONFIG_AUTOFS_FS=m | 902 | CONFIG_AUTOFS_FS=m |
| @@ -933,8 +978,10 @@ CONFIG_RPCSEC_GSS_SPKM3=m | |||
| 933 | # CONFIG_SMB_FS is not set | 978 | # CONFIG_SMB_FS is not set |
| 934 | CONFIG_CIFS=m | 979 | CONFIG_CIFS=m |
| 935 | # CONFIG_CIFS_STATS is not set | 980 | # CONFIG_CIFS_STATS is not set |
| 981 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 936 | CONFIG_CIFS_XATTR=y | 982 | CONFIG_CIFS_XATTR=y |
| 937 | CONFIG_CIFS_POSIX=y | 983 | CONFIG_CIFS_POSIX=y |
| 984 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 938 | # CONFIG_CIFS_EXPERIMENTAL is not set | 985 | # CONFIG_CIFS_EXPERIMENTAL is not set |
| 939 | # CONFIG_NCP_FS is not set | 986 | # CONFIG_NCP_FS is not set |
| 940 | # CONFIG_CODA_FS is not set | 987 | # CONFIG_CODA_FS is not set |
| @@ -1013,10 +1060,12 @@ CONFIG_TEXTSEARCH=y | |||
| 1013 | CONFIG_TEXTSEARCH_KMP=m | 1060 | CONFIG_TEXTSEARCH_KMP=m |
| 1014 | CONFIG_TEXTSEARCH_BM=m | 1061 | CONFIG_TEXTSEARCH_BM=m |
| 1015 | CONFIG_TEXTSEARCH_FSM=m | 1062 | CONFIG_TEXTSEARCH_FSM=m |
| 1063 | CONFIG_PLIST=y | ||
| 1016 | 1064 | ||
| 1017 | # | 1065 | # |
| 1018 | # Instrumentation Support | 1066 | # Instrumentation Support |
| 1019 | # | 1067 | # |
| 1068 | # CONFIG_PROFILING is not set | ||
| 1020 | # CONFIG_KPROBES is not set | 1069 | # CONFIG_KPROBES is not set |
| 1021 | 1070 | ||
| 1022 | # | 1071 | # |
| @@ -1024,14 +1073,19 @@ CONFIG_TEXTSEARCH_FSM=m | |||
| 1024 | # | 1073 | # |
| 1025 | # CONFIG_PRINTK_TIME is not set | 1074 | # CONFIG_PRINTK_TIME is not set |
| 1026 | CONFIG_MAGIC_SYSRQ=y | 1075 | CONFIG_MAGIC_SYSRQ=y |
| 1076 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1027 | CONFIG_DEBUG_KERNEL=y | 1077 | CONFIG_DEBUG_KERNEL=y |
| 1028 | CONFIG_LOG_BUF_SHIFT=17 | 1078 | CONFIG_LOG_BUF_SHIFT=17 |
| 1029 | CONFIG_DETECT_SOFTLOCKUP=y | 1079 | CONFIG_DETECT_SOFTLOCKUP=y |
| 1030 | # CONFIG_SCHEDSTATS is not set | 1080 | # CONFIG_SCHEDSTATS is not set |
| 1031 | # CONFIG_DEBUG_SLAB is not set | 1081 | # CONFIG_DEBUG_SLAB is not set |
| 1032 | # CONFIG_DEBUG_MUTEXES is not set | 1082 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1083 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1033 | # CONFIG_DEBUG_SPINLOCK is not set | 1084 | # CONFIG_DEBUG_SPINLOCK is not set |
| 1085 | # CONFIG_DEBUG_MUTEXES is not set | ||
| 1086 | # CONFIG_DEBUG_RWSEMS is not set | ||
| 1034 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1087 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 1088 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1035 | # CONFIG_DEBUG_KOBJECT is not set | 1089 | # CONFIG_DEBUG_KOBJECT is not set |
| 1036 | # CONFIG_DEBUG_INFO is not set | 1090 | # CONFIG_DEBUG_INFO is not set |
| 1037 | CONFIG_DEBUG_FS=y | 1091 | CONFIG_DEBUG_FS=y |
| @@ -1042,11 +1096,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y | |||
| 1042 | CONFIG_DEBUG_STACK_USAGE=y | 1096 | CONFIG_DEBUG_STACK_USAGE=y |
| 1043 | # CONFIG_DEBUGGER is not set | 1097 | # CONFIG_DEBUGGER is not set |
| 1044 | CONFIG_IRQSTACKS=y | 1098 | CONFIG_IRQSTACKS=y |
| 1045 | # CONFIG_PPC_EARLY_DEBUG_LPAR is not set | 1099 | # CONFIG_PPC_EARLY_DEBUG is not set |
| 1046 | # CONFIG_PPC_EARLY_DEBUG_G5 is not set | ||
| 1047 | # CONFIG_PPC_EARLY_DEBUG_RTAS is not set | ||
| 1048 | # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set | ||
| 1049 | # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set | ||
| 1050 | 1100 | ||
| 1051 | # | 1101 | # |
| 1052 | # Security options | 1102 | # Security options |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index 31708ad4574e..c18e8600d78f 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
| @@ -1,13 +1,14 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.17-rc4 | 3 | # Linux kernel version: 2.6.18-rc3 |
| 4 | # Sun May 28 07:26:56 2006 | 4 | # Tue Aug 8 09:14:48 2006 |
| 5 | # | 5 | # |
| 6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
| 7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
| 8 | CONFIG_PPC_MERGE=y | 8 | CONFIG_PPC_MERGE=y |
| 9 | CONFIG_MMU=y | 9 | CONFIG_MMU=y |
| 10 | CONFIG_GENERIC_HARDIRQS=y | 10 | CONFIG_GENERIC_HARDIRQS=y |
| 11 | CONFIG_IRQ_PER_CPU=y | ||
| 11 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 12 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
| 12 | CONFIG_GENERIC_HWEIGHT=y | 13 | CONFIG_GENERIC_HWEIGHT=y |
| 13 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 14 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| @@ -35,6 +36,7 @@ CONFIG_PPC_STD_MMU=y | |||
| 35 | CONFIG_VIRT_CPU_ACCOUNTING=y | 36 | CONFIG_VIRT_CPU_ACCOUNTING=y |
| 36 | CONFIG_SMP=y | 37 | CONFIG_SMP=y |
| 37 | CONFIG_NR_CPUS=128 | 38 | CONFIG_NR_CPUS=128 |
| 39 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 38 | 40 | ||
| 39 | # | 41 | # |
| 40 | # Code maturity level options | 42 | # Code maturity level options |
| @@ -52,6 +54,7 @@ CONFIG_SWAP=y | |||
| 52 | CONFIG_SYSVIPC=y | 54 | CONFIG_SYSVIPC=y |
| 53 | CONFIG_POSIX_MQUEUE=y | 55 | CONFIG_POSIX_MQUEUE=y |
| 54 | # CONFIG_BSD_PROCESS_ACCT is not set | 56 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 57 | # CONFIG_TASKSTATS is not set | ||
| 55 | CONFIG_SYSCTL=y | 58 | CONFIG_SYSCTL=y |
| 56 | CONFIG_AUDIT=y | 59 | CONFIG_AUDIT=y |
| 57 | CONFIG_AUDITSYSCALL=y | 60 | CONFIG_AUDITSYSCALL=y |
| @@ -70,10 +73,12 @@ CONFIG_PRINTK=y | |||
| 70 | CONFIG_BUG=y | 73 | CONFIG_BUG=y |
| 71 | CONFIG_ELF_CORE=y | 74 | CONFIG_ELF_CORE=y |
| 72 | CONFIG_BASE_FULL=y | 75 | CONFIG_BASE_FULL=y |
| 76 | CONFIG_RT_MUTEXES=y | ||
| 73 | CONFIG_FUTEX=y | 77 | CONFIG_FUTEX=y |
| 74 | CONFIG_EPOLL=y | 78 | CONFIG_EPOLL=y |
| 75 | CONFIG_SHMEM=y | 79 | CONFIG_SHMEM=y |
| 76 | CONFIG_SLAB=y | 80 | CONFIG_SLAB=y |
| 81 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 77 | # CONFIG_TINY_SHMEM is not set | 82 | # CONFIG_TINY_SHMEM is not set |
| 78 | CONFIG_BASE_SMALL=0 | 83 | CONFIG_BASE_SMALL=0 |
| 79 | # CONFIG_SLOB is not set | 84 | # CONFIG_SLOB is not set |
| @@ -118,6 +123,9 @@ CONFIG_PPC_PSERIES=y | |||
| 118 | # CONFIG_PPC_PMAC is not set | 123 | # CONFIG_PPC_PMAC is not set |
| 119 | # CONFIG_PPC_MAPLE is not set | 124 | # CONFIG_PPC_MAPLE is not set |
| 120 | # CONFIG_PPC_CELL is not set | 125 | # CONFIG_PPC_CELL is not set |
| 126 | # CONFIG_PPC_CELL_NATIVE is not set | ||
| 127 | # CONFIG_PPC_IBM_CELL_BLADE is not set | ||
| 128 | # CONFIG_UDBG_RTAS_CONSOLE is not set | ||
| 121 | CONFIG_XICS=y | 129 | CONFIG_XICS=y |
| 122 | # CONFIG_U3_DART is not set | 130 | # CONFIG_U3_DART is not set |
| 123 | CONFIG_MPIC=y | 131 | CONFIG_MPIC=y |
| @@ -149,6 +157,7 @@ CONFIG_BINFMT_MISC=m | |||
| 149 | CONFIG_FORCE_MAX_ZONEORDER=13 | 157 | CONFIG_FORCE_MAX_ZONEORDER=13 |
| 150 | CONFIG_IOMMU_VMERGE=y | 158 | CONFIG_IOMMU_VMERGE=y |
| 151 | CONFIG_HOTPLUG_CPU=y | 159 | CONFIG_HOTPLUG_CPU=y |
| 160 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 152 | CONFIG_KEXEC=y | 161 | CONFIG_KEXEC=y |
| 153 | # CONFIG_CRASH_DUMP is not set | 162 | # CONFIG_CRASH_DUMP is not set |
| 154 | CONFIG_IRQ_ALL_CPUS=y | 163 | CONFIG_IRQ_ALL_CPUS=y |
| @@ -173,6 +182,7 @@ CONFIG_SPARSEMEM_EXTREME=y | |||
| 173 | # CONFIG_MEMORY_HOTPLUG is not set | 182 | # CONFIG_MEMORY_HOTPLUG is not set |
| 174 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 183 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 175 | CONFIG_MIGRATION=y | 184 | CONFIG_MIGRATION=y |
| 185 | CONFIG_RESOURCES_64BIT=y | ||
| 176 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | 186 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y |
| 177 | # CONFIG_PPC_64K_PAGES is not set | 187 | # CONFIG_PPC_64K_PAGES is not set |
| 178 | CONFIG_SCHED_SMT=y | 188 | CONFIG_SCHED_SMT=y |
| @@ -190,6 +200,7 @@ CONFIG_PPC_I8259=y | |||
| 190 | # CONFIG_PPC_INDIRECT_PCI is not set | 200 | # CONFIG_PPC_INDIRECT_PCI is not set |
| 191 | CONFIG_PCI=y | 201 | CONFIG_PCI=y |
| 192 | CONFIG_PCI_DOMAINS=y | 202 | CONFIG_PCI_DOMAINS=y |
| 203 | # CONFIG_PCIEPORTBUS is not set | ||
| 193 | # CONFIG_PCI_DEBUG is not set | 204 | # CONFIG_PCI_DEBUG is not set |
| 194 | 205 | ||
| 195 | # | 206 | # |
| @@ -238,6 +249,8 @@ CONFIG_INET_ESP=m | |||
| 238 | CONFIG_INET_IPCOMP=m | 249 | CONFIG_INET_IPCOMP=m |
| 239 | CONFIG_INET_XFRM_TUNNEL=m | 250 | CONFIG_INET_XFRM_TUNNEL=m |
| 240 | CONFIG_INET_TUNNEL=y | 251 | CONFIG_INET_TUNNEL=y |
| 252 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
| 253 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
| 241 | CONFIG_INET_DIAG=y | 254 | CONFIG_INET_DIAG=y |
| 242 | CONFIG_INET_TCP_DIAG=y | 255 | CONFIG_INET_TCP_DIAG=y |
| 243 | # CONFIG_TCP_CONG_ADVANCED is not set | 256 | # CONFIG_TCP_CONG_ADVANCED is not set |
| @@ -250,6 +263,7 @@ CONFIG_TCP_CONG_BIC=y | |||
| 250 | # CONFIG_IPV6 is not set | 263 | # CONFIG_IPV6 is not set |
| 251 | # CONFIG_INET6_XFRM_TUNNEL is not set | 264 | # CONFIG_INET6_XFRM_TUNNEL is not set |
| 252 | # CONFIG_INET6_TUNNEL is not set | 265 | # CONFIG_INET6_TUNNEL is not set |
| 266 | # CONFIG_NETWORK_SECMARK is not set | ||
| 253 | CONFIG_NETFILTER=y | 267 | CONFIG_NETFILTER=y |
| 254 | # CONFIG_NETFILTER_DEBUG is not set | 268 | # CONFIG_NETFILTER_DEBUG is not set |
| 255 | 269 | ||
| @@ -277,6 +291,7 @@ CONFIG_IP_NF_TFTP=m | |||
| 277 | CONFIG_IP_NF_AMANDA=m | 291 | CONFIG_IP_NF_AMANDA=m |
| 278 | # CONFIG_IP_NF_PPTP is not set | 292 | # CONFIG_IP_NF_PPTP is not set |
| 279 | # CONFIG_IP_NF_H323 is not set | 293 | # CONFIG_IP_NF_H323 is not set |
| 294 | # CONFIG_IP_NF_SIP is not set | ||
| 280 | CONFIG_IP_NF_QUEUE=m | 295 | CONFIG_IP_NF_QUEUE=m |
| 281 | 296 | ||
| 282 | # | 297 | # |
| @@ -316,6 +331,7 @@ CONFIG_LLC=y | |||
| 316 | # Network testing | 331 | # Network testing |
| 317 | # | 332 | # |
| 318 | # CONFIG_NET_PKTGEN is not set | 333 | # CONFIG_NET_PKTGEN is not set |
| 334 | # CONFIG_NET_TCPPROBE is not set | ||
| 319 | # CONFIG_HAMRADIO is not set | 335 | # CONFIG_HAMRADIO is not set |
| 320 | # CONFIG_IRDA is not set | 336 | # CONFIG_IRDA is not set |
| 321 | # CONFIG_BT is not set | 337 | # CONFIG_BT is not set |
| @@ -332,6 +348,7 @@ CONFIG_STANDALONE=y | |||
| 332 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 348 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
| 333 | CONFIG_FW_LOADER=y | 349 | CONFIG_FW_LOADER=y |
| 334 | # CONFIG_DEBUG_DRIVER is not set | 350 | # CONFIG_DEBUG_DRIVER is not set |
| 351 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 335 | 352 | ||
| 336 | # | 353 | # |
| 337 | # Connector - unified userspace <-> kernelspace linker | 354 | # Connector - unified userspace <-> kernelspace linker |
| @@ -352,6 +369,7 @@ CONFIG_PARPORT_PC=m | |||
| 352 | # CONFIG_PARPORT_PC_FIFO is not set | 369 | # CONFIG_PARPORT_PC_FIFO is not set |
| 353 | # CONFIG_PARPORT_PC_SUPERIO is not set | 370 | # CONFIG_PARPORT_PC_SUPERIO is not set |
| 354 | # CONFIG_PARPORT_GSC is not set | 371 | # CONFIG_PARPORT_GSC is not set |
| 372 | # CONFIG_PARPORT_AX88796 is not set | ||
| 355 | # CONFIG_PARPORT_1284 is not set | 373 | # CONFIG_PARPORT_1284 is not set |
| 356 | 374 | ||
| 357 | # | 375 | # |
| @@ -376,6 +394,7 @@ CONFIG_BLK_DEV_NBD=m | |||
| 376 | CONFIG_BLK_DEV_RAM=y | 394 | CONFIG_BLK_DEV_RAM=y |
| 377 | CONFIG_BLK_DEV_RAM_COUNT=16 | 395 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 378 | CONFIG_BLK_DEV_RAM_SIZE=65536 | 396 | CONFIG_BLK_DEV_RAM_SIZE=65536 |
| 397 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
| 379 | CONFIG_BLK_DEV_INITRD=y | 398 | CONFIG_BLK_DEV_INITRD=y |
| 380 | # CONFIG_CDROM_PKTCDVD is not set | 399 | # CONFIG_CDROM_PKTCDVD is not set |
| 381 | # CONFIG_ATA_OVER_ETH is not set | 400 | # CONFIG_ATA_OVER_ETH is not set |
| @@ -487,6 +506,7 @@ CONFIG_SCSI_SAS_ATTRS=m | |||
| 487 | # CONFIG_MEGARAID_LEGACY is not set | 506 | # CONFIG_MEGARAID_LEGACY is not set |
| 488 | # CONFIG_MEGARAID_SAS is not set | 507 | # CONFIG_MEGARAID_SAS is not set |
| 489 | # CONFIG_SCSI_SATA is not set | 508 | # CONFIG_SCSI_SATA is not set |
| 509 | # CONFIG_SCSI_HPTIOP is not set | ||
| 490 | # CONFIG_SCSI_BUSLOGIC is not set | 510 | # CONFIG_SCSI_BUSLOGIC is not set |
| 491 | # CONFIG_SCSI_DMX3191D is not set | 511 | # CONFIG_SCSI_DMX3191D is not set |
| 492 | # CONFIG_SCSI_EATA is not set | 512 | # CONFIG_SCSI_EATA is not set |
| @@ -508,12 +528,6 @@ CONFIG_SCSI_IPR_TRACE=y | |||
| 508 | CONFIG_SCSI_IPR_DUMP=y | 528 | CONFIG_SCSI_IPR_DUMP=y |
| 509 | # CONFIG_SCSI_QLOGIC_1280 is not set | 529 | # CONFIG_SCSI_QLOGIC_1280 is not set |
| 510 | CONFIG_SCSI_QLA_FC=m | 530 | CONFIG_SCSI_QLA_FC=m |
| 511 | CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE=y | ||
| 512 | CONFIG_SCSI_QLA21XX=m | ||
| 513 | CONFIG_SCSI_QLA22XX=m | ||
| 514 | CONFIG_SCSI_QLA2300=m | ||
| 515 | CONFIG_SCSI_QLA2322=m | ||
| 516 | CONFIG_SCSI_QLA24XX=m | ||
| 517 | CONFIG_SCSI_LPFC=m | 531 | CONFIG_SCSI_LPFC=m |
| 518 | # CONFIG_SCSI_DC395x is not set | 532 | # CONFIG_SCSI_DC395x is not set |
| 519 | # CONFIG_SCSI_DC390T is not set | 533 | # CONFIG_SCSI_DC390T is not set |
| @@ -528,9 +542,7 @@ CONFIG_MD_LINEAR=y | |||
| 528 | CONFIG_MD_RAID0=y | 542 | CONFIG_MD_RAID0=y |
| 529 | CONFIG_MD_RAID1=y | 543 | CONFIG_MD_RAID1=y |
| 530 | CONFIG_MD_RAID10=m | 544 | CONFIG_MD_RAID10=m |
| 531 | CONFIG_MD_RAID5=y | 545 | # CONFIG_MD_RAID456 is not set |
| 532 | CONFIG_MD_RAID5_RESHAPE=y | ||
| 533 | CONFIG_MD_RAID6=m | ||
| 534 | CONFIG_MD_MULTIPATH=m | 546 | CONFIG_MD_MULTIPATH=m |
| 535 | CONFIG_MD_FAULTY=m | 547 | CONFIG_MD_FAULTY=m |
| 536 | CONFIG_BLK_DEV_DM=y | 548 | CONFIG_BLK_DEV_DM=y |
| @@ -651,6 +663,7 @@ CONFIG_IXGB=m | |||
| 651 | # CONFIG_IXGB_NAPI is not set | 663 | # CONFIG_IXGB_NAPI is not set |
| 652 | CONFIG_S2IO=m | 664 | CONFIG_S2IO=m |
| 653 | # CONFIG_S2IO_NAPI is not set | 665 | # CONFIG_S2IO_NAPI is not set |
| 666 | # CONFIG_MYRI10GE is not set | ||
| 654 | 667 | ||
| 655 | # | 668 | # |
| 656 | # Token Ring devices | 669 | # Token Ring devices |
| @@ -754,6 +767,7 @@ CONFIG_SERIO_LIBPS2=y | |||
| 754 | CONFIG_VT=y | 767 | CONFIG_VT=y |
| 755 | CONFIG_VT_CONSOLE=y | 768 | CONFIG_VT_CONSOLE=y |
| 756 | CONFIG_HW_CONSOLE=y | 769 | CONFIG_HW_CONSOLE=y |
| 770 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
| 757 | # CONFIG_SERIAL_NONSTANDARD is not set | 771 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 758 | 772 | ||
| 759 | # | 773 | # |
| @@ -776,6 +790,7 @@ CONFIG_SERIAL_JSM=m | |||
| 776 | CONFIG_UNIX98_PTYS=y | 790 | CONFIG_UNIX98_PTYS=y |
| 777 | CONFIG_LEGACY_PTYS=y | 791 | CONFIG_LEGACY_PTYS=y |
| 778 | CONFIG_LEGACY_PTY_COUNT=256 | 792 | CONFIG_LEGACY_PTY_COUNT=256 |
| 793 | # CONFIG_BRIQ_PANEL is not set | ||
| 779 | # CONFIG_PRINTER is not set | 794 | # CONFIG_PRINTER is not set |
| 780 | # CONFIG_PPDEV is not set | 795 | # CONFIG_PPDEV is not set |
| 781 | # CONFIG_TIPAR is not set | 796 | # CONFIG_TIPAR is not set |
| @@ -793,6 +808,7 @@ CONFIG_HVCS=m | |||
| 793 | # Watchdog Cards | 808 | # Watchdog Cards |
| 794 | # | 809 | # |
| 795 | # CONFIG_WATCHDOG is not set | 810 | # CONFIG_WATCHDOG is not set |
| 811 | # CONFIG_HW_RANDOM is not set | ||
| 796 | CONFIG_GEN_RTC=y | 812 | CONFIG_GEN_RTC=y |
| 797 | # CONFIG_GEN_RTC_X is not set | 813 | # CONFIG_GEN_RTC_X is not set |
| 798 | # CONFIG_DTLK is not set | 814 | # CONFIG_DTLK is not set |
| @@ -839,6 +855,7 @@ CONFIG_I2C_ALGOBIT=y | |||
| 839 | # CONFIG_I2C_I810 is not set | 855 | # CONFIG_I2C_I810 is not set |
| 840 | # CONFIG_I2C_PIIX4 is not set | 856 | # CONFIG_I2C_PIIX4 is not set |
| 841 | # CONFIG_I2C_NFORCE2 is not set | 857 | # CONFIG_I2C_NFORCE2 is not set |
| 858 | # CONFIG_I2C_OCORES is not set | ||
| 842 | # CONFIG_I2C_PARPORT is not set | 859 | # CONFIG_I2C_PARPORT is not set |
| 843 | # CONFIG_I2C_PARPORT_LIGHT is not set | 860 | # CONFIG_I2C_PARPORT_LIGHT is not set |
| 844 | # CONFIG_I2C_PROSAVAGE is not set | 861 | # CONFIG_I2C_PROSAVAGE is not set |
| @@ -876,7 +893,6 @@ CONFIG_I2C_ALGOBIT=y | |||
| 876 | # | 893 | # |
| 877 | # Dallas's 1-wire bus | 894 | # Dallas's 1-wire bus |
| 878 | # | 895 | # |
| 879 | # CONFIG_W1 is not set | ||
| 880 | 896 | ||
| 881 | # | 897 | # |
| 882 | # Hardware Monitoring support | 898 | # Hardware Monitoring support |
| @@ -892,6 +908,7 @@ CONFIG_I2C_ALGOBIT=y | |||
| 892 | # Multimedia devices | 908 | # Multimedia devices |
| 893 | # | 909 | # |
| 894 | # CONFIG_VIDEO_DEV is not set | 910 | # CONFIG_VIDEO_DEV is not set |
| 911 | CONFIG_VIDEO_V4L2=y | ||
| 895 | 912 | ||
| 896 | # | 913 | # |
| 897 | # Digital Video Broadcasting Devices | 914 | # Digital Video Broadcasting Devices |
| @@ -902,19 +919,19 @@ CONFIG_I2C_ALGOBIT=y | |||
| 902 | # | 919 | # |
| 903 | # Graphics support | 920 | # Graphics support |
| 904 | # | 921 | # |
| 922 | CONFIG_FIRMWARE_EDID=y | ||
| 905 | CONFIG_FB=y | 923 | CONFIG_FB=y |
| 906 | CONFIG_FB_CFB_FILLRECT=y | 924 | CONFIG_FB_CFB_FILLRECT=y |
| 907 | CONFIG_FB_CFB_COPYAREA=y | 925 | CONFIG_FB_CFB_COPYAREA=y |
| 908 | CONFIG_FB_CFB_IMAGEBLIT=y | 926 | CONFIG_FB_CFB_IMAGEBLIT=y |
| 909 | CONFIG_FB_MACMODES=y | 927 | CONFIG_FB_MACMODES=y |
| 910 | CONFIG_FB_FIRMWARE_EDID=y | 928 | # CONFIG_FB_BACKLIGHT is not set |
| 911 | CONFIG_FB_MODE_HELPERS=y | 929 | CONFIG_FB_MODE_HELPERS=y |
| 912 | CONFIG_FB_TILEBLITTING=y | 930 | CONFIG_FB_TILEBLITTING=y |
| 913 | # CONFIG_FB_CIRRUS is not set | 931 | # CONFIG_FB_CIRRUS is not set |
| 914 | # CONFIG_FB_PM2 is not set | 932 | # CONFIG_FB_PM2 is not set |
| 915 | # CONFIG_FB_CYBER2000 is not set | 933 | # CONFIG_FB_CYBER2000 is not set |
| 916 | CONFIG_FB_OF=y | 934 | CONFIG_FB_OF=y |
| 917 | # CONFIG_FB_CT65550 is not set | ||
| 918 | # CONFIG_FB_ASILIANT is not set | 935 | # CONFIG_FB_ASILIANT is not set |
| 919 | # CONFIG_FB_IMSTT is not set | 936 | # CONFIG_FB_IMSTT is not set |
| 920 | # CONFIG_FB_VGA16 is not set | 937 | # CONFIG_FB_VGA16 is not set |
| @@ -993,6 +1010,7 @@ CONFIG_USB_DEVICEFS=y | |||
| 993 | CONFIG_USB_EHCI_HCD=y | 1010 | CONFIG_USB_EHCI_HCD=y |
| 994 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | 1011 | # CONFIG_USB_EHCI_SPLIT_ISO is not set |
| 995 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 1012 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
| 1013 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | ||
| 996 | # CONFIG_USB_ISP116X_HCD is not set | 1014 | # CONFIG_USB_ISP116X_HCD is not set |
| 997 | CONFIG_USB_OHCI_HCD=y | 1015 | CONFIG_USB_OHCI_HCD=y |
| 998 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | 1016 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set |
| @@ -1083,10 +1101,12 @@ CONFIG_USB_MON=y | |||
| 1083 | # CONFIG_USB_LEGOTOWER is not set | 1101 | # CONFIG_USB_LEGOTOWER is not set |
| 1084 | # CONFIG_USB_LCD is not set | 1102 | # CONFIG_USB_LCD is not set |
| 1085 | # CONFIG_USB_LED is not set | 1103 | # CONFIG_USB_LED is not set |
| 1104 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
| 1086 | # CONFIG_USB_CYTHERM is not set | 1105 | # CONFIG_USB_CYTHERM is not set |
| 1087 | # CONFIG_USB_PHIDGETKIT is not set | 1106 | # CONFIG_USB_PHIDGETKIT is not set |
| 1088 | # CONFIG_USB_PHIDGETSERVO is not set | 1107 | # CONFIG_USB_PHIDGETSERVO is not set |
| 1089 | # CONFIG_USB_IDMOUSE is not set | 1108 | # CONFIG_USB_IDMOUSE is not set |
| 1109 | # CONFIG_USB_APPLEDISPLAY is not set | ||
| 1090 | # CONFIG_USB_SISUSBVGA is not set | 1110 | # CONFIG_USB_SISUSBVGA is not set |
| 1091 | # CONFIG_USB_LD is not set | 1111 | # CONFIG_USB_LD is not set |
| 1092 | # CONFIG_USB_TEST is not set | 1112 | # CONFIG_USB_TEST is not set |
| @@ -1124,12 +1144,14 @@ CONFIG_USB_MON=y | |||
| 1124 | CONFIG_INFINIBAND=m | 1144 | CONFIG_INFINIBAND=m |
| 1125 | CONFIG_INFINIBAND_USER_MAD=m | 1145 | CONFIG_INFINIBAND_USER_MAD=m |
| 1126 | CONFIG_INFINIBAND_USER_ACCESS=m | 1146 | CONFIG_INFINIBAND_USER_ACCESS=m |
| 1147 | CONFIG_INFINIBAND_ADDR_TRANS=y | ||
| 1127 | CONFIG_INFINIBAND_MTHCA=m | 1148 | CONFIG_INFINIBAND_MTHCA=m |
| 1128 | CONFIG_INFINIBAND_MTHCA_DEBUG=y | 1149 | CONFIG_INFINIBAND_MTHCA_DEBUG=y |
| 1129 | CONFIG_INFINIBAND_IPOIB=m | 1150 | CONFIG_INFINIBAND_IPOIB=m |
| 1130 | CONFIG_INFINIBAND_IPOIB_DEBUG=y | 1151 | CONFIG_INFINIBAND_IPOIB_DEBUG=y |
| 1131 | # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set | 1152 | # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set |
| 1132 | CONFIG_INFINIBAND_SRP=m | 1153 | CONFIG_INFINIBAND_SRP=m |
| 1154 | # CONFIG_INFINIBAND_ISER is not set | ||
| 1133 | 1155 | ||
| 1134 | # | 1156 | # |
| 1135 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) | 1157 | # EDAC - error detection and reporting (RAS) (EXPERIMENTAL) |
| @@ -1141,6 +1163,19 @@ CONFIG_INFINIBAND_SRP=m | |||
| 1141 | # CONFIG_RTC_CLASS is not set | 1163 | # CONFIG_RTC_CLASS is not set |
| 1142 | 1164 | ||
| 1143 | # | 1165 | # |
| 1166 | # DMA Engine support | ||
| 1167 | # | ||
| 1168 | # CONFIG_DMA_ENGINE is not set | ||
| 1169 | |||
| 1170 | # | ||
| 1171 | # DMA Clients | ||
| 1172 | # | ||
| 1173 | |||
| 1174 | # | ||
| 1175 | # DMA Devices | ||
| 1176 | # | ||
| 1177 | |||
| 1178 | # | ||
| 1144 | # File systems | 1179 | # File systems |
| 1145 | # | 1180 | # |
| 1146 | CONFIG_EXT2_FS=y | 1181 | CONFIG_EXT2_FS=y |
| @@ -1169,15 +1204,16 @@ CONFIG_JFS_SECURITY=y | |||
| 1169 | # CONFIG_JFS_STATISTICS is not set | 1204 | # CONFIG_JFS_STATISTICS is not set |
| 1170 | CONFIG_FS_POSIX_ACL=y | 1205 | CONFIG_FS_POSIX_ACL=y |
| 1171 | CONFIG_XFS_FS=m | 1206 | CONFIG_XFS_FS=m |
| 1172 | CONFIG_XFS_EXPORT=y | ||
| 1173 | # CONFIG_XFS_QUOTA is not set | 1207 | # CONFIG_XFS_QUOTA is not set |
| 1174 | CONFIG_XFS_SECURITY=y | 1208 | CONFIG_XFS_SECURITY=y |
| 1175 | CONFIG_XFS_POSIX_ACL=y | 1209 | CONFIG_XFS_POSIX_ACL=y |
| 1176 | # CONFIG_XFS_RT is not set | 1210 | # CONFIG_XFS_RT is not set |
| 1177 | CONFIG_OCFS2_FS=m | 1211 | CONFIG_OCFS2_FS=m |
| 1212 | CONFIG_OCFS2_DEBUG_MASKLOG=y | ||
| 1178 | # CONFIG_MINIX_FS is not set | 1213 | # CONFIG_MINIX_FS is not set |
| 1179 | # CONFIG_ROMFS_FS is not set | 1214 | # CONFIG_ROMFS_FS is not set |
| 1180 | CONFIG_INOTIFY=y | 1215 | CONFIG_INOTIFY=y |
| 1216 | CONFIG_INOTIFY_USER=y | ||
| 1181 | # CONFIG_QUOTA is not set | 1217 | # CONFIG_QUOTA is not set |
| 1182 | CONFIG_DNOTIFY=y | 1218 | CONFIG_DNOTIFY=y |
| 1183 | # CONFIG_AUTOFS_FS is not set | 1219 | # CONFIG_AUTOFS_FS is not set |
| @@ -1259,8 +1295,10 @@ CONFIG_RPCSEC_GSS_SPKM3=m | |||
| 1259 | # CONFIG_SMB_FS is not set | 1295 | # CONFIG_SMB_FS is not set |
| 1260 | CONFIG_CIFS=m | 1296 | CONFIG_CIFS=m |
| 1261 | # CONFIG_CIFS_STATS is not set | 1297 | # CONFIG_CIFS_STATS is not set |
| 1298 | # CONFIG_CIFS_WEAK_PW_HASH is not set | ||
| 1262 | CONFIG_CIFS_XATTR=y | 1299 | CONFIG_CIFS_XATTR=y |
| 1263 | CONFIG_CIFS_POSIX=y | 1300 | CONFIG_CIFS_POSIX=y |
| 1301 | # CONFIG_CIFS_DEBUG2 is not set | ||
| 1264 | # CONFIG_CIFS_EXPERIMENTAL is not set | 1302 | # CONFIG_CIFS_EXPERIMENTAL is not set |
| 1265 | # CONFIG_NCP_FS is not set | 1303 | # CONFIG_NCP_FS is not set |
| 1266 | # CONFIG_CODA_FS is not set | 1304 | # CONFIG_CODA_FS is not set |
| @@ -1326,6 +1364,9 @@ CONFIG_CRC32=y | |||
| 1326 | CONFIG_LIBCRC32C=m | 1364 | CONFIG_LIBCRC32C=m |
| 1327 | CONFIG_ZLIB_INFLATE=y | 1365 | CONFIG_ZLIB_INFLATE=y |
| 1328 | CONFIG_ZLIB_DEFLATE=m | 1366 | CONFIG_ZLIB_DEFLATE=m |
| 1367 | CONFIG_TEXTSEARCH=y | ||
| 1368 | CONFIG_TEXTSEARCH_KMP=m | ||
| 1369 | CONFIG_PLIST=y | ||
| 1329 | 1370 | ||
| 1330 | # | 1371 | # |
| 1331 | # Instrumentation Support | 1372 | # Instrumentation Support |
| @@ -1339,14 +1380,19 @@ CONFIG_KPROBES=y | |||
| 1339 | # | 1380 | # |
| 1340 | # CONFIG_PRINTK_TIME is not set | 1381 | # CONFIG_PRINTK_TIME is not set |
| 1341 | CONFIG_MAGIC_SYSRQ=y | 1382 | CONFIG_MAGIC_SYSRQ=y |
| 1383 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 1342 | CONFIG_DEBUG_KERNEL=y | 1384 | CONFIG_DEBUG_KERNEL=y |
| 1343 | CONFIG_LOG_BUF_SHIFT=17 | 1385 | CONFIG_LOG_BUF_SHIFT=17 |
| 1344 | CONFIG_DETECT_SOFTLOCKUP=y | 1386 | CONFIG_DETECT_SOFTLOCKUP=y |
| 1345 | # CONFIG_SCHEDSTATS is not set | 1387 | # CONFIG_SCHEDSTATS is not set |
| 1346 | # CONFIG_DEBUG_SLAB is not set | 1388 | # CONFIG_DEBUG_SLAB is not set |
| 1347 | # CONFIG_DEBUG_MUTEXES is not set | 1389 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1390 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 1348 | # CONFIG_DEBUG_SPINLOCK is not set | 1391 | # CONFIG_DEBUG_SPINLOCK is not set |
| 1392 | # CONFIG_DEBUG_MUTEXES is not set | ||
| 1393 | # CONFIG_DEBUG_RWSEMS is not set | ||
| 1349 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1394 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 1395 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 1350 | # CONFIG_DEBUG_KOBJECT is not set | 1396 | # CONFIG_DEBUG_KOBJECT is not set |
| 1351 | # CONFIG_DEBUG_INFO is not set | 1397 | # CONFIG_DEBUG_INFO is not set |
| 1352 | CONFIG_DEBUG_FS=y | 1398 | CONFIG_DEBUG_FS=y |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 814f242aeb8c..956c2e5564b7 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
| @@ -67,9 +67,9 @@ pci64-$(CONFIG_PPC64) += pci_64.o pci_dn.o pci_iommu.o \ | |||
| 67 | pci_direct_iommu.o iomap.o | 67 | pci_direct_iommu.o iomap.o |
| 68 | pci32-$(CONFIG_PPC32) := pci_32.o | 68 | pci32-$(CONFIG_PPC32) := pci_32.o |
| 69 | obj-$(CONFIG_PCI) += $(pci64-y) $(pci32-y) | 69 | obj-$(CONFIG_PCI) += $(pci64-y) $(pci32-y) |
| 70 | kexec-$(CONFIG_PPC64) := machine_kexec_64.o crash.o | 70 | kexec-$(CONFIG_PPC64) := machine_kexec_64.o |
| 71 | kexec-$(CONFIG_PPC32) := machine_kexec_32.o | 71 | kexec-$(CONFIG_PPC32) := machine_kexec_32.o |
| 72 | obj-$(CONFIG_KEXEC) += machine_kexec.o $(kexec-y) | 72 | obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o $(kexec-y) |
| 73 | 73 | ||
| 74 | ifeq ($(CONFIG_PPC_ISERIES),y) | 74 | ifeq ($(CONFIG_PPC_ISERIES),y) |
| 75 | $(obj)/head_64.o: $(obj)/lparmap.s | 75 | $(obj)/head_64.o: $(obj)/lparmap.s |
diff --git a/arch/powerpc/kernel/cpu_setup_power4.S b/arch/powerpc/kernel/cpu_setup_power4.S index f69af2c5d7b3..76e97aa71c45 100644 --- a/arch/powerpc/kernel/cpu_setup_power4.S +++ b/arch/powerpc/kernel/cpu_setup_power4.S | |||
| @@ -76,6 +76,8 @@ _GLOBAL(__setup_cpu_ppc970) | |||
| 76 | mfspr r0,SPRN_HID0 | 76 | mfspr r0,SPRN_HID0 |
| 77 | li r11,5 /* clear DOZE and SLEEP */ | 77 | li r11,5 /* clear DOZE and SLEEP */ |
| 78 | rldimi r0,r11,52,8 /* set NAP and DPM */ | 78 | rldimi r0,r11,52,8 /* set NAP and DPM */ |
| 79 | li r11,0 | ||
| 80 | rldimi r0,r11,32,31 /* clear EN_ATTN */ | ||
| 79 | mtspr SPRN_HID0,r0 | 81 | mtspr SPRN_HID0,r0 |
| 80 | mfspr r0,SPRN_HID0 | 82 | mfspr r0,SPRN_HID0 |
| 81 | mfspr r0,SPRN_HID0 | 83 | mfspr r0,SPRN_HID0 |
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c index 358cecdc6aef..f04c18e08b8b 100644 --- a/arch/powerpc/kernel/crash.c +++ b/arch/powerpc/kernel/crash.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | /* This keeps a track of which one is crashing cpu. */ | 44 | /* This keeps a track of which one is crashing cpu. */ |
| 45 | int crashing_cpu = -1; | 45 | int crashing_cpu = -1; |
| 46 | static cpumask_t cpus_in_crash = CPU_MASK_NONE; | 46 | static cpumask_t cpus_in_crash = CPU_MASK_NONE; |
| 47 | cpumask_t cpus_in_sr = CPU_MASK_NONE; | ||
| 47 | 48 | ||
| 48 | static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data, | 49 | static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data, |
| 49 | size_t data_len) | 50 | size_t data_len) |
| @@ -139,7 +140,13 @@ void crash_ipi_callback(struct pt_regs *regs) | |||
| 139 | 140 | ||
| 140 | if (ppc_md.kexec_cpu_down) | 141 | if (ppc_md.kexec_cpu_down) |
| 141 | ppc_md.kexec_cpu_down(1, 1); | 142 | ppc_md.kexec_cpu_down(1, 1); |
| 143 | |||
| 144 | #ifdef CONFIG_PPC64 | ||
| 142 | kexec_smp_wait(); | 145 | kexec_smp_wait(); |
| 146 | #else | ||
| 147 | for (;;); /* FIXME */ | ||
| 148 | #endif | ||
| 149 | |||
| 143 | /* NOTREACHED */ | 150 | /* NOTREACHED */ |
| 144 | } | 151 | } |
| 145 | 152 | ||
| @@ -255,7 +262,11 @@ static void crash_kexec_prepare_cpus(int cpu) | |||
| 255 | * | 262 | * |
| 256 | * do this if kexec in setup.c ? | 263 | * do this if kexec in setup.c ? |
| 257 | */ | 264 | */ |
| 265 | #ifdef CONFIG_PPC64 | ||
| 258 | smp_release_cpus(); | 266 | smp_release_cpus(); |
| 267 | #else | ||
| 268 | /* FIXME */ | ||
| 269 | #endif | ||
| 259 | } | 270 | } |
| 260 | 271 | ||
| 261 | void crash_kexec_secondary(struct pt_regs *regs) | 272 | void crash_kexec_secondary(struct pt_regs *regs) |
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 01bdae35cb55..7ee685433319 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
| @@ -693,7 +693,7 @@ unsigned int irq_radix_revmap(struct irq_host *host, | |||
| 693 | /* If not there, try to insert it */ | 693 | /* If not there, try to insert it */ |
| 694 | virq = irq_find_mapping(host, hwirq); | 694 | virq = irq_find_mapping(host, hwirq); |
| 695 | if (virq != NO_IRQ) | 695 | if (virq != NO_IRQ) |
| 696 | radix_tree_insert(tree, virq, &irq_map[virq]); | 696 | radix_tree_insert(tree, hwirq, &irq_map[virq]); |
| 697 | bail: | 697 | bail: |
| 698 | spin_unlock_irqrestore(&irq_big_lock, flags); | 698 | spin_unlock_irqrestore(&irq_big_lock, flags); |
| 699 | return virq; | 699 | return virq; |
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c index 9f0898c89759..cd65c367b8b6 100644 --- a/arch/powerpc/kernel/kprobes.c +++ b/arch/powerpc/kernel/kprobes.c | |||
| @@ -61,6 +61,8 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p) | |||
| 61 | if (!ret) { | 61 | if (!ret) { |
| 62 | memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); | 62 | memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); |
| 63 | p->opcode = *p->addr; | 63 | p->opcode = *p->addr; |
| 64 | flush_icache_range((unsigned long)p->ainsn.insn, | ||
| 65 | (unsigned long)p->ainsn.insn + sizeof(kprobe_opcode_t)); | ||
| 64 | } | 66 | } |
| 65 | 67 | ||
| 66 | return ret; | 68 | return ret; |
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index a81ca1b841ec..e60a0c544d63 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/reboot.h> | 13 | #include <linux/reboot.h> |
| 14 | #include <linux/threads.h> | 14 | #include <linux/threads.h> |
| 15 | #include <asm/machdep.h> | 15 | #include <asm/machdep.h> |
| 16 | #include <asm/lmb.h> | ||
| 16 | 17 | ||
| 17 | void machine_crash_shutdown(struct pt_regs *regs) | 18 | void machine_crash_shutdown(struct pt_regs *regs) |
| 18 | { | 19 | { |
| @@ -59,3 +60,58 @@ NORET_TYPE void machine_kexec(struct kimage *image) | |||
| 59 | } | 60 | } |
| 60 | for(;;); | 61 | for(;;); |
| 61 | } | 62 | } |
| 63 | |||
| 64 | static int __init early_parse_crashk(char *p) | ||
| 65 | { | ||
| 66 | unsigned long size; | ||
| 67 | |||
| 68 | if (!p) | ||
| 69 | return 1; | ||
| 70 | |||
| 71 | size = memparse(p, &p); | ||
| 72 | |||
| 73 | if (*p == '@') | ||
| 74 | crashk_res.start = memparse(p + 1, &p); | ||
| 75 | else | ||
| 76 | crashk_res.start = KDUMP_KERNELBASE; | ||
| 77 | |||
| 78 | crashk_res.end = crashk_res.start + size - 1; | ||
| 79 | |||
| 80 | return 0; | ||
| 81 | } | ||
| 82 | early_param("crashkernel", early_parse_crashk); | ||
| 83 | |||
| 84 | void __init reserve_crashkernel(void) | ||
| 85 | { | ||
| 86 | unsigned long size; | ||
| 87 | |||
| 88 | if (crashk_res.start == 0) | ||
| 89 | return; | ||
| 90 | |||
| 91 | /* We might have got these values via the command line or the | ||
| 92 | * device tree, either way sanitise them now. */ | ||
| 93 | |||
| 94 | size = crashk_res.end - crashk_res.start + 1; | ||
| 95 | |||
| 96 | if (crashk_res.start != KDUMP_KERNELBASE) | ||
| 97 | printk("Crash kernel location must be 0x%x\n", | ||
| 98 | KDUMP_KERNELBASE); | ||
| 99 | |||
| 100 | crashk_res.start = KDUMP_KERNELBASE; | ||
| 101 | size = PAGE_ALIGN(size); | ||
| 102 | crashk_res.end = crashk_res.start + size - 1; | ||
| 103 | |||
| 104 | /* Crash kernel trumps memory limit */ | ||
| 105 | if (memory_limit && memory_limit <= crashk_res.end) { | ||
| 106 | memory_limit = crashk_res.end + 1; | ||
| 107 | printk("Adjusted memory limit for crashkernel, now 0x%lx\n", | ||
| 108 | memory_limit); | ||
| 109 | } | ||
| 110 | |||
| 111 | lmb_reserve(crashk_res.start, size); | ||
| 112 | } | ||
| 113 | |||
| 114 | int overlaps_crashkernel(unsigned long start, unsigned long size) | ||
| 115 | { | ||
| 116 | return (start + size) > crashk_res.start && start <= crashk_res.end; | ||
| 117 | } | ||
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c index b438d45a068c..be58985c7681 100644 --- a/arch/powerpc/kernel/machine_kexec_64.c +++ b/arch/powerpc/kernel/machine_kexec_64.c | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | */ | 10 | */ |
| 11 | 11 | ||
| 12 | 12 | ||
| 13 | #include <linux/cpumask.h> | ||
| 14 | #include <linux/kexec.h> | 13 | #include <linux/kexec.h> |
| 15 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
| 16 | #include <linux/thread_info.h> | 15 | #include <linux/thread_info.h> |
| @@ -21,7 +20,6 @@ | |||
| 21 | #include <asm/machdep.h> | 20 | #include <asm/machdep.h> |
| 22 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
| 23 | #include <asm/paca.h> | 22 | #include <asm/paca.h> |
| 24 | #include <asm/lmb.h> | ||
| 25 | #include <asm/mmu.h> | 23 | #include <asm/mmu.h> |
| 26 | #include <asm/sections.h> /* _end */ | 24 | #include <asm/sections.h> /* _end */ |
| 27 | #include <asm/prom.h> | 25 | #include <asm/prom.h> |
| @@ -385,58 +383,3 @@ static int __init kexec_setup(void) | |||
| 385 | return 0; | 383 | return 0; |
| 386 | } | 384 | } |
| 387 | __initcall(kexec_setup); | 385 | __initcall(kexec_setup); |
| 388 | |||
| 389 | static int __init early_parse_crashk(char *p) | ||
| 390 | { | ||
| 391 | unsigned long size; | ||
| 392 | |||
| 393 | if (!p) | ||
| 394 | return 1; | ||
| 395 | |||
| 396 | size = memparse(p, &p); | ||
| 397 | |||
| 398 | if (*p == '@') | ||
| 399 | crashk_res.start = memparse(p + 1, &p); | ||
| 400 | else | ||
| 401 | crashk_res.start = KDUMP_KERNELBASE; | ||
| 402 | |||
| 403 | crashk_res.end = crashk_res.start + size - 1; | ||
| 404 | |||
| 405 | return 0; | ||
| 406 | } | ||
| 407 | early_param("crashkernel", early_parse_crashk); | ||
| 408 | |||
| 409 | void __init reserve_crashkernel(void) | ||
| 410 | { | ||
| 411 | unsigned long size; | ||
| 412 | |||
| 413 | if (crashk_res.start == 0) | ||
| 414 | return; | ||
| 415 | |||
| 416 | /* We might have got these values via the command line or the | ||
| 417 | * device tree, either way sanitise them now. */ | ||
| 418 | |||
| 419 | size = crashk_res.end - crashk_res.start + 1; | ||
| 420 | |||
| 421 | if (crashk_res.start != KDUMP_KERNELBASE) | ||
| 422 | printk("Crash kernel location must be 0x%x\n", | ||
| 423 | KDUMP_KERNELBASE); | ||
| 424 | |||
| 425 | crashk_res.start = KDUMP_KERNELBASE; | ||
| 426 | size = PAGE_ALIGN(size); | ||
| 427 | crashk_res.end = crashk_res.start + size - 1; | ||
| 428 | |||
| 429 | /* Crash kernel trumps memory limit */ | ||
| 430 | if (memory_limit && memory_limit <= crashk_res.end) { | ||
| 431 | memory_limit = crashk_res.end + 1; | ||
| 432 | printk("Adjusted memory limit for crashkernel, now 0x%lx\n", | ||
| 433 | memory_limit); | ||
| 434 | } | ||
| 435 | |||
| 436 | lmb_reserve(crashk_res.start, size); | ||
| 437 | } | ||
| 438 | |||
| 439 | int overlaps_crashkernel(unsigned long start, unsigned long size) | ||
| 440 | { | ||
| 441 | return (start + size) > crashk_res.start && start <= crashk_res.end; | ||
| 442 | } | ||
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 4a4cb5598402..77f1e06d208d 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
| @@ -569,6 +569,27 @@ int rtas_set_indicator(int indicator, int index, int new_value) | |||
| 569 | } | 569 | } |
| 570 | EXPORT_SYMBOL(rtas_set_indicator); | 570 | EXPORT_SYMBOL(rtas_set_indicator); |
| 571 | 571 | ||
| 572 | /* | ||
| 573 | * Ignoring RTAS extended delay | ||
| 574 | */ | ||
| 575 | int rtas_set_indicator_fast(int indicator, int index, int new_value) | ||
| 576 | { | ||
| 577 | int rc; | ||
| 578 | int token = rtas_token("set-indicator"); | ||
| 579 | |||
| 580 | if (token == RTAS_UNKNOWN_SERVICE) | ||
| 581 | return -ENOENT; | ||
| 582 | |||
| 583 | rc = rtas_call(token, 3, 1, NULL, indicator, index, new_value); | ||
| 584 | |||
| 585 | WARN_ON(rc == -2 || (rc >= 9900 && rc <= 9905)); | ||
| 586 | |||
| 587 | if (rc < 0) | ||
| 588 | return rtas_error_rc(rc); | ||
| 589 | |||
| 590 | return rc; | ||
| 591 | } | ||
| 592 | |||
| 572 | void rtas_restart(char *cmd) | 593 | void rtas_restart(char *cmd) |
| 573 | { | 594 | { |
| 574 | if (rtas_flash_term_hook) | 595 | if (rtas_flash_term_hook) |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 2105767fcc57..e4d1713e8aea 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
| @@ -55,9 +55,6 @@ | |||
| 55 | 55 | ||
| 56 | #ifdef CONFIG_PPC64 /* XXX */ | 56 | #ifdef CONFIG_PPC64 /* XXX */ |
| 57 | #define _IO_BASE pci_io_base | 57 | #define _IO_BASE pci_io_base |
| 58 | #ifdef CONFIG_KEXEC | ||
| 59 | cpumask_t cpus_in_sr = CPU_MASK_NONE; | ||
| 60 | #endif | ||
| 61 | #endif | 58 | #endif |
| 62 | 59 | ||
| 63 | #ifdef CONFIG_DEBUGGER | 60 | #ifdef CONFIG_DEBUGGER |
| @@ -151,7 +148,7 @@ int die(const char *str, struct pt_regs *regs, long err) | |||
| 151 | panic("Fatal exception in interrupt"); | 148 | panic("Fatal exception in interrupt"); |
| 152 | 149 | ||
| 153 | if (panic_on_oops) | 150 | if (panic_on_oops) |
| 154 | panic("Fatal exception: panic_on_oops"); | 151 | panic("Fatal exception"); |
| 155 | 152 | ||
| 156 | do_exit(err); | 153 | do_exit(err); |
| 157 | 154 | ||
| @@ -211,6 +208,19 @@ void system_reset_exception(struct pt_regs *regs) | |||
| 211 | 208 | ||
| 212 | die("System Reset", regs, SIGABRT); | 209 | die("System Reset", regs, SIGABRT); |
| 213 | 210 | ||
| 211 | /* | ||
| 212 | * Some CPUs when released from the debugger will execute this path. | ||
| 213 | * These CPUs entered the debugger via a soft-reset. If the CPU was | ||
| 214 | * hung before entering the debugger it will return to the hung | ||
| 215 | * state when exiting this function. This causes a problem in | ||
| 216 | * kdump since the hung CPU(s) will not respond to the IPI sent | ||
| 217 | * from kdump. To prevent the problem we call crash_kexec_secondary() | ||
| 218 | * here. If a kdump had not been initiated or we exit the debugger | ||
| 219 | * with the "exit and recover" command (x) crash_kexec_secondary() | ||
| 220 | * will return after 5ms and the CPU returns to its previous state. | ||
| 221 | */ | ||
| 222 | crash_kexec_secondary(regs); | ||
| 223 | |||
| 214 | /* Must die if the interrupt is not recoverable */ | 224 | /* Must die if the interrupt is not recoverable */ |
| 215 | if (!(regs->msr & MSR_RI)) | 225 | if (!(regs->msr & MSR_RI)) |
| 216 | panic("Unrecoverable System Reset"); | 226 | panic("Unrecoverable System Reset"); |
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 71c634e0b87c..31867a701fcb 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
| @@ -213,8 +213,6 @@ static void pseries_lpar_enable_pmcs(void) | |||
| 213 | { | 213 | { |
| 214 | unsigned long set, reset; | 214 | unsigned long set, reset; |
| 215 | 215 | ||
| 216 | power4_enable_pmcs(); | ||
| 217 | |||
| 218 | set = 1UL << 63; | 216 | set = 1UL << 63; |
| 219 | reset = 0; | 217 | reset = 0; |
| 220 | plpar_hcall_norets(H_PERFMON, set, reset); | 218 | plpar_hcall_norets(H_PERFMON, set, reset); |
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 2d0da6f9e244..e98863025721 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
| @@ -467,7 +467,7 @@ void xics_setup_cpu(void) | |||
| 467 | * | 467 | * |
| 468 | * XXX: undo of teardown on kexec needs this too, as may hotplug | 468 | * XXX: undo of teardown on kexec needs this too, as may hotplug |
| 469 | */ | 469 | */ |
| 470 | rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, | 470 | rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE, |
| 471 | (1UL << interrupt_server_size) - 1 - default_distrib_server, 1); | 471 | (1UL << interrupt_server_size) - 1 - default_distrib_server, 1); |
| 472 | } | 472 | } |
| 473 | 473 | ||
| @@ -796,7 +796,7 @@ void xics_teardown_cpu(int secondary) | |||
| 796 | * so leave the master cpu in the group. | 796 | * so leave the master cpu in the group. |
| 797 | */ | 797 | */ |
| 798 | if (secondary) | 798 | if (secondary) |
| 799 | rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, | 799 | rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE, |
| 800 | (1UL << interrupt_server_size) - 1 - | 800 | (1UL << interrupt_server_size) - 1 - |
| 801 | default_distrib_server, 0); | 801 | default_distrib_server, 0); |
| 802 | } | 802 | } |
| @@ -813,7 +813,7 @@ void xics_migrate_irqs_away(void) | |||
| 813 | xics_set_cpu_priority(cpu, 0); | 813 | xics_set_cpu_priority(cpu, 0); |
| 814 | 814 | ||
| 815 | /* remove ourselves from the global interrupt queue */ | 815 | /* remove ourselves from the global interrupt queue */ |
| 816 | status = rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE, | 816 | status = rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE, |
| 817 | (1UL << interrupt_server_size) - 1 - default_distrib_server, 0); | 817 | (1UL << interrupt_server_size) - 1 - default_distrib_server, 0); |
| 818 | WARN_ON(status < 0); | 818 | WARN_ON(status < 0); |
| 819 | 819 | ||
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index e983972132d8..12b65609c072 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c | |||
| @@ -169,8 +169,16 @@ static int __init gfar_of_init(void) | |||
| 169 | goto err; | 169 | goto err; |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | mac_addr = get_property(np, "address", NULL); | 172 | mac_addr = get_property(np, "local-mac-address", NULL); |
| 173 | memcpy(gfar_data.mac_addr, mac_addr, 6); | 173 | if (mac_addr == NULL) |
| 174 | mac_addr = get_property(np, "mac-address", NULL); | ||
| 175 | if (mac_addr == NULL) { | ||
| 176 | /* Obsolete */ | ||
| 177 | mac_addr = get_property(np, "address", NULL); | ||
| 178 | } | ||
| 179 | |||
| 180 | if (mac_addr) | ||
| 181 | memcpy(gfar_data.mac_addr, mac_addr, 6); | ||
| 174 | 182 | ||
| 175 | if (model && !strcasecmp(model, "TSEC")) | 183 | if (model && !strcasecmp(model, "TSEC")) |
| 176 | gfar_data.device_flags = | 184 | gfar_data.device_flags = |
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c index 6a4b5f9715c9..a0a94e0ef8d1 100644 --- a/arch/s390/appldata/appldata_base.c +++ b/arch/s390/appldata/appldata_base.c | |||
| @@ -618,7 +618,7 @@ appldata_offline_cpu(int cpu) | |||
| 618 | } | 618 | } |
| 619 | 619 | ||
| 620 | #ifdef CONFIG_HOTPLUG_CPU | 620 | #ifdef CONFIG_HOTPLUG_CPU |
| 621 | static int | 621 | static int __cpuinit |
| 622 | appldata_cpu_notify(struct notifier_block *self, | 622 | appldata_cpu_notify(struct notifier_block *self, |
| 623 | unsigned long action, void *hcpu) | 623 | unsigned long action, void *hcpu) |
| 624 | { | 624 | { |
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index eb6ebfef134a..6e6b6de77770 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c | |||
| @@ -129,7 +129,7 @@ void __init paging_init(void) | |||
| 129 | /* | 129 | /* |
| 130 | * pg_table is physical at this point | 130 | * pg_table is physical at this point |
| 131 | */ | 131 | */ |
| 132 | pg_table = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); | 132 | pg_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE); |
| 133 | 133 | ||
| 134 | pg_dir->pgd0 = (_PAGE_TABLE | __pa(pg_table)); | 134 | pg_dir->pgd0 = (_PAGE_TABLE | __pa(pg_table)); |
| 135 | pg_dir->pgd1 = (_PAGE_TABLE | (__pa(pg_table)+1024)); | 135 | pg_dir->pgd1 = (_PAGE_TABLE | (__pa(pg_table)+1024)); |
| @@ -219,7 +219,7 @@ void __init paging_init(void) | |||
| 219 | continue; | 219 | continue; |
| 220 | } | 220 | } |
| 221 | 221 | ||
| 222 | pm_dir = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE*4); | 222 | pm_dir = (pmd_t *) alloc_bootmem_pages(PAGE_SIZE * 4); |
| 223 | pgd_populate(&init_mm, pg_dir, pm_dir); | 223 | pgd_populate(&init_mm, pg_dir, pm_dir); |
| 224 | 224 | ||
| 225 | for (j = 0 ; j < PTRS_PER_PMD ; j++,pm_dir++) { | 225 | for (j = 0 ; j < PTRS_PER_PMD ; j++,pm_dir++) { |
| @@ -228,7 +228,7 @@ void __init paging_init(void) | |||
| 228 | continue; | 228 | continue; |
| 229 | } | 229 | } |
| 230 | 230 | ||
| 231 | pt_dir = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); | 231 | pt_dir = (pte_t *) alloc_bootmem_pages(PAGE_SIZE); |
| 232 | pmd_populate_kernel(&init_mm, pm_dir, pt_dir); | 232 | pmd_populate_kernel(&init_mm, pm_dir, pt_dir); |
| 233 | 233 | ||
| 234 | for (k = 0 ; k < PTRS_PER_PTE ; k++,pt_dir++) { | 234 | for (k = 0 ; k < PTRS_PER_PTE ; k++,pt_dir++) { |
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c index 4e9938dee060..14052f089814 100644 --- a/arch/x86_64/kernel/traps.c +++ b/arch/x86_64/kernel/traps.c | |||
| @@ -529,7 +529,7 @@ void __kprobes oops_end(unsigned long flags) | |||
| 529 | /* Nest count reaches zero, release the lock. */ | 529 | /* Nest count reaches zero, release the lock. */ |
| 530 | spin_unlock_irqrestore(&die_lock, flags); | 530 | spin_unlock_irqrestore(&die_lock, flags); |
| 531 | if (panic_on_oops) | 531 | if (panic_on_oops) |
| 532 | panic("Fatal exception: panic_on_oops"); | 532 | panic("Fatal exception"); |
| 533 | } | 533 | } |
| 534 | 534 | ||
| 535 | void __kprobes __die(const char * str, struct pt_regs * regs, long err) | 535 | void __kprobes __die(const char * str, struct pt_regs * regs, long err) |
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c index 9734960a2451..ce077d6bf3a0 100644 --- a/arch/xtensa/kernel/traps.c +++ b/arch/xtensa/kernel/traps.c | |||
| @@ -488,7 +488,7 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
| 488 | panic("Fatal exception in interrupt"); | 488 | panic("Fatal exception in interrupt"); |
| 489 | 489 | ||
| 490 | if (panic_on_oops) | 490 | if (panic_on_oops) |
| 491 | panic("Fatal exception: panic_on_oops"); | 491 | panic("Fatal exception"); |
| 492 | 492 | ||
| 493 | do_exit(err); | 493 | do_exit(err); |
| 494 | } | 494 | } |
diff --git a/drivers/char/watchdog/Kconfig b/drivers/char/watchdog/Kconfig index d53f664a4dd8..fff89c2d88fd 100644 --- a/drivers/char/watchdog/Kconfig +++ b/drivers/char/watchdog/Kconfig | |||
| @@ -45,7 +45,7 @@ config WATCHDOG_NOWAYOUT | |||
| 45 | comment "Watchdog Device Drivers" | 45 | comment "Watchdog Device Drivers" |
| 46 | depends on WATCHDOG | 46 | depends on WATCHDOG |
| 47 | 47 | ||
| 48 | # Architecture Independant | 48 | # Architecture Independent |
| 49 | 49 | ||
| 50 | config SOFT_WATCHDOG | 50 | config SOFT_WATCHDOG |
| 51 | tristate "Software watchdog" | 51 | tristate "Software watchdog" |
| @@ -127,7 +127,7 @@ config S3C2410_WATCHDOG | |||
| 127 | enabled. | 127 | enabled. |
| 128 | 128 | ||
| 129 | The driver is limited by the speed of the system's PCLK | 129 | The driver is limited by the speed of the system's PCLK |
| 130 | signal, so with reasonbaly fast systems (PCLK around 50-66MHz) | 130 | signal, so with reasonably fast systems (PCLK around 50-66MHz) |
| 131 | then watchdog intervals of over approximately 20seconds are | 131 | then watchdog intervals of over approximately 20seconds are |
| 132 | unavailable. | 132 | unavailable. |
| 133 | 133 | ||
| @@ -423,7 +423,7 @@ config SBC_EPX_C3_WATCHDOG | |||
| 423 | is no way to know if writing to its IO address will corrupt | 423 | is no way to know if writing to its IO address will corrupt |
| 424 | your system or have any real effect. The only way to be sure | 424 | your system or have any real effect. The only way to be sure |
| 425 | that this driver does what you want is to make sure you | 425 | that this driver does what you want is to make sure you |
| 426 | are runnning it on an EPX-C3 from Winsystems with the watchdog | 426 | are running it on an EPX-C3 from Winsystems with the watchdog |
| 427 | timer at IO address 0x1ee and 0x1ef. It will write to both those | 427 | timer at IO address 0x1ee and 0x1ef. It will write to both those |
| 428 | IO ports. Basically, the assumption is made that if you compile | 428 | IO ports. Basically, the assumption is made that if you compile |
| 429 | this driver into your kernel and/or load it as a module, that you | 429 | this driver into your kernel and/or load it as a module, that you |
| @@ -472,7 +472,7 @@ config INDYDOG | |||
| 472 | tristate "Indy/I2 Hardware Watchdog" | 472 | tristate "Indy/I2 Hardware Watchdog" |
| 473 | depends on WATCHDOG && SGI_IP22 | 473 | depends on WATCHDOG && SGI_IP22 |
| 474 | help | 474 | help |
| 475 | Hardwaredriver for the Indy's/I2's watchdog. This is a | 475 | Hardware driver for the Indy's/I2's watchdog. This is a |
| 476 | watchdog timer that will reboot the machine after a 60 second | 476 | watchdog timer that will reboot the machine after a 60 second |
| 477 | timer expired and no process has written to /dev/watchdog during | 477 | timer expired and no process has written to /dev/watchdog during |
| 478 | that time. | 478 | that time. |
diff --git a/drivers/ide/pci/generic.c b/drivers/ide/pci/generic.c index 2f962cfa3f7f..78810ba982e9 100644 --- a/drivers/ide/pci/generic.c +++ b/drivers/ide/pci/generic.c | |||
| @@ -180,6 +180,36 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = { | |||
| 180 | .channels = 2, | 180 | .channels = 2, |
| 181 | .autodma = AUTODMA, | 181 | .autodma = AUTODMA, |
| 182 | .bootable = OFF_BOARD, | 182 | .bootable = OFF_BOARD, |
| 183 | },{ /* 15 */ | ||
| 184 | .name = "JMB361", | ||
| 185 | .init_hwif = init_hwif_generic, | ||
| 186 | .channels = 2, | ||
| 187 | .autodma = AUTODMA, | ||
| 188 | .bootable = OFF_BOARD, | ||
| 189 | },{ /* 16 */ | ||
| 190 | .name = "JMB363", | ||
| 191 | .init_hwif = init_hwif_generic, | ||
| 192 | .channels = 2, | ||
| 193 | .autodma = AUTODMA, | ||
| 194 | .bootable = OFF_BOARD, | ||
| 195 | },{ /* 17 */ | ||
| 196 | .name = "JMB365", | ||
| 197 | .init_hwif = init_hwif_generic, | ||
| 198 | .channels = 2, | ||
| 199 | .autodma = AUTODMA, | ||
| 200 | .bootable = OFF_BOARD, | ||
| 201 | },{ /* 18 */ | ||
| 202 | .name = "JMB366", | ||
| 203 | .init_hwif = init_hwif_generic, | ||
| 204 | .channels = 2, | ||
| 205 | .autodma = AUTODMA, | ||
| 206 | .bootable = OFF_BOARD, | ||
| 207 | },{ /* 19 */ | ||
| 208 | .name = "JMB368", | ||
| 209 | .init_hwif = init_hwif_generic, | ||
| 210 | .channels = 2, | ||
| 211 | .autodma = AUTODMA, | ||
| 212 | .bootable = OFF_BOARD, | ||
| 183 | } | 213 | } |
| 184 | }; | 214 | }; |
| 185 | 215 | ||
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 217615b33223..93f701ea87bc 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
| @@ -710,6 +710,8 @@ static int multipath_ctr(struct dm_target *ti, unsigned int argc, | |||
| 710 | return -EINVAL; | 710 | return -EINVAL; |
| 711 | } | 711 | } |
| 712 | 712 | ||
| 713 | m->ti = ti; | ||
| 714 | |||
| 713 | r = parse_features(&as, m, ti); | 715 | r = parse_features(&as, m, ti); |
| 714 | if (r) | 716 | if (r) |
| 715 | goto bad; | 717 | goto bad; |
| @@ -751,7 +753,6 @@ static int multipath_ctr(struct dm_target *ti, unsigned int argc, | |||
| 751 | } | 753 | } |
| 752 | 754 | ||
| 753 | ti->private = m; | 755 | ti->private = m; |
| 754 | m->ti = ti; | ||
| 755 | 756 | ||
| 756 | return 0; | 757 | return 0; |
| 757 | 758 | ||
diff --git a/drivers/media/dvb/bt8xx/dst.c b/drivers/media/dvb/bt8xx/dst.c index d687a14ec0a7..06ac899a9a26 100644 --- a/drivers/media/dvb/bt8xx/dst.c +++ b/drivers/media/dvb/bt8xx/dst.c | |||
| @@ -393,7 +393,7 @@ static int dst_set_bandwidth(struct dst_state *state, fe_bandwidth_t bandwidth) | |||
| 393 | state->bandwidth = bandwidth; | 393 | state->bandwidth = bandwidth; |
| 394 | 394 | ||
| 395 | if (state->dst_type != DST_TYPE_IS_TERR) | 395 | if (state->dst_type != DST_TYPE_IS_TERR) |
| 396 | return 0; | 396 | return -EOPNOTSUPP; |
| 397 | 397 | ||
| 398 | switch (bandwidth) { | 398 | switch (bandwidth) { |
| 399 | case BANDWIDTH_6_MHZ: | 399 | case BANDWIDTH_6_MHZ: |
| @@ -462,7 +462,7 @@ static int dst_set_symbolrate(struct dst_state *state, u32 srate) | |||
| 462 | 462 | ||
| 463 | state->symbol_rate = srate; | 463 | state->symbol_rate = srate; |
| 464 | if (state->dst_type == DST_TYPE_IS_TERR) { | 464 | if (state->dst_type == DST_TYPE_IS_TERR) { |
| 465 | return 0; | 465 | return -EOPNOTSUPP; |
| 466 | } | 466 | } |
| 467 | dprintk(verbose, DST_INFO, 1, "set symrate %u", srate); | 467 | dprintk(verbose, DST_INFO, 1, "set symrate %u", srate); |
| 468 | srate /= 1000; | 468 | srate /= 1000; |
| @@ -504,7 +504,7 @@ static int dst_set_symbolrate(struct dst_state *state, u32 srate) | |||
| 504 | static int dst_set_modulation(struct dst_state *state, fe_modulation_t modulation) | 504 | static int dst_set_modulation(struct dst_state *state, fe_modulation_t modulation) |
| 505 | { | 505 | { |
| 506 | if (state->dst_type != DST_TYPE_IS_CABLE) | 506 | if (state->dst_type != DST_TYPE_IS_CABLE) |
| 507 | return 0; | 507 | return -EOPNOTSUPP; |
| 508 | 508 | ||
| 509 | state->modulation = modulation; | 509 | state->modulation = modulation; |
| 510 | switch (modulation) { | 510 | switch (modulation) { |
| @@ -1234,7 +1234,7 @@ int dst_command(struct dst_state *state, u8 *data, u8 len) | |||
| 1234 | goto error; | 1234 | goto error; |
| 1235 | } | 1235 | } |
| 1236 | if (write_dst(state, data, len)) { | 1236 | if (write_dst(state, data, len)) { |
| 1237 | dprintk(verbose, DST_INFO, 1, "Tring to recover.. "); | 1237 | dprintk(verbose, DST_INFO, 1, "Trying to recover.. "); |
| 1238 | if ((dst_error_recovery(state)) < 0) { | 1238 | if ((dst_error_recovery(state)) < 0) { |
| 1239 | dprintk(verbose, DST_ERROR, 1, "Recovery Failed."); | 1239 | dprintk(verbose, DST_ERROR, 1, "Recovery Failed."); |
| 1240 | goto error; | 1240 | goto error; |
| @@ -1328,15 +1328,13 @@ static int dst_tone_power_cmd(struct dst_state *state) | |||
| 1328 | { | 1328 | { |
| 1329 | u8 paket[8] = { 0x00, 0x09, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00 }; | 1329 | u8 paket[8] = { 0x00, 0x09, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00 }; |
| 1330 | 1330 | ||
| 1331 | if (state->dst_type == DST_TYPE_IS_TERR) | 1331 | if (state->dst_type != DST_TYPE_IS_SAT) |
| 1332 | return 0; | 1332 | return -EOPNOTSUPP; |
| 1333 | paket[4] = state->tx_tuna[4]; | 1333 | paket[4] = state->tx_tuna[4]; |
| 1334 | paket[2] = state->tx_tuna[2]; | 1334 | paket[2] = state->tx_tuna[2]; |
| 1335 | paket[3] = state->tx_tuna[3]; | 1335 | paket[3] = state->tx_tuna[3]; |
| 1336 | paket[7] = dst_check_sum (paket, 7); | 1336 | paket[7] = dst_check_sum (paket, 7); |
| 1337 | dst_command(state, paket, 8); | 1337 | return dst_command(state, paket, 8); |
| 1338 | |||
| 1339 | return 0; | ||
| 1340 | } | 1338 | } |
| 1341 | 1339 | ||
| 1342 | static int dst_get_tuna(struct dst_state *state) | 1340 | static int dst_get_tuna(struct dst_state *state) |
| @@ -1465,7 +1463,7 @@ static int dst_set_diseqc(struct dvb_frontend *fe, struct dvb_diseqc_master_cmd | |||
| 1465 | u8 paket[8] = { 0x00, 0x08, 0x04, 0xe0, 0x10, 0x38, 0xf0, 0xec }; | 1463 | u8 paket[8] = { 0x00, 0x08, 0x04, 0xe0, 0x10, 0x38, 0xf0, 0xec }; |
| 1466 | 1464 | ||
| 1467 | if (state->dst_type != DST_TYPE_IS_SAT) | 1465 | if (state->dst_type != DST_TYPE_IS_SAT) |
| 1468 | return 0; | 1466 | return -EOPNOTSUPP; |
| 1469 | if (cmd->msg_len > 0 && cmd->msg_len < 5) | 1467 | if (cmd->msg_len > 0 && cmd->msg_len < 5) |
| 1470 | memcpy(&paket[3], cmd->msg, cmd->msg_len); | 1468 | memcpy(&paket[3], cmd->msg, cmd->msg_len); |
| 1471 | else if (cmd->msg_len == 5 && state->dst_hw_cap & DST_TYPE_HAS_DISEQC5) | 1469 | else if (cmd->msg_len == 5 && state->dst_hw_cap & DST_TYPE_HAS_DISEQC5) |
| @@ -1473,18 +1471,17 @@ static int dst_set_diseqc(struct dvb_frontend *fe, struct dvb_diseqc_master_cmd | |||
| 1473 | else | 1471 | else |
| 1474 | return -EINVAL; | 1472 | return -EINVAL; |
| 1475 | paket[7] = dst_check_sum(&paket[0], 7); | 1473 | paket[7] = dst_check_sum(&paket[0], 7); |
| 1476 | dst_command(state, paket, 8); | 1474 | return dst_command(state, paket, 8); |
| 1477 | return 0; | ||
| 1478 | } | 1475 | } |
| 1479 | 1476 | ||
| 1480 | static int dst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) | 1477 | static int dst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) |
| 1481 | { | 1478 | { |
| 1482 | int need_cmd; | 1479 | int need_cmd, retval = 0; |
| 1483 | struct dst_state *state = fe->demodulator_priv; | 1480 | struct dst_state *state = fe->demodulator_priv; |
| 1484 | 1481 | ||
| 1485 | state->voltage = voltage; | 1482 | state->voltage = voltage; |
| 1486 | if (state->dst_type != DST_TYPE_IS_SAT) | 1483 | if (state->dst_type != DST_TYPE_IS_SAT) |
| 1487 | return 0; | 1484 | return -EOPNOTSUPP; |
| 1488 | 1485 | ||
| 1489 | need_cmd = 0; | 1486 | need_cmd = 0; |
| 1490 | 1487 | ||
| @@ -1506,9 +1503,9 @@ static int dst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) | |||
| 1506 | } | 1503 | } |
| 1507 | 1504 | ||
| 1508 | if (need_cmd) | 1505 | if (need_cmd) |
| 1509 | dst_tone_power_cmd(state); | 1506 | retval = dst_tone_power_cmd(state); |
| 1510 | 1507 | ||
| 1511 | return 0; | 1508 | return retval; |
| 1512 | } | 1509 | } |
| 1513 | 1510 | ||
| 1514 | static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone) | 1511 | static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone) |
| @@ -1517,7 +1514,7 @@ static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone) | |||
| 1517 | 1514 | ||
| 1518 | state->tone = tone; | 1515 | state->tone = tone; |
| 1519 | if (state->dst_type != DST_TYPE_IS_SAT) | 1516 | if (state->dst_type != DST_TYPE_IS_SAT) |
| 1520 | return 0; | 1517 | return -EOPNOTSUPP; |
| 1521 | 1518 | ||
| 1522 | switch (tone) { | 1519 | switch (tone) { |
| 1523 | case SEC_TONE_OFF: | 1520 | case SEC_TONE_OFF: |
| @@ -1533,9 +1530,7 @@ static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone) | |||
| 1533 | default: | 1530 | default: |
| 1534 | return -EINVAL; | 1531 | return -EINVAL; |
| 1535 | } | 1532 | } |
| 1536 | dst_tone_power_cmd(state); | 1533 | return dst_tone_power_cmd(state); |
| 1537 | |||
| 1538 | return 0; | ||
| 1539 | } | 1534 | } |
| 1540 | 1535 | ||
| 1541 | static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd) | 1536 | static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd) |
| @@ -1543,7 +1538,7 @@ static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd) | |||
| 1543 | struct dst_state *state = fe->demodulator_priv; | 1538 | struct dst_state *state = fe->demodulator_priv; |
| 1544 | 1539 | ||
| 1545 | if (state->dst_type != DST_TYPE_IS_SAT) | 1540 | if (state->dst_type != DST_TYPE_IS_SAT) |
| 1546 | return 0; | 1541 | return -EOPNOTSUPP; |
| 1547 | state->minicmd = minicmd; | 1542 | state->minicmd = minicmd; |
| 1548 | switch (minicmd) { | 1543 | switch (minicmd) { |
| 1549 | case SEC_MINI_A: | 1544 | case SEC_MINI_A: |
| @@ -1553,9 +1548,7 @@ static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd) | |||
| 1553 | state->tx_tuna[3] = 0xff; | 1548 | state->tx_tuna[3] = 0xff; |
| 1554 | break; | 1549 | break; |
| 1555 | } | 1550 | } |
| 1556 | dst_tone_power_cmd(state); | 1551 | return dst_tone_power_cmd(state); |
| 1557 | |||
| 1558 | return 0; | ||
| 1559 | } | 1552 | } |
| 1560 | 1553 | ||
| 1561 | 1554 | ||
| @@ -1608,28 +1601,31 @@ static int dst_read_signal_strength(struct dvb_frontend *fe, u16 *strength) | |||
| 1608 | { | 1601 | { |
| 1609 | struct dst_state *state = fe->demodulator_priv; | 1602 | struct dst_state *state = fe->demodulator_priv; |
| 1610 | 1603 | ||
| 1611 | dst_get_signal(state); | 1604 | int retval = dst_get_signal(state); |
| 1612 | *strength = state->decode_strength; | 1605 | *strength = state->decode_strength; |
| 1613 | 1606 | ||
| 1614 | return 0; | 1607 | return retval; |
| 1615 | } | 1608 | } |
| 1616 | 1609 | ||
| 1617 | static int dst_read_snr(struct dvb_frontend *fe, u16 *snr) | 1610 | static int dst_read_snr(struct dvb_frontend *fe, u16 *snr) |
| 1618 | { | 1611 | { |
| 1619 | struct dst_state *state = fe->demodulator_priv; | 1612 | struct dst_state *state = fe->demodulator_priv; |
| 1620 | 1613 | ||
| 1621 | dst_get_signal(state); | 1614 | int retval = dst_get_signal(state); |
| 1622 | *snr = state->decode_snr; | 1615 | *snr = state->decode_snr; |
| 1623 | 1616 | ||
| 1624 | return 0; | 1617 | return retval; |
| 1625 | } | 1618 | } |
| 1626 | 1619 | ||
| 1627 | static int dst_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p) | 1620 | static int dst_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p) |
| 1628 | { | 1621 | { |
| 1622 | int retval = -EINVAL; | ||
| 1629 | struct dst_state *state = fe->demodulator_priv; | 1623 | struct dst_state *state = fe->demodulator_priv; |
| 1630 | 1624 | ||
| 1631 | if (p != NULL) { | 1625 | if (p != NULL) { |
| 1632 | dst_set_freq(state, p->frequency); | 1626 | retval = dst_set_freq(state, p->frequency); |
| 1627 | if(retval != 0) | ||
| 1628 | return retval; | ||
| 1633 | dprintk(verbose, DST_DEBUG, 1, "Set Frequency=[%d]", p->frequency); | 1629 | dprintk(verbose, DST_DEBUG, 1, "Set Frequency=[%d]", p->frequency); |
| 1634 | 1630 | ||
| 1635 | if (state->dst_type == DST_TYPE_IS_SAT) { | 1631 | if (state->dst_type == DST_TYPE_IS_SAT) { |
| @@ -1647,10 +1643,10 @@ static int dst_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_paramet | |||
| 1647 | dst_set_symbolrate(state, p->u.qam.symbol_rate); | 1643 | dst_set_symbolrate(state, p->u.qam.symbol_rate); |
| 1648 | dst_set_modulation(state, p->u.qam.modulation); | 1644 | dst_set_modulation(state, p->u.qam.modulation); |
| 1649 | } | 1645 | } |
| 1650 | dst_write_tuna(fe); | 1646 | retval = dst_write_tuna(fe); |
| 1651 | } | 1647 | } |
| 1652 | 1648 | ||
| 1653 | return 0; | 1649 | return retval; |
| 1654 | } | 1650 | } |
| 1655 | 1651 | ||
| 1656 | static int dst_tune_frontend(struct dvb_frontend* fe, | 1652 | static int dst_tune_frontend(struct dvb_frontend* fe, |
diff --git a/drivers/media/dvb/dvb-core/Makefile b/drivers/media/dvb/dvb-core/Makefile index 11054657fdb5..0b5182835cc8 100644 --- a/drivers/media/dvb/dvb-core/Makefile +++ b/drivers/media/dvb/dvb-core/Makefile | |||
| @@ -2,8 +2,8 @@ | |||
| 2 | # Makefile for the kernel DVB device drivers. | 2 | # Makefile for the kernel DVB device drivers. |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | dvb-core-objs = dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \ | 5 | dvb-core-objs := dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \ |
| 6 | dvb_ca_en50221.o dvb_frontend.o \ | 6 | dvb_ca_en50221.o dvb_frontend.o \ |
| 7 | dvb_net.o dvb_ringbuffer.o dvb_math.o | 7 | dvb_net.o dvb_ringbuffer.o dvb_math.o |
| 8 | 8 | ||
| 9 | obj-$(CONFIG_DVB_CORE) += dvb-core.o | 9 | obj-$(CONFIG_DVB_CORE) += dvb-core.o |
diff --git a/drivers/media/radio/Kconfig b/drivers/media/radio/Kconfig index de3128a31de8..220076b1b956 100644 --- a/drivers/media/radio/Kconfig +++ b/drivers/media/radio/Kconfig | |||
| @@ -350,5 +350,15 @@ config RADIO_ZOLTRIX_PORT | |||
| 350 | help | 350 | help |
| 351 | Enter the I/O port of your Zoltrix radio card. | 351 | Enter the I/O port of your Zoltrix radio card. |
| 352 | 352 | ||
| 353 | endmenu | 353 | config USB_DSBR |
| 354 | tristate "D-Link USB FM radio support (EXPERIMENTAL)" | ||
| 355 | depends on USB && VIDEO_V4L1 && EXPERIMENTAL | ||
| 356 | ---help--- | ||
| 357 | Say Y here if you want to connect this type of radio to your | ||
| 358 | computer's USB port. Note that the audio is not digital, and | ||
| 359 | you must connect the line out connector to a sound card or a | ||
| 360 | set of speakers. | ||
| 354 | 361 | ||
| 362 | To compile this driver as a module, choose M here: the | ||
| 363 | module will be called dsbr100. | ||
| 364 | endmenu | ||
diff --git a/drivers/media/radio/Makefile b/drivers/media/radio/Makefile index e95b6805e002..cf55a18e3ddf 100644 --- a/drivers/media/radio/Makefile +++ b/drivers/media/radio/Makefile | |||
| @@ -20,5 +20,6 @@ obj-$(CONFIG_RADIO_GEMTEK) += radio-gemtek.o | |||
| 20 | obj-$(CONFIG_RADIO_GEMTEK_PCI) += radio-gemtek-pci.o | 20 | obj-$(CONFIG_RADIO_GEMTEK_PCI) += radio-gemtek-pci.o |
| 21 | obj-$(CONFIG_RADIO_TRUST) += radio-trust.o | 21 | obj-$(CONFIG_RADIO_TRUST) += radio-trust.o |
| 22 | obj-$(CONFIG_RADIO_MAESTRO) += radio-maestro.o | 22 | obj-$(CONFIG_RADIO_MAESTRO) += radio-maestro.o |
| 23 | obj-$(CONFIG_USB_DSBR) += dsbr100.o | ||
| 23 | 24 | ||
| 24 | EXTRA_CFLAGS += -Isound | 25 | EXTRA_CFLAGS += -Isound |
diff --git a/drivers/media/video/dsbr100.c b/drivers/media/radio/dsbr100.c index f7e33f9ee8e9..f7e33f9ee8e9 100644 --- a/drivers/media/video/dsbr100.c +++ b/drivers/media/radio/dsbr100.c | |||
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index fe56862d51e4..732bf1e7c326 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig | |||
| @@ -449,18 +449,6 @@ source "drivers/media/video/pvrusb2/Kconfig" | |||
| 449 | 449 | ||
| 450 | source "drivers/media/video/em28xx/Kconfig" | 450 | source "drivers/media/video/em28xx/Kconfig" |
| 451 | 451 | ||
| 452 | config USB_DSBR | ||
| 453 | tristate "D-Link USB FM radio support (EXPERIMENTAL)" | ||
| 454 | depends on USB && VIDEO_V4L1 && EXPERIMENTAL | ||
| 455 | ---help--- | ||
| 456 | Say Y here if you want to connect this type of radio to your | ||
| 457 | computer's USB port. Note that the audio is not digital, and | ||
| 458 | you must connect the line out connector to a sound card or a | ||
| 459 | set of speakers. | ||
| 460 | |||
| 461 | To compile this driver as a module, choose M here: the | ||
| 462 | module will be called dsbr100. | ||
| 463 | |||
| 464 | source "drivers/media/video/usbvideo/Kconfig" | 452 | source "drivers/media/video/usbvideo/Kconfig" |
| 465 | 453 | ||
| 466 | source "drivers/media/video/et61x251/Kconfig" | 454 | source "drivers/media/video/et61x251/Kconfig" |
diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile index 353d61cfac1b..e82e511f2a72 100644 --- a/drivers/media/video/Makefile +++ b/drivers/media/video/Makefile | |||
| @@ -77,7 +77,6 @@ obj-$(CONFIG_VIDEO_UPD64083) += upd64083.o | |||
| 77 | obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o | 77 | obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o |
| 78 | 78 | ||
| 79 | obj-$(CONFIG_USB_DABUSB) += dabusb.o | 79 | obj-$(CONFIG_USB_DABUSB) += dabusb.o |
| 80 | obj-$(CONFIG_USB_DSBR) += dsbr100.o | ||
| 81 | obj-$(CONFIG_USB_OV511) += ov511.o | 80 | obj-$(CONFIG_USB_OV511) += ov511.o |
| 82 | obj-$(CONFIG_USB_SE401) += se401.o | 81 | obj-$(CONFIG_USB_SE401) += se401.o |
| 83 | obj-$(CONFIG_USB_STV680) += stv680.o | 82 | obj-$(CONFIG_USB_STV680) += stv680.o |
| @@ -91,6 +90,7 @@ obj-$(CONFIG_USB_ZC0301) += zc0301/ | |||
| 91 | obj-$(CONFIG_USB_IBMCAM) += usbvideo/ | 90 | obj-$(CONFIG_USB_IBMCAM) += usbvideo/ |
| 92 | obj-$(CONFIG_USB_KONICAWC) += usbvideo/ | 91 | obj-$(CONFIG_USB_KONICAWC) += usbvideo/ |
| 93 | obj-$(CONFIG_USB_VICAM) += usbvideo/ | 92 | obj-$(CONFIG_USB_VICAM) += usbvideo/ |
| 93 | obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/ | ||
| 94 | 94 | ||
| 95 | obj-$(CONFIG_VIDEO_VIVI) += vivi.o | 95 | obj-$(CONFIG_VIDEO_VIVI) += vivi.o |
| 96 | 96 | ||
diff --git a/drivers/media/video/compat_ioctl32.c b/drivers/media/video/compat_ioctl32.c index 9dddff42ec13..b69ee1194815 100644 --- a/drivers/media/video/compat_ioctl32.c +++ b/drivers/media/video/compat_ioctl32.c | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | #ifdef CONFIG_COMPAT | 22 | #ifdef CONFIG_COMPAT |
| 23 | 23 | ||
| 24 | 24 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | |
| 25 | struct video_tuner32 { | 25 | struct video_tuner32 { |
| 26 | compat_int_t tuner; | 26 | compat_int_t tuner; |
| 27 | char name[32]; | 27 | char name[32]; |
| @@ -107,6 +107,7 @@ struct video_window32 { | |||
| 107 | compat_caddr_t clips; | 107 | compat_caddr_t clips; |
| 108 | compat_int_t clipcount; | 108 | compat_int_t clipcount; |
| 109 | }; | 109 | }; |
| 110 | #endif | ||
| 110 | 111 | ||
| 111 | static int native_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | 112 | static int native_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 112 | { | 113 | { |
| @@ -124,6 +125,7 @@ static int native_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 124 | } | 125 | } |
| 125 | 126 | ||
| 126 | 127 | ||
| 128 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 127 | /* You get back everything except the clips... */ | 129 | /* You get back everything except the clips... */ |
| 128 | static int put_video_window32(struct video_window *kp, struct video_window32 __user *up) | 130 | static int put_video_window32(struct video_window *kp, struct video_window32 __user *up) |
| 129 | { | 131 | { |
| @@ -138,6 +140,7 @@ static int put_video_window32(struct video_window *kp, struct video_window32 __u | |||
| 138 | return -EFAULT; | 140 | return -EFAULT; |
| 139 | return 0; | 141 | return 0; |
| 140 | } | 142 | } |
| 143 | #endif | ||
| 141 | 144 | ||
| 142 | struct v4l2_clip32 | 145 | struct v4l2_clip32 |
| 143 | { | 146 | { |
| @@ -490,6 +493,7 @@ static inline int put_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user | |||
| 490 | return 0; | 493 | return 0; |
| 491 | } | 494 | } |
| 492 | 495 | ||
| 496 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 493 | struct video_code32 | 497 | struct video_code32 |
| 494 | { | 498 | { |
| 495 | char loadwhat[16]; /* name or tag of file being passed */ | 499 | char loadwhat[16]; /* name or tag of file being passed */ |
| @@ -517,6 +521,8 @@ static inline int microcode32(struct video_code *kp, struct video_code32 __user | |||
| 517 | #define VIDIOCSFREQ32 _IOW('v',15, u32) | 521 | #define VIDIOCSFREQ32 _IOW('v',15, u32) |
| 518 | #define VIDIOCSMICROCODE32 _IOW('v',27, struct video_code32) | 522 | #define VIDIOCSMICROCODE32 _IOW('v',27, struct video_code32) |
| 519 | 523 | ||
| 524 | #endif | ||
| 525 | |||
| 520 | /* VIDIOC_ENUMINPUT32 is VIDIOC_ENUMINPUT minus 4 bytes of padding alignement */ | 526 | /* VIDIOC_ENUMINPUT32 is VIDIOC_ENUMINPUT minus 4 bytes of padding alignement */ |
| 521 | #define VIDIOC_ENUMINPUT32 VIDIOC_ENUMINPUT - _IOC(0, 0, 0, 4) | 527 | #define VIDIOC_ENUMINPUT32 VIDIOC_ENUMINPUT - _IOC(0, 0, 0, 4) |
| 522 | #define VIDIOC_G_FMT32 _IOWR ('V', 4, struct v4l2_format32) | 528 | #define VIDIOC_G_FMT32 _IOWR ('V', 4, struct v4l2_format32) |
| @@ -537,6 +543,7 @@ static inline int microcode32(struct video_code *kp, struct video_code32 __user | |||
| 537 | #define VIDIOC_S_INPUT32 _IOWR ('V', 39, compat_int_t) | 543 | #define VIDIOC_S_INPUT32 _IOWR ('V', 39, compat_int_t) |
| 538 | #define VIDIOC_TRY_FMT32 _IOWR ('V', 64, struct v4l2_format32) | 544 | #define VIDIOC_TRY_FMT32 _IOWR ('V', 64, struct v4l2_format32) |
| 539 | 545 | ||
| 546 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 540 | enum { | 547 | enum { |
| 541 | MaxClips = (~0U-sizeof(struct video_window))/sizeof(struct video_clip) | 548 | MaxClips = (~0U-sizeof(struct video_window))/sizeof(struct video_clip) |
| 542 | }; | 549 | }; |
| @@ -601,14 +608,17 @@ static int do_set_window(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 601 | 608 | ||
| 602 | return native_ioctl(file, VIDIOCSWIN, (unsigned long)vw); | 609 | return native_ioctl(file, VIDIOCSWIN, (unsigned long)vw); |
| 603 | } | 610 | } |
| 611 | #endif | ||
| 604 | 612 | ||
| 605 | static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | 613 | static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 606 | { | 614 | { |
| 607 | union { | 615 | union { |
| 616 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 608 | struct video_tuner vt; | 617 | struct video_tuner vt; |
| 609 | struct video_buffer vb; | 618 | struct video_buffer vb; |
| 610 | struct video_window vw; | 619 | struct video_window vw; |
| 611 | struct video_code vc; | 620 | struct video_code vc; |
| 621 | #endif | ||
| 612 | struct v4l2_format v2f; | 622 | struct v4l2_format v2f; |
| 613 | struct v4l2_buffer v2b; | 623 | struct v4l2_buffer v2b; |
| 614 | struct v4l2_framebuffer v2fb; | 624 | struct v4l2_framebuffer v2fb; |
| @@ -624,6 +634,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 624 | 634 | ||
| 625 | /* First, convert the command. */ | 635 | /* First, convert the command. */ |
| 626 | switch(cmd) { | 636 | switch(cmd) { |
| 637 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 627 | case VIDIOCGTUNER32: cmd = VIDIOCGTUNER; break; | 638 | case VIDIOCGTUNER32: cmd = VIDIOCGTUNER; break; |
| 628 | case VIDIOCSTUNER32: cmd = VIDIOCSTUNER; break; | 639 | case VIDIOCSTUNER32: cmd = VIDIOCSTUNER; break; |
| 629 | case VIDIOCGWIN32: cmd = VIDIOCGWIN; break; | 640 | case VIDIOCGWIN32: cmd = VIDIOCGWIN; break; |
| @@ -631,6 +642,8 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 631 | case VIDIOCSFBUF32: cmd = VIDIOCSFBUF; break; | 642 | case VIDIOCSFBUF32: cmd = VIDIOCSFBUF; break; |
| 632 | case VIDIOCGFREQ32: cmd = VIDIOCGFREQ; break; | 643 | case VIDIOCGFREQ32: cmd = VIDIOCGFREQ; break; |
| 633 | case VIDIOCSFREQ32: cmd = VIDIOCSFREQ; break; | 644 | case VIDIOCSFREQ32: cmd = VIDIOCSFREQ; break; |
| 645 | case VIDIOCSMICROCODE32: cmd = VIDIOCSMICROCODE; break; | ||
| 646 | #endif | ||
| 634 | case VIDIOC_G_FMT32: cmd = VIDIOC_G_FMT; break; | 647 | case VIDIOC_G_FMT32: cmd = VIDIOC_G_FMT; break; |
| 635 | case VIDIOC_S_FMT32: cmd = VIDIOC_S_FMT; break; | 648 | case VIDIOC_S_FMT32: cmd = VIDIOC_S_FMT; break; |
| 636 | case VIDIOC_QUERYBUF32: cmd = VIDIOC_QUERYBUF; break; | 649 | case VIDIOC_QUERYBUF32: cmd = VIDIOC_QUERYBUF; break; |
| @@ -647,10 +660,10 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 647 | case VIDIOC_G_INPUT32: cmd = VIDIOC_G_INPUT; break; | 660 | case VIDIOC_G_INPUT32: cmd = VIDIOC_G_INPUT; break; |
| 648 | case VIDIOC_S_INPUT32: cmd = VIDIOC_S_INPUT; break; | 661 | case VIDIOC_S_INPUT32: cmd = VIDIOC_S_INPUT; break; |
| 649 | case VIDIOC_TRY_FMT32: cmd = VIDIOC_TRY_FMT; break; | 662 | case VIDIOC_TRY_FMT32: cmd = VIDIOC_TRY_FMT; break; |
| 650 | case VIDIOCSMICROCODE32: cmd = VIDIOCSMICROCODE; break; | ||
| 651 | }; | 663 | }; |
| 652 | 664 | ||
| 653 | switch(cmd) { | 665 | switch(cmd) { |
| 666 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 654 | case VIDIOCSTUNER: | 667 | case VIDIOCSTUNER: |
| 655 | case VIDIOCGTUNER: | 668 | case VIDIOCGTUNER: |
| 656 | err = get_video_tuner32(&karg.vt, up); | 669 | err = get_video_tuner32(&karg.vt, up); |
| @@ -664,6 +677,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 664 | break; | 677 | break; |
| 665 | 678 | ||
| 666 | case VIDIOCSFREQ: | 679 | case VIDIOCSFREQ: |
| 680 | #endif | ||
| 667 | case VIDIOC_S_INPUT: | 681 | case VIDIOC_S_INPUT: |
| 668 | case VIDIOC_OVERLAY: | 682 | case VIDIOC_OVERLAY: |
| 669 | case VIDIOC_STREAMON: | 683 | case VIDIOC_STREAMON: |
| @@ -717,18 +731,21 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 717 | compatible_arg = 0; | 731 | compatible_arg = 0; |
| 718 | break; | 732 | break; |
| 719 | 733 | ||
| 734 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 720 | case VIDIOCGWIN: | 735 | case VIDIOCGWIN: |
| 721 | case VIDIOCGFBUF: | 736 | case VIDIOCGFBUF: |
| 722 | case VIDIOCGFREQ: | 737 | case VIDIOCGFREQ: |
| 738 | #endif | ||
| 723 | case VIDIOC_G_FBUF: | 739 | case VIDIOC_G_FBUF: |
| 724 | case VIDIOC_G_INPUT: | 740 | case VIDIOC_G_INPUT: |
| 725 | compatible_arg = 0; | 741 | compatible_arg = 0; |
| 742 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 726 | case VIDIOCSMICROCODE: | 743 | case VIDIOCSMICROCODE: |
| 727 | err = microcode32(&karg.vc, up); | 744 | err = microcode32(&karg.vc, up); |
| 728 | compatible_arg = 0; | 745 | compatible_arg = 0; |
| 729 | break; | 746 | break; |
| 747 | #endif | ||
| 730 | }; | 748 | }; |
| 731 | |||
| 732 | if(err) | 749 | if(err) |
| 733 | goto out; | 750 | goto out; |
| 734 | 751 | ||
| @@ -743,6 +760,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 743 | } | 760 | } |
| 744 | if(err == 0) { | 761 | if(err == 0) { |
| 745 | switch(cmd) { | 762 | switch(cmd) { |
| 763 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 746 | case VIDIOCGTUNER: | 764 | case VIDIOCGTUNER: |
| 747 | err = put_video_tuner32(&karg.vt, up); | 765 | err = put_video_tuner32(&karg.vt, up); |
| 748 | break; | 766 | break; |
| @@ -754,7 +772,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 754 | case VIDIOCGFBUF: | 772 | case VIDIOCGFBUF: |
| 755 | err = put_video_buffer32(&karg.vb, up); | 773 | err = put_video_buffer32(&karg.vb, up); |
| 756 | break; | 774 | break; |
| 757 | 775 | #endif | |
| 758 | case VIDIOC_G_FBUF: | 776 | case VIDIOC_G_FBUF: |
| 759 | err = put_v4l2_framebuffer32(&karg.v2fb, up); | 777 | err = put_v4l2_framebuffer32(&karg.v2fb, up); |
| 760 | break; | 778 | break; |
| @@ -792,7 +810,9 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 792 | err = put_v4l2_input32(&karg.v2i, up); | 810 | err = put_v4l2_input32(&karg.v2i, up); |
| 793 | break; | 811 | break; |
| 794 | 812 | ||
| 813 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 795 | case VIDIOCGFREQ: | 814 | case VIDIOCGFREQ: |
| 815 | #endif | ||
| 796 | case VIDIOC_G_INPUT: | 816 | case VIDIOC_G_INPUT: |
| 797 | err = put_user(((u32)karg.vx), (u32 __user *)up); | 817 | err = put_user(((u32)karg.vx), (u32 __user *)up); |
| 798 | break; | 818 | break; |
| @@ -810,6 +830,7 @@ long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 810 | return ret; | 830 | return ret; |
| 811 | 831 | ||
| 812 | switch (cmd) { | 832 | switch (cmd) { |
| 833 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 813 | case VIDIOCSWIN32: | 834 | case VIDIOCSWIN32: |
| 814 | ret = do_set_window(file, cmd, arg); | 835 | ret = do_set_window(file, cmd, arg); |
| 815 | break; | 836 | break; |
| @@ -820,6 +841,7 @@ long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 820 | case VIDIOCSFBUF32: | 841 | case VIDIOCSFBUF32: |
| 821 | case VIDIOCGFREQ32: | 842 | case VIDIOCGFREQ32: |
| 822 | case VIDIOCSFREQ32: | 843 | case VIDIOCSFREQ32: |
| 844 | #endif | ||
| 823 | case VIDIOC_QUERYCAP: | 845 | case VIDIOC_QUERYCAP: |
| 824 | case VIDIOC_ENUM_FMT: | 846 | case VIDIOC_ENUM_FMT: |
| 825 | case VIDIOC_G_FMT32: | 847 | case VIDIOC_G_FMT32: |
| @@ -851,6 +873,7 @@ long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 851 | ret = do_video_ioctl(file, cmd, arg); | 873 | ret = do_video_ioctl(file, cmd, arg); |
| 852 | break; | 874 | break; |
| 853 | 875 | ||
| 876 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 854 | /* Little v, the video4linux ioctls (conflict?) */ | 877 | /* Little v, the video4linux ioctls (conflict?) */ |
| 855 | case VIDIOCGCAP: | 878 | case VIDIOCGCAP: |
| 856 | case VIDIOCGCHAN: | 879 | case VIDIOCGCHAN: |
| @@ -879,6 +902,7 @@ long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 879 | case _IOR('v' , BASE_VIDIOCPRIVATE+7, int): | 902 | case _IOR('v' , BASE_VIDIOCPRIVATE+7, int): |
| 880 | ret = native_ioctl(file, cmd, (unsigned long)compat_ptr(arg)); | 903 | ret = native_ioctl(file, cmd, (unsigned long)compat_ptr(arg)); |
| 881 | break; | 904 | break; |
| 905 | #endif | ||
| 882 | default: | 906 | default: |
| 883 | v4l_print_ioctl("compat_ioctl32", cmd); | 907 | v4l_print_ioctl("compat_ioctl32", cmd); |
| 884 | } | 908 | } |
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c index 5c2036b40ea1..7bb7589a07c3 100644 --- a/drivers/media/video/cx25840/cx25840-core.c +++ b/drivers/media/video/cx25840/cx25840-core.c | |||
| @@ -104,8 +104,8 @@ u32 cx25840_read4(struct i2c_client * client, u16 addr) | |||
| 104 | if (i2c_master_recv(client, buffer, 4) < 4) | 104 | if (i2c_master_recv(client, buffer, 4) < 4) |
| 105 | return 0; | 105 | return 0; |
| 106 | 106 | ||
| 107 | return (buffer[0] << 24) | (buffer[1] << 16) | | 107 | return (buffer[3] << 24) | (buffer[2] << 16) | |
| 108 | (buffer[2] << 8) | buffer[3]; | 108 | (buffer[1] << 8) | buffer[0]; |
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask, | 111 | int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask, |
diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c index 547cdbdb644d..94c92bacc342 100644 --- a/drivers/media/video/cx88/cx88-video.c +++ b/drivers/media/video/cx88/cx88-video.c | |||
| @@ -1225,7 +1225,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file, | |||
| 1225 | struct v4l2_format *f = arg; | 1225 | struct v4l2_format *f = arg; |
| 1226 | return cx8800_try_fmt(dev,fh,f); | 1226 | return cx8800_try_fmt(dev,fh,f); |
| 1227 | } | 1227 | } |
| 1228 | #ifdef CONFIG_V4L1_COMPAT | 1228 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 1229 | /* --- streaming capture ------------------------------------- */ | 1229 | /* --- streaming capture ------------------------------------- */ |
| 1230 | case VIDIOCGMBUF: | 1230 | case VIDIOCGMBUF: |
| 1231 | { | 1231 | { |
| @@ -1584,7 +1584,7 @@ static int radio_do_ioctl(struct inode *inode, struct file *file, | |||
| 1584 | *id = 0; | 1584 | *id = 0; |
| 1585 | return 0; | 1585 | return 0; |
| 1586 | } | 1586 | } |
| 1587 | #ifdef CONFIG_V4L1_COMPAT | 1587 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 1588 | case VIDIOCSTUNER: | 1588 | case VIDIOCSTUNER: |
| 1589 | { | 1589 | { |
| 1590 | struct video_tuner *v = arg; | 1590 | struct video_tuner *v = arg; |
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c index f2fd9195b3ac..ed02ff811388 100644 --- a/drivers/media/video/msp3400-kthreads.c +++ b/drivers/media/video/msp3400-kthreads.c | |||
| @@ -961,10 +961,10 @@ int msp34xxg_thread(void *data) | |||
| 961 | /* setup the chip*/ | 961 | /* setup the chip*/ |
| 962 | msp34xxg_reset(client); | 962 | msp34xxg_reset(client); |
| 963 | state->std = state->radio ? 0x40 : msp_standard; | 963 | state->std = state->radio ? 0x40 : msp_standard; |
| 964 | if (state->std != 1) | ||
| 965 | goto unmute; | ||
| 966 | /* start autodetect */ | 964 | /* start autodetect */ |
| 967 | msp_write_dem(client, 0x20, state->std); | 965 | msp_write_dem(client, 0x20, state->std); |
| 966 | if (state->std != 1) | ||
| 967 | goto unmute; | ||
| 968 | 968 | ||
| 969 | /* watch autodetect */ | 969 | /* watch autodetect */ |
| 970 | v4l_dbg(1, msp_debug, client, "started autodetect, waiting for result\n"); | 970 | v4l_dbg(1, msp_debug, client, "started autodetect, waiting for result\n"); |
diff --git a/drivers/media/video/pwc/Kconfig b/drivers/media/video/pwc/Kconfig index 697145e0bf15..8fdf7101d3bf 100644 --- a/drivers/media/video/pwc/Kconfig +++ b/drivers/media/video/pwc/Kconfig | |||
| @@ -30,7 +30,7 @@ config USB_PWC | |||
| 30 | 30 | ||
| 31 | config USB_PWC_DEBUG | 31 | config USB_PWC_DEBUG |
| 32 | bool "USB Philips Cameras verbose debug" | 32 | bool "USB Philips Cameras verbose debug" |
| 33 | depends USB_PWC | 33 | depends on USB_PWC |
| 34 | help | 34 | help |
| 35 | Say Y here in order to have the pwc driver generate verbose debugging | 35 | Say Y here in order to have the pwc driver generate verbose debugging |
| 36 | messages. | 36 | messages. |
diff --git a/drivers/media/video/pwc/pwc-if.c b/drivers/media/video/pwc/pwc-if.c index 47d0d83a0264..d4703944df9c 100644 --- a/drivers/media/video/pwc/pwc-if.c +++ b/drivers/media/video/pwc/pwc-if.c | |||
| @@ -160,6 +160,7 @@ static struct file_operations pwc_fops = { | |||
| 160 | .poll = pwc_video_poll, | 160 | .poll = pwc_video_poll, |
| 161 | .mmap = pwc_video_mmap, | 161 | .mmap = pwc_video_mmap, |
| 162 | .ioctl = pwc_video_ioctl, | 162 | .ioctl = pwc_video_ioctl, |
| 163 | .compat_ioctl = v4l_compat_ioctl32, | ||
| 163 | .llseek = no_llseek, | 164 | .llseek = no_llseek, |
| 164 | }; | 165 | }; |
| 165 | static struct video_device pwc_template = { | 166 | static struct video_device pwc_template = { |
diff --git a/drivers/media/video/saa7134/saa7134-video.c b/drivers/media/video/saa7134/saa7134-video.c index 8656f2400e18..2c171af9a9f2 100644 --- a/drivers/media/video/saa7134/saa7134-video.c +++ b/drivers/media/video/saa7134/saa7134-video.c | |||
| @@ -2087,7 +2087,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file, | |||
| 2087 | struct v4l2_format *f = arg; | 2087 | struct v4l2_format *f = arg; |
| 2088 | return saa7134_try_fmt(dev,fh,f); | 2088 | return saa7134_try_fmt(dev,fh,f); |
| 2089 | } | 2089 | } |
| 2090 | #ifdef CONFIG_V4L1_COMPAT | 2090 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 2091 | case VIDIOCGMBUF: | 2091 | case VIDIOCGMBUF: |
| 2092 | { | 2092 | { |
| 2093 | struct video_mbuf *mbuf = arg; | 2093 | struct video_mbuf *mbuf = arg; |
diff --git a/drivers/media/video/tuner-types.c b/drivers/media/video/tuner-types.c index a167e17c6dcd..d7eadc2c298d 100644 --- a/drivers/media/video/tuner-types.c +++ b/drivers/media/video/tuner-types.c | |||
| @@ -1027,10 +1027,11 @@ static struct tuner_params tuner_tnf_5335mf_params[] = { | |||
| 1027 | /* 70-79 */ | 1027 | /* 70-79 */ |
| 1028 | /* ------------ TUNER_SAMSUNG_TCPN_2121P30A - Samsung NTSC ------------ */ | 1028 | /* ------------ TUNER_SAMSUNG_TCPN_2121P30A - Samsung NTSC ------------ */ |
| 1029 | 1029 | ||
| 1030 | /* '+ 4' turns on the Low Noise Amplifier */ | ||
| 1030 | static struct tuner_range tuner_samsung_tcpn_2121p30a_ntsc_ranges[] = { | 1031 | static struct tuner_range tuner_samsung_tcpn_2121p30a_ntsc_ranges[] = { |
| 1031 | { 16 * 130.00 /*MHz*/, 0xce, 0x01, }, | 1032 | { 16 * 130.00 /*MHz*/, 0xce, 0x01 + 4, }, |
| 1032 | { 16 * 364.50 /*MHz*/, 0xce, 0x02, }, | 1033 | { 16 * 364.50 /*MHz*/, 0xce, 0x02 + 4, }, |
| 1033 | { 16 * 999.99 , 0xce, 0x08, }, | 1034 | { 16 * 999.99 , 0xce, 0x08 + 4, }, |
| 1034 | }; | 1035 | }; |
| 1035 | 1036 | ||
| 1036 | static struct tuner_params tuner_samsung_tcpn_2121p30a_params[] = { | 1037 | static struct tuner_params tuner_samsung_tcpn_2121p30a_params[] = { |
| @@ -1060,10 +1061,11 @@ static struct tuner_params tuner_thomson_fe6600_params[] = { | |||
| 1060 | 1061 | ||
| 1061 | /* ------------ TUNER_SAMSUNG_TCPG_6121P30A - Samsung PAL ------------ */ | 1062 | /* ------------ TUNER_SAMSUNG_TCPG_6121P30A - Samsung PAL ------------ */ |
| 1062 | 1063 | ||
| 1064 | /* '+ 4' turns on the Low Noise Amplifier */ | ||
| 1063 | static struct tuner_range tuner_samsung_tcpg_6121p30a_pal_ranges[] = { | 1065 | static struct tuner_range tuner_samsung_tcpg_6121p30a_pal_ranges[] = { |
| 1064 | { 16 * 146.25 /*MHz*/, 0xce, 0x01, }, | 1066 | { 16 * 146.25 /*MHz*/, 0xce, 0x01 + 4, }, |
| 1065 | { 16 * 428.50 /*MHz*/, 0xce, 0x02, }, | 1067 | { 16 * 428.50 /*MHz*/, 0xce, 0x02 + 4, }, |
| 1066 | { 16 * 999.99 , 0xce, 0x08, }, | 1068 | { 16 * 999.99 , 0xce, 0x08 + 4, }, |
| 1067 | }; | 1069 | }; |
| 1068 | 1070 | ||
| 1069 | static struct tuner_params tuner_samsung_tcpg_6121p30a_params[] = { | 1071 | static struct tuner_params tuner_samsung_tcpg_6121p30a_params[] = { |
diff --git a/drivers/media/video/v4l1-compat.c b/drivers/media/video/v4l1-compat.c index d83a2c84d233..d7c3fcbc80f7 100644 --- a/drivers/media/video/v4l1-compat.c +++ b/drivers/media/video/v4l1-compat.c | |||
| @@ -599,6 +599,10 @@ v4l_compat_translate_ioctl(struct inode *inode, | |||
| 599 | dprintk("VIDIOCGPICT / VIDIOC_G_FMT: %d\n",err); | 599 | dprintk("VIDIOCGPICT / VIDIOC_G_FMT: %d\n",err); |
| 600 | break; | 600 | break; |
| 601 | } | 601 | } |
| 602 | |||
| 603 | pict->depth = ((fmt2->fmt.pix.bytesperline<<3) | ||
| 604 | + (fmt2->fmt.pix.width-1) ) | ||
| 605 | /fmt2->fmt.pix.width; | ||
| 602 | pict->palette = pixelformat_to_palette( | 606 | pict->palette = pixelformat_to_palette( |
| 603 | fmt2->fmt.pix.pixelformat); | 607 | fmt2->fmt.pix.pixelformat); |
| 604 | break; | 608 | break; |
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c index 2ecbeffb559e..8d972ffdaf98 100644 --- a/drivers/media/video/v4l2-common.c +++ b/drivers/media/video/v4l2-common.c | |||
| @@ -202,7 +202,7 @@ static char *v4l2_memory_names[] = { | |||
| 202 | /* ------------------------------------------------------------------ */ | 202 | /* ------------------------------------------------------------------ */ |
| 203 | /* debug help functions */ | 203 | /* debug help functions */ |
| 204 | 204 | ||
| 205 | #ifdef CONFIG_V4L1_COMPAT | 205 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 206 | static const char *v4l1_ioctls[] = { | 206 | static const char *v4l1_ioctls[] = { |
| 207 | [_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP", | 207 | [_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP", |
| 208 | [_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN", | 208 | [_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN", |
| @@ -301,7 +301,7 @@ static const char *v4l2_ioctls[] = { | |||
| 301 | #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) | 301 | #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) |
| 302 | 302 | ||
| 303 | static const char *v4l2_int_ioctls[] = { | 303 | static const char *v4l2_int_ioctls[] = { |
| 304 | #ifdef CONFIG_V4L1_COMPAT | 304 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 305 | [_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES", | 305 | [_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES", |
| 306 | [_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS", | 306 | [_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS", |
| 307 | [_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM", | 307 | [_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM", |
| @@ -367,7 +367,7 @@ void v4l_printk_ioctl(unsigned int cmd) | |||
| 367 | (_IOC_NR(cmd) < V4L2_INT_IOCTLS) ? | 367 | (_IOC_NR(cmd) < V4L2_INT_IOCTLS) ? |
| 368 | v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd); | 368 | v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd); |
| 369 | break; | 369 | break; |
| 370 | #ifdef CONFIG_V4L1_COMPAT | 370 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 371 | case 'v': | 371 | case 'v': |
| 372 | printk("v4l1 ioctl %s, dir=%s (0x%08x)\n", | 372 | printk("v4l1 ioctl %s, dir=%s (0x%08x)\n", |
| 373 | (_IOC_NR(cmd) < V4L1_IOCTLS) ? | 373 | (_IOC_NR(cmd) < V4L1_IOCTLS) ? |
diff --git a/drivers/media/video/videodev.c b/drivers/media/video/videodev.c index 0fc90cd393f6..88bf2af2a0e7 100644 --- a/drivers/media/video/videodev.c +++ b/drivers/media/video/videodev.c | |||
| @@ -760,7 +760,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, | |||
| 760 | ret=vfd->vidioc_overlay(file, fh, *i); | 760 | ret=vfd->vidioc_overlay(file, fh, *i); |
| 761 | break; | 761 | break; |
| 762 | } | 762 | } |
| 763 | #ifdef CONFIG_V4L1_COMPAT | 763 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 764 | /* --- streaming capture ------------------------------------- */ | 764 | /* --- streaming capture ------------------------------------- */ |
| 765 | case VIDIOCGMBUF: | 765 | case VIDIOCGMBUF: |
| 766 | { | 766 | { |
diff --git a/drivers/media/video/vivi.c b/drivers/media/video/vivi.c index 38bd0c1018c2..841884af0cc0 100644 --- a/drivers/media/video/vivi.c +++ b/drivers/media/video/vivi.c | |||
| @@ -986,7 +986,7 @@ static int vidioc_dqbuf (struct file *file, void *priv, struct v4l2_buffer *p) | |||
| 986 | file->f_flags & O_NONBLOCK)); | 986 | file->f_flags & O_NONBLOCK)); |
| 987 | } | 987 | } |
| 988 | 988 | ||
| 989 | #ifdef CONFIG_V4L1_COMPAT | 989 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 990 | static int vidiocgmbuf (struct file *file, void *priv, struct video_mbuf *mbuf) | 990 | static int vidiocgmbuf (struct file *file, void *priv, struct video_mbuf *mbuf) |
| 991 | { | 991 | { |
| 992 | struct vivi_fh *fh=priv; | 992 | struct vivi_fh *fh=priv; |
| @@ -1328,7 +1328,7 @@ static struct video_device vivi = { | |||
| 1328 | .vidioc_s_ctrl = vidioc_s_ctrl, | 1328 | .vidioc_s_ctrl = vidioc_s_ctrl, |
| 1329 | .vidioc_streamon = vidioc_streamon, | 1329 | .vidioc_streamon = vidioc_streamon, |
| 1330 | .vidioc_streamoff = vidioc_streamoff, | 1330 | .vidioc_streamoff = vidioc_streamoff, |
| 1331 | #ifdef CONFIG_V4L1_COMPAT | 1331 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 1332 | .vidiocgmbuf = vidiocgmbuf, | 1332 | .vidiocgmbuf = vidiocgmbuf, |
| 1333 | #endif | 1333 | #endif |
| 1334 | .tvnorms = tvnorms, | 1334 | .tvnorms = tvnorms, |
diff --git a/drivers/mmc/mmc_queue.c b/drivers/mmc/mmc_queue.c index 0b9682e9a357..74f8cdeeff0f 100644 --- a/drivers/mmc/mmc_queue.c +++ b/drivers/mmc/mmc_queue.c | |||
| @@ -79,7 +79,8 @@ static int mmc_queue_thread(void *d) | |||
| 79 | spin_lock_irq(q->queue_lock); | 79 | spin_lock_irq(q->queue_lock); |
| 80 | set_current_state(TASK_INTERRUPTIBLE); | 80 | set_current_state(TASK_INTERRUPTIBLE); |
| 81 | if (!blk_queue_plugged(q)) | 81 | if (!blk_queue_plugged(q)) |
| 82 | mq->req = req = elv_next_request(q); | 82 | req = elv_next_request(q); |
| 83 | mq->req = req; | ||
| 83 | spin_unlock_irq(q->queue_lock); | 84 | spin_unlock_irq(q->queue_lock); |
| 84 | 85 | ||
| 85 | if (!req) { | 86 | if (!req) { |
diff --git a/drivers/mmc/wbsd.c b/drivers/mmc/wbsd.c index 8a30ef3ae419..c351c6d1a18a 100644 --- a/drivers/mmc/wbsd.c +++ b/drivers/mmc/wbsd.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | #include "wbsd.h" | 41 | #include "wbsd.h" |
| 42 | 42 | ||
| 43 | #define DRIVER_NAME "wbsd" | 43 | #define DRIVER_NAME "wbsd" |
| 44 | #define DRIVER_VERSION "1.5" | 44 | #define DRIVER_VERSION "1.6" |
| 45 | 45 | ||
| 46 | #define DBG(x...) \ | 46 | #define DBG(x...) \ |
| 47 | pr_debug(DRIVER_NAME ": " x) | 47 | pr_debug(DRIVER_NAME ": " x) |
| @@ -1439,13 +1439,13 @@ static int __devinit wbsd_scan(struct wbsd_host *host) | |||
| 1439 | 1439 | ||
| 1440 | static int __devinit wbsd_request_region(struct wbsd_host *host, int base) | 1440 | static int __devinit wbsd_request_region(struct wbsd_host *host, int base) |
| 1441 | { | 1441 | { |
| 1442 | if (io & 0x7) | 1442 | if (base & 0x7) |
| 1443 | return -EINVAL; | 1443 | return -EINVAL; |
| 1444 | 1444 | ||
| 1445 | if (!request_region(base, 8, DRIVER_NAME)) | 1445 | if (!request_region(base, 8, DRIVER_NAME)) |
| 1446 | return -EIO; | 1446 | return -EIO; |
| 1447 | 1447 | ||
| 1448 | host->base = io; | 1448 | host->base = base; |
| 1449 | 1449 | ||
| 1450 | return 0; | 1450 | return 0; |
| 1451 | } | 1451 | } |
| @@ -1773,7 +1773,7 @@ static int __devinit wbsd_init(struct device *dev, int base, int irq, int dma, | |||
| 1773 | /* | 1773 | /* |
| 1774 | * Request resources. | 1774 | * Request resources. |
| 1775 | */ | 1775 | */ |
| 1776 | ret = wbsd_request_resources(host, io, irq, dma); | 1776 | ret = wbsd_request_resources(host, base, irq, dma); |
| 1777 | if (ret) { | 1777 | if (ret) { |
| 1778 | wbsd_release_resources(host); | 1778 | wbsd_release_resources(host); |
| 1779 | wbsd_free_mmc(dev); | 1779 | wbsd_free_mmc(dev); |
| @@ -1861,6 +1861,7 @@ static void __devexit wbsd_shutdown(struct device *dev, int pnp) | |||
| 1861 | 1861 | ||
| 1862 | static int __devinit wbsd_probe(struct platform_device *dev) | 1862 | static int __devinit wbsd_probe(struct platform_device *dev) |
| 1863 | { | 1863 | { |
| 1864 | /* Use the module parameters for resources */ | ||
| 1864 | return wbsd_init(&dev->dev, io, irq, dma, 0); | 1865 | return wbsd_init(&dev->dev, io, irq, dma, 0); |
| 1865 | } | 1866 | } |
| 1866 | 1867 | ||
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index db73de0d2511..652eb05a6c2d 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
| @@ -56,8 +56,8 @@ | |||
| 56 | 56 | ||
| 57 | #define DRV_MODULE_NAME "bnx2" | 57 | #define DRV_MODULE_NAME "bnx2" |
| 58 | #define PFX DRV_MODULE_NAME ": " | 58 | #define PFX DRV_MODULE_NAME ": " |
| 59 | #define DRV_MODULE_VERSION "1.4.43" | 59 | #define DRV_MODULE_VERSION "1.4.44" |
| 60 | #define DRV_MODULE_RELDATE "June 28, 2006" | 60 | #define DRV_MODULE_RELDATE "August 10, 2006" |
| 61 | 61 | ||
| 62 | #define RUN_AT(x) (jiffies + (x)) | 62 | #define RUN_AT(x) (jiffies + (x)) |
| 63 | 63 | ||
| @@ -209,8 +209,10 @@ MODULE_DEVICE_TABLE(pci, bnx2_pci_tbl); | |||
| 209 | 209 | ||
| 210 | static inline u32 bnx2_tx_avail(struct bnx2 *bp) | 210 | static inline u32 bnx2_tx_avail(struct bnx2 *bp) |
| 211 | { | 211 | { |
| 212 | u32 diff = TX_RING_IDX(bp->tx_prod) - TX_RING_IDX(bp->tx_cons); | 212 | u32 diff; |
| 213 | 213 | ||
| 214 | smp_mb(); | ||
| 215 | diff = TX_RING_IDX(bp->tx_prod) - TX_RING_IDX(bp->tx_cons); | ||
| 214 | if (diff > MAX_TX_DESC_CNT) | 216 | if (diff > MAX_TX_DESC_CNT) |
| 215 | diff = (diff & MAX_TX_DESC_CNT) - 1; | 217 | diff = (diff & MAX_TX_DESC_CNT) - 1; |
| 216 | return (bp->tx_ring_size - diff); | 218 | return (bp->tx_ring_size - diff); |
| @@ -1569,7 +1571,7 @@ bnx2_alloc_rx_skb(struct bnx2 *bp, u16 index) | |||
| 1569 | struct rx_bd *rxbd = &bp->rx_desc_ring[RX_RING(index)][RX_IDX(index)]; | 1571 | struct rx_bd *rxbd = &bp->rx_desc_ring[RX_RING(index)][RX_IDX(index)]; |
| 1570 | unsigned long align; | 1572 | unsigned long align; |
| 1571 | 1573 | ||
| 1572 | skb = dev_alloc_skb(bp->rx_buf_size); | 1574 | skb = netdev_alloc_skb(bp->dev, bp->rx_buf_size); |
| 1573 | if (skb == NULL) { | 1575 | if (skb == NULL) { |
| 1574 | return -ENOMEM; | 1576 | return -ENOMEM; |
| 1575 | } | 1577 | } |
| @@ -1578,7 +1580,6 @@ bnx2_alloc_rx_skb(struct bnx2 *bp, u16 index) | |||
| 1578 | skb_reserve(skb, 8 - align); | 1580 | skb_reserve(skb, 8 - align); |
| 1579 | } | 1581 | } |
| 1580 | 1582 | ||
| 1581 | skb->dev = bp->dev; | ||
| 1582 | mapping = pci_map_single(bp->pdev, skb->data, bp->rx_buf_use_size, | 1583 | mapping = pci_map_single(bp->pdev, skb->data, bp->rx_buf_use_size, |
| 1583 | PCI_DMA_FROMDEVICE); | 1584 | PCI_DMA_FROMDEVICE); |
| 1584 | 1585 | ||
| @@ -1686,15 +1687,20 @@ bnx2_tx_int(struct bnx2 *bp) | |||
| 1686 | } | 1687 | } |
| 1687 | 1688 | ||
| 1688 | bp->tx_cons = sw_cons; | 1689 | bp->tx_cons = sw_cons; |
| 1690 | /* Need to make the tx_cons update visible to bnx2_start_xmit() | ||
| 1691 | * before checking for netif_queue_stopped(). Without the | ||
| 1692 | * memory barrier, there is a small possibility that bnx2_start_xmit() | ||
| 1693 | * will miss it and cause the queue to be stopped forever. | ||
| 1694 | */ | ||
| 1695 | smp_mb(); | ||
| 1689 | 1696 | ||
| 1690 | if (unlikely(netif_queue_stopped(bp->dev))) { | 1697 | if (unlikely(netif_queue_stopped(bp->dev)) && |
| 1691 | spin_lock(&bp->tx_lock); | 1698 | (bnx2_tx_avail(bp) > bp->tx_wake_thresh)) { |
| 1699 | netif_tx_lock(bp->dev); | ||
| 1692 | if ((netif_queue_stopped(bp->dev)) && | 1700 | if ((netif_queue_stopped(bp->dev)) && |
| 1693 | (bnx2_tx_avail(bp) > MAX_SKB_FRAGS)) { | 1701 | (bnx2_tx_avail(bp) > bp->tx_wake_thresh)) |
| 1694 | |||
| 1695 | netif_wake_queue(bp->dev); | 1702 | netif_wake_queue(bp->dev); |
| 1696 | } | 1703 | netif_tx_unlock(bp->dev); |
| 1697 | spin_unlock(&bp->tx_lock); | ||
| 1698 | } | 1704 | } |
| 1699 | } | 1705 | } |
| 1700 | 1706 | ||
| @@ -1786,7 +1792,7 @@ bnx2_rx_int(struct bnx2 *bp, int budget) | |||
| 1786 | if ((bp->dev->mtu > 1500) && (len <= RX_COPY_THRESH)) { | 1792 | if ((bp->dev->mtu > 1500) && (len <= RX_COPY_THRESH)) { |
| 1787 | struct sk_buff *new_skb; | 1793 | struct sk_buff *new_skb; |
| 1788 | 1794 | ||
| 1789 | new_skb = dev_alloc_skb(len + 2); | 1795 | new_skb = netdev_alloc_skb(bp->dev, len + 2); |
| 1790 | if (new_skb == NULL) | 1796 | if (new_skb == NULL) |
| 1791 | goto reuse_rx; | 1797 | goto reuse_rx; |
| 1792 | 1798 | ||
| @@ -1797,7 +1803,6 @@ bnx2_rx_int(struct bnx2 *bp, int budget) | |||
| 1797 | 1803 | ||
| 1798 | skb_reserve(new_skb, 2); | 1804 | skb_reserve(new_skb, 2); |
| 1799 | skb_put(new_skb, len); | 1805 | skb_put(new_skb, len); |
| 1800 | new_skb->dev = bp->dev; | ||
| 1801 | 1806 | ||
| 1802 | bnx2_reuse_rx_skb(bp, skb, | 1807 | bnx2_reuse_rx_skb(bp, skb, |
| 1803 | sw_ring_cons, sw_ring_prod); | 1808 | sw_ring_cons, sw_ring_prod); |
| @@ -3503,6 +3508,8 @@ bnx2_init_tx_ring(struct bnx2 *bp) | |||
| 3503 | struct tx_bd *txbd; | 3508 | struct tx_bd *txbd; |
| 3504 | u32 val; | 3509 | u32 val; |
| 3505 | 3510 | ||
| 3511 | bp->tx_wake_thresh = bp->tx_ring_size / 2; | ||
| 3512 | |||
| 3506 | txbd = &bp->tx_desc_ring[MAX_TX_DESC_CNT]; | 3513 | txbd = &bp->tx_desc_ring[MAX_TX_DESC_CNT]; |
| 3507 | 3514 | ||
| 3508 | txbd->tx_bd_haddr_hi = (u64) bp->tx_desc_mapping >> 32; | 3515 | txbd->tx_bd_haddr_hi = (u64) bp->tx_desc_mapping >> 32; |
| @@ -3952,7 +3959,7 @@ bnx2_run_loopback(struct bnx2 *bp, int loopback_mode) | |||
| 3952 | return -EINVAL; | 3959 | return -EINVAL; |
| 3953 | 3960 | ||
| 3954 | pkt_size = 1514; | 3961 | pkt_size = 1514; |
| 3955 | skb = dev_alloc_skb(pkt_size); | 3962 | skb = netdev_alloc_skb(bp->dev, pkt_size); |
| 3956 | if (!skb) | 3963 | if (!skb) |
| 3957 | return -ENOMEM; | 3964 | return -ENOMEM; |
| 3958 | packet = skb_put(skb, pkt_size); | 3965 | packet = skb_put(skb, pkt_size); |
| @@ -4390,10 +4397,8 @@ bnx2_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid) | |||
| 4390 | #endif | 4397 | #endif |
| 4391 | 4398 | ||
| 4392 | /* Called with netif_tx_lock. | 4399 | /* Called with netif_tx_lock. |
| 4393 | * hard_start_xmit is pseudo-lockless - a lock is only required when | 4400 | * bnx2_tx_int() runs without netif_tx_lock unless it needs to call |
| 4394 | * the tx queue is full. This way, we get the benefit of lockless | 4401 | * netif_wake_queue(). |
| 4395 | * operations most of the time without the complexities to handle | ||
| 4396 | * netif_stop_queue/wake_queue race conditions. | ||
| 4397 | */ | 4402 | */ |
| 4398 | static int | 4403 | static int |
| 4399 | bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) | 4404 | bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) |
| @@ -4512,12 +4517,9 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 4512 | dev->trans_start = jiffies; | 4517 | dev->trans_start = jiffies; |
| 4513 | 4518 | ||
| 4514 | if (unlikely(bnx2_tx_avail(bp) <= MAX_SKB_FRAGS)) { | 4519 | if (unlikely(bnx2_tx_avail(bp) <= MAX_SKB_FRAGS)) { |
| 4515 | spin_lock(&bp->tx_lock); | ||
| 4516 | netif_stop_queue(dev); | 4520 | netif_stop_queue(dev); |
| 4517 | 4521 | if (bnx2_tx_avail(bp) > bp->tx_wake_thresh) | |
| 4518 | if (bnx2_tx_avail(bp) > MAX_SKB_FRAGS) | ||
| 4519 | netif_wake_queue(dev); | 4522 | netif_wake_queue(dev); |
| 4520 | spin_unlock(&bp->tx_lock); | ||
| 4521 | } | 4523 | } |
| 4522 | 4524 | ||
| 4523 | return NETDEV_TX_OK; | 4525 | return NETDEV_TX_OK; |
| @@ -5628,7 +5630,6 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) | |||
| 5628 | bp->pdev = pdev; | 5630 | bp->pdev = pdev; |
| 5629 | 5631 | ||
| 5630 | spin_lock_init(&bp->phy_lock); | 5632 | spin_lock_init(&bp->phy_lock); |
| 5631 | spin_lock_init(&bp->tx_lock); | ||
| 5632 | INIT_WORK(&bp->reset_task, bnx2_reset_task, bp); | 5633 | INIT_WORK(&bp->reset_task, bnx2_reset_task, bp); |
| 5633 | 5634 | ||
| 5634 | dev->base_addr = dev->mem_start = pci_resource_start(pdev, 0); | 5635 | dev->base_addr = dev->mem_start = pci_resource_start(pdev, 0); |
| @@ -5751,7 +5752,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev) | |||
| 5751 | bp->mac_addr[5] = (u8) reg; | 5752 | bp->mac_addr[5] = (u8) reg; |
| 5752 | 5753 | ||
| 5753 | bp->tx_ring_size = MAX_TX_DESC_CNT; | 5754 | bp->tx_ring_size = MAX_TX_DESC_CNT; |
| 5754 | bnx2_set_rx_ring_size(bp, 100); | 5755 | bnx2_set_rx_ring_size(bp, 255); |
| 5755 | 5756 | ||
| 5756 | bp->rx_csum = 1; | 5757 | bp->rx_csum = 1; |
| 5757 | 5758 | ||
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h index 658c5ee95c73..fe804763c607 100644 --- a/drivers/net/bnx2.h +++ b/drivers/net/bnx2.h | |||
| @@ -3890,10 +3890,6 @@ struct bnx2 { | |||
| 3890 | u32 tx_prod_bseq __attribute__((aligned(L1_CACHE_BYTES))); | 3890 | u32 tx_prod_bseq __attribute__((aligned(L1_CACHE_BYTES))); |
| 3891 | u16 tx_prod; | 3891 | u16 tx_prod; |
| 3892 | 3892 | ||
| 3893 | struct tx_bd *tx_desc_ring; | ||
| 3894 | struct sw_bd *tx_buf_ring; | ||
| 3895 | int tx_ring_size; | ||
| 3896 | |||
| 3897 | u16 tx_cons __attribute__((aligned(L1_CACHE_BYTES))); | 3893 | u16 tx_cons __attribute__((aligned(L1_CACHE_BYTES))); |
| 3898 | u16 hw_tx_cons; | 3894 | u16 hw_tx_cons; |
| 3899 | 3895 | ||
| @@ -3916,9 +3912,11 @@ struct bnx2 { | |||
| 3916 | struct sw_bd *rx_buf_ring; | 3912 | struct sw_bd *rx_buf_ring; |
| 3917 | struct rx_bd *rx_desc_ring[MAX_RX_RINGS]; | 3913 | struct rx_bd *rx_desc_ring[MAX_RX_RINGS]; |
| 3918 | 3914 | ||
| 3919 | /* Only used to synchronize netif_stop_queue/wake_queue when tx */ | 3915 | /* TX constants */ |
| 3920 | /* ring is full */ | 3916 | struct tx_bd *tx_desc_ring; |
| 3921 | spinlock_t tx_lock; | 3917 | struct sw_bd *tx_buf_ring; |
| 3918 | int tx_ring_size; | ||
| 3919 | u32 tx_wake_thresh; | ||
| 3922 | 3920 | ||
| 3923 | /* End of fields used in the performance code paths. */ | 3921 | /* End of fields used in the performance code paths. */ |
| 3924 | 3922 | ||
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index 06440a86baef..9bdd43ab3573 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
| @@ -2425,7 +2425,7 @@ static int myri10ge_resume(struct pci_dev *pdev) | |||
| 2425 | } | 2425 | } |
| 2426 | 2426 | ||
| 2427 | myri10ge_reset(mgp); | 2427 | myri10ge_reset(mgp); |
| 2428 | myri10ge_dummy_rdma(mgp, mgp->tx.boundary != 4096); | 2428 | myri10ge_dummy_rdma(mgp, 1); |
| 2429 | 2429 | ||
| 2430 | /* Save configuration space to be restored if the | 2430 | /* Save configuration space to be restored if the |
| 2431 | * nic resets due to a parity error */ | 2431 | * nic resets due to a parity error */ |
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c index 0ec6e9d57b94..c872f7c6cce3 100644 --- a/drivers/net/ppp_generic.c +++ b/drivers/net/ppp_generic.c | |||
| @@ -192,7 +192,7 @@ struct cardmap { | |||
| 192 | void *ptr[CARDMAP_WIDTH]; | 192 | void *ptr[CARDMAP_WIDTH]; |
| 193 | }; | 193 | }; |
| 194 | static void *cardmap_get(struct cardmap *map, unsigned int nr); | 194 | static void *cardmap_get(struct cardmap *map, unsigned int nr); |
| 195 | static void cardmap_set(struct cardmap **map, unsigned int nr, void *ptr); | 195 | static int cardmap_set(struct cardmap **map, unsigned int nr, void *ptr); |
| 196 | static unsigned int cardmap_find_first_free(struct cardmap *map); | 196 | static unsigned int cardmap_find_first_free(struct cardmap *map); |
| 197 | static void cardmap_destroy(struct cardmap **map); | 197 | static void cardmap_destroy(struct cardmap **map); |
| 198 | 198 | ||
| @@ -1995,10 +1995,9 @@ ppp_register_channel(struct ppp_channel *chan) | |||
| 1995 | { | 1995 | { |
| 1996 | struct channel *pch; | 1996 | struct channel *pch; |
| 1997 | 1997 | ||
| 1998 | pch = kmalloc(sizeof(struct channel), GFP_KERNEL); | 1998 | pch = kzalloc(sizeof(struct channel), GFP_KERNEL); |
| 1999 | if (pch == 0) | 1999 | if (pch == 0) |
| 2000 | return -ENOMEM; | 2000 | return -ENOMEM; |
| 2001 | memset(pch, 0, sizeof(struct channel)); | ||
| 2002 | pch->ppp = NULL; | 2001 | pch->ppp = NULL; |
| 2003 | pch->chan = chan; | 2002 | pch->chan = chan; |
| 2004 | chan->ppp = pch; | 2003 | chan->ppp = pch; |
| @@ -2408,13 +2407,12 @@ ppp_create_interface(int unit, int *retp) | |||
| 2408 | int ret = -ENOMEM; | 2407 | int ret = -ENOMEM; |
| 2409 | int i; | 2408 | int i; |
| 2410 | 2409 | ||
| 2411 | ppp = kmalloc(sizeof(struct ppp), GFP_KERNEL); | 2410 | ppp = kzalloc(sizeof(struct ppp), GFP_KERNEL); |
| 2412 | if (!ppp) | 2411 | if (!ppp) |
| 2413 | goto out; | 2412 | goto out; |
| 2414 | dev = alloc_netdev(0, "", ppp_setup); | 2413 | dev = alloc_netdev(0, "", ppp_setup); |
| 2415 | if (!dev) | 2414 | if (!dev) |
| 2416 | goto out1; | 2415 | goto out1; |
| 2417 | memset(ppp, 0, sizeof(struct ppp)); | ||
| 2418 | 2416 | ||
| 2419 | ppp->mru = PPP_MRU; | 2417 | ppp->mru = PPP_MRU; |
| 2420 | init_ppp_file(&ppp->file, INTERFACE); | 2418 | init_ppp_file(&ppp->file, INTERFACE); |
| @@ -2454,11 +2452,16 @@ ppp_create_interface(int unit, int *retp) | |||
| 2454 | } | 2452 | } |
| 2455 | 2453 | ||
| 2456 | atomic_inc(&ppp_unit_count); | 2454 | atomic_inc(&ppp_unit_count); |
| 2457 | cardmap_set(&all_ppp_units, unit, ppp); | 2455 | ret = cardmap_set(&all_ppp_units, unit, ppp); |
| 2456 | if (ret != 0) | ||
| 2457 | goto out3; | ||
| 2458 | |||
| 2458 | mutex_unlock(&all_ppp_mutex); | 2459 | mutex_unlock(&all_ppp_mutex); |
| 2459 | *retp = 0; | 2460 | *retp = 0; |
| 2460 | return ppp; | 2461 | return ppp; |
| 2461 | 2462 | ||
| 2463 | out3: | ||
| 2464 | atomic_dec(&ppp_unit_count); | ||
| 2462 | out2: | 2465 | out2: |
| 2463 | mutex_unlock(&all_ppp_mutex); | 2466 | mutex_unlock(&all_ppp_mutex); |
| 2464 | free_netdev(dev); | 2467 | free_netdev(dev); |
| @@ -2695,7 +2698,7 @@ static void *cardmap_get(struct cardmap *map, unsigned int nr) | |||
| 2695 | return NULL; | 2698 | return NULL; |
| 2696 | } | 2699 | } |
| 2697 | 2700 | ||
| 2698 | static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr) | 2701 | static int cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr) |
| 2699 | { | 2702 | { |
| 2700 | struct cardmap *p; | 2703 | struct cardmap *p; |
| 2701 | int i; | 2704 | int i; |
| @@ -2704,8 +2707,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr) | |||
| 2704 | if (p == NULL || (nr >> p->shift) >= CARDMAP_WIDTH) { | 2707 | if (p == NULL || (nr >> p->shift) >= CARDMAP_WIDTH) { |
| 2705 | do { | 2708 | do { |
| 2706 | /* need a new top level */ | 2709 | /* need a new top level */ |
| 2707 | struct cardmap *np = kmalloc(sizeof(*np), GFP_KERNEL); | 2710 | struct cardmap *np = kzalloc(sizeof(*np), GFP_KERNEL); |
| 2708 | memset(np, 0, sizeof(*np)); | 2711 | if (!np) |
| 2712 | goto enomem; | ||
| 2709 | np->ptr[0] = p; | 2713 | np->ptr[0] = p; |
| 2710 | if (p != NULL) { | 2714 | if (p != NULL) { |
| 2711 | np->shift = p->shift + CARDMAP_ORDER; | 2715 | np->shift = p->shift + CARDMAP_ORDER; |
| @@ -2719,8 +2723,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr) | |||
| 2719 | while (p->shift > 0) { | 2723 | while (p->shift > 0) { |
| 2720 | i = (nr >> p->shift) & CARDMAP_MASK; | 2724 | i = (nr >> p->shift) & CARDMAP_MASK; |
| 2721 | if (p->ptr[i] == NULL) { | 2725 | if (p->ptr[i] == NULL) { |
| 2722 | struct cardmap *np = kmalloc(sizeof(*np), GFP_KERNEL); | 2726 | struct cardmap *np = kzalloc(sizeof(*np), GFP_KERNEL); |
| 2723 | memset(np, 0, sizeof(*np)); | 2727 | if (!np) |
| 2728 | goto enomem; | ||
| 2724 | np->shift = p->shift - CARDMAP_ORDER; | 2729 | np->shift = p->shift - CARDMAP_ORDER; |
| 2725 | np->parent = p; | 2730 | np->parent = p; |
| 2726 | p->ptr[i] = np; | 2731 | p->ptr[i] = np; |
| @@ -2735,6 +2740,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr) | |||
| 2735 | set_bit(i, &p->inuse); | 2740 | set_bit(i, &p->inuse); |
| 2736 | else | 2741 | else |
| 2737 | clear_bit(i, &p->inuse); | 2742 | clear_bit(i, &p->inuse); |
| 2743 | return 0; | ||
| 2744 | enomem: | ||
| 2745 | return -ENOMEM; | ||
| 2738 | } | 2746 | } |
| 2739 | 2747 | ||
| 2740 | static unsigned int cardmap_find_first_free(struct cardmap *map) | 2748 | static unsigned int cardmap_find_first_free(struct cardmap *map) |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 6f97962dd06b..eafabb253f08 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
| @@ -68,8 +68,8 @@ | |||
| 68 | 68 | ||
| 69 | #define DRV_MODULE_NAME "tg3" | 69 | #define DRV_MODULE_NAME "tg3" |
| 70 | #define PFX DRV_MODULE_NAME ": " | 70 | #define PFX DRV_MODULE_NAME ": " |
| 71 | #define DRV_MODULE_VERSION "3.64" | 71 | #define DRV_MODULE_VERSION "3.65" |
| 72 | #define DRV_MODULE_RELDATE "July 31, 2006" | 72 | #define DRV_MODULE_RELDATE "August 07, 2006" |
| 73 | 73 | ||
| 74 | #define TG3_DEF_MAC_MODE 0 | 74 | #define TG3_DEF_MAC_MODE 0 |
| 75 | #define TG3_DEF_RX_MODE 0 | 75 | #define TG3_DEF_RX_MODE 0 |
| @@ -123,9 +123,6 @@ | |||
| 123 | TG3_RX_RCB_RING_SIZE(tp)) | 123 | TG3_RX_RCB_RING_SIZE(tp)) |
| 124 | #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ | 124 | #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ |
| 125 | TG3_TX_RING_SIZE) | 125 | TG3_TX_RING_SIZE) |
| 126 | #define TX_BUFFS_AVAIL(TP) \ | ||
| 127 | ((TP)->tx_pending - \ | ||
| 128 | (((TP)->tx_prod - (TP)->tx_cons) & (TG3_TX_RING_SIZE - 1))) | ||
| 129 | #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) | 126 | #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) |
| 130 | 127 | ||
| 131 | #define RX_PKT_BUF_SZ (1536 + tp->rx_offset + 64) | 128 | #define RX_PKT_BUF_SZ (1536 + tp->rx_offset + 64) |
| @@ -2987,6 +2984,13 @@ static void tg3_tx_recover(struct tg3 *tp) | |||
| 2987 | spin_unlock(&tp->lock); | 2984 | spin_unlock(&tp->lock); |
| 2988 | } | 2985 | } |
| 2989 | 2986 | ||
| 2987 | static inline u32 tg3_tx_avail(struct tg3 *tp) | ||
| 2988 | { | ||
| 2989 | smp_mb(); | ||
| 2990 | return (tp->tx_pending - | ||
| 2991 | ((tp->tx_prod - tp->tx_cons) & (TG3_TX_RING_SIZE - 1))); | ||
| 2992 | } | ||
| 2993 | |||
| 2990 | /* Tigon3 never reports partial packet sends. So we do not | 2994 | /* Tigon3 never reports partial packet sends. So we do not |
| 2991 | * need special logic to handle SKBs that have not had all | 2995 | * need special logic to handle SKBs that have not had all |
| 2992 | * of their frags sent yet, like SunGEM does. | 2996 | * of their frags sent yet, like SunGEM does. |
| @@ -3038,12 +3042,20 @@ static void tg3_tx(struct tg3 *tp) | |||
| 3038 | 3042 | ||
| 3039 | tp->tx_cons = sw_idx; | 3043 | tp->tx_cons = sw_idx; |
| 3040 | 3044 | ||
| 3041 | if (unlikely(netif_queue_stopped(tp->dev))) { | 3045 | /* Need to make the tx_cons update visible to tg3_start_xmit() |
| 3042 | spin_lock(&tp->tx_lock); | 3046 | * before checking for netif_queue_stopped(). Without the |
| 3047 | * memory barrier, there is a small possibility that tg3_start_xmit() | ||
| 3048 | * will miss it and cause the queue to be stopped forever. | ||
| 3049 | */ | ||
| 3050 | smp_mb(); | ||
| 3051 | |||
| 3052 | if (unlikely(netif_queue_stopped(tp->dev) && | ||
| 3053 | (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH))) { | ||
| 3054 | netif_tx_lock(tp->dev); | ||
| 3043 | if (netif_queue_stopped(tp->dev) && | 3055 | if (netif_queue_stopped(tp->dev) && |
| 3044 | (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH)) | 3056 | (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH)) |
| 3045 | netif_wake_queue(tp->dev); | 3057 | netif_wake_queue(tp->dev); |
| 3046 | spin_unlock(&tp->tx_lock); | 3058 | netif_tx_unlock(tp->dev); |
| 3047 | } | 3059 | } |
| 3048 | } | 3060 | } |
| 3049 | 3061 | ||
| @@ -3101,7 +3113,6 @@ static int tg3_alloc_rx_skb(struct tg3 *tp, u32 opaque_key, | |||
| 3101 | if (skb == NULL) | 3113 | if (skb == NULL) |
| 3102 | return -ENOMEM; | 3114 | return -ENOMEM; |
| 3103 | 3115 | ||
| 3104 | skb->dev = tp->dev; | ||
| 3105 | skb_reserve(skb, tp->rx_offset); | 3116 | skb_reserve(skb, tp->rx_offset); |
| 3106 | 3117 | ||
| 3107 | mapping = pci_map_single(tp->pdev, skb->data, | 3118 | mapping = pci_map_single(tp->pdev, skb->data, |
| @@ -3274,7 +3285,6 @@ static int tg3_rx(struct tg3 *tp, int budget) | |||
| 3274 | if (copy_skb == NULL) | 3285 | if (copy_skb == NULL) |
| 3275 | goto drop_it_no_recycle; | 3286 | goto drop_it_no_recycle; |
| 3276 | 3287 | ||
| 3277 | copy_skb->dev = tp->dev; | ||
| 3278 | skb_reserve(copy_skb, 2); | 3288 | skb_reserve(copy_skb, 2); |
| 3279 | skb_put(copy_skb, len); | 3289 | skb_put(copy_skb, len); |
| 3280 | pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); | 3290 | pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); |
| @@ -3797,7 +3807,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 3797 | * interrupt. Furthermore, IRQ processing runs lockless so we have | 3807 | * interrupt. Furthermore, IRQ processing runs lockless so we have |
| 3798 | * no IRQ context deadlocks to worry about either. Rejoice! | 3808 | * no IRQ context deadlocks to worry about either. Rejoice! |
| 3799 | */ | 3809 | */ |
| 3800 | if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) { | 3810 | if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) { |
| 3801 | if (!netif_queue_stopped(dev)) { | 3811 | if (!netif_queue_stopped(dev)) { |
| 3802 | netif_stop_queue(dev); | 3812 | netif_stop_queue(dev); |
| 3803 | 3813 | ||
| @@ -3893,12 +3903,10 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 3893 | tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry); | 3903 | tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry); |
| 3894 | 3904 | ||
| 3895 | tp->tx_prod = entry; | 3905 | tp->tx_prod = entry; |
| 3896 | if (unlikely(TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1))) { | 3906 | if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) { |
| 3897 | spin_lock(&tp->tx_lock); | ||
| 3898 | netif_stop_queue(dev); | 3907 | netif_stop_queue(dev); |
| 3899 | if (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH) | 3908 | if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH) |
| 3900 | netif_wake_queue(tp->dev); | 3909 | netif_wake_queue(tp->dev); |
| 3901 | spin_unlock(&tp->tx_lock); | ||
| 3902 | } | 3910 | } |
| 3903 | 3911 | ||
| 3904 | out_unlock: | 3912 | out_unlock: |
| @@ -3920,7 +3928,7 @@ static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb) | |||
| 3920 | struct sk_buff *segs, *nskb; | 3928 | struct sk_buff *segs, *nskb; |
| 3921 | 3929 | ||
| 3922 | /* Estimate the number of fragments in the worst case */ | 3930 | /* Estimate the number of fragments in the worst case */ |
| 3923 | if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->gso_segs * 3))) { | 3931 | if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->gso_segs * 3))) { |
| 3924 | netif_stop_queue(tp->dev); | 3932 | netif_stop_queue(tp->dev); |
| 3925 | return NETDEV_TX_BUSY; | 3933 | return NETDEV_TX_BUSY; |
| 3926 | } | 3934 | } |
| @@ -3960,7 +3968,7 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev) | |||
| 3960 | * interrupt. Furthermore, IRQ processing runs lockless so we have | 3968 | * interrupt. Furthermore, IRQ processing runs lockless so we have |
| 3961 | * no IRQ context deadlocks to worry about either. Rejoice! | 3969 | * no IRQ context deadlocks to worry about either. Rejoice! |
| 3962 | */ | 3970 | */ |
| 3963 | if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) { | 3971 | if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) { |
| 3964 | if (!netif_queue_stopped(dev)) { | 3972 | if (!netif_queue_stopped(dev)) { |
| 3965 | netif_stop_queue(dev); | 3973 | netif_stop_queue(dev); |
| 3966 | 3974 | ||
| @@ -4110,12 +4118,10 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev) | |||
| 4110 | tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry); | 4118 | tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry); |
| 4111 | 4119 | ||
| 4112 | tp->tx_prod = entry; | 4120 | tp->tx_prod = entry; |
| 4113 | if (unlikely(TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1))) { | 4121 | if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) { |
| 4114 | spin_lock(&tp->tx_lock); | ||
| 4115 | netif_stop_queue(dev); | 4122 | netif_stop_queue(dev); |
| 4116 | if (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH) | 4123 | if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH) |
| 4117 | netif_wake_queue(tp->dev); | 4124 | netif_wake_queue(tp->dev); |
| 4118 | spin_unlock(&tp->tx_lock); | ||
| 4119 | } | 4125 | } |
| 4120 | 4126 | ||
| 4121 | out_unlock: | 4127 | out_unlock: |
| @@ -11474,7 +11480,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
| 11474 | tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; | 11480 | tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; |
| 11475 | #endif | 11481 | #endif |
| 11476 | spin_lock_init(&tp->lock); | 11482 | spin_lock_init(&tp->lock); |
| 11477 | spin_lock_init(&tp->tx_lock); | ||
| 11478 | spin_lock_init(&tp->indirect_lock); | 11483 | spin_lock_init(&tp->indirect_lock); |
| 11479 | INIT_WORK(&tp->reset_task, tg3_reset_task, tp); | 11484 | INIT_WORK(&tp->reset_task, tg3_reset_task, tp); |
| 11480 | 11485 | ||
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index ba2c98711c88..3ecf356cfb08 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
| @@ -2079,9 +2079,9 @@ struct tg3 { | |||
| 2079 | * lock: Held during reset, PHY access, timer, and when | 2079 | * lock: Held during reset, PHY access, timer, and when |
| 2080 | * updating tg3_flags and tg3_flags2. | 2080 | * updating tg3_flags and tg3_flags2. |
| 2081 | * | 2081 | * |
| 2082 | * tx_lock: Held during tg3_start_xmit and tg3_tx only | 2082 | * netif_tx_lock: Held during tg3_start_xmit. tg3_tx holds |
| 2083 | * when calling netif_[start|stop]_queue. | 2083 | * netif_tx_lock when it needs to call |
| 2084 | * tg3_start_xmit is protected by netif_tx_lock. | 2084 | * netif_wake_queue. |
| 2085 | * | 2085 | * |
| 2086 | * Both of these locks are to be held with BH safety. | 2086 | * Both of these locks are to be held with BH safety. |
| 2087 | * | 2087 | * |
| @@ -2118,8 +2118,6 @@ struct tg3 { | |||
| 2118 | u32 tx_cons; | 2118 | u32 tx_cons; |
| 2119 | u32 tx_pending; | 2119 | u32 tx_pending; |
| 2120 | 2120 | ||
| 2121 | spinlock_t tx_lock; | ||
| 2122 | |||
| 2123 | struct tg3_tx_buffer_desc *tx_ring; | 2121 | struct tg3_tx_buffer_desc *tx_ring; |
| 2124 | struct tx_ring_info *tx_buffers; | 2122 | struct tx_ring_info *tx_buffers; |
| 2125 | dma_addr_t tx_desc_mapping; | 2123 | dma_addr_t tx_desc_mapping; |
diff --git a/drivers/pci/hotplug/Kconfig b/drivers/pci/hotplug/Kconfig index 3fae77ffb2fa..3c148eaf2f4d 100644 --- a/drivers/pci/hotplug/Kconfig +++ b/drivers/pci/hotplug/Kconfig | |||
| @@ -153,13 +153,6 @@ config HOTPLUG_PCI_SHPC_POLL_EVENT_MODE | |||
| 153 | 153 | ||
| 154 | When in doubt, say N. | 154 | When in doubt, say N. |
| 155 | 155 | ||
| 156 | config HOTPLUG_PCI_SHPC_PHPRM_LEGACY | ||
| 157 | bool "For AMD SHPC only: Use $HRT for resource/configuration" | ||
| 158 | depends on HOTPLUG_PCI_SHPC && !ACPI | ||
| 159 | help | ||
| 160 | Say Y here for AMD SHPC. You have to select this option if you are | ||
| 161 | using this driver on platform with AMD SHPC. | ||
| 162 | |||
| 163 | config HOTPLUG_PCI_RPA | 156 | config HOTPLUG_PCI_RPA |
| 164 | tristate "RPA PCI Hotplug driver" | 157 | tristate "RPA PCI Hotplug driver" |
| 165 | depends on HOTPLUG_PCI && PPC_PSERIES && PPC64 && !HOTPLUG_PCI_FAKE | 158 | depends on HOTPLUG_PCI && PPC_PSERIES && PPC64 && !HOTPLUG_PCI_FAKE |
diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h index ce89f5815861..eaea9d36a1bb 100644 --- a/drivers/pci/hotplug/pciehp.h +++ b/drivers/pci/hotplug/pciehp.h | |||
| @@ -279,6 +279,11 @@ struct hpc_ops { | |||
| 279 | 279 | ||
| 280 | 280 | ||
| 281 | #ifdef CONFIG_ACPI | 281 | #ifdef CONFIG_ACPI |
| 282 | #include <acpi/acpi.h> | ||
| 283 | #include <acpi/acpi_bus.h> | ||
| 284 | #include <acpi/actypes.h> | ||
| 285 | #include <linux/pci-acpi.h> | ||
| 286 | |||
| 282 | #define pciehp_get_hp_hw_control_from_firmware(dev) \ | 287 | #define pciehp_get_hp_hw_control_from_firmware(dev) \ |
| 283 | pciehp_acpi_get_hp_hw_control_from_firmware(dev) | 288 | pciehp_acpi_get_hp_hw_control_from_firmware(dev) |
| 284 | static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev, | 289 | static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev, |
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 0d8fb6e607a1..6ab3b6cd2b54 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c | |||
| @@ -38,10 +38,6 @@ | |||
| 38 | 38 | ||
| 39 | #include "../pci.h" | 39 | #include "../pci.h" |
| 40 | #include "pciehp.h" | 40 | #include "pciehp.h" |
| 41 | #include <acpi/acpi.h> | ||
| 42 | #include <acpi/acpi_bus.h> | ||
| 43 | #include <acpi/actypes.h> | ||
| 44 | #include <linux/pci-acpi.h> | ||
| 45 | #ifdef DEBUG | 41 | #ifdef DEBUG |
| 46 | #define DBG_K_TRACE_ENTRY ((unsigned int)0x00000001) /* On function entry */ | 42 | #define DBG_K_TRACE_ENTRY ((unsigned int)0x00000001) /* On function entry */ |
| 47 | #define DBG_K_TRACE_EXIT ((unsigned int)0x00000002) /* On function exit */ | 43 | #define DBG_K_TRACE_EXIT ((unsigned int)0x00000002) /* On function exit */ |
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 4bf03fb67f8d..d8e9b95f0a1a 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
| @@ -1730,8 +1730,8 @@ dasd_flush_request_queue(struct dasd_device * device) | |||
| 1730 | req = elv_next_request(device->request_queue); | 1730 | req = elv_next_request(device->request_queue); |
| 1731 | if (req == NULL) | 1731 | if (req == NULL) |
| 1732 | break; | 1732 | break; |
| 1733 | dasd_end_request(req, 0); | ||
| 1734 | blkdev_dequeue_request(req); | 1733 | blkdev_dequeue_request(req); |
| 1734 | dasd_end_request(req, 0); | ||
| 1735 | } | 1735 | } |
| 1736 | spin_unlock_irq(&device->request_queue_lock); | 1736 | spin_unlock_irq(&device->request_queue_lock); |
| 1737 | } | 1737 | } |
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c index 7f6fdac74706..9d0c6e1a0e66 100644 --- a/drivers/s390/block/dasd_devmap.c +++ b/drivers/s390/block/dasd_devmap.c | |||
| @@ -48,18 +48,20 @@ struct dasd_devmap { | |||
| 48 | }; | 48 | }; |
| 49 | 49 | ||
| 50 | /* | 50 | /* |
| 51 | * dasd_servermap is used to store the server_id of all storage servers | 51 | * dasd_server_ssid_map contains a globally unique storage server subsystem ID. |
| 52 | * accessed by DASD device driver. | 52 | * dasd_server_ssid_list contains the list of all subsystem IDs accessed by |
| 53 | * the DASD device driver. | ||
| 53 | */ | 54 | */ |
| 54 | struct dasd_servermap { | 55 | struct dasd_server_ssid_map { |
| 55 | struct list_head list; | 56 | struct list_head list; |
| 56 | struct server_id { | 57 | struct server_id { |
| 57 | char vendor[4]; | 58 | char vendor[4]; |
| 58 | char serial[15]; | 59 | char serial[15]; |
| 59 | } sid; | 60 | } sid; |
| 61 | __u16 ssid; | ||
| 60 | }; | 62 | }; |
| 61 | 63 | ||
| 62 | static struct list_head dasd_serverlist; | 64 | static struct list_head dasd_server_ssid_list; |
| 63 | 65 | ||
| 64 | /* | 66 | /* |
| 65 | * Parameter parsing functions for dasd= parameter. The syntax is: | 67 | * Parameter parsing functions for dasd= parameter. The syntax is: |
| @@ -89,7 +91,7 @@ static char *dasd[256]; | |||
| 89 | module_param_array(dasd, charp, NULL, 0); | 91 | module_param_array(dasd, charp, NULL, 0); |
| 90 | 92 | ||
| 91 | /* | 93 | /* |
| 92 | * Single spinlock to protect devmap structures and lists. | 94 | * Single spinlock to protect devmap and servermap structures and lists. |
| 93 | */ | 95 | */ |
| 94 | static DEFINE_SPINLOCK(dasd_devmap_lock); | 96 | static DEFINE_SPINLOCK(dasd_devmap_lock); |
| 95 | 97 | ||
| @@ -264,8 +266,9 @@ dasd_parse_keyword( char *parsestring ) { | |||
| 264 | if (dasd_page_cache) | 266 | if (dasd_page_cache) |
| 265 | return residual_str; | 267 | return residual_str; |
| 266 | dasd_page_cache = | 268 | dasd_page_cache = |
| 267 | kmem_cache_create("dasd_page_cache", PAGE_SIZE, 0, | 269 | kmem_cache_create("dasd_page_cache", PAGE_SIZE, |
| 268 | SLAB_CACHE_DMA, NULL, NULL ); | 270 | PAGE_SIZE, SLAB_CACHE_DMA, |
| 271 | NULL, NULL ); | ||
| 269 | if (!dasd_page_cache) | 272 | if (!dasd_page_cache) |
| 270 | MESSAGE(KERN_WARNING, "%s", "Failed to create slab, " | 273 | MESSAGE(KERN_WARNING, "%s", "Failed to create slab, " |
| 271 | "fixed buffer mode disabled."); | 274 | "fixed buffer mode disabled."); |
| @@ -859,39 +862,6 @@ static struct attribute_group dasd_attr_group = { | |||
| 859 | }; | 862 | }; |
| 860 | 863 | ||
| 861 | /* | 864 | /* |
| 862 | * Check if the related storage server is already contained in the | ||
| 863 | * dasd_serverlist. If server is not contained, create new entry. | ||
| 864 | * Return 0 if server was already in serverlist, | ||
| 865 | * 1 if the server was added successfully | ||
| 866 | * <0 in case of error. | ||
| 867 | */ | ||
| 868 | static int | ||
| 869 | dasd_add_server(struct dasd_uid *uid) | ||
| 870 | { | ||
| 871 | struct dasd_servermap *new, *tmp; | ||
| 872 | |||
| 873 | /* check if server is already contained */ | ||
| 874 | list_for_each_entry(tmp, &dasd_serverlist, list) | ||
| 875 | // normale cmp? | ||
| 876 | if (strncmp(tmp->sid.vendor, uid->vendor, | ||
| 877 | sizeof(tmp->sid.vendor)) == 0 | ||
| 878 | && strncmp(tmp->sid.serial, uid->serial, | ||
| 879 | sizeof(tmp->sid.serial)) == 0) | ||
| 880 | return 0; | ||
| 881 | |||
| 882 | new = (struct dasd_servermap *) | ||
| 883 | kzalloc(sizeof(struct dasd_servermap), GFP_KERNEL); | ||
| 884 | if (!new) | ||
| 885 | return -ENOMEM; | ||
| 886 | |||
| 887 | strncpy(new->sid.vendor, uid->vendor, sizeof(new->sid.vendor)); | ||
| 888 | strncpy(new->sid.serial, uid->serial, sizeof(new->sid.serial)); | ||
| 889 | list_add(&new->list, &dasd_serverlist); | ||
| 890 | return 1; | ||
| 891 | } | ||
| 892 | |||
| 893 | |||
| 894 | /* | ||
| 895 | * Return copy of the device unique identifier. | 865 | * Return copy of the device unique identifier. |
| 896 | */ | 866 | */ |
| 897 | int | 867 | int |
| @@ -910,6 +880,9 @@ dasd_get_uid(struct ccw_device *cdev, struct dasd_uid *uid) | |||
| 910 | 880 | ||
| 911 | /* | 881 | /* |
| 912 | * Register the given device unique identifier into devmap struct. | 882 | * Register the given device unique identifier into devmap struct. |
| 883 | * In addition check if the related storage server subsystem ID is already | ||
| 884 | * contained in the dasd_server_ssid_list. If subsystem ID is not contained, | ||
| 885 | * create new entry. | ||
| 913 | * Return 0 if server was already in serverlist, | 886 | * Return 0 if server was already in serverlist, |
| 914 | * 1 if the server was added successful | 887 | * 1 if the server was added successful |
| 915 | * <0 in case of error. | 888 | * <0 in case of error. |
| @@ -918,16 +891,39 @@ int | |||
| 918 | dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid) | 891 | dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid) |
| 919 | { | 892 | { |
| 920 | struct dasd_devmap *devmap; | 893 | struct dasd_devmap *devmap; |
| 921 | int rc; | 894 | struct dasd_server_ssid_map *srv, *tmp; |
| 922 | 895 | ||
| 923 | devmap = dasd_find_busid(cdev->dev.bus_id); | 896 | devmap = dasd_find_busid(cdev->dev.bus_id); |
| 924 | if (IS_ERR(devmap)) | 897 | if (IS_ERR(devmap)) |
| 925 | return PTR_ERR(devmap); | 898 | return PTR_ERR(devmap); |
| 899 | |||
| 900 | /* generate entry for server_ssid_map */ | ||
| 901 | srv = (struct dasd_server_ssid_map *) | ||
| 902 | kzalloc(sizeof(struct dasd_server_ssid_map), GFP_KERNEL); | ||
| 903 | if (!srv) | ||
| 904 | return -ENOMEM; | ||
| 905 | strncpy(srv->sid.vendor, uid->vendor, sizeof(srv->sid.vendor) - 1); | ||
| 906 | strncpy(srv->sid.serial, uid->serial, sizeof(srv->sid.serial) - 1); | ||
| 907 | srv->ssid = uid->ssid; | ||
| 908 | |||
| 909 | /* server is already contained ? */ | ||
| 926 | spin_lock(&dasd_devmap_lock); | 910 | spin_lock(&dasd_devmap_lock); |
| 927 | devmap->uid = *uid; | 911 | devmap->uid = *uid; |
| 928 | rc = dasd_add_server(uid); | 912 | list_for_each_entry(tmp, &dasd_server_ssid_list, list) { |
| 913 | if (!memcmp(&srv->sid, &tmp->sid, | ||
| 914 | sizeof(struct dasd_server_ssid_map))) { | ||
| 915 | kfree(srv); | ||
| 916 | srv = NULL; | ||
| 917 | break; | ||
| 918 | } | ||
| 919 | } | ||
| 920 | |||
| 921 | /* add servermap to serverlist */ | ||
| 922 | if (srv) | ||
| 923 | list_add(&srv->list, &dasd_server_ssid_list); | ||
| 929 | spin_unlock(&dasd_devmap_lock); | 924 | spin_unlock(&dasd_devmap_lock); |
| 930 | return rc; | 925 | |
| 926 | return (srv ? 1 : 0); | ||
| 931 | } | 927 | } |
| 932 | EXPORT_SYMBOL_GPL(dasd_set_uid); | 928 | EXPORT_SYMBOL_GPL(dasd_set_uid); |
| 933 | 929 | ||
| @@ -995,7 +991,7 @@ dasd_devmap_init(void) | |||
| 995 | INIT_LIST_HEAD(&dasd_hashlists[i]); | 991 | INIT_LIST_HEAD(&dasd_hashlists[i]); |
| 996 | 992 | ||
| 997 | /* Initialize servermap structure. */ | 993 | /* Initialize servermap structure. */ |
| 998 | INIT_LIST_HEAD(&dasd_serverlist); | 994 | INIT_LIST_HEAD(&dasd_server_ssid_list); |
| 999 | return 0; | 995 | return 0; |
| 1000 | } | 996 | } |
| 1001 | 997 | ||
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 39c2281371b5..957ed5db98e4 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
| @@ -468,11 +468,11 @@ dasd_eckd_generate_uid(struct dasd_device *device, struct dasd_uid *uid) | |||
| 468 | return -ENODEV; | 468 | return -ENODEV; |
| 469 | 469 | ||
| 470 | memset(uid, 0, sizeof(struct dasd_uid)); | 470 | memset(uid, 0, sizeof(struct dasd_uid)); |
| 471 | strncpy(uid->vendor, confdata->ned1.HDA_manufacturer, | 471 | memcpy(uid->vendor, confdata->ned1.HDA_manufacturer, |
| 472 | sizeof(uid->vendor) - 1); | 472 | sizeof(uid->vendor) - 1); |
| 473 | EBCASC(uid->vendor, sizeof(uid->vendor) - 1); | 473 | EBCASC(uid->vendor, sizeof(uid->vendor) - 1); |
| 474 | strncpy(uid->serial, confdata->ned1.HDA_location, | 474 | memcpy(uid->serial, confdata->ned1.HDA_location, |
| 475 | sizeof(uid->serial) - 1); | 475 | sizeof(uid->serial) - 1); |
| 476 | EBCASC(uid->serial, sizeof(uid->serial) - 1); | 476 | EBCASC(uid->serial, sizeof(uid->serial) - 1); |
| 477 | uid->ssid = confdata->neq.subsystemID; | 477 | uid->ssid = confdata->neq.subsystemID; |
| 478 | if (confdata->ned2.sneq.flags == 0x40) { | 478 | if (confdata->ned2.sneq.flags == 0x40) { |
diff --git a/drivers/s390/block/xpram.c b/drivers/s390/block/xpram.c index 1140302ff11d..ca7d51f7eccc 100644 --- a/drivers/s390/block/xpram.c +++ b/drivers/s390/block/xpram.c | |||
| @@ -48,15 +48,6 @@ | |||
| 48 | #define PRINT_ERR(x...) printk(KERN_ERR XPRAM_NAME " error:" x) | 48 | #define PRINT_ERR(x...) printk(KERN_ERR XPRAM_NAME " error:" x) |
| 49 | 49 | ||
| 50 | 50 | ||
| 51 | static struct sysdev_class xpram_sysclass = { | ||
| 52 | set_kset_name("xpram"), | ||
| 53 | }; | ||
| 54 | |||
| 55 | static struct sys_device xpram_sys_device = { | ||
| 56 | .id = 0, | ||
| 57 | .cls = &xpram_sysclass, | ||
| 58 | }; | ||
| 59 | |||
| 60 | typedef struct { | 51 | typedef struct { |
| 61 | unsigned int size; /* size of xpram segment in pages */ | 52 | unsigned int size; /* size of xpram segment in pages */ |
| 62 | unsigned int offset; /* start page of xpram segment */ | 53 | unsigned int offset; /* start page of xpram segment */ |
| @@ -451,8 +442,6 @@ static void __exit xpram_exit(void) | |||
| 451 | } | 442 | } |
| 452 | unregister_blkdev(XPRAM_MAJOR, XPRAM_NAME); | 443 | unregister_blkdev(XPRAM_MAJOR, XPRAM_NAME); |
| 453 | blk_cleanup_queue(xpram_queue); | 444 | blk_cleanup_queue(xpram_queue); |
| 454 | sysdev_unregister(&xpram_sys_device); | ||
| 455 | sysdev_class_unregister(&xpram_sysclass); | ||
| 456 | } | 445 | } |
| 457 | 446 | ||
| 458 | static int __init xpram_init(void) | 447 | static int __init xpram_init(void) |
| @@ -470,19 +459,7 @@ static int __init xpram_init(void) | |||
| 470 | rc = xpram_setup_sizes(xpram_pages); | 459 | rc = xpram_setup_sizes(xpram_pages); |
| 471 | if (rc) | 460 | if (rc) |
| 472 | return rc; | 461 | return rc; |
| 473 | rc = sysdev_class_register(&xpram_sysclass); | 462 | return xpram_setup_blkdev(); |
| 474 | if (rc) | ||
| 475 | return rc; | ||
| 476 | |||
| 477 | rc = sysdev_register(&xpram_sys_device); | ||
| 478 | if (rc) { | ||
| 479 | sysdev_class_unregister(&xpram_sysclass); | ||
| 480 | return rc; | ||
| 481 | } | ||
| 482 | rc = xpram_setup_blkdev(); | ||
| 483 | if (rc) | ||
| 484 | sysdev_unregister(&xpram_sys_device); | ||
| 485 | return rc; | ||
| 486 | } | 463 | } |
| 487 | 464 | ||
| 488 | module_init(xpram_init); | 465 | module_init(xpram_init); |
diff --git a/drivers/s390/char/tape_class.c b/drivers/s390/char/tape_class.c index 643b6d078563..56b87618b100 100644 --- a/drivers/s390/char/tape_class.c +++ b/drivers/s390/char/tape_class.c | |||
| @@ -76,7 +76,7 @@ struct tape_class_device *register_tape_dev( | |||
| 76 | device, | 76 | device, |
| 77 | "%s", tcd->device_name | 77 | "%s", tcd->device_name |
| 78 | ); | 78 | ); |
| 79 | rc = PTR_ERR(tcd->class_device); | 79 | rc = IS_ERR(tcd->class_device) ? PTR_ERR(tcd->class_device) : 0; |
| 80 | if (rc) | 80 | if (rc) |
| 81 | goto fail_with_cdev; | 81 | goto fail_with_cdev; |
| 82 | rc = sysfs_create_link( | 82 | rc = sysfs_create_link( |
diff --git a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c index 7a39e0b0386c..6d91c2eb205b 100644 --- a/drivers/s390/cio/device_fsm.c +++ b/drivers/s390/cio/device_fsm.c | |||
| @@ -772,6 +772,7 @@ ccw_device_online_verify(struct ccw_device *cdev, enum dev_event dev_event) | |||
| 772 | stsch(sch->schid, &sch->schib); | 772 | stsch(sch->schid, &sch->schib); |
| 773 | 773 | ||
| 774 | if (sch->schib.scsw.actl != 0 || | 774 | if (sch->schib.scsw.actl != 0 || |
| 775 | (sch->schib.scsw.stctl & SCSW_STCTL_STATUS_PEND) || | ||
| 775 | (cdev->private->irb.scsw.stctl & SCSW_STCTL_STATUS_PEND)) { | 776 | (cdev->private->irb.scsw.stctl & SCSW_STCTL_STATUS_PEND)) { |
| 776 | /* | 777 | /* |
| 777 | * No final status yet or final status not yet delivered | 778 | * No final status yet or final status not yet delivered |
diff --git a/drivers/s390/cio/device_ops.c b/drivers/s390/cio/device_ops.c index a60124264bee..9e3de0bd59b5 100644 --- a/drivers/s390/cio/device_ops.c +++ b/drivers/s390/cio/device_ops.c | |||
| @@ -263,6 +263,9 @@ ccw_device_wake_up(struct ccw_device *cdev, unsigned long ip, struct irb *irb) | |||
| 263 | /* Abuse intparm for error reporting. */ | 263 | /* Abuse intparm for error reporting. */ |
| 264 | if (IS_ERR(irb)) | 264 | if (IS_ERR(irb)) |
| 265 | cdev->private->intparm = -EIO; | 265 | cdev->private->intparm = -EIO; |
| 266 | else if (irb->scsw.cc == 1) | ||
| 267 | /* Retry for deferred condition code. */ | ||
| 268 | cdev->private->intparm = -EAGAIN; | ||
| 266 | else if ((irb->scsw.dstat != | 269 | else if ((irb->scsw.dstat != |
| 267 | (DEV_STAT_CHN_END|DEV_STAT_DEV_END)) || | 270 | (DEV_STAT_CHN_END|DEV_STAT_DEV_END)) || |
| 268 | (irb->scsw.cstat != 0)) { | 271 | (irb->scsw.cstat != 0)) { |
diff --git a/drivers/scsi/arm/Kconfig b/drivers/scsi/arm/Kconfig index 06d7601cdf56..d006a8cb4a74 100644 --- a/drivers/scsi/arm/Kconfig +++ b/drivers/scsi/arm/Kconfig | |||
| @@ -69,6 +69,7 @@ comment "The following drivers are not fully supported" | |||
| 69 | config SCSI_CUMANA_1 | 69 | config SCSI_CUMANA_1 |
| 70 | tristate "CumanaSCSI I support (EXPERIMENTAL)" | 70 | tristate "CumanaSCSI I support (EXPERIMENTAL)" |
| 71 | depends on ARCH_ACORN && EXPERIMENTAL && SCSI | 71 | depends on ARCH_ACORN && EXPERIMENTAL && SCSI |
| 72 | select SCSI_SPI_ATTRS | ||
| 72 | help | 73 | help |
| 73 | This enables support for the Cumana SCSI I card. If you have an | 74 | This enables support for the Cumana SCSI I card. If you have an |
| 74 | Acorn system with one of these, say Y. If unsure, say N. | 75 | Acorn system with one of these, say Y. If unsure, say N. |
| @@ -76,6 +77,7 @@ config SCSI_CUMANA_1 | |||
| 76 | config SCSI_ECOSCSI | 77 | config SCSI_ECOSCSI |
| 77 | tristate "EcoScsi support (EXPERIMENTAL)" | 78 | tristate "EcoScsi support (EXPERIMENTAL)" |
| 78 | depends on ARCH_ACORN && EXPERIMENTAL && (ARCH_ARC || ARCH_A5K) && SCSI | 79 | depends on ARCH_ACORN && EXPERIMENTAL && (ARCH_ARC || ARCH_A5K) && SCSI |
| 80 | select SCSI_SPI_ATTRS | ||
| 79 | help | 81 | help |
| 80 | This enables support for the EcoSCSI card -- a small card that sits | 82 | This enables support for the EcoSCSI card -- a small card that sits |
| 81 | in the Econet socket. If you have an Acorn system with one of these, | 83 | in the Econet socket. If you have an Acorn system with one of these, |
| @@ -84,6 +86,7 @@ config SCSI_ECOSCSI | |||
| 84 | config SCSI_OAK1 | 86 | config SCSI_OAK1 |
| 85 | tristate "Oak SCSI support (EXPERIMENTAL)" | 87 | tristate "Oak SCSI support (EXPERIMENTAL)" |
| 86 | depends on ARCH_ACORN && EXPERIMENTAL && SCSI | 88 | depends on ARCH_ACORN && EXPERIMENTAL && SCSI |
| 89 | select SCSI_SPI_ATTRS | ||
| 87 | help | 90 | help |
| 88 | This enables support for the Oak SCSI card. If you have an Acorn | 91 | This enables support for the Oak SCSI card. If you have an Acorn |
| 89 | system with one of these, say Y. If unsure, say N. | 92 | system with one of these, say Y. If unsure, say N. |
diff --git a/drivers/scsi/arm/scsi.h b/drivers/scsi/arm/scsi.h index 6dd544a5eb56..8c2600ffc6af 100644 --- a/drivers/scsi/arm/scsi.h +++ b/drivers/scsi/arm/scsi.h | |||
| @@ -74,7 +74,7 @@ static inline void init_SCp(Scsi_Cmnd *SCpnt) | |||
| 74 | unsigned long len = 0; | 74 | unsigned long len = 0; |
| 75 | int buf; | 75 | int buf; |
| 76 | 76 | ||
| 77 | SCpnt->SCp.buffer = (struct scatterlist *) SCpnt->buffer; | 77 | SCpnt->SCp.buffer = (struct scatterlist *) SCpnt->request_buffer; |
| 78 | SCpnt->SCp.buffers_residual = SCpnt->use_sg - 1; | 78 | SCpnt->SCp.buffers_residual = SCpnt->use_sg - 1; |
| 79 | SCpnt->SCp.ptr = (char *) | 79 | SCpnt->SCp.ptr = (char *) |
| 80 | (page_address(SCpnt->SCp.buffer->page) + | 80 | (page_address(SCpnt->SCp.buffer->page) + |
diff --git a/drivers/usb/host/ohci-au1xxx.c b/drivers/usb/host/ohci-au1xxx.c index 822914e2f43b..f7a975d5db09 100644 --- a/drivers/usb/host/ohci-au1xxx.c +++ b/drivers/usb/host/ohci-au1xxx.c | |||
| @@ -110,7 +110,6 @@ static void au1xxx_start_ohc(struct platform_device *dev) | |||
| 110 | 110 | ||
| 111 | printk(KERN_DEBUG __FILE__ | 111 | printk(KERN_DEBUG __FILE__ |
| 112 | ": Clock to USB host has been enabled \n"); | 112 | ": Clock to USB host has been enabled \n"); |
| 113 | #endif | ||
| 114 | } | 113 | } |
| 115 | 114 | ||
| 116 | static void au1xxx_stop_ohc(struct platform_device *dev) | 115 | static void au1xxx_stop_ohc(struct platform_device *dev) |
diff --git a/drivers/usb/input/appletouch.c b/drivers/usb/input/appletouch.c index 9e3f13903371..044faa07e297 100644 --- a/drivers/usb/input/appletouch.c +++ b/drivers/usb/input/appletouch.c | |||
| @@ -597,9 +597,9 @@ static void atp_disconnect(struct usb_interface *iface) | |||
| 597 | if (dev) { | 597 | if (dev) { |
| 598 | usb_kill_urb(dev->urb); | 598 | usb_kill_urb(dev->urb); |
| 599 | input_unregister_device(dev->input); | 599 | input_unregister_device(dev->input); |
| 600 | usb_free_urb(dev->urb); | ||
| 601 | usb_buffer_free(dev->udev, dev->datalen, | 600 | usb_buffer_free(dev->udev, dev->datalen, |
| 602 | dev->data, dev->urb->transfer_dma); | 601 | dev->data, dev->urb->transfer_dma); |
| 602 | usb_free_urb(dev->urb); | ||
| 603 | kfree(dev); | 603 | kfree(dev); |
| 604 | } | 604 | } |
| 605 | printk(KERN_INFO "input: appletouch disconnected\n"); | 605 | printk(KERN_INFO "input: appletouch disconnected\n"); |
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c index 786e1dbe88ec..983e104dd452 100644 --- a/drivers/usb/misc/usbtest.c +++ b/drivers/usb/misc/usbtest.c | |||
| @@ -1242,11 +1242,12 @@ done: | |||
| 1242 | static int ctrl_out (struct usbtest_dev *dev, | 1242 | static int ctrl_out (struct usbtest_dev *dev, |
| 1243 | unsigned count, unsigned length, unsigned vary) | 1243 | unsigned count, unsigned length, unsigned vary) |
| 1244 | { | 1244 | { |
| 1245 | unsigned i, j, len, retval; | 1245 | unsigned i, j, len; |
| 1246 | int retval; | ||
| 1246 | u8 *buf; | 1247 | u8 *buf; |
| 1247 | char *what = "?"; | 1248 | char *what = "?"; |
| 1248 | struct usb_device *udev; | 1249 | struct usb_device *udev; |
| 1249 | 1250 | ||
| 1250 | if (length < 1 || length > 0xffff || vary >= length) | 1251 | if (length < 1 || length > 0xffff || vary >= length) |
| 1251 | return -EINVAL; | 1252 | return -EINVAL; |
| 1252 | 1253 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index a20da8528a5f..15945e806f03 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -306,6 +306,8 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = { | |||
| 306 | 306 | ||
| 307 | 307 | ||
| 308 | static struct usb_device_id id_table_combined [] = { | 308 | static struct usb_device_id id_table_combined [] = { |
| 309 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, | ||
| 310 | { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, | ||
| 309 | { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) }, | 311 | { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) }, |
| 310 | { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) }, | 312 | { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) }, |
| 311 | { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) }, | 313 | { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) }, |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index 9f7343a45424..8888cd80a491 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
| @@ -32,6 +32,12 @@ | |||
| 32 | #define FTDI_NF_RIC_PID 0x0001 /* Product Id */ | 32 | #define FTDI_NF_RIC_PID 0x0001 /* Product Id */ |
| 33 | 33 | ||
| 34 | 34 | ||
| 35 | /* www.canusb.com Lawicel CANUSB device */ | ||
| 36 | #define FTDI_CANUSB_PID 0xFFA8 /* Product Id */ | ||
| 37 | |||
| 38 | /* AlphaMicro Components AMC-232USB01 device */ | ||
| 39 | #define FTDI_AMC232_PID 0xFF00 /* Product Id */ | ||
| 40 | |||
| 35 | /* ACT Solutions HomePro ZWave interface (http://www.act-solutions.com/HomePro.htm) */ | 41 | /* ACT Solutions HomePro ZWave interface (http://www.act-solutions.com/HomePro.htm) */ |
| 36 | #define FTDI_ACTZWAVE_PID 0xF2D0 | 42 | #define FTDI_ACTZWAVE_PID 0xF2D0 |
| 37 | 43 | ||
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c index 7e1bd5d6dfa0..9840bade79f9 100644 --- a/drivers/usb/serial/ipaq.c +++ b/drivers/usb/serial/ipaq.c | |||
| @@ -251,6 +251,8 @@ static struct usb_device_id ipaq_id_table [] = { | |||
| 251 | { USB_DEVICE(0x04C5, 0x1079) }, /* FUJITSU USB Sync */ | 251 | { USB_DEVICE(0x04C5, 0x1079) }, /* FUJITSU USB Sync */ |
| 252 | { USB_DEVICE(0x04DA, 0x2500) }, /* Panasonic USB Sync */ | 252 | { USB_DEVICE(0x04DA, 0x2500) }, /* Panasonic USB Sync */ |
| 253 | { USB_DEVICE(0x04DD, 0x9102) }, /* SHARP WS003SH USB Modem */ | 253 | { USB_DEVICE(0x04DD, 0x9102) }, /* SHARP WS003SH USB Modem */ |
| 254 | { USB_DEVICE(0x04DD, 0x9121) }, /* SHARP WS004SH USB Modem */ | ||
| 255 | { USB_DEVICE(0x04DD, 0x9123) }, /* SHARP WS007SH USB Modem */ | ||
| 254 | { USB_DEVICE(0x04E8, 0x5F00) }, /* Samsung NEXiO USB Sync */ | 256 | { USB_DEVICE(0x04E8, 0x5F00) }, /* Samsung NEXiO USB Sync */ |
| 255 | { USB_DEVICE(0x04E8, 0x5F01) }, /* Samsung NEXiO USB Sync */ | 257 | { USB_DEVICE(0x04E8, 0x5F01) }, /* Samsung NEXiO USB Sync */ |
| 256 | { USB_DEVICE(0x04E8, 0x5F02) }, /* Samsung NEXiO USB Sync */ | 258 | { USB_DEVICE(0x04E8, 0x5F02) }, /* Samsung NEXiO USB Sync */ |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 2793f9a912b4..fd158e063c06 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -1240,6 +1240,16 @@ UNUSUAL_DEV( 0x0ed1, 0x7636, 0x0103, 0x0103, | |||
| 1240 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1240 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 1241 | US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64), | 1241 | US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64), |
| 1242 | 1242 | ||
| 1243 | /* David Kuehling <dvdkhlng@gmx.de>: | ||
| 1244 | * for MP3-Player AVOX WSX-300ER (bought in Japan). Reports lots of SCSI | ||
| 1245 | * errors when trying to write. | ||
| 1246 | */ | ||
| 1247 | UNUSUAL_DEV( 0x0f19, 0x0105, 0x0100, 0x0100, | ||
| 1248 | "C-MEX", | ||
| 1249 | "A-VOX", | ||
| 1250 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 1251 | US_FL_IGNORE_RESIDUE ), | ||
| 1252 | |||
| 1243 | /* Reported by Michael Stattmann <michael@stattmann.com> */ | 1253 | /* Reported by Michael Stattmann <michael@stattmann.com> */ |
| 1244 | UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000, | 1254 | UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000, |
| 1245 | "Sony Ericsson", | 1255 | "Sony Ericsson", |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index c40b9b8b1e7e..702eb933cf88 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
| @@ -554,7 +554,7 @@ config FB_VESA | |||
| 554 | 554 | ||
| 555 | config FB_IMAC | 555 | config FB_IMAC |
| 556 | bool "Intel-based Macintosh Framebuffer Support" | 556 | bool "Intel-based Macintosh Framebuffer Support" |
| 557 | depends on (FB = y) && X86 | 557 | depends on (FB = y) && X86 && EFI |
| 558 | select FB_CFB_FILLRECT | 558 | select FB_CFB_FILLRECT |
| 559 | select FB_CFB_COPYAREA | 559 | select FB_CFB_COPYAREA |
| 560 | select FB_CFB_IMAGEBLIT | 560 | select FB_CFB_IMAGEBLIT |
diff --git a/drivers/video/imacfb.c b/drivers/video/imacfb.c index ff233b84dec4..b485bece5fc9 100644 --- a/drivers/video/imacfb.c +++ b/drivers/video/imacfb.c | |||
| @@ -18,6 +18,8 @@ | |||
| 18 | #include <linux/screen_info.h> | 18 | #include <linux/screen_info.h> |
| 19 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
| 20 | #include <linux/string.h> | 20 | #include <linux/string.h> |
| 21 | #include <linux/dmi.h> | ||
| 22 | #include <linux/efi.h> | ||
| 21 | 23 | ||
| 22 | #include <asm/io.h> | 24 | #include <asm/io.h> |
| 23 | 25 | ||
| @@ -28,7 +30,7 @@ typedef enum _MAC_TYPE { | |||
| 28 | M_I20, | 30 | M_I20, |
| 29 | M_MINI, | 31 | M_MINI, |
| 30 | M_MACBOOK, | 32 | M_MACBOOK, |
| 31 | M_NEW | 33 | M_UNKNOWN |
| 32 | } MAC_TYPE; | 34 | } MAC_TYPE; |
| 33 | 35 | ||
| 34 | /* --------------------------------------------------------------------- */ | 36 | /* --------------------------------------------------------------------- */ |
| @@ -52,10 +54,36 @@ static struct fb_fix_screeninfo imacfb_fix __initdata = { | |||
| 52 | }; | 54 | }; |
| 53 | 55 | ||
| 54 | static int inverse; | 56 | static int inverse; |
| 55 | static int model = M_NEW; | 57 | static int model = M_UNKNOWN; |
| 56 | static int manual_height; | 58 | static int manual_height; |
| 57 | static int manual_width; | 59 | static int manual_width; |
| 58 | 60 | ||
| 61 | static int set_system(struct dmi_system_id *id) | ||
| 62 | { | ||
| 63 | printk(KERN_INFO "imacfb: %s detected - set system to %ld\n", | ||
| 64 | id->ident, (long)id->driver_data); | ||
| 65 | |||
| 66 | model = (long)id->driver_data; | ||
| 67 | |||
| 68 | return 0; | ||
| 69 | } | ||
| 70 | |||
| 71 | static struct dmi_system_id __initdata dmi_system_table[] = { | ||
| 72 | { set_system, "iMac4,1", { | ||
| 73 | DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."), | ||
| 74 | DMI_MATCH(DMI_BIOS_VERSION,"iMac4,1") }, (void*)M_I17}, | ||
| 75 | { set_system, "MacBookPro1,1", { | ||
| 76 | DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."), | ||
| 77 | DMI_MATCH(DMI_BIOS_VERSION,"MacBookPro1,1") }, (void*)M_I17}, | ||
| 78 | { set_system, "MacBook1,1", { | ||
| 79 | DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."), | ||
| 80 | DMI_MATCH(DMI_PRODUCT_NAME,"MacBook1,1")}, (void *)M_MACBOOK}, | ||
| 81 | { set_system, "Macmini1,1", { | ||
| 82 | DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."), | ||
| 83 | DMI_MATCH(DMI_PRODUCT_NAME,"Macmini1,1")}, (void *)M_MINI}, | ||
| 84 | {}, | ||
| 85 | }; | ||
| 86 | |||
| 59 | #define DEFAULT_FB_MEM 1024*1024*16 | 87 | #define DEFAULT_FB_MEM 1024*1024*16 |
| 60 | 88 | ||
| 61 | /* --------------------------------------------------------------------- */ | 89 | /* --------------------------------------------------------------------- */ |
| @@ -149,7 +177,6 @@ static int __init imacfb_probe(struct platform_device *dev) | |||
| 149 | screen_info.lfb_linelength = 1472 * 4; | 177 | screen_info.lfb_linelength = 1472 * 4; |
| 150 | screen_info.lfb_base = 0x80010000; | 178 | screen_info.lfb_base = 0x80010000; |
| 151 | break; | 179 | break; |
| 152 | case M_NEW: | ||
| 153 | case M_I20: | 180 | case M_I20: |
| 154 | screen_info.lfb_width = 1680; | 181 | screen_info.lfb_width = 1680; |
| 155 | screen_info.lfb_height = 1050; | 182 | screen_info.lfb_height = 1050; |
| @@ -207,6 +234,10 @@ static int __init imacfb_probe(struct platform_device *dev) | |||
| 207 | size_remap = size_total; | 234 | size_remap = size_total; |
| 208 | imacfb_fix.smem_len = size_remap; | 235 | imacfb_fix.smem_len = size_remap; |
| 209 | 236 | ||
| 237 | #ifndef __i386__ | ||
| 238 | screen_info.imacpm_seg = 0; | ||
| 239 | #endif | ||
| 240 | |||
| 210 | if (!request_mem_region(imacfb_fix.smem_start, size_total, "imacfb")) { | 241 | if (!request_mem_region(imacfb_fix.smem_start, size_total, "imacfb")) { |
| 211 | printk(KERN_WARNING | 242 | printk(KERN_WARNING |
| 212 | "imacfb: cannot reserve video memory at 0x%lx\n", | 243 | "imacfb: cannot reserve video memory at 0x%lx\n", |
| @@ -324,8 +355,16 @@ static int __init imacfb_init(void) | |||
| 324 | int ret; | 355 | int ret; |
| 325 | char *option = NULL; | 356 | char *option = NULL; |
| 326 | 357 | ||
| 327 | /* ignore error return of fb_get_options */ | 358 | if (!efi_enabled) |
| 328 | fb_get_options("imacfb", &option); | 359 | return -ENODEV; |
| 360 | if (!dmi_check_system(dmi_system_table)) | ||
| 361 | return -ENODEV; | ||
| 362 | if (model == M_UNKNOWN) | ||
| 363 | return -ENODEV; | ||
| 364 | |||
| 365 | if (fb_get_options("imacfb", &option)) | ||
| 366 | return -ENODEV; | ||
| 367 | |||
| 329 | imacfb_setup(option); | 368 | imacfb_setup(option); |
| 330 | ret = platform_driver_register(&imacfb_driver); | 369 | ret = platform_driver_register(&imacfb_driver); |
| 331 | 370 | ||
diff --git a/fs/adfs/super.c b/fs/adfs/super.c index ba1c88af49fe..82011019494c 100644 --- a/fs/adfs/super.c +++ b/fs/adfs/super.c | |||
| @@ -308,7 +308,7 @@ static struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_di | |||
| 308 | if (adfs_checkmap(sb, dm)) | 308 | if (adfs_checkmap(sb, dm)) |
| 309 | return dm; | 309 | return dm; |
| 310 | 310 | ||
| 311 | adfs_error(sb, NULL, "map corrupted"); | 311 | adfs_error(sb, "map corrupted"); |
| 312 | 312 | ||
| 313 | error_free: | 313 | error_free: |
| 314 | while (--zone >= 0) | 314 | while (--zone >= 0) |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 63614ed16336..5c4fcd1dbf59 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
| @@ -395,14 +395,16 @@ static int fuse_readpages(struct file *file, struct address_space *mapping, | |||
| 395 | struct fuse_readpages_data data; | 395 | struct fuse_readpages_data data; |
| 396 | int err; | 396 | int err; |
| 397 | 397 | ||
| 398 | err = -EIO; | ||
| 398 | if (is_bad_inode(inode)) | 399 | if (is_bad_inode(inode)) |
| 399 | return -EIO; | 400 | goto clean_pages_up; |
| 400 | 401 | ||
| 401 | data.file = file; | 402 | data.file = file; |
| 402 | data.inode = inode; | 403 | data.inode = inode; |
| 403 | data.req = fuse_get_req(fc); | 404 | data.req = fuse_get_req(fc); |
| 405 | err = PTR_ERR(data.req); | ||
| 404 | if (IS_ERR(data.req)) | 406 | if (IS_ERR(data.req)) |
| 405 | return PTR_ERR(data.req); | 407 | goto clean_pages_up; |
| 406 | 408 | ||
| 407 | err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data); | 409 | err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data); |
| 408 | if (!err) { | 410 | if (!err) { |
| @@ -412,6 +414,10 @@ static int fuse_readpages(struct file *file, struct address_space *mapping, | |||
| 412 | fuse_put_request(fc, data.req); | 414 | fuse_put_request(fc, data.req); |
| 413 | } | 415 | } |
| 414 | return err; | 416 | return err; |
| 417 | |||
| 418 | clean_pages_up: | ||
| 419 | put_pages_list(pages); | ||
| 420 | return err; | ||
| 415 | } | 421 | } |
| 416 | 422 | ||
| 417 | static size_t fuse_send_write(struct fuse_req *req, struct file *file, | 423 | static size_t fuse_send_write(struct fuse_req *req, struct file *file, |
diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c index 43e3f566aad6..a223cf4faa9b 100644 --- a/fs/jfs/inode.c +++ b/fs/jfs/inode.c | |||
| @@ -168,16 +168,15 @@ void jfs_dirty_inode(struct inode *inode) | |||
| 168 | set_cflag(COMMIT_Dirty, inode); | 168 | set_cflag(COMMIT_Dirty, inode); |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | static int | 171 | int jfs_get_block(struct inode *ip, sector_t lblock, |
| 172 | jfs_get_blocks(struct inode *ip, sector_t lblock, unsigned long max_blocks, | 172 | struct buffer_head *bh_result, int create) |
| 173 | struct buffer_head *bh_result, int create) | ||
| 174 | { | 173 | { |
| 175 | s64 lblock64 = lblock; | 174 | s64 lblock64 = lblock; |
| 176 | int rc = 0; | 175 | int rc = 0; |
| 177 | xad_t xad; | 176 | xad_t xad; |
| 178 | s64 xaddr; | 177 | s64 xaddr; |
| 179 | int xflag; | 178 | int xflag; |
| 180 | s32 xlen = max_blocks; | 179 | s32 xlen = bh_result->b_size >> ip->i_blkbits; |
| 181 | 180 | ||
| 182 | /* | 181 | /* |
| 183 | * Take appropriate lock on inode | 182 | * Take appropriate lock on inode |
| @@ -188,7 +187,7 @@ jfs_get_blocks(struct inode *ip, sector_t lblock, unsigned long max_blocks, | |||
| 188 | IREAD_LOCK(ip); | 187 | IREAD_LOCK(ip); |
| 189 | 188 | ||
| 190 | if (((lblock64 << ip->i_sb->s_blocksize_bits) < ip->i_size) && | 189 | if (((lblock64 << ip->i_sb->s_blocksize_bits) < ip->i_size) && |
| 191 | (!xtLookup(ip, lblock64, max_blocks, &xflag, &xaddr, &xlen, 0)) && | 190 | (!xtLookup(ip, lblock64, xlen, &xflag, &xaddr, &xlen, 0)) && |
| 192 | xaddr) { | 191 | xaddr) { |
| 193 | if (xflag & XAD_NOTRECORDED) { | 192 | if (xflag & XAD_NOTRECORDED) { |
| 194 | if (!create) | 193 | if (!create) |
| @@ -255,13 +254,6 @@ jfs_get_blocks(struct inode *ip, sector_t lblock, unsigned long max_blocks, | |||
| 255 | return rc; | 254 | return rc; |
| 256 | } | 255 | } |
| 257 | 256 | ||
| 258 | static int jfs_get_block(struct inode *ip, sector_t lblock, | ||
| 259 | struct buffer_head *bh_result, int create) | ||
| 260 | { | ||
| 261 | return jfs_get_blocks(ip, lblock, bh_result->b_size >> ip->i_blkbits, | ||
| 262 | bh_result, create); | ||
| 263 | } | ||
| 264 | |||
| 265 | static int jfs_writepage(struct page *page, struct writeback_control *wbc) | 257 | static int jfs_writepage(struct page *page, struct writeback_control *wbc) |
| 266 | { | 258 | { |
| 267 | return nobh_writepage(page, jfs_get_block, wbc); | 259 | return nobh_writepage(page, jfs_get_block, wbc); |
diff --git a/fs/jfs/jfs_inode.h b/fs/jfs/jfs_inode.h index b5c7da6190dc..1fc48df670c8 100644 --- a/fs/jfs/jfs_inode.h +++ b/fs/jfs/jfs_inode.h | |||
| @@ -32,6 +32,7 @@ extern void jfs_truncate_nolock(struct inode *, loff_t); | |||
| 32 | extern void jfs_free_zero_link(struct inode *); | 32 | extern void jfs_free_zero_link(struct inode *); |
| 33 | extern struct dentry *jfs_get_parent(struct dentry *dentry); | 33 | extern struct dentry *jfs_get_parent(struct dentry *dentry); |
| 34 | extern void jfs_set_inode_flags(struct inode *); | 34 | extern void jfs_set_inode_flags(struct inode *); |
| 35 | extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int); | ||
| 35 | 36 | ||
| 36 | extern const struct address_space_operations jfs_aops; | 37 | extern const struct address_space_operations jfs_aops; |
| 37 | extern struct inode_operations jfs_dir_inode_operations; | 38 | extern struct inode_operations jfs_dir_inode_operations; |
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index 4f6cfebc82db..143bcd1d5eaa 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <linux/moduleparam.h> | 26 | #include <linux/moduleparam.h> |
| 27 | #include <linux/kthread.h> | 27 | #include <linux/kthread.h> |
| 28 | #include <linux/posix_acl.h> | 28 | #include <linux/posix_acl.h> |
| 29 | #include <linux/buffer_head.h> | ||
| 29 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
| 30 | #include <linux/seq_file.h> | 31 | #include <linux/seq_file.h> |
| 31 | 32 | ||
| @@ -298,7 +299,7 @@ static int parse_options(char *options, struct super_block *sb, s64 *newLVSize, | |||
| 298 | break; | 299 | break; |
| 299 | } | 300 | } |
| 300 | 301 | ||
| 301 | #if defined(CONFIG_QUOTA) | 302 | #ifdef CONFIG_QUOTA |
| 302 | case Opt_quota: | 303 | case Opt_quota: |
| 303 | case Opt_usrquota: | 304 | case Opt_usrquota: |
| 304 | *flag |= JFS_USRQUOTA; | 305 | *flag |= JFS_USRQUOTA; |
| @@ -597,7 +598,7 @@ static int jfs_show_options(struct seq_file *seq, struct vfsmount *vfs) | |||
| 597 | if (sbi->flag & JFS_NOINTEGRITY) | 598 | if (sbi->flag & JFS_NOINTEGRITY) |
| 598 | seq_puts(seq, ",nointegrity"); | 599 | seq_puts(seq, ",nointegrity"); |
| 599 | 600 | ||
| 600 | #if defined(CONFIG_QUOTA) | 601 | #ifdef CONFIG_QUOTA |
| 601 | if (sbi->flag & JFS_USRQUOTA) | 602 | if (sbi->flag & JFS_USRQUOTA) |
| 602 | seq_puts(seq, ",usrquota"); | 603 | seq_puts(seq, ",usrquota"); |
| 603 | 604 | ||
| @@ -608,6 +609,113 @@ static int jfs_show_options(struct seq_file *seq, struct vfsmount *vfs) | |||
| 608 | return 0; | 609 | return 0; |
| 609 | } | 610 | } |
| 610 | 611 | ||
| 612 | #ifdef CONFIG_QUOTA | ||
| 613 | |||
| 614 | /* Read data from quotafile - avoid pagecache and such because we cannot afford | ||
| 615 | * acquiring the locks... As quota files are never truncated and quota code | ||
| 616 | * itself serializes the operations (and noone else should touch the files) | ||
| 617 | * we don't have to be afraid of races */ | ||
| 618 | static ssize_t jfs_quota_read(struct super_block *sb, int type, char *data, | ||
| 619 | size_t len, loff_t off) | ||
| 620 | { | ||
| 621 | struct inode *inode = sb_dqopt(sb)->files[type]; | ||
| 622 | sector_t blk = off >> sb->s_blocksize_bits; | ||
| 623 | int err = 0; | ||
| 624 | int offset = off & (sb->s_blocksize - 1); | ||
| 625 | int tocopy; | ||
| 626 | size_t toread; | ||
| 627 | struct buffer_head tmp_bh; | ||
| 628 | struct buffer_head *bh; | ||
| 629 | loff_t i_size = i_size_read(inode); | ||
| 630 | |||
| 631 | if (off > i_size) | ||
| 632 | return 0; | ||
| 633 | if (off+len > i_size) | ||
| 634 | len = i_size-off; | ||
| 635 | toread = len; | ||
| 636 | while (toread > 0) { | ||
| 637 | tocopy = sb->s_blocksize - offset < toread ? | ||
| 638 | sb->s_blocksize - offset : toread; | ||
| 639 | |||
| 640 | tmp_bh.b_state = 0; | ||
| 641 | tmp_bh.b_size = 1 << inode->i_blkbits; | ||
| 642 | err = jfs_get_block(inode, blk, &tmp_bh, 0); | ||
| 643 | if (err) | ||
| 644 | return err; | ||
| 645 | if (!buffer_mapped(&tmp_bh)) /* A hole? */ | ||
| 646 | memset(data, 0, tocopy); | ||
| 647 | else { | ||
| 648 | bh = sb_bread(sb, tmp_bh.b_blocknr); | ||
| 649 | if (!bh) | ||
| 650 | return -EIO; | ||
| 651 | memcpy(data, bh->b_data+offset, tocopy); | ||
| 652 | brelse(bh); | ||
| 653 | } | ||
| 654 | offset = 0; | ||
| 655 | toread -= tocopy; | ||
| 656 | data += tocopy; | ||
| 657 | blk++; | ||
| 658 | } | ||
| 659 | return len; | ||
| 660 | } | ||
| 661 | |||
| 662 | /* Write to quotafile */ | ||
| 663 | static ssize_t jfs_quota_write(struct super_block *sb, int type, | ||
| 664 | const char *data, size_t len, loff_t off) | ||
| 665 | { | ||
| 666 | struct inode *inode = sb_dqopt(sb)->files[type]; | ||
| 667 | sector_t blk = off >> sb->s_blocksize_bits; | ||
| 668 | int err = 0; | ||
| 669 | int offset = off & (sb->s_blocksize - 1); | ||
| 670 | int tocopy; | ||
| 671 | size_t towrite = len; | ||
| 672 | struct buffer_head tmp_bh; | ||
| 673 | struct buffer_head *bh; | ||
| 674 | |||
| 675 | mutex_lock(&inode->i_mutex); | ||
| 676 | while (towrite > 0) { | ||
| 677 | tocopy = sb->s_blocksize - offset < towrite ? | ||
| 678 | sb->s_blocksize - offset : towrite; | ||
| 679 | |||
| 680 | tmp_bh.b_state = 0; | ||
| 681 | tmp_bh.b_size = 1 << inode->i_blkbits; | ||
| 682 | err = jfs_get_block(inode, blk, &tmp_bh, 1); | ||
| 683 | if (err) | ||
| 684 | goto out; | ||
| 685 | if (offset || tocopy != sb->s_blocksize) | ||
| 686 | bh = sb_bread(sb, tmp_bh.b_blocknr); | ||
| 687 | else | ||
| 688 | bh = sb_getblk(sb, tmp_bh.b_blocknr); | ||
| 689 | if (!bh) { | ||
| 690 | err = -EIO; | ||
| 691 | goto out; | ||
| 692 | } | ||
| 693 | lock_buffer(bh); | ||
| 694 | memcpy(bh->b_data+offset, data, tocopy); | ||
| 695 | flush_dcache_page(bh->b_page); | ||
| 696 | set_buffer_uptodate(bh); | ||
| 697 | mark_buffer_dirty(bh); | ||
| 698 | unlock_buffer(bh); | ||
| 699 | brelse(bh); | ||
| 700 | offset = 0; | ||
| 701 | towrite -= tocopy; | ||
| 702 | data += tocopy; | ||
| 703 | blk++; | ||
| 704 | } | ||
| 705 | out: | ||
| 706 | if (len == towrite) | ||
| 707 | return err; | ||
| 708 | if (inode->i_size < off+len-towrite) | ||
| 709 | i_size_write(inode, off+len-towrite); | ||
| 710 | inode->i_version++; | ||
| 711 | inode->i_mtime = inode->i_ctime = CURRENT_TIME; | ||
| 712 | mark_inode_dirty(inode); | ||
| 713 | mutex_unlock(&inode->i_mutex); | ||
| 714 | return len - towrite; | ||
| 715 | } | ||
| 716 | |||
| 717 | #endif | ||
| 718 | |||
| 611 | static struct super_operations jfs_super_operations = { | 719 | static struct super_operations jfs_super_operations = { |
| 612 | .alloc_inode = jfs_alloc_inode, | 720 | .alloc_inode = jfs_alloc_inode, |
| 613 | .destroy_inode = jfs_destroy_inode, | 721 | .destroy_inode = jfs_destroy_inode, |
| @@ -621,7 +729,11 @@ static struct super_operations jfs_super_operations = { | |||
| 621 | .unlockfs = jfs_unlockfs, | 729 | .unlockfs = jfs_unlockfs, |
| 622 | .statfs = jfs_statfs, | 730 | .statfs = jfs_statfs, |
| 623 | .remount_fs = jfs_remount, | 731 | .remount_fs = jfs_remount, |
| 624 | .show_options = jfs_show_options | 732 | .show_options = jfs_show_options, |
| 733 | #ifdef CONFIG_QUOTA | ||
| 734 | .quota_read = jfs_quota_read, | ||
| 735 | .quota_write = jfs_quota_write, | ||
| 736 | #endif | ||
| 625 | }; | 737 | }; |
| 626 | 738 | ||
| 627 | static struct export_operations jfs_export_operations = { | 739 | static struct export_operations jfs_export_operations = { |
diff --git a/fs/locks.c b/fs/locks.c index b0b41a64e10b..d7c53392cac1 100644 --- a/fs/locks.c +++ b/fs/locks.c | |||
| @@ -1421,8 +1421,9 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp) | |||
| 1421 | if (!leases_enable) | 1421 | if (!leases_enable) |
| 1422 | goto out; | 1422 | goto out; |
| 1423 | 1423 | ||
| 1424 | error = lease_alloc(filp, arg, &fl); | 1424 | error = -ENOMEM; |
| 1425 | if (error) | 1425 | fl = locks_alloc_lock(); |
| 1426 | if (fl == NULL) | ||
| 1426 | goto out; | 1427 | goto out; |
| 1427 | 1428 | ||
| 1428 | locks_copy_lock(fl, lease); | 1429 | locks_copy_lock(fl, lease); |
| @@ -1430,6 +1431,7 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp) | |||
| 1430 | locks_insert_lock(before, fl); | 1431 | locks_insert_lock(before, fl); |
| 1431 | 1432 | ||
| 1432 | *flp = fl; | 1433 | *flp = fl; |
| 1434 | error = 0; | ||
| 1433 | out: | 1435 | out: |
| 1434 | return error; | 1436 | return error; |
| 1435 | } | 1437 | } |
diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c index 1b8346dd0572..9503240ef0e5 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c | |||
| @@ -2375,7 +2375,6 @@ leave: | |||
| 2375 | mlog(0, "returning %d\n", ret); | 2375 | mlog(0, "returning %d\n", ret); |
| 2376 | return ret; | 2376 | return ret; |
| 2377 | } | 2377 | } |
| 2378 | EXPORT_SYMBOL_GPL(dlm_migrate_lockres); | ||
| 2379 | 2378 | ||
| 2380 | int dlm_lock_basts_flushed(struct dlm_ctxt *dlm, struct dlm_lock *lock) | 2379 | int dlm_lock_basts_flushed(struct dlm_ctxt *dlm, struct dlm_lock *lock) |
| 2381 | { | 2380 | { |
diff --git a/fs/ocfs2/dlm/dlmunlock.c b/fs/ocfs2/dlm/dlmunlock.c index b0c3134f4f70..37be4b2e0d4a 100644 --- a/fs/ocfs2/dlm/dlmunlock.c +++ b/fs/ocfs2/dlm/dlmunlock.c | |||
| @@ -155,7 +155,7 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm, | |||
| 155 | else | 155 | else |
| 156 | status = dlm_get_unlock_actions(dlm, res, lock, lksb, &actions); | 156 | status = dlm_get_unlock_actions(dlm, res, lock, lksb, &actions); |
| 157 | 157 | ||
| 158 | if (status != DLM_NORMAL) | 158 | if (status != DLM_NORMAL && (status != DLM_CANCELGRANT || !master_node)) |
| 159 | goto leave; | 159 | goto leave; |
| 160 | 160 | ||
| 161 | /* By now this has been masked out of cancel requests. */ | 161 | /* By now this has been masked out of cancel requests. */ |
| @@ -183,8 +183,7 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm, | |||
| 183 | spin_lock(&lock->spinlock); | 183 | spin_lock(&lock->spinlock); |
| 184 | /* if the master told us the lock was already granted, | 184 | /* if the master told us the lock was already granted, |
| 185 | * let the ast handle all of these actions */ | 185 | * let the ast handle all of these actions */ |
| 186 | if (status == DLM_NORMAL && | 186 | if (status == DLM_CANCELGRANT) { |
| 187 | lksb->status == DLM_CANCELGRANT) { | ||
| 188 | actions &= ~(DLM_UNLOCK_REMOVE_LOCK| | 187 | actions &= ~(DLM_UNLOCK_REMOVE_LOCK| |
| 189 | DLM_UNLOCK_REGRANT_LOCK| | 188 | DLM_UNLOCK_REGRANT_LOCK| |
| 190 | DLM_UNLOCK_CLEAR_CONVERT_TYPE); | 189 | DLM_UNLOCK_CLEAR_CONVERT_TYPE); |
| @@ -349,14 +348,9 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm, | |||
| 349 | vec, veclen, owner, &status); | 348 | vec, veclen, owner, &status); |
| 350 | if (tmpret >= 0) { | 349 | if (tmpret >= 0) { |
| 351 | // successfully sent and received | 350 | // successfully sent and received |
| 352 | if (status == DLM_CANCELGRANT) | 351 | if (status == DLM_FORWARD) |
| 353 | ret = DLM_NORMAL; | ||
| 354 | else if (status == DLM_FORWARD) { | ||
| 355 | mlog(0, "master was in-progress. retry\n"); | 352 | mlog(0, "master was in-progress. retry\n"); |
| 356 | ret = DLM_FORWARD; | 353 | ret = status; |
| 357 | } else | ||
| 358 | ret = status; | ||
| 359 | lksb->status = status; | ||
| 360 | } else { | 354 | } else { |
| 361 | mlog_errno(tmpret); | 355 | mlog_errno(tmpret); |
| 362 | if (dlm_is_host_down(tmpret)) { | 356 | if (dlm_is_host_down(tmpret)) { |
| @@ -372,7 +366,6 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm, | |||
| 372 | /* something bad. this will BUG in ocfs2 */ | 366 | /* something bad. this will BUG in ocfs2 */ |
| 373 | ret = dlm_err_to_dlm_status(tmpret); | 367 | ret = dlm_err_to_dlm_status(tmpret); |
| 374 | } | 368 | } |
| 375 | lksb->status = ret; | ||
| 376 | } | 369 | } |
| 377 | 370 | ||
| 378 | return ret; | 371 | return ret; |
| @@ -483,6 +476,10 @@ int dlm_unlock_lock_handler(struct o2net_msg *msg, u32 len, void *data) | |||
| 483 | 476 | ||
| 484 | /* lock was found on queue */ | 477 | /* lock was found on queue */ |
| 485 | lksb = lock->lksb; | 478 | lksb = lock->lksb; |
| 479 | if (flags & (LKM_VALBLK|LKM_PUT_LVB) && | ||
| 480 | lock->ml.type != LKM_EXMODE) | ||
| 481 | flags &= ~(LKM_VALBLK|LKM_PUT_LVB); | ||
| 482 | |||
| 486 | /* unlockast only called on originating node */ | 483 | /* unlockast only called on originating node */ |
| 487 | if (flags & LKM_PUT_LVB) { | 484 | if (flags & LKM_PUT_LVB) { |
| 488 | lksb->flags |= DLM_LKSB_PUT_LVB; | 485 | lksb->flags |= DLM_LKSB_PUT_LVB; |
| @@ -507,11 +504,8 @@ not_found: | |||
| 507 | "cookie=%u:%llu\n", | 504 | "cookie=%u:%llu\n", |
| 508 | dlm_get_lock_cookie_node(unlock->cookie), | 505 | dlm_get_lock_cookie_node(unlock->cookie), |
| 509 | dlm_get_lock_cookie_seq(unlock->cookie)); | 506 | dlm_get_lock_cookie_seq(unlock->cookie)); |
| 510 | else { | 507 | else |
| 511 | /* send the lksb->status back to the other node */ | ||
| 512 | status = lksb->status; | ||
| 513 | dlm_lock_put(lock); | 508 | dlm_lock_put(lock); |
| 514 | } | ||
| 515 | 509 | ||
| 516 | leave: | 510 | leave: |
| 517 | if (res) | 511 | if (res) |
| @@ -533,26 +527,22 @@ static enum dlm_status dlm_get_cancel_actions(struct dlm_ctxt *dlm, | |||
| 533 | 527 | ||
| 534 | if (dlm_lock_on_list(&res->blocked, lock)) { | 528 | if (dlm_lock_on_list(&res->blocked, lock)) { |
| 535 | /* cancel this outright */ | 529 | /* cancel this outright */ |
| 536 | lksb->status = DLM_NORMAL; | ||
| 537 | status = DLM_NORMAL; | 530 | status = DLM_NORMAL; |
| 538 | *actions = (DLM_UNLOCK_CALL_AST | | 531 | *actions = (DLM_UNLOCK_CALL_AST | |
| 539 | DLM_UNLOCK_REMOVE_LOCK); | 532 | DLM_UNLOCK_REMOVE_LOCK); |
| 540 | } else if (dlm_lock_on_list(&res->converting, lock)) { | 533 | } else if (dlm_lock_on_list(&res->converting, lock)) { |
| 541 | /* cancel the request, put back on granted */ | 534 | /* cancel the request, put back on granted */ |
| 542 | lksb->status = DLM_NORMAL; | ||
| 543 | status = DLM_NORMAL; | 535 | status = DLM_NORMAL; |
| 544 | *actions = (DLM_UNLOCK_CALL_AST | | 536 | *actions = (DLM_UNLOCK_CALL_AST | |
| 545 | DLM_UNLOCK_REMOVE_LOCK | | 537 | DLM_UNLOCK_REMOVE_LOCK | |
| 546 | DLM_UNLOCK_REGRANT_LOCK | | 538 | DLM_UNLOCK_REGRANT_LOCK | |
| 547 | DLM_UNLOCK_CLEAR_CONVERT_TYPE); | 539 | DLM_UNLOCK_CLEAR_CONVERT_TYPE); |
| 548 | } else if (dlm_lock_on_list(&res->granted, lock)) { | 540 | } else if (dlm_lock_on_list(&res->granted, lock)) { |
| 549 | /* too late, already granted. DLM_CANCELGRANT */ | 541 | /* too late, already granted. */ |
| 550 | lksb->status = DLM_CANCELGRANT; | 542 | status = DLM_CANCELGRANT; |
| 551 | status = DLM_NORMAL; | ||
| 552 | *actions = DLM_UNLOCK_CALL_AST; | 543 | *actions = DLM_UNLOCK_CALL_AST; |
| 553 | } else { | 544 | } else { |
| 554 | mlog(ML_ERROR, "lock to cancel is not on any list!\n"); | 545 | mlog(ML_ERROR, "lock to cancel is not on any list!\n"); |
| 555 | lksb->status = DLM_IVLOCKID; | ||
| 556 | status = DLM_IVLOCKID; | 546 | status = DLM_IVLOCKID; |
| 557 | *actions = 0; | 547 | *actions = 0; |
| 558 | } | 548 | } |
| @@ -569,13 +559,11 @@ static enum dlm_status dlm_get_unlock_actions(struct dlm_ctxt *dlm, | |||
| 569 | 559 | ||
| 570 | /* unlock request */ | 560 | /* unlock request */ |
| 571 | if (!dlm_lock_on_list(&res->granted, lock)) { | 561 | if (!dlm_lock_on_list(&res->granted, lock)) { |
| 572 | lksb->status = DLM_DENIED; | ||
| 573 | status = DLM_DENIED; | 562 | status = DLM_DENIED; |
| 574 | dlm_error(status); | 563 | dlm_error(status); |
| 575 | *actions = 0; | 564 | *actions = 0; |
| 576 | } else { | 565 | } else { |
| 577 | /* unlock granted lock */ | 566 | /* unlock granted lock */ |
| 578 | lksb->status = DLM_NORMAL; | ||
| 579 | status = DLM_NORMAL; | 567 | status = DLM_NORMAL; |
| 580 | *actions = (DLM_UNLOCK_FREE_LOCK | | 568 | *actions = (DLM_UNLOCK_FREE_LOCK | |
| 581 | DLM_UNLOCK_CALL_AST | | 569 | DLM_UNLOCK_CALL_AST | |
| @@ -632,6 +620,8 @@ retry: | |||
| 632 | 620 | ||
| 633 | spin_lock(&res->spinlock); | 621 | spin_lock(&res->spinlock); |
| 634 | is_master = (res->owner == dlm->node_num); | 622 | is_master = (res->owner == dlm->node_num); |
| 623 | if (flags & LKM_VALBLK && lock->ml.type != LKM_EXMODE) | ||
| 624 | flags &= ~LKM_VALBLK; | ||
| 635 | spin_unlock(&res->spinlock); | 625 | spin_unlock(&res->spinlock); |
| 636 | 626 | ||
| 637 | if (is_master) { | 627 | if (is_master) { |
| @@ -665,7 +655,7 @@ retry: | |||
| 665 | } | 655 | } |
| 666 | 656 | ||
| 667 | if (call_ast) { | 657 | if (call_ast) { |
| 668 | mlog(0, "calling unlockast(%p, %d)\n", data, lksb->status); | 658 | mlog(0, "calling unlockast(%p, %d)\n", data, status); |
| 669 | if (is_master) { | 659 | if (is_master) { |
| 670 | /* it is possible that there is one last bast | 660 | /* it is possible that there is one last bast |
| 671 | * pending. make sure it is flushed, then | 661 | * pending. make sure it is flushed, then |
| @@ -677,9 +667,12 @@ retry: | |||
| 677 | wait_event(dlm->ast_wq, | 667 | wait_event(dlm->ast_wq, |
| 678 | dlm_lock_basts_flushed(dlm, lock)); | 668 | dlm_lock_basts_flushed(dlm, lock)); |
| 679 | } | 669 | } |
| 680 | (*unlockast)(data, lksb->status); | 670 | (*unlockast)(data, status); |
| 681 | } | 671 | } |
| 682 | 672 | ||
| 673 | if (status == DLM_CANCELGRANT) | ||
| 674 | status = DLM_NORMAL; | ||
| 675 | |||
| 683 | if (status == DLM_NORMAL) { | 676 | if (status == DLM_NORMAL) { |
| 684 | mlog(0, "kicking the thread\n"); | 677 | mlog(0, "kicking the thread\n"); |
| 685 | dlm_kick_thread(dlm, res); | 678 | dlm_kick_thread(dlm, res); |
diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c index 0d1973ea32b0..1f17a4d08287 100644 --- a/fs/ocfs2/localalloc.c +++ b/fs/ocfs2/localalloc.c | |||
| @@ -840,6 +840,12 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb, | |||
| 840 | 840 | ||
| 841 | mlog(0, "Allocating %u clusters for a new window.\n", | 841 | mlog(0, "Allocating %u clusters for a new window.\n", |
| 842 | ocfs2_local_alloc_window_bits(osb)); | 842 | ocfs2_local_alloc_window_bits(osb)); |
| 843 | |||
| 844 | /* Instruct the allocation code to try the most recently used | ||
| 845 | * cluster group. We'll re-record the group used this pass | ||
| 846 | * below. */ | ||
| 847 | ac->ac_last_group = osb->la_last_gd; | ||
| 848 | |||
| 843 | /* we used the generic suballoc reserve function, but we set | 849 | /* we used the generic suballoc reserve function, but we set |
| 844 | * everything up nicely, so there's no reason why we can't use | 850 | * everything up nicely, so there's no reason why we can't use |
| 845 | * the more specific cluster api to claim bits. */ | 851 | * the more specific cluster api to claim bits. */ |
| @@ -852,6 +858,8 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb, | |||
| 852 | goto bail; | 858 | goto bail; |
| 853 | } | 859 | } |
| 854 | 860 | ||
| 861 | osb->la_last_gd = ac->ac_last_group; | ||
| 862 | |||
| 855 | la->la_bm_off = cpu_to_le32(cluster_off); | 863 | la->la_bm_off = cpu_to_le32(cluster_off); |
| 856 | alloc->id1.bitmap1.i_total = cpu_to_le32(cluster_count); | 864 | alloc->id1.bitmap1.i_total = cpu_to_le32(cluster_count); |
| 857 | /* just in case... In the future when we find space ourselves, | 865 | /* just in case... In the future when we find space ourselves, |
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index cd4a6f253d13..0462a7f4e21b 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h | |||
| @@ -197,7 +197,6 @@ struct ocfs2_super | |||
| 197 | struct ocfs2_node_map recovery_map; | 197 | struct ocfs2_node_map recovery_map; |
| 198 | struct ocfs2_node_map umount_map; | 198 | struct ocfs2_node_map umount_map; |
| 199 | 199 | ||
| 200 | u32 num_clusters; | ||
| 201 | u64 root_blkno; | 200 | u64 root_blkno; |
| 202 | u64 system_dir_blkno; | 201 | u64 system_dir_blkno; |
| 203 | u64 bitmap_blkno; | 202 | u64 bitmap_blkno; |
| @@ -237,6 +236,7 @@ struct ocfs2_super | |||
| 237 | 236 | ||
| 238 | enum ocfs2_local_alloc_state local_alloc_state; | 237 | enum ocfs2_local_alloc_state local_alloc_state; |
| 239 | struct buffer_head *local_alloc_bh; | 238 | struct buffer_head *local_alloc_bh; |
| 239 | u64 la_last_gd; | ||
| 240 | 240 | ||
| 241 | /* Next two fields are for local node slot recovery during | 241 | /* Next two fields are for local node slot recovery during |
| 242 | * mount. */ | 242 | * mount. */ |
diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c index 195523090c87..9d91e66f51a9 100644 --- a/fs/ocfs2/suballoc.c +++ b/fs/ocfs2/suballoc.c | |||
| @@ -70,12 +70,6 @@ static int ocfs2_block_group_search(struct inode *inode, | |||
| 70 | struct buffer_head *group_bh, | 70 | struct buffer_head *group_bh, |
| 71 | u32 bits_wanted, u32 min_bits, | 71 | u32 bits_wanted, u32 min_bits, |
| 72 | u16 *bit_off, u16 *bits_found); | 72 | u16 *bit_off, u16 *bits_found); |
| 73 | static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, | ||
| 74 | u32 bits_wanted, | ||
| 75 | u32 min_bits, | ||
| 76 | u16 *bit_off, | ||
| 77 | unsigned int *num_bits, | ||
| 78 | u64 *bg_blkno); | ||
| 79 | static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb, | 73 | static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb, |
| 80 | struct ocfs2_alloc_context *ac, | 74 | struct ocfs2_alloc_context *ac, |
| 81 | u32 bits_wanted, | 75 | u32 bits_wanted, |
| @@ -85,11 +79,6 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb, | |||
| 85 | u64 *bg_blkno); | 79 | u64 *bg_blkno); |
| 86 | static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh, | 80 | static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh, |
| 87 | int nr); | 81 | int nr); |
| 88 | static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb, | ||
| 89 | struct buffer_head *bg_bh, | ||
| 90 | unsigned int bits_wanted, | ||
| 91 | u16 *bit_off, | ||
| 92 | u16 *bits_found); | ||
| 93 | static inline int ocfs2_block_group_set_bits(struct ocfs2_journal_handle *handle, | 82 | static inline int ocfs2_block_group_set_bits(struct ocfs2_journal_handle *handle, |
| 94 | struct inode *alloc_inode, | 83 | struct inode *alloc_inode, |
| 95 | struct ocfs2_group_desc *bg, | 84 | struct ocfs2_group_desc *bg, |
| @@ -143,6 +132,64 @@ static u32 ocfs2_bits_per_group(struct ocfs2_chain_list *cl) | |||
| 143 | return (u32)le16_to_cpu(cl->cl_cpg) * (u32)le16_to_cpu(cl->cl_bpc); | 132 | return (u32)le16_to_cpu(cl->cl_cpg) * (u32)le16_to_cpu(cl->cl_bpc); |
| 144 | } | 133 | } |
| 145 | 134 | ||
| 135 | /* somewhat more expensive than our other checks, so use sparingly. */ | ||
| 136 | static int ocfs2_check_group_descriptor(struct super_block *sb, | ||
| 137 | struct ocfs2_dinode *di, | ||
| 138 | struct ocfs2_group_desc *gd) | ||
| 139 | { | ||
| 140 | unsigned int max_bits; | ||
| 141 | |||
| 142 | if (!OCFS2_IS_VALID_GROUP_DESC(gd)) { | ||
| 143 | OCFS2_RO_ON_INVALID_GROUP_DESC(sb, gd); | ||
| 144 | return -EIO; | ||
| 145 | } | ||
| 146 | |||
| 147 | if (di->i_blkno != gd->bg_parent_dinode) { | ||
| 148 | ocfs2_error(sb, "Group descriptor # %llu has bad parent " | ||
| 149 | "pointer (%llu, expected %llu)", | ||
| 150 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
| 151 | (unsigned long long)le64_to_cpu(gd->bg_parent_dinode), | ||
| 152 | (unsigned long long)le64_to_cpu(di->i_blkno)); | ||
| 153 | return -EIO; | ||
| 154 | } | ||
| 155 | |||
| 156 | max_bits = le16_to_cpu(di->id2.i_chain.cl_cpg) * le16_to_cpu(di->id2.i_chain.cl_bpc); | ||
| 157 | if (le16_to_cpu(gd->bg_bits) > max_bits) { | ||
| 158 | ocfs2_error(sb, "Group descriptor # %llu has bit count of %u", | ||
| 159 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
| 160 | le16_to_cpu(gd->bg_bits)); | ||
| 161 | return -EIO; | ||
| 162 | } | ||
| 163 | |||
| 164 | if (le16_to_cpu(gd->bg_chain) >= | ||
| 165 | le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) { | ||
| 166 | ocfs2_error(sb, "Group descriptor # %llu has bad chain %u", | ||
| 167 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
| 168 | le16_to_cpu(gd->bg_chain)); | ||
| 169 | return -EIO; | ||
| 170 | } | ||
| 171 | |||
| 172 | if (le16_to_cpu(gd->bg_free_bits_count) > le16_to_cpu(gd->bg_bits)) { | ||
| 173 | ocfs2_error(sb, "Group descriptor # %llu has bit count %u but " | ||
| 174 | "claims that %u are free", | ||
| 175 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
| 176 | le16_to_cpu(gd->bg_bits), | ||
| 177 | le16_to_cpu(gd->bg_free_bits_count)); | ||
| 178 | return -EIO; | ||
| 179 | } | ||
| 180 | |||
| 181 | if (le16_to_cpu(gd->bg_bits) > (8 * le16_to_cpu(gd->bg_size))) { | ||
| 182 | ocfs2_error(sb, "Group descriptor # %llu has bit count %u but " | ||
| 183 | "max bitmap bits of %u", | ||
| 184 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
| 185 | le16_to_cpu(gd->bg_bits), | ||
| 186 | 8 * le16_to_cpu(gd->bg_size)); | ||
| 187 | return -EIO; | ||
| 188 | } | ||
| 189 | |||
| 190 | return 0; | ||
| 191 | } | ||
| 192 | |||
| 146 | static int ocfs2_block_group_fill(struct ocfs2_journal_handle *handle, | 193 | static int ocfs2_block_group_fill(struct ocfs2_journal_handle *handle, |
| 147 | struct inode *alloc_inode, | 194 | struct inode *alloc_inode, |
| 148 | struct buffer_head *bg_bh, | 195 | struct buffer_head *bg_bh, |
| @@ -663,6 +710,7 @@ static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh, | |||
| 663 | static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb, | 710 | static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb, |
| 664 | struct buffer_head *bg_bh, | 711 | struct buffer_head *bg_bh, |
| 665 | unsigned int bits_wanted, | 712 | unsigned int bits_wanted, |
| 713 | unsigned int total_bits, | ||
| 666 | u16 *bit_off, | 714 | u16 *bit_off, |
| 667 | u16 *bits_found) | 715 | u16 *bits_found) |
| 668 | { | 716 | { |
| @@ -679,10 +727,8 @@ static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb, | |||
| 679 | found = start = best_offset = best_size = 0; | 727 | found = start = best_offset = best_size = 0; |
| 680 | bitmap = bg->bg_bitmap; | 728 | bitmap = bg->bg_bitmap; |
| 681 | 729 | ||
| 682 | while((offset = ocfs2_find_next_zero_bit(bitmap, | 730 | while((offset = ocfs2_find_next_zero_bit(bitmap, total_bits, start)) != -1) { |
| 683 | le16_to_cpu(bg->bg_bits), | 731 | if (offset == total_bits) |
| 684 | start)) != -1) { | ||
| 685 | if (offset == le16_to_cpu(bg->bg_bits)) | ||
| 686 | break; | 732 | break; |
| 687 | 733 | ||
| 688 | if (!ocfs2_test_bg_bit_allocatable(bg_bh, offset)) { | 734 | if (!ocfs2_test_bg_bit_allocatable(bg_bh, offset)) { |
| @@ -911,14 +957,35 @@ static int ocfs2_cluster_group_search(struct inode *inode, | |||
| 911 | { | 957 | { |
| 912 | int search = -ENOSPC; | 958 | int search = -ENOSPC; |
| 913 | int ret; | 959 | int ret; |
| 914 | struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) group_bh->b_data; | 960 | struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *) group_bh->b_data; |
| 915 | u16 tmp_off, tmp_found; | 961 | u16 tmp_off, tmp_found; |
| 962 | unsigned int max_bits, gd_cluster_off; | ||
| 916 | 963 | ||
| 917 | BUG_ON(!ocfs2_is_cluster_bitmap(inode)); | 964 | BUG_ON(!ocfs2_is_cluster_bitmap(inode)); |
| 918 | 965 | ||
| 919 | if (bg->bg_free_bits_count) { | 966 | if (gd->bg_free_bits_count) { |
| 967 | max_bits = le16_to_cpu(gd->bg_bits); | ||
| 968 | |||
| 969 | /* Tail groups in cluster bitmaps which aren't cpg | ||
| 970 | * aligned are prone to partial extention by a failed | ||
| 971 | * fs resize. If the file system resize never got to | ||
| 972 | * update the dinode cluster count, then we don't want | ||
| 973 | * to trust any clusters past it, regardless of what | ||
| 974 | * the group descriptor says. */ | ||
| 975 | gd_cluster_off = ocfs2_blocks_to_clusters(inode->i_sb, | ||
| 976 | le64_to_cpu(gd->bg_blkno)); | ||
| 977 | if ((gd_cluster_off + max_bits) > | ||
| 978 | OCFS2_I(inode)->ip_clusters) { | ||
| 979 | max_bits = OCFS2_I(inode)->ip_clusters - gd_cluster_off; | ||
| 980 | mlog(0, "Desc %llu, bg_bits %u, clusters %u, use %u\n", | ||
| 981 | (unsigned long long)le64_to_cpu(gd->bg_blkno), | ||
| 982 | le16_to_cpu(gd->bg_bits), | ||
| 983 | OCFS2_I(inode)->ip_clusters, max_bits); | ||
| 984 | } | ||
| 985 | |||
| 920 | ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb), | 986 | ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb), |
| 921 | group_bh, bits_wanted, | 987 | group_bh, bits_wanted, |
| 988 | max_bits, | ||
| 922 | &tmp_off, &tmp_found); | 989 | &tmp_off, &tmp_found); |
| 923 | if (ret) | 990 | if (ret) |
| 924 | return ret; | 991 | return ret; |
| @@ -951,17 +1018,109 @@ static int ocfs2_block_group_search(struct inode *inode, | |||
| 951 | if (bg->bg_free_bits_count) | 1018 | if (bg->bg_free_bits_count) |
| 952 | ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb), | 1019 | ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb), |
| 953 | group_bh, bits_wanted, | 1020 | group_bh, bits_wanted, |
| 1021 | le16_to_cpu(bg->bg_bits), | ||
| 954 | bit_off, bits_found); | 1022 | bit_off, bits_found); |
| 955 | 1023 | ||
| 956 | return ret; | 1024 | return ret; |
| 957 | } | 1025 | } |
| 958 | 1026 | ||
| 1027 | static int ocfs2_alloc_dinode_update_counts(struct inode *inode, | ||
| 1028 | struct ocfs2_journal_handle *handle, | ||
| 1029 | struct buffer_head *di_bh, | ||
| 1030 | u32 num_bits, | ||
| 1031 | u16 chain) | ||
| 1032 | { | ||
| 1033 | int ret; | ||
| 1034 | u32 tmp_used; | ||
| 1035 | struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data; | ||
| 1036 | struct ocfs2_chain_list *cl = (struct ocfs2_chain_list *) &di->id2.i_chain; | ||
| 1037 | |||
| 1038 | ret = ocfs2_journal_access(handle, inode, di_bh, | ||
| 1039 | OCFS2_JOURNAL_ACCESS_WRITE); | ||
| 1040 | if (ret < 0) { | ||
| 1041 | mlog_errno(ret); | ||
| 1042 | goto out; | ||
| 1043 | } | ||
| 1044 | |||
| 1045 | tmp_used = le32_to_cpu(di->id1.bitmap1.i_used); | ||
| 1046 | di->id1.bitmap1.i_used = cpu_to_le32(num_bits + tmp_used); | ||
| 1047 | le32_add_cpu(&cl->cl_recs[chain].c_free, -num_bits); | ||
| 1048 | |||
| 1049 | ret = ocfs2_journal_dirty(handle, di_bh); | ||
| 1050 | if (ret < 0) | ||
| 1051 | mlog_errno(ret); | ||
| 1052 | |||
| 1053 | out: | ||
| 1054 | return ret; | ||
| 1055 | } | ||
| 1056 | |||
| 1057 | static int ocfs2_search_one_group(struct ocfs2_alloc_context *ac, | ||
| 1058 | u32 bits_wanted, | ||
| 1059 | u32 min_bits, | ||
| 1060 | u16 *bit_off, | ||
| 1061 | unsigned int *num_bits, | ||
| 1062 | u64 gd_blkno, | ||
| 1063 | u16 *bits_left) | ||
| 1064 | { | ||
| 1065 | int ret; | ||
| 1066 | u16 found; | ||
| 1067 | struct buffer_head *group_bh = NULL; | ||
| 1068 | struct ocfs2_group_desc *gd; | ||
| 1069 | struct inode *alloc_inode = ac->ac_inode; | ||
| 1070 | struct ocfs2_journal_handle *handle = ac->ac_handle; | ||
| 1071 | |||
| 1072 | ret = ocfs2_read_block(OCFS2_SB(alloc_inode->i_sb), gd_blkno, | ||
| 1073 | &group_bh, OCFS2_BH_CACHED, alloc_inode); | ||
| 1074 | if (ret < 0) { | ||
| 1075 | mlog_errno(ret); | ||
| 1076 | return ret; | ||
| 1077 | } | ||
| 1078 | |||
| 1079 | gd = (struct ocfs2_group_desc *) group_bh->b_data; | ||
| 1080 | if (!OCFS2_IS_VALID_GROUP_DESC(gd)) { | ||
| 1081 | OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, gd); | ||
| 1082 | ret = -EIO; | ||
| 1083 | goto out; | ||
| 1084 | } | ||
| 1085 | |||
| 1086 | ret = ac->ac_group_search(alloc_inode, group_bh, bits_wanted, min_bits, | ||
| 1087 | bit_off, &found); | ||
| 1088 | if (ret < 0) { | ||
| 1089 | if (ret != -ENOSPC) | ||
| 1090 | mlog_errno(ret); | ||
| 1091 | goto out; | ||
| 1092 | } | ||
| 1093 | |||
| 1094 | *num_bits = found; | ||
| 1095 | |||
| 1096 | ret = ocfs2_alloc_dinode_update_counts(alloc_inode, handle, ac->ac_bh, | ||
| 1097 | *num_bits, | ||
| 1098 | le16_to_cpu(gd->bg_chain)); | ||
| 1099 | if (ret < 0) { | ||
| 1100 | mlog_errno(ret); | ||
| 1101 | goto out; | ||
| 1102 | } | ||
| 1103 | |||
| 1104 | ret = ocfs2_block_group_set_bits(handle, alloc_inode, gd, group_bh, | ||
| 1105 | *bit_off, *num_bits); | ||
| 1106 | if (ret < 0) | ||
| 1107 | mlog_errno(ret); | ||
| 1108 | |||
| 1109 | *bits_left = le16_to_cpu(gd->bg_free_bits_count); | ||
| 1110 | |||
| 1111 | out: | ||
| 1112 | brelse(group_bh); | ||
| 1113 | |||
| 1114 | return ret; | ||
| 1115 | } | ||
| 1116 | |||
| 959 | static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, | 1117 | static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, |
| 960 | u32 bits_wanted, | 1118 | u32 bits_wanted, |
| 961 | u32 min_bits, | 1119 | u32 min_bits, |
| 962 | u16 *bit_off, | 1120 | u16 *bit_off, |
| 963 | unsigned int *num_bits, | 1121 | unsigned int *num_bits, |
| 964 | u64 *bg_blkno) | 1122 | u64 *bg_blkno, |
| 1123 | u16 *bits_left) | ||
| 965 | { | 1124 | { |
| 966 | int status; | 1125 | int status; |
| 967 | u16 chain, tmp_bits; | 1126 | u16 chain, tmp_bits; |
| @@ -988,9 +1147,9 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, | |||
| 988 | goto bail; | 1147 | goto bail; |
| 989 | } | 1148 | } |
| 990 | bg = (struct ocfs2_group_desc *) group_bh->b_data; | 1149 | bg = (struct ocfs2_group_desc *) group_bh->b_data; |
| 991 | if (!OCFS2_IS_VALID_GROUP_DESC(bg)) { | 1150 | status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, bg); |
| 992 | OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg); | 1151 | if (status) { |
| 993 | status = -EIO; | 1152 | mlog_errno(status); |
| 994 | goto bail; | 1153 | goto bail; |
| 995 | } | 1154 | } |
| 996 | 1155 | ||
| @@ -1018,9 +1177,9 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, | |||
| 1018 | goto bail; | 1177 | goto bail; |
| 1019 | } | 1178 | } |
| 1020 | bg = (struct ocfs2_group_desc *) group_bh->b_data; | 1179 | bg = (struct ocfs2_group_desc *) group_bh->b_data; |
| 1021 | if (!OCFS2_IS_VALID_GROUP_DESC(bg)) { | 1180 | status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, bg); |
| 1022 | OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg); | 1181 | if (status) { |
| 1023 | status = -EIO; | 1182 | mlog_errno(status); |
| 1024 | goto bail; | 1183 | goto bail; |
| 1025 | } | 1184 | } |
| 1026 | } | 1185 | } |
| @@ -1099,6 +1258,7 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac, | |||
| 1099 | (unsigned long long)fe->i_blkno); | 1258 | (unsigned long long)fe->i_blkno); |
| 1100 | 1259 | ||
| 1101 | *bg_blkno = le64_to_cpu(bg->bg_blkno); | 1260 | *bg_blkno = le64_to_cpu(bg->bg_blkno); |
| 1261 | *bits_left = le16_to_cpu(bg->bg_free_bits_count); | ||
| 1102 | bail: | 1262 | bail: |
| 1103 | if (group_bh) | 1263 | if (group_bh) |
| 1104 | brelse(group_bh); | 1264 | brelse(group_bh); |
| @@ -1120,6 +1280,8 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb, | |||
| 1120 | { | 1280 | { |
| 1121 | int status; | 1281 | int status; |
| 1122 | u16 victim, i; | 1282 | u16 victim, i; |
| 1283 | u16 bits_left = 0; | ||
| 1284 | u64 hint_blkno = ac->ac_last_group; | ||
| 1123 | struct ocfs2_chain_list *cl; | 1285 | struct ocfs2_chain_list *cl; |
| 1124 | struct ocfs2_dinode *fe; | 1286 | struct ocfs2_dinode *fe; |
| 1125 | 1287 | ||
| @@ -1146,6 +1308,28 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb, | |||
| 1146 | goto bail; | 1308 | goto bail; |
| 1147 | } | 1309 | } |
| 1148 | 1310 | ||
| 1311 | if (hint_blkno) { | ||
| 1312 | /* Attempt to short-circuit the usual search mechanism | ||
| 1313 | * by jumping straight to the most recently used | ||
| 1314 | * allocation group. This helps us mantain some | ||
| 1315 | * contiguousness across allocations. */ | ||
| 1316 | status = ocfs2_search_one_group(ac, bits_wanted, min_bits, | ||
| 1317 | bit_off, num_bits, | ||
| 1318 | hint_blkno, &bits_left); | ||
| 1319 | if (!status) { | ||
| 1320 | /* Be careful to update *bg_blkno here as the | ||
| 1321 | * caller is expecting it to be filled in, and | ||
| 1322 | * ocfs2_search_one_group() won't do that for | ||
| 1323 | * us. */ | ||
| 1324 | *bg_blkno = hint_blkno; | ||
| 1325 | goto set_hint; | ||
| 1326 | } | ||
| 1327 | if (status < 0 && status != -ENOSPC) { | ||
| 1328 | mlog_errno(status); | ||
| 1329 | goto bail; | ||
| 1330 | } | ||
| 1331 | } | ||
| 1332 | |||
| 1149 | cl = (struct ocfs2_chain_list *) &fe->id2.i_chain; | 1333 | cl = (struct ocfs2_chain_list *) &fe->id2.i_chain; |
| 1150 | 1334 | ||
| 1151 | victim = ocfs2_find_victim_chain(cl); | 1335 | victim = ocfs2_find_victim_chain(cl); |
| @@ -1153,9 +1337,9 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb, | |||
| 1153 | ac->ac_allow_chain_relink = 1; | 1337 | ac->ac_allow_chain_relink = 1; |
| 1154 | 1338 | ||
| 1155 | status = ocfs2_search_chain(ac, bits_wanted, min_bits, bit_off, | 1339 | status = ocfs2_search_chain(ac, bits_wanted, min_bits, bit_off, |
| 1156 | num_bits, bg_blkno); | 1340 | num_bits, bg_blkno, &bits_left); |
| 1157 | if (!status) | 1341 | if (!status) |
| 1158 | goto bail; | 1342 | goto set_hint; |
| 1159 | if (status < 0 && status != -ENOSPC) { | 1343 | if (status < 0 && status != -ENOSPC) { |
| 1160 | mlog_errno(status); | 1344 | mlog_errno(status); |
| 1161 | goto bail; | 1345 | goto bail; |
| @@ -1177,8 +1361,8 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb, | |||
| 1177 | 1361 | ||
| 1178 | ac->ac_chain = i; | 1362 | ac->ac_chain = i; |
| 1179 | status = ocfs2_search_chain(ac, bits_wanted, min_bits, | 1363 | status = ocfs2_search_chain(ac, bits_wanted, min_bits, |
| 1180 | bit_off, num_bits, | 1364 | bit_off, num_bits, bg_blkno, |
| 1181 | bg_blkno); | 1365 | &bits_left); |
| 1182 | if (!status) | 1366 | if (!status) |
| 1183 | break; | 1367 | break; |
| 1184 | if (status < 0 && status != -ENOSPC) { | 1368 | if (status < 0 && status != -ENOSPC) { |
| @@ -1186,8 +1370,19 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb, | |||
| 1186 | goto bail; | 1370 | goto bail; |
| 1187 | } | 1371 | } |
| 1188 | } | 1372 | } |
| 1189 | bail: | ||
| 1190 | 1373 | ||
| 1374 | set_hint: | ||
| 1375 | if (status != -ENOSPC) { | ||
| 1376 | /* If the next search of this group is not likely to | ||
| 1377 | * yield a suitable extent, then we reset the last | ||
| 1378 | * group hint so as to not waste a disk read */ | ||
| 1379 | if (bits_left < min_bits) | ||
| 1380 | ac->ac_last_group = 0; | ||
| 1381 | else | ||
| 1382 | ac->ac_last_group = *bg_blkno; | ||
| 1383 | } | ||
| 1384 | |||
| 1385 | bail: | ||
| 1191 | mlog_exit(status); | 1386 | mlog_exit(status); |
| 1192 | return status; | 1387 | return status; |
| 1193 | } | 1388 | } |
| @@ -1341,7 +1536,7 @@ int ocfs2_claim_clusters(struct ocfs2_super *osb, | |||
| 1341 | { | 1536 | { |
| 1342 | int status; | 1537 | int status; |
| 1343 | unsigned int bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given; | 1538 | unsigned int bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given; |
| 1344 | u64 bg_blkno; | 1539 | u64 bg_blkno = 0; |
| 1345 | u16 bg_bit_off; | 1540 | u16 bg_bit_off; |
| 1346 | 1541 | ||
| 1347 | mlog_entry_void(); | 1542 | mlog_entry_void(); |
| @@ -1494,9 +1689,9 @@ static int ocfs2_free_suballoc_bits(struct ocfs2_journal_handle *handle, | |||
| 1494 | } | 1689 | } |
| 1495 | 1690 | ||
| 1496 | group = (struct ocfs2_group_desc *) group_bh->b_data; | 1691 | group = (struct ocfs2_group_desc *) group_bh->b_data; |
| 1497 | if (!OCFS2_IS_VALID_GROUP_DESC(group)) { | 1692 | status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, group); |
| 1498 | OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, group); | 1693 | if (status) { |
| 1499 | status = -EIO; | 1694 | mlog_errno(status); |
| 1500 | goto bail; | 1695 | goto bail; |
| 1501 | } | 1696 | } |
| 1502 | BUG_ON((count + start_bit) > le16_to_cpu(group->bg_bits)); | 1697 | BUG_ON((count + start_bit) > le16_to_cpu(group->bg_bits)); |
diff --git a/fs/ocfs2/suballoc.h b/fs/ocfs2/suballoc.h index a76c82a7ceac..c787838d1052 100644 --- a/fs/ocfs2/suballoc.h +++ b/fs/ocfs2/suballoc.h | |||
| @@ -49,6 +49,8 @@ struct ocfs2_alloc_context { | |||
| 49 | u16 ac_chain; | 49 | u16 ac_chain; |
| 50 | int ac_allow_chain_relink; | 50 | int ac_allow_chain_relink; |
| 51 | group_search_t *ac_group_search; | 51 | group_search_t *ac_group_search; |
| 52 | |||
| 53 | u64 ac_last_group; | ||
| 52 | }; | 54 | }; |
| 53 | 55 | ||
| 54 | void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac); | 56 | void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac); |
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 382706a67ffd..d17e33e66a1e 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
| @@ -1442,8 +1442,13 @@ static int ocfs2_initialize_super(struct super_block *sb, | |||
| 1442 | 1442 | ||
| 1443 | osb->bitmap_blkno = OCFS2_I(inode)->ip_blkno; | 1443 | osb->bitmap_blkno = OCFS2_I(inode)->ip_blkno; |
| 1444 | 1444 | ||
| 1445 | /* We don't have a cluster lock on the bitmap here because | ||
| 1446 | * we're only interested in static information and the extra | ||
| 1447 | * complexity at mount time isn't worht it. Don't pass the | ||
| 1448 | * inode in to the read function though as we don't want it to | ||
| 1449 | * be put in the cache. */ | ||
| 1445 | status = ocfs2_read_block(osb, osb->bitmap_blkno, &bitmap_bh, 0, | 1450 | status = ocfs2_read_block(osb, osb->bitmap_blkno, &bitmap_bh, 0, |
| 1446 | inode); | 1451 | NULL); |
| 1447 | iput(inode); | 1452 | iput(inode); |
| 1448 | if (status < 0) { | 1453 | if (status < 0) { |
| 1449 | mlog_errno(status); | 1454 | mlog_errno(status); |
| @@ -1452,7 +1457,6 @@ static int ocfs2_initialize_super(struct super_block *sb, | |||
| 1452 | 1457 | ||
| 1453 | di = (struct ocfs2_dinode *) bitmap_bh->b_data; | 1458 | di = (struct ocfs2_dinode *) bitmap_bh->b_data; |
| 1454 | osb->bitmap_cpg = le16_to_cpu(di->id2.i_chain.cl_cpg); | 1459 | osb->bitmap_cpg = le16_to_cpu(di->id2.i_chain.cl_cpg); |
| 1455 | osb->num_clusters = le32_to_cpu(di->id1.bitmap1.i_total); | ||
| 1456 | brelse(bitmap_bh); | 1460 | brelse(bitmap_bh); |
| 1457 | mlog(0, "cluster bitmap inode: %llu, clusters per group: %u\n", | 1461 | mlog(0, "cluster bitmap inode: %llu, clusters per group: %u\n", |
| 1458 | (unsigned long long)osb->bitmap_blkno, osb->bitmap_cpg); | 1462 | (unsigned long long)osb->bitmap_blkno, osb->bitmap_cpg); |
diff --git a/fs/udf/super.c b/fs/udf/super.c index 4df822c881b6..7de172efa084 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c | |||
| @@ -115,6 +115,13 @@ static struct inode *udf_alloc_inode(struct super_block *sb) | |||
| 115 | ei = (struct udf_inode_info *)kmem_cache_alloc(udf_inode_cachep, SLAB_KERNEL); | 115 | ei = (struct udf_inode_info *)kmem_cache_alloc(udf_inode_cachep, SLAB_KERNEL); |
| 116 | if (!ei) | 116 | if (!ei) |
| 117 | return NULL; | 117 | return NULL; |
| 118 | |||
| 119 | ei->i_unique = 0; | ||
| 120 | ei->i_lenExtents = 0; | ||
| 121 | ei->i_next_alloc_block = 0; | ||
| 122 | ei->i_next_alloc_goal = 0; | ||
| 123 | ei->i_strat4096 = 0; | ||
| 124 | |||
| 118 | return &ei->vfs_inode; | 125 | return &ei->vfs_inode; |
| 119 | } | 126 | } |
| 120 | 127 | ||
diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c index eef6763f3a67..d2bbcd882a69 100644 --- a/fs/xfs/xfs_alloc.c +++ b/fs/xfs/xfs_alloc.c | |||
| @@ -1835,40 +1835,47 @@ xfs_alloc_fix_freelist( | |||
| 1835 | &agbp))) | 1835 | &agbp))) |
| 1836 | return error; | 1836 | return error; |
| 1837 | if (!pag->pagf_init) { | 1837 | if (!pag->pagf_init) { |
| 1838 | ASSERT(flags & XFS_ALLOC_FLAG_TRYLOCK); | ||
| 1839 | ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING)); | ||
| 1838 | args->agbp = NULL; | 1840 | args->agbp = NULL; |
| 1839 | return 0; | 1841 | return 0; |
| 1840 | } | 1842 | } |
| 1841 | } else | 1843 | } else |
| 1842 | agbp = NULL; | 1844 | agbp = NULL; |
| 1843 | 1845 | ||
| 1844 | /* If this is a metadata preferred pag and we are user data | 1846 | /* |
| 1847 | * If this is a metadata preferred pag and we are user data | ||
| 1845 | * then try somewhere else if we are not being asked to | 1848 | * then try somewhere else if we are not being asked to |
| 1846 | * try harder at this point | 1849 | * try harder at this point |
| 1847 | */ | 1850 | */ |
| 1848 | if (pag->pagf_metadata && args->userdata && flags) { | 1851 | if (pag->pagf_metadata && args->userdata && |
| 1852 | (flags & XFS_ALLOC_FLAG_TRYLOCK)) { | ||
| 1853 | ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING)); | ||
| 1849 | args->agbp = NULL; | 1854 | args->agbp = NULL; |
| 1850 | return 0; | 1855 | return 0; |
| 1851 | } | 1856 | } |
| 1852 | 1857 | ||
| 1853 | need = XFS_MIN_FREELIST_PAG(pag, mp); | 1858 | if (!(flags & XFS_ALLOC_FLAG_FREEING)) { |
| 1854 | delta = need > pag->pagf_flcount ? need - pag->pagf_flcount : 0; | 1859 | need = XFS_MIN_FREELIST_PAG(pag, mp); |
| 1855 | /* | 1860 | delta = need > pag->pagf_flcount ? need - pag->pagf_flcount : 0; |
| 1856 | * If it looks like there isn't a long enough extent, or enough | 1861 | /* |
| 1857 | * total blocks, reject it. | 1862 | * If it looks like there isn't a long enough extent, or enough |
| 1858 | */ | 1863 | * total blocks, reject it. |
| 1859 | longest = (pag->pagf_longest > delta) ? | 1864 | */ |
| 1860 | (pag->pagf_longest - delta) : | 1865 | longest = (pag->pagf_longest > delta) ? |
| 1861 | (pag->pagf_flcount > 0 || pag->pagf_longest > 0); | 1866 | (pag->pagf_longest - delta) : |
| 1862 | if (args->minlen + args->alignment + args->minalignslop - 1 > longest || | 1867 | (pag->pagf_flcount > 0 || pag->pagf_longest > 0); |
| 1863 | (!(flags & XFS_ALLOC_FLAG_FREEING) && | 1868 | if ((args->minlen + args->alignment + args->minalignslop - 1) > |
| 1864 | (int)(pag->pagf_freeblks + pag->pagf_flcount - | 1869 | longest || |
| 1865 | need - args->total) < | 1870 | ((int)(pag->pagf_freeblks + pag->pagf_flcount - |
| 1866 | (int)args->minleft)) { | 1871 | need - args->total) < (int)args->minleft)) { |
| 1867 | if (agbp) | 1872 | if (agbp) |
| 1868 | xfs_trans_brelse(tp, agbp); | 1873 | xfs_trans_brelse(tp, agbp); |
| 1869 | args->agbp = NULL; | 1874 | args->agbp = NULL; |
| 1870 | return 0; | 1875 | return 0; |
| 1876 | } | ||
| 1871 | } | 1877 | } |
| 1878 | |||
| 1872 | /* | 1879 | /* |
| 1873 | * Get the a.g. freespace buffer. | 1880 | * Get the a.g. freespace buffer. |
| 1874 | * Can fail if we're not blocking on locks, and it's held. | 1881 | * Can fail if we're not blocking on locks, and it's held. |
| @@ -1878,6 +1885,8 @@ xfs_alloc_fix_freelist( | |||
| 1878 | &agbp))) | 1885 | &agbp))) |
| 1879 | return error; | 1886 | return error; |
| 1880 | if (agbp == NULL) { | 1887 | if (agbp == NULL) { |
| 1888 | ASSERT(flags & XFS_ALLOC_FLAG_TRYLOCK); | ||
| 1889 | ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING)); | ||
| 1881 | args->agbp = NULL; | 1890 | args->agbp = NULL; |
| 1882 | return 0; | 1891 | return 0; |
| 1883 | } | 1892 | } |
| @@ -1887,22 +1896,24 @@ xfs_alloc_fix_freelist( | |||
| 1887 | */ | 1896 | */ |
| 1888 | agf = XFS_BUF_TO_AGF(agbp); | 1897 | agf = XFS_BUF_TO_AGF(agbp); |
| 1889 | need = XFS_MIN_FREELIST(agf, mp); | 1898 | need = XFS_MIN_FREELIST(agf, mp); |
| 1890 | delta = need > be32_to_cpu(agf->agf_flcount) ? | ||
| 1891 | (need - be32_to_cpu(agf->agf_flcount)) : 0; | ||
| 1892 | /* | 1899 | /* |
| 1893 | * If there isn't enough total or single-extent, reject it. | 1900 | * If there isn't enough total or single-extent, reject it. |
| 1894 | */ | 1901 | */ |
| 1895 | longest = be32_to_cpu(agf->agf_longest); | 1902 | if (!(flags & XFS_ALLOC_FLAG_FREEING)) { |
| 1896 | longest = (longest > delta) ? (longest - delta) : | 1903 | delta = need > be32_to_cpu(agf->agf_flcount) ? |
| 1897 | (be32_to_cpu(agf->agf_flcount) > 0 || longest > 0); | 1904 | (need - be32_to_cpu(agf->agf_flcount)) : 0; |
| 1898 | if (args->minlen + args->alignment + args->minalignslop - 1 > longest || | 1905 | longest = be32_to_cpu(agf->agf_longest); |
| 1899 | (!(flags & XFS_ALLOC_FLAG_FREEING) && | 1906 | longest = (longest > delta) ? (longest - delta) : |
| 1900 | (int)(be32_to_cpu(agf->agf_freeblks) + | 1907 | (be32_to_cpu(agf->agf_flcount) > 0 || longest > 0); |
| 1901 | be32_to_cpu(agf->agf_flcount) - need - args->total) < | 1908 | if ((args->minlen + args->alignment + args->minalignslop - 1) > |
| 1902 | (int)args->minleft)) { | 1909 | longest || |
| 1903 | xfs_trans_brelse(tp, agbp); | 1910 | ((int)(be32_to_cpu(agf->agf_freeblks) + |
| 1904 | args->agbp = NULL; | 1911 | be32_to_cpu(agf->agf_flcount) - need - args->total) < |
| 1905 | return 0; | 1912 | (int)args->minleft)) { |
| 1913 | xfs_trans_brelse(tp, agbp); | ||
| 1914 | args->agbp = NULL; | ||
| 1915 | return 0; | ||
| 1916 | } | ||
| 1906 | } | 1917 | } |
| 1907 | /* | 1918 | /* |
| 1908 | * Make the freelist shorter if it's too long. | 1919 | * Make the freelist shorter if it's too long. |
| @@ -1950,12 +1961,11 @@ xfs_alloc_fix_freelist( | |||
| 1950 | * on a completely full ag. | 1961 | * on a completely full ag. |
| 1951 | */ | 1962 | */ |
| 1952 | if (targs.agbno == NULLAGBLOCK) { | 1963 | if (targs.agbno == NULLAGBLOCK) { |
| 1953 | if (!(flags & XFS_ALLOC_FLAG_FREEING)) { | 1964 | if (flags & XFS_ALLOC_FLAG_FREEING) |
| 1954 | xfs_trans_brelse(tp, agflbp); | 1965 | break; |
| 1955 | args->agbp = NULL; | 1966 | xfs_trans_brelse(tp, agflbp); |
| 1956 | return 0; | 1967 | args->agbp = NULL; |
| 1957 | } | 1968 | return 0; |
| 1958 | break; | ||
| 1959 | } | 1969 | } |
| 1960 | /* | 1970 | /* |
| 1961 | * Put each allocated block on the list. | 1971 | * Put each allocated block on the list. |
| @@ -2442,31 +2452,26 @@ xfs_free_extent( | |||
| 2442 | xfs_fsblock_t bno, /* starting block number of extent */ | 2452 | xfs_fsblock_t bno, /* starting block number of extent */ |
| 2443 | xfs_extlen_t len) /* length of extent */ | 2453 | xfs_extlen_t len) /* length of extent */ |
| 2444 | { | 2454 | { |
| 2445 | #ifdef DEBUG | 2455 | xfs_alloc_arg_t args; |
| 2446 | xfs_agf_t *agf; /* a.g. freespace header */ | ||
| 2447 | #endif | ||
| 2448 | xfs_alloc_arg_t args; /* allocation argument structure */ | ||
| 2449 | int error; | 2456 | int error; |
| 2450 | 2457 | ||
| 2451 | ASSERT(len != 0); | 2458 | ASSERT(len != 0); |
| 2459 | memset(&args, 0, sizeof(xfs_alloc_arg_t)); | ||
| 2452 | args.tp = tp; | 2460 | args.tp = tp; |
| 2453 | args.mp = tp->t_mountp; | 2461 | args.mp = tp->t_mountp; |
| 2454 | args.agno = XFS_FSB_TO_AGNO(args.mp, bno); | 2462 | args.agno = XFS_FSB_TO_AGNO(args.mp, bno); |
| 2455 | ASSERT(args.agno < args.mp->m_sb.sb_agcount); | 2463 | ASSERT(args.agno < args.mp->m_sb.sb_agcount); |
| 2456 | args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno); | 2464 | args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno); |
| 2457 | args.alignment = 1; | ||
| 2458 | args.minlen = args.minleft = args.minalignslop = 0; | ||
| 2459 | down_read(&args.mp->m_peraglock); | 2465 | down_read(&args.mp->m_peraglock); |
| 2460 | args.pag = &args.mp->m_perag[args.agno]; | 2466 | args.pag = &args.mp->m_perag[args.agno]; |
| 2461 | if ((error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING))) | 2467 | if ((error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING))) |
| 2462 | goto error0; | 2468 | goto error0; |
| 2463 | #ifdef DEBUG | 2469 | #ifdef DEBUG |
| 2464 | ASSERT(args.agbp != NULL); | 2470 | ASSERT(args.agbp != NULL); |
| 2465 | agf = XFS_BUF_TO_AGF(args.agbp); | 2471 | ASSERT((args.agbno + len) <= |
| 2466 | ASSERT(args.agbno + len <= be32_to_cpu(agf->agf_length)); | 2472 | be32_to_cpu(XFS_BUF_TO_AGF(args.agbp)->agf_length)); |
| 2467 | #endif | 2473 | #endif |
| 2468 | error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, | 2474 | error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0); |
| 2469 | len, 0); | ||
| 2470 | error0: | 2475 | error0: |
| 2471 | up_read(&args.mp->m_peraglock); | 2476 | up_read(&args.mp->m_peraglock); |
| 2472 | return error; | 2477 | return error; |
diff --git a/include/asm-powerpc/kexec.h b/include/asm-powerpc/kexec.h index 8f7fd5cfec34..11cbdf81fd2e 100644 --- a/include/asm-powerpc/kexec.h +++ b/include/asm-powerpc/kexec.h | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #endif | 32 | #endif |
| 33 | 33 | ||
| 34 | #ifndef __ASSEMBLY__ | 34 | #ifndef __ASSEMBLY__ |
| 35 | #include <linux/cpumask.h> | ||
| 35 | 36 | ||
| 36 | #ifdef CONFIG_KEXEC | 37 | #ifdef CONFIG_KEXEC |
| 37 | 38 | ||
| @@ -109,7 +110,6 @@ static inline void crash_setup_regs(struct pt_regs *newregs, | |||
| 109 | 110 | ||
| 110 | #define MAX_NOTE_BYTES 1024 | 111 | #define MAX_NOTE_BYTES 1024 |
| 111 | 112 | ||
| 112 | #ifdef __powerpc64__ | ||
| 113 | extern void kexec_smp_wait(void); /* get and clear naca physid, wait for | 113 | extern void kexec_smp_wait(void); /* get and clear naca physid, wait for |
| 114 | master to copy new code to 0 */ | 114 | master to copy new code to 0 */ |
| 115 | extern int crashing_cpu; | 115 | extern int crashing_cpu; |
| @@ -119,7 +119,6 @@ static inline int kexec_sr_activated(int cpu) | |||
| 119 | { | 119 | { |
| 120 | return cpu_isset(cpu,cpus_in_sr); | 120 | return cpu_isset(cpu,cpus_in_sr); |
| 121 | } | 121 | } |
| 122 | #endif /* __powerpc64 __ */ | ||
| 123 | 122 | ||
| 124 | struct kimage; | 123 | struct kimage; |
| 125 | struct pt_regs; | 124 | struct pt_regs; |
diff --git a/include/asm-powerpc/rtas.h b/include/asm-powerpc/rtas.h index a33c6acffa61..82a27e9a041f 100644 --- a/include/asm-powerpc/rtas.h +++ b/include/asm-powerpc/rtas.h | |||
| @@ -170,6 +170,7 @@ extern int rtas_get_sensor(int sensor, int index, int *state); | |||
| 170 | extern int rtas_get_power_level(int powerdomain, int *level); | 170 | extern int rtas_get_power_level(int powerdomain, int *level); |
| 171 | extern int rtas_set_power_level(int powerdomain, int level, int *setlevel); | 171 | extern int rtas_set_power_level(int powerdomain, int level, int *setlevel); |
| 172 | extern int rtas_set_indicator(int indicator, int index, int new_value); | 172 | extern int rtas_set_indicator(int indicator, int index, int new_value); |
| 173 | extern int rtas_set_indicator_fast(int indicator, int index, int new_value); | ||
| 173 | extern void rtas_progress(char *s, unsigned short hex); | 174 | extern void rtas_progress(char *s, unsigned short hex); |
| 174 | extern void rtas_initialize(void); | 175 | extern void rtas_initialize(void); |
| 175 | 176 | ||
diff --git a/include/linux/fb.h b/include/linux/fb.h index 4ad0673b1995..2f335e966011 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | #ifndef _LINUX_FB_H | 1 | #ifndef _LINUX_FB_H |
| 2 | #define _LINUX_FB_H | 2 | #define _LINUX_FB_H |
| 3 | 3 | ||
| 4 | #include <linux/backlight.h> | ||
| 5 | #include <asm/types.h> | 4 | #include <asm/types.h> |
| 6 | 5 | ||
| 7 | /* Definitions of frame buffers */ | 6 | /* Definitions of frame buffers */ |
| @@ -381,6 +380,7 @@ struct fb_cursor { | |||
| 381 | #include <linux/workqueue.h> | 380 | #include <linux/workqueue.h> |
| 382 | #include <linux/notifier.h> | 381 | #include <linux/notifier.h> |
| 383 | #include <linux/list.h> | 382 | #include <linux/list.h> |
| 383 | #include <linux/backlight.h> | ||
| 384 | #include <asm/io.h> | 384 | #include <asm/io.h> |
| 385 | 385 | ||
| 386 | struct vm_area_struct; | 386 | struct vm_area_struct; |
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 383627ad328f..ab2740832742 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -155,6 +155,11 @@ static inline int __vlan_hwaccel_rx(struct sk_buff *skb, | |||
| 155 | { | 155 | { |
| 156 | struct net_device_stats *stats; | 156 | struct net_device_stats *stats; |
| 157 | 157 | ||
| 158 | if (skb_bond_should_drop(skb)) { | ||
| 159 | dev_kfree_skb_any(skb); | ||
| 160 | return NET_RX_DROP; | ||
| 161 | } | ||
| 162 | |||
| 158 | skb->dev = grp->vlan_devices[vlan_tag & VLAN_VID_MASK]; | 163 | skb->dev = grp->vlan_devices[vlan_tag & VLAN_VID_MASK]; |
| 159 | if (skb->dev == NULL) { | 164 | if (skb->dev == NULL) { |
| 160 | dev_kfree_skb_any(skb); | 165 | dev_kfree_skb_any(skb); |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 181c69cad4e3..851aa1bcfc1a 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -210,6 +210,7 @@ extern enum system_states { | |||
| 210 | extern void dump_stack(void); | 210 | extern void dump_stack(void); |
| 211 | 211 | ||
| 212 | #ifdef DEBUG | 212 | #ifdef DEBUG |
| 213 | /* If you are writing a driver, please use dev_dbg instead */ | ||
| 213 | #define pr_debug(fmt,arg...) \ | 214 | #define pr_debug(fmt,arg...) \ |
| 214 | printk(KERN_DEBUG fmt,##arg) | 215 | printk(KERN_DEBUG fmt,##arg) |
| 215 | #else | 216 | #else |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 990957e0929f..f0b135cd86da 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -336,6 +336,7 @@ static inline void init_page_count(struct page *page) | |||
| 336 | } | 336 | } |
| 337 | 337 | ||
| 338 | void put_page(struct page *page); | 338 | void put_page(struct page *page); |
| 339 | void put_pages_list(struct list_head *pages); | ||
| 339 | 340 | ||
| 340 | void split_page(struct page *page, unsigned int order); | 341 | void split_page(struct page *page, unsigned int order); |
| 341 | 342 | ||
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 75f02d8c6ed3..50a4719512ed 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -320,6 +320,9 @@ struct net_device | |||
| 320 | #define NETIF_F_TSO_ECN (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT) | 320 | #define NETIF_F_TSO_ECN (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT) |
| 321 | #define NETIF_F_TSO6 (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT) | 321 | #define NETIF_F_TSO6 (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT) |
| 322 | 322 | ||
| 323 | /* List of features with software fallbacks. */ | ||
| 324 | #define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6) | ||
| 325 | |||
| 323 | #define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM) | 326 | #define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM) |
| 324 | #define NETIF_F_ALL_CSUM (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM) | 327 | #define NETIF_F_ALL_CSUM (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM) |
| 325 | 328 | ||
| @@ -1012,6 +1015,30 @@ static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) | |||
| 1012 | unlikely(skb->ip_summed != CHECKSUM_HW)); | 1015 | unlikely(skb->ip_summed != CHECKSUM_HW)); |
| 1013 | } | 1016 | } |
| 1014 | 1017 | ||
| 1018 | /* On bonding slaves other than the currently active slave, suppress | ||
| 1019 | * duplicates except for 802.3ad ETH_P_SLOW and alb non-mcast/bcast. | ||
| 1020 | */ | ||
| 1021 | static inline int skb_bond_should_drop(struct sk_buff *skb) | ||
| 1022 | { | ||
| 1023 | struct net_device *dev = skb->dev; | ||
| 1024 | struct net_device *master = dev->master; | ||
| 1025 | |||
| 1026 | if (master && | ||
| 1027 | (dev->priv_flags & IFF_SLAVE_INACTIVE)) { | ||
| 1028 | if (master->priv_flags & IFF_MASTER_ALB) { | ||
| 1029 | if (skb->pkt_type != PACKET_BROADCAST && | ||
| 1030 | skb->pkt_type != PACKET_MULTICAST) | ||
| 1031 | return 0; | ||
| 1032 | } | ||
| 1033 | if (master->priv_flags & IFF_MASTER_8023AD && | ||
| 1034 | skb->protocol == __constant_htons(ETH_P_SLOW)) | ||
| 1035 | return 0; | ||
| 1036 | |||
| 1037 | return 1; | ||
| 1038 | } | ||
| 1039 | return 0; | ||
| 1040 | } | ||
| 1041 | |||
| 1015 | #endif /* __KERNEL__ */ | 1042 | #endif /* __KERNEL__ */ |
| 1016 | 1043 | ||
| 1017 | #endif /* _LINUX_DEV_H */ | 1044 | #endif /* _LINUX_DEV_H */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 19c96d498e20..755e9cddac47 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -1040,6 +1040,21 @@ static inline int pskb_trim(struct sk_buff *skb, unsigned int len) | |||
| 1040 | } | 1040 | } |
| 1041 | 1041 | ||
| 1042 | /** | 1042 | /** |
| 1043 | * pskb_trim_unique - remove end from a paged unique (not cloned) buffer | ||
| 1044 | * @skb: buffer to alter | ||
| 1045 | * @len: new length | ||
| 1046 | * | ||
| 1047 | * This is identical to pskb_trim except that the caller knows that | ||
| 1048 | * the skb is not cloned so we should never get an error due to out- | ||
| 1049 | * of-memory. | ||
| 1050 | */ | ||
| 1051 | static inline void pskb_trim_unique(struct sk_buff *skb, unsigned int len) | ||
| 1052 | { | ||
| 1053 | int err = pskb_trim(skb, len); | ||
| 1054 | BUG_ON(err); | ||
| 1055 | } | ||
| 1056 | |||
| 1057 | /** | ||
| 1043 | * skb_orphan - orphan a buffer | 1058 | * skb_orphan - orphan a buffer |
| 1044 | * @skb: buffer to orphan | 1059 | * @skb: buffer to orphan |
| 1045 | * | 1060 | * |
| @@ -1081,7 +1096,7 @@ static inline void __skb_queue_purge(struct sk_buff_head *list) | |||
| 1081 | * the headroom they think they need without accounting for the | 1096 | * the headroom they think they need without accounting for the |
| 1082 | * built in space. The built in space is used for optimisations. | 1097 | * built in space. The built in space is used for optimisations. |
| 1083 | * | 1098 | * |
| 1084 | * %NULL is returned in there is no free memory. | 1099 | * %NULL is returned if there is no free memory. |
| 1085 | */ | 1100 | */ |
| 1086 | static inline struct sk_buff *__dev_alloc_skb(unsigned int length, | 1101 | static inline struct sk_buff *__dev_alloc_skb(unsigned int length, |
| 1087 | gfp_t gfp_mask) | 1102 | gfp_t gfp_mask) |
| @@ -1101,7 +1116,7 @@ static inline struct sk_buff *__dev_alloc_skb(unsigned int length, | |||
| 1101 | * the headroom they think they need without accounting for the | 1116 | * the headroom they think they need without accounting for the |
| 1102 | * built in space. The built in space is used for optimisations. | 1117 | * built in space. The built in space is used for optimisations. |
| 1103 | * | 1118 | * |
| 1104 | * %NULL is returned in there is no free memory. Although this function | 1119 | * %NULL is returned if there is no free memory. Although this function |
| 1105 | * allocates memory it can be called from an interrupt. | 1120 | * allocates memory it can be called from an interrupt. |
| 1106 | */ | 1121 | */ |
| 1107 | static inline struct sk_buff *dev_alloc_skb(unsigned int length) | 1122 | static inline struct sk_buff *dev_alloc_skb(unsigned int length) |
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index f8665326ed9f..600d61d7d2ab 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 17 | #include <linux/mutex.h> | 17 | #include <linux/mutex.h> |
| 18 | #include <linux/compiler.h> /* need __user */ | 18 | #include <linux/compiler.h> /* need __user */ |
| 19 | #ifdef CONFIG_VIDEO_V4L1 | 19 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 20 | #include <linux/videodev.h> | 20 | #include <linux/videodev.h> |
| 21 | #else | 21 | #else |
| 22 | #include <linux/videodev2.h> | 22 | #include <linux/videodev2.h> |
diff --git a/kernel/futex.c b/kernel/futex.c index c2b2e0b83abf..d4633c588f33 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
| @@ -297,7 +297,7 @@ static int futex_handle_fault(unsigned long address, int attempt) | |||
| 297 | struct vm_area_struct * vma; | 297 | struct vm_area_struct * vma; |
| 298 | struct mm_struct *mm = current->mm; | 298 | struct mm_struct *mm = current->mm; |
| 299 | 299 | ||
| 300 | if (attempt >= 2 || !(vma = find_vma(mm, address)) || | 300 | if (attempt > 2 || !(vma = find_vma(mm, address)) || |
| 301 | vma->vm_start > address || !(vma->vm_flags & VM_WRITE)) | 301 | vma->vm_start > address || !(vma->vm_flags & VM_WRITE)) |
| 302 | return -EFAULT; | 302 | return -EFAULT; |
| 303 | 303 | ||
| @@ -747,8 +747,10 @@ retry: | |||
| 747 | */ | 747 | */ |
| 748 | if (attempt++) { | 748 | if (attempt++) { |
| 749 | if (futex_handle_fault((unsigned long)uaddr2, | 749 | if (futex_handle_fault((unsigned long)uaddr2, |
| 750 | attempt)) | 750 | attempt)) { |
| 751 | ret = -EFAULT; | ||
| 751 | goto out; | 752 | goto out; |
| 753 | } | ||
| 752 | goto retry; | 754 | goto retry; |
| 753 | } | 755 | } |
| 754 | 756 | ||
| @@ -1322,9 +1324,10 @@ static int do_futex_lock_pi(u32 __user *uaddr, int detect, int trylock, | |||
| 1322 | * still holding the mmap_sem. | 1324 | * still holding the mmap_sem. |
| 1323 | */ | 1325 | */ |
| 1324 | if (attempt++) { | 1326 | if (attempt++) { |
| 1325 | if (futex_handle_fault((unsigned long)uaddr, attempt)) | 1327 | if (futex_handle_fault((unsigned long)uaddr, attempt)) { |
| 1328 | ret = -EFAULT; | ||
| 1326 | goto out_unlock_release_sem; | 1329 | goto out_unlock_release_sem; |
| 1327 | 1330 | } | |
| 1328 | goto retry_locked; | 1331 | goto retry_locked; |
| 1329 | } | 1332 | } |
| 1330 | 1333 | ||
| @@ -1506,9 +1509,10 @@ pi_faulted: | |||
| 1506 | * still holding the mmap_sem. | 1509 | * still holding the mmap_sem. |
| 1507 | */ | 1510 | */ |
| 1508 | if (attempt++) { | 1511 | if (attempt++) { |
| 1509 | if (futex_handle_fault((unsigned long)uaddr, attempt)) | 1512 | if (futex_handle_fault((unsigned long)uaddr, attempt)) { |
| 1513 | ret = -EFAULT; | ||
| 1510 | goto out_unlock; | 1514 | goto out_unlock; |
| 1511 | 1515 | } | |
| 1512 | goto retry_locked; | 1516 | goto retry_locked; |
| 1513 | } | 1517 | } |
| 1514 | 1518 | ||
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index be989efc7856..21c38a7e666b 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
| @@ -187,7 +187,7 @@ switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_base *base) | |||
| 187 | { | 187 | { |
| 188 | struct hrtimer_base *new_base; | 188 | struct hrtimer_base *new_base; |
| 189 | 189 | ||
| 190 | new_base = &__get_cpu_var(hrtimer_bases[base->index]); | 190 | new_base = &__get_cpu_var(hrtimer_bases)[base->index]; |
| 191 | 191 | ||
| 192 | if (base != new_base) { | 192 | if (base != new_base) { |
| 193 | /* | 193 | /* |
diff --git a/kernel/panic.c b/kernel/panic.c index d8a0bca21233..9b8dcfd1ca93 100644 --- a/kernel/panic.c +++ b/kernel/panic.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
| 19 | #include <linux/nmi.h> | 19 | #include <linux/nmi.h> |
| 20 | #include <linux/kexec.h> | 20 | #include <linux/kexec.h> |
| 21 | #include <linux/debug_locks.h> | ||
| 21 | 22 | ||
| 22 | int panic_on_oops; | 23 | int panic_on_oops; |
| 23 | int tainted; | 24 | int tainted; |
diff --git a/kernel/timer.c b/kernel/timer.c index b650f04888ed..1d7dd6267c2d 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
| @@ -1324,46 +1324,19 @@ asmlinkage long sys_getpid(void) | |||
| 1324 | } | 1324 | } |
| 1325 | 1325 | ||
| 1326 | /* | 1326 | /* |
| 1327 | * Accessing ->group_leader->real_parent is not SMP-safe, it could | 1327 | * Accessing ->real_parent is not SMP-safe, it could |
| 1328 | * change from under us. However, rather than getting any lock | 1328 | * change from under us. However, we can use a stale |
| 1329 | * we can use an optimistic algorithm: get the parent | 1329 | * value of ->real_parent under rcu_read_lock(), see |
| 1330 | * pid, and go back and check that the parent is still | 1330 | * release_task()->call_rcu(delayed_put_task_struct). |
| 1331 | * the same. If it has changed (which is extremely unlikely | ||
| 1332 | * indeed), we just try again.. | ||
| 1333 | * | ||
| 1334 | * NOTE! This depends on the fact that even if we _do_ | ||
| 1335 | * get an old value of "parent", we can happily dereference | ||
| 1336 | * the pointer (it was and remains a dereferencable kernel pointer | ||
| 1337 | * no matter what): we just can't necessarily trust the result | ||
| 1338 | * until we know that the parent pointer is valid. | ||
| 1339 | * | ||
| 1340 | * NOTE2: ->group_leader never changes from under us. | ||
| 1341 | */ | 1331 | */ |
| 1342 | asmlinkage long sys_getppid(void) | 1332 | asmlinkage long sys_getppid(void) |
| 1343 | { | 1333 | { |
| 1344 | int pid; | 1334 | int pid; |
| 1345 | struct task_struct *me = current; | ||
| 1346 | struct task_struct *parent; | ||
| 1347 | 1335 | ||
| 1348 | parent = me->group_leader->real_parent; | 1336 | rcu_read_lock(); |
| 1349 | for (;;) { | 1337 | pid = rcu_dereference(current->real_parent)->tgid; |
| 1350 | pid = parent->tgid; | 1338 | rcu_read_unlock(); |
| 1351 | #if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT) | ||
| 1352 | { | ||
| 1353 | struct task_struct *old = parent; | ||
| 1354 | 1339 | ||
| 1355 | /* | ||
| 1356 | * Make sure we read the pid before re-reading the | ||
| 1357 | * parent pointer: | ||
| 1358 | */ | ||
| 1359 | smp_rmb(); | ||
| 1360 | parent = me->group_leader->real_parent; | ||
| 1361 | if (old != parent) | ||
| 1362 | continue; | ||
| 1363 | } | ||
| 1364 | #endif | ||
| 1365 | break; | ||
| 1366 | } | ||
| 1367 | return pid; | 1340 | return pid; |
| 1368 | } | 1341 | } |
| 1369 | 1342 | ||
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 448e8f7b342d..835fe28b87a8 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c | |||
| @@ -68,7 +68,7 @@ struct workqueue_struct { | |||
| 68 | 68 | ||
| 69 | /* All the per-cpu workqueues on the system, for hotplug cpu to add/remove | 69 | /* All the per-cpu workqueues on the system, for hotplug cpu to add/remove |
| 70 | threads to each one as cpus come/go. */ | 70 | threads to each one as cpus come/go. */ |
| 71 | static DEFINE_SPINLOCK(workqueue_lock); | 71 | static DEFINE_MUTEX(workqueue_mutex); |
| 72 | static LIST_HEAD(workqueues); | 72 | static LIST_HEAD(workqueues); |
| 73 | 73 | ||
| 74 | static int singlethread_cpu; | 74 | static int singlethread_cpu; |
| @@ -320,10 +320,10 @@ void fastcall flush_workqueue(struct workqueue_struct *wq) | |||
| 320 | } else { | 320 | } else { |
| 321 | int cpu; | 321 | int cpu; |
| 322 | 322 | ||
| 323 | lock_cpu_hotplug(); | 323 | mutex_lock(&workqueue_mutex); |
| 324 | for_each_online_cpu(cpu) | 324 | for_each_online_cpu(cpu) |
| 325 | flush_cpu_workqueue(per_cpu_ptr(wq->cpu_wq, cpu)); | 325 | flush_cpu_workqueue(per_cpu_ptr(wq->cpu_wq, cpu)); |
| 326 | unlock_cpu_hotplug(); | 326 | mutex_unlock(&workqueue_mutex); |
| 327 | } | 327 | } |
| 328 | } | 328 | } |
| 329 | EXPORT_SYMBOL_GPL(flush_workqueue); | 329 | EXPORT_SYMBOL_GPL(flush_workqueue); |
| @@ -371,8 +371,7 @@ struct workqueue_struct *__create_workqueue(const char *name, | |||
| 371 | } | 371 | } |
| 372 | 372 | ||
| 373 | wq->name = name; | 373 | wq->name = name; |
| 374 | /* We don't need the distraction of CPUs appearing and vanishing. */ | 374 | mutex_lock(&workqueue_mutex); |
| 375 | lock_cpu_hotplug(); | ||
| 376 | if (singlethread) { | 375 | if (singlethread) { |
| 377 | INIT_LIST_HEAD(&wq->list); | 376 | INIT_LIST_HEAD(&wq->list); |
| 378 | p = create_workqueue_thread(wq, singlethread_cpu); | 377 | p = create_workqueue_thread(wq, singlethread_cpu); |
| @@ -381,9 +380,7 @@ struct workqueue_struct *__create_workqueue(const char *name, | |||
| 381 | else | 380 | else |
| 382 | wake_up_process(p); | 381 | wake_up_process(p); |
| 383 | } else { | 382 | } else { |
| 384 | spin_lock(&workqueue_lock); | ||
| 385 | list_add(&wq->list, &workqueues); | 383 | list_add(&wq->list, &workqueues); |
| 386 | spin_unlock(&workqueue_lock); | ||
| 387 | for_each_online_cpu(cpu) { | 384 | for_each_online_cpu(cpu) { |
| 388 | p = create_workqueue_thread(wq, cpu); | 385 | p = create_workqueue_thread(wq, cpu); |
| 389 | if (p) { | 386 | if (p) { |
| @@ -393,7 +390,7 @@ struct workqueue_struct *__create_workqueue(const char *name, | |||
| 393 | destroy = 1; | 390 | destroy = 1; |
| 394 | } | 391 | } |
| 395 | } | 392 | } |
| 396 | unlock_cpu_hotplug(); | 393 | mutex_unlock(&workqueue_mutex); |
| 397 | 394 | ||
| 398 | /* | 395 | /* |
| 399 | * Was there any error during startup? If yes then clean up: | 396 | * Was there any error during startup? If yes then clean up: |
| @@ -434,17 +431,15 @@ void destroy_workqueue(struct workqueue_struct *wq) | |||
| 434 | flush_workqueue(wq); | 431 | flush_workqueue(wq); |
| 435 | 432 | ||
| 436 | /* We don't need the distraction of CPUs appearing and vanishing. */ | 433 | /* We don't need the distraction of CPUs appearing and vanishing. */ |
| 437 | lock_cpu_hotplug(); | 434 | mutex_lock(&workqueue_mutex); |
| 438 | if (is_single_threaded(wq)) | 435 | if (is_single_threaded(wq)) |
| 439 | cleanup_workqueue_thread(wq, singlethread_cpu); | 436 | cleanup_workqueue_thread(wq, singlethread_cpu); |
| 440 | else { | 437 | else { |
| 441 | for_each_online_cpu(cpu) | 438 | for_each_online_cpu(cpu) |
| 442 | cleanup_workqueue_thread(wq, cpu); | 439 | cleanup_workqueue_thread(wq, cpu); |
| 443 | spin_lock(&workqueue_lock); | ||
| 444 | list_del(&wq->list); | 440 | list_del(&wq->list); |
| 445 | spin_unlock(&workqueue_lock); | ||
| 446 | } | 441 | } |
| 447 | unlock_cpu_hotplug(); | 442 | mutex_unlock(&workqueue_mutex); |
| 448 | free_percpu(wq->cpu_wq); | 443 | free_percpu(wq->cpu_wq); |
| 449 | kfree(wq); | 444 | kfree(wq); |
| 450 | } | 445 | } |
| @@ -515,11 +510,13 @@ int schedule_on_each_cpu(void (*func)(void *info), void *info) | |||
| 515 | if (!works) | 510 | if (!works) |
| 516 | return -ENOMEM; | 511 | return -ENOMEM; |
| 517 | 512 | ||
| 513 | mutex_lock(&workqueue_mutex); | ||
| 518 | for_each_online_cpu(cpu) { | 514 | for_each_online_cpu(cpu) { |
| 519 | INIT_WORK(per_cpu_ptr(works, cpu), func, info); | 515 | INIT_WORK(per_cpu_ptr(works, cpu), func, info); |
| 520 | __queue_work(per_cpu_ptr(keventd_wq->cpu_wq, cpu), | 516 | __queue_work(per_cpu_ptr(keventd_wq->cpu_wq, cpu), |
| 521 | per_cpu_ptr(works, cpu)); | 517 | per_cpu_ptr(works, cpu)); |
| 522 | } | 518 | } |
| 519 | mutex_unlock(&workqueue_mutex); | ||
| 523 | flush_workqueue(keventd_wq); | 520 | flush_workqueue(keventd_wq); |
| 524 | free_percpu(works); | 521 | free_percpu(works); |
| 525 | return 0; | 522 | return 0; |
| @@ -635,6 +632,7 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb, | |||
| 635 | 632 | ||
| 636 | switch (action) { | 633 | switch (action) { |
| 637 | case CPU_UP_PREPARE: | 634 | case CPU_UP_PREPARE: |
| 635 | mutex_lock(&workqueue_mutex); | ||
| 638 | /* Create a new workqueue thread for it. */ | 636 | /* Create a new workqueue thread for it. */ |
| 639 | list_for_each_entry(wq, &workqueues, list) { | 637 | list_for_each_entry(wq, &workqueues, list) { |
| 640 | if (!create_workqueue_thread(wq, hotcpu)) { | 638 | if (!create_workqueue_thread(wq, hotcpu)) { |
| @@ -653,6 +651,7 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb, | |||
| 653 | kthread_bind(cwq->thread, hotcpu); | 651 | kthread_bind(cwq->thread, hotcpu); |
| 654 | wake_up_process(cwq->thread); | 652 | wake_up_process(cwq->thread); |
| 655 | } | 653 | } |
| 654 | mutex_unlock(&workqueue_mutex); | ||
| 656 | break; | 655 | break; |
| 657 | 656 | ||
| 658 | case CPU_UP_CANCELED: | 657 | case CPU_UP_CANCELED: |
| @@ -664,6 +663,15 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb, | |||
| 664 | any_online_cpu(cpu_online_map)); | 663 | any_online_cpu(cpu_online_map)); |
| 665 | cleanup_workqueue_thread(wq, hotcpu); | 664 | cleanup_workqueue_thread(wq, hotcpu); |
| 666 | } | 665 | } |
| 666 | mutex_unlock(&workqueue_mutex); | ||
| 667 | break; | ||
| 668 | |||
| 669 | case CPU_DOWN_PREPARE: | ||
| 670 | mutex_lock(&workqueue_mutex); | ||
| 671 | break; | ||
| 672 | |||
| 673 | case CPU_DOWN_FAILED: | ||
| 674 | mutex_unlock(&workqueue_mutex); | ||
| 667 | break; | 675 | break; |
| 668 | 676 | ||
| 669 | case CPU_DEAD: | 677 | case CPU_DEAD: |
| @@ -671,6 +679,7 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb, | |||
| 671 | cleanup_workqueue_thread(wq, hotcpu); | 679 | cleanup_workqueue_thread(wq, hotcpu); |
| 672 | list_for_each_entry(wq, &workqueues, list) | 680 | list_for_each_entry(wq, &workqueues, list) |
| 673 | take_over_work(wq, hotcpu); | 681 | take_over_work(wq, hotcpu); |
| 682 | mutex_unlock(&workqueue_mutex); | ||
| 674 | break; | 683 | break; |
| 675 | } | 684 | } |
| 676 | 685 | ||
| @@ -54,6 +54,26 @@ void put_page(struct page *page) | |||
| 54 | } | 54 | } |
| 55 | EXPORT_SYMBOL(put_page); | 55 | EXPORT_SYMBOL(put_page); |
| 56 | 56 | ||
| 57 | /** | ||
| 58 | * put_pages_list(): release a list of pages | ||
| 59 | * | ||
| 60 | * Release a list of pages which are strung together on page.lru. Currently | ||
| 61 | * used by read_cache_pages() and related error recovery code. | ||
| 62 | * | ||
| 63 | * @pages: list of pages threaded on page->lru | ||
| 64 | */ | ||
| 65 | void put_pages_list(struct list_head *pages) | ||
| 66 | { | ||
| 67 | while (!list_empty(pages)) { | ||
| 68 | struct page *victim; | ||
| 69 | |||
| 70 | victim = list_entry(pages->prev, struct page, lru); | ||
| 71 | list_del(&victim->lru); | ||
| 72 | page_cache_release(victim); | ||
| 73 | } | ||
| 74 | } | ||
| 75 | EXPORT_SYMBOL(put_pages_list); | ||
| 76 | |||
| 57 | /* | 77 | /* |
| 58 | * Writeback is about to end against a page which has been marked for immediate | 78 | * Writeback is about to end against a page which has been marked for immediate |
| 59 | * reclaim. If it still appears to be reclaimable, move it to the tail of the | 79 | * reclaim. If it still appears to be reclaimable, move it to the tail of the |
diff --git a/net/atm/proc.c b/net/atm/proc.c index 3f95b0886a6a..91fe5f53ff11 100644 --- a/net/atm/proc.c +++ b/net/atm/proc.c | |||
| @@ -507,7 +507,7 @@ err_out: | |||
| 507 | goto out; | 507 | goto out; |
| 508 | } | 508 | } |
| 509 | 509 | ||
| 510 | void __exit atm_proc_exit(void) | 510 | void atm_proc_exit(void) |
| 511 | { | 511 | { |
| 512 | atm_proc_dirs_remove(); | 512 | atm_proc_dirs_remove(); |
| 513 | } | 513 | } |
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index f55ef682ef84..b1211d5342f6 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c | |||
| @@ -386,12 +386,17 @@ void br_features_recompute(struct net_bridge *br) | |||
| 386 | checksum = 0; | 386 | checksum = 0; |
| 387 | 387 | ||
| 388 | if (feature & NETIF_F_GSO) | 388 | if (feature & NETIF_F_GSO) |
| 389 | feature |= NETIF_F_TSO; | 389 | feature |= NETIF_F_GSO_SOFTWARE; |
| 390 | feature |= NETIF_F_GSO; | 390 | feature |= NETIF_F_GSO; |
| 391 | 391 | ||
| 392 | features &= feature; | 392 | features &= feature; |
| 393 | } | 393 | } |
| 394 | 394 | ||
| 395 | if (!(checksum & NETIF_F_ALL_CSUM)) | ||
| 396 | features &= ~NETIF_F_SG; | ||
| 397 | if (!(features & NETIF_F_SG)) | ||
| 398 | features &= ~NETIF_F_GSO_MASK; | ||
| 399 | |||
| 395 | br->dev->features = features | checksum | NETIF_F_LLTX | | 400 | br->dev->features = features | checksum | NETIF_F_LLTX | |
| 396 | NETIF_F_GSO_ROBUST; | 401 | NETIF_F_GSO_ROBUST; |
| 397 | } | 402 | } |
diff --git a/net/bridge/netfilter/ebt_ulog.c b/net/bridge/netfilter/ebt_ulog.c index 02693a230dc1..9f950db3b76f 100644 --- a/net/bridge/netfilter/ebt_ulog.c +++ b/net/bridge/netfilter/ebt_ulog.c | |||
| @@ -74,6 +74,9 @@ static void ulog_send(unsigned int nlgroup) | |||
| 74 | if (timer_pending(&ub->timer)) | 74 | if (timer_pending(&ub->timer)) |
| 75 | del_timer(&ub->timer); | 75 | del_timer(&ub->timer); |
| 76 | 76 | ||
| 77 | if (!ub->skb) | ||
| 78 | return; | ||
| 79 | |||
| 77 | /* last nlmsg needs NLMSG_DONE */ | 80 | /* last nlmsg needs NLMSG_DONE */ |
| 78 | if (ub->qlen > 1) | 81 | if (ub->qlen > 1) |
| 79 | ub->lastnlh->nlmsg_type = NLMSG_DONE; | 82 | ub->lastnlh->nlmsg_type = NLMSG_DONE; |
diff --git a/net/core/dev.c b/net/core/dev.c index d95e2626d944..d4a1ec3bded5 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -116,6 +116,7 @@ | |||
| 116 | #include <linux/audit.h> | 116 | #include <linux/audit.h> |
| 117 | #include <linux/dmaengine.h> | 117 | #include <linux/dmaengine.h> |
| 118 | #include <linux/err.h> | 118 | #include <linux/err.h> |
| 119 | #include <linux/ctype.h> | ||
| 119 | 120 | ||
| 120 | /* | 121 | /* |
| 121 | * The list of packet types we will receive (as opposed to discard) | 122 | * The list of packet types we will receive (as opposed to discard) |
| @@ -632,14 +633,22 @@ struct net_device * dev_get_by_flags(unsigned short if_flags, unsigned short mas | |||
| 632 | * @name: name string | 633 | * @name: name string |
| 633 | * | 634 | * |
| 634 | * Network device names need to be valid file names to | 635 | * Network device names need to be valid file names to |
| 635 | * to allow sysfs to work | 636 | * to allow sysfs to work. We also disallow any kind of |
| 637 | * whitespace. | ||
| 636 | */ | 638 | */ |
| 637 | int dev_valid_name(const char *name) | 639 | int dev_valid_name(const char *name) |
| 638 | { | 640 | { |
| 639 | return !(*name == '\0' | 641 | if (*name == '\0') |
| 640 | || !strcmp(name, ".") | 642 | return 0; |
| 641 | || !strcmp(name, "..") | 643 | if (!strcmp(name, ".") || !strcmp(name, "..")) |
| 642 | || strchr(name, '/')); | 644 | return 0; |
| 645 | |||
| 646 | while (*name) { | ||
| 647 | if (*name == '/' || isspace(*name)) | ||
| 648 | return 0; | ||
| 649 | name++; | ||
| 650 | } | ||
| 651 | return 1; | ||
| 643 | } | 652 | } |
| 644 | 653 | ||
| 645 | /** | 654 | /** |
| @@ -1619,26 +1628,10 @@ static inline struct net_device *skb_bond(struct sk_buff *skb) | |||
| 1619 | struct net_device *dev = skb->dev; | 1628 | struct net_device *dev = skb->dev; |
| 1620 | 1629 | ||
| 1621 | if (dev->master) { | 1630 | if (dev->master) { |
| 1622 | /* | 1631 | if (skb_bond_should_drop(skb)) { |
| 1623 | * On bonding slaves other than the currently active | ||
| 1624 | * slave, suppress duplicates except for 802.3ad | ||
| 1625 | * ETH_P_SLOW and alb non-mcast/bcast. | ||
| 1626 | */ | ||
| 1627 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { | ||
| 1628 | if (dev->master->priv_flags & IFF_MASTER_ALB) { | ||
| 1629 | if (skb->pkt_type != PACKET_BROADCAST && | ||
| 1630 | skb->pkt_type != PACKET_MULTICAST) | ||
| 1631 | goto keep; | ||
| 1632 | } | ||
| 1633 | |||
| 1634 | if (dev->master->priv_flags & IFF_MASTER_8023AD && | ||
| 1635 | skb->protocol == __constant_htons(ETH_P_SLOW)) | ||
| 1636 | goto keep; | ||
| 1637 | |||
| 1638 | kfree_skb(skb); | 1632 | kfree_skb(skb); |
| 1639 | return NULL; | 1633 | return NULL; |
| 1640 | } | 1634 | } |
| 1641 | keep: | ||
| 1642 | skb->dev = dev->master; | 1635 | skb->dev = dev->master; |
| 1643 | } | 1636 | } |
| 1644 | 1637 | ||
diff --git a/net/core/dst.c b/net/core/dst.c index 470c05bc4cb2..1a5e49da0e77 100644 --- a/net/core/dst.c +++ b/net/core/dst.c | |||
| @@ -95,12 +95,11 @@ static void dst_run_gc(unsigned long dummy) | |||
| 95 | dst_gc_timer_inc = DST_GC_INC; | 95 | dst_gc_timer_inc = DST_GC_INC; |
| 96 | dst_gc_timer_expires = DST_GC_MIN; | 96 | dst_gc_timer_expires = DST_GC_MIN; |
| 97 | } | 97 | } |
| 98 | dst_gc_timer.expires = jiffies + dst_gc_timer_expires; | ||
| 99 | #if RT_CACHE_DEBUG >= 2 | 98 | #if RT_CACHE_DEBUG >= 2 |
| 100 | printk("dst_total: %d/%d %ld\n", | 99 | printk("dst_total: %d/%d %ld\n", |
| 101 | atomic_read(&dst_total), delayed, dst_gc_timer_expires); | 100 | atomic_read(&dst_total), delayed, dst_gc_timer_expires); |
| 102 | #endif | 101 | #endif |
| 103 | add_timer(&dst_gc_timer); | 102 | mod_timer(&dst_gc_timer, jiffies + dst_gc_timer_expires); |
| 104 | 103 | ||
| 105 | out: | 104 | out: |
| 106 | spin_unlock(&dst_lock); | 105 | spin_unlock(&dst_lock); |
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 67ed14ddabd2..6a7320b39ed0 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
| @@ -2149,6 +2149,8 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev, | |||
| 2149 | skb->mac.raw = ((u8 *) iph) - 14 - pkt_dev->nr_labels*sizeof(u32); | 2149 | skb->mac.raw = ((u8 *) iph) - 14 - pkt_dev->nr_labels*sizeof(u32); |
| 2150 | skb->dev = odev; | 2150 | skb->dev = odev; |
| 2151 | skb->pkt_type = PACKET_HOST; | 2151 | skb->pkt_type = PACKET_HOST; |
| 2152 | skb->nh.iph = iph; | ||
| 2153 | skb->h.uh = udph; | ||
| 2152 | 2154 | ||
| 2153 | if (pkt_dev->nfrags <= 0) | 2155 | if (pkt_dev->nfrags <= 0) |
| 2154 | pgh = (struct pktgen_hdr *)skb_put(skb, datalen); | 2156 | pgh = (struct pktgen_hdr *)skb_put(skb, datalen); |
| @@ -2460,6 +2462,8 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev, | |||
| 2460 | skb->protocol = protocol; | 2462 | skb->protocol = protocol; |
| 2461 | skb->dev = odev; | 2463 | skb->dev = odev; |
| 2462 | skb->pkt_type = PACKET_HOST; | 2464 | skb->pkt_type = PACKET_HOST; |
| 2465 | skb->nh.ipv6h = iph; | ||
| 2466 | skb->h.uh = udph; | ||
| 2463 | 2467 | ||
| 2464 | if (pkt_dev->nfrags <= 0) | 2468 | if (pkt_dev->nfrags <= 0) |
| 2465 | pgh = (struct pktgen_hdr *)skb_put(skb, datalen); | 2469 | pgh = (struct pktgen_hdr *)skb_put(skb, datalen); |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 20e5bb73f147..30cc1ba6ed5c 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
| @@ -394,6 +394,9 @@ static int do_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
| 394 | } | 394 | } |
| 395 | 395 | ||
| 396 | if (ida[IFLA_ADDRESS - 1]) { | 396 | if (ida[IFLA_ADDRESS - 1]) { |
| 397 | struct sockaddr *sa; | ||
| 398 | int len; | ||
| 399 | |||
| 397 | if (!dev->set_mac_address) { | 400 | if (!dev->set_mac_address) { |
| 398 | err = -EOPNOTSUPP; | 401 | err = -EOPNOTSUPP; |
| 399 | goto out; | 402 | goto out; |
| @@ -405,7 +408,17 @@ static int do_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
| 405 | if (ida[IFLA_ADDRESS - 1]->rta_len != RTA_LENGTH(dev->addr_len)) | 408 | if (ida[IFLA_ADDRESS - 1]->rta_len != RTA_LENGTH(dev->addr_len)) |
| 406 | goto out; | 409 | goto out; |
| 407 | 410 | ||
| 408 | err = dev->set_mac_address(dev, RTA_DATA(ida[IFLA_ADDRESS - 1])); | 411 | len = sizeof(sa_family_t) + dev->addr_len; |
| 412 | sa = kmalloc(len, GFP_KERNEL); | ||
| 413 | if (!sa) { | ||
| 414 | err = -ENOMEM; | ||
| 415 | goto out; | ||
| 416 | } | ||
| 417 | sa->sa_family = dev->type; | ||
| 418 | memcpy(sa->sa_data, RTA_DATA(ida[IFLA_ADDRESS - 1]), | ||
| 419 | dev->addr_len); | ||
| 420 | err = dev->set_mac_address(dev, sa); | ||
| 421 | kfree(sa); | ||
| 409 | if (err) | 422 | if (err) |
| 410 | goto out; | 423 | goto out; |
| 411 | send_addr_notify = 1; | 424 | send_addr_notify = 1; |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 022d8894c11d..c54f3664bce5 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
| @@ -268,8 +268,10 @@ struct sk_buff *__netdev_alloc_skb(struct net_device *dev, | |||
| 268 | struct sk_buff *skb; | 268 | struct sk_buff *skb; |
| 269 | 269 | ||
| 270 | skb = alloc_skb(length + NET_SKB_PAD, gfp_mask); | 270 | skb = alloc_skb(length + NET_SKB_PAD, gfp_mask); |
| 271 | if (likely(skb)) | 271 | if (likely(skb)) { |
| 272 | skb_reserve(skb, NET_SKB_PAD); | 272 | skb_reserve(skb, NET_SKB_PAD); |
| 273 | skb->dev = dev; | ||
| 274 | } | ||
| 273 | return skb; | 275 | return skb; |
| 274 | } | 276 | } |
| 275 | 277 | ||
diff --git a/net/core/utils.c b/net/core/utils.c index 4f96f389243d..e31c90e05594 100644 --- a/net/core/utils.c +++ b/net/core/utils.c | |||
| @@ -130,12 +130,13 @@ void __init net_random_init(void) | |||
| 130 | static int net_random_reseed(void) | 130 | static int net_random_reseed(void) |
| 131 | { | 131 | { |
| 132 | int i; | 132 | int i; |
| 133 | unsigned long seed[NR_CPUS]; | 133 | unsigned long seed; |
| 134 | 134 | ||
| 135 | get_random_bytes(seed, sizeof(seed)); | ||
| 136 | for_each_possible_cpu(i) { | 135 | for_each_possible_cpu(i) { |
| 137 | struct nrnd_state *state = &per_cpu(net_rand_state,i); | 136 | struct nrnd_state *state = &per_cpu(net_rand_state,i); |
| 138 | __net_srandom(state, seed[i]); | 137 | |
| 138 | get_random_bytes(&seed, sizeof(seed)); | ||
| 139 | __net_srandom(state, seed); | ||
| 139 | } | 140 | } |
| 140 | return 0; | 141 | return 0; |
| 141 | } | 142 | } |
diff --git a/net/core/wireless.c b/net/core/wireless.c index d2bc72d318f7..de0bde4b51dd 100644 --- a/net/core/wireless.c +++ b/net/core/wireless.c | |||
| @@ -82,6 +82,7 @@ | |||
| 82 | #include <linux/init.h> /* for __init */ | 82 | #include <linux/init.h> /* for __init */ |
| 83 | #include <linux/if_arp.h> /* ARPHRD_ETHER */ | 83 | #include <linux/if_arp.h> /* ARPHRD_ETHER */ |
| 84 | #include <linux/etherdevice.h> /* compare_ether_addr */ | 84 | #include <linux/etherdevice.h> /* compare_ether_addr */ |
| 85 | #include <linux/interrupt.h> | ||
| 85 | 86 | ||
| 86 | #include <linux/wireless.h> /* Pretty obvious */ | 87 | #include <linux/wireless.h> /* Pretty obvious */ |
| 87 | #include <net/iw_handler.h> /* New driver API */ | 88 | #include <net/iw_handler.h> /* New driver API */ |
| @@ -1842,6 +1843,18 @@ int wireless_rtnetlink_set(struct net_device * dev, | |||
| 1842 | */ | 1843 | */ |
| 1843 | 1844 | ||
| 1844 | #ifdef WE_EVENT_RTNETLINK | 1845 | #ifdef WE_EVENT_RTNETLINK |
| 1846 | static struct sk_buff_head wireless_nlevent_queue; | ||
| 1847 | |||
| 1848 | static void wireless_nlevent_process(unsigned long data) | ||
| 1849 | { | ||
| 1850 | struct sk_buff *skb; | ||
| 1851 | |||
| 1852 | while ((skb = skb_dequeue(&wireless_nlevent_queue))) | ||
| 1853 | netlink_broadcast(rtnl, skb, 0, RTNLGRP_LINK, GFP_ATOMIC); | ||
| 1854 | } | ||
| 1855 | |||
| 1856 | static DECLARE_TASKLET(wireless_nlevent_tasklet, wireless_nlevent_process, 0); | ||
| 1857 | |||
| 1845 | /* ---------------------------------------------------------------- */ | 1858 | /* ---------------------------------------------------------------- */ |
| 1846 | /* | 1859 | /* |
| 1847 | * Fill a rtnetlink message with our event data. | 1860 | * Fill a rtnetlink message with our event data. |
| @@ -1904,8 +1917,17 @@ static inline void rtmsg_iwinfo(struct net_device * dev, | |||
| 1904 | return; | 1917 | return; |
| 1905 | } | 1918 | } |
| 1906 | NETLINK_CB(skb).dst_group = RTNLGRP_LINK; | 1919 | NETLINK_CB(skb).dst_group = RTNLGRP_LINK; |
| 1907 | netlink_broadcast(rtnl, skb, 0, RTNLGRP_LINK, GFP_ATOMIC); | 1920 | skb_queue_tail(&wireless_nlevent_queue, skb); |
| 1921 | tasklet_schedule(&wireless_nlevent_tasklet); | ||
| 1922 | } | ||
| 1923 | |||
| 1924 | static int __init wireless_nlevent_init(void) | ||
| 1925 | { | ||
| 1926 | skb_queue_head_init(&wireless_nlevent_queue); | ||
| 1927 | return 0; | ||
| 1908 | } | 1928 | } |
| 1929 | |||
| 1930 | subsys_initcall(wireless_nlevent_init); | ||
| 1909 | #endif /* WE_EVENT_RTNETLINK */ | 1931 | #endif /* WE_EVENT_RTNETLINK */ |
| 1910 | 1932 | ||
| 1911 | /* ---------------------------------------------------------------- */ | 1933 | /* ---------------------------------------------------------------- */ |
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index 9be53a8e72c3..51738000f3dc 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c | |||
| @@ -159,7 +159,7 @@ void free_fib_info(struct fib_info *fi) | |||
| 159 | 159 | ||
| 160 | void fib_release_info(struct fib_info *fi) | 160 | void fib_release_info(struct fib_info *fi) |
| 161 | { | 161 | { |
| 162 | write_lock(&fib_info_lock); | 162 | write_lock_bh(&fib_info_lock); |
| 163 | if (fi && --fi->fib_treeref == 0) { | 163 | if (fi && --fi->fib_treeref == 0) { |
| 164 | hlist_del(&fi->fib_hash); | 164 | hlist_del(&fi->fib_hash); |
| 165 | if (fi->fib_prefsrc) | 165 | if (fi->fib_prefsrc) |
| @@ -172,7 +172,7 @@ void fib_release_info(struct fib_info *fi) | |||
| 172 | fi->fib_dead = 1; | 172 | fi->fib_dead = 1; |
| 173 | fib_info_put(fi); | 173 | fib_info_put(fi); |
| 174 | } | 174 | } |
| 175 | write_unlock(&fib_info_lock); | 175 | write_unlock_bh(&fib_info_lock); |
| 176 | } | 176 | } |
| 177 | 177 | ||
| 178 | static __inline__ int nh_comp(const struct fib_info *fi, const struct fib_info *ofi) | 178 | static __inline__ int nh_comp(const struct fib_info *fi, const struct fib_info *ofi) |
| @@ -598,7 +598,7 @@ static void fib_hash_move(struct hlist_head *new_info_hash, | |||
| 598 | unsigned int old_size = fib_hash_size; | 598 | unsigned int old_size = fib_hash_size; |
| 599 | unsigned int i, bytes; | 599 | unsigned int i, bytes; |
| 600 | 600 | ||
| 601 | write_lock(&fib_info_lock); | 601 | write_lock_bh(&fib_info_lock); |
| 602 | old_info_hash = fib_info_hash; | 602 | old_info_hash = fib_info_hash; |
| 603 | old_laddrhash = fib_info_laddrhash; | 603 | old_laddrhash = fib_info_laddrhash; |
| 604 | fib_hash_size = new_size; | 604 | fib_hash_size = new_size; |
| @@ -639,7 +639,7 @@ static void fib_hash_move(struct hlist_head *new_info_hash, | |||
| 639 | } | 639 | } |
| 640 | fib_info_laddrhash = new_laddrhash; | 640 | fib_info_laddrhash = new_laddrhash; |
| 641 | 641 | ||
| 642 | write_unlock(&fib_info_lock); | 642 | write_unlock_bh(&fib_info_lock); |
| 643 | 643 | ||
| 644 | bytes = old_size * sizeof(struct hlist_head *); | 644 | bytes = old_size * sizeof(struct hlist_head *); |
| 645 | fib_hash_free(old_info_hash, bytes); | 645 | fib_hash_free(old_info_hash, bytes); |
| @@ -820,7 +820,7 @@ link_it: | |||
| 820 | 820 | ||
| 821 | fi->fib_treeref++; | 821 | fi->fib_treeref++; |
| 822 | atomic_inc(&fi->fib_clntref); | 822 | atomic_inc(&fi->fib_clntref); |
| 823 | write_lock(&fib_info_lock); | 823 | write_lock_bh(&fib_info_lock); |
| 824 | hlist_add_head(&fi->fib_hash, | 824 | hlist_add_head(&fi->fib_hash, |
| 825 | &fib_info_hash[fib_info_hashfn(fi)]); | 825 | &fib_info_hash[fib_info_hashfn(fi)]); |
| 826 | if (fi->fib_prefsrc) { | 826 | if (fi->fib_prefsrc) { |
| @@ -839,7 +839,7 @@ link_it: | |||
| 839 | head = &fib_info_devhash[hash]; | 839 | head = &fib_info_devhash[hash]; |
| 840 | hlist_add_head(&nh->nh_hash, head); | 840 | hlist_add_head(&nh->nh_hash, head); |
| 841 | } endfor_nexthops(fi) | 841 | } endfor_nexthops(fi) |
| 842 | write_unlock(&fib_info_lock); | 842 | write_unlock_bh(&fib_info_lock); |
| 843 | return fi; | 843 | return fi; |
| 844 | 844 | ||
| 845 | err_inval: | 845 | err_inval: |
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 9f4b752f5a33..8e8117c19e4d 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c | |||
| @@ -1793,29 +1793,35 @@ int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr) | |||
| 1793 | struct in_device *in_dev; | 1793 | struct in_device *in_dev; |
| 1794 | u32 group = imr->imr_multiaddr.s_addr; | 1794 | u32 group = imr->imr_multiaddr.s_addr; |
| 1795 | u32 ifindex; | 1795 | u32 ifindex; |
| 1796 | int ret = -EADDRNOTAVAIL; | ||
| 1796 | 1797 | ||
| 1797 | rtnl_lock(); | 1798 | rtnl_lock(); |
| 1798 | in_dev = ip_mc_find_dev(imr); | 1799 | in_dev = ip_mc_find_dev(imr); |
| 1799 | if (!in_dev) { | ||
| 1800 | rtnl_unlock(); | ||
| 1801 | return -ENODEV; | ||
| 1802 | } | ||
| 1803 | ifindex = imr->imr_ifindex; | 1800 | ifindex = imr->imr_ifindex; |
| 1804 | for (imlp = &inet->mc_list; (iml = *imlp) != NULL; imlp = &iml->next) { | 1801 | for (imlp = &inet->mc_list; (iml = *imlp) != NULL; imlp = &iml->next) { |
| 1805 | if (iml->multi.imr_multiaddr.s_addr == group && | 1802 | if (iml->multi.imr_multiaddr.s_addr != group) |
| 1806 | iml->multi.imr_ifindex == ifindex) { | 1803 | continue; |
| 1807 | (void) ip_mc_leave_src(sk, iml, in_dev); | 1804 | if (ifindex) { |
| 1805 | if (iml->multi.imr_ifindex != ifindex) | ||
| 1806 | continue; | ||
| 1807 | } else if (imr->imr_address.s_addr && imr->imr_address.s_addr != | ||
| 1808 | iml->multi.imr_address.s_addr) | ||
| 1809 | continue; | ||
| 1810 | |||
| 1811 | (void) ip_mc_leave_src(sk, iml, in_dev); | ||
| 1808 | 1812 | ||
| 1809 | *imlp = iml->next; | 1813 | *imlp = iml->next; |
| 1810 | 1814 | ||
| 1815 | if (in_dev) | ||
| 1811 | ip_mc_dec_group(in_dev, group); | 1816 | ip_mc_dec_group(in_dev, group); |
| 1812 | rtnl_unlock(); | 1817 | rtnl_unlock(); |
| 1813 | sock_kfree_s(sk, iml, sizeof(*iml)); | 1818 | sock_kfree_s(sk, iml, sizeof(*iml)); |
| 1814 | return 0; | 1819 | return 0; |
| 1815 | } | ||
| 1816 | } | 1820 | } |
| 1821 | if (!in_dev) | ||
| 1822 | ret = -ENODEV; | ||
| 1817 | rtnl_unlock(); | 1823 | rtnl_unlock(); |
| 1818 | return -EADDRNOTAVAIL; | 1824 | return ret; |
| 1819 | } | 1825 | } |
| 1820 | 1826 | ||
| 1821 | int ip_mc_source(int add, int omode, struct sock *sk, struct | 1827 | int ip_mc_source(int add, int omode, struct sock *sk, struct |
| @@ -2199,13 +2205,13 @@ void ip_mc_drop_socket(struct sock *sk) | |||
| 2199 | struct in_device *in_dev; | 2205 | struct in_device *in_dev; |
| 2200 | inet->mc_list = iml->next; | 2206 | inet->mc_list = iml->next; |
| 2201 | 2207 | ||
| 2202 | if ((in_dev = inetdev_by_index(iml->multi.imr_ifindex)) != NULL) { | 2208 | in_dev = inetdev_by_index(iml->multi.imr_ifindex); |
| 2203 | (void) ip_mc_leave_src(sk, iml, in_dev); | 2209 | (void) ip_mc_leave_src(sk, iml, in_dev); |
| 2210 | if (in_dev != NULL) { | ||
| 2204 | ip_mc_dec_group(in_dev, iml->multi.imr_multiaddr.s_addr); | 2211 | ip_mc_dec_group(in_dev, iml->multi.imr_multiaddr.s_addr); |
| 2205 | in_dev_put(in_dev); | 2212 | in_dev_put(in_dev); |
| 2206 | } | 2213 | } |
| 2207 | sock_kfree_s(sk, iml, sizeof(*iml)); | 2214 | sock_kfree_s(sk, iml, sizeof(*iml)); |
| 2208 | |||
| 2209 | } | 2215 | } |
| 2210 | rtnl_unlock(); | 2216 | rtnl_unlock(); |
| 2211 | } | 2217 | } |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 9bf307a29783..4c20f5546893 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -947,7 +947,7 @@ alloc_new_skb: | |||
| 947 | skb_prev->csum = csum_sub(skb_prev->csum, | 947 | skb_prev->csum = csum_sub(skb_prev->csum, |
| 948 | skb->csum); | 948 | skb->csum); |
| 949 | data += fraggap; | 949 | data += fraggap; |
| 950 | skb_trim(skb_prev, maxfraglen); | 950 | pskb_trim_unique(skb_prev, maxfraglen); |
| 951 | } | 951 | } |
| 952 | 952 | ||
| 953 | copy = datalen - transhdrlen - fraggap; | 953 | copy = datalen - transhdrlen - fraggap; |
| @@ -1142,7 +1142,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, | |||
| 1142 | data, fraggap, 0); | 1142 | data, fraggap, 0); |
| 1143 | skb_prev->csum = csum_sub(skb_prev->csum, | 1143 | skb_prev->csum = csum_sub(skb_prev->csum, |
| 1144 | skb->csum); | 1144 | skb->csum); |
| 1145 | skb_trim(skb_prev, maxfraglen); | 1145 | pskb_trim_unique(skb_prev, maxfraglen); |
| 1146 | } | 1146 | } |
| 1147 | 1147 | ||
| 1148 | /* | 1148 | /* |
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c index 80c73ca90116..df4854cf598b 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c | |||
| @@ -1170,21 +1170,34 @@ static int __init arp_tables_init(void) | |||
| 1170 | { | 1170 | { |
| 1171 | int ret; | 1171 | int ret; |
| 1172 | 1172 | ||
| 1173 | xt_proto_init(NF_ARP); | 1173 | ret = xt_proto_init(NF_ARP); |
| 1174 | if (ret < 0) | ||
| 1175 | goto err1; | ||
| 1174 | 1176 | ||
| 1175 | /* Noone else will be downing sem now, so we won't sleep */ | 1177 | /* Noone else will be downing sem now, so we won't sleep */ |
| 1176 | xt_register_target(&arpt_standard_target); | 1178 | ret = xt_register_target(&arpt_standard_target); |
| 1177 | xt_register_target(&arpt_error_target); | 1179 | if (ret < 0) |
| 1180 | goto err2; | ||
| 1181 | ret = xt_register_target(&arpt_error_target); | ||
| 1182 | if (ret < 0) | ||
| 1183 | goto err3; | ||
| 1178 | 1184 | ||
| 1179 | /* Register setsockopt */ | 1185 | /* Register setsockopt */ |
| 1180 | ret = nf_register_sockopt(&arpt_sockopts); | 1186 | ret = nf_register_sockopt(&arpt_sockopts); |
| 1181 | if (ret < 0) { | 1187 | if (ret < 0) |
| 1182 | duprintf("Unable to register sockopts.\n"); | 1188 | goto err4; |
| 1183 | return ret; | ||
| 1184 | } | ||
| 1185 | 1189 | ||
| 1186 | printk("arp_tables: (C) 2002 David S. Miller\n"); | 1190 | printk("arp_tables: (C) 2002 David S. Miller\n"); |
| 1187 | return 0; | 1191 | return 0; |
| 1192 | |||
| 1193 | err4: | ||
| 1194 | xt_unregister_target(&arpt_error_target); | ||
| 1195 | err3: | ||
| 1196 | xt_unregister_target(&arpt_standard_target); | ||
| 1197 | err2: | ||
| 1198 | xt_proto_fini(NF_ARP); | ||
| 1199 | err1: | ||
| 1200 | return ret; | ||
| 1188 | } | 1201 | } |
| 1189 | 1202 | ||
| 1190 | static void __exit arp_tables_fini(void) | 1203 | static void __exit arp_tables_fini(void) |
diff --git a/net/ipv4/netfilter/ip_conntrack_netlink.c b/net/ipv4/netfilter/ip_conntrack_netlink.c index 33891bb1fde4..0d4cc92391fa 100644 --- a/net/ipv4/netfilter/ip_conntrack_netlink.c +++ b/net/ipv4/netfilter/ip_conntrack_netlink.c | |||
| @@ -415,21 +415,18 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb) | |||
| 415 | cb->args[0], *id); | 415 | cb->args[0], *id); |
| 416 | 416 | ||
| 417 | read_lock_bh(&ip_conntrack_lock); | 417 | read_lock_bh(&ip_conntrack_lock); |
| 418 | last = (struct ip_conntrack *)cb->args[1]; | ||
| 418 | for (; cb->args[0] < ip_conntrack_htable_size; cb->args[0]++) { | 419 | for (; cb->args[0] < ip_conntrack_htable_size; cb->args[0]++) { |
| 419 | restart: | 420 | restart: |
| 420 | last = (struct ip_conntrack *)cb->args[1]; | ||
| 421 | list_for_each_prev(i, &ip_conntrack_hash[cb->args[0]]) { | 421 | list_for_each_prev(i, &ip_conntrack_hash[cb->args[0]]) { |
| 422 | h = (struct ip_conntrack_tuple_hash *) i; | 422 | h = (struct ip_conntrack_tuple_hash *) i; |
| 423 | if (DIRECTION(h) != IP_CT_DIR_ORIGINAL) | 423 | if (DIRECTION(h) != IP_CT_DIR_ORIGINAL) |
| 424 | continue; | 424 | continue; |
| 425 | ct = tuplehash_to_ctrack(h); | 425 | ct = tuplehash_to_ctrack(h); |
| 426 | if (last != NULL) { | 426 | if (cb->args[1]) { |
| 427 | if (ct == last) { | 427 | if (ct != last) |
| 428 | ip_conntrack_put(last); | ||
| 429 | cb->args[1] = 0; | ||
| 430 | last = NULL; | ||
| 431 | } else | ||
| 432 | continue; | 428 | continue; |
| 429 | cb->args[1] = 0; | ||
| 433 | } | 430 | } |
| 434 | if (ctnetlink_fill_info(skb, NETLINK_CB(cb->skb).pid, | 431 | if (ctnetlink_fill_info(skb, NETLINK_CB(cb->skb).pid, |
| 435 | cb->nlh->nlmsg_seq, | 432 | cb->nlh->nlmsg_seq, |
| @@ -440,17 +437,17 @@ restart: | |||
| 440 | goto out; | 437 | goto out; |
| 441 | } | 438 | } |
| 442 | } | 439 | } |
| 443 | if (last != NULL) { | 440 | if (cb->args[1]) { |
| 444 | ip_conntrack_put(last); | ||
| 445 | cb->args[1] = 0; | 441 | cb->args[1] = 0; |
| 446 | goto restart; | 442 | goto restart; |
| 447 | } | 443 | } |
| 448 | } | 444 | } |
| 449 | out: | 445 | out: |
| 450 | read_unlock_bh(&ip_conntrack_lock); | 446 | read_unlock_bh(&ip_conntrack_lock); |
| 447 | if (last) | ||
| 448 | ip_conntrack_put(last); | ||
| 451 | 449 | ||
| 452 | DEBUGP("leaving, last bucket=%lu id=%u\n", cb->args[0], *id); | 450 | DEBUGP("leaving, last bucket=%lu id=%u\n", cb->args[0], *id); |
| 453 | |||
| 454 | return skb->len; | 451 | return skb->len; |
| 455 | } | 452 | } |
| 456 | 453 | ||
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c index fc5bdd5eb7d3..048514f15f2f 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c | |||
| @@ -230,7 +230,7 @@ ipt_do_table(struct sk_buff **pskb, | |||
| 230 | const char *indev, *outdev; | 230 | const char *indev, *outdev; |
| 231 | void *table_base; | 231 | void *table_base; |
| 232 | struct ipt_entry *e, *back; | 232 | struct ipt_entry *e, *back; |
| 233 | struct xt_table_info *private = table->private; | 233 | struct xt_table_info *private; |
| 234 | 234 | ||
| 235 | /* Initialization */ | 235 | /* Initialization */ |
| 236 | ip = (*pskb)->nh.iph; | 236 | ip = (*pskb)->nh.iph; |
| @@ -247,6 +247,7 @@ ipt_do_table(struct sk_buff **pskb, | |||
| 247 | 247 | ||
| 248 | read_lock_bh(&table->lock); | 248 | read_lock_bh(&table->lock); |
| 249 | IP_NF_ASSERT(table->valid_hooks & (1 << hook)); | 249 | IP_NF_ASSERT(table->valid_hooks & (1 << hook)); |
| 250 | private = table->private; | ||
| 250 | table_base = (void *)private->entries[smp_processor_id()]; | 251 | table_base = (void *)private->entries[smp_processor_id()]; |
| 251 | e = get_entry(table_base, private->hook_entry[hook]); | 252 | e = get_entry(table_base, private->hook_entry[hook]); |
| 252 | 253 | ||
| @@ -2239,22 +2240,39 @@ static int __init ip_tables_init(void) | |||
| 2239 | { | 2240 | { |
| 2240 | int ret; | 2241 | int ret; |
| 2241 | 2242 | ||
| 2242 | xt_proto_init(AF_INET); | 2243 | ret = xt_proto_init(AF_INET); |
| 2244 | if (ret < 0) | ||
| 2245 | goto err1; | ||
| 2243 | 2246 | ||
| 2244 | /* Noone else will be downing sem now, so we won't sleep */ | 2247 | /* Noone else will be downing sem now, so we won't sleep */ |
| 2245 | xt_register_target(&ipt_standard_target); | 2248 | ret = xt_register_target(&ipt_standard_target); |
| 2246 | xt_register_target(&ipt_error_target); | 2249 | if (ret < 0) |
| 2247 | xt_register_match(&icmp_matchstruct); | 2250 | goto err2; |
| 2251 | ret = xt_register_target(&ipt_error_target); | ||
| 2252 | if (ret < 0) | ||
| 2253 | goto err3; | ||
| 2254 | ret = xt_register_match(&icmp_matchstruct); | ||
| 2255 | if (ret < 0) | ||
| 2256 | goto err4; | ||
| 2248 | 2257 | ||
| 2249 | /* Register setsockopt */ | 2258 | /* Register setsockopt */ |
| 2250 | ret = nf_register_sockopt(&ipt_sockopts); | 2259 | ret = nf_register_sockopt(&ipt_sockopts); |
| 2251 | if (ret < 0) { | 2260 | if (ret < 0) |
| 2252 | duprintf("Unable to register sockopts.\n"); | 2261 | goto err5; |
| 2253 | return ret; | ||
| 2254 | } | ||
| 2255 | 2262 | ||
| 2256 | printk("ip_tables: (C) 2000-2006 Netfilter Core Team\n"); | 2263 | printk("ip_tables: (C) 2000-2006 Netfilter Core Team\n"); |
| 2257 | return 0; | 2264 | return 0; |
| 2265 | |||
| 2266 | err5: | ||
| 2267 | xt_unregister_match(&icmp_matchstruct); | ||
| 2268 | err4: | ||
| 2269 | xt_unregister_target(&ipt_error_target); | ||
| 2270 | err3: | ||
| 2271 | xt_unregister_target(&ipt_standard_target); | ||
| 2272 | err2: | ||
| 2273 | xt_proto_fini(AF_INET); | ||
| 2274 | err1: | ||
| 2275 | return ret; | ||
| 2258 | } | 2276 | } |
| 2259 | 2277 | ||
| 2260 | static void __exit ip_tables_fini(void) | 2278 | static void __exit ip_tables_fini(void) |
diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c index d7dd7fe7051c..d46fd677fa11 100644 --- a/net/ipv4/netfilter/ipt_ULOG.c +++ b/net/ipv4/netfilter/ipt_ULOG.c | |||
| @@ -115,6 +115,11 @@ static void ulog_send(unsigned int nlgroupnum) | |||
| 115 | del_timer(&ub->timer); | 115 | del_timer(&ub->timer); |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | if (!ub->skb) { | ||
| 119 | DEBUGP("ipt_ULOG: ulog_send: nothing to send\n"); | ||
| 120 | return; | ||
| 121 | } | ||
| 122 | |||
| 118 | /* last nlmsg needs NLMSG_DONE */ | 123 | /* last nlmsg needs NLMSG_DONE */ |
| 119 | if (ub->qlen > 1) | 124 | if (ub->qlen > 1) |
| 120 | ub->lastnlh->nlmsg_type = NLMSG_DONE; | 125 | ub->lastnlh->nlmsg_type = NLMSG_DONE; |
diff --git a/net/ipv4/netfilter/ipt_hashlimit.c b/net/ipv4/netfilter/ipt_hashlimit.c index 6b662449e825..3bd2368e1fc9 100644 --- a/net/ipv4/netfilter/ipt_hashlimit.c +++ b/net/ipv4/netfilter/ipt_hashlimit.c | |||
| @@ -454,15 +454,12 @@ hashlimit_match(const struct sk_buff *skb, | |||
| 454 | dh->rateinfo.credit_cap = user2credits(hinfo->cfg.avg * | 454 | dh->rateinfo.credit_cap = user2credits(hinfo->cfg.avg * |
| 455 | hinfo->cfg.burst); | 455 | hinfo->cfg.burst); |
| 456 | dh->rateinfo.cost = user2credits(hinfo->cfg.avg); | 456 | dh->rateinfo.cost = user2credits(hinfo->cfg.avg); |
| 457 | 457 | } else { | |
| 458 | spin_unlock_bh(&hinfo->lock); | 458 | /* update expiration timeout */ |
| 459 | return 1; | 459 | dh->expires = now + msecs_to_jiffies(hinfo->cfg.expire); |
| 460 | rateinfo_recalc(dh, now); | ||
| 460 | } | 461 | } |
| 461 | 462 | ||
| 462 | /* update expiration timeout */ | ||
| 463 | dh->expires = now + msecs_to_jiffies(hinfo->cfg.expire); | ||
| 464 | |||
| 465 | rateinfo_recalc(dh, now); | ||
| 466 | if (dh->rateinfo.credit >= dh->rateinfo.cost) { | 463 | if (dh->rateinfo.credit >= dh->rateinfo.cost) { |
| 467 | /* We're underlimit. */ | 464 | /* We're underlimit. */ |
| 468 | dh->rateinfo.credit -= dh->rateinfo.cost; | 465 | dh->rateinfo.credit -= dh->rateinfo.cost; |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 19bd49d69d9f..b873cbcdd0b8 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
| @@ -3157,7 +3157,7 @@ int __init ip_rt_init(void) | |||
| 3157 | rhash_entries, | 3157 | rhash_entries, |
| 3158 | (num_physpages >= 128 * 1024) ? | 3158 | (num_physpages >= 128 * 1024) ? |
| 3159 | 15 : 17, | 3159 | 15 : 17, |
| 3160 | HASH_HIGHMEM, | 3160 | 0, |
| 3161 | &rt_hash_log, | 3161 | &rt_hash_log, |
| 3162 | &rt_hash_mask, | 3162 | &rt_hash_mask, |
| 3163 | 0); | 3163 | 0); |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 5c08ea20a18d..507adefbc17c 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -466,7 +466,8 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, | |||
| 466 | if (skb->len != tcp_header_size) | 466 | if (skb->len != tcp_header_size) |
| 467 | tcp_event_data_sent(tp, skb, sk); | 467 | tcp_event_data_sent(tp, skb, sk); |
| 468 | 468 | ||
| 469 | TCP_INC_STATS(TCP_MIB_OUTSEGS); | 469 | if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq) |
| 470 | TCP_INC_STATS(TCP_MIB_OUTSEGS); | ||
| 470 | 471 | ||
| 471 | err = icsk->icsk_af_ops->queue_xmit(skb, 0); | 472 | err = icsk->icsk_af_ops->queue_xmit(skb, 0); |
| 472 | if (likely(err <= 0)) | 473 | if (likely(err <= 0)) |
| @@ -2157,10 +2158,9 @@ int tcp_connect(struct sock *sk) | |||
| 2157 | skb_shinfo(buff)->gso_size = 0; | 2158 | skb_shinfo(buff)->gso_size = 0; |
| 2158 | skb_shinfo(buff)->gso_type = 0; | 2159 | skb_shinfo(buff)->gso_type = 0; |
| 2159 | buff->csum = 0; | 2160 | buff->csum = 0; |
| 2161 | tp->snd_nxt = tp->write_seq; | ||
| 2160 | TCP_SKB_CB(buff)->seq = tp->write_seq++; | 2162 | TCP_SKB_CB(buff)->seq = tp->write_seq++; |
| 2161 | TCP_SKB_CB(buff)->end_seq = tp->write_seq; | 2163 | TCP_SKB_CB(buff)->end_seq = tp->write_seq; |
| 2162 | tp->snd_nxt = tp->write_seq; | ||
| 2163 | tp->pushed_seq = tp->write_seq; | ||
| 2164 | 2164 | ||
| 2165 | /* Send it off. */ | 2165 | /* Send it off. */ |
| 2166 | TCP_SKB_CB(buff)->when = tcp_time_stamp; | 2166 | TCP_SKB_CB(buff)->when = tcp_time_stamp; |
| @@ -2170,6 +2170,12 @@ int tcp_connect(struct sock *sk) | |||
| 2170 | sk_charge_skb(sk, buff); | 2170 | sk_charge_skb(sk, buff); |
| 2171 | tp->packets_out += tcp_skb_pcount(buff); | 2171 | tp->packets_out += tcp_skb_pcount(buff); |
| 2172 | tcp_transmit_skb(sk, buff, 1, GFP_KERNEL); | 2172 | tcp_transmit_skb(sk, buff, 1, GFP_KERNEL); |
| 2173 | |||
| 2174 | /* We change tp->snd_nxt after the tcp_transmit_skb() call | ||
| 2175 | * in order to make this packet get counted in tcpOutSegs. | ||
| 2176 | */ | ||
| 2177 | tp->snd_nxt = tp->write_seq; | ||
| 2178 | tp->pushed_seq = tp->write_seq; | ||
| 2173 | TCP_INC_STATS(TCP_MIB_ACTIVEOPENS); | 2179 | TCP_INC_STATS(TCP_MIB_ACTIVEOPENS); |
| 2174 | 2180 | ||
| 2175 | /* Timer for repeating the SYN until an answer. */ | 2181 | /* Timer for repeating the SYN until an answer. */ |
diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c index b3435324b573..dab37d2f65fc 100644 --- a/net/ipv4/tcp_probe.c +++ b/net/ipv4/tcp_probe.c | |||
| @@ -130,11 +130,12 @@ static ssize_t tcpprobe_read(struct file *file, char __user *buf, | |||
| 130 | error = wait_event_interruptible(tcpw.wait, | 130 | error = wait_event_interruptible(tcpw.wait, |
| 131 | __kfifo_len(tcpw.fifo) != 0); | 131 | __kfifo_len(tcpw.fifo) != 0); |
| 132 | if (error) | 132 | if (error) |
| 133 | return error; | 133 | goto out_free; |
| 134 | 134 | ||
| 135 | cnt = kfifo_get(tcpw.fifo, tbuf, len); | 135 | cnt = kfifo_get(tcpw.fifo, tbuf, len); |
| 136 | error = copy_to_user(buf, tbuf, cnt); | 136 | error = copy_to_user(buf, tbuf, cnt); |
| 137 | 137 | ||
| 138 | out_free: | ||
| 138 | vfree(tbuf); | 139 | vfree(tbuf); |
| 139 | 140 | ||
| 140 | return error ? error : cnt; | 141 | return error ? error : cnt; |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 8ea1e36bf8eb..0c5042e7380d 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
| @@ -1909,11 +1909,11 @@ static int inet6_addr_add(int ifindex, struct in6_addr *pfx, int plen, | |||
| 1909 | ifp = ipv6_add_addr(idev, pfx, plen, scope, ifa_flags); | 1909 | ifp = ipv6_add_addr(idev, pfx, plen, scope, ifa_flags); |
| 1910 | 1910 | ||
| 1911 | if (!IS_ERR(ifp)) { | 1911 | if (!IS_ERR(ifp)) { |
| 1912 | spin_lock(&ifp->lock); | 1912 | spin_lock_bh(&ifp->lock); |
| 1913 | ifp->valid_lft = valid_lft; | 1913 | ifp->valid_lft = valid_lft; |
| 1914 | ifp->prefered_lft = prefered_lft; | 1914 | ifp->prefered_lft = prefered_lft; |
| 1915 | ifp->tstamp = jiffies; | 1915 | ifp->tstamp = jiffies; |
| 1916 | spin_unlock(&ifp->lock); | 1916 | spin_unlock_bh(&ifp->lock); |
| 1917 | 1917 | ||
| 1918 | addrconf_dad_start(ifp, 0); | 1918 | addrconf_dad_start(ifp, 0); |
| 1919 | in6_ifa_put(ifp); | 1919 | in6_ifa_put(ifp); |
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index 1044b6fce0d5..3d6e9a351150 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c | |||
| @@ -712,6 +712,11 @@ discard_it: | |||
| 712 | return 0; | 712 | return 0; |
| 713 | } | 713 | } |
| 714 | 714 | ||
| 715 | /* | ||
| 716 | * Special lock-class for __icmpv6_socket: | ||
| 717 | */ | ||
| 718 | static struct lock_class_key icmpv6_socket_sk_dst_lock_key; | ||
| 719 | |||
| 715 | int __init icmpv6_init(struct net_proto_family *ops) | 720 | int __init icmpv6_init(struct net_proto_family *ops) |
| 716 | { | 721 | { |
| 717 | struct sock *sk; | 722 | struct sock *sk; |
| @@ -730,6 +735,14 @@ int __init icmpv6_init(struct net_proto_family *ops) | |||
| 730 | 735 | ||
| 731 | sk = per_cpu(__icmpv6_socket, i)->sk; | 736 | sk = per_cpu(__icmpv6_socket, i)->sk; |
| 732 | sk->sk_allocation = GFP_ATOMIC; | 737 | sk->sk_allocation = GFP_ATOMIC; |
| 738 | /* | ||
| 739 | * Split off their lock-class, because sk->sk_dst_lock | ||
| 740 | * gets used from softirqs, which is safe for | ||
| 741 | * __icmpv6_socket (because those never get directly used | ||
| 742 | * via userspace syscalls), but unsafe for normal sockets. | ||
| 743 | */ | ||
| 744 | lockdep_set_class(&sk->sk_dst_lock, | ||
| 745 | &icmpv6_socket_sk_dst_lock_key); | ||
| 733 | 746 | ||
| 734 | /* Enough space for 2 64K ICMP packets, including | 747 | /* Enough space for 2 64K ICMP packets, including |
| 735 | * sk_buff struct overhead. | 748 | * sk_buff struct overhead. |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 69451af6abe7..4fb47a252913 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
| @@ -1095,7 +1095,7 @@ alloc_new_skb: | |||
| 1095 | skb_prev->csum = csum_sub(skb_prev->csum, | 1095 | skb_prev->csum = csum_sub(skb_prev->csum, |
| 1096 | skb->csum); | 1096 | skb->csum); |
| 1097 | data += fraggap; | 1097 | data += fraggap; |
| 1098 | skb_trim(skb_prev, maxfraglen); | 1098 | pskb_trim_unique(skb_prev, maxfraglen); |
| 1099 | } | 1099 | } |
| 1100 | copy = datalen - transhdrlen - fraggap; | 1100 | copy = datalen - transhdrlen - fraggap; |
| 1101 | if (copy < 0) { | 1101 | if (copy < 0) { |
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 9d697d4dcffc..639eb20c9f1f 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
| @@ -268,13 +268,14 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, struct in6_addr *addr) | |||
| 268 | if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) { | 268 | if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) { |
| 269 | struct inet6_dev *idev = in6_dev_get(dev); | 269 | struct inet6_dev *idev = in6_dev_get(dev); |
| 270 | 270 | ||
| 271 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 271 | if (idev) { | 272 | if (idev) { |
| 272 | (void) ip6_mc_leave_src(sk,mc_lst,idev); | ||
| 273 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); | 273 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); |
| 274 | in6_dev_put(idev); | 274 | in6_dev_put(idev); |
| 275 | } | 275 | } |
| 276 | dev_put(dev); | 276 | dev_put(dev); |
| 277 | } | 277 | } else |
| 278 | (void) ip6_mc_leave_src(sk, mc_lst, NULL); | ||
| 278 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); | 279 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); |
| 279 | return 0; | 280 | return 0; |
| 280 | } | 281 | } |
| @@ -334,13 +335,14 @@ void ipv6_sock_mc_close(struct sock *sk) | |||
| 334 | if (dev) { | 335 | if (dev) { |
| 335 | struct inet6_dev *idev = in6_dev_get(dev); | 336 | struct inet6_dev *idev = in6_dev_get(dev); |
| 336 | 337 | ||
| 338 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 337 | if (idev) { | 339 | if (idev) { |
| 338 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 339 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); | 340 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); |
| 340 | in6_dev_put(idev); | 341 | in6_dev_put(idev); |
| 341 | } | 342 | } |
| 342 | dev_put(dev); | 343 | dev_put(dev); |
| 343 | } | 344 | } else |
| 345 | (void) ip6_mc_leave_src(sk, mc_lst, NULL); | ||
| 344 | 346 | ||
| 345 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); | 347 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); |
| 346 | 348 | ||
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index f26898b00347..c9d6b23cd3f7 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c | |||
| @@ -1398,23 +1398,39 @@ static int __init ip6_tables_init(void) | |||
| 1398 | { | 1398 | { |
| 1399 | int ret; | 1399 | int ret; |
| 1400 | 1400 | ||
| 1401 | xt_proto_init(AF_INET6); | 1401 | ret = xt_proto_init(AF_INET6); |
| 1402 | if (ret < 0) | ||
| 1403 | goto err1; | ||
| 1402 | 1404 | ||
| 1403 | /* Noone else will be downing sem now, so we won't sleep */ | 1405 | /* Noone else will be downing sem now, so we won't sleep */ |
| 1404 | xt_register_target(&ip6t_standard_target); | 1406 | ret = xt_register_target(&ip6t_standard_target); |
| 1405 | xt_register_target(&ip6t_error_target); | 1407 | if (ret < 0) |
| 1406 | xt_register_match(&icmp6_matchstruct); | 1408 | goto err2; |
| 1409 | ret = xt_register_target(&ip6t_error_target); | ||
| 1410 | if (ret < 0) | ||
| 1411 | goto err3; | ||
| 1412 | ret = xt_register_match(&icmp6_matchstruct); | ||
| 1413 | if (ret < 0) | ||
| 1414 | goto err4; | ||
| 1407 | 1415 | ||
| 1408 | /* Register setsockopt */ | 1416 | /* Register setsockopt */ |
| 1409 | ret = nf_register_sockopt(&ip6t_sockopts); | 1417 | ret = nf_register_sockopt(&ip6t_sockopts); |
| 1410 | if (ret < 0) { | 1418 | if (ret < 0) |
| 1411 | duprintf("Unable to register sockopts.\n"); | 1419 | goto err5; |
| 1412 | xt_proto_fini(AF_INET6); | ||
| 1413 | return ret; | ||
| 1414 | } | ||
| 1415 | 1420 | ||
| 1416 | printk("ip6_tables: (C) 2000-2006 Netfilter Core Team\n"); | 1421 | printk("ip6_tables: (C) 2000-2006 Netfilter Core Team\n"); |
| 1417 | return 0; | 1422 | return 0; |
| 1423 | |||
| 1424 | err5: | ||
| 1425 | xt_unregister_match(&icmp6_matchstruct); | ||
| 1426 | err4: | ||
| 1427 | xt_unregister_target(&ip6t_error_target); | ||
| 1428 | err3: | ||
| 1429 | xt_unregister_target(&ip6t_standard_target); | ||
| 1430 | err2: | ||
| 1431 | xt_proto_fini(AF_INET6); | ||
| 1432 | err1: | ||
| 1433 | return ret; | ||
| 1418 | } | 1434 | } |
| 1419 | 1435 | ||
| 1420 | static void __exit ip6_tables_fini(void) | 1436 | static void __exit ip6_tables_fini(void) |
diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c index aa34ff4b707c..bef3f61569f7 100644 --- a/net/ipx/af_ipx.c +++ b/net/ipx/af_ipx.c | |||
| @@ -1642,13 +1642,17 @@ static int ipx_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_ty | |||
| 1642 | if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) | 1642 | if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) |
| 1643 | goto out; | 1643 | goto out; |
| 1644 | 1644 | ||
| 1645 | ipx = ipx_hdr(skb); | 1645 | if (!pskb_may_pull(skb, sizeof(struct ipxhdr))) |
| 1646 | ipx_pktsize = ntohs(ipx->ipx_pktsize); | 1646 | goto drop; |
| 1647 | |||
| 1648 | ipx_pktsize = ntohs(ipx_hdr(skb)->ipx_pktsize); | ||
| 1647 | 1649 | ||
| 1648 | /* Too small or invalid header? */ | 1650 | /* Too small or invalid header? */ |
| 1649 | if (ipx_pktsize < sizeof(struct ipxhdr) || ipx_pktsize > skb->len) | 1651 | if (ipx_pktsize < sizeof(struct ipxhdr) || |
| 1652 | !pskb_may_pull(skb, ipx_pktsize)) | ||
| 1650 | goto drop; | 1653 | goto drop; |
| 1651 | 1654 | ||
| 1655 | ipx = ipx_hdr(skb); | ||
| 1652 | if (ipx->ipx_checksum != IPX_NO_CHECKSUM && | 1656 | if (ipx->ipx_checksum != IPX_NO_CHECKSUM && |
| 1653 | ipx->ipx_checksum != ipx_cksum(ipx, ipx_pktsize)) | 1657 | ipx->ipx_checksum != ipx_cksum(ipx, ipx_pktsize)) |
| 1654 | goto drop; | 1658 | goto drop; |
diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c index 42eb0c3a9780..61cb8cf7d153 100644 --- a/net/llc/llc_sap.c +++ b/net/llc/llc_sap.c | |||
| @@ -330,6 +330,9 @@ static void llc_sap_mcast(struct llc_sap *sap, | |||
| 330 | if (llc->laddr.lsap != laddr->lsap) | 330 | if (llc->laddr.lsap != laddr->lsap) |
| 331 | continue; | 331 | continue; |
| 332 | 332 | ||
| 333 | if (llc->dev != skb->dev) | ||
| 334 | continue; | ||
| 335 | |||
| 333 | skb1 = skb_clone(skb, GFP_ATOMIC); | 336 | skb1 = skb_clone(skb, GFP_ATOMIC); |
| 334 | if (!skb1) | 337 | if (!skb1) |
| 335 | break; | 338 | break; |
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index af4845971f70..6527d4e048d8 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
| @@ -429,9 +429,9 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb) | |||
| 429 | cb->args[0], *id); | 429 | cb->args[0], *id); |
| 430 | 430 | ||
| 431 | read_lock_bh(&nf_conntrack_lock); | 431 | read_lock_bh(&nf_conntrack_lock); |
| 432 | last = (struct nf_conn *)cb->args[1]; | ||
| 432 | for (; cb->args[0] < nf_conntrack_htable_size; cb->args[0]++) { | 433 | for (; cb->args[0] < nf_conntrack_htable_size; cb->args[0]++) { |
| 433 | restart: | 434 | restart: |
| 434 | last = (struct nf_conn *)cb->args[1]; | ||
| 435 | list_for_each_prev(i, &nf_conntrack_hash[cb->args[0]]) { | 435 | list_for_each_prev(i, &nf_conntrack_hash[cb->args[0]]) { |
| 436 | h = (struct nf_conntrack_tuple_hash *) i; | 436 | h = (struct nf_conntrack_tuple_hash *) i; |
| 437 | if (DIRECTION(h) != IP_CT_DIR_ORIGINAL) | 437 | if (DIRECTION(h) != IP_CT_DIR_ORIGINAL) |
| @@ -442,13 +442,10 @@ restart: | |||
| 442 | * then dump everything. */ | 442 | * then dump everything. */ |
| 443 | if (l3proto && L3PROTO(ct) != l3proto) | 443 | if (l3proto && L3PROTO(ct) != l3proto) |
| 444 | continue; | 444 | continue; |
| 445 | if (last != NULL) { | 445 | if (cb->args[1]) { |
| 446 | if (ct == last) { | 446 | if (ct != last) |
| 447 | nf_ct_put(last); | ||
| 448 | cb->args[1] = 0; | ||
| 449 | last = NULL; | ||
| 450 | } else | ||
| 451 | continue; | 447 | continue; |
| 448 | cb->args[1] = 0; | ||
| 452 | } | 449 | } |
| 453 | if (ctnetlink_fill_info(skb, NETLINK_CB(cb->skb).pid, | 450 | if (ctnetlink_fill_info(skb, NETLINK_CB(cb->skb).pid, |
| 454 | cb->nlh->nlmsg_seq, | 451 | cb->nlh->nlmsg_seq, |
| @@ -459,17 +456,17 @@ restart: | |||
| 459 | goto out; | 456 | goto out; |
| 460 | } | 457 | } |
| 461 | } | 458 | } |
| 462 | if (last != NULL) { | 459 | if (cb->args[1]) { |
| 463 | nf_ct_put(last); | ||
| 464 | cb->args[1] = 0; | 460 | cb->args[1] = 0; |
| 465 | goto restart; | 461 | goto restart; |
| 466 | } | 462 | } |
| 467 | } | 463 | } |
| 468 | out: | 464 | out: |
| 469 | read_unlock_bh(&nf_conntrack_lock); | 465 | read_unlock_bh(&nf_conntrack_lock); |
| 466 | if (last) | ||
| 467 | nf_ct_put(last); | ||
| 470 | 468 | ||
| 471 | DEBUGP("leaving, last bucket=%lu id=%u\n", cb->args[0], *id); | 469 | DEBUGP("leaving, last bucket=%lu id=%u\n", cb->args[0], *id); |
| 472 | |||
| 473 | return skb->len; | 470 | return skb->len; |
| 474 | } | 471 | } |
| 475 | 472 | ||
diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c index 61cdda4e5d3b..b59d3b2bde21 100644 --- a/net/netfilter/nfnetlink_log.c +++ b/net/netfilter/nfnetlink_log.c | |||
| @@ -366,6 +366,9 @@ __nfulnl_send(struct nfulnl_instance *inst) | |||
| 366 | if (timer_pending(&inst->timer)) | 366 | if (timer_pending(&inst->timer)) |
| 367 | del_timer(&inst->timer); | 367 | del_timer(&inst->timer); |
| 368 | 368 | ||
| 369 | if (!inst->skb) | ||
| 370 | return 0; | ||
| 371 | |||
| 369 | if (inst->qlen > 1) | 372 | if (inst->qlen > 1) |
| 370 | inst->lastnlh->nlmsg_type = NLMSG_DONE; | 373 | inst->lastnlh->nlmsg_type = NLMSG_DONE; |
| 371 | 374 | ||
diff --git a/net/netfilter/xt_physdev.c b/net/netfilter/xt_physdev.c index a9f4f6f3c628..63a965467465 100644 --- a/net/netfilter/xt_physdev.c +++ b/net/netfilter/xt_physdev.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 12 | #include <linux/skbuff.h> | 12 | #include <linux/skbuff.h> |
| 13 | #include <linux/netfilter_bridge.h> | ||
| 13 | #include <linux/netfilter/xt_physdev.h> | 14 | #include <linux/netfilter/xt_physdev.h> |
| 14 | #include <linux/netfilter/x_tables.h> | 15 | #include <linux/netfilter/x_tables.h> |
| 15 | #include <linux/netfilter_bridge.h> | 16 | #include <linux/netfilter_bridge.h> |
diff --git a/net/netfilter/xt_string.c b/net/netfilter/xt_string.c index d8e3891b5f8b..275330fcdaaa 100644 --- a/net/netfilter/xt_string.c +++ b/net/netfilter/xt_string.c | |||
| @@ -37,7 +37,7 @@ static int match(const struct sk_buff *skb, | |||
| 37 | 37 | ||
| 38 | return (skb_find_text((struct sk_buff *)skb, conf->from_offset, | 38 | return (skb_find_text((struct sk_buff *)skb, conf->from_offset, |
| 39 | conf->to_offset, conf->config, &state) | 39 | conf->to_offset, conf->config, &state) |
| 40 | != UINT_MAX) && !conf->invert; | 40 | != UINT_MAX) ^ conf->invert; |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | #define STRING_TEXT_PRIV(m) ((struct xt_string_info *) m) | 43 | #define STRING_TEXT_PRIV(m) ((struct xt_string_info *) m) |
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index eea366966740..0a6cfa0005be 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c | |||
| @@ -796,7 +796,7 @@ static int __init init_u32(void) | |||
| 796 | { | 796 | { |
| 797 | printk("u32 classifier\n"); | 797 | printk("u32 classifier\n"); |
| 798 | #ifdef CONFIG_CLS_U32_PERF | 798 | #ifdef CONFIG_CLS_U32_PERF |
| 799 | printk(" Perfomance counters on\n"); | 799 | printk(" Performance counters on\n"); |
| 800 | #endif | 800 | #endif |
| 801 | #ifdef CONFIG_NET_CLS_POLICE | 801 | #ifdef CONFIG_NET_CLS_POLICE |
| 802 | printk(" OLD policer on \n"); | 802 | printk(" OLD policer on \n"); |
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index f35bc676128c..3da67ca2c3ce 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
| @@ -1134,12 +1134,33 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family) | |||
| 1134 | } | 1134 | } |
| 1135 | EXPORT_SYMBOL(__xfrm_route_forward); | 1135 | EXPORT_SYMBOL(__xfrm_route_forward); |
| 1136 | 1136 | ||
| 1137 | /* Optimize later using cookies and generation ids. */ | ||
| 1138 | |||
| 1137 | static struct dst_entry *xfrm_dst_check(struct dst_entry *dst, u32 cookie) | 1139 | static struct dst_entry *xfrm_dst_check(struct dst_entry *dst, u32 cookie) |
| 1138 | { | 1140 | { |
| 1139 | /* If it is marked obsolete, which is how we even get here, | 1141 | /* Code (such as __xfrm4_bundle_create()) sets dst->obsolete |
| 1140 | * then we have purged it from the policy bundle list and we | 1142 | * to "-1" to force all XFRM destinations to get validated by |
| 1141 | * did that for a good reason. | 1143 | * dst_ops->check on every use. We do this because when a |
| 1144 | * normal route referenced by an XFRM dst is obsoleted we do | ||
| 1145 | * not go looking around for all parent referencing XFRM dsts | ||
| 1146 | * so that we can invalidate them. It is just too much work. | ||
| 1147 | * Instead we make the checks here on every use. For example: | ||
| 1148 | * | ||
| 1149 | * XFRM dst A --> IPv4 dst X | ||
| 1150 | * | ||
| 1151 | * X is the "xdst->route" of A (X is also the "dst->path" of A | ||
| 1152 | * in this example). If X is marked obsolete, "A" will not | ||
| 1153 | * notice. That's what we are validating here via the | ||
| 1154 | * stale_bundle() check. | ||
| 1155 | * | ||
| 1156 | * When a policy's bundle is pruned, we dst_free() the XFRM | ||
| 1157 | * dst which causes it's ->obsolete field to be set to a | ||
| 1158 | * positive non-zero integer. If an XFRM dst has been pruned | ||
| 1159 | * like this, we want to force a new route lookup. | ||
| 1142 | */ | 1160 | */ |
| 1161 | if (dst->obsolete < 0 && !stale_bundle(dst)) | ||
| 1162 | return dst; | ||
| 1163 | |||
| 1143 | return NULL; | 1164 | return NULL; |
| 1144 | } | 1165 | } |
| 1145 | 1166 | ||
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 44312926b849..e2de650d3dbf 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
| @@ -391,7 +391,7 @@ static void do_input(char *alias, | |||
| 391 | unsigned int i; | 391 | unsigned int i; |
| 392 | 392 | ||
| 393 | for (i = min; i < max; i++) | 393 | for (i = min; i < max; i++) |
| 394 | if (arr[i / BITS_PER_LONG] & (1 << (i%BITS_PER_LONG))) | 394 | if (arr[i / BITS_PER_LONG] & (1L << (i%BITS_PER_LONG))) |
| 395 | sprintf(alias + strlen(alias), "%X,*", i); | 395 | sprintf(alias + strlen(alias), "%X,*", i); |
| 396 | } | 396 | } |
| 397 | 397 | ||
diff --git a/sound/oss/Kconfig b/sound/oss/Kconfig index f4980ca5c05c..1b7c3dfc2b41 100644 --- a/sound/oss/Kconfig +++ b/sound/oss/Kconfig | |||
| @@ -31,7 +31,7 @@ config SOUND_EMU10K1 | |||
| 31 | For more information on this driver and the degree of support for | 31 | For more information on this driver and the degree of support for |
| 32 | the different card models please check: | 32 | the different card models please check: |
| 33 | 33 | ||
| 34 | <http://sourceforge.net/projects/emu10k1/> | 34 | <http://sourceforge.net/projects/emu10k1/> |
| 35 | 35 | ||
| 36 | It is now possible to load dsp microcode patches into the EMU10K1 | 36 | It is now possible to load dsp microcode patches into the EMU10K1 |
| 37 | chip. These patches are used to implement real time sound | 37 | chip. These patches are used to implement real time sound |
| @@ -140,7 +140,7 @@ config SOUND_TRIDENT | |||
| 140 | system support" and "Sysctl support", and after the /proc file | 140 | system support" and "Sysctl support", and after the /proc file |
| 141 | system has been mounted, executing the command | 141 | system has been mounted, executing the command |
| 142 | 142 | ||
| 143 | command what is enabled | 143 | command what is enabled |
| 144 | 144 | ||
| 145 | echo 0>/proc/ALi5451 pcm out is also set to S/PDIF out. (Default). | 145 | echo 0>/proc/ALi5451 pcm out is also set to S/PDIF out. (Default). |
| 146 | 146 | ||
| @@ -838,7 +838,7 @@ config SOUND_WAVEARTIST | |||
| 838 | 838 | ||
| 839 | config SOUND_TVMIXER | 839 | config SOUND_TVMIXER |
| 840 | tristate "TV card (bt848) mixer support" | 840 | tristate "TV card (bt848) mixer support" |
| 841 | depends on SOUND_PRIME && I2C | 841 | depends on SOUND_PRIME && I2C && VIDEO_V4L1 |
| 842 | help | 842 | help |
| 843 | Support for audio mixer facilities on the BT848 TV frame-grabber | 843 | Support for audio mixer facilities on the BT848 TV frame-grabber |
| 844 | card. | 844 | card. |
diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig index d7ad32f514da..e49c0fe21b0d 100644 --- a/sound/pci/Kconfig +++ b/sound/pci/Kconfig | |||
| @@ -16,16 +16,16 @@ config SND_AD1889 | |||
| 16 | will be called snd-ad1889. | 16 | will be called snd-ad1889. |
| 17 | 17 | ||
| 18 | config SND_ALS300 | 18 | config SND_ALS300 |
| 19 | tristate "Avance Logic ALS300/ALS300+" | 19 | tristate "Avance Logic ALS300/ALS300+" |
| 20 | depends on SND | 20 | depends on SND |
| 21 | select SND_PCM | 21 | select SND_PCM |
| 22 | select SND_AC97_CODEC | 22 | select SND_AC97_CODEC |
| 23 | select SND_OPL3_LIB | 23 | select SND_OPL3_LIB |
| 24 | help | 24 | help |
| 25 | Say 'Y' or 'M' to include support for Avance Logic ALS300/ALS300+ | 25 | Say 'Y' or 'M' to include support for Avance Logic ALS300/ALS300+ |
| 26 | 26 | ||
| 27 | To compile this driver as a module, choose M here: the module | 27 | To compile this driver as a module, choose M here: the module |
| 28 | will be called snd-als300 | 28 | will be called snd-als300 |
| 29 | 29 | ||
| 30 | config SND_ALS4000 | 30 | config SND_ALS4000 |
| 31 | tristate "Avance Logic ALS4000" | 31 | tristate "Avance Logic ALS4000" |
| @@ -78,49 +78,49 @@ config SND_ATIIXP_MODEM | |||
| 78 | will be called snd-atiixp-modem. | 78 | will be called snd-atiixp-modem. |
| 79 | 79 | ||
| 80 | config SND_AU8810 | 80 | config SND_AU8810 |
| 81 | tristate "Aureal Advantage" | 81 | tristate "Aureal Advantage" |
| 82 | depends on SND | 82 | depends on SND |
| 83 | select SND_MPU401_UART | 83 | select SND_MPU401_UART |
| 84 | select SND_AC97_CODEC | 84 | select SND_AC97_CODEC |
| 85 | help | 85 | help |
| 86 | Say Y here to include support for Aureal Advantage soundcards. | 86 | Say Y here to include support for Aureal Advantage soundcards. |
| 87 | 87 | ||
| 88 | Supported features: Hardware Mixer, SRC, EQ and SPDIF output. | 88 | Supported features: Hardware Mixer, SRC, EQ and SPDIF output. |
| 89 | 3D support code is in place, but not yet useable. For more info, | 89 | 3D support code is in place, but not yet useable. For more info, |
| 90 | email the ALSA developer list, or <mjander@users.sourceforge.net>. | 90 | email the ALSA developer list, or <mjander@users.sourceforge.net>. |
| 91 | 91 | ||
| 92 | To compile this driver as a module, choose M here: the module | 92 | To compile this driver as a module, choose M here: the module |
| 93 | will be called snd-au8810. | 93 | will be called snd-au8810. |
| 94 | 94 | ||
| 95 | config SND_AU8820 | 95 | config SND_AU8820 |
| 96 | tristate "Aureal Vortex" | 96 | tristate "Aureal Vortex" |
| 97 | depends on SND | 97 | depends on SND |
| 98 | select SND_MPU401_UART | 98 | select SND_MPU401_UART |
| 99 | select SND_AC97_CODEC | 99 | select SND_AC97_CODEC |
| 100 | help | 100 | help |
| 101 | Say Y here to include support for Aureal Vortex soundcards. | 101 | Say Y here to include support for Aureal Vortex soundcards. |
| 102 | 102 | ||
| 103 | Supported features: Hardware Mixer and SRC. For more info, email | 103 | Supported features: Hardware Mixer and SRC. For more info, email |
| 104 | the ALSA developer list, or <mjander@users.sourceforge.net>. | 104 | the ALSA developer list, or <mjander@users.sourceforge.net>. |
| 105 | 105 | ||
| 106 | To compile this driver as a module, choose M here: the module | 106 | To compile this driver as a module, choose M here: the module |
| 107 | will be called snd-au8820. | 107 | will be called snd-au8820. |
| 108 | 108 | ||
| 109 | config SND_AU8830 | 109 | config SND_AU8830 |
| 110 | tristate "Aureal Vortex 2" | 110 | tristate "Aureal Vortex 2" |
| 111 | depends on SND | 111 | depends on SND |
| 112 | select SND_MPU401_UART | 112 | select SND_MPU401_UART |
| 113 | select SND_AC97_CODEC | 113 | select SND_AC97_CODEC |
| 114 | help | 114 | help |
| 115 | Say Y here to include support for Aureal Vortex 2 soundcards. | 115 | Say Y here to include support for Aureal Vortex 2 soundcards. |
| 116 | 116 | ||
| 117 | Supported features: Hardware Mixer, SRC, EQ and SPDIF output. | 117 | Supported features: Hardware Mixer, SRC, EQ and SPDIF output. |
| 118 | 3D support code is in place, but not yet useable. For more info, | 118 | 3D support code is in place, but not yet useable. For more info, |
| 119 | email the ALSA developer list, or <mjander@users.sourceforge.net>. | 119 | email the ALSA developer list, or <mjander@users.sourceforge.net>. |
| 120 | 120 | ||
| 121 | To compile this driver as a module, choose M here: the module | 121 | To compile this driver as a module, choose M here: the module |
| 122 | will be called snd-au8830. | 122 | will be called snd-au8830. |
| 123 | 123 | ||
| 124 | config SND_AZT3328 | 124 | config SND_AZT3328 |
| 125 | tristate "Aztech AZF3328 / PCI168 (EXPERIMENTAL)" | 125 | tristate "Aztech AZF3328 / PCI168 (EXPERIMENTAL)" |
| 126 | depends on SND && EXPERIMENTAL | 126 | depends on SND && EXPERIMENTAL |
| @@ -135,10 +135,10 @@ config SND_AZT3328 | |||
| 135 | will be called snd-azt3328. | 135 | will be called snd-azt3328. |
| 136 | 136 | ||
| 137 | config SND_BT87X | 137 | config SND_BT87X |
| 138 | tristate "Bt87x Audio Capture" | 138 | tristate "Bt87x Audio Capture" |
| 139 | depends on SND | 139 | depends on SND |
| 140 | select SND_PCM | 140 | select SND_PCM |
| 141 | help | 141 | help |
| 142 | If you want to record audio from TV cards based on | 142 | If you want to record audio from TV cards based on |
| 143 | Brooktree Bt878/Bt879 chips, say Y here and read | 143 | Brooktree Bt878/Bt879 chips, say Y here and read |
| 144 | <file:Documentation/sound/alsa/Bt87x.txt>. | 144 | <file:Documentation/sound/alsa/Bt87x.txt>. |
| @@ -209,7 +209,7 @@ config SND_CS46XX | |||
| 209 | config SND_CS46XX_NEW_DSP | 209 | config SND_CS46XX_NEW_DSP |
| 210 | bool "Cirrus Logic (Sound Fusion) New DSP support" | 210 | bool "Cirrus Logic (Sound Fusion) New DSP support" |
| 211 | depends on SND_CS46XX | 211 | depends on SND_CS46XX |
| 212 | default y | 212 | default y |
| 213 | help | 213 | help |
| 214 | Say Y here to use a new DSP image for SPDIF and dual codecs. | 214 | Say Y here to use a new DSP image for SPDIF and dual codecs. |
| 215 | 215 | ||
| @@ -225,7 +225,7 @@ config SND_CS5535AUDIO | |||
| 225 | referred to as NS CS5535 IO or AMD CS5535 IO companion in | 225 | referred to as NS CS5535 IO or AMD CS5535 IO companion in |
| 226 | various literature. This driver also supports the CS5536 audio | 226 | various literature. This driver also supports the CS5536 audio |
| 227 | device. However, for both chips, on certain boards, you may | 227 | device. However, for both chips, on certain boards, you may |
| 228 | need to use ac97_quirk=hp_only if your board has physically | 228 | need to use ac97_quirk=hp_only if your board has physically |
| 229 | mapped headphone out to master output. If that works for you, | 229 | mapped headphone out to master output. If that works for you, |
| 230 | send lspci -vvv output to the mailing list so that your board | 230 | send lspci -vvv output to the mailing list so that your board |
| 231 | can be identified in the quirks list. | 231 | can be identified in the quirks list. |
| @@ -468,11 +468,13 @@ config SND_FM801_TEA575X_BOOL | |||
| 468 | FM801 chip with a TEA5757 tuner connected to GPIO1-3 pins (Media | 468 | FM801 chip with a TEA5757 tuner connected to GPIO1-3 pins (Media |
| 469 | Forte SF256-PCS-02) into the snd-fm801 driver. | 469 | Forte SF256-PCS-02) into the snd-fm801 driver. |
| 470 | 470 | ||
| 471 | This will enable support for the old V4L1 API. | ||
| 472 | |||
| 471 | config SND_FM801_TEA575X | 473 | config SND_FM801_TEA575X |
| 472 | tristate | 474 | tristate |
| 473 | depends on SND_FM801_TEA575X_BOOL | 475 | depends on SND_FM801_TEA575X_BOOL |
| 474 | default SND_FM801 | 476 | default SND_FM801 |
| 475 | select VIDEO_DEV | 477 | select VIDEO_V4L1 |
| 476 | 478 | ||
| 477 | config SND_HDA_INTEL | 479 | config SND_HDA_INTEL |
| 478 | tristate "Intel HD Audio" | 480 | tristate "Intel HD Audio" |
diff --git a/usr/Makefile b/usr/Makefile index e93824269da2..5b31c0b61c76 100644 --- a/usr/Makefile +++ b/usr/Makefile | |||
| @@ -35,6 +35,9 @@ quiet_cmd_initfs = GEN $@ | |||
| 35 | cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input) | 35 | cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input) |
| 36 | 36 | ||
| 37 | targets := initramfs_data.cpio.gz | 37 | targets := initramfs_data.cpio.gz |
| 38 | # do not try to update files included in initramfs | ||
| 39 | $(deps_initramfs): ; | ||
| 40 | |||
| 38 | $(deps_initramfs): klibcdirs | 41 | $(deps_initramfs): klibcdirs |
| 39 | # We rebuild initramfs_data.cpio.gz if: | 42 | # We rebuild initramfs_data.cpio.gz if: |
| 40 | # 1) Any included file is newer then initramfs_data.cpio.gz | 43 | # 1) Any included file is newer then initramfs_data.cpio.gz |
