diff options
169 files changed, 2144 insertions, 814 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..3bab239e82fe 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -889,6 +889,12 @@ M: rdunlap@xenotime.net | |||
889 | T: git http://tali.admingilde.org/git/linux-docbook.git | 889 | T: git http://tali.admingilde.org/git/linux-docbook.git |
890 | S: Maintained | 890 | S: Maintained |
891 | 891 | ||
892 | DOCKING STATION DRIVER | ||
893 | P: Kristen Carlson Accardi | ||
894 | M: kristen.c.accardi@intel.com | ||
895 | L: linux-acpi@vger.kernel.org | ||
896 | S: Maintained | ||
897 | |||
892 | DOUBLETALK DRIVER | 898 | DOUBLETALK DRIVER |
893 | P: James R. Van Zandt | 899 | P: James R. Van Zandt |
894 | M: jrv@vanzandt.mv.com | 900 | M: jrv@vanzandt.mv.com |
@@ -2656,6 +2662,14 @@ M: chrisw@sous-sol.org | |||
2656 | L: stable@kernel.org | 2662 | L: stable@kernel.org |
2657 | S: Maintained | 2663 | S: Maintained |
2658 | 2664 | ||
2665 | STABLE BRANCH: | ||
2666 | P: Greg Kroah-Hartman | ||
2667 | M: greg@kroah.com | ||
2668 | P: Chris Wright | ||
2669 | M: chrisw@sous-sol.org | ||
2670 | L: stable@kernel.org | ||
2671 | S: Maintained | ||
2672 | |||
2659 | TPM DEVICE DRIVER | 2673 | TPM DEVICE DRIVER |
2660 | P: Kylene Hall | 2674 | P: Kylene Hall |
2661 | M: kjhall@us.ibm.com | 2675 | 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/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index 0db6387025ca..ee003bc0e8b1 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
@@ -59,7 +59,7 @@ static inline int gsi_irq_sharing(int gsi) { return gsi; } | |||
59 | 59 | ||
60 | #define BAD_MADT_ENTRY(entry, end) ( \ | 60 | #define BAD_MADT_ENTRY(entry, end) ( \ |
61 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ | 61 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ |
62 | ((acpi_table_entry_header *)entry)->length != sizeof(*entry)) | 62 | ((acpi_table_entry_header *)entry)->length < sizeof(*entry)) |
63 | 63 | ||
64 | #define PREFIX "ACPI: " | 64 | #define PREFIX "ACPI: " |
65 | 65 | ||
diff --git a/arch/i386/kernel/acpi/wakeup.S b/arch/i386/kernel/acpi/wakeup.S index 9f408eee4e6f..b781b38131c0 100644 --- a/arch/i386/kernel/acpi/wakeup.S +++ b/arch/i386/kernel/acpi/wakeup.S | |||
@@ -292,7 +292,10 @@ ENTRY(do_suspend_lowlevel) | |||
292 | pushl $3 | 292 | pushl $3 |
293 | call acpi_enter_sleep_state | 293 | call acpi_enter_sleep_state |
294 | addl $4, %esp | 294 | addl $4, %esp |
295 | ret | 295 | |
296 | # In case of S3 failure, we'll emerge here. Jump | ||
297 | # to ret_point to recover | ||
298 | jmp ret_point | ||
296 | .p2align 4,,7 | 299 | .p2align 4,,7 |
297 | ret_point: | 300 | ret_point: |
298 | call restore_registers | 301 | call restore_registers |
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/acpi.c b/arch/ia64/kernel/acpi.c index 99761b81db44..0176556aeecc 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -55,7 +55,7 @@ | |||
55 | 55 | ||
56 | #define BAD_MADT_ENTRY(entry, end) ( \ | 56 | #define BAD_MADT_ENTRY(entry, end) ( \ |
57 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ | 57 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ |
58 | ((acpi_table_entry_header *)entry)->length != sizeof(*entry)) | 58 | ((acpi_table_entry_header *)entry)->length < sizeof(*entry)) |
59 | 59 | ||
60 | #define PREFIX "ACPI: " | 60 | #define PREFIX "ACPI: " |
61 | 61 | ||
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/acpi/ac.c b/drivers/acpi/ac.c index 96309b9660da..11abc7bf777e 100644 --- a/drivers/acpi/ac.c +++ b/drivers/acpi/ac.c | |||
@@ -285,6 +285,8 @@ static int __init acpi_ac_init(void) | |||
285 | { | 285 | { |
286 | int result; | 286 | int result; |
287 | 287 | ||
288 | if (acpi_disabled) | ||
289 | return -ENODEV; | ||
288 | 290 | ||
289 | acpi_ac_dir = acpi_lock_ac_dir(); | 291 | acpi_ac_dir = acpi_lock_ac_dir(); |
290 | if (!acpi_ac_dir) | 292 | if (!acpi_ac_dir) |
diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c index b0d4b147b19e..1dda370f402b 100644 --- a/drivers/acpi/acpi_memhotplug.c +++ b/drivers/acpi/acpi_memhotplug.c | |||
@@ -484,10 +484,8 @@ acpi_memory_register_notify_handler(acpi_handle handle, | |||
484 | 484 | ||
485 | 485 | ||
486 | status = is_memory_device(handle); | 486 | status = is_memory_device(handle); |
487 | if (ACPI_FAILURE(status)){ | 487 | if (ACPI_FAILURE(status)) |
488 | ACPI_EXCEPTION((AE_INFO, status, "handle is no memory device")); | ||
489 | return AE_OK; /* continue */ | 488 | return AE_OK; /* continue */ |
490 | } | ||
491 | 489 | ||
492 | status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, | 490 | status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, |
493 | acpi_memory_device_notify, NULL); | 491 | acpi_memory_device_notify, NULL); |
@@ -503,10 +501,8 @@ acpi_memory_deregister_notify_handler(acpi_handle handle, | |||
503 | 501 | ||
504 | 502 | ||
505 | status = is_memory_device(handle); | 503 | status = is_memory_device(handle); |
506 | if (ACPI_FAILURE(status)){ | 504 | if (ACPI_FAILURE(status)) |
507 | ACPI_EXCEPTION((AE_INFO, status, "handle is no memory device")); | ||
508 | return AE_OK; /* continue */ | 505 | return AE_OK; /* continue */ |
509 | } | ||
510 | 506 | ||
511 | status = acpi_remove_notify_handler(handle, | 507 | status = acpi_remove_notify_handler(handle, |
512 | ACPI_SYSTEM_NOTIFY, | 508 | ACPI_SYSTEM_NOTIFY, |
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 6e5221707d97..9810e2a55d0a 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
@@ -757,6 +757,9 @@ static int __init acpi_battery_init(void) | |||
757 | { | 757 | { |
758 | int result; | 758 | int result; |
759 | 759 | ||
760 | if (acpi_disabled) | ||
761 | return -ENODEV; | ||
762 | |||
760 | acpi_battery_dir = acpi_lock_battery_dir(); | 763 | acpi_battery_dir = acpi_lock_battery_dir(); |
761 | if (!acpi_battery_dir) | 764 | if (!acpi_battery_dir) |
762 | return -ENODEV; | 765 | return -ENODEV; |
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index b2977695e120..279c4bac92e5 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/init.h> | 26 | #include <linux/init.h> |
27 | #include <linux/ioport.h> | 27 | #include <linux/ioport.h> |
28 | #include <linux/kernel.h> | ||
28 | #include <linux/list.h> | 29 | #include <linux/list.h> |
29 | #include <linux/sched.h> | 30 | #include <linux/sched.h> |
30 | #include <linux/pm.h> | 31 | #include <linux/pm.h> |
@@ -68,7 +69,8 @@ int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device) | |||
68 | 69 | ||
69 | status = acpi_get_data(handle, acpi_bus_data_handler, (void **)device); | 70 | status = acpi_get_data(handle, acpi_bus_data_handler, (void **)device); |
70 | if (ACPI_FAILURE(status) || !*device) { | 71 | if (ACPI_FAILURE(status) || !*device) { |
71 | ACPI_EXCEPTION((AE_INFO, status, "No context for object [%p]", handle)); | 72 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n", |
73 | handle)); | ||
72 | return -ENODEV; | 74 | return -ENODEV; |
73 | } | 75 | } |
74 | 76 | ||
@@ -192,7 +194,7 @@ int acpi_bus_set_power(acpi_handle handle, int state) | |||
192 | /* Make sure this is a valid target state */ | 194 | /* Make sure this is a valid target state */ |
193 | 195 | ||
194 | if (!device->flags.power_manageable) { | 196 | if (!device->flags.power_manageable) { |
195 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device `[%s]' is not power manageable", | 197 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device `[%s]' is not power manageable\n", |
196 | device->kobj.name)); | 198 | device->kobj.name)); |
197 | return -ENODEV; | 199 | return -ENODEV; |
198 | } | 200 | } |
@@ -738,7 +740,10 @@ static int __init acpi_init(void) | |||
738 | return -ENODEV; | 740 | return -ENODEV; |
739 | } | 741 | } |
740 | 742 | ||
741 | firmware_register(&acpi_subsys); | 743 | result = firmware_register(&acpi_subsys); |
744 | if (result < 0) | ||
745 | printk(KERN_WARNING "%s: firmware_register error: %d\n", | ||
746 | __FUNCTION__, result); | ||
742 | 747 | ||
743 | result = acpi_bus_init(); | 748 | result = acpi_bus_init(); |
744 | 749 | ||
diff --git a/drivers/acpi/i2c_ec.c b/drivers/acpi/i2c_ec.c index 84239d51dc0c..6809c283ec58 100644 --- a/drivers/acpi/i2c_ec.c +++ b/drivers/acpi/i2c_ec.c | |||
@@ -330,7 +330,7 @@ static int acpi_ec_hc_add(struct acpi_device *device) | |||
330 | status = acpi_evaluate_integer(ec_hc->handle, "_EC", NULL, &val); | 330 | status = acpi_evaluate_integer(ec_hc->handle, "_EC", NULL, &val); |
331 | if (ACPI_FAILURE(status)) { | 331 | if (ACPI_FAILURE(status)) { |
332 | ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Error obtaining _EC\n")); | 332 | ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Error obtaining _EC\n")); |
333 | kfree(ec_hc->smbus); | 333 | kfree(ec_hc); |
334 | kfree(smbus); | 334 | kfree(smbus); |
335 | return -EIO; | 335 | return -EIO; |
336 | } | 336 | } |
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index b7d1514cd199..507f051d1cef 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -746,6 +746,16 @@ acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout) | |||
746 | ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Waiting for semaphore[%p|%d|%d]\n", | 746 | ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Waiting for semaphore[%p|%d|%d]\n", |
747 | handle, units, timeout)); | 747 | handle, units, timeout)); |
748 | 748 | ||
749 | /* | ||
750 | * This can be called during resume with interrupts off. | ||
751 | * Like boot-time, we should be single threaded and will | ||
752 | * always get the lock if we try -- timeout or not. | ||
753 | * If this doesn't succeed, then we will oops courtesy of | ||
754 | * might_sleep() in down(). | ||
755 | */ | ||
756 | if (!down_trylock(sem)) | ||
757 | return AE_OK; | ||
758 | |||
749 | switch (timeout) { | 759 | switch (timeout) { |
750 | /* | 760 | /* |
751 | * No Wait: | 761 | * No Wait: |
diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c index db7b350a5035..62bef0b3b614 100644 --- a/drivers/acpi/sbs.c +++ b/drivers/acpi/sbs.c | |||
@@ -1714,6 +1714,9 @@ static int __init acpi_sbs_init(void) | |||
1714 | { | 1714 | { |
1715 | int result = 0; | 1715 | int result = 0; |
1716 | 1716 | ||
1717 | if (acpi_disabled) | ||
1718 | return -ENODEV; | ||
1719 | |||
1717 | init_MUTEX(&sbs_sem); | 1720 | init_MUTEX(&sbs_sem); |
1718 | 1721 | ||
1719 | if (capacity_mode != DEF_CAPACITY_UNIT | 1722 | if (capacity_mode != DEF_CAPACITY_UNIT |
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index 5fcb50c7b778..698a1540e303 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | #include <linux/module.h> | 5 | #include <linux/module.h> |
6 | #include <linux/init.h> | 6 | #include <linux/init.h> |
7 | #include <linux/kernel.h> | ||
7 | #include <linux/acpi.h> | 8 | #include <linux/acpi.h> |
8 | 9 | ||
9 | #include <acpi/acpi_drivers.h> | 10 | #include <acpi/acpi_drivers.h> |
@@ -113,6 +114,8 @@ static struct kset acpi_namespace_kset = { | |||
113 | static void acpi_device_register(struct acpi_device *device, | 114 | static void acpi_device_register(struct acpi_device *device, |
114 | struct acpi_device *parent) | 115 | struct acpi_device *parent) |
115 | { | 116 | { |
117 | int err; | ||
118 | |||
116 | /* | 119 | /* |
117 | * Linkage | 120 | * Linkage |
118 | * ------- | 121 | * ------- |
@@ -138,7 +141,10 @@ static void acpi_device_register(struct acpi_device *device, | |||
138 | device->kobj.parent = &parent->kobj; | 141 | device->kobj.parent = &parent->kobj; |
139 | device->kobj.ktype = &ktype_acpi_ns; | 142 | device->kobj.ktype = &ktype_acpi_ns; |
140 | device->kobj.kset = &acpi_namespace_kset; | 143 | device->kobj.kset = &acpi_namespace_kset; |
141 | kobject_register(&device->kobj); | 144 | err = kobject_register(&device->kobj); |
145 | if (err < 0) | ||
146 | printk(KERN_WARNING "%s: kobject_register error: %d\n", | ||
147 | __FUNCTION__, err); | ||
142 | create_sysfs_device_files(device); | 148 | create_sysfs_device_files(device); |
143 | } | 149 | } |
144 | 150 | ||
@@ -1450,7 +1456,9 @@ static int __init acpi_scan_init(void) | |||
1450 | if (acpi_disabled) | 1456 | if (acpi_disabled) |
1451 | return 0; | 1457 | return 0; |
1452 | 1458 | ||
1453 | kset_register(&acpi_namespace_kset); | 1459 | result = kset_register(&acpi_namespace_kset); |
1460 | if (result < 0) | ||
1461 | printk(KERN_ERR PREFIX "kset_register error: %d\n", result); | ||
1454 | 1462 | ||
1455 | result = bus_register(&acpi_bus_type); | 1463 | result = bus_register(&acpi_bus_type); |
1456 | if (result) { | 1464 | if (result) { |
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c index f48227f4c8c9..d0d84c43a9d4 100644 --- a/drivers/acpi/utils.c +++ b/drivers/acpi/utils.c | |||
@@ -262,7 +262,7 @@ acpi_evaluate_integer(acpi_handle handle, | |||
262 | if (!data) | 262 | if (!data) |
263 | return AE_BAD_PARAMETER; | 263 | return AE_BAD_PARAMETER; |
264 | 264 | ||
265 | element = kmalloc(sizeof(union acpi_object), GFP_KERNEL); | 265 | element = kmalloc(sizeof(union acpi_object), irqs_disabled() ? GFP_ATOMIC: GFP_KERNEL); |
266 | if (!element) | 266 | if (!element) |
267 | return AE_NO_MEMORY; | 267 | return AE_NO_MEMORY; |
268 | 268 | ||
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..8a60f391ffcf 100644 --- a/drivers/pci/hotplug/Kconfig +++ b/drivers/pci/hotplug/Kconfig | |||
@@ -76,7 +76,7 @@ config HOTPLUG_PCI_IBM | |||
76 | 76 | ||
77 | config HOTPLUG_PCI_ACPI | 77 | config HOTPLUG_PCI_ACPI |
78 | tristate "ACPI PCI Hotplug driver" | 78 | tristate "ACPI PCI Hotplug driver" |
79 | depends on ACPI_DOCK && HOTPLUG_PCI | 79 | depends on (!ACPI_DOCK && ACPI && HOTPLUG_PCI) || (ACPI_DOCK && HOTPLUG_PCI) |
80 | help | 80 | help |
81 | Say Y here if you have a system that supports PCI Hotplug using | 81 | Say Y here if you have a system that supports PCI Hotplug using |
82 | ACPI. | 82 | ACPI. |
@@ -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/pci/quirks.c b/drivers/pci/quirks.c index fb08bc951ac0..04618d4d7d74 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -1518,6 +1518,63 @@ static void __devinit quirk_netmos(struct pci_dev *dev) | |||
1518 | } | 1518 | } |
1519 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETMOS, PCI_ANY_ID, quirk_netmos); | 1519 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETMOS, PCI_ANY_ID, quirk_netmos); |
1520 | 1520 | ||
1521 | static void __devinit quirk_e100_interrupt(struct pci_dev *dev) | ||
1522 | { | ||
1523 | u16 command; | ||
1524 | u32 bar; | ||
1525 | u8 __iomem *csr; | ||
1526 | u8 cmd_hi; | ||
1527 | |||
1528 | switch (dev->device) { | ||
1529 | /* PCI IDs taken from drivers/net/e100.c */ | ||
1530 | case 0x1029: | ||
1531 | case 0x1030 ... 0x1034: | ||
1532 | case 0x1038 ... 0x103E: | ||
1533 | case 0x1050 ... 0x1057: | ||
1534 | case 0x1059: | ||
1535 | case 0x1064 ... 0x106B: | ||
1536 | case 0x1091 ... 0x1095: | ||
1537 | case 0x1209: | ||
1538 | case 0x1229: | ||
1539 | case 0x2449: | ||
1540 | case 0x2459: | ||
1541 | case 0x245D: | ||
1542 | case 0x27DC: | ||
1543 | break; | ||
1544 | default: | ||
1545 | return; | ||
1546 | } | ||
1547 | |||
1548 | /* | ||
1549 | * Some firmware hands off the e100 with interrupts enabled, | ||
1550 | * which can cause a flood of interrupts if packets are | ||
1551 | * received before the driver attaches to the device. So | ||
1552 | * disable all e100 interrupts here. The driver will | ||
1553 | * re-enable them when it's ready. | ||
1554 | */ | ||
1555 | pci_read_config_word(dev, PCI_COMMAND, &command); | ||
1556 | pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &bar); | ||
1557 | |||
1558 | if (!(command & PCI_COMMAND_MEMORY) || !bar) | ||
1559 | return; | ||
1560 | |||
1561 | csr = ioremap(bar, 8); | ||
1562 | if (!csr) { | ||
1563 | printk(KERN_WARNING "PCI: Can't map %s e100 registers\n", | ||
1564 | pci_name(dev)); | ||
1565 | return; | ||
1566 | } | ||
1567 | |||
1568 | cmd_hi = readb(csr + 3); | ||
1569 | if (cmd_hi == 0) { | ||
1570 | printk(KERN_WARNING "PCI: Firmware left %s e100 interrupts " | ||
1571 | "enabled, disabling\n", pci_name(dev)); | ||
1572 | writeb(1, csr + 3); | ||
1573 | } | ||
1574 | |||
1575 | iounmap(csr); | ||
1576 | } | ||
1577 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_e100_interrupt); | ||
1521 | 1578 | ||
1522 | static void __devinit fixup_rev1_53c810(struct pci_dev* dev) | 1579 | static void __devinit fixup_rev1_53c810(struct pci_dev* dev) |
1523 | { | 1580 | { |
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/scsi/ata_piix.c b/drivers/scsi/ata_piix.c index 19745a31072b..5e8afc876980 100644 --- a/drivers/scsi/ata_piix.c +++ b/drivers/scsi/ata_piix.c | |||
@@ -567,8 +567,8 @@ static int piix_sata_prereset(struct ata_port *ap) | |||
567 | present = 1; | 567 | present = 1; |
568 | } | 568 | } |
569 | 569 | ||
570 | DPRINTK("ata%u: LEAVE, pcs=0x%x present_mask=0x%x\n", | 570 | DPRINTK("ata%u: LEAVE, pcs=0x%x present=0x%x\n", |
571 | ap->id, pcs, present_mask); | 571 | ap->id, pcs, present); |
572 | 572 | ||
573 | if (!present) { | 573 | if (!present) { |
574 | ata_port_printk(ap, KERN_INFO, "SATA port has no device.\n"); | 574 | ata_port_printk(ap, KERN_INFO, "SATA port has no device.\n"); |
@@ -828,6 +828,7 @@ static void __devinit piix_init_sata_map(struct pci_dev *pdev, | |||
828 | case IDE: | 828 | case IDE: |
829 | WARN_ON((i & 1) || map[i + 1] != IDE); | 829 | WARN_ON((i & 1) || map[i + 1] != IDE); |
830 | pinfo[i / 2] = piix_port_info[ich5_pata]; | 830 | pinfo[i / 2] = piix_port_info[ich5_pata]; |
831 | pinfo[i / 2].private_data = hpriv; | ||
831 | i++; | 832 | i++; |
832 | printk(" IDE IDE"); | 833 | printk(" IDE IDE"); |
833 | break; | 834 | break; |
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 386e5f21e191..16fc2dd8f2f7 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -5185,28 +5185,6 @@ void ata_host_stop (struct ata_host_set *host_set) | |||
5185 | iounmap(host_set->mmio_base); | 5185 | iounmap(host_set->mmio_base); |
5186 | } | 5186 | } |
5187 | 5187 | ||
5188 | |||
5189 | /** | ||
5190 | * ata_host_remove - Unregister SCSI host structure with upper layers | ||
5191 | * @ap: Port to unregister | ||
5192 | * @do_unregister: 1 if we fully unregister, 0 to just stop the port | ||
5193 | * | ||
5194 | * LOCKING: | ||
5195 | * Inherited from caller. | ||
5196 | */ | ||
5197 | |||
5198 | static void ata_host_remove(struct ata_port *ap, unsigned int do_unregister) | ||
5199 | { | ||
5200 | struct Scsi_Host *sh = ap->host; | ||
5201 | |||
5202 | DPRINTK("ENTER\n"); | ||
5203 | |||
5204 | if (do_unregister) | ||
5205 | scsi_remove_host(sh); | ||
5206 | |||
5207 | ap->ops->port_stop(ap); | ||
5208 | } | ||
5209 | |||
5210 | /** | 5188 | /** |
5211 | * ata_dev_init - Initialize an ata_device structure | 5189 | * ata_dev_init - Initialize an ata_device structure |
5212 | * @dev: Device structure to initialize | 5190 | * @dev: Device structure to initialize |
@@ -5532,8 +5510,11 @@ int ata_device_add(const struct ata_probe_ent *ent) | |||
5532 | 5510 | ||
5533 | err_out: | 5511 | err_out: |
5534 | for (i = 0; i < count; i++) { | 5512 | for (i = 0; i < count; i++) { |
5535 | ata_host_remove(host_set->ports[i], 1); | 5513 | struct ata_port *ap = host_set->ports[i]; |
5536 | scsi_host_put(host_set->ports[i]->host); | 5514 | if (ap) { |
5515 | ap->ops->port_stop(ap); | ||
5516 | scsi_host_put(ap->host); | ||
5517 | } | ||
5537 | } | 5518 | } |
5538 | err_free_ret: | 5519 | err_free_ret: |
5539 | kfree(host_set); | 5520 | kfree(host_set); |
@@ -5558,7 +5539,7 @@ void ata_port_detach(struct ata_port *ap) | |||
5558 | int i; | 5539 | int i; |
5559 | 5540 | ||
5560 | if (!ap->ops->error_handler) | 5541 | if (!ap->ops->error_handler) |
5561 | return; | 5542 | goto skip_eh; |
5562 | 5543 | ||
5563 | /* tell EH we're leaving & flush EH */ | 5544 | /* tell EH we're leaving & flush EH */ |
5564 | spin_lock_irqsave(ap->lock, flags); | 5545 | spin_lock_irqsave(ap->lock, flags); |
@@ -5594,6 +5575,7 @@ void ata_port_detach(struct ata_port *ap) | |||
5594 | cancel_delayed_work(&ap->hotplug_task); | 5575 | cancel_delayed_work(&ap->hotplug_task); |
5595 | flush_workqueue(ata_aux_wq); | 5576 | flush_workqueue(ata_aux_wq); |
5596 | 5577 | ||
5578 | skip_eh: | ||
5597 | /* remove the associated SCSI host */ | 5579 | /* remove the associated SCSI host */ |
5598 | scsi_remove_host(ap->host); | 5580 | scsi_remove_host(ap->host); |
5599 | } | 5581 | } |
@@ -5662,7 +5644,7 @@ int ata_scsi_release(struct Scsi_Host *host) | |||
5662 | DPRINTK("ENTER\n"); | 5644 | DPRINTK("ENTER\n"); |
5663 | 5645 | ||
5664 | ap->ops->port_disable(ap); | 5646 | ap->ops->port_disable(ap); |
5665 | ata_host_remove(ap, 0); | 5647 | ap->ops->port_stop(ap); |
5666 | 5648 | ||
5667 | DPRINTK("EXIT\n"); | 5649 | DPRINTK("EXIT\n"); |
5668 | return 1; | 5650 | return 1; |
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c index 7ced41ecde86..e92c31d698ff 100644 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c | |||
@@ -2353,6 +2353,19 @@ static void atapi_qc_complete(struct ata_queued_cmd *qc) | |||
2353 | ata_gen_ata_desc_sense(qc); | 2353 | ata_gen_ata_desc_sense(qc); |
2354 | } | 2354 | } |
2355 | 2355 | ||
2356 | /* SCSI EH automatically locks door if sdev->locked is | ||
2357 | * set. Sometimes door lock request continues to | ||
2358 | * fail, for example, when no media is present. This | ||
2359 | * creates a loop - SCSI EH issues door lock which | ||
2360 | * fails and gets invoked again to acquire sense data | ||
2361 | * for the failed command. | ||
2362 | * | ||
2363 | * If door lock fails, always clear sdev->locked to | ||
2364 | * avoid this infinite loop. | ||
2365 | */ | ||
2366 | if (qc->cdb[0] == ALLOW_MEDIUM_REMOVAL) | ||
2367 | qc->dev->sdev->locked = 0; | ||
2368 | |||
2356 | qc->scsicmd->result = SAM_STAT_CHECK_CONDITION; | 2369 | qc->scsicmd->result = SAM_STAT_CHECK_CONDITION; |
2357 | qc->scsidone(cmd); | 2370 | qc->scsidone(cmd); |
2358 | ata_qc_free(qc); | 2371 | ata_qc_free(qc); |
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c index 2e0f4a4076af..3f368c7d3ef9 100644 --- a/drivers/scsi/sata_sil24.c +++ b/drivers/scsi/sata_sil24.c | |||
@@ -1106,7 +1106,6 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1106 | 1106 | ||
1107 | probe_ent->irq = pdev->irq; | 1107 | probe_ent->irq = pdev->irq; |
1108 | probe_ent->irq_flags = IRQF_SHARED; | 1108 | probe_ent->irq_flags = IRQF_SHARED; |
1109 | probe_ent->mmio_base = port_base; | ||
1110 | probe_ent->private_data = hpriv; | 1109 | probe_ent->private_data = hpriv; |
1111 | 1110 | ||
1112 | hpriv->host_base = host_base; | 1111 | hpriv->host_base = host_base; |
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 |