Merge branch 'from-linus' into upstream
This commit is contained in:
commit
69758820a4
76 changed files with 1358 additions and 474 deletions
31
Documentation/fb/imacfb.txt
Normal file
31
Documentation/fb/imacfb.txt
Normal file
|
@ -0,0 +1,31 @@
|
|||
|
||||
What is imacfb?
|
||||
===============
|
||||
|
||||
This is a generic EFI platform driver for Intel based Apple computers.
|
||||
Imacfb is only for EFI booted Intel Macs.
|
||||
|
||||
Supported Hardware
|
||||
==================
|
||||
|
||||
iMac 17"/20"
|
||||
Macbook
|
||||
Macbook Pro 15"/17"
|
||||
MacMini
|
||||
|
||||
How to use it?
|
||||
==============
|
||||
|
||||
Imacfb does not have any kind of autodetection of your machine.
|
||||
You have to add the fillowing kernel parameters in your elilo.conf:
|
||||
Macbook :
|
||||
video=imacfb:macbook
|
||||
MacMini :
|
||||
video=imacfb:mini
|
||||
Macbook Pro 15", iMac 17" :
|
||||
video=imacfb:i17
|
||||
Macbook Pro 17", iMac 20" :
|
||||
video=imacfb:i20
|
||||
|
||||
--
|
||||
Edgar Hucek <gimli@dark-green.com>
|
|
@ -294,15 +294,15 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max
|
|||
Default: 87380*2 bytes.
|
||||
|
||||
tcp_mem - vector of 3 INTEGERs: min, pressure, max
|
||||
low: below this number of pages TCP is not bothered about its
|
||||
min: below this number of pages TCP is not bothered about its
|
||||
memory appetite.
|
||||
|
||||
pressure: when amount of memory allocated by TCP exceeds this number
|
||||
of pages, TCP moderates its memory consumption and enters memory
|
||||
pressure mode, which is exited when memory consumption falls
|
||||
under "low".
|
||||
under "min".
|
||||
|
||||
high: number of pages allowed for queueing by all TCP sockets.
|
||||
max: number of pages allowed for queueing by all TCP sockets.
|
||||
|
||||
Defaults are calculated at boot time from amount of available
|
||||
memory.
|
||||
|
|
|
@ -1196,7 +1196,7 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
- model : Model of the device. Can be "TSEC", "eTSEC", or "FEC"
|
||||
- compatible : Should be "gianfar"
|
||||
- reg : Offset and length of the register set for the device
|
||||
- address : List of bytes representing the ethernet address of
|
||||
- mac-address : List of bytes representing the ethernet address of
|
||||
this controller
|
||||
- interrupts : <a b> where a is the interrupt number and b is a
|
||||
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.
|
|||
model = "TSEC";
|
||||
compatible = "gianfar";
|
||||
reg = <24000 1000>;
|
||||
address = [ 00 E0 0C 00 73 00 ];
|
||||
mac-address = [ 00 E0 0C 00 73 00 ];
|
||||
interrupts = <d 3 e 3 12 3>;
|
||||
interrupt-parent = <40000>;
|
||||
phy-handle = <2452000>
|
||||
|
@ -1498,7 +1498,7 @@ not necessary as they are usually the same as the root node.
|
|||
model = "TSEC";
|
||||
compatible = "gianfar";
|
||||
reg = <24000 1000>;
|
||||
address = [ 00 E0 0C 00 73 00 ];
|
||||
mac-address = [ 00 E0 0C 00 73 00 ];
|
||||
interrupts = <d 3 e 3 12 3>;
|
||||
interrupt-parent = <40000>;
|
||||
phy-handle = <2452000>;
|
||||
|
@ -1511,7 +1511,7 @@ not necessary as they are usually the same as the root node.
|
|||
model = "TSEC";
|
||||
compatible = "gianfar";
|
||||
reg = <25000 1000>;
|
||||
address = [ 00 E0 0C 00 73 01 ];
|
||||
mac-address = [ 00 E0 0C 00 73 01 ];
|
||||
interrupts = <13 3 14 3 18 3>;
|
||||
interrupt-parent = <40000>;
|
||||
phy-handle = <2452001>;
|
||||
|
@ -1524,7 +1524,7 @@ not necessary as they are usually the same as the root node.
|
|||
model = "FEC";
|
||||
compatible = "gianfar";
|
||||
reg = <26000 1000>;
|
||||
address = [ 00 E0 0C 00 73 02 ];
|
||||
mac-address = [ 00 E0 0C 00 73 02 ];
|
||||
interrupts = <19 3>;
|
||||
interrupt-parent = <40000>;
|
||||
phy-handle = <2452002>;
|
||||
|
|
8
Makefile
8
Makefile
|
@ -309,9 +309,6 @@ CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)
|
|||
|
||||
CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||
-fno-strict-aliasing -fno-common
|
||||
# Force gcc to behave correct even for buggy distributions
|
||||
CFLAGS += $(call cc-option, -fno-stack-protector)
|
||||
|
||||
AFLAGS := -D__ASSEMBLY__
|
||||
|
||||
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
|
||||
|
@ -486,6 +483,8 @@ else
|
|||
CFLAGS += -O2
|
||||
endif
|
||||
|
||||
include $(srctree)/arch/$(ARCH)/Makefile
|
||||
|
||||
ifdef CONFIG_FRAME_POINTER
|
||||
CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
|
||||
else
|
||||
|
@ -500,7 +499,8 @@ ifdef CONFIG_DEBUG_INFO
|
|||
CFLAGS += -g
|
||||
endif
|
||||
|
||||
include $(srctree)/arch/$(ARCH)/Makefile
|
||||
# Force gcc to behave correct even for buggy distributions
|
||||
CFLAGS += $(call cc-option, -fno-stack-protector)
|
||||
|
||||
# arch Makefile may override CC so keep this after arch Makefile is included
|
||||
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
||||
|
|
|
@ -233,7 +233,7 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
|
|||
spin_unlock_irq(&die_lock);
|
||||
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception: panic_on_oops");
|
||||
panic("Fatal exception");
|
||||
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
|
|
@ -454,7 +454,7 @@ void die(const char * str, struct pt_regs * regs, long err)
|
|||
panic("Fatal exception in interrupt");
|
||||
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception: panic_on_oops");
|
||||
panic("Fatal exception");
|
||||
|
||||
oops_exit();
|
||||
do_exit(SIGSEGV);
|
||||
|
|
|
@ -118,7 +118,7 @@ die (const char *str, struct pt_regs *regs, long err)
|
|||
spin_unlock_irq(&die.lock);
|
||||
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception: panic_on_oops");
|
||||
panic("Fatal exception");
|
||||
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
|
|
@ -836,9 +836,10 @@ config MCA
|
|||
bool
|
||||
|
||||
config PCI
|
||||
bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_MPC52xx || (EMBEDDED && PPC_ISERIES) \
|
||||
|| MPC7448HPC2
|
||||
default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx && !PPC_85xx && !PPC_86xx
|
||||
bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \
|
||||
|| PPC_MPC52xx || (EMBEDDED && PPC_ISERIES) || MPC7448HPC2
|
||||
default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx \
|
||||
&& !PPC_85xx && !PPC_86xx
|
||||
default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS
|
||||
default PCI_QSPAN if !4xx && !CPM2 && 8xx
|
||||
help
|
||||
|
|
339
arch/powerpc/boot/dts/mpc8641_hpcn.dts
Normal file
339
arch/powerpc/boot/dts/mpc8641_hpcn.dts
Normal file
|
@ -0,0 +1,339 @@
|
|||
/*
|
||||
* MPC8641 HPCN Device Tree Source
|
||||
*
|
||||
* Copyright 2006 Freescale Semiconductor Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*/
|
||||
|
||||
|
||||
/ {
|
||||
model = "MPC8641HPCN";
|
||||
compatible = "mpc86xx";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
cpus {
|
||||
#cpus = <2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
PowerPC,8641@0 {
|
||||
device_type = "cpu";
|
||||
reg = <0>;
|
||||
d-cache-line-size = <20>; // 32 bytes
|
||||
i-cache-line-size = <20>; // 32 bytes
|
||||
d-cache-size = <8000>; // L1, 32K
|
||||
i-cache-size = <8000>; // L1, 32K
|
||||
timebase-frequency = <0>; // 33 MHz, from uboot
|
||||
bus-frequency = <0>; // From uboot
|
||||
clock-frequency = <0>; // From uboot
|
||||
32-bit;
|
||||
linux,boot-cpu;
|
||||
};
|
||||
PowerPC,8641@1 {
|
||||
device_type = "cpu";
|
||||
reg = <1>;
|
||||
d-cache-line-size = <20>; // 32 bytes
|
||||
i-cache-line-size = <20>; // 32 bytes
|
||||
d-cache-size = <8000>; // L1, 32K
|
||||
i-cache-size = <8000>; // L1, 32K
|
||||
timebase-frequency = <0>; // 33 MHz, from uboot
|
||||
bus-frequency = <0>; // From uboot
|
||||
clock-frequency = <0>; // From uboot
|
||||
32-bit;
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <00000000 40000000>; // 1G at 0x0
|
||||
};
|
||||
|
||||
soc8641@f8000000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
#interrupt-cells = <2>;
|
||||
device_type = "soc";
|
||||
ranges = <0 f8000000 00100000>;
|
||||
reg = <f8000000 00100000>; // CCSRBAR 1M
|
||||
bus-frequency = <0>;
|
||||
|
||||
i2c@3000 {
|
||||
device_type = "i2c";
|
||||
compatible = "fsl-i2c";
|
||||
reg = <3000 100>;
|
||||
interrupts = <2b 2>;
|
||||
interrupt-parent = <40000>;
|
||||
dfsrr;
|
||||
};
|
||||
|
||||
i2c@3100 {
|
||||
device_type = "i2c";
|
||||
compatible = "fsl-i2c";
|
||||
reg = <3100 100>;
|
||||
interrupts = <2b 2>;
|
||||
interrupt-parent = <40000>;
|
||||
dfsrr;
|
||||
};
|
||||
|
||||
mdio@24520 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
device_type = "mdio";
|
||||
compatible = "gianfar";
|
||||
reg = <24520 20>;
|
||||
linux,phandle = <24520>;
|
||||
ethernet-phy@0 {
|
||||
linux,phandle = <2452000>;
|
||||
interrupt-parent = <40000>;
|
||||
interrupts = <4a 1>;
|
||||
reg = <0>;
|
||||
device_type = "ethernet-phy";
|
||||
};
|
||||
ethernet-phy@1 {
|
||||
linux,phandle = <2452001>;
|
||||
interrupt-parent = <40000>;
|
||||
interrupts = <4a 1>;
|
||||
reg = <1>;
|
||||
device_type = "ethernet-phy";
|
||||
};
|
||||
ethernet-phy@2 {
|
||||
linux,phandle = <2452002>;
|
||||
interrupt-parent = <40000>;
|
||||
interrupts = <4a 1>;
|
||||
reg = <2>;
|
||||
device_type = "ethernet-phy";
|
||||
};
|
||||
ethernet-phy@3 {
|
||||
linux,phandle = <2452003>;
|
||||
interrupt-parent = <40000>;
|
||||
interrupts = <4a 1>;
|
||||
reg = <3>;
|
||||
device_type = "ethernet-phy";
|
||||
};
|
||||
};
|
||||
|
||||
ethernet@24000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
device_type = "network";
|
||||
model = "TSEC";
|
||||
compatible = "gianfar";
|
||||
reg = <24000 1000>;
|
||||
mac-address = [ 00 E0 0C 00 73 00 ];
|
||||
interrupts = <1d 2 1e 2 22 2>;
|
||||
interrupt-parent = <40000>;
|
||||
phy-handle = <2452000>;
|
||||
};
|
||||
|
||||
ethernet@25000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
device_type = "network";
|
||||
model = "TSEC";
|
||||
compatible = "gianfar";
|
||||
reg = <25000 1000>;
|
||||
mac-address = [ 00 E0 0C 00 73 01 ];
|
||||
interrupts = <23 2 24 2 28 2>;
|
||||
interrupt-parent = <40000>;
|
||||
phy-handle = <2452001>;
|
||||
};
|
||||
|
||||
ethernet@26000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
device_type = "network";
|
||||
model = "TSEC";
|
||||
compatible = "gianfar";
|
||||
reg = <26000 1000>;
|
||||
mac-address = [ 00 E0 0C 00 02 FD ];
|
||||
interrupts = <1F 2 20 2 21 2>;
|
||||
interrupt-parent = <40000>;
|
||||
phy-handle = <2452002>;
|
||||
};
|
||||
|
||||
ethernet@27000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
device_type = "network";
|
||||
model = "TSEC";
|
||||
compatible = "gianfar";
|
||||
reg = <27000 1000>;
|
||||
mac-address = [ 00 E0 0C 00 03 FD ];
|
||||
interrupts = <25 2 26 2 27 2>;
|
||||
interrupt-parent = <40000>;
|
||||
phy-handle = <2452003>;
|
||||
};
|
||||
serial@4500 {
|
||||
device_type = "serial";
|
||||
compatible = "ns16550";
|
||||
reg = <4500 100>;
|
||||
clock-frequency = <0>;
|
||||
interrupts = <2a 2>;
|
||||
interrupt-parent = <40000>;
|
||||
};
|
||||
|
||||
serial@4600 {
|
||||
device_type = "serial";
|
||||
compatible = "ns16550";
|
||||
reg = <4600 100>;
|
||||
clock-frequency = <0>;
|
||||
interrupts = <1c 2>;
|
||||
interrupt-parent = <40000>;
|
||||
};
|
||||
|
||||
pci@8000 {
|
||||
compatible = "86xx";
|
||||
device_type = "pci";
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
#address-cells = <3>;
|
||||
reg = <8000 1000>;
|
||||
bus-range = <0 fe>;
|
||||
ranges = <02000000 0 80000000 80000000 0 20000000
|
||||
01000000 0 00000000 e2000000 0 00100000>;
|
||||
clock-frequency = <1fca055>;
|
||||
interrupt-parent = <40000>;
|
||||
interrupts = <18 2>;
|
||||
interrupt-map-mask = <f800 0 0 7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 0x11 */
|
||||
8800 0 0 1 4d0 3 2
|
||||
8800 0 0 2 4d0 4 2
|
||||
8800 0 0 3 4d0 5 2
|
||||
8800 0 0 4 4d0 6 2
|
||||
|
||||
/* IDSEL 0x12 */
|
||||
9000 0 0 1 4d0 4 2
|
||||
9000 0 0 2 4d0 5 2
|
||||
9000 0 0 3 4d0 6 2
|
||||
9000 0 0 4 4d0 3 2
|
||||
|
||||
/* IDSEL 0x13 */
|
||||
9800 0 0 1 4d0 0 0
|
||||
9800 0 0 2 4d0 0 0
|
||||
9800 0 0 3 4d0 0 0
|
||||
9800 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x14 */
|
||||
a000 0 0 1 4d0 0 0
|
||||
a000 0 0 2 4d0 0 0
|
||||
a000 0 0 3 4d0 0 0
|
||||
a000 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x15 */
|
||||
a800 0 0 1 4d0 0 0
|
||||
a800 0 0 2 4d0 0 0
|
||||
a800 0 0 3 4d0 0 0
|
||||
a800 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x16 */
|
||||
b000 0 0 1 4d0 0 0
|
||||
b000 0 0 2 4d0 0 0
|
||||
b000 0 0 3 4d0 0 0
|
||||
b000 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x17 */
|
||||
b800 0 0 1 4d0 0 0
|
||||
b800 0 0 2 4d0 0 0
|
||||
b800 0 0 3 4d0 0 0
|
||||
b800 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x18 */
|
||||
c000 0 0 1 4d0 0 0
|
||||
c000 0 0 2 4d0 0 0
|
||||
c000 0 0 3 4d0 0 0
|
||||
c000 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x19 */
|
||||
c800 0 0 1 4d0 0 0
|
||||
c800 0 0 2 4d0 0 0
|
||||
c800 0 0 3 4d0 0 0
|
||||
c800 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x1a */
|
||||
d000 0 0 1 4d0 6 2
|
||||
d000 0 0 2 4d0 3 2
|
||||
d000 0 0 3 4d0 4 2
|
||||
d000 0 0 4 4d0 5 2
|
||||
|
||||
|
||||
/* IDSEL 0x1b */
|
||||
d800 0 0 1 4d0 5 2
|
||||
d800 0 0 2 4d0 0 0
|
||||
d800 0 0 3 4d0 0 0
|
||||
d800 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x1c */
|
||||
e000 0 0 1 4d0 9 2
|
||||
e000 0 0 2 4d0 a 2
|
||||
e000 0 0 3 4d0 c 2
|
||||
e000 0 0 4 4d0 7 2
|
||||
|
||||
/* IDSEL 0x1d */
|
||||
e800 0 0 1 4d0 9 2
|
||||
e800 0 0 2 4d0 a 2
|
||||
e800 0 0 3 4d0 b 2
|
||||
e800 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x1e */
|
||||
f000 0 0 1 4d0 c 2
|
||||
f000 0 0 2 4d0 0 0
|
||||
f000 0 0 3 4d0 0 0
|
||||
f000 0 0 4 4d0 0 0
|
||||
|
||||
/* IDSEL 0x1f */
|
||||
f800 0 0 1 4d0 6 2
|
||||
f800 0 0 2 4d0 0 0
|
||||
f800 0 0 3 4d0 0 0
|
||||
f800 0 0 4 4d0 0 0
|
||||
>;
|
||||
i8259@4d0 {
|
||||
linux,phandle = <4d0>;
|
||||
clock-frequency = <0>;
|
||||
interrupt-controller;
|
||||
device_type = "interrupt-controller";
|
||||
#address-cells = <0>;
|
||||
#interrupt-cells = <2>;
|
||||
built-in;
|
||||
compatible = "chrp,iic";
|
||||
big-endian;
|
||||
interrupts = <49 2>;
|
||||
interrupt-parent = <40000>;
|
||||
};
|
||||
|
||||
};
|
||||
pic@40000 {
|
||||
linux,phandle = <40000>;
|
||||
clock-frequency = <0>;
|
||||
interrupt-controller;
|
||||
#address-cells = <0>;
|
||||
#interrupt-cells = <2>;
|
||||
reg = <40000 40000>;
|
||||
built-in;
|
||||
compatible = "chrp,open-pic";
|
||||
device_type = "open-pic";
|
||||
big-endian;
|
||||
interrupts = <
|
||||
10 2 11 2 12 2 13 2
|
||||
14 2 15 2 16 2 17 2
|
||||
18 2 19 2 1a 2 1b 2
|
||||
1c 2 1d 2 1e 2 1f 2
|
||||
20 2 21 2 22 2 23 2
|
||||
24 2 25 2 26 2 27 2
|
||||
28 2 29 2 2a 2 2b 2
|
||||
2c 2 2d 2 2e 2 2f 2
|
||||
30 2 31 2 32 2 33 2
|
||||
34 2 35 2 36 2 37 2
|
||||
38 2 39 2 2a 2 3b 2
|
||||
3c 2 3d 2 3e 2 3f 2
|
||||
48 1 49 2 4a 1
|
||||
>;
|
||||
interrupt-parent = <40000>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -1,16 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc1
|
||||
# Wed Apr 19 13:24:37 2006
|
||||
# Linux kernel version: 2.6.18-rc3
|
||||
# Tue Aug 8 09:12:29 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_PPC_MERGE=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_IRQ_PER_CPU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_FIND_NEXT_BIT=y
|
||||
CONFIG_PPC=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
|
@ -33,6 +35,7 @@ CONFIG_PPC_STD_MMU=y
|
|||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -50,6 +53,7 @@ CONFIG_SWAP=y
|
|||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
|
@ -67,10 +71,12 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
@ -116,12 +122,16 @@ CONFIG_PPC_PMAC=y
|
|||
CONFIG_PPC_PMAC64=y
|
||||
# CONFIG_PPC_MAPLE is not set
|
||||
# CONFIG_PPC_CELL is not set
|
||||
# CONFIG_PPC_CELL_NATIVE is not set
|
||||
# CONFIG_PPC_IBM_CELL_BLADE is not set
|
||||
# CONFIG_UDBG_RTAS_CONSOLE is not set
|
||||
CONFIG_U3_DART=y
|
||||
CONFIG_MPIC=y
|
||||
# CONFIG_PPC_RTAS is not set
|
||||
# CONFIG_MMIO_NVRAM is not set
|
||||
CONFIG_MPIC_BROKEN_U3=y
|
||||
# CONFIG_PPC_MPC106 is not set
|
||||
CONFIG_PPC_970_NAP=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
# CONFIG_CPU_FREQ_DEBUG is not set
|
||||
|
@ -153,6 +163,7 @@ CONFIG_BINFMT_ELF=y
|
|||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
CONFIG_IOMMU_VMERGE=y
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||
CONFIG_KEXEC=y
|
||||
# CONFIG_CRASH_DUMP is not set
|
||||
CONFIG_IRQ_ALL_CPUS=y
|
||||
|
@ -168,6 +179,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_RESOURCES_64BIT=y
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
|
@ -184,6 +196,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
# CONFIG_PCIEPORTBUS is not set
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -227,6 +240,8 @@ CONFIG_INET_ESP=m
|
|||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_TUNNEL=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -239,6 +254,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
|
@ -263,6 +279,7 @@ CONFIG_IP_NF_TFTP=m
|
|||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
# CONFIG_IP_NF_H323 is not set
|
||||
# CONFIG_IP_NF_SIP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
|
||||
#
|
||||
|
@ -318,6 +335,7 @@ CONFIG_STANDALONE=y
|
|||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -355,6 +373,7 @@ CONFIG_BLK_DEV_NBD=m
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
||||
|
@ -417,7 +436,6 @@ CONFIG_IDEDMA_PCI_AUTO=y
|
|||
CONFIG_BLK_DEV_IDE_PMAC=y
|
||||
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
||||
CONFIG_BLK_DEV_IDEDMA_PMAC=y
|
||||
# CONFIG_BLK_DEV_IDE_PMAC_BLINK is not set
|
||||
# CONFIG_IDE_ARM is not set
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
# CONFIG_IDEDMA_IVB is not set
|
||||
|
@ -478,6 +496,7 @@ CONFIG_SCSI_SATA_SVW=y
|
|||
# CONFIG_SCSI_SATA_MV is not set
|
||||
# CONFIG_SCSI_SATA_NV is not set
|
||||
# CONFIG_SCSI_PDC_ADMA is not set
|
||||
# CONFIG_SCSI_HPTIOP is not set
|
||||
# CONFIG_SCSI_SATA_QSTOR is not set
|
||||
# CONFIG_SCSI_SATA_PROMISE is not set
|
||||
# CONFIG_SCSI_SATA_SX4 is not set
|
||||
|
@ -497,7 +516,6 @@ CONFIG_SCSI_SATA_SVW=y
|
|||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
||||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
# CONFIG_SCSI_QLA_FC is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
|
@ -514,9 +532,7 @@ CONFIG_MD_LINEAR=y
|
|||
CONFIG_MD_RAID0=y
|
||||
CONFIG_MD_RAID1=y
|
||||
CONFIG_MD_RAID10=m
|
||||
CONFIG_MD_RAID5=y
|
||||
# CONFIG_MD_RAID5_RESHAPE is not set
|
||||
CONFIG_MD_RAID6=m
|
||||
# CONFIG_MD_RAID456 is not set
|
||||
CONFIG_MD_MULTIPATH=m
|
||||
CONFIG_MD_FAULTY=m
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
|
@ -559,7 +575,6 @@ CONFIG_IEEE1394_OHCI1394=y
|
|||
#
|
||||
CONFIG_IEEE1394_VIDEO1394=m
|
||||
CONFIG_IEEE1394_SBP2=m
|
||||
# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
|
||||
CONFIG_IEEE1394_ETH1394=m
|
||||
CONFIG_IEEE1394_DV1394=m
|
||||
CONFIG_IEEE1394_RAWIO=y
|
||||
|
@ -573,6 +588,7 @@ CONFIG_IEEE1394_RAWIO=y
|
|||
# Macintosh device drivers
|
||||
#
|
||||
CONFIG_ADB_PMU=y
|
||||
# CONFIG_ADB_PMU_LED is not set
|
||||
CONFIG_PMAC_SMU=y
|
||||
CONFIG_THERM_PM72=y
|
||||
CONFIG_WINDFARM=y
|
||||
|
@ -643,6 +659,7 @@ CONFIG_TIGON3=y
|
|||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -739,6 +756,7 @@ CONFIG_SERIO=y
|
|||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
|
@ -754,6 +772,7 @@ CONFIG_HW_CONSOLE=y
|
|||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
# CONFIG_BRIQ_PANEL is not set
|
||||
|
||||
#
|
||||
# IPMI
|
||||
|
@ -764,6 +783,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_DTLK is not set
|
||||
|
@ -774,6 +794,7 @@ CONFIG_GEN_RTC=y
|
|||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
CONFIG_AGP=m
|
||||
# CONFIG_AGP_SIS is not set
|
||||
# CONFIG_AGP_VIA is not set
|
||||
CONFIG_AGP_UNINORTH=m
|
||||
# CONFIG_DRM is not set
|
||||
|
@ -813,6 +834,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_PIIX4 is not set
|
||||
CONFIG_I2C_POWERMAC=y
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
|
@ -849,7 +871,6 @@ CONFIG_I2C_POWERMAC=y
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
|
@ -865,6 +886,7 @@ CONFIG_I2C_POWERMAC=y
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -875,22 +897,19 @@ CONFIG_I2C_POWERMAC=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_MACMODES=y
|
||||
CONFIG_FB_FIRMWARE_EDID=y
|
||||
# CONFIG_FB_BACKLIGHT is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
# CONFIG_FB_PM2 is not set
|
||||
# CONFIG_FB_CYBER2000 is not set
|
||||
CONFIG_FB_OF=y
|
||||
# CONFIG_FB_CONTROL is not set
|
||||
# CONFIG_FB_PLATINUM is not set
|
||||
# CONFIG_FB_VALKYRIE is not set
|
||||
# CONFIG_FB_CT65550 is not set
|
||||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_IMSTT is not set
|
||||
# CONFIG_FB_VGA16 is not set
|
||||
|
@ -990,6 +1009,18 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
# CONFIG_SND_CMIPCI is not set
|
||||
# CONFIG_SND_CS4281 is not set
|
||||
# CONFIG_SND_CS46XX is not set
|
||||
# CONFIG_SND_DARLA20 is not set
|
||||
# CONFIG_SND_GINA20 is not set
|
||||
# CONFIG_SND_LAYLA20 is not set
|
||||
# CONFIG_SND_DARLA24 is not set
|
||||
# CONFIG_SND_GINA24 is not set
|
||||
# CONFIG_SND_LAYLA24 is not set
|
||||
# CONFIG_SND_MONA is not set
|
||||
# CONFIG_SND_MIA is not set
|
||||
# CONFIG_SND_ECHO3G is not set
|
||||
# CONFIG_SND_INDIGO is not set
|
||||
# CONFIG_SND_INDIGOIO is not set
|
||||
# CONFIG_SND_INDIGODJ is not set
|
||||
# CONFIG_SND_EMU10K1 is not set
|
||||
# CONFIG_SND_EMU10K1X is not set
|
||||
# CONFIG_SND_ENS1370 is not set
|
||||
|
@ -1026,6 +1057,17 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
CONFIG_SND_POWERMAC=m
|
||||
CONFIG_SND_POWERMAC_AUTO_DRC=y
|
||||
|
||||
#
|
||||
# Apple Onboard Audio driver
|
||||
#
|
||||
CONFIG_SND_AOA=m
|
||||
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
||||
CONFIG_SND_AOA_ONYX=m
|
||||
CONFIG_SND_AOA_TAS=m
|
||||
CONFIG_SND_AOA_TOONIE=m
|
||||
CONFIG_SND_AOA_SOUNDBUS=m
|
||||
CONFIG_SND_AOA_SOUNDBUS_I2S=m
|
||||
|
||||
#
|
||||
# USB devices
|
||||
#
|
||||
|
@ -1060,6 +1102,7 @@ CONFIG_USB_DEVICEFS=y
|
|||
CONFIG_USB_EHCI_HCD=y
|
||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
|
@ -1110,9 +1153,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_ACECAD is not set
|
||||
# CONFIG_USB_KBTAB is not set
|
||||
# CONFIG_USB_POWERMATE is not set
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_TOUCHSCREEN is not set
|
||||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
|
@ -1155,6 +1196,7 @@ CONFIG_USB_SERIAL=m
|
|||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||
# CONFIG_USB_SERIAL_ARK3116 is not set
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||
|
@ -1162,6 +1204,7 @@ CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
|||
CONFIG_USB_SERIAL_CYPRESS_M8=m
|
||||
CONFIG_USB_SERIAL_EMPEG=m
|
||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||
# CONFIG_USB_SERIAL_FUNSOFT is not set
|
||||
CONFIG_USB_SERIAL_VISOR=m
|
||||
CONFIG_USB_SERIAL_IPAQ=m
|
||||
CONFIG_USB_SERIAL_IR=m
|
||||
|
@ -1191,9 +1234,11 @@ CONFIG_USB_SERIAL_PL2303=m
|
|||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
CONFIG_USB_SERIAL_SAFE=m
|
||||
CONFIG_USB_SERIAL_SAFE_PADDED=y
|
||||
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
|
||||
CONFIG_USB_SERIAL_TI=m
|
||||
CONFIG_USB_SERIAL_CYBERJACK=m
|
||||
CONFIG_USB_SERIAL_XIRCOM=m
|
||||
# CONFIG_USB_SERIAL_OPTION is not set
|
||||
CONFIG_USB_SERIAL_OMNINET=m
|
||||
CONFIG_USB_EZUSB=y
|
||||
|
||||
|
@ -1207,10 +1252,12 @@ CONFIG_USB_EZUSB=y
|
|||
# CONFIG_USB_LEGOTOWER is not set
|
||||
# CONFIG_USB_LCD is not set
|
||||
# CONFIG_USB_LED is not set
|
||||
# CONFIG_USB_CYPRESS_CY7C63 is not set
|
||||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
CONFIG_USB_APPLEDISPLAY=m
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
@ -1234,6 +1281,14 @@ CONFIG_USB_EZUSB=y
|
|||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
|
@ -1248,6 +1303,19 @@ CONFIG_USB_EZUSB=y
|
|||
#
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# DMA Engine support
|
||||
#
|
||||
# CONFIG_DMA_ENGINE is not set
|
||||
|
||||
#
|
||||
# DMA Clients
|
||||
#
|
||||
|
||||
#
|
||||
# DMA Devices
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -1273,7 +1341,6 @@ CONFIG_REISERFS_FS_SECURITY=y
|
|||
# CONFIG_JFS_FS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
|
@ -1282,6 +1349,7 @@ CONFIG_XFS_POSIX_ACL=y
|
|||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_AUTOFS_FS=m
|
||||
|
@ -1363,7 +1431,9 @@ CONFIG_RPCSEC_GSS_KRB5=y
|
|||
# CONFIG_SMB_FS is not set
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_STATS is not set
|
||||
# CONFIG_CIFS_WEAK_PW_HASH is not set
|
||||
# CONFIG_CIFS_XATTR is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
|
@ -1444,6 +1514,9 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_PLIST=y
|
||||
|
||||
#
|
||||
# Instrumentation Support
|
||||
|
@ -1457,14 +1530,19 @@ CONFIG_OPROFILE=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
|
@ -1476,11 +1554,7 @@ CONFIG_FORCED_INLINING=y
|
|||
# CONFIG_DEBUGGER is not set
|
||||
CONFIG_IRQSTACKS=y
|
||||
CONFIG_BOOTX_TEXT=y
|
||||
# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_G5 is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc1
|
||||
# Wed Apr 19 11:46:44 2006
|
||||
# Linux kernel version: 2.6.18-rc3
|
||||
# Tue Aug 8 09:15:46 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_PPC_MERGE=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_IRQ_PER_CPU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_FIND_NEXT_BIT=y
|
||||
CONFIG_PPC=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
|
@ -34,6 +36,7 @@ CONFIG_PPC_STD_MMU=y
|
|||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=32
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -51,6 +54,7 @@ CONFIG_SWAP=y
|
|||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_AUDITSYSCALL=y
|
||||
|
@ -69,10 +73,12 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
@ -113,10 +119,14 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
CONFIG_PPC_ISERIES=y
|
||||
# CONFIG_EMBEDDED6xx is not set
|
||||
# CONFIG_APUS is not set
|
||||
# CONFIG_PPC_CELL is not set
|
||||
# CONFIG_PPC_CELL_NATIVE is not set
|
||||
# CONFIG_UDBG_RTAS_CONSOLE is not set
|
||||
# CONFIG_PPC_RTAS is not set
|
||||
# CONFIG_MMIO_NVRAM is not set
|
||||
CONFIG_IBMVIO=y
|
||||
# CONFIG_PPC_MPC106 is not set
|
||||
# CONFIG_PPC_970_NAP is not set
|
||||
# CONFIG_CPU_FREQ is not set
|
||||
# CONFIG_WANT_EARLY_SERIAL is not set
|
||||
|
||||
|
@ -135,6 +145,7 @@ CONFIG_BINFMT_ELF=y
|
|||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
CONFIG_IOMMU_VMERGE=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||
CONFIG_IRQ_ALL_CPUS=y
|
||||
CONFIG_LPARCFG=y
|
||||
# CONFIG_NUMA is not set
|
||||
|
@ -149,6 +160,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_RESOURCES_64BIT=y
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
|
@ -164,6 +176,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
# CONFIG_PCIEPORTBUS is not set
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -207,6 +220,8 @@ CONFIG_INET_ESP=m
|
|||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_TUNNEL=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -219,6 +234,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
|
@ -246,9 +262,11 @@ CONFIG_NETFILTER_XT_MATCH_MARK=m
|
|||
# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
|
||||
# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SCTP=m
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||
# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
|
||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||
|
||||
|
@ -267,6 +285,7 @@ CONFIG_IP_NF_TFTP=m
|
|||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
# CONFIG_IP_NF_H323 is not set
|
||||
# CONFIG_IP_NF_SIP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||
|
@ -360,6 +379,7 @@ CONFIG_STANDALONE=y
|
|||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=m
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -396,6 +416,7 @@ CONFIG_BLK_DEV_NBD=m
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
@ -453,6 +474,7 @@ CONFIG_SCSI_FC_ATTRS=y
|
|||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_HPTIOP is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
|
@ -464,7 +486,6 @@ CONFIG_SCSI_IBMVSCSI=m
|
|||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
||||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
# CONFIG_SCSI_QLA_FC is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
|
@ -481,9 +502,7 @@ CONFIG_MD_LINEAR=y
|
|||
CONFIG_MD_RAID0=y
|
||||
CONFIG_MD_RAID1=y
|
||||
CONFIG_MD_RAID10=m
|
||||
CONFIG_MD_RAID5=y
|
||||
# CONFIG_MD_RAID5_RESHAPE is not set
|
||||
CONFIG_MD_RAID6=m
|
||||
# CONFIG_MD_RAID456 is not set
|
||||
CONFIG_MD_MULTIPATH=m
|
||||
CONFIG_MD_FAULTY=m
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
|
@ -596,6 +615,7 @@ CONFIG_E1000=m
|
|||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -696,6 +716,7 @@ CONFIG_SERIAL_ICOM=m
|
|||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
# CONFIG_BRIQ_PANEL is not set
|
||||
|
||||
#
|
||||
# IPMI
|
||||
|
@ -706,6 +727,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_DTLK is not set
|
||||
|
@ -741,7 +763,6 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
|
@ -757,6 +778,7 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -766,7 +788,9 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
# CONFIG_FB is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
|
@ -800,6 +824,14 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
|||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
|
@ -814,6 +846,19 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
|||
#
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# DMA Engine support
|
||||
#
|
||||
# CONFIG_DMA_ENGINE is not set
|
||||
|
||||
#
|
||||
# DMA Clients
|
||||
#
|
||||
|
||||
#
|
||||
# DMA Devices
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -843,7 +888,6 @@ CONFIG_JFS_SECURITY=y
|
|||
# CONFIG_JFS_STATISTICS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
|
@ -852,6 +896,7 @@ CONFIG_XFS_POSIX_ACL=y
|
|||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_AUTOFS_FS=m
|
||||
|
@ -933,8 +978,10 @@ CONFIG_RPCSEC_GSS_SPKM3=m
|
|||
# CONFIG_SMB_FS is not set
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_STATS is not set
|
||||
# CONFIG_CIFS_WEAK_PW_HASH is not set
|
||||
CONFIG_CIFS_XATTR=y
|
||||
CONFIG_CIFS_POSIX=y
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
|
@ -1013,10 +1060,12 @@ CONFIG_TEXTSEARCH=y
|
|||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
CONFIG_PLIST=y
|
||||
|
||||
#
|
||||
# Instrumentation Support
|
||||
#
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_KPROBES is not set
|
||||
|
||||
#
|
||||
|
@ -1024,14 +1073,19 @@ CONFIG_TEXTSEARCH_FSM=m
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
|
@ -1042,11 +1096,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
|
|||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
# CONFIG_DEBUGGER is not set
|
||||
CONFIG_IRQSTACKS=y
|
||||
# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_G5 is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc4
|
||||
# Sun May 28 07:26:56 2006
|
||||
# Linux kernel version: 2.6.18-rc3
|
||||
# Tue Aug 8 09:14:48 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_PPC_MERGE=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_IRQ_PER_CPU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
|
@ -35,6 +36,7 @@ CONFIG_PPC_STD_MMU=y
|
|||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=128
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -52,6 +54,7 @@ CONFIG_SWAP=y
|
|||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_AUDITSYSCALL=y
|
||||
|
@ -70,10 +73,12 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
@ -118,6 +123,9 @@ CONFIG_PPC_PSERIES=y
|
|||
# CONFIG_PPC_PMAC is not set
|
||||
# CONFIG_PPC_MAPLE is not set
|
||||
# CONFIG_PPC_CELL is not set
|
||||
# CONFIG_PPC_CELL_NATIVE is not set
|
||||
# CONFIG_PPC_IBM_CELL_BLADE is not set
|
||||
# CONFIG_UDBG_RTAS_CONSOLE is not set
|
||||
CONFIG_XICS=y
|
||||
# CONFIG_U3_DART is not set
|
||||
CONFIG_MPIC=y
|
||||
|
@ -149,6 +157,7 @@ CONFIG_BINFMT_MISC=m
|
|||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
CONFIG_IOMMU_VMERGE=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||
CONFIG_KEXEC=y
|
||||
# CONFIG_CRASH_DUMP is not set
|
||||
CONFIG_IRQ_ALL_CPUS=y
|
||||
|
@ -173,6 +182,7 @@ CONFIG_SPARSEMEM_EXTREME=y
|
|||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_RESOURCES_64BIT=y
|
||||
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
CONFIG_SCHED_SMT=y
|
||||
|
@ -190,6 +200,7 @@ CONFIG_PPC_I8259=y
|
|||
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
# CONFIG_PCIEPORTBUS is not set
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -238,6 +249,8 @@ CONFIG_INET_ESP=m
|
|||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_TUNNEL=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -250,6 +263,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
|
@ -277,6 +291,7 @@ CONFIG_IP_NF_TFTP=m
|
|||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
# CONFIG_IP_NF_H323 is not set
|
||||
# CONFIG_IP_NF_SIP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
|
||||
#
|
||||
|
@ -316,6 +331,7 @@ CONFIG_LLC=y
|
|||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_NET_TCPPROBE is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
|
@ -332,6 +348,7 @@ CONFIG_STANDALONE=y
|
|||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -352,6 +369,7 @@ CONFIG_PARPORT_PC=m
|
|||
# CONFIG_PARPORT_PC_FIFO is not set
|
||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||
# CONFIG_PARPORT_GSC is not set
|
||||
# CONFIG_PARPORT_AX88796 is not set
|
||||
# CONFIG_PARPORT_1284 is not set
|
||||
|
||||
#
|
||||
|
@ -376,6 +394,7 @@ CONFIG_BLK_DEV_NBD=m
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
@ -487,6 +506,7 @@ CONFIG_SCSI_SAS_ATTRS=m
|
|||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_HPTIOP is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
|
@ -508,12 +528,6 @@ CONFIG_SCSI_IPR_TRACE=y
|
|||
CONFIG_SCSI_IPR_DUMP=y
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA_FC=m
|
||||
CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE=y
|
||||
CONFIG_SCSI_QLA21XX=m
|
||||
CONFIG_SCSI_QLA22XX=m
|
||||
CONFIG_SCSI_QLA2300=m
|
||||
CONFIG_SCSI_QLA2322=m
|
||||
CONFIG_SCSI_QLA24XX=m
|
||||
CONFIG_SCSI_LPFC=m
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
|
@ -528,9 +542,7 @@ CONFIG_MD_LINEAR=y
|
|||
CONFIG_MD_RAID0=y
|
||||
CONFIG_MD_RAID1=y
|
||||
CONFIG_MD_RAID10=m
|
||||
CONFIG_MD_RAID5=y
|
||||
CONFIG_MD_RAID5_RESHAPE=y
|
||||
CONFIG_MD_RAID6=m
|
||||
# CONFIG_MD_RAID456 is not set
|
||||
CONFIG_MD_MULTIPATH=m
|
||||
CONFIG_MD_FAULTY=m
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
|
@ -651,6 +663,7 @@ CONFIG_IXGB=m
|
|||
# CONFIG_IXGB_NAPI is not set
|
||||
CONFIG_S2IO=m
|
||||
# CONFIG_S2IO_NAPI is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -754,6 +767,7 @@ CONFIG_SERIO_LIBPS2=y
|
|||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
|
@ -776,6 +790,7 @@ CONFIG_SERIAL_JSM=m
|
|||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
# CONFIG_BRIQ_PANEL is not set
|
||||
# CONFIG_PRINTER is not set
|
||||
# CONFIG_PPDEV is not set
|
||||
# CONFIG_TIPAR is not set
|
||||
|
@ -793,6 +808,7 @@ CONFIG_HVCS=m
|
|||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_DTLK is not set
|
||||
|
@ -839,6 +855,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
|
@ -876,7 +893,6 @@ CONFIG_I2C_ALGOBIT=y
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
|
@ -892,6 +908,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -902,19 +919,19 @@ CONFIG_I2C_ALGOBIT=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_MACMODES=y
|
||||
CONFIG_FB_FIRMWARE_EDID=y
|
||||
# CONFIG_FB_BACKLIGHT is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
# CONFIG_FB_PM2 is not set
|
||||
# CONFIG_FB_CYBER2000 is not set
|
||||
CONFIG_FB_OF=y
|
||||
# CONFIG_FB_CT65550 is not set
|
||||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_IMSTT is not set
|
||||
# CONFIG_FB_VGA16 is not set
|
||||
|
@ -993,6 +1010,7 @@ CONFIG_USB_DEVICEFS=y
|
|||
CONFIG_USB_EHCI_HCD=y
|
||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
|
@ -1083,10 +1101,12 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_USB_LEGOTOWER is not set
|
||||
# CONFIG_USB_LCD is not set
|
||||
# CONFIG_USB_LED is not set
|
||||
# CONFIG_USB_CYPRESS_CY7C63 is not set
|
||||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_APPLEDISPLAY is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
@ -1124,12 +1144,14 @@ CONFIG_USB_MON=y
|
|||
CONFIG_INFINIBAND=m
|
||||
CONFIG_INFINIBAND_USER_MAD=m
|
||||
CONFIG_INFINIBAND_USER_ACCESS=m
|
||||
CONFIG_INFINIBAND_ADDR_TRANS=y
|
||||
CONFIG_INFINIBAND_MTHCA=m
|
||||
CONFIG_INFINIBAND_MTHCA_DEBUG=y
|
||||
CONFIG_INFINIBAND_IPOIB=m
|
||||
CONFIG_INFINIBAND_IPOIB_DEBUG=y
|
||||
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
|
||||
CONFIG_INFINIBAND_SRP=m
|
||||
# CONFIG_INFINIBAND_ISER is not set
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||
|
@ -1140,6 +1162,19 @@ CONFIG_INFINIBAND_SRP=m
|
|||
#
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# DMA Engine support
|
||||
#
|
||||
# CONFIG_DMA_ENGINE is not set
|
||||
|
||||
#
|
||||
# DMA Clients
|
||||
#
|
||||
|
||||
#
|
||||
# DMA Devices
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -1169,15 +1204,16 @@ CONFIG_JFS_SECURITY=y
|
|||
# CONFIG_JFS_STATISTICS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
CONFIG_OCFS2_FS=m
|
||||
CONFIG_OCFS2_DEBUG_MASKLOG=y
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
|
@ -1259,8 +1295,10 @@ CONFIG_RPCSEC_GSS_SPKM3=m
|
|||
# CONFIG_SMB_FS is not set
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_STATS is not set
|
||||
# CONFIG_CIFS_WEAK_PW_HASH is not set
|
||||
CONFIG_CIFS_XATTR=y
|
||||
CONFIG_CIFS_POSIX=y
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
|
@ -1326,6 +1364,9 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_PLIST=y
|
||||
|
||||
#
|
||||
# Instrumentation Support
|
||||
|
@ -1339,14 +1380,19 @@ CONFIG_KPROBES=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
|
|
|
@ -67,9 +67,9 @@ pci64-$(CONFIG_PPC64) += pci_64.o pci_dn.o pci_iommu.o \
|
|||
pci_direct_iommu.o iomap.o
|
||||
pci32-$(CONFIG_PPC32) := pci_32.o
|
||||
obj-$(CONFIG_PCI) += $(pci64-y) $(pci32-y)
|
||||
kexec-$(CONFIG_PPC64) := machine_kexec_64.o crash.o
|
||||
kexec-$(CONFIG_PPC64) := machine_kexec_64.o
|
||||
kexec-$(CONFIG_PPC32) := machine_kexec_32.o
|
||||
obj-$(CONFIG_KEXEC) += machine_kexec.o $(kexec-y)
|
||||
obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o $(kexec-y)
|
||||
|
||||
ifeq ($(CONFIG_PPC_ISERIES),y)
|
||||
$(obj)/head_64.o: $(obj)/lparmap.s
|
||||
|
|
|
@ -76,6 +76,8 @@ _GLOBAL(__setup_cpu_ppc970)
|
|||
mfspr r0,SPRN_HID0
|
||||
li r11,5 /* clear DOZE and SLEEP */
|
||||
rldimi r0,r11,52,8 /* set NAP and DPM */
|
||||
li r11,0
|
||||
rldimi r0,r11,32,31 /* clear EN_ATTN */
|
||||
mtspr SPRN_HID0,r0
|
||||
mfspr r0,SPRN_HID0
|
||||
mfspr r0,SPRN_HID0
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
/* This keeps a track of which one is crashing cpu. */
|
||||
int crashing_cpu = -1;
|
||||
static cpumask_t cpus_in_crash = CPU_MASK_NONE;
|
||||
cpumask_t cpus_in_sr = CPU_MASK_NONE;
|
||||
|
||||
static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data,
|
||||
size_t data_len)
|
||||
|
@ -139,7 +140,13 @@ void crash_ipi_callback(struct pt_regs *regs)
|
|||
|
||||
if (ppc_md.kexec_cpu_down)
|
||||
ppc_md.kexec_cpu_down(1, 1);
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
kexec_smp_wait();
|
||||
#else
|
||||
for (;;); /* FIXME */
|
||||
#endif
|
||||
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
|
@ -255,7 +262,11 @@ static void crash_kexec_prepare_cpus(int cpu)
|
|||
*
|
||||
* do this if kexec in setup.c ?
|
||||
*/
|
||||
#ifdef CONFIG_PPC64
|
||||
smp_release_cpus();
|
||||
#else
|
||||
/* FIXME */
|
||||
#endif
|
||||
}
|
||||
|
||||
void crash_kexec_secondary(struct pt_regs *regs)
|
||||
|
|
|
@ -693,7 +693,7 @@ unsigned int irq_radix_revmap(struct irq_host *host,
|
|||
/* If not there, try to insert it */
|
||||
virq = irq_find_mapping(host, hwirq);
|
||||
if (virq != NO_IRQ)
|
||||
radix_tree_insert(tree, virq, &irq_map[virq]);
|
||||
radix_tree_insert(tree, hwirq, &irq_map[virq]);
|
||||
bail:
|
||||
spin_unlock_irqrestore(&irq_big_lock, flags);
|
||||
return virq;
|
||||
|
|
|
@ -61,6 +61,8 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
|
|||
if (!ret) {
|
||||
memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
|
||||
p->opcode = *p->addr;
|
||||
flush_icache_range((unsigned long)p->ainsn.insn,
|
||||
(unsigned long)p->ainsn.insn + sizeof(kprobe_opcode_t));
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/reboot.h>
|
||||
#include <linux/threads.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/lmb.h>
|
||||
|
||||
void machine_crash_shutdown(struct pt_regs *regs)
|
||||
{
|
||||
|
@ -59,3 +60,58 @@ NORET_TYPE void machine_kexec(struct kimage *image)
|
|||
}
|
||||
for(;;);
|
||||
}
|
||||
|
||||
static int __init early_parse_crashk(char *p)
|
||||
{
|
||||
unsigned long size;
|
||||
|
||||
if (!p)
|
||||
return 1;
|
||||
|
||||
size = memparse(p, &p);
|
||||
|
||||
if (*p == '@')
|
||||
crashk_res.start = memparse(p + 1, &p);
|
||||
else
|
||||
crashk_res.start = KDUMP_KERNELBASE;
|
||||
|
||||
crashk_res.end = crashk_res.start + size - 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
early_param("crashkernel", early_parse_crashk);
|
||||
|
||||
void __init reserve_crashkernel(void)
|
||||
{
|
||||
unsigned long size;
|
||||
|
||||
if (crashk_res.start == 0)
|
||||
return;
|
||||
|
||||
/* We might have got these values via the command line or the
|
||||
* device tree, either way sanitise them now. */
|
||||
|
||||
size = crashk_res.end - crashk_res.start + 1;
|
||||
|
||||
if (crashk_res.start != KDUMP_KERNELBASE)
|
||||
printk("Crash kernel location must be 0x%x\n",
|
||||
KDUMP_KERNELBASE);
|
||||
|
||||
crashk_res.start = KDUMP_KERNELBASE;
|
||||
size = PAGE_ALIGN(size);
|
||||
crashk_res.end = crashk_res.start + size - 1;
|
||||
|
||||
/* Crash kernel trumps memory limit */
|
||||
if (memory_limit && memory_limit <= crashk_res.end) {
|
||||
memory_limit = crashk_res.end + 1;
|
||||
printk("Adjusted memory limit for crashkernel, now 0x%lx\n",
|
||||
memory_limit);
|
||||
}
|
||||
|
||||
lmb_reserve(crashk_res.start, size);
|
||||
}
|
||||
|
||||
int overlaps_crashkernel(unsigned long start, unsigned long size)
|
||||
{
|
||||
return (start + size) > crashk_res.start && start <= crashk_res.end;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/kexec.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/thread_info.h>
|
||||
|
@ -21,7 +20,6 @@
|
|||
#include <asm/machdep.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/paca.h>
|
||||
#include <asm/lmb.h>
|
||||
#include <asm/mmu.h>
|
||||
#include <asm/sections.h> /* _end */
|
||||
#include <asm/prom.h>
|
||||
|
@ -385,58 +383,3 @@ static int __init kexec_setup(void)
|
|||
return 0;
|
||||
}
|
||||
__initcall(kexec_setup);
|
||||
|
||||
static int __init early_parse_crashk(char *p)
|
||||
{
|
||||
unsigned long size;
|
||||
|
||||
if (!p)
|
||||
return 1;
|
||||
|
||||
size = memparse(p, &p);
|
||||
|
||||
if (*p == '@')
|
||||
crashk_res.start = memparse(p + 1, &p);
|
||||
else
|
||||
crashk_res.start = KDUMP_KERNELBASE;
|
||||
|
||||
crashk_res.end = crashk_res.start + size - 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
early_param("crashkernel", early_parse_crashk);
|
||||
|
||||
void __init reserve_crashkernel(void)
|
||||
{
|
||||
unsigned long size;
|
||||
|
||||
if (crashk_res.start == 0)
|
||||
return;
|
||||
|
||||
/* We might have got these values via the command line or the
|
||||
* device tree, either way sanitise them now. */
|
||||
|
||||
size = crashk_res.end - crashk_res.start + 1;
|
||||
|
||||
if (crashk_res.start != KDUMP_KERNELBASE)
|
||||
printk("Crash kernel location must be 0x%x\n",
|
||||
KDUMP_KERNELBASE);
|
||||
|
||||
crashk_res.start = KDUMP_KERNELBASE;
|
||||
size = PAGE_ALIGN(size);
|
||||
crashk_res.end = crashk_res.start + size - 1;
|
||||
|
||||
/* Crash kernel trumps memory limit */
|
||||
if (memory_limit && memory_limit <= crashk_res.end) {
|
||||
memory_limit = crashk_res.end + 1;
|
||||
printk("Adjusted memory limit for crashkernel, now 0x%lx\n",
|
||||
memory_limit);
|
||||
}
|
||||
|
||||
lmb_reserve(crashk_res.start, size);
|
||||
}
|
||||
|
||||
int overlaps_crashkernel(unsigned long start, unsigned long size)
|
||||
{
|
||||
return (start + size) > crashk_res.start && start <= crashk_res.end;
|
||||
}
|
||||
|
|
|
@ -569,6 +569,27 @@ int rtas_set_indicator(int indicator, int index, int new_value)
|
|||
}
|
||||
EXPORT_SYMBOL(rtas_set_indicator);
|
||||
|
||||
/*
|
||||
* Ignoring RTAS extended delay
|
||||
*/
|
||||
int rtas_set_indicator_fast(int indicator, int index, int new_value)
|
||||
{
|
||||
int rc;
|
||||
int token = rtas_token("set-indicator");
|
||||
|
||||
if (token == RTAS_UNKNOWN_SERVICE)
|
||||
return -ENOENT;
|
||||
|
||||
rc = rtas_call(token, 3, 1, NULL, indicator, index, new_value);
|
||||
|
||||
WARN_ON(rc == -2 || (rc >= 9900 && rc <= 9905));
|
||||
|
||||
if (rc < 0)
|
||||
return rtas_error_rc(rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void rtas_restart(char *cmd)
|
||||
{
|
||||
if (rtas_flash_term_hook)
|
||||
|
|
|
@ -55,9 +55,6 @@
|
|||
|
||||
#ifdef CONFIG_PPC64 /* XXX */
|
||||
#define _IO_BASE pci_io_base
|
||||
#ifdef CONFIG_KEXEC
|
||||
cpumask_t cpus_in_sr = CPU_MASK_NONE;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUGGER
|
||||
|
@ -151,7 +148,7 @@ int die(const char *str, struct pt_regs *regs, long err)
|
|||
panic("Fatal exception in interrupt");
|
||||
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception: panic_on_oops");
|
||||
panic("Fatal exception");
|
||||
|
||||
do_exit(err);
|
||||
|
||||
|
@ -211,6 +208,19 @@ void system_reset_exception(struct pt_regs *regs)
|
|||
|
||||
die("System Reset", regs, SIGABRT);
|
||||
|
||||
/*
|
||||
* Some CPUs when released from the debugger will execute this path.
|
||||
* These CPUs entered the debugger via a soft-reset. If the CPU was
|
||||
* hung before entering the debugger it will return to the hung
|
||||
* state when exiting this function. This causes a problem in
|
||||
* kdump since the hung CPU(s) will not respond to the IPI sent
|
||||
* from kdump. To prevent the problem we call crash_kexec_secondary()
|
||||
* here. If a kdump had not been initiated or we exit the debugger
|
||||
* with the "exit and recover" command (x) crash_kexec_secondary()
|
||||
* will return after 5ms and the CPU returns to its previous state.
|
||||
*/
|
||||
crash_kexec_secondary(regs);
|
||||
|
||||
/* Must die if the interrupt is not recoverable */
|
||||
if (!(regs->msr & MSR_RI))
|
||||
panic("Unrecoverable System Reset");
|
||||
|
|
|
@ -213,8 +213,6 @@ static void pseries_lpar_enable_pmcs(void)
|
|||
{
|
||||
unsigned long set, reset;
|
||||
|
||||
power4_enable_pmcs();
|
||||
|
||||
set = 1UL << 63;
|
||||
reset = 0;
|
||||
plpar_hcall_norets(H_PERFMON, set, reset);
|
||||
|
|
|
@ -467,7 +467,7 @@ void xics_setup_cpu(void)
|
|||
*
|
||||
* XXX: undo of teardown on kexec needs this too, as may hotplug
|
||||
*/
|
||||
rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
|
||||
rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
|
||||
(1UL << interrupt_server_size) - 1 - default_distrib_server, 1);
|
||||
}
|
||||
|
||||
|
@ -796,7 +796,7 @@ void xics_teardown_cpu(int secondary)
|
|||
* so leave the master cpu in the group.
|
||||
*/
|
||||
if (secondary)
|
||||
rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
|
||||
rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
|
||||
(1UL << interrupt_server_size) - 1 -
|
||||
default_distrib_server, 0);
|
||||
}
|
||||
|
@ -813,7 +813,7 @@ void xics_migrate_irqs_away(void)
|
|||
xics_set_cpu_priority(cpu, 0);
|
||||
|
||||
/* remove ourselves from the global interrupt queue */
|
||||
status = rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
|
||||
status = rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
|
||||
(1UL << interrupt_server_size) - 1 - default_distrib_server, 0);
|
||||
WARN_ON(status < 0);
|
||||
|
||||
|
|
|
@ -169,8 +169,16 @@ static int __init gfar_of_init(void)
|
|||
goto err;
|
||||
}
|
||||
|
||||
mac_addr = get_property(np, "address", NULL);
|
||||
memcpy(gfar_data.mac_addr, mac_addr, 6);
|
||||
mac_addr = get_property(np, "local-mac-address", NULL);
|
||||
if (mac_addr == NULL)
|
||||
mac_addr = get_property(np, "mac-address", NULL);
|
||||
if (mac_addr == NULL) {
|
||||
/* Obsolete */
|
||||
mac_addr = get_property(np, "address", NULL);
|
||||
}
|
||||
|
||||
if (mac_addr)
|
||||
memcpy(gfar_data.mac_addr, mac_addr, 6);
|
||||
|
||||
if (model && !strcasecmp(model, "TSEC"))
|
||||
gfar_data.device_flags =
|
||||
|
|
|
@ -618,7 +618,7 @@ appldata_offline_cpu(int cpu)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
static int
|
||||
static int __cpuinit
|
||||
appldata_cpu_notify(struct notifier_block *self,
|
||||
unsigned long action, void *hcpu)
|
||||
{
|
||||
|
|
|
@ -129,7 +129,7 @@ void __init paging_init(void)
|
|||
/*
|
||||
* pg_table is physical at this point
|
||||
*/
|
||||
pg_table = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
|
||||
pg_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE);
|
||||
|
||||
pg_dir->pgd0 = (_PAGE_TABLE | __pa(pg_table));
|
||||
pg_dir->pgd1 = (_PAGE_TABLE | (__pa(pg_table)+1024));
|
||||
|
@ -219,7 +219,7 @@ void __init paging_init(void)
|
|||
continue;
|
||||
}
|
||||
|
||||
pm_dir = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE*4);
|
||||
pm_dir = (pmd_t *) alloc_bootmem_pages(PAGE_SIZE * 4);
|
||||
pgd_populate(&init_mm, pg_dir, pm_dir);
|
||||
|
||||
for (j = 0 ; j < PTRS_PER_PMD ; j++,pm_dir++) {
|
||||
|
@ -228,7 +228,7 @@ void __init paging_init(void)
|
|||
continue;
|
||||
}
|
||||
|
||||
pt_dir = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
|
||||
pt_dir = (pte_t *) alloc_bootmem_pages(PAGE_SIZE);
|
||||
pmd_populate_kernel(&init_mm, pm_dir, pt_dir);
|
||||
|
||||
for (k = 0 ; k < PTRS_PER_PTE ; k++,pt_dir++) {
|
||||
|
|
|
@ -529,7 +529,7 @@ void __kprobes oops_end(unsigned long flags)
|
|||
/* Nest count reaches zero, release the lock. */
|
||||
spin_unlock_irqrestore(&die_lock, flags);
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception: panic_on_oops");
|
||||
panic("Fatal exception");
|
||||
}
|
||||
|
||||
void __kprobes __die(const char * str, struct pt_regs * regs, long err)
|
||||
|
|
|
@ -488,7 +488,7 @@ void die(const char * str, struct pt_regs * regs, long err)
|
|||
panic("Fatal exception in interrupt");
|
||||
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception: panic_on_oops");
|
||||
panic("Fatal exception");
|
||||
|
||||
do_exit(err);
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ config WATCHDOG_NOWAYOUT
|
|||
comment "Watchdog Device Drivers"
|
||||
depends on WATCHDOG
|
||||
|
||||
# Architecture Independant
|
||||
# Architecture Independent
|
||||
|
||||
config SOFT_WATCHDOG
|
||||
tristate "Software watchdog"
|
||||
|
@ -127,7 +127,7 @@ config S3C2410_WATCHDOG
|
|||
enabled.
|
||||
|
||||
The driver is limited by the speed of the system's PCLK
|
||||
signal, so with reasonbaly fast systems (PCLK around 50-66MHz)
|
||||
signal, so with reasonably fast systems (PCLK around 50-66MHz)
|
||||
then watchdog intervals of over approximately 20seconds are
|
||||
unavailable.
|
||||
|
||||
|
@ -423,7 +423,7 @@ config SBC_EPX_C3_WATCHDOG
|
|||
is no way to know if writing to its IO address will corrupt
|
||||
your system or have any real effect. The only way to be sure
|
||||
that this driver does what you want is to make sure you
|
||||
are runnning it on an EPX-C3 from Winsystems with the watchdog
|
||||
are running it on an EPX-C3 from Winsystems with the watchdog
|
||||
timer at IO address 0x1ee and 0x1ef. It will write to both those
|
||||
IO ports. Basically, the assumption is made that if you compile
|
||||
this driver into your kernel and/or load it as a module, that you
|
||||
|
@ -472,7 +472,7 @@ config INDYDOG
|
|||
tristate "Indy/I2 Hardware Watchdog"
|
||||
depends on WATCHDOG && SGI_IP22
|
||||
help
|
||||
Hardwaredriver for the Indy's/I2's watchdog. This is a
|
||||
Hardware driver for the Indy's/I2's watchdog. This is a
|
||||
watchdog timer that will reboot the machine after a 60 second
|
||||
timer expired and no process has written to /dev/watchdog during
|
||||
that time.
|
||||
|
|
|
@ -710,6 +710,8 @@ static int multipath_ctr(struct dm_target *ti, unsigned int argc,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
m->ti = ti;
|
||||
|
||||
r = parse_features(&as, m, ti);
|
||||
if (r)
|
||||
goto bad;
|
||||
|
@ -751,7 +753,6 @@ static int multipath_ctr(struct dm_target *ti, unsigned int argc,
|
|||
}
|
||||
|
||||
ti->private = m;
|
||||
m->ti = ti;
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -56,8 +56,8 @@
|
|||
|
||||
#define DRV_MODULE_NAME "bnx2"
|
||||
#define PFX DRV_MODULE_NAME ": "
|
||||
#define DRV_MODULE_VERSION "1.4.43"
|
||||
#define DRV_MODULE_RELDATE "June 28, 2006"
|
||||
#define DRV_MODULE_VERSION "1.4.44"
|
||||
#define DRV_MODULE_RELDATE "August 10, 2006"
|
||||
|
||||
#define RUN_AT(x) (jiffies + (x))
|
||||
|
||||
|
@ -209,8 +209,10 @@ MODULE_DEVICE_TABLE(pci, bnx2_pci_tbl);
|
|||
|
||||
static inline u32 bnx2_tx_avail(struct bnx2 *bp)
|
||||
{
|
||||
u32 diff = TX_RING_IDX(bp->tx_prod) - TX_RING_IDX(bp->tx_cons);
|
||||
u32 diff;
|
||||
|
||||
smp_mb();
|
||||
diff = TX_RING_IDX(bp->tx_prod) - TX_RING_IDX(bp->tx_cons);
|
||||
if (diff > MAX_TX_DESC_CNT)
|
||||
diff = (diff & MAX_TX_DESC_CNT) - 1;
|
||||
return (bp->tx_ring_size - diff);
|
||||
|
@ -1569,7 +1571,7 @@ bnx2_alloc_rx_skb(struct bnx2 *bp, u16 index)
|
|||
struct rx_bd *rxbd = &bp->rx_desc_ring[RX_RING(index)][RX_IDX(index)];
|
||||
unsigned long align;
|
||||
|
||||
skb = dev_alloc_skb(bp->rx_buf_size);
|
||||
skb = netdev_alloc_skb(bp->dev, bp->rx_buf_size);
|
||||
if (skb == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -1578,7 +1580,6 @@ bnx2_alloc_rx_skb(struct bnx2 *bp, u16 index)
|
|||
skb_reserve(skb, 8 - align);
|
||||
}
|
||||
|
||||
skb->dev = bp->dev;
|
||||
mapping = pci_map_single(bp->pdev, skb->data, bp->rx_buf_use_size,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
|
||||
|
@ -1686,15 +1687,20 @@ bnx2_tx_int(struct bnx2 *bp)
|
|||
}
|
||||
|
||||
bp->tx_cons = sw_cons;
|
||||
/* Need to make the tx_cons update visible to bnx2_start_xmit()
|
||||
* before checking for netif_queue_stopped(). Without the
|
||||
* memory barrier, there is a small possibility that bnx2_start_xmit()
|
||||
* will miss it and cause the queue to be stopped forever.
|
||||
*/
|
||||
smp_mb();
|
||||
|
||||
if (unlikely(netif_queue_stopped(bp->dev))) {
|
||||
spin_lock(&bp->tx_lock);
|
||||
if (unlikely(netif_queue_stopped(bp->dev)) &&
|
||||
(bnx2_tx_avail(bp) > bp->tx_wake_thresh)) {
|
||||
netif_tx_lock(bp->dev);
|
||||
if ((netif_queue_stopped(bp->dev)) &&
|
||||
(bnx2_tx_avail(bp) > MAX_SKB_FRAGS)) {
|
||||
|
||||
(bnx2_tx_avail(bp) > bp->tx_wake_thresh))
|
||||
netif_wake_queue(bp->dev);
|
||||
}
|
||||
spin_unlock(&bp->tx_lock);
|
||||
netif_tx_unlock(bp->dev);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1786,7 +1792,7 @@ bnx2_rx_int(struct bnx2 *bp, int budget)
|
|||
if ((bp->dev->mtu > 1500) && (len <= RX_COPY_THRESH)) {
|
||||
struct sk_buff *new_skb;
|
||||
|
||||
new_skb = dev_alloc_skb(len + 2);
|
||||
new_skb = netdev_alloc_skb(bp->dev, len + 2);
|
||||
if (new_skb == NULL)
|
||||
goto reuse_rx;
|
||||
|
||||
|
@ -1797,7 +1803,6 @@ bnx2_rx_int(struct bnx2 *bp, int budget)
|
|||
|
||||
skb_reserve(new_skb, 2);
|
||||
skb_put(new_skb, len);
|
||||
new_skb->dev = bp->dev;
|
||||
|
||||
bnx2_reuse_rx_skb(bp, skb,
|
||||
sw_ring_cons, sw_ring_prod);
|
||||
|
@ -3503,6 +3508,8 @@ bnx2_init_tx_ring(struct bnx2 *bp)
|
|||
struct tx_bd *txbd;
|
||||
u32 val;
|
||||
|
||||
bp->tx_wake_thresh = bp->tx_ring_size / 2;
|
||||
|
||||
txbd = &bp->tx_desc_ring[MAX_TX_DESC_CNT];
|
||||
|
||||
txbd->tx_bd_haddr_hi = (u64) bp->tx_desc_mapping >> 32;
|
||||
|
@ -3952,7 +3959,7 @@ bnx2_run_loopback(struct bnx2 *bp, int loopback_mode)
|
|||
return -EINVAL;
|
||||
|
||||
pkt_size = 1514;
|
||||
skb = dev_alloc_skb(pkt_size);
|
||||
skb = netdev_alloc_skb(bp->dev, pkt_size);
|
||||
if (!skb)
|
||||
return -ENOMEM;
|
||||
packet = skb_put(skb, pkt_size);
|
||||
|
@ -4390,10 +4397,8 @@ bnx2_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid)
|
|||
#endif
|
||||
|
||||
/* Called with netif_tx_lock.
|
||||
* hard_start_xmit is pseudo-lockless - a lock is only required when
|
||||
* the tx queue is full. This way, we get the benefit of lockless
|
||||
* operations most of the time without the complexities to handle
|
||||
* netif_stop_queue/wake_queue race conditions.
|
||||
* bnx2_tx_int() runs without netif_tx_lock unless it needs to call
|
||||
* netif_wake_queue().
|
||||
*/
|
||||
static int
|
||||
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)
|
|||
dev->trans_start = jiffies;
|
||||
|
||||
if (unlikely(bnx2_tx_avail(bp) <= MAX_SKB_FRAGS)) {
|
||||
spin_lock(&bp->tx_lock);
|
||||
netif_stop_queue(dev);
|
||||
|
||||
if (bnx2_tx_avail(bp) > MAX_SKB_FRAGS)
|
||||
if (bnx2_tx_avail(bp) > bp->tx_wake_thresh)
|
||||
netif_wake_queue(dev);
|
||||
spin_unlock(&bp->tx_lock);
|
||||
}
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
|
@ -5628,7 +5630,6 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
|||
bp->pdev = pdev;
|
||||
|
||||
spin_lock_init(&bp->phy_lock);
|
||||
spin_lock_init(&bp->tx_lock);
|
||||
INIT_WORK(&bp->reset_task, bnx2_reset_task, bp);
|
||||
|
||||
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)
|
|||
bp->mac_addr[5] = (u8) reg;
|
||||
|
||||
bp->tx_ring_size = MAX_TX_DESC_CNT;
|
||||
bnx2_set_rx_ring_size(bp, 100);
|
||||
bnx2_set_rx_ring_size(bp, 255);
|
||||
|
||||
bp->rx_csum = 1;
|
||||
|
||||
|
|
|
@ -3890,10 +3890,6 @@ struct bnx2 {
|
|||
u32 tx_prod_bseq __attribute__((aligned(L1_CACHE_BYTES)));
|
||||
u16 tx_prod;
|
||||
|
||||
struct tx_bd *tx_desc_ring;
|
||||
struct sw_bd *tx_buf_ring;
|
||||
int tx_ring_size;
|
||||
|
||||
u16 tx_cons __attribute__((aligned(L1_CACHE_BYTES)));
|
||||
u16 hw_tx_cons;
|
||||
|
||||
|
@ -3916,9 +3912,11 @@ struct bnx2 {
|
|||
struct sw_bd *rx_buf_ring;
|
||||
struct rx_bd *rx_desc_ring[MAX_RX_RINGS];
|
||||
|
||||
/* Only used to synchronize netif_stop_queue/wake_queue when tx */
|
||||
/* ring is full */
|
||||
spinlock_t tx_lock;
|
||||
/* TX constants */
|
||||
struct tx_bd *tx_desc_ring;
|
||||
struct sw_bd *tx_buf_ring;
|
||||
int tx_ring_size;
|
||||
u32 tx_wake_thresh;
|
||||
|
||||
/* End of fields used in the performance code paths. */
|
||||
|
||||
|
|
|
@ -192,7 +192,7 @@ struct cardmap {
|
|||
void *ptr[CARDMAP_WIDTH];
|
||||
};
|
||||
static void *cardmap_get(struct cardmap *map, unsigned int nr);
|
||||
static void cardmap_set(struct cardmap **map, unsigned int nr, void *ptr);
|
||||
static int cardmap_set(struct cardmap **map, unsigned int nr, void *ptr);
|
||||
static unsigned int cardmap_find_first_free(struct cardmap *map);
|
||||
static void cardmap_destroy(struct cardmap **map);
|
||||
|
||||
|
@ -1995,10 +1995,9 @@ ppp_register_channel(struct ppp_channel *chan)
|
|||
{
|
||||
struct channel *pch;
|
||||
|
||||
pch = kmalloc(sizeof(struct channel), GFP_KERNEL);
|
||||
pch = kzalloc(sizeof(struct channel), GFP_KERNEL);
|
||||
if (pch == 0)
|
||||
return -ENOMEM;
|
||||
memset(pch, 0, sizeof(struct channel));
|
||||
pch->ppp = NULL;
|
||||
pch->chan = chan;
|
||||
chan->ppp = pch;
|
||||
|
@ -2408,13 +2407,12 @@ ppp_create_interface(int unit, int *retp)
|
|||
int ret = -ENOMEM;
|
||||
int i;
|
||||
|
||||
ppp = kmalloc(sizeof(struct ppp), GFP_KERNEL);
|
||||
ppp = kzalloc(sizeof(struct ppp), GFP_KERNEL);
|
||||
if (!ppp)
|
||||
goto out;
|
||||
dev = alloc_netdev(0, "", ppp_setup);
|
||||
if (!dev)
|
||||
goto out1;
|
||||
memset(ppp, 0, sizeof(struct ppp));
|
||||
|
||||
ppp->mru = PPP_MRU;
|
||||
init_ppp_file(&ppp->file, INTERFACE);
|
||||
|
@ -2454,11 +2452,16 @@ ppp_create_interface(int unit, int *retp)
|
|||
}
|
||||
|
||||
atomic_inc(&ppp_unit_count);
|
||||
cardmap_set(&all_ppp_units, unit, ppp);
|
||||
ret = cardmap_set(&all_ppp_units, unit, ppp);
|
||||
if (ret != 0)
|
||||
goto out3;
|
||||
|
||||
mutex_unlock(&all_ppp_mutex);
|
||||
*retp = 0;
|
||||
return ppp;
|
||||
|
||||
out3:
|
||||
atomic_dec(&ppp_unit_count);
|
||||
out2:
|
||||
mutex_unlock(&all_ppp_mutex);
|
||||
free_netdev(dev);
|
||||
|
@ -2695,7 +2698,7 @@ static void *cardmap_get(struct cardmap *map, unsigned int nr)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
||||
static int cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
||||
{
|
||||
struct cardmap *p;
|
||||
int i;
|
||||
|
@ -2704,8 +2707,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
|||
if (p == NULL || (nr >> p->shift) >= CARDMAP_WIDTH) {
|
||||
do {
|
||||
/* need a new top level */
|
||||
struct cardmap *np = kmalloc(sizeof(*np), GFP_KERNEL);
|
||||
memset(np, 0, sizeof(*np));
|
||||
struct cardmap *np = kzalloc(sizeof(*np), GFP_KERNEL);
|
||||
if (!np)
|
||||
goto enomem;
|
||||
np->ptr[0] = p;
|
||||
if (p != NULL) {
|
||||
np->shift = p->shift + CARDMAP_ORDER;
|
||||
|
@ -2719,8 +2723,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
|||
while (p->shift > 0) {
|
||||
i = (nr >> p->shift) & CARDMAP_MASK;
|
||||
if (p->ptr[i] == NULL) {
|
||||
struct cardmap *np = kmalloc(sizeof(*np), GFP_KERNEL);
|
||||
memset(np, 0, sizeof(*np));
|
||||
struct cardmap *np = kzalloc(sizeof(*np), GFP_KERNEL);
|
||||
if (!np)
|
||||
goto enomem;
|
||||
np->shift = p->shift - CARDMAP_ORDER;
|
||||
np->parent = p;
|
||||
p->ptr[i] = np;
|
||||
|
@ -2735,6 +2740,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
|||
set_bit(i, &p->inuse);
|
||||
else
|
||||
clear_bit(i, &p->inuse);
|
||||
return 0;
|
||||
enomem:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static unsigned int cardmap_find_first_free(struct cardmap *map)
|
||||
|
|
|
@ -1730,8 +1730,8 @@ dasd_flush_request_queue(struct dasd_device * device)
|
|||
req = elv_next_request(device->request_queue);
|
||||
if (req == NULL)
|
||||
break;
|
||||
dasd_end_request(req, 0);
|
||||
blkdev_dequeue_request(req);
|
||||
dasd_end_request(req, 0);
|
||||
}
|
||||
spin_unlock_irq(&device->request_queue_lock);
|
||||
}
|
||||
|
|
|
@ -48,18 +48,20 @@ struct dasd_devmap {
|
|||
};
|
||||
|
||||
/*
|
||||
* dasd_servermap is used to store the server_id of all storage servers
|
||||
* accessed by DASD device driver.
|
||||
* dasd_server_ssid_map contains a globally unique storage server subsystem ID.
|
||||
* dasd_server_ssid_list contains the list of all subsystem IDs accessed by
|
||||
* the DASD device driver.
|
||||
*/
|
||||
struct dasd_servermap {
|
||||
struct dasd_server_ssid_map {
|
||||
struct list_head list;
|
||||
struct server_id {
|
||||
char vendor[4];
|
||||
char serial[15];
|
||||
} sid;
|
||||
__u16 ssid;
|
||||
};
|
||||
|
||||
static struct list_head dasd_serverlist;
|
||||
static struct list_head dasd_server_ssid_list;
|
||||
|
||||
/*
|
||||
* Parameter parsing functions for dasd= parameter. The syntax is:
|
||||
|
@ -89,7 +91,7 @@ static char *dasd[256];
|
|||
module_param_array(dasd, charp, NULL, 0);
|
||||
|
||||
/*
|
||||
* Single spinlock to protect devmap structures and lists.
|
||||
* Single spinlock to protect devmap and servermap structures and lists.
|
||||
*/
|
||||
static DEFINE_SPINLOCK(dasd_devmap_lock);
|
||||
|
||||
|
@ -264,8 +266,9 @@ dasd_parse_keyword( char *parsestring ) {
|
|||
if (dasd_page_cache)
|
||||
return residual_str;
|
||||
dasd_page_cache =
|
||||
kmem_cache_create("dasd_page_cache", PAGE_SIZE, 0,
|
||||
SLAB_CACHE_DMA, NULL, NULL );
|
||||
kmem_cache_create("dasd_page_cache", PAGE_SIZE,
|
||||
PAGE_SIZE, SLAB_CACHE_DMA,
|
||||
NULL, NULL );
|
||||
if (!dasd_page_cache)
|
||||
MESSAGE(KERN_WARNING, "%s", "Failed to create slab, "
|
||||
"fixed buffer mode disabled.");
|
||||
|
@ -858,39 +861,6 @@ static struct attribute_group dasd_attr_group = {
|
|||
.attrs = dasd_attrs,
|
||||
};
|
||||
|
||||
/*
|
||||
* Check if the related storage server is already contained in the
|
||||
* dasd_serverlist. If server is not contained, create new entry.
|
||||
* Return 0 if server was already in serverlist,
|
||||
* 1 if the server was added successfully
|
||||
* <0 in case of error.
|
||||
*/
|
||||
static int
|
||||
dasd_add_server(struct dasd_uid *uid)
|
||||
{
|
||||
struct dasd_servermap *new, *tmp;
|
||||
|
||||
/* check if server is already contained */
|
||||
list_for_each_entry(tmp, &dasd_serverlist, list)
|
||||
// normale cmp?
|
||||
if (strncmp(tmp->sid.vendor, uid->vendor,
|
||||
sizeof(tmp->sid.vendor)) == 0
|
||||
&& strncmp(tmp->sid.serial, uid->serial,
|
||||
sizeof(tmp->sid.serial)) == 0)
|
||||
return 0;
|
||||
|
||||
new = (struct dasd_servermap *)
|
||||
kzalloc(sizeof(struct dasd_servermap), GFP_KERNEL);
|
||||
if (!new)
|
||||
return -ENOMEM;
|
||||
|
||||
strncpy(new->sid.vendor, uid->vendor, sizeof(new->sid.vendor));
|
||||
strncpy(new->sid.serial, uid->serial, sizeof(new->sid.serial));
|
||||
list_add(&new->list, &dasd_serverlist);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Return copy of the device unique identifier.
|
||||
*/
|
||||
|
@ -910,6 +880,9 @@ dasd_get_uid(struct ccw_device *cdev, struct dasd_uid *uid)
|
|||
|
||||
/*
|
||||
* Register the given device unique identifier into devmap struct.
|
||||
* In addition check if the related storage server subsystem ID is already
|
||||
* contained in the dasd_server_ssid_list. If subsystem ID is not contained,
|
||||
* create new entry.
|
||||
* Return 0 if server was already in serverlist,
|
||||
* 1 if the server was added successful
|
||||
* <0 in case of error.
|
||||
|
@ -918,16 +891,39 @@ int
|
|||
dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid)
|
||||
{
|
||||
struct dasd_devmap *devmap;
|
||||
int rc;
|
||||
struct dasd_server_ssid_map *srv, *tmp;
|
||||
|
||||
devmap = dasd_find_busid(cdev->dev.bus_id);
|
||||
if (IS_ERR(devmap))
|
||||
return PTR_ERR(devmap);
|
||||
|
||||
/* generate entry for server_ssid_map */
|
||||
srv = (struct dasd_server_ssid_map *)
|
||||
kzalloc(sizeof(struct dasd_server_ssid_map), GFP_KERNEL);
|
||||
if (!srv)
|
||||
return -ENOMEM;
|
||||
strncpy(srv->sid.vendor, uid->vendor, sizeof(srv->sid.vendor) - 1);
|
||||
strncpy(srv->sid.serial, uid->serial, sizeof(srv->sid.serial) - 1);
|
||||
srv->ssid = uid->ssid;
|
||||
|
||||
/* server is already contained ? */
|
||||
spin_lock(&dasd_devmap_lock);
|
||||
devmap->uid = *uid;
|
||||
rc = dasd_add_server(uid);
|
||||
list_for_each_entry(tmp, &dasd_server_ssid_list, list) {
|
||||
if (!memcmp(&srv->sid, &tmp->sid,
|
||||
sizeof(struct dasd_server_ssid_map))) {
|
||||
kfree(srv);
|
||||
srv = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* add servermap to serverlist */
|
||||
if (srv)
|
||||
list_add(&srv->list, &dasd_server_ssid_list);
|
||||
spin_unlock(&dasd_devmap_lock);
|
||||
return rc;
|
||||
|
||||
return (srv ? 1 : 0);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dasd_set_uid);
|
||||
|
||||
|
@ -995,7 +991,7 @@ dasd_devmap_init(void)
|
|||
INIT_LIST_HEAD(&dasd_hashlists[i]);
|
||||
|
||||
/* Initialize servermap structure. */
|
||||
INIT_LIST_HEAD(&dasd_serverlist);
|
||||
INIT_LIST_HEAD(&dasd_server_ssid_list);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -468,11 +468,11 @@ dasd_eckd_generate_uid(struct dasd_device *device, struct dasd_uid *uid)
|
|||
return -ENODEV;
|
||||
|
||||
memset(uid, 0, sizeof(struct dasd_uid));
|
||||
strncpy(uid->vendor, confdata->ned1.HDA_manufacturer,
|
||||
sizeof(uid->vendor) - 1);
|
||||
memcpy(uid->vendor, confdata->ned1.HDA_manufacturer,
|
||||
sizeof(uid->vendor) - 1);
|
||||
EBCASC(uid->vendor, sizeof(uid->vendor) - 1);
|
||||
strncpy(uid->serial, confdata->ned1.HDA_location,
|
||||
sizeof(uid->serial) - 1);
|
||||
memcpy(uid->serial, confdata->ned1.HDA_location,
|
||||
sizeof(uid->serial) - 1);
|
||||
EBCASC(uid->serial, sizeof(uid->serial) - 1);
|
||||
uid->ssid = confdata->neq.subsystemID;
|
||||
if (confdata->ned2.sneq.flags == 0x40) {
|
||||
|
|
|
@ -48,15 +48,6 @@
|
|||
#define PRINT_ERR(x...) printk(KERN_ERR XPRAM_NAME " error:" x)
|
||||
|
||||
|
||||
static struct sysdev_class xpram_sysclass = {
|
||||
set_kset_name("xpram"),
|
||||
};
|
||||
|
||||
static struct sys_device xpram_sys_device = {
|
||||
.id = 0,
|
||||
.cls = &xpram_sysclass,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
unsigned int size; /* size of xpram segment in pages */
|
||||
unsigned int offset; /* start page of xpram segment */
|
||||
|
@ -451,8 +442,6 @@ static void __exit xpram_exit(void)
|
|||
}
|
||||
unregister_blkdev(XPRAM_MAJOR, XPRAM_NAME);
|
||||
blk_cleanup_queue(xpram_queue);
|
||||
sysdev_unregister(&xpram_sys_device);
|
||||
sysdev_class_unregister(&xpram_sysclass);
|
||||
}
|
||||
|
||||
static int __init xpram_init(void)
|
||||
|
@ -470,19 +459,7 @@ static int __init xpram_init(void)
|
|||
rc = xpram_setup_sizes(xpram_pages);
|
||||
if (rc)
|
||||
return rc;
|
||||
rc = sysdev_class_register(&xpram_sysclass);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = sysdev_register(&xpram_sys_device);
|
||||
if (rc) {
|
||||
sysdev_class_unregister(&xpram_sysclass);
|
||||
return rc;
|
||||
}
|
||||
rc = xpram_setup_blkdev();
|
||||
if (rc)
|
||||
sysdev_unregister(&xpram_sys_device);
|
||||
return rc;
|
||||
return xpram_setup_blkdev();
|
||||
}
|
||||
|
||||
module_init(xpram_init);
|
||||
|
|
|
@ -554,7 +554,7 @@ config FB_VESA
|
|||
|
||||
config FB_IMAC
|
||||
bool "Intel-based Macintosh Framebuffer Support"
|
||||
depends on (FB = y) && X86
|
||||
depends on (FB = y) && X86 && EFI
|
||||
select FB_CFB_FILLRECT
|
||||
select FB_CFB_COPYAREA
|
||||
select FB_CFB_IMAGEBLIT
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#include <linux/screen_info.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/efi.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
|
@ -28,7 +30,7 @@ typedef enum _MAC_TYPE {
|
|||
M_I20,
|
||||
M_MINI,
|
||||
M_MACBOOK,
|
||||
M_NEW
|
||||
M_UNKNOWN
|
||||
} MAC_TYPE;
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
@ -52,10 +54,36 @@ static struct fb_fix_screeninfo imacfb_fix __initdata = {
|
|||
};
|
||||
|
||||
static int inverse;
|
||||
static int model = M_NEW;
|
||||
static int model = M_UNKNOWN;
|
||||
static int manual_height;
|
||||
static int manual_width;
|
||||
|
||||
static int set_system(struct dmi_system_id *id)
|
||||
{
|
||||
printk(KERN_INFO "imacfb: %s detected - set system to %ld\n",
|
||||
id->ident, (long)id->driver_data);
|
||||
|
||||
model = (long)id->driver_data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id __initdata dmi_system_table[] = {
|
||||
{ set_system, "iMac4,1", {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."),
|
||||
DMI_MATCH(DMI_BIOS_VERSION,"iMac4,1") }, (void*)M_I17},
|
||||
{ set_system, "MacBookPro1,1", {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."),
|
||||
DMI_MATCH(DMI_BIOS_VERSION,"MacBookPro1,1") }, (void*)M_I17},
|
||||
{ set_system, "MacBook1,1", {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME,"MacBook1,1")}, (void *)M_MACBOOK},
|
||||
{ set_system, "Macmini1,1", {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME,"Macmini1,1")}, (void *)M_MINI},
|
||||
{},
|
||||
};
|
||||
|
||||
#define DEFAULT_FB_MEM 1024*1024*16
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
@ -149,7 +177,6 @@ static int __init imacfb_probe(struct platform_device *dev)
|
|||
screen_info.lfb_linelength = 1472 * 4;
|
||||
screen_info.lfb_base = 0x80010000;
|
||||
break;
|
||||
case M_NEW:
|
||||
case M_I20:
|
||||
screen_info.lfb_width = 1680;
|
||||
screen_info.lfb_height = 1050;
|
||||
|
@ -207,6 +234,10 @@ static int __init imacfb_probe(struct platform_device *dev)
|
|||
size_remap = size_total;
|
||||
imacfb_fix.smem_len = size_remap;
|
||||
|
||||
#ifndef __i386__
|
||||
screen_info.imacpm_seg = 0;
|
||||
#endif
|
||||
|
||||
if (!request_mem_region(imacfb_fix.smem_start, size_total, "imacfb")) {
|
||||
printk(KERN_WARNING
|
||||
"imacfb: cannot reserve video memory at 0x%lx\n",
|
||||
|
@ -324,8 +355,16 @@ static int __init imacfb_init(void)
|
|||
int ret;
|
||||
char *option = NULL;
|
||||
|
||||
/* ignore error return of fb_get_options */
|
||||
fb_get_options("imacfb", &option);
|
||||
if (!efi_enabled)
|
||||
return -ENODEV;
|
||||
if (!dmi_check_system(dmi_system_table))
|
||||
return -ENODEV;
|
||||
if (model == M_UNKNOWN)
|
||||
return -ENODEV;
|
||||
|
||||
if (fb_get_options("imacfb", &option))
|
||||
return -ENODEV;
|
||||
|
||||
imacfb_setup(option);
|
||||
ret = platform_driver_register(&imacfb_driver);
|
||||
|
||||
|
|
|
@ -308,7 +308,7 @@ static struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_di
|
|||
if (adfs_checkmap(sb, dm))
|
||||
return dm;
|
||||
|
||||
adfs_error(sb, NULL, "map corrupted");
|
||||
adfs_error(sb, "map corrupted");
|
||||
|
||||
error_free:
|
||||
while (--zone >= 0)
|
||||
|
|
|
@ -395,14 +395,16 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
|
|||
struct fuse_readpages_data data;
|
||||
int err;
|
||||
|
||||
err = -EIO;
|
||||
if (is_bad_inode(inode))
|
||||
return -EIO;
|
||||
goto clean_pages_up;
|
||||
|
||||
data.file = file;
|
||||
data.inode = inode;
|
||||
data.req = fuse_get_req(fc);
|
||||
err = PTR_ERR(data.req);
|
||||
if (IS_ERR(data.req))
|
||||
return PTR_ERR(data.req);
|
||||
goto clean_pages_up;
|
||||
|
||||
err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
|
||||
if (!err) {
|
||||
|
@ -412,6 +414,10 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
|
|||
fuse_put_request(fc, data.req);
|
||||
}
|
||||
return err;
|
||||
|
||||
clean_pages_up:
|
||||
put_pages_list(pages);
|
||||
return err;
|
||||
}
|
||||
|
||||
static size_t fuse_send_write(struct fuse_req *req, struct file *file,
|
||||
|
|
|
@ -1421,8 +1421,9 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
|||
if (!leases_enable)
|
||||
goto out;
|
||||
|
||||
error = lease_alloc(filp, arg, &fl);
|
||||
if (error)
|
||||
error = -ENOMEM;
|
||||
fl = locks_alloc_lock();
|
||||
if (fl == NULL)
|
||||
goto out;
|
||||
|
||||
locks_copy_lock(fl, lease);
|
||||
|
@ -1430,6 +1431,7 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
|||
locks_insert_lock(before, fl);
|
||||
|
||||
*flp = fl;
|
||||
error = 0;
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
|
|
|
@ -2375,7 +2375,6 @@ int dlm_migrate_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res,
|
|||
mlog(0, "returning %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dlm_migrate_lockres);
|
||||
|
||||
int dlm_lock_basts_flushed(struct dlm_ctxt *dlm, struct dlm_lock *lock)
|
||||
{
|
||||
|
|
|
@ -155,7 +155,7 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
|
|||
else
|
||||
status = dlm_get_unlock_actions(dlm, res, lock, lksb, &actions);
|
||||
|
||||
if (status != DLM_NORMAL)
|
||||
if (status != DLM_NORMAL && (status != DLM_CANCELGRANT || !master_node))
|
||||
goto leave;
|
||||
|
||||
/* By now this has been masked out of cancel requests. */
|
||||
|
@ -183,8 +183,7 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
|
|||
spin_lock(&lock->spinlock);
|
||||
/* if the master told us the lock was already granted,
|
||||
* let the ast handle all of these actions */
|
||||
if (status == DLM_NORMAL &&
|
||||
lksb->status == DLM_CANCELGRANT) {
|
||||
if (status == DLM_CANCELGRANT) {
|
||||
actions &= ~(DLM_UNLOCK_REMOVE_LOCK|
|
||||
DLM_UNLOCK_REGRANT_LOCK|
|
||||
DLM_UNLOCK_CLEAR_CONVERT_TYPE);
|
||||
|
@ -349,14 +348,9 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm,
|
|||
vec, veclen, owner, &status);
|
||||
if (tmpret >= 0) {
|
||||
// successfully sent and received
|
||||
if (status == DLM_CANCELGRANT)
|
||||
ret = DLM_NORMAL;
|
||||
else if (status == DLM_FORWARD) {
|
||||
if (status == DLM_FORWARD)
|
||||
mlog(0, "master was in-progress. retry\n");
|
||||
ret = DLM_FORWARD;
|
||||
} else
|
||||
ret = status;
|
||||
lksb->status = status;
|
||||
ret = status;
|
||||
} else {
|
||||
mlog_errno(tmpret);
|
||||
if (dlm_is_host_down(tmpret)) {
|
||||
|
@ -372,7 +366,6 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm,
|
|||
/* something bad. this will BUG in ocfs2 */
|
||||
ret = dlm_err_to_dlm_status(tmpret);
|
||||
}
|
||||
lksb->status = ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -483,6 +476,10 @@ int dlm_unlock_lock_handler(struct o2net_msg *msg, u32 len, void *data)
|
|||
|
||||
/* lock was found on queue */
|
||||
lksb = lock->lksb;
|
||||
if (flags & (LKM_VALBLK|LKM_PUT_LVB) &&
|
||||
lock->ml.type != LKM_EXMODE)
|
||||
flags &= ~(LKM_VALBLK|LKM_PUT_LVB);
|
||||
|
||||
/* unlockast only called on originating node */
|
||||
if (flags & LKM_PUT_LVB) {
|
||||
lksb->flags |= DLM_LKSB_PUT_LVB;
|
||||
|
@ -507,11 +504,8 @@ int dlm_unlock_lock_handler(struct o2net_msg *msg, u32 len, void *data)
|
|||
"cookie=%u:%llu\n",
|
||||
dlm_get_lock_cookie_node(unlock->cookie),
|
||||
dlm_get_lock_cookie_seq(unlock->cookie));
|
||||
else {
|
||||
/* send the lksb->status back to the other node */
|
||||
status = lksb->status;
|
||||
else
|
||||
dlm_lock_put(lock);
|
||||
}
|
||||
|
||||
leave:
|
||||
if (res)
|
||||
|
@ -533,26 +527,22 @@ static enum dlm_status dlm_get_cancel_actions(struct dlm_ctxt *dlm,
|
|||
|
||||
if (dlm_lock_on_list(&res->blocked, lock)) {
|
||||
/* cancel this outright */
|
||||
lksb->status = DLM_NORMAL;
|
||||
status = DLM_NORMAL;
|
||||
*actions = (DLM_UNLOCK_CALL_AST |
|
||||
DLM_UNLOCK_REMOVE_LOCK);
|
||||
} else if (dlm_lock_on_list(&res->converting, lock)) {
|
||||
/* cancel the request, put back on granted */
|
||||
lksb->status = DLM_NORMAL;
|
||||
status = DLM_NORMAL;
|
||||
*actions = (DLM_UNLOCK_CALL_AST |
|
||||
DLM_UNLOCK_REMOVE_LOCK |
|
||||
DLM_UNLOCK_REGRANT_LOCK |
|
||||
DLM_UNLOCK_CLEAR_CONVERT_TYPE);
|
||||
} else if (dlm_lock_on_list(&res->granted, lock)) {
|
||||
/* too late, already granted. DLM_CANCELGRANT */
|
||||
lksb->status = DLM_CANCELGRANT;
|
||||
status = DLM_NORMAL;
|
||||
/* too late, already granted. */
|
||||
status = DLM_CANCELGRANT;
|
||||
*actions = DLM_UNLOCK_CALL_AST;
|
||||
} else {
|
||||
mlog(ML_ERROR, "lock to cancel is not on any list!\n");
|
||||
lksb->status = DLM_IVLOCKID;
|
||||
status = DLM_IVLOCKID;
|
||||
*actions = 0;
|
||||
}
|
||||
|
@ -569,13 +559,11 @@ static enum dlm_status dlm_get_unlock_actions(struct dlm_ctxt *dlm,
|
|||
|
||||
/* unlock request */
|
||||
if (!dlm_lock_on_list(&res->granted, lock)) {
|
||||
lksb->status = DLM_DENIED;
|
||||
status = DLM_DENIED;
|
||||
dlm_error(status);
|
||||
*actions = 0;
|
||||
} else {
|
||||
/* unlock granted lock */
|
||||
lksb->status = DLM_NORMAL;
|
||||
status = DLM_NORMAL;
|
||||
*actions = (DLM_UNLOCK_FREE_LOCK |
|
||||
DLM_UNLOCK_CALL_AST |
|
||||
|
@ -632,6 +620,8 @@ enum dlm_status dlmunlock(struct dlm_ctxt *dlm, struct dlm_lockstatus *lksb,
|
|||
|
||||
spin_lock(&res->spinlock);
|
||||
is_master = (res->owner == dlm->node_num);
|
||||
if (flags & LKM_VALBLK && lock->ml.type != LKM_EXMODE)
|
||||
flags &= ~LKM_VALBLK;
|
||||
spin_unlock(&res->spinlock);
|
||||
|
||||
if (is_master) {
|
||||
|
@ -665,7 +655,7 @@ enum dlm_status dlmunlock(struct dlm_ctxt *dlm, struct dlm_lockstatus *lksb,
|
|||
}
|
||||
|
||||
if (call_ast) {
|
||||
mlog(0, "calling unlockast(%p, %d)\n", data, lksb->status);
|
||||
mlog(0, "calling unlockast(%p, %d)\n", data, status);
|
||||
if (is_master) {
|
||||
/* it is possible that there is one last bast
|
||||
* pending. make sure it is flushed, then
|
||||
|
@ -677,9 +667,12 @@ enum dlm_status dlmunlock(struct dlm_ctxt *dlm, struct dlm_lockstatus *lksb,
|
|||
wait_event(dlm->ast_wq,
|
||||
dlm_lock_basts_flushed(dlm, lock));
|
||||
}
|
||||
(*unlockast)(data, lksb->status);
|
||||
(*unlockast)(data, status);
|
||||
}
|
||||
|
||||
if (status == DLM_CANCELGRANT)
|
||||
status = DLM_NORMAL;
|
||||
|
||||
if (status == DLM_NORMAL) {
|
||||
mlog(0, "kicking the thread\n");
|
||||
dlm_kick_thread(dlm, res);
|
||||
|
|
|
@ -840,6 +840,12 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
|
|||
|
||||
mlog(0, "Allocating %u clusters for a new window.\n",
|
||||
ocfs2_local_alloc_window_bits(osb));
|
||||
|
||||
/* Instruct the allocation code to try the most recently used
|
||||
* cluster group. We'll re-record the group used this pass
|
||||
* below. */
|
||||
ac->ac_last_group = osb->la_last_gd;
|
||||
|
||||
/* we used the generic suballoc reserve function, but we set
|
||||
* everything up nicely, so there's no reason why we can't use
|
||||
* the more specific cluster api to claim bits. */
|
||||
|
@ -852,6 +858,8 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
|
|||
goto bail;
|
||||
}
|
||||
|
||||
osb->la_last_gd = ac->ac_last_group;
|
||||
|
||||
la->la_bm_off = cpu_to_le32(cluster_off);
|
||||
alloc->id1.bitmap1.i_total = cpu_to_le32(cluster_count);
|
||||
/* just in case... In the future when we find space ourselves,
|
||||
|
|
|
@ -197,7 +197,6 @@ struct ocfs2_super
|
|||
struct ocfs2_node_map recovery_map;
|
||||
struct ocfs2_node_map umount_map;
|
||||
|
||||
u32 num_clusters;
|
||||
u64 root_blkno;
|
||||
u64 system_dir_blkno;
|
||||
u64 bitmap_blkno;
|
||||
|
@ -237,6 +236,7 @@ struct ocfs2_super
|
|||
|
||||
enum ocfs2_local_alloc_state local_alloc_state;
|
||||
struct buffer_head *local_alloc_bh;
|
||||
u64 la_last_gd;
|
||||
|
||||
/* Next two fields are for local node slot recovery during
|
||||
* mount. */
|
||||
|
|
|
@ -70,12 +70,6 @@ static int ocfs2_block_group_search(struct inode *inode,
|
|||
struct buffer_head *group_bh,
|
||||
u32 bits_wanted, u32 min_bits,
|
||||
u16 *bit_off, u16 *bits_found);
|
||||
static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
||||
u32 bits_wanted,
|
||||
u32 min_bits,
|
||||
u16 *bit_off,
|
||||
unsigned int *num_bits,
|
||||
u64 *bg_blkno);
|
||||
static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
||||
struct ocfs2_alloc_context *ac,
|
||||
u32 bits_wanted,
|
||||
|
@ -85,11 +79,6 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
|||
u64 *bg_blkno);
|
||||
static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh,
|
||||
int nr);
|
||||
static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb,
|
||||
struct buffer_head *bg_bh,
|
||||
unsigned int bits_wanted,
|
||||
u16 *bit_off,
|
||||
u16 *bits_found);
|
||||
static inline int ocfs2_block_group_set_bits(struct ocfs2_journal_handle *handle,
|
||||
struct inode *alloc_inode,
|
||||
struct ocfs2_group_desc *bg,
|
||||
|
@ -143,6 +132,64 @@ static u32 ocfs2_bits_per_group(struct ocfs2_chain_list *cl)
|
|||
return (u32)le16_to_cpu(cl->cl_cpg) * (u32)le16_to_cpu(cl->cl_bpc);
|
||||
}
|
||||
|
||||
/* somewhat more expensive than our other checks, so use sparingly. */
|
||||
static int ocfs2_check_group_descriptor(struct super_block *sb,
|
||||
struct ocfs2_dinode *di,
|
||||
struct ocfs2_group_desc *gd)
|
||||
{
|
||||
unsigned int max_bits;
|
||||
|
||||
if (!OCFS2_IS_VALID_GROUP_DESC(gd)) {
|
||||
OCFS2_RO_ON_INVALID_GROUP_DESC(sb, gd);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (di->i_blkno != gd->bg_parent_dinode) {
|
||||
ocfs2_error(sb, "Group descriptor # %llu has bad parent "
|
||||
"pointer (%llu, expected %llu)",
|
||||
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||
(unsigned long long)le64_to_cpu(gd->bg_parent_dinode),
|
||||
(unsigned long long)le64_to_cpu(di->i_blkno));
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
max_bits = le16_to_cpu(di->id2.i_chain.cl_cpg) * le16_to_cpu(di->id2.i_chain.cl_bpc);
|
||||
if (le16_to_cpu(gd->bg_bits) > max_bits) {
|
||||
ocfs2_error(sb, "Group descriptor # %llu has bit count of %u",
|
||||
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||
le16_to_cpu(gd->bg_bits));
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (le16_to_cpu(gd->bg_chain) >=
|
||||
le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) {
|
||||
ocfs2_error(sb, "Group descriptor # %llu has bad chain %u",
|
||||
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||
le16_to_cpu(gd->bg_chain));
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (le16_to_cpu(gd->bg_free_bits_count) > le16_to_cpu(gd->bg_bits)) {
|
||||
ocfs2_error(sb, "Group descriptor # %llu has bit count %u but "
|
||||
"claims that %u are free",
|
||||
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||
le16_to_cpu(gd->bg_bits),
|
||||
le16_to_cpu(gd->bg_free_bits_count));
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (le16_to_cpu(gd->bg_bits) > (8 * le16_to_cpu(gd->bg_size))) {
|
||||
ocfs2_error(sb, "Group descriptor # %llu has bit count %u but "
|
||||
"max bitmap bits of %u",
|
||||
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||
le16_to_cpu(gd->bg_bits),
|
||||
8 * le16_to_cpu(gd->bg_size));
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ocfs2_block_group_fill(struct ocfs2_journal_handle *handle,
|
||||
struct inode *alloc_inode,
|
||||
struct buffer_head *bg_bh,
|
||||
|
@ -663,6 +710,7 @@ static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh,
|
|||
static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb,
|
||||
struct buffer_head *bg_bh,
|
||||
unsigned int bits_wanted,
|
||||
unsigned int total_bits,
|
||||
u16 *bit_off,
|
||||
u16 *bits_found)
|
||||
{
|
||||
|
@ -679,10 +727,8 @@ static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb,
|
|||
found = start = best_offset = best_size = 0;
|
||||
bitmap = bg->bg_bitmap;
|
||||
|
||||
while((offset = ocfs2_find_next_zero_bit(bitmap,
|
||||
le16_to_cpu(bg->bg_bits),
|
||||
start)) != -1) {
|
||||
if (offset == le16_to_cpu(bg->bg_bits))
|
||||
while((offset = ocfs2_find_next_zero_bit(bitmap, total_bits, start)) != -1) {
|
||||
if (offset == total_bits)
|
||||
break;
|
||||
|
||||
if (!ocfs2_test_bg_bit_allocatable(bg_bh, offset)) {
|
||||
|
@ -911,14 +957,35 @@ static int ocfs2_cluster_group_search(struct inode *inode,
|
|||
{
|
||||
int search = -ENOSPC;
|
||||
int ret;
|
||||
struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||
struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||
u16 tmp_off, tmp_found;
|
||||
unsigned int max_bits, gd_cluster_off;
|
||||
|
||||
BUG_ON(!ocfs2_is_cluster_bitmap(inode));
|
||||
|
||||
if (bg->bg_free_bits_count) {
|
||||
if (gd->bg_free_bits_count) {
|
||||
max_bits = le16_to_cpu(gd->bg_bits);
|
||||
|
||||
/* Tail groups in cluster bitmaps which aren't cpg
|
||||
* aligned are prone to partial extention by a failed
|
||||
* fs resize. If the file system resize never got to
|
||||
* update the dinode cluster count, then we don't want
|
||||
* to trust any clusters past it, regardless of what
|
||||
* the group descriptor says. */
|
||||
gd_cluster_off = ocfs2_blocks_to_clusters(inode->i_sb,
|
||||
le64_to_cpu(gd->bg_blkno));
|
||||
if ((gd_cluster_off + max_bits) >
|
||||
OCFS2_I(inode)->ip_clusters) {
|
||||
max_bits = OCFS2_I(inode)->ip_clusters - gd_cluster_off;
|
||||
mlog(0, "Desc %llu, bg_bits %u, clusters %u, use %u\n",
|
||||
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||
le16_to_cpu(gd->bg_bits),
|
||||
OCFS2_I(inode)->ip_clusters, max_bits);
|
||||
}
|
||||
|
||||
ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb),
|
||||
group_bh, bits_wanted,
|
||||
max_bits,
|
||||
&tmp_off, &tmp_found);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -951,17 +1018,109 @@ static int ocfs2_block_group_search(struct inode *inode,
|
|||
if (bg->bg_free_bits_count)
|
||||
ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb),
|
||||
group_bh, bits_wanted,
|
||||
le16_to_cpu(bg->bg_bits),
|
||||
bit_off, bits_found);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ocfs2_alloc_dinode_update_counts(struct inode *inode,
|
||||
struct ocfs2_journal_handle *handle,
|
||||
struct buffer_head *di_bh,
|
||||
u32 num_bits,
|
||||
u16 chain)
|
||||
{
|
||||
int ret;
|
||||
u32 tmp_used;
|
||||
struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data;
|
||||
struct ocfs2_chain_list *cl = (struct ocfs2_chain_list *) &di->id2.i_chain;
|
||||
|
||||
ret = ocfs2_journal_access(handle, inode, di_bh,
|
||||
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||
if (ret < 0) {
|
||||
mlog_errno(ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
tmp_used = le32_to_cpu(di->id1.bitmap1.i_used);
|
||||
di->id1.bitmap1.i_used = cpu_to_le32(num_bits + tmp_used);
|
||||
le32_add_cpu(&cl->cl_recs[chain].c_free, -num_bits);
|
||||
|
||||
ret = ocfs2_journal_dirty(handle, di_bh);
|
||||
if (ret < 0)
|
||||
mlog_errno(ret);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ocfs2_search_one_group(struct ocfs2_alloc_context *ac,
|
||||
u32 bits_wanted,
|
||||
u32 min_bits,
|
||||
u16 *bit_off,
|
||||
unsigned int *num_bits,
|
||||
u64 gd_blkno,
|
||||
u16 *bits_left)
|
||||
{
|
||||
int ret;
|
||||
u16 found;
|
||||
struct buffer_head *group_bh = NULL;
|
||||
struct ocfs2_group_desc *gd;
|
||||
struct inode *alloc_inode = ac->ac_inode;
|
||||
struct ocfs2_journal_handle *handle = ac->ac_handle;
|
||||
|
||||
ret = ocfs2_read_block(OCFS2_SB(alloc_inode->i_sb), gd_blkno,
|
||||
&group_bh, OCFS2_BH_CACHED, alloc_inode);
|
||||
if (ret < 0) {
|
||||
mlog_errno(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
gd = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||
if (!OCFS2_IS_VALID_GROUP_DESC(gd)) {
|
||||
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, gd);
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = ac->ac_group_search(alloc_inode, group_bh, bits_wanted, min_bits,
|
||||
bit_off, &found);
|
||||
if (ret < 0) {
|
||||
if (ret != -ENOSPC)
|
||||
mlog_errno(ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
*num_bits = found;
|
||||
|
||||
ret = ocfs2_alloc_dinode_update_counts(alloc_inode, handle, ac->ac_bh,
|
||||
*num_bits,
|
||||
le16_to_cpu(gd->bg_chain));
|
||||
if (ret < 0) {
|
||||
mlog_errno(ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = ocfs2_block_group_set_bits(handle, alloc_inode, gd, group_bh,
|
||||
*bit_off, *num_bits);
|
||||
if (ret < 0)
|
||||
mlog_errno(ret);
|
||||
|
||||
*bits_left = le16_to_cpu(gd->bg_free_bits_count);
|
||||
|
||||
out:
|
||||
brelse(group_bh);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
||||
u32 bits_wanted,
|
||||
u32 min_bits,
|
||||
u16 *bit_off,
|
||||
unsigned int *num_bits,
|
||||
u64 *bg_blkno)
|
||||
u64 *bg_blkno,
|
||||
u16 *bits_left)
|
||||
{
|
||||
int status;
|
||||
u16 chain, tmp_bits;
|
||||
|
@ -988,9 +1147,9 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
|||
goto bail;
|
||||
}
|
||||
bg = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||
if (!OCFS2_IS_VALID_GROUP_DESC(bg)) {
|
||||
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg);
|
||||
status = -EIO;
|
||||
status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, bg);
|
||||
if (status) {
|
||||
mlog_errno(status);
|
||||
goto bail;
|
||||
}
|
||||
|
||||
|
@ -1018,9 +1177,9 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
|||
goto bail;
|
||||
}
|
||||
bg = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||
if (!OCFS2_IS_VALID_GROUP_DESC(bg)) {
|
||||
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg);
|
||||
status = -EIO;
|
||||
status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, bg);
|
||||
if (status) {
|
||||
mlog_errno(status);
|
||||
goto bail;
|
||||
}
|
||||
}
|
||||
|
@ -1099,6 +1258,7 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
|||
(unsigned long long)fe->i_blkno);
|
||||
|
||||
*bg_blkno = le64_to_cpu(bg->bg_blkno);
|
||||
*bits_left = le16_to_cpu(bg->bg_free_bits_count);
|
||||
bail:
|
||||
if (group_bh)
|
||||
brelse(group_bh);
|
||||
|
@ -1120,6 +1280,8 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
|||
{
|
||||
int status;
|
||||
u16 victim, i;
|
||||
u16 bits_left = 0;
|
||||
u64 hint_blkno = ac->ac_last_group;
|
||||
struct ocfs2_chain_list *cl;
|
||||
struct ocfs2_dinode *fe;
|
||||
|
||||
|
@ -1146,6 +1308,28 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
|||
goto bail;
|
||||
}
|
||||
|
||||
if (hint_blkno) {
|
||||
/* Attempt to short-circuit the usual search mechanism
|
||||
* by jumping straight to the most recently used
|
||||
* allocation group. This helps us mantain some
|
||||
* contiguousness across allocations. */
|
||||
status = ocfs2_search_one_group(ac, bits_wanted, min_bits,
|
||||
bit_off, num_bits,
|
||||
hint_blkno, &bits_left);
|
||||
if (!status) {
|
||||
/* Be careful to update *bg_blkno here as the
|
||||
* caller is expecting it to be filled in, and
|
||||
* ocfs2_search_one_group() won't do that for
|
||||
* us. */
|
||||
*bg_blkno = hint_blkno;
|
||||
goto set_hint;
|
||||
}
|
||||
if (status < 0 && status != -ENOSPC) {
|
||||
mlog_errno(status);
|
||||
goto bail;
|
||||
}
|
||||
}
|
||||
|
||||
cl = (struct ocfs2_chain_list *) &fe->id2.i_chain;
|
||||
|
||||
victim = ocfs2_find_victim_chain(cl);
|
||||
|
@ -1153,9 +1337,9 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
|||
ac->ac_allow_chain_relink = 1;
|
||||
|
||||
status = ocfs2_search_chain(ac, bits_wanted, min_bits, bit_off,
|
||||
num_bits, bg_blkno);
|
||||
num_bits, bg_blkno, &bits_left);
|
||||
if (!status)
|
||||
goto bail;
|
||||
goto set_hint;
|
||||
if (status < 0 && status != -ENOSPC) {
|
||||
mlog_errno(status);
|
||||
goto bail;
|
||||
|
@ -1177,8 +1361,8 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
|||
|
||||
ac->ac_chain = i;
|
||||
status = ocfs2_search_chain(ac, bits_wanted, min_bits,
|
||||
bit_off, num_bits,
|
||||
bg_blkno);
|
||||
bit_off, num_bits, bg_blkno,
|
||||
&bits_left);
|
||||
if (!status)
|
||||
break;
|
||||
if (status < 0 && status != -ENOSPC) {
|
||||
|
@ -1186,8 +1370,19 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
|||
goto bail;
|
||||
}
|
||||
}
|
||||
bail:
|
||||
|
||||
set_hint:
|
||||
if (status != -ENOSPC) {
|
||||
/* If the next search of this group is not likely to
|
||||
* yield a suitable extent, then we reset the last
|
||||
* group hint so as to not waste a disk read */
|
||||
if (bits_left < min_bits)
|
||||
ac->ac_last_group = 0;
|
||||
else
|
||||
ac->ac_last_group = *bg_blkno;
|
||||
}
|
||||
|
||||
bail:
|
||||
mlog_exit(status);
|
||||
return status;
|
||||
}
|
||||
|
@ -1341,7 +1536,7 @@ int ocfs2_claim_clusters(struct ocfs2_super *osb,
|
|||
{
|
||||
int status;
|
||||
unsigned int bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given;
|
||||
u64 bg_blkno;
|
||||
u64 bg_blkno = 0;
|
||||
u16 bg_bit_off;
|
||||
|
||||
mlog_entry_void();
|
||||
|
@ -1494,9 +1689,9 @@ static int ocfs2_free_suballoc_bits(struct ocfs2_journal_handle *handle,
|
|||
}
|
||||
|
||||
group = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||
if (!OCFS2_IS_VALID_GROUP_DESC(group)) {
|
||||
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, group);
|
||||
status = -EIO;
|
||||
status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, group);
|
||||
if (status) {
|
||||
mlog_errno(status);
|
||||
goto bail;
|
||||
}
|
||||
BUG_ON((count + start_bit) > le16_to_cpu(group->bg_bits));
|
||||
|
|
|
@ -49,6 +49,8 @@ struct ocfs2_alloc_context {
|
|||
u16 ac_chain;
|
||||
int ac_allow_chain_relink;
|
||||
group_search_t *ac_group_search;
|
||||
|
||||
u64 ac_last_group;
|
||||
};
|
||||
|
||||
void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac);
|
||||
|
|
|
@ -1442,8 +1442,13 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
|||
|
||||
osb->bitmap_blkno = OCFS2_I(inode)->ip_blkno;
|
||||
|
||||
/* We don't have a cluster lock on the bitmap here because
|
||||
* we're only interested in static information and the extra
|
||||
* complexity at mount time isn't worht it. Don't pass the
|
||||
* inode in to the read function though as we don't want it to
|
||||
* be put in the cache. */
|
||||
status = ocfs2_read_block(osb, osb->bitmap_blkno, &bitmap_bh, 0,
|
||||
inode);
|
||||
NULL);
|
||||
iput(inode);
|
||||
if (status < 0) {
|
||||
mlog_errno(status);
|
||||
|
@ -1452,7 +1457,6 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
|||
|
||||
di = (struct ocfs2_dinode *) bitmap_bh->b_data;
|
||||
osb->bitmap_cpg = le16_to_cpu(di->id2.i_chain.cl_cpg);
|
||||
osb->num_clusters = le32_to_cpu(di->id1.bitmap1.i_total);
|
||||
brelse(bitmap_bh);
|
||||
mlog(0, "cluster bitmap inode: %llu, clusters per group: %u\n",
|
||||
(unsigned long long)osb->bitmap_blkno, osb->bitmap_cpg);
|
||||
|
|
|
@ -115,6 +115,13 @@ static struct inode *udf_alloc_inode(struct super_block *sb)
|
|||
ei = (struct udf_inode_info *)kmem_cache_alloc(udf_inode_cachep, SLAB_KERNEL);
|
||||
if (!ei)
|
||||
return NULL;
|
||||
|
||||
ei->i_unique = 0;
|
||||
ei->i_lenExtents = 0;
|
||||
ei->i_next_alloc_block = 0;
|
||||
ei->i_next_alloc_goal = 0;
|
||||
ei->i_strat4096 = 0;
|
||||
|
||||
return &ei->vfs_inode;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <linux/cpumask.h>
|
||||
|
||||
#ifdef CONFIG_KEXEC
|
||||
|
||||
|
@ -109,7 +110,6 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
|
|||
|
||||
#define MAX_NOTE_BYTES 1024
|
||||
|
||||
#ifdef __powerpc64__
|
||||
extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
|
||||
master to copy new code to 0 */
|
||||
extern int crashing_cpu;
|
||||
|
@ -119,7 +119,6 @@ static inline int kexec_sr_activated(int cpu)
|
|||
{
|
||||
return cpu_isset(cpu,cpus_in_sr);
|
||||
}
|
||||
#endif /* __powerpc64 __ */
|
||||
|
||||
struct kimage;
|
||||
struct pt_regs;
|
||||
|
|
|
@ -170,6 +170,7 @@ extern int rtas_get_sensor(int sensor, int index, int *state);
|
|||
extern int rtas_get_power_level(int powerdomain, int *level);
|
||||
extern int rtas_set_power_level(int powerdomain, int level, int *setlevel);
|
||||
extern int rtas_set_indicator(int indicator, int index, int new_value);
|
||||
extern int rtas_set_indicator_fast(int indicator, int index, int new_value);
|
||||
extern void rtas_progress(char *s, unsigned short hex);
|
||||
extern void rtas_initialize(void);
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef _LINUX_FB_H
|
||||
#define _LINUX_FB_H
|
||||
|
||||
#include <linux/backlight.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
/* Definitions of frame buffers */
|
||||
|
@ -381,6 +380,7 @@ struct fb_cursor {
|
|||
#include <linux/workqueue.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/backlight.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
struct vm_area_struct;
|
||||
|
|
|
@ -155,6 +155,11 @@ static inline int __vlan_hwaccel_rx(struct sk_buff *skb,
|
|||
{
|
||||
struct net_device_stats *stats;
|
||||
|
||||
if (skb_bond_should_drop(skb)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
return NET_RX_DROP;
|
||||
}
|
||||
|
||||
skb->dev = grp->vlan_devices[vlan_tag & VLAN_VID_MASK];
|
||||
if (skb->dev == NULL) {
|
||||
dev_kfree_skb_any(skb);
|
||||
|
|
|
@ -336,6 +336,7 @@ static inline void init_page_count(struct page *page)
|
|||
}
|
||||
|
||||
void put_page(struct page *page);
|
||||
void put_pages_list(struct list_head *pages);
|
||||
|
||||
void split_page(struct page *page, unsigned int order);
|
||||
|
||||
|
|
|
@ -320,6 +320,9 @@ struct net_device
|
|||
#define NETIF_F_TSO_ECN (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT)
|
||||
#define NETIF_F_TSO6 (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT)
|
||||
|
||||
/* List of features with software fallbacks. */
|
||||
#define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6)
|
||||
|
||||
#define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM)
|
||||
#define NETIF_F_ALL_CSUM (NETIF_F_IP_CSUM | NETIF_F_GEN_CSUM)
|
||||
|
||||
|
@ -1012,6 +1015,30 @@ static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
|
|||
unlikely(skb->ip_summed != CHECKSUM_HW));
|
||||
}
|
||||
|
||||
/* On bonding slaves other than the currently active slave, suppress
|
||||
* duplicates except for 802.3ad ETH_P_SLOW and alb non-mcast/bcast.
|
||||
*/
|
||||
static inline int skb_bond_should_drop(struct sk_buff *skb)
|
||||
{
|
||||
struct net_device *dev = skb->dev;
|
||||
struct net_device *master = dev->master;
|
||||
|
||||
if (master &&
|
||||
(dev->priv_flags & IFF_SLAVE_INACTIVE)) {
|
||||
if (master->priv_flags & IFF_MASTER_ALB) {
|
||||
if (skb->pkt_type != PACKET_BROADCAST &&
|
||||
skb->pkt_type != PACKET_MULTICAST)
|
||||
return 0;
|
||||
}
|
||||
if (master->priv_flags & IFF_MASTER_8023AD &&
|
||||
skb->protocol == __constant_htons(ETH_P_SLOW))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _LINUX_DEV_H */
|
||||
|
|
|
@ -297,7 +297,7 @@ static int futex_handle_fault(unsigned long address, int attempt)
|
|||
struct vm_area_struct * vma;
|
||||
struct mm_struct *mm = current->mm;
|
||||
|
||||
if (attempt >= 2 || !(vma = find_vma(mm, address)) ||
|
||||
if (attempt > 2 || !(vma = find_vma(mm, address)) ||
|
||||
vma->vm_start > address || !(vma->vm_flags & VM_WRITE))
|
||||
return -EFAULT;
|
||||
|
||||
|
@ -747,8 +747,10 @@ futex_wake_op(u32 __user *uaddr1, u32 __user *uaddr2,
|
|||
*/
|
||||
if (attempt++) {
|
||||
if (futex_handle_fault((unsigned long)uaddr2,
|
||||
attempt))
|
||||
attempt)) {
|
||||
ret = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
goto retry;
|
||||
}
|
||||
|
||||
|
@ -1322,9 +1324,10 @@ static int do_futex_lock_pi(u32 __user *uaddr, int detect, int trylock,
|
|||
* still holding the mmap_sem.
|
||||
*/
|
||||
if (attempt++) {
|
||||
if (futex_handle_fault((unsigned long)uaddr, attempt))
|
||||
if (futex_handle_fault((unsigned long)uaddr, attempt)) {
|
||||
ret = -EFAULT;
|
||||
goto out_unlock_release_sem;
|
||||
|
||||
}
|
||||
goto retry_locked;
|
||||
}
|
||||
|
||||
|
@ -1506,9 +1509,10 @@ static int futex_unlock_pi(u32 __user *uaddr)
|
|||
* still holding the mmap_sem.
|
||||
*/
|
||||
if (attempt++) {
|
||||
if (futex_handle_fault((unsigned long)uaddr, attempt))
|
||||
if (futex_handle_fault((unsigned long)uaddr, attempt)) {
|
||||
ret = -EFAULT;
|
||||
goto out_unlock;
|
||||
|
||||
}
|
||||
goto retry_locked;
|
||||
}
|
||||
|
||||
|
|
|
@ -187,7 +187,7 @@ switch_hrtimer_base(struct hrtimer *timer, struct hrtimer_base *base)
|
|||
{
|
||||
struct hrtimer_base *new_base;
|
||||
|
||||
new_base = &__get_cpu_var(hrtimer_bases[base->index]);
|
||||
new_base = &__get_cpu_var(hrtimer_bases)[base->index];
|
||||
|
||||
if (base != new_base) {
|
||||
/*
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/nmi.h>
|
||||
#include <linux/kexec.h>
|
||||
#include <linux/debug_locks.h>
|
||||
|
||||
int panic_on_oops;
|
||||
int tainted;
|
||||
|
|
|
@ -1324,46 +1324,19 @@ asmlinkage long sys_getpid(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* Accessing ->group_leader->real_parent is not SMP-safe, it could
|
||||
* change from under us. However, rather than getting any lock
|
||||
* we can use an optimistic algorithm: get the parent
|
||||
* pid, and go back and check that the parent is still
|
||||
* the same. If it has changed (which is extremely unlikely
|
||||
* indeed), we just try again..
|
||||
*
|
||||
* NOTE! This depends on the fact that even if we _do_
|
||||
* get an old value of "parent", we can happily dereference
|
||||
* the pointer (it was and remains a dereferencable kernel pointer
|
||||
* no matter what): we just can't necessarily trust the result
|
||||
* until we know that the parent pointer is valid.
|
||||
*
|
||||
* NOTE2: ->group_leader never changes from under us.
|
||||
* Accessing ->real_parent is not SMP-safe, it could
|
||||
* change from under us. However, we can use a stale
|
||||
* value of ->real_parent under rcu_read_lock(), see
|
||||
* release_task()->call_rcu(delayed_put_task_struct).
|
||||
*/
|
||||
asmlinkage long sys_getppid(void)
|
||||
{
|
||||
int pid;
|
||||
struct task_struct *me = current;
|
||||
struct task_struct *parent;
|
||||
|
||||
parent = me->group_leader->real_parent;
|
||||
for (;;) {
|
||||
pid = parent->tgid;
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
|
||||
{
|
||||
struct task_struct *old = parent;
|
||||
rcu_read_lock();
|
||||
pid = rcu_dereference(current->real_parent)->tgid;
|
||||
rcu_read_unlock();
|
||||
|
||||
/*
|
||||
* Make sure we read the pid before re-reading the
|
||||
* parent pointer:
|
||||
*/
|
||||
smp_rmb();
|
||||
parent = me->group_leader->real_parent;
|
||||
if (old != parent)
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
return pid;
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ struct workqueue_struct {
|
|||
|
||||
/* All the per-cpu workqueues on the system, for hotplug cpu to add/remove
|
||||
threads to each one as cpus come/go. */
|
||||
static DEFINE_SPINLOCK(workqueue_lock);
|
||||
static DEFINE_MUTEX(workqueue_mutex);
|
||||
static LIST_HEAD(workqueues);
|
||||
|
||||
static int singlethread_cpu;
|
||||
|
@ -320,10 +320,10 @@ void fastcall flush_workqueue(struct workqueue_struct *wq)
|
|||
} else {
|
||||
int cpu;
|
||||
|
||||
lock_cpu_hotplug();
|
||||
mutex_lock(&workqueue_mutex);
|
||||
for_each_online_cpu(cpu)
|
||||
flush_cpu_workqueue(per_cpu_ptr(wq->cpu_wq, cpu));
|
||||
unlock_cpu_hotplug();
|
||||
mutex_unlock(&workqueue_mutex);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(flush_workqueue);
|
||||
|
@ -371,8 +371,7 @@ struct workqueue_struct *__create_workqueue(const char *name,
|
|||
}
|
||||
|
||||
wq->name = name;
|
||||
/* We don't need the distraction of CPUs appearing and vanishing. */
|
||||
lock_cpu_hotplug();
|
||||
mutex_lock(&workqueue_mutex);
|
||||
if (singlethread) {
|
||||
INIT_LIST_HEAD(&wq->list);
|
||||
p = create_workqueue_thread(wq, singlethread_cpu);
|
||||
|
@ -381,9 +380,7 @@ struct workqueue_struct *__create_workqueue(const char *name,
|
|||
else
|
||||
wake_up_process(p);
|
||||
} else {
|
||||
spin_lock(&workqueue_lock);
|
||||
list_add(&wq->list, &workqueues);
|
||||
spin_unlock(&workqueue_lock);
|
||||
for_each_online_cpu(cpu) {
|
||||
p = create_workqueue_thread(wq, cpu);
|
||||
if (p) {
|
||||
|
@ -393,7 +390,7 @@ struct workqueue_struct *__create_workqueue(const char *name,
|
|||
destroy = 1;
|
||||
}
|
||||
}
|
||||
unlock_cpu_hotplug();
|
||||
mutex_unlock(&workqueue_mutex);
|
||||
|
||||
/*
|
||||
* Was there any error during startup? If yes then clean up:
|
||||
|
@ -434,17 +431,15 @@ void destroy_workqueue(struct workqueue_struct *wq)
|
|||
flush_workqueue(wq);
|
||||
|
||||
/* We don't need the distraction of CPUs appearing and vanishing. */
|
||||
lock_cpu_hotplug();
|
||||
mutex_lock(&workqueue_mutex);
|
||||
if (is_single_threaded(wq))
|
||||
cleanup_workqueue_thread(wq, singlethread_cpu);
|
||||
else {
|
||||
for_each_online_cpu(cpu)
|
||||
cleanup_workqueue_thread(wq, cpu);
|
||||
spin_lock(&workqueue_lock);
|
||||
list_del(&wq->list);
|
||||
spin_unlock(&workqueue_lock);
|
||||
}
|
||||
unlock_cpu_hotplug();
|
||||
mutex_unlock(&workqueue_mutex);
|
||||
free_percpu(wq->cpu_wq);
|
||||
kfree(wq);
|
||||
}
|
||||
|
@ -515,11 +510,13 @@ int schedule_on_each_cpu(void (*func)(void *info), void *info)
|
|||
if (!works)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_lock(&workqueue_mutex);
|
||||
for_each_online_cpu(cpu) {
|
||||
INIT_WORK(per_cpu_ptr(works, cpu), func, info);
|
||||
__queue_work(per_cpu_ptr(keventd_wq->cpu_wq, cpu),
|
||||
per_cpu_ptr(works, cpu));
|
||||
}
|
||||
mutex_unlock(&workqueue_mutex);
|
||||
flush_workqueue(keventd_wq);
|
||||
free_percpu(works);
|
||||
return 0;
|
||||
|
@ -635,6 +632,7 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb,
|
|||
|
||||
switch (action) {
|
||||
case CPU_UP_PREPARE:
|
||||
mutex_lock(&workqueue_mutex);
|
||||
/* Create a new workqueue thread for it. */
|
||||
list_for_each_entry(wq, &workqueues, list) {
|
||||
if (!create_workqueue_thread(wq, hotcpu)) {
|
||||
|
@ -653,6 +651,7 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb,
|
|||
kthread_bind(cwq->thread, hotcpu);
|
||||
wake_up_process(cwq->thread);
|
||||
}
|
||||
mutex_unlock(&workqueue_mutex);
|
||||
break;
|
||||
|
||||
case CPU_UP_CANCELED:
|
||||
|
@ -664,6 +663,15 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb,
|
|||
any_online_cpu(cpu_online_map));
|
||||
cleanup_workqueue_thread(wq, hotcpu);
|
||||
}
|
||||
mutex_unlock(&workqueue_mutex);
|
||||
break;
|
||||
|
||||
case CPU_DOWN_PREPARE:
|
||||
mutex_lock(&workqueue_mutex);
|
||||
break;
|
||||
|
||||
case CPU_DOWN_FAILED:
|
||||
mutex_unlock(&workqueue_mutex);
|
||||
break;
|
||||
|
||||
case CPU_DEAD:
|
||||
|
@ -671,6 +679,7 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb,
|
|||
cleanup_workqueue_thread(wq, hotcpu);
|
||||
list_for_each_entry(wq, &workqueues, list)
|
||||
take_over_work(wq, hotcpu);
|
||||
mutex_unlock(&workqueue_mutex);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
20
mm/swap.c
20
mm/swap.c
|
@ -54,6 +54,26 @@ void put_page(struct page *page)
|
|||
}
|
||||
EXPORT_SYMBOL(put_page);
|
||||
|
||||
/**
|
||||
* put_pages_list(): release a list of pages
|
||||
*
|
||||
* Release a list of pages which are strung together on page.lru. Currently
|
||||
* used by read_cache_pages() and related error recovery code.
|
||||
*
|
||||
* @pages: list of pages threaded on page->lru
|
||||
*/
|
||||
void put_pages_list(struct list_head *pages)
|
||||
{
|
||||
while (!list_empty(pages)) {
|
||||
struct page *victim;
|
||||
|
||||
victim = list_entry(pages->prev, struct page, lru);
|
||||
list_del(&victim->lru);
|
||||
page_cache_release(victim);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(put_pages_list);
|
||||
|
||||
/*
|
||||
* Writeback is about to end against a page which has been marked for immediate
|
||||
* reclaim. If it still appears to be reclaimable, move it to the tail of the
|
||||
|
|
|
@ -507,7 +507,7 @@ int __init atm_proc_init(void)
|
|||
goto out;
|
||||
}
|
||||
|
||||
void __exit atm_proc_exit(void)
|
||||
void atm_proc_exit(void)
|
||||
{
|
||||
atm_proc_dirs_remove();
|
||||
}
|
||||
|
|
|
@ -386,12 +386,17 @@ void br_features_recompute(struct net_bridge *br)
|
|||
checksum = 0;
|
||||
|
||||
if (feature & NETIF_F_GSO)
|
||||
feature |= NETIF_F_TSO;
|
||||
feature |= NETIF_F_GSO_SOFTWARE;
|
||||
feature |= NETIF_F_GSO;
|
||||
|
||||
features &= feature;
|
||||
}
|
||||
|
||||
if (!(checksum & NETIF_F_ALL_CSUM))
|
||||
features &= ~NETIF_F_SG;
|
||||
if (!(features & NETIF_F_SG))
|
||||
features &= ~NETIF_F_GSO_MASK;
|
||||
|
||||
br->dev->features = features | checksum | NETIF_F_LLTX |
|
||||
NETIF_F_GSO_ROBUST;
|
||||
}
|
||||
|
|
|
@ -116,6 +116,7 @@
|
|||
#include <linux/audit.h>
|
||||
#include <linux/dmaengine.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/ctype.h>
|
||||
|
||||
/*
|
||||
* 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
|
|||
* @name: name string
|
||||
*
|
||||
* Network device names need to be valid file names to
|
||||
* to allow sysfs to work
|
||||
* to allow sysfs to work. We also disallow any kind of
|
||||
* whitespace.
|
||||
*/
|
||||
int dev_valid_name(const char *name)
|
||||
{
|
||||
return !(*name == '\0'
|
||||
|| !strcmp(name, ".")
|
||||
|| !strcmp(name, "..")
|
||||
|| strchr(name, '/'));
|
||||
if (*name == '\0')
|
||||
return 0;
|
||||
if (!strcmp(name, ".") || !strcmp(name, ".."))
|
||||
return 0;
|
||||
|
||||
while (*name) {
|
||||
if (*name == '/' || isspace(*name))
|
||||
return 0;
|
||||
name++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1619,26 +1628,10 @@ static inline struct net_device *skb_bond(struct sk_buff *skb)
|
|||
struct net_device *dev = skb->dev;
|
||||
|
||||
if (dev->master) {
|
||||
/*
|
||||
* On bonding slaves other than the currently active
|
||||
* slave, suppress duplicates except for 802.3ad
|
||||
* ETH_P_SLOW and alb non-mcast/bcast.
|
||||
*/
|
||||
if (dev->priv_flags & IFF_SLAVE_INACTIVE) {
|
||||
if (dev->master->priv_flags & IFF_MASTER_ALB) {
|
||||
if (skb->pkt_type != PACKET_BROADCAST &&
|
||||
skb->pkt_type != PACKET_MULTICAST)
|
||||
goto keep;
|
||||
}
|
||||
|
||||
if (dev->master->priv_flags & IFF_MASTER_8023AD &&
|
||||
skb->protocol == __constant_htons(ETH_P_SLOW))
|
||||
goto keep;
|
||||
|
||||
if (skb_bond_should_drop(skb)) {
|
||||
kfree_skb(skb);
|
||||
return NULL;
|
||||
}
|
||||
keep:
|
||||
skb->dev = dev->master;
|
||||
}
|
||||
|
||||
|
|
|
@ -130,12 +130,13 @@ void __init net_random_init(void)
|
|||
static int net_random_reseed(void)
|
||||
{
|
||||
int i;
|
||||
unsigned long seed[NR_CPUS];
|
||||
unsigned long seed;
|
||||
|
||||
get_random_bytes(seed, sizeof(seed));
|
||||
for_each_possible_cpu(i) {
|
||||
struct nrnd_state *state = &per_cpu(net_rand_state,i);
|
||||
__net_srandom(state, seed[i]);
|
||||
|
||||
get_random_bytes(&seed, sizeof(seed));
|
||||
__net_srandom(state, seed);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -159,7 +159,7 @@ void free_fib_info(struct fib_info *fi)
|
|||
|
||||
void fib_release_info(struct fib_info *fi)
|
||||
{
|
||||
write_lock(&fib_info_lock);
|
||||
write_lock_bh(&fib_info_lock);
|
||||
if (fi && --fi->fib_treeref == 0) {
|
||||
hlist_del(&fi->fib_hash);
|
||||
if (fi->fib_prefsrc)
|
||||
|
@ -172,7 +172,7 @@ void fib_release_info(struct fib_info *fi)
|
|||
fi->fib_dead = 1;
|
||||
fib_info_put(fi);
|
||||
}
|
||||
write_unlock(&fib_info_lock);
|
||||
write_unlock_bh(&fib_info_lock);
|
||||
}
|
||||
|
||||
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,
|
|||
unsigned int old_size = fib_hash_size;
|
||||
unsigned int i, bytes;
|
||||
|
||||
write_lock(&fib_info_lock);
|
||||
write_lock_bh(&fib_info_lock);
|
||||
old_info_hash = fib_info_hash;
|
||||
old_laddrhash = fib_info_laddrhash;
|
||||
fib_hash_size = new_size;
|
||||
|
@ -639,7 +639,7 @@ static void fib_hash_move(struct hlist_head *new_info_hash,
|
|||
}
|
||||
fib_info_laddrhash = new_laddrhash;
|
||||
|
||||
write_unlock(&fib_info_lock);
|
||||
write_unlock_bh(&fib_info_lock);
|
||||
|
||||
bytes = old_size * sizeof(struct hlist_head *);
|
||||
fib_hash_free(old_info_hash, bytes);
|
||||
|
@ -820,7 +820,7 @@ fib_create_info(const struct rtmsg *r, struct kern_rta *rta,
|
|||
|
||||
fi->fib_treeref++;
|
||||
atomic_inc(&fi->fib_clntref);
|
||||
write_lock(&fib_info_lock);
|
||||
write_lock_bh(&fib_info_lock);
|
||||
hlist_add_head(&fi->fib_hash,
|
||||
&fib_info_hash[fib_info_hashfn(fi)]);
|
||||
if (fi->fib_prefsrc) {
|
||||
|
@ -839,7 +839,7 @@ fib_create_info(const struct rtmsg *r, struct kern_rta *rta,
|
|||
head = &fib_info_devhash[hash];
|
||||
hlist_add_head(&nh->nh_hash, head);
|
||||
} endfor_nexthops(fi)
|
||||
write_unlock(&fib_info_lock);
|
||||
write_unlock_bh(&fib_info_lock);
|
||||
return fi;
|
||||
|
||||
err_inval:
|
||||
|
|
|
@ -1793,29 +1793,35 @@ int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr)
|
|||
struct in_device *in_dev;
|
||||
u32 group = imr->imr_multiaddr.s_addr;
|
||||
u32 ifindex;
|
||||
int ret = -EADDRNOTAVAIL;
|
||||
|
||||
rtnl_lock();
|
||||
in_dev = ip_mc_find_dev(imr);
|
||||
if (!in_dev) {
|
||||
rtnl_unlock();
|
||||
return -ENODEV;
|
||||
}
|
||||
ifindex = imr->imr_ifindex;
|
||||
for (imlp = &inet->mc_list; (iml = *imlp) != NULL; imlp = &iml->next) {
|
||||
if (iml->multi.imr_multiaddr.s_addr == group &&
|
||||
iml->multi.imr_ifindex == ifindex) {
|
||||
(void) ip_mc_leave_src(sk, iml, in_dev);
|
||||
if (iml->multi.imr_multiaddr.s_addr != group)
|
||||
continue;
|
||||
if (ifindex) {
|
||||
if (iml->multi.imr_ifindex != ifindex)
|
||||
continue;
|
||||
} else if (imr->imr_address.s_addr && imr->imr_address.s_addr !=
|
||||
iml->multi.imr_address.s_addr)
|
||||
continue;
|
||||
|
||||
*imlp = iml->next;
|
||||
(void) ip_mc_leave_src(sk, iml, in_dev);
|
||||
|
||||
*imlp = iml->next;
|
||||
|
||||
if (in_dev)
|
||||
ip_mc_dec_group(in_dev, group);
|
||||
rtnl_unlock();
|
||||
sock_kfree_s(sk, iml, sizeof(*iml));
|
||||
return 0;
|
||||
}
|
||||
rtnl_unlock();
|
||||
sock_kfree_s(sk, iml, sizeof(*iml));
|
||||
return 0;
|
||||
}
|
||||
if (!in_dev)
|
||||
ret = -ENODEV;
|
||||
rtnl_unlock();
|
||||
return -EADDRNOTAVAIL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ip_mc_source(int add, int omode, struct sock *sk, struct
|
||||
|
@ -2199,13 +2205,13 @@ void ip_mc_drop_socket(struct sock *sk)
|
|||
struct in_device *in_dev;
|
||||
inet->mc_list = iml->next;
|
||||
|
||||
if ((in_dev = inetdev_by_index(iml->multi.imr_ifindex)) != NULL) {
|
||||
(void) ip_mc_leave_src(sk, iml, in_dev);
|
||||
in_dev = inetdev_by_index(iml->multi.imr_ifindex);
|
||||
(void) ip_mc_leave_src(sk, iml, in_dev);
|
||||
if (in_dev != NULL) {
|
||||
ip_mc_dec_group(in_dev, iml->multi.imr_multiaddr.s_addr);
|
||||
in_dev_put(in_dev);
|
||||
}
|
||||
sock_kfree_s(sk, iml, sizeof(*iml));
|
||||
|
||||
}
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
|
|
@ -415,21 +415,18 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
cb->args[0], *id);
|
||||
|
||||
read_lock_bh(&ip_conntrack_lock);
|
||||
last = (struct ip_conntrack *)cb->args[1];
|
||||
for (; cb->args[0] < ip_conntrack_htable_size; cb->args[0]++) {
|
||||
restart:
|
||||
last = (struct ip_conntrack *)cb->args[1];
|
||||
list_for_each_prev(i, &ip_conntrack_hash[cb->args[0]]) {
|
||||
h = (struct ip_conntrack_tuple_hash *) i;
|
||||
if (DIRECTION(h) != IP_CT_DIR_ORIGINAL)
|
||||
continue;
|
||||
ct = tuplehash_to_ctrack(h);
|
||||
if (last != NULL) {
|
||||
if (ct == last) {
|
||||
ip_conntrack_put(last);
|
||||
cb->args[1] = 0;
|
||||
last = NULL;
|
||||
} else
|
||||
if (cb->args[1]) {
|
||||
if (ct != last)
|
||||
continue;
|
||||
cb->args[1] = 0;
|
||||
}
|
||||
if (ctnetlink_fill_info(skb, NETLINK_CB(cb->skb).pid,
|
||||
cb->nlh->nlmsg_seq,
|
||||
|
@ -440,17 +437,17 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
goto out;
|
||||
}
|
||||
}
|
||||
if (last != NULL) {
|
||||
ip_conntrack_put(last);
|
||||
if (cb->args[1]) {
|
||||
cb->args[1] = 0;
|
||||
goto restart;
|
||||
}
|
||||
}
|
||||
out:
|
||||
read_unlock_bh(&ip_conntrack_lock);
|
||||
if (last)
|
||||
ip_conntrack_put(last);
|
||||
|
||||
DEBUGP("leaving, last bucket=%lu id=%u\n", cb->args[0], *id);
|
||||
|
||||
return skb->len;
|
||||
}
|
||||
|
||||
|
|
|
@ -230,7 +230,7 @@ ipt_do_table(struct sk_buff **pskb,
|
|||
const char *indev, *outdev;
|
||||
void *table_base;
|
||||
struct ipt_entry *e, *back;
|
||||
struct xt_table_info *private = table->private;
|
||||
struct xt_table_info *private;
|
||||
|
||||
/* Initialization */
|
||||
ip = (*pskb)->nh.iph;
|
||||
|
@ -247,6 +247,7 @@ ipt_do_table(struct sk_buff **pskb,
|
|||
|
||||
read_lock_bh(&table->lock);
|
||||
IP_NF_ASSERT(table->valid_hooks & (1 << hook));
|
||||
private = table->private;
|
||||
table_base = (void *)private->entries[smp_processor_id()];
|
||||
e = get_entry(table_base, private->hook_entry[hook]);
|
||||
|
||||
|
|
|
@ -712,6 +712,11 @@ static int icmpv6_rcv(struct sk_buff **pskb)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Special lock-class for __icmpv6_socket:
|
||||
*/
|
||||
static struct lock_class_key icmpv6_socket_sk_dst_lock_key;
|
||||
|
||||
int __init icmpv6_init(struct net_proto_family *ops)
|
||||
{
|
||||
struct sock *sk;
|
||||
|
@ -730,6 +735,14 @@ int __init icmpv6_init(struct net_proto_family *ops)
|
|||
|
||||
sk = per_cpu(__icmpv6_socket, i)->sk;
|
||||
sk->sk_allocation = GFP_ATOMIC;
|
||||
/*
|
||||
* Split off their lock-class, because sk->sk_dst_lock
|
||||
* gets used from softirqs, which is safe for
|
||||
* __icmpv6_socket (because those never get directly used
|
||||
* via userspace syscalls), but unsafe for normal sockets.
|
||||
*/
|
||||
lockdep_set_class(&sk->sk_dst_lock,
|
||||
&icmpv6_socket_sk_dst_lock_key);
|
||||
|
||||
/* Enough space for 2 64K ICMP packets, including
|
||||
* sk_buff struct overhead.
|
||||
|
|
|
@ -268,13 +268,14 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, struct in6_addr *addr)
|
|||
if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) {
|
||||
struct inet6_dev *idev = in6_dev_get(dev);
|
||||
|
||||
(void) ip6_mc_leave_src(sk, mc_lst, idev);
|
||||
if (idev) {
|
||||
(void) ip6_mc_leave_src(sk,mc_lst,idev);
|
||||
__ipv6_dev_mc_dec(idev, &mc_lst->addr);
|
||||
in6_dev_put(idev);
|
||||
}
|
||||
dev_put(dev);
|
||||
}
|
||||
} else
|
||||
(void) ip6_mc_leave_src(sk, mc_lst, NULL);
|
||||
sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
|
||||
return 0;
|
||||
}
|
||||
|
@ -334,13 +335,14 @@ void ipv6_sock_mc_close(struct sock *sk)
|
|||
if (dev) {
|
||||
struct inet6_dev *idev = in6_dev_get(dev);
|
||||
|
||||
(void) ip6_mc_leave_src(sk, mc_lst, idev);
|
||||
if (idev) {
|
||||
(void) ip6_mc_leave_src(sk, mc_lst, idev);
|
||||
__ipv6_dev_mc_dec(idev, &mc_lst->addr);
|
||||
in6_dev_put(idev);
|
||||
}
|
||||
dev_put(dev);
|
||||
}
|
||||
} else
|
||||
(void) ip6_mc_leave_src(sk, mc_lst, NULL);
|
||||
|
||||
sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
|
||||
|
||||
|
|
|
@ -429,9 +429,9 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
cb->args[0], *id);
|
||||
|
||||
read_lock_bh(&nf_conntrack_lock);
|
||||
last = (struct nf_conn *)cb->args[1];
|
||||
for (; cb->args[0] < nf_conntrack_htable_size; cb->args[0]++) {
|
||||
restart:
|
||||
last = (struct nf_conn *)cb->args[1];
|
||||
list_for_each_prev(i, &nf_conntrack_hash[cb->args[0]]) {
|
||||
h = (struct nf_conntrack_tuple_hash *) i;
|
||||
if (DIRECTION(h) != IP_CT_DIR_ORIGINAL)
|
||||
|
@ -442,13 +442,10 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
* then dump everything. */
|
||||
if (l3proto && L3PROTO(ct) != l3proto)
|
||||
continue;
|
||||
if (last != NULL) {
|
||||
if (ct == last) {
|
||||
nf_ct_put(last);
|
||||
cb->args[1] = 0;
|
||||
last = NULL;
|
||||
} else
|
||||
if (cb->args[1]) {
|
||||
if (ct != last)
|
||||
continue;
|
||||
cb->args[1] = 0;
|
||||
}
|
||||
if (ctnetlink_fill_info(skb, NETLINK_CB(cb->skb).pid,
|
||||
cb->nlh->nlmsg_seq,
|
||||
|
@ -459,17 +456,17 @@ ctnetlink_dump_table(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
goto out;
|
||||
}
|
||||
}
|
||||
if (last != NULL) {
|
||||
nf_ct_put(last);
|
||||
if (cb->args[1]) {
|
||||
cb->args[1] = 0;
|
||||
goto restart;
|
||||
}
|
||||
}
|
||||
out:
|
||||
read_unlock_bh(&nf_conntrack_lock);
|
||||
if (last)
|
||||
nf_ct_put(last);
|
||||
|
||||
DEBUGP("leaving, last bucket=%lu id=%u\n", cb->args[0], *id);
|
||||
|
||||
return skb->len;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include <linux/module.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/netfilter_bridge.h>
|
||||
#include <linux/netfilter/xt_physdev.h>
|
||||
#include <linux/netfilter/x_tables.h>
|
||||
#include <linux/netfilter_bridge.h>
|
||||
|
|
|
@ -796,7 +796,7 @@ static int __init init_u32(void)
|
|||
{
|
||||
printk("u32 classifier\n");
|
||||
#ifdef CONFIG_CLS_U32_PERF
|
||||
printk(" Perfomance counters on\n");
|
||||
printk(" Performance counters on\n");
|
||||
#endif
|
||||
#ifdef CONFIG_NET_CLS_POLICE
|
||||
printk(" OLD policer on \n");
|
||||
|
|
|
@ -391,7 +391,7 @@ static void do_input(char *alias,
|
|||
unsigned int i;
|
||||
|
||||
for (i = min; i < max; i++)
|
||||
if (arr[i / BITS_PER_LONG] & (1 << (i%BITS_PER_LONG)))
|
||||
if (arr[i / BITS_PER_LONG] & (1L << (i%BITS_PER_LONG)))
|
||||
sprintf(alias + strlen(alias), "%X,*", i);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue